import { DateTimePickerAndroid } from "@react-native-community/datetimepicker"; import { NavigationProp, RouteProp, useFocusEffect, useNavigation, useRoute, } from "@react-navigation/native"; import { format } from "date-fns"; import { useCallback, useRef, useState } from "react"; import { TextInput, View } from "react-native"; import { Button, IconButton } from "react-native-paper"; import AppInput from "./AppInput"; import ConfirmDialog from "./ConfirmDialog"; import { MARGIN, PADDING } from "./constants"; import { getNow, settingsRepo, weightRepo } from "./db"; import Settings from "./settings"; import StackHeader from "./StackHeader"; import Weight from "./weight"; import { WeightPageParams } from "./WeightPage"; export default function EditWeight() { const { params } = useRoute>(); const { weight } = params; const { navigate } = useNavigation>(); const [settings, setSettings] = useState({} as Settings); const [value, setValue] = useState(weight.value?.toString()); const [unit, setUnit] = useState(weight.unit); const [created, setCreated] = useState( weight.created ? new Date(weight.created) : new Date() ); const [showDelete, setShowDelete] = useState(false); const [createdDirty, setCreatedDirty] = useState(false); const unitRef = useRef(null); useFocusEffect( useCallback(() => { settingsRepo.findOne({ where: {} }).then(setSettings); }, []) ); const submit = async () => { if (!value) return; const newWeight: Partial = { id: weight.id, value: Number(value), unit, }; if (createdDirty) newWeight.created = created.toISOString(); else if (typeof weight.id !== "number") newWeight.created = await getNow(); await weightRepo.save(newWeight); navigate("Weights"); }; const pickDate = useCallback(() => { DateTimePickerAndroid.open({ value: created, onChange: (_, date) => { if (date === created) return; setCreated(date); setCreatedDirty(true); }, mode: "date", }); }, [created]); const remove = async () => { if (!weight.id) return; await weightRepo.delete(weight.id); navigate("Weights"); }; return ( <> {typeof weight.id === "number" ? ( setShowDelete(true)} icon="delete" /> ) : null} <>Are you sure you want to delete {value} {settings.showUnit && ( )} {settings.showDate && ( )} ); }