import React, { useEffect, useState } from 'react'; import { Text } from '@/components/shared/Themed'; import Card from '@/components/shared/Card'; import styled from '@emotion/native'; import { formatTime } from '@/components/shared/business/timeHelpers'; import { useNavigation } from '@react-navigation/native'; import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { RootStackParamList } from '@/app/RootStackParamList'; import { VerticalSpacer } from '@/components/shared/Spacers'; import { TimerPickerModal } from 'react-native-timer-picker'; import Button from '@/components/shared/Button'; import NumberSelector from '@/components/shared/NumberSelector'; import { i18n } from '@/app/i18n/i18n'; import { useTimerContext } from '@/app/store/TimerContext'; import { ActivityIndicator } from 'react-native'; type NavigationProp = NativeStackNavigationProp; const t = i18n.scoped('dashboard'); export default function Dashboard() { const navigation = useNavigation(); const { timerState, isLoading, updateReps, updateWorkTime, updateRestTime, updatePreparationTime } = useTimerContext(); const [showWorkTimePicker, setShowWorkTimePicker] = useState(false); const [showPreparationTimePicker, setShowPreparationTimePicker] = useState(false); const [showRestTimePicker, setShowRestTimePicker] = useState(false); // Local variables for UI changes const [localPreparationTime, setLocalPreparationTime] = useState(timerState.preparationTime); const [localReps, setLocalReps] = useState(timerState.reps); const [localWorkTime, setLocalWorkTime] = useState(timerState.workTime); const [localRestTime, setLocalRestTime] = useState(timerState.restTime); // Update local states when store data is loaded useEffect(() => { console.log('timerState', timerState); if (!isLoading) { setLocalReps(timerState.reps); setLocalWorkTime(timerState.workTime); setLocalRestTime(timerState.restTime); setLocalPreparationTime(timerState.preparationTime); } }, [isLoading, timerState]); // Handle repetition changes const handleRepsChange = (value: number) => { setLocalReps(value); updateReps(value); }; const totalWorkTime: string = formatTime((localWorkTime + localRestTime) * localReps); if (isLoading) { return ( Chargement... ); } return ( {i18n.t('appTitle')} setShowPreparationTimePicker(true)}> {t('preparation')} {formatTime(localPreparationTime)} { const newPreparationTime = pickedDuration.minutes * 60 + pickedDuration.seconds; setLocalPreparationTime(newPreparationTime); updatePreparationTime(newPreparationTime); setShowPreparationTimePicker(false); }} modalTitle={t('setPreparationTime')} onCancel={() => setShowPreparationTimePicker(false)} closeOnOverlayPress styles={{ theme: "dark", }} initialValue={{ minutes: Math.floor(timerState.preparationTime / 60), seconds: timerState.preparationTime % 60 }} modalProps={{ overlayOpacity: 0.2, }} /> setShowWorkTimePicker(true)}> {t('fight')} {formatTime(localWorkTime)} { const newWorkTime = pickedDuration.minutes * 60 + pickedDuration.seconds; setLocalWorkTime(newWorkTime); updateWorkTime(newWorkTime); setShowWorkTimePicker(false); }} modalTitle={t('setWorkTime')} onCancel={() => setShowWorkTimePicker(false)} closeOnOverlayPress styles={{ theme: "dark", }} initialValue={{ minutes: Math.floor(timerState.workTime / 60), seconds: timerState.workTime % 60 }} modalProps={{ overlayOpacity: 0.2, }} /> setShowRestTimePicker(true)}> {t('rest')} {formatTime(localRestTime)} { const newRestTime = pickedDuration.minutes * 60 + pickedDuration.seconds; setLocalRestTime(newRestTime); updateRestTime(newRestTime); setShowRestTimePicker(false); }} modalTitle={t('setRestTime')} onCancel={() => setShowRestTimePicker(false)} closeOnOverlayPress initialValue={{ minutes: Math.floor(timerState.restTime / 60), seconds: timerState.restTime % 60 }} styles={{ theme: "dark", }} modalProps={{ overlayOpacity: 0.2, }} /> {t('repetition')} {t('totalTime')}: {totalWorkTime}