import React, {useContext, useRef, useState} from 'react'; import {ScrollView, TextInput, View} from 'react-native'; import {Button, Text} from 'react-native-paper'; import MassiveInput from './MassiveInput'; import {SnackbarContext} from './MassiveSnack'; import Set from './set'; import {getSets} from './set.service'; import {settings} from './settings.service'; 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 [selection, setSelection] = useState({ start: 0, end: set.reps.toString().length, }); const {toast} = useContext(SnackbarContext); const weightRef = useRef(null); const repsRef = useRef(null); const unitRef = useRef(null); const handleSubmit = async () => { console.log(`${SetForm.name}.handleSubmit:`, {set}); if (!name) return; let saveImage = set.image; if (!set.image) saveImage = await getSets({search: name, limit: 1, offset: 0}).then( ([s]) => s?.image, ); console.log(`${SetForm.name}.handleSubmit:`, {saveImage, name}); save({ name, reps: Number(reps), weight: Number(weight), id: set.id, unit, image: saveImage, minutes: Number(set.minutes ?? 3), seconds: Number(set.seconds ?? 30), sets: set.sets ?? 3, }); }; const handleName = (value: string) => { setName(value.replace(/,|'/g, '')); if (value.match(/,|'/)) toast('Commas and single quotes would break CSV exports', 6000); }; const handleUnit = (value: string) => { setUnit(value.replace(/,|'/g, '')); if (value.match(/,|'/)) toast('Commas and single quotes would break CSV exports', 6000); }; return ( <> repsRef.current?.focus()} /> weightRef.current?.focus()} selection={selection} onSelectionChange={e => setSelection(e.nativeEvent.selection)} autoFocus={!!name} innerRef={repsRef} /> {!!settings.showUnit && ( )} {workouts.length > 0 && !!settings.workouts && ( {workouts.map((workout, index) => ( {workout} {index === workouts.length - 1 ? '' : ', '} ))} )} ); }