2024-10-13 11:29:36 +00:00
|
|
|
import React, { 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';
|
2024-10-13 22:20:52 +00:00
|
|
|
import { i18n } from '@/app/i18n/i18n';
|
2024-10-13 11:29:36 +00:00
|
|
|
|
2024-10-13 21:18:08 +00:00
|
|
|
type NavigationProp = NativeStackNavigationProp<RootStackParamList, 'Timer'>;
|
2024-10-13 11:29:36 +00:00
|
|
|
|
2024-10-13 22:20:52 +00:00
|
|
|
const t = i18n.scoped('dashboard');
|
|
|
|
|
|
2024-10-13 11:29:36 +00:00
|
|
|
export default function Dashboard() {
|
|
|
|
|
const navigation = useNavigation<NavigationProp>();
|
|
|
|
|
|
|
|
|
|
const [reps, setReps] = useState<number>(1);
|
|
|
|
|
const [workTime, setWorkTime] = useState<number>(0);
|
|
|
|
|
const [restTime, setRestTime] = useState<number>(0);
|
|
|
|
|
const [showWorkTimePicker, setShowWorkTimePicker] = useState<boolean>(false);
|
|
|
|
|
const [showRestTimePicker, setShowRestTimePicker] = useState<boolean>(false);
|
|
|
|
|
|
|
|
|
|
const totalWorkTime: string = formatTime((workTime + restTime) * reps);
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<Container>
|
2024-10-13 22:20:52 +00:00
|
|
|
<Title>{i18n.t('appTitle')}</Title>
|
2024-10-13 11:29:36 +00:00
|
|
|
|
|
|
|
|
<VerticalSpacer heightUnits={8} />
|
|
|
|
|
|
|
|
|
|
<CardContainer>
|
|
|
|
|
<Card backgroundColor="black">
|
|
|
|
|
<CardTextContainer>
|
2024-10-13 22:20:52 +00:00
|
|
|
<CustomText>{t('repetition')}</CustomText>
|
2024-10-13 11:29:36 +00:00
|
|
|
<NumberSelector reps={reps} setReps={setReps} />
|
|
|
|
|
</CardTextContainer>
|
|
|
|
|
</Card>
|
|
|
|
|
|
|
|
|
|
<Card backgroundColor="red" onPress={() => setShowWorkTimePicker(true)}>
|
|
|
|
|
<CardTextContainer>
|
2024-10-13 22:20:52 +00:00
|
|
|
<CustomText>{t('fight')}</CustomText>
|
2024-10-13 11:29:36 +00:00
|
|
|
<CustomText>{formatTime(workTime)}</CustomText>
|
|
|
|
|
</CardTextContainer>
|
|
|
|
|
</Card>
|
|
|
|
|
|
|
|
|
|
<TimerPickerModal
|
|
|
|
|
hideHours
|
|
|
|
|
visible={showWorkTimePicker}
|
|
|
|
|
setIsVisible={setShowWorkTimePicker}
|
|
|
|
|
onConfirm={(pickedDuration: any) => {
|
|
|
|
|
setWorkTime(pickedDuration.minutes * 60 + pickedDuration.seconds);
|
|
|
|
|
setShowWorkTimePicker(false);
|
|
|
|
|
}}
|
2024-10-13 22:20:52 +00:00
|
|
|
modalTitle={t('setWorkTime')}
|
2024-10-13 11:29:36 +00:00
|
|
|
onCancel={() => setShowWorkTimePicker(false)}
|
|
|
|
|
closeOnOverlayPress
|
|
|
|
|
styles={{
|
|
|
|
|
theme: "dark",
|
|
|
|
|
}}
|
|
|
|
|
modalProps={{
|
|
|
|
|
overlayOpacity: 0.2,
|
|
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
|
|
<Card backgroundColor="green" onPress={() => setShowRestTimePicker(true)}>
|
|
|
|
|
<CardTextContainer>
|
2024-10-13 22:20:52 +00:00
|
|
|
<CustomText>{t('rest')}</CustomText>
|
2024-10-13 11:29:36 +00:00
|
|
|
<CustomText>{formatTime(restTime)}</CustomText>
|
|
|
|
|
</CardTextContainer>
|
|
|
|
|
</Card>
|
|
|
|
|
|
|
|
|
|
<TimerPickerModal
|
|
|
|
|
hideHours
|
|
|
|
|
visible={showRestTimePicker}
|
|
|
|
|
setIsVisible={setShowRestTimePicker}
|
|
|
|
|
onConfirm={(pickedDuration: any) => {
|
|
|
|
|
setRestTime(pickedDuration.minutes * 60 + pickedDuration.seconds);
|
|
|
|
|
setShowRestTimePicker(false);
|
|
|
|
|
}}
|
2024-10-13 22:20:52 +00:00
|
|
|
modalTitle={t('setRestTime')}
|
2024-10-13 11:29:36 +00:00
|
|
|
onCancel={() => setShowRestTimePicker(false)}
|
|
|
|
|
closeOnOverlayPress
|
|
|
|
|
styles={{
|
|
|
|
|
theme: "dark",
|
|
|
|
|
}}
|
|
|
|
|
modalProps={{
|
|
|
|
|
overlayOpacity: 0.2,
|
|
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
</CardContainer>
|
|
|
|
|
|
|
|
|
|
<VerticalSpacer heightUnits={5} />
|
2024-10-13 22:20:52 +00:00
|
|
|
<Text>{t('totalTime')}: {totalWorkTime}</Text>
|
2024-10-13 11:29:36 +00:00
|
|
|
|
|
|
|
|
<VerticalSpacer heightUnits={5} />
|
|
|
|
|
|
2024-10-13 22:20:52 +00:00
|
|
|
<Button label={t('begin')} onPress={() => navigation.navigate('Timer', { reps, restTime, workTime})} />
|
2024-10-13 21:18:08 +00:00
|
|
|
|
|
|
|
|
<VerticalSpacer heightUnits={5} />
|
|
|
|
|
|
2024-10-13 22:20:52 +00:00
|
|
|
<Button label={t('settings')} onPress={() => navigation.navigate('Settings')} />
|
2024-10-13 11:29:36 +00:00
|
|
|
</Container>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const Title = styled(Text)(({ theme }) => ({
|
|
|
|
|
textAlign: 'center',
|
|
|
|
|
fontSize: 40,
|
|
|
|
|
fontWeight: 'bold',
|
|
|
|
|
color: theme.colors.black
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
const Container = styled.View({
|
|
|
|
|
padding: 20
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
const CardTextContainer = styled.View({
|
|
|
|
|
flexDirection: 'row',
|
|
|
|
|
justifyContent: 'space-between',
|
|
|
|
|
alignItems: 'center'
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
const CardContainer = styled.View({
|
|
|
|
|
flexDirection: 'column',
|
|
|
|
|
gap: 10
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
const CustomText = styled(Text)(({ theme }) => ({
|
|
|
|
|
fontSize: 20,
|
|
|
|
|
fontWeight: 'bold',
|
|
|
|
|
textAlign: 'center',
|
|
|
|
|
color: theme.colors.white
|
|
|
|
|
}))
|
|
|
|
|
|
|
|
|
|
|