Remember previous add set
This commit is contained in:
parent
52a4eada94
commit
5f840e6d83
20
EditSet.tsx
20
EditSet.tsx
|
@ -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}>
|
||||||
|
|
25
HomePage.tsx
25
HomePage.tsx
|
@ -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>
|
||||||
);
|
);
|
||||||
|
|
25
SetItem.tsx
25
SetItem.tsx
|
@ -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>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user