import { NavigationProp, RouteProp, useFocusEffect, useNavigation, useRoute, } from "@react-navigation/native"; import { useCallback, useState } from "react"; import { View } from "react-native"; import DocumentPicker from "react-native-document-picker"; import { Button, Card, IconButton, TouchableRipple } from "react-native-paper"; import { In } from "typeorm"; import AppInput from "./AppInput"; import { StackParams } from "./AppStack"; import ConfirmDialog from "./ConfirmDialog"; import Select from "./Select"; import StackHeader from "./StackHeader"; import { MARGIN, PADDING } from "./constants"; import { setRepo, settingsRepo } from "./db"; import { DrawerParams } from "./drawer-params"; import GymSet from "./gym-set"; import Settings from "./settings"; import PrimaryButton from "./PrimaryButton"; import { fixNumeric } from "./fix-numeric"; import { toast } from "./toast"; export default function EditSets() { const { params } = useRoute>(); const { ids } = params; const { navigate } = useNavigation>(); const [settings, setSettings] = useState({} as Settings); const [name, setName] = useState(""); const [reps, setReps] = useState(""); const [weight, setWeight] = useState(""); const [newImage, setNewImage] = useState(""); const [unit, setUnit] = useState(""); const [showRemove, setShowRemove] = useState(false); const [names, setNames] = useState(""); const [oldReps, setOldReps] = useState(""); const [weights, setWeights] = useState(""); const [units, setUnits] = useState(""); const [selection, setSelection] = useState({ start: 0, end: 1, }); useFocusEffect( useCallback(() => { settingsRepo.findOne({ where: {} }).then(setSettings); setRepo.find({ where: { id: In(ids) } }).then((sets) => { setNames(sets.map((set) => set.name).join(", ")); setOldReps(sets.map((set) => set.reps).join(", ")); setWeights(sets.map((set) => set.weight).join(", ")); setUnits(sets.map((set) => set.unit).join(", ")); }); }, [ids]) ); const save = async () => { console.log(`${EditSets.name}.save:`, { uri: newImage, name }); const update: Partial = {}; if (name) update.name = name; if (reps) update.reps = Number(reps); if (weight) update.weight = Number(weight); if (unit) update.unit = unit; if (newImage) update.image = newImage; if (Object.keys(update).length > 0) await setRepo.update(ids, update); navigate("History"); }; const changeImage = useCallback(async () => { const { fileCopyUri } = await DocumentPicker.pickSingle({ type: DocumentPicker.types.images, copyTo: "documentDirectory", }); if (fileCopyUri) setNewImage(fileCopyUri); }, []); const handleRemove = useCallback(async () => { setNewImage(""); setShowRemove(false); }, []); return ( <> { const fixed = fixNumeric(newReps); setReps(fixed.replace(/-/g, '')) if (fixed.length !== newReps.length) toast("Reps must be a number"); else if (fixed.includes('-')) toast("Reps must be a positive value") }} selection={selection} onSelectionChange={(e) => setSelection(e.nativeEvent.selection)} autoFocus={!!name} /> setReps((Number(reps) + 1).toString())} /> setReps((Number(reps) - 1).toString())} /> setWeight((Number(weight) + 2.5).toString())} /> setWeight((Number(weight) - 2.5).toString())} /> {settings.showUnit && (