import { View, Text, Alert, StyleSheet } from 'react-native' import React, { useEffect, useState } from 'react' import { router, useLocalSearchParams, useRouter } from 'expo-router' import useFetch from '../../../../hooks/useFetch'; import { Category, Expense } from '../../../../types/dbItems'; import { CategorySelectorModal, AutoDecimalInput, CategorySelector, TextInputBar, DateSelectorButton, RoundedButton } from '../../../../components'; import colors from '../../../../constants/colors'; import { addExpense, deleteExpense, executeQuery, updateExpense } from '../../../../services/database'; import { SimpleDate } from '../../../../util/SimpleDate'; import DateTimePicker from '@react-native-community/datetimepicker'; import { SIZES } from '../../../../constants/theme'; import { useTheme } from '../../../contexts/ThemeContext'; export default function Page() { const router = useRouter(); const {colors} = useTheme(); const {expense} = useLocalSearchParams(); const {data, isEmptyResult} = useFetch({sql: "SELECT e.guid as e_guid, e.name as e_name, e.datetime as e_datetime, e.amount as e_amount, c.guid as c_guid, c.name as c_name, c.color as c_color FROM expense e INNER JOIN category c on e.category_guid = c.guid WHERE e.guid = ?", args: [expense]}); const [selectedExpense, setSelectedExpense] = useState(); const [selectedCategory, setSelectedCategory] = useState(); const [formatedValue, setFormatedValue] = useState(""); const [initialValue, setInitialValue] = useState(); const [selectorModalVisible, setSelecorModalVisible] = useState(false); const [expenseName, setExpenseName] = useState(""); const [datePickerShown, setDatePickerShown] = useState(false); const [selectedDate, setSelectedDate] = useState(new Date()); console.log(router.canGoBack()) useEffect(()=>{ const entry = data[0]; console.log(entry) if(entry){ console.log(entry) const extractedExpense: Expense = {name: entry["e_name"], amount: entry["e_amount"], dateTime: entry["e_datetime"], guid: entry["e_guid"]} const extractedCategory: Category = {name: entry["c_name"], color: entry["c_color"], guid: entry["c_guid"]} console.log(extractedCategory.color) setSelectedExpense(extractedExpense); setSelectedCategory(extractedCategory); setInitialValue(extractedExpense.amount) setExpenseName(extractedExpense.name ?? "") setSelectedDate(extractedExpense.dateTime? new Date(extractedExpense.dateTime) : new Date()); } }, [data]) const handleValueChange = (formatedValue: string) => { setFormatedValue(formatedValue); } const handleCategorySelect = (category : Category) => { setSelecorModalVisible(false); setSelectedCategory(category); } const validateInput = ():boolean => { if(formatedValue == "" || expenseName == "" || selectedCategory === undefined || selectedDate === null){ return false; } return true; } const submit = () => { console.log(selectedExpense?.guid) const insert = async () => { await updateExpense(selectedExpense!.guid!, expenseName, selectedCategory!.guid!, new SimpleDate(selectedDate).format("YYYY-MM-DD"), Number(formatedValue)) } if(validateInput()){ insert(); router.back(); }else { Alert.alert("Invalid input", "One of the Props is not properly defined") } } const handleDelete = () => { const del = async () => { await deleteExpense(selectedExpense!.guid!) router.back(); } del(); } return ( {setSelecorModalVisible(false)}} onCategoryTap={handleCategorySelect}> {setSelecorModalVisible(true)}} selectedCategory={selectedCategory}/> setExpenseName(text)} value={expenseName}/> {setDatePickerShown(true)}}/> {datePickerShown && { setDatePickerShown(false); if(date){ setSelectedDate(date); } }} />} Delete Expense Save ) } const styles = StyleSheet.create({ notFound: { alignItems: "center", justifyContent: "center" }, notFoundMessageContainer: { backgroundColor: "#e37b7b", padding: 50, }, save: { padding: 10, }, container: { margin: SIZES.normal, display: "flex", gap: 10 }, submitText: { fontSize: SIZES.large } })