Front: Isolate Metronone Switch for reactive state
This commit is contained in:
@@ -1,8 +1,21 @@
|
|||||||
/* eslint-disable @typescript-eslint/no-var-requires */
|
/* eslint-disable @typescript-eslint/no-var-requires */
|
||||||
import { useEffect, useRef } from 'react';
|
import { useEffect, useRef, useState } from 'react';
|
||||||
import { Slider, Switch, Text, View } from 'native-base';
|
import { Slider, Switch, Text, View } from 'native-base';
|
||||||
import { Audio } from 'expo-av';
|
import { Audio } from 'expo-av';
|
||||||
|
|
||||||
|
const MetronomeToggle = (props: { enabled: boolean, onToggle: (stateAfterToggle: boolean) => void }) => {
|
||||||
|
const [isEnabled, setEnabled] = useState(false);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setEnabled(props.enabled)
|
||||||
|
}, [props.enabled])
|
||||||
|
return <Switch value={isEnabled} onToggle={() => {
|
||||||
|
console.log(isEnabled);
|
||||||
|
props.onToggle(!isEnabled);
|
||||||
|
setEnabled(!isEnabled);
|
||||||
|
}} />
|
||||||
|
}
|
||||||
|
|
||||||
export const Metronome = ({ paused = false, bpm }: { paused?: boolean; bpm: number }) => {
|
export const Metronome = ({ paused = false, bpm }: { paused?: boolean; bpm: number }) => {
|
||||||
const audio = useRef<Audio.Sound | null>(null);
|
const audio = useRef<Audio.Sound | null>(null);
|
||||||
const enabled = useRef<boolean>(false);
|
const enabled = useRef<boolean>(false);
|
||||||
@@ -37,7 +50,7 @@ export const Metronome = ({ paused = false, bpm }: { paused?: boolean; bpm: numb
|
|||||||
<View>
|
<View>
|
||||||
<Text>Metronome Settings</Text>
|
<Text>Metronome Settings</Text>
|
||||||
<Text>Enabled:</Text>
|
<Text>Enabled:</Text>
|
||||||
<Switch value={enabled.current} onToggle={() => (enabled.current = !enabled.current)} />
|
<MetronomeToggle enabled={enabled.current} onToggle={(e) => (enabled.current = e)} />
|
||||||
<Text>Volume:</Text>
|
<Text>Volume:</Text>
|
||||||
<Slider
|
<Slider
|
||||||
maxWidth={'500px'}
|
maxWidth={'500px'}
|
||||||
|
|||||||
Reference in New Issue
Block a user