diff --git a/EditWorkouts.tsx b/EditWorkouts.tsx index 37a2c68..1431f73 100644 --- a/EditWorkouts.tsx +++ b/EditWorkouts.tsx @@ -1,4 +1,5 @@ import { + NavigationProp, RouteProp, useFocusEffect, useNavigation, @@ -12,9 +13,8 @@ import { In } from "typeorm"; import AppInput from "./AppInput"; import ConfirmDialog from "./ConfirmDialog"; import { MARGIN, PADDING } from "./constants"; -import { getNow, planRepo, setRepo, settingsRepo } from "./db"; +import { planRepo, setRepo, settingsRepo } from "./db"; import { fixNumeric } from "./fix-numeric"; -import { defaultSet } from "./gym-set"; import Settings from "./settings"; import StackHeader from "./StackHeader"; import { toast } from "./toast"; @@ -29,14 +29,13 @@ export default function EditWorkouts() { const [steps, setSteps] = useState(""); const [oldSteps, setOldSteps] = useState(""); const [uri, setUri] = useState(""); - const [oldUri, setOldUri] = useState(""); const [minutes, setMinutes] = useState(""); const [oldMinutes, setOldMinutes] = useState(""); const [seconds, setSeconds] = useState(""); const [oldSeconds, setOldSeconds] = useState(""); const [sets, setSets] = useState(""); const [oldSets, setOldSets] = useState(""); - const navigation = useNavigation(); + const navigation = useNavigation>(); const setsRef = useRef(null); const stepsRef = useRef(null); const minutesRef = useRef(null); @@ -56,7 +55,9 @@ export default function EditWorkouts() { console.log({ gymSets }); setOldNames(gymSets.map((set) => set.name).join(", ")); setOldSteps(gymSets.map((set) => set.steps).join(", ")); - setOldUri(gymSets.map((set) => set.steps).join(", ")); + setOldMinutes(gymSets.map((set) => set.minutes).join(", ")); + setOldSeconds(gymSets.map((set) => set.seconds).join(", ")); + setOldSets(gymSets.map((set) => set.sets).join(", ")); }); }, [params.names]) ); @@ -73,36 +74,17 @@ export default function EditWorkouts() { image: removeImage ? "" : uri, } ); - await planRepo - .createQueryBuilder() - .update() - .set({ - workouts: () => `REPLACE(workouts, '${params.gymSet.name}', '${name}')`, - }) - .where("workouts LIKE :name", { name: `%${params.gymSet.name}%` }) - .execute(); - navigation.goBack(); - }; - - const add = async () => { - const now = await getNow(); - await setRepo.save({ - ...defaultSet, - name, - hidden: true, - image: uri, - minutes: minutes ? +minutes : 3, - seconds: seconds ? +seconds : 30, - sets: sets ? +sets : 3, - steps, - created: now, - }); - navigation.goBack(); - }; - - const save = async () => { - if (params.gymSet.name) return update(); - return add(); + for (const oldName of params.names) { + await planRepo + .createQueryBuilder() + .update() + .set({ + workouts: () => `REPLACE(workouts, '${oldName}', '${name}')`, + }) + .where("workouts LIKE :name", { name: `%${oldName}%` }) + .execute(); + } + navigation.navigate("WorkoutList", { clearNames: true }); }; const changeImage = useCallback(async () => { @@ -126,14 +108,12 @@ export default function EditWorkouts() { return ( <> - + setsRef.current?.focus()} /> @@ -158,7 +138,7 @@ export default function EditWorkouts() { if (fixed.length !== newSets.length) toast("Sets must be a number"); }} - label="Sets per workout" + label={`Sets: ${oldSets}`} keyboardType="numeric" onSubmitEditing={() => minutesRef.current?.focus()} /> @@ -174,14 +154,14 @@ export default function EditWorkouts() { if (fixed.length !== newMinutes.length) toast("Reps must be a number"); }} - label="Rest minutes" + label={`Rest minutes: ${oldMinutes}`} keyboardType="numeric" /> @@ -206,7 +186,7 @@ export default function EditWorkouts() { )} - { const seconds = item.seconds?.toString().padStart(2, "0"); return `${item.sets} x ${item.minutes || 0}:${seconds}`; - }, [item]); + }, [item.sets, item.minutes, item.seconds]); const left = useCallback(() => { if (!images || !item.image) return null; @@ -34,10 +34,10 @@ export default function WorkoutItem({ ); }, [item.image, images]); - const long = useCallback(() => { + const long = () => { if (names.length > 0) return; setNames([item.name]); - }, [names.length, item.name, setNames]); + }; const backgroundColor = useMemo(() => { if (!names.includes(item.name)) return; @@ -45,13 +45,14 @@ export default function WorkoutItem({ return LIGHT_RIPPLE; }, [dark, names, item.name]); - const press = useCallback(() => { + const press = () => { + console.log({ names }); if (names.length === 0) return navigation.navigate("EditWorkout", { gymSet: item }); const removing = names.find((name) => name === item.name); if (removing) setNames(names.filter((name) => name !== item.name)); else setNames([...names, item.name]); - }, [names, item, navigation, setNames]); + }; return ( (); const [names, setNames] = useState([]); const navigation = useNavigation>(); + const { params } = useRoute>(); const refresh = useCallback(async (value: string) => { const newWorkouts = await setRepo @@ -45,7 +49,8 @@ export default function WorkoutList() { useCallback(() => { refresh(term); settingsRepo.findOne({ where: {} }).then(setSettings); - }, [refresh, term]) + if (params?.clearNames) setNames([]); + }, [refresh, term, params]) ); const renderItem = useCallback( @@ -106,7 +111,7 @@ export default function WorkoutList() { const remove = async () => { setNames([]); - await setRepo.delete(names.length > 0 ? names : {}); + if (names.length > 0) await setRepo.delete({ name: In(names) }); await refresh(term); }; @@ -114,11 +119,15 @@ export default function WorkoutList() { setNames(workouts.map((workout) => workout.name)); }; - const edit = useCallback(() => {}, []); + const edit = () => { + navigation.navigate("EditWorkouts", { names }); + }; return ( <> - + 0 ? `${names.length} selected` : "Workouts"} + > ) : ( + ); }