2022-07-11 00:28:30 +00:00
|
|
|
import {
|
|
|
|
RouteProp,
|
|
|
|
useFocusEffect,
|
|
|
|
useNavigation,
|
|
|
|
useRoute,
|
|
|
|
} from '@react-navigation/native';
|
2022-07-20 03:48:48 +00:00
|
|
|
import React, {useCallback, useContext} from 'react';
|
2022-08-28 05:25:31 +00:00
|
|
|
import {NativeModules, View} from 'react-native';
|
2022-07-20 03:48:48 +00:00
|
|
|
import {IconButton} from 'react-native-paper';
|
2022-08-25 01:01:01 +00:00
|
|
|
import {DatabaseContext, SnackbarContext} from './App';
|
2022-07-11 00:28:30 +00:00
|
|
|
import {HomePageParams} from './HomePage';
|
2022-07-07 02:18:38 +00:00
|
|
|
import Set from './set';
|
2022-07-20 03:48:48 +00:00
|
|
|
import SetForm from './SetForm';
|
2022-08-24 00:01:39 +00:00
|
|
|
import Settings from './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-07-10 12:04:13 +00:00
|
|
|
const db = useContext(DatabaseContext);
|
|
|
|
const navigation = useNavigation();
|
2022-08-25 01:01:01 +00:00
|
|
|
const {toast} = useContext(SnackbarContext);
|
2022-07-10 12:04:13 +00:00
|
|
|
|
2022-07-11 00:28:30 +00:00
|
|
|
useFocusEffect(
|
|
|
|
useCallback(() => {
|
|
|
|
navigation.getParent()?.setOptions({
|
|
|
|
headerLeft: () => (
|
|
|
|
<IconButton icon="arrow-back" onPress={() => navigation.goBack()} />
|
|
|
|
),
|
2022-08-25 01:01:01 +00:00
|
|
|
headerRight: null,
|
2022-08-26 03:17:45 +00:00
|
|
|
title: params.set.id ? 'Edit set' : 'Create set',
|
2022-07-11 00:28:30 +00:00
|
|
|
});
|
2022-08-26 03:17:45 +00:00
|
|
|
}, [navigation, params.set.id]),
|
2022-07-11 00:28:30 +00:00
|
|
|
);
|
|
|
|
|
2022-08-20 04:37:59 +00:00
|
|
|
const startTimer = useCallback(async () => {
|
2022-08-24 00:01:39 +00:00
|
|
|
const [result] = await db.executeSql(`SELECT * FROM settings LIMIT 1`);
|
|
|
|
const settings: Settings = result.rows.item(0);
|
|
|
|
if (!settings.alarm) return;
|
|
|
|
const milliseconds = settings.minutes * 60 * 1000 + settings.seconds * 1000;
|
2022-08-25 08:41:01 +00:00
|
|
|
NativeModules.AlarmModule.timer(
|
|
|
|
milliseconds,
|
|
|
|
!!settings.vibrate,
|
|
|
|
settings.sound,
|
|
|
|
);
|
2022-08-24 00:01:39 +00:00
|
|
|
}, [db]);
|
2022-07-10 12:04:13 +00:00
|
|
|
|
2022-07-20 03:48:48 +00:00
|
|
|
const update = useCallback(
|
|
|
|
async (set: Set) => {
|
|
|
|
console.log(`${EditSet.name}.update`, set);
|
|
|
|
await db.executeSql(
|
|
|
|
`UPDATE sets SET name = ?, reps = ?, weight = ?, created = ?, unit = ? WHERE id = ?`,
|
|
|
|
[set.name, set.reps, set.weight, set.created, set.unit, set.id],
|
|
|
|
);
|
|
|
|
navigation.goBack();
|
|
|
|
},
|
|
|
|
[db, navigation],
|
|
|
|
);
|
2022-07-10 12:04:13 +00:00
|
|
|
|
2022-07-20 03:48:48 +00:00
|
|
|
const add = useCallback(
|
|
|
|
async (set: Set) => {
|
2022-08-18 00:08:03 +00:00
|
|
|
const {name, reps, weight, unit} = set;
|
2022-07-20 03:48:48 +00:00
|
|
|
const insert = `
|
|
|
|
INSERT INTO sets(name, reps, weight, created, unit)
|
2022-08-18 00:08:03 +00:00
|
|
|
VALUES (?,?,?,strftime('%Y-%m-%dT%H:%M:%S', 'now', 'localtime'),?)
|
2022-07-20 03:48:48 +00:00
|
|
|
`;
|
2022-08-20 04:37:59 +00:00
|
|
|
startTimer();
|
2022-08-18 00:08:03 +00:00
|
|
|
await db.executeSql(insert, [name, reps, weight, unit]);
|
2022-08-27 06:08:23 +00:00
|
|
|
const [result] = await db.executeSql(`SELECT * FROM settings LIMIT 1`);
|
|
|
|
const settings: Settings = result.rows.item(0);
|
|
|
|
if (settings.notify === 0) return navigation.goBack();
|
2022-08-24 01:04:45 +00:00
|
|
|
if (
|
|
|
|
weight > params.set.weight ||
|
|
|
|
(reps > params.set.reps && weight === params.set.weight)
|
|
|
|
)
|
2022-08-27 06:09:45 +00:00
|
|
|
toast("Great work King, that's a new record!", 3000);
|
2022-07-20 03:48:48 +00:00
|
|
|
navigation.goBack();
|
|
|
|
},
|
2022-08-25 01:01:01 +00:00
|
|
|
[db, navigation, startTimer, params.set, toast],
|
2022-07-20 03:48:48 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
const save = useCallback(
|
|
|
|
async (set: Set) => {
|
|
|
|
if (params.set.id) return update(set);
|
|
|
|
return add(set);
|
|
|
|
},
|
|
|
|
[update, add, params.set.id],
|
|
|
|
);
|
2022-07-10 12:04:13 +00:00
|
|
|
|
2022-07-03 01:50:01 +00:00
|
|
|
return (
|
2022-07-11 00:28:30 +00:00
|
|
|
<View style={{padding: 10}}>
|
2022-08-24 03:36:49 +00:00
|
|
|
<SetForm save={save} set={params.set} workouts={params.workouts} />
|
2022-07-11 00:28:30 +00:00
|
|
|
</View>
|
2022-07-03 01:50:01 +00:00
|
|
|
);
|
|
|
|
}
|