Front: Isolate Metronone Switch for reactive state

This commit is contained in:
Arthur Jamet
2023-10-28 08:04:23 +02:00
parent 13c39213aa
commit 363ee7356d

View File

@@ -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'}