import React, {useEffect, useRef, useState} from 'react'; import {StyleSheet, Text, View} from 'react-native'; import {Button, Dialog, Modal, Portal, TextInput} from 'react-native-paper'; import {getDb} from './db'; import Set from './set'; import {format} from 'date-fns'; export default function EditSet({ id, onSave, show, setShow, clearId, }: { id?: number; clearId: () => void; onSave: () => void; show: boolean; setShow: (visible: boolean) => void; }) { const [name, setName] = useState(''); const [reps, setReps] = useState(''); const [weight, setWeight] = useState(''); const [unit, setUnit] = useState(''); const [created, setCreated] = useState(new Date(new Date().toUTCString())); const weightRef = useRef(null); const repsRef = useRef(null); const unitRef = useRef(null); useEffect(() => { if (!id) return setCreated(new Date(new Date().toUTCString())); getDb().then(async db => { const [result] = await db.executeSql(`SELECT * FROM sets WHERE id = ?`, [ id, ]); if (!result.rows.item(0)) throw new Error("Can't find specified Set."); const set: Set = result.rows.item(0); setName(set.name); setReps(set.reps.toString()); setWeight(set.weight.toString()); setUnit(set.unit); setCreated(new Date(set.created)); }); }, [id]); const save = async () => { if (!name || !reps || !weight) return; const db = await getDb(); if (!id) await db.executeSql( `INSERT INTO sets(name, reps, weight, created, unit) VALUES (?,?,?,?,?)`, [name, reps, weight, new Date().toISOString(), unit || 'kg'], ); else await db.executeSql( `UPDATE sets SET name = ?, reps = ?, weight = ?, unit = ? WHERE id = ?`, [name, reps, weight, unit, id], ); setShow(false); onSave(); }; return ( setShow(false)}> {id ? `Edit "${name}"` : 'Add a set'} repsRef.current?.focus()} /> weightRef.current?.focus()} /> {format(created, 'PPPP p')} ); } const styles = StyleSheet.create({ text: { marginBottom: 10, }, title: { fontSize: 20, marginBottom: 10, }, });