From 54596a5fc3d77804bc14a4abf409f2d3af3698c8 Mon Sep 17 00:00:00 2001 From: Brandon Presley Date: Sat, 28 Oct 2023 16:10:52 +1300 Subject: [PATCH] Add special screen for viewing sets from plan --- AppStack.tsx | 5 ++++ SetItem.tsx | 5 +++- StartPlanItem.tsx | 4 +-- ViewSetList.tsx | 75 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 86 insertions(+), 3 deletions(-) create mode 100644 ViewSetList.tsx diff --git a/AppStack.tsx b/AppStack.tsx index ca53ea2..4343d34 100644 --- a/AppStack.tsx +++ b/AppStack.tsx @@ -12,6 +12,7 @@ import ViewWeightGraph from "./ViewWeightGraph"; import GymSet from "./gym-set"; import { Plan } from "./plan"; import Weight from "./weight"; +import ViewSetList from "./ViewSetList"; export type StackParams = { Drawer: {}; @@ -41,6 +42,9 @@ export type StackParams = { EditWorkouts: { names: string[]; }; + ViewSetList: { + name: string; + }; }; const Stack = createStackNavigator(); @@ -60,6 +64,7 @@ export default function AppStack() { + ); } diff --git a/SetItem.tsx b/SetItem.tsx index b515508..b85bba9 100644 --- a/SetItem.tsx +++ b/SetItem.tsx @@ -14,11 +14,13 @@ export default function SetItem({ settings, ids, setIds, + disablePress, }: { item: GymSet; settings: Settings; ids: number[]; setIds: (value: number[]) => void; + disablePress?: boolean; }) { const dark = useDark(); const navigation = useNavigation>(); @@ -29,11 +31,12 @@ export default function SetItem({ }, [ids.length, item.id, setIds]); const press = useCallback(() => { + if (disablePress) return; if (ids.length === 0) return navigation.navigate("EditSet", { set: item }); const removing = ids.find((id) => id === item.id); if (removing) setIds(ids.filter((id) => id !== item.id)); else setIds([...ids, item.id]); - }, [ids, item, navigation, setIds]); + }, [ids, item, navigation, setIds, disablePress]); const backgroundColor = useMemo(() => { if (!ids.includes(item.id)) return; diff --git a/StartPlanItem.tsx b/StartPlanItem.tsx index f2d1f75..9f053e1 100644 --- a/StartPlanItem.tsx +++ b/StartPlanItem.tsx @@ -71,8 +71,8 @@ export default function StartPlanItem(props: Props) { const view = useCallback(() => { setShowMenu(false); - drawerNavigate("Home", { search: item.name }); - }, [item.name, drawerNavigate]); + stackNavigate("ViewSetList", { name: item.name }); + }, [item.name, stackNavigate]); const graph = useCallback(() => { setShowMenu(false); diff --git a/ViewSetList.tsx b/ViewSetList.tsx new file mode 100644 index 0000000..ba6bc68 --- /dev/null +++ b/ViewSetList.tsx @@ -0,0 +1,75 @@ +import { RouteProp, useRoute } from "@react-navigation/native"; +import { useCallback, useEffect, useState } from "react"; +import { FlatList } from "react-native"; +import { List } from "react-native-paper"; +import { Like } from "typeorm"; +import { StackParams } from "./AppStack"; +import SetItem from "./SetItem"; +import StackHeader from "./StackHeader"; +import { LIMIT } from "./constants"; +import { setRepo, settingsRepo } from "./db"; +import GymSet from "./gym-set"; +import Settings from "./settings"; + +export default function ViewSetList() { + const [sets, setSets] = useState(); + const [settings, setSettings] = useState(); + const { params } = useRoute>(); + + useEffect(() => { + settingsRepo.findOne({ where: {} }).then(setSettings); + + const reset = async () => { + const newSets = await setRepo.find({ + where: { name: Like(`%${params.name}%`), hidden: 0 as any }, + take: LIMIT * 2, + skip: 0, + order: { created: "DESC" }, + }); + setSets(newSets); + }; + + reset(); + }, [params.name]); + + const renderItem = useCallback( + ({ item }: { item: GymSet }) => ( + null} + disablePress + /> + ), + [settings] + ); + + const getContent = () => { + if (!settings) return null; + if (sets?.length === 0) + return ( + + ); + return ( + set.id?.toString()} + /> + ); + }; + + return ( + <> + + + {getContent()} + + ); +}