import React, {useEffect, useRef, useState} from 'react'; import {Modal, StyleSheet, Text, TextInput, View} from 'react-native'; import {Button} from 'react-native-paper'; import {getDb} from './db'; import Set from './Set'; export default function EditSet({ id, onSave, show, setShow, setId, }: { id?: number; setId: (id?: number) => 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 weightRef = useRef(null); const repsRef = useRef(null); const unitRef = useRef(null); useEffect(() => { if (!id) return; 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); }); }, [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(); }; const remove = async () => { if (!id) return; const db = await getDb(); await db.executeSql(`DELETE FROM sets WHERE id = ?`, [id]); setShow(false); onSave(); }; return ( setShow(false)}> Add a set weightRef.current?.focus()} /> repsRef.current?.focus()} ref={weightRef} /> unitRef.current?.focus()} /> ); } const styles = StyleSheet.create({ bottom: { flexDirection: 'row', }, title: { fontSize: 20, }, modal: { margin: 20, backgroundColor: '#20232a', padding: 20, shadowColor: '#000', shadowOffset: { width: 0, height: 2, }, shadowOpacity: 0.25, shadowRadius: 4, elevation: 5, }, });