import { NavigationProp, RouteProp, useFocusEffect, useNavigation, useRoute, } from '@react-navigation/native'; import React, {useCallback, useEffect, useState} from 'react'; import {ScrollView, StyleSheet, Text, View} from 'react-native'; import {Button, IconButton} from 'react-native-paper'; import {DrawerParamList} from './App'; import {addPlan, getNames, setPlan} from './db'; import MassiveSwitch from './MassiveSwitch'; import {PlanPageParams} from './PlanPage'; import {DAYS} from './time'; export default function EditPlan() { const {params} = useRoute>(); const [days, setDays] = useState(params.plan.days.split(',')); const [workouts, setWorkouts] = useState( params.plan.workouts.split(','), ); const [names, setNames] = useState([]); const navigation = useNavigation>(); useFocusEffect( useCallback(() => { navigation.getParent()?.setOptions({ headerLeft: () => ( navigation.goBack()} /> ), headerRight: () => null, title: params.plan.id ? 'Edit plan' : 'Create plan', }); }, [navigation, params.plan.id]), ); useEffect(() => { getNames().then(setNames); }, []); const save = useCallback(async () => { console.log(`${EditPlan.name}.save`, {days, workouts, params}); if (!days || !workouts) return; const newWorkouts = workouts.filter(workout => workout).join(','); const newDays = days.filter(day => day).join(','); if (!params.plan.id) await addPlan({days: newDays, workouts: newWorkouts}); else await setPlan({days: newDays, workouts: newWorkouts, id: params.plan.id}); navigation.goBack(); }, [days, workouts, params, 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)} /> toggleDay(!days.includes(day), day)}> {day} ))} Workouts {names.length === 0 && ( No workouts found. )} {names.map(name => ( toggleWorkout(value, name)} /> toggleWorkout(!workouts.includes(name), name)}> {name} ))} {names.length === 0 ? ( ) : ( )} ); } const styles = StyleSheet.create({ title: { fontSize: 20, marginBottom: 10, }, row: { flexDirection: 'row', flexWrap: 'wrap', }, });