import React, {useContext, useEffect, useRef, useState} from 'react'; import {ScrollView, View} from 'react-native'; import {Button, Text} from 'react-native-paper'; import MassiveInput from './MassiveInput'; import {DatabaseContext} from './Routes'; import Set from './set'; export default function SetForm({ save, set, workouts, }: { set: Set; save: (set: Set) => void; workouts?: string[]; }) { const [name, setName] = useState(set.name); const [reps, setReps] = useState(set.reps.toString()); const [weight, setWeight] = useState(set.weight.toString()); const [unit, setUnit] = useState(set.unit); const [uri, setUri] = useState(set.image); const [year, setYear] = useState(''); const [month, setMonth] = useState(''); const [day, setDay] = useState(''); const [hour, setHour] = useState(''); const [minute, setMinute] = useState(''); const [selection, setSelection] = useState({ start: 0, end: set.reps.toString().length, }); const weightRef = useRef(null); const repsRef = useRef(null); const db = useContext(DatabaseContext); useEffect(() => { if (!set.created) return; const matches = set.created.match(/\d+/g); if (!matches) return; setYear(matches[0]); setMonth(matches[1]); setDay(matches[2]); setHour(matches[3]); setMinute(matches[4]); }, [set.created]); useEffect(() => { console.log('SetForm.useEffect:', {uri, name: set.name}); if (!uri) db.executeSql(`SELECT image FROM sets WHERE name = ? LIMIT 1`, [ set.name, ]).then(([result]) => setUri(result.rows.item(0)?.image)); }, [uri, db, set.name]); const handleSubmit = () => { if (!name) return; save({ name, reps: Number(reps), created: `${year}-${month}-${day}T${hour}:${minute}`, weight: Number(weight), id: set.id, unit, image: uri, }); }; return ( <> repsRef.current?.focus()} /> weightRef.current?.focus()} selection={selection} onSelectionChange={e => setSelection(e.nativeEvent.selection)} autoFocus={!!name} blurOnSubmit={false} innerRef={repsRef} /> {set.created && ( )} {workouts?.map((workout, index) => ( {workout} {index === workouts.length - 1 ? '.' : ', '} ))} ); }