Reduce amount of state in EditSet

This commit is contained in:
Brandon Presley 2022-07-08 20:29:31 +12:00
parent d8ae1cc838
commit e417897bb7
3 changed files with 25 additions and 40 deletions

View File

@ -1,5 +1,5 @@
import {format} from 'date-fns'; import {format} from 'date-fns';
import React, {useContext, useEffect, useState} from 'react'; import React, {useContext} from 'react';
import {StyleSheet, Text} from 'react-native'; import {StyleSheet, Text} from 'react-native';
import {Button, Dialog, Portal, TextInput} from 'react-native-paper'; import {Button, Dialog, Portal, TextInput} from 'react-native-paper';
import {DatabaseContext} from './App'; import {DatabaseContext} from './App';
@ -14,42 +14,25 @@ export default function EditSet({
set?: Set; set?: Set;
setSet: (set?: Set) => void; setSet: (set?: Set) => void;
}) { }) {
const [newSet, setNewSet] = useState({
name: '',
reps: '',
weight: '',
unit: '',
created: new Date(),
});
const db = useContext(DatabaseContext); const db = useContext(DatabaseContext);
useEffect(() => {
if (set)
setNewSet({
...set,
reps: set.reps.toString(),
weight: set.weight.toString(),
created: new Date(set.created),
});
}, [set]);
const save = async () => { const save = async () => {
if (!newSet.name || !newSet.reps || !newSet.weight) return; if (!set?.name || !set?.reps || !set?.weight) return;
if (!set?.id) if (!set?.id)
await db.executeSql( await db.executeSql(
`INSERT INTO sets(name, reps, weight, created, unit) VALUES (?,?,?,?,?)`, `INSERT INTO sets(name, reps, weight, created, unit) VALUES (?,?,?,?,?)`,
[ [
newSet.name, set.name,
newSet.reps, set.reps,
newSet.weight, set.weight,
new Date().toISOString(), new Date().toISOString(),
newSet.unit || 'kg', set.unit || 'kg',
], ],
); );
else else
await db.executeSql( await db.executeSql(
`UPDATE sets SET name = ?, reps = ?, weight = ?, unit = ? WHERE id = ?`, `UPDATE sets SET name = ?, reps = ?, weight = ?, unit = ? WHERE id = ?`,
[newSet.name, newSet.reps, newSet.weight, newSet.unit, set.id], [set.name, set.reps, set.weight, set.unit, set.id],
); );
setSet(undefined); setSet(undefined);
onSave(); onSave();
@ -59,40 +42,42 @@ export default function EditSet({
<Portal> <Portal>
<Dialog visible={!!set} onDismiss={() => setSet(undefined)}> <Dialog visible={!!set} onDismiss={() => setSet(undefined)}>
<Dialog.Title> <Dialog.Title>
{set?.id ? `Edit "${newSet.name}"` : 'Add a set'} {set?.id ? `Edit "${set.name}"` : 'Add a set'}
</Dialog.Title> </Dialog.Title>
<Dialog.Content> <Dialog.Content>
<TextInput <TextInput
style={styles.text} style={styles.text}
autoFocus autoFocus
label="Name *" label="Name *"
value={newSet.name} value={set?.name}
onChangeText={name => setNewSet({...newSet, name})} onChangeText={name => setSet({...set, name})}
autoCorrect={false} autoCorrect={false}
/> />
<TextInput <TextInput
style={styles.text} style={styles.text}
label="Reps *" label="Reps *"
keyboardType="numeric" keyboardType="numeric"
value={newSet.reps} value={set?.reps?.toString() || ''}
onChangeText={reps => setNewSet({...newSet, reps})} onChangeText={reps => setSet({...set, reps})}
/> />
<TextInput <TextInput
style={styles.text} style={styles.text}
label="Weight *" label="Weight *"
keyboardType="numeric" keyboardType="numeric"
value={newSet.weight} value={set?.weight?.toString() || ''}
onChangeText={weight => setNewSet({...newSet, weight})} onChangeText={weight => setSet({...set, weight})}
onSubmitEditing={save} onSubmitEditing={save}
/> />
<TextInput <TextInput
style={styles.text} style={styles.text}
label="Unit (kg)" label="Unit (kg)"
value={newSet.unit} value={set?.unit}
onChangeText={unit => setNewSet({...newSet, unit})} onChangeText={unit => setSet({...set, unit})}
onSubmitEditing={save} onSubmitEditing={save}
/> />
<Text style={styles.text}>{format(newSet.created, 'PPPP p')}</Text> <Text style={styles.text}>
{format(new Date(set?.created || 0), 'PPPP p')}
</Text>
</Dialog.Content> </Dialog.Content>
<Dialog.Actions> <Dialog.Actions>
<Button icon="close" onPress={() => setSet(undefined)}> <Button icon="close" onPress={() => setSet(undefined)}>

View File

@ -8,7 +8,7 @@ import MassiveFab from './MassiveFab';
import Set from './set'; import Set from './set';
import SetItem from './SetItem'; import SetItem from './SetItem';
const limit = 20; const limit = 10;
export default function HomePage() { export default function HomePage() {
const [sets, setSets] = useState<Set[]>(); const [sets, setSets] = useState<Set[]>();

10
set.ts
View File

@ -1,8 +1,8 @@
export default interface Set { export default interface Set {
id?: number; id?: number;
name: string; name?: string;
reps: number; reps?: number | string;
weight: number; weight?: number | string;
created: string; created?: string;
unit: string; unit?: string;
} }