import { NavigationProp, RouteProp, useNavigation, useRoute, } from '@react-navigation/native'; import React, {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 {DrawerParamList} from './drawer-param-list'; import {PlanPageParams} from './plan-page-params'; import {addPlan, updatePlan} from './plan.service'; import {getNames} from './set.service'; 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(() => { getNames().then(n => { console.log(EditPlan.name, {n}); setNames(n); }); }, []); 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(','); if (typeof plan.id === 'undefined') await addPlan({days: newDays, workouts: newWorkouts}); else await updatePlan({ 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, }, });