import { NavigationProp, RouteProp, useNavigation, useRoute, } from '@react-navigation/native' import { useCallback, useEffect, useState } from 'react' import { ScrollView, StyleSheet, View } from 'react-native' import { Button, IconButton, Text } from 'react-native-paper' import { getLast } from './best.service' import { MARGIN, PADDING } from './constants' import { planRepo, setRepo } from './db' import { defaultSet } from './gym-set' import { PlanPageParams } from './plan-page-params' import StackHeader from './StackHeader' import Switch from './Switch' import { DAYS } from './time' import useDark from './use-dark' export default function EditPlan() { const { params } = useRoute>() const { plan } = params const [days, setDays] = useState( plan.days ? plan.days.split(',') : [], ) const [workouts, setWorkouts] = useState( plan.workouts ? plan.workouts.split(',') : [], ) const [names, setNames] = useState([]) const navigation = useNavigation>() const dark = useDark() useEffect(() => { setRepo .createQueryBuilder() .select('name') .distinct(true) .orderBy('name') .getRawMany() .then((values) => { console.log(EditPlan.name, { values }) setNames(values.map((value) => value.name)) }) }, []) const save = useCallback(async () => { console.log(`${EditPlan.name}.save`, { days, workouts, plan }) if (!days || !workouts) return const newWorkouts = workouts.filter((workout) => workout).join(',') const newDays = days.filter((day) => day).join(',') await planRepo.save({ days: newDays, workouts: newWorkouts, id: plan.id }) navigation.goBack() }, [days, workouts, plan, navigation]) const toggleWorkout = useCallback( (on: boolean, name: string) => { if (on) { setWorkouts([...workouts, name]) } else { setWorkouts(workouts.filter((workout) => workout !== name)) } }, [setWorkouts, workouts], ) const toggleDay = useCallback( (on: boolean, day: string) => { if (on) { setDays([...days, day]) } else { setDays(days.filter((d) => d !== day)) } }, [setDays, days], ) return ( <> { let first = await getLast(workouts[0]) if (!first) first = { ...defaultSet, name: workouts[0] } delete first.id navigation.navigate('StartPlan', { plan: params.plan, first }) }} icon='play-arrow' /> Days {DAYS.map((day) => ( toggleDay(value, day)} value={days.includes(day)} title={day} /> ))} Workouts {names.length === 0 ? ( No workouts found. ) : ( names.map((name) => ( toggleWorkout(value, name)} value={workouts.includes(name)} title={name} /> )) )} ) } const styles = StyleSheet.create({ title: { fontSize: 20, marginBottom: MARGIN, }, button: {}, })