import { NavigationProp, RouteProp, useNavigation, useRoute, } from '@react-navigation/native' import {useCallback, useEffect, useState} from 'react' import {ScrollView, StyleSheet, View} from 'react-native' import {Button, Text} from 'react-native-paper' import {MARGIN, PADDING} from './constants' import {planRepo, setRepo} from './db' import {DrawerParamList} from './drawer-param-list' import {PlanPageParams} from './plan-page-params' import StackHeader from './StackHeader' import Switch from './Switch' import {DAYS} from './time' 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>() useEffect(() => { setRepo .createQueryBuilder() .select('name') .distinct(true) .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 ( <> Days {DAYS.map(day => ( toggleDay(value, day)} onPress={() => toggleDay(!days.includes(day), day)} value={days.includes(day)}> {day} ))} Workouts {names.length === 0 ? ( No workouts found. ) : ( names.map(name => ( toggleWorkout(value, name)} value={workouts.includes(name)} onPress={() => toggleWorkout(!workouts.includes(name), name)}> {name} )) )} {names.length === 0 ? ( ) : ( )} ) } const styles = StyleSheet.create({ title: { fontSize: 20, marginBottom: MARGIN, }, })