Remember previous add set

This commit is contained in:
Brandon Presley 2022-07-10 16:22:19 +12:00
parent 52a4eada94
commit 5f840e6d83
3 changed files with 50 additions and 20 deletions

View File

@ -11,23 +11,27 @@ export default function EditSet({
onSave, onSave,
title, title,
saveText, saveText,
show,
setShow,
}: { }: {
onSave: () => void; onSave: () => void;
set?: Set; set?: Set;
setSet: (set?: Set) => void; setSet: (set?: Set) => void;
title: string; title: string;
saveText: string; saveText: string;
show: boolean;
setShow: (show: boolean) => void;
}) { }) {
const [show, setShow] = useState(false); const [showDate, setShowDate] = useState(false);
const onConfirm = (created: Date) => { const onConfirm = (created: Date) => {
setSet({...set, created: created.toISOString()}); setSet({...set, created: created.toISOString()});
setShow(false); setShowDate(false);
}; };
return ( return (
<Portal> <Portal>
<Dialog visible={set ? true : false} onDismiss={() => setSet(undefined)}> <Dialog visible={show} onDismiss={() => setShow(false)}>
<Dialog.Title>{title}</Dialog.Title> <Dialog.Title>{title}</Dialog.Title>
<Dialog.ScrollArea> <Dialog.ScrollArea>
<ScrollView> <ScrollView>
@ -63,14 +67,16 @@ export default function EditSet({
/> />
{set?.created && ( {set?.created && (
<> <>
<Button icon="calendar-outline" onPress={() => setShow(true)}> <Button
icon="calendar-outline"
onPress={() => setShowDate(true)}>
{format(set.created)} {format(set.created)}
</Button> </Button>
<DateTimePickerModal <DateTimePickerModal
isVisible={show} isVisible={showDate}
mode="datetime" mode="datetime"
onConfirm={onConfirm} onConfirm={onConfirm}
onCancel={() => setShow(false)} onCancel={() => setShowDate(false)}
date={new Date(set.created)} date={new Date(set.created)}
/> />
</> </>
@ -78,7 +84,7 @@ export default function EditSet({
</ScrollView> </ScrollView>
</Dialog.ScrollArea> </Dialog.ScrollArea>
<Dialog.Actions> <Dialog.Actions>
<Button icon="close" onPress={() => setSet(undefined)}> <Button icon="close" onPress={() => setShow(false)}>
Cancel Cancel
</Button> </Button>
<Button mode="contained" icon="save" onPress={onSave}> <Button mode="contained" icon="save" onPress={onSave}>

View File

@ -14,6 +14,8 @@ export default function HomePage() {
const [sets, setSets] = useState<Set[]>(); const [sets, setSets] = useState<Set[]>();
const [offset, setOffset] = useState(0); const [offset, setOffset] = useState(0);
const [edit, setEdit] = useState<Set>(); const [edit, setEdit] = useState<Set>();
const [showEdit, setShowEdit] = useState(false);
const [showNew, setShowNew] = useState(false);
const [newSet, setNewSet] = useState<Set>(); const [newSet, setNewSet] = useState<Set>();
const [search, setSearch] = useState(''); const [search, setSearch] = useState('');
const [refreshing, setRefreshing] = useState(false); const [refreshing, setRefreshing] = useState(false);
@ -53,6 +55,8 @@ export default function HomePage() {
key={item.id} key={item.id}
setEdit={setEdit} setEdit={setEdit}
onRemove={refresh} onRemove={refresh}
setShowEdit={setShowEdit}
setShowNew={setShowNew}
/> />
), ),
[setEdit, refresh, setNewSet], [setEdit, refresh, setNewSet],
@ -71,9 +75,9 @@ export default function HomePage() {
edit?.id, edit?.id,
], ],
); );
setEdit(undefined); setShowEdit(false);
await refresh(); await refresh();
}, [edit, setEdit, refresh, db]); }, [edit, setShowEdit, refresh, db]);
const add = useCallback(async () => { const add = useCallback(async () => {
if ( if (
@ -92,7 +96,7 @@ export default function HomePage() {
newSet?.unit || 'kg', newSet?.unit || 'kg',
], ],
); );
setNewSet(undefined); setShowNew(false);
await refresh(); await refresh();
const enabled = await AsyncStorage.getItem('alarmEnabled'); const enabled = await AsyncStorage.getItem('alarmEnabled');
if (enabled !== 'true') return; if (enabled !== 'true') return;
@ -100,7 +104,7 @@ export default function HomePage() {
const seconds = await AsyncStorage.getItem('seconds'); const seconds = await AsyncStorage.getItem('seconds');
const milliseconds = Number(minutes) * 60 * 1000 + Number(seconds) * 1000; const milliseconds = Number(minutes) * 60 * 1000 + Number(seconds) * 1000;
NativeModules.AlarmModule.timer(milliseconds); NativeModules.AlarmModule.timer(milliseconds);
}, [newSet, setNewSet, refresh, db]); }, [newSet, setShowNew, refresh, db]);
const next = useCallback(async () => { const next = useCallback(async () => {
if (end) return; if (end) return;
@ -147,6 +151,8 @@ export default function HomePage() {
title={`Edit ${edit?.name}`} title={`Edit ${edit?.name}`}
saveText="Edit" saveText="Edit"
onSave={update} onSave={update}
show={showEdit}
setShow={setShowEdit}
/> />
<EditSet <EditSet
@ -155,9 +161,18 @@ export default function HomePage() {
title="Add set" title="Add set"
saveText="Add" saveText="Add"
onSave={add} onSave={add}
show={showNew}
setShow={setShowNew}
/> />
<MassiveFab <MassiveFab
onPress={() => setNewSet({created: new Date().toISOString()} as Set)} onPress={() => {
setNewSet(
newSet
? {...newSet, created: new Date().toISOString()}
: {created: new Date().toISOString()},
);
setShowNew(true);
}}
/> />
</View> </View>
); );

View File

@ -7,37 +7,42 @@ import Set from './set';
export default function SetItem({ export default function SetItem({
item, item,
setEdit, setEdit,
setShowEdit,
onRemove, onRemove,
setNewSet, setNewSet,
setShowNew,
}: { }: {
item: Set; item: Set;
setEdit: (set: Set) => void; setEdit: (set: Set) => void;
setNewSet: (set: Set) => void; setNewSet: (set: Set) => void;
setShowEdit: (show: boolean) => void;
setShowNew: (show: boolean) => void;
onRemove: () => void; onRemove: () => void;
}) { }) {
const [show, setShow] = useState(false); const [showMenu, setShowMenu] = useState(false);
const [anchor, setAnchor] = useState({x: 0, y: 0}); const [anchor, setAnchor] = useState({x: 0, y: 0});
const db = useContext(DatabaseContext); const db = useContext(DatabaseContext);
const remove = useCallback(async () => { const remove = useCallback(async () => {
await db.executeSql(`DELETE FROM sets WHERE id = ?`, [item.id]); await db.executeSql(`DELETE FROM sets WHERE id = ?`, [item.id]);
setShow(false); setShowMenu(false);
onRemove(); onRemove();
}, [setShow, db, onRemove, item.id]); }, [setShowMenu, db, onRemove, item.id]);
const copy = useCallback(() => { const copy = useCallback(() => {
const set = {...item}; const set = {...item};
delete set.id; delete set.id;
setNewSet(set); setNewSet(set);
setShow(false); setShowMenu(false);
}, [setNewSet, setShow, item]); setShowNew(true);
}, [setNewSet, setShowMenu, item, setShowNew]);
const longPress = useCallback( const longPress = useCallback(
(e: GestureResponderEvent) => { (e: GestureResponderEvent) => {
setAnchor({x: e.nativeEvent.pageX, y: e.nativeEvent.pageY}); setAnchor({x: e.nativeEvent.pageX, y: e.nativeEvent.pageY});
setShow(true); setShowMenu(true);
}, },
[setShow, setAnchor], [setShowMenu, setAnchor],
); );
return ( return (
@ -45,12 +50,16 @@ export default function SetItem({
<List.Item <List.Item
onPress={() => { onPress={() => {
setEdit(item); setEdit(item);
setShowEdit(true);
}} }}
title={item.name} title={item.name}
description={`${item.reps} x ${item.weight}${item.unit}`} description={`${item.reps} x ${item.weight}${item.unit}`}
onLongPress={longPress} onLongPress={longPress}
right={() => ( right={() => (
<Menu anchor={anchor} visible={show} onDismiss={() => setShow(false)}> <Menu
anchor={anchor}
visible={showMenu}
onDismiss={() => setShowMenu(false)}>
<Menu.Item icon="trash" onPress={remove} title="Delete" /> <Menu.Item icon="trash" onPress={remove} title="Delete" />
<Menu.Item icon="copy" onPress={copy} title="Copy" /> <Menu.Item icon="copy" onPress={copy} title="Copy" />
</Menu> </Menu>