Reduce amount of state in EditSet
This commit is contained in:
parent
d8ae1cc838
commit
e417897bb7
53
EditSet.tsx
53
EditSet.tsx
|
@ -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)}>
|
||||||
|
|
|
@ -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[]>();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user