2022-10-23 06:13:58 +00:00
|
|
|
import {RouteProp, useNavigation, useRoute} from '@react-navigation/native';
|
2022-10-28 05:36:47 +00:00
|
|
|
import {useCallback} from 'react';
|
2022-08-28 05:25:31 +00:00
|
|
|
import {NativeModules, View} from 'react-native';
|
2022-09-16 09:07:02 +00:00
|
|
|
import {PADDING} from './constants';
|
2022-09-24 06:47:31 +00:00
|
|
|
import {HomePageParams} from './home-page-params';
|
2022-10-14 04:27:19 +00:00
|
|
|
import {useSnackbar} from './MassiveSnack';
|
2022-07-07 02:18:38 +00:00
|
|
|
import Set from './set';
|
2022-10-21 05:39:06 +00:00
|
|
|
import {addSet, getSet, updateSet} from './set.service';
|
2022-07-20 03:48:48 +00:00
|
|
|
import SetForm from './SetForm';
|
2022-10-23 06:13:58 +00:00
|
|
|
import StackHeader from './StackHeader';
|
2022-10-01 03:01:07 +00:00
|
|
|
import {useSettings} from './use-settings';
|
2022-07-03 01:50:01 +00:00
|
|
|
|
2022-07-10 12:04:13 +00:00
|
|
|
export default function EditSet() {
|
2022-07-11 00:28:30 +00:00
|
|
|
const {params} = useRoute<RouteProp<HomePageParams, 'EditSet'>>();
|
2022-10-05 10:38:52 +00:00
|
|
|
const {set} = params;
|
2022-07-10 12:04:13 +00:00
|
|
|
const navigation = useNavigation();
|
2022-10-14 04:27:19 +00:00
|
|
|
const {toast} = useSnackbar();
|
2022-10-21 05:39:06 +00:00
|
|
|
const {settings} = useSettings();
|
2022-07-10 12:04:13 +00:00
|
|
|
|
2022-10-01 03:01:07 +00:00
|
|
|
const startTimer = useCallback(
|
2022-10-21 05:39:06 +00:00
|
|
|
async (name: string) => {
|
2022-10-01 03:01:07 +00:00
|
|
|
if (!settings.alarm) return;
|
2022-10-21 05:39:06 +00:00
|
|
|
const {minutes, seconds} = await getSet(name);
|
|
|
|
const milliseconds = (minutes ?? 3) * 60 * 1000 + (seconds ?? 0) * 1000;
|
2022-10-01 03:01:07 +00:00
|
|
|
NativeModules.AlarmModule.timer(
|
|
|
|
milliseconds,
|
|
|
|
!!settings.vibrate,
|
|
|
|
settings.sound,
|
2022-10-27 04:28:27 +00:00
|
|
|
!!settings.noSound,
|
2022-10-01 03:01:07 +00:00
|
|
|
);
|
|
|
|
},
|
2022-10-21 05:39:06 +00:00
|
|
|
[settings],
|
2022-10-01 03:01:07 +00:00
|
|
|
);
|
2022-07-10 12:04:13 +00:00
|
|
|
|
2022-07-20 03:48:48 +00:00
|
|
|
const update = useCallback(
|
2022-10-01 00:30:06 +00:00
|
|
|
async (value: Set) => {
|
|
|
|
console.log(`${EditSet.name}.update`, value);
|
|
|
|
await updateSet(value);
|
2022-07-20 03:48:48 +00:00
|
|
|
navigation.goBack();
|
|
|
|
},
|
2022-09-04 02:05:25 +00:00
|
|
|
[navigation],
|
2022-07-20 03:48:48 +00:00
|
|
|
);
|
2022-07-10 12:04:13 +00:00
|
|
|
|
2022-07-20 03:48:48 +00:00
|
|
|
const add = useCallback(
|
2022-10-01 00:30:06 +00:00
|
|
|
async (value: Set) => {
|
|
|
|
console.log(`${EditSet.name}.add`, {set: value});
|
2022-10-21 05:39:06 +00:00
|
|
|
startTimer(value.name);
|
2022-10-01 00:30:06 +00:00
|
|
|
await addSet(value);
|
2022-09-21 01:48:45 +00:00
|
|
|
if (!settings.notify) return navigation.goBack();
|
2022-08-24 01:04:45 +00:00
|
|
|
if (
|
2022-10-01 00:30:06 +00:00
|
|
|
value.weight > set.weight ||
|
|
|
|
(value.reps > set.reps && value.weight === set.weight)
|
2022-08-24 01:04:45 +00:00
|
|
|
)
|
2022-10-16 01:37:31 +00:00
|
|
|
toast("Great work King! That's a new record.", 3000);
|
2022-07-20 03:48:48 +00:00
|
|
|
navigation.goBack();
|
|
|
|
},
|
2022-10-01 03:01:07 +00:00
|
|
|
[navigation, startTimer, set, toast, settings],
|
2022-07-20 03:48:48 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
const save = useCallback(
|
2022-10-01 00:30:06 +00:00
|
|
|
async (value: Set) => {
|
|
|
|
if (typeof set.id === 'number') return update(value);
|
|
|
|
return add(value);
|
2022-07-20 03:48:48 +00:00
|
|
|
},
|
2022-09-24 07:09:22 +00:00
|
|
|
[update, add, set.id],
|
2022-07-20 03:48:48 +00:00
|
|
|
);
|
2022-07-10 12:04:13 +00:00
|
|
|
|
2022-07-03 01:50:01 +00:00
|
|
|
return (
|
2022-10-23 06:13:58 +00:00
|
|
|
<>
|
|
|
|
<StackHeader title="Edit set" />
|
|
|
|
<View style={{padding: PADDING, flex: 1}}>
|
|
|
|
<SetForm save={save} set={set} />
|
|
|
|
</View>
|
|
|
|
</>
|
2022-07-03 01:50:01 +00:00
|
|
|
);
|
|
|
|
}
|