Massive/EditSet.tsx

115 lines
3.0 KiB
TypeScript
Raw Normal View History

import {format} from 'date-fns';
2022-07-08 08:29:31 +00:00
import React, {useContext} from 'react';
import {StyleSheet, Text} from 'react-native';
import {Button, Dialog, Portal, TextInput} from 'react-native-paper';
import {DatabaseContext} from './App';
import Set from './set';
2022-07-03 01:50:01 +00:00
export default function EditSet({
2022-07-09 03:37:22 +00:00
onUpdate,
onCreate,
set,
setSet,
2022-07-03 01:50:01 +00:00
}: {
2022-07-09 03:37:22 +00:00
onUpdate: () => void;
onCreate: () => void;
set?: Set;
setSet: (set?: Set) => void;
2022-07-03 01:50:01 +00:00
}) {
const db = useContext(DatabaseContext);
2022-07-09 03:37:22 +00:00
const update = async () => {
console.log(`${EditSet.name}.${update.name}`, {set});
await db.executeSql(
`INSERT INTO sets(name, reps, weight, created, unit) VALUES (?,?,?,?,?)`,
[
set?.name,
set?.reps,
set?.weight,
new Date().toISOString(),
set?.unit || 'kg',
],
);
onUpdate();
};
const create = async () => {
console.log(`${EditSet.name}.${create.name}`, {set});
await db.executeSql(
`UPDATE sets SET name = ?, reps = ?, weight = ?, unit = ? WHERE id = ?`,
[set?.name, set?.reps, set?.weight, set?.unit, set?.id],
);
onCreate();
};
2022-07-03 01:50:01 +00:00
const save = async () => {
2022-07-09 03:29:36 +00:00
if (!set?.name || set?.reps === undefined || set?.weight === undefined)
return;
2022-07-09 03:37:22 +00:00
if (set?.id) await update();
else await create();
setSet(undefined);
2022-07-03 01:50:01 +00:00
};
return (
2022-07-05 00:43:23 +00:00
<Portal>
<Dialog visible={!!set} onDismiss={() => setSet(undefined)}>
<Dialog.Title>
2022-07-08 08:29:31 +00:00
{set?.id ? `Edit "${set.name}"` : 'Add a set'}
</Dialog.Title>
<Dialog.Content>
<TextInput
style={styles.text}
autoFocus
label="Name *"
2022-07-08 08:29:31 +00:00
value={set?.name}
onChangeText={name => setSet({...set, name})}
2022-07-07 00:45:45 +00:00
autoCorrect={false}
/>
<TextInput
style={styles.text}
label="Reps *"
keyboardType="numeric"
2022-07-08 08:29:31 +00:00
value={set?.reps?.toString() || ''}
onChangeText={reps => setSet({...set, reps})}
/>
<TextInput
style={styles.text}
label="Weight *"
keyboardType="numeric"
2022-07-08 08:29:31 +00:00
value={set?.weight?.toString() || ''}
onChangeText={weight => setSet({...set, weight})}
onSubmitEditing={save}
/>
<TextInput
style={styles.text}
label="Unit (kg)"
2022-07-08 08:29:31 +00:00
value={set?.unit}
onChangeText={unit => setSet({...set, unit})}
onSubmitEditing={save}
/>
2022-07-08 08:29:31 +00:00
<Text style={styles.text}>
2022-07-09 03:27:14 +00:00
{format(
set?.created ? new Date(set.created) : new Date(),
'PPPP p',
)}
2022-07-08 08:29:31 +00:00
</Text>
</Dialog.Content>
<Dialog.Actions>
<Button icon="close" onPress={() => setSet(undefined)}>
2022-07-05 00:43:23 +00:00
Cancel
</Button>
<Button mode="contained" icon="save" onPress={save}>
Save
</Button>
</Dialog.Actions>
</Dialog>
2022-07-05 00:43:23 +00:00
</Portal>
2022-07-03 01:50:01 +00:00
);
}
const styles = StyleSheet.create({
2022-07-04 04:03:48 +00:00
text: {
marginBottom: 10,
},
2022-07-03 01:50:01 +00:00
});