import { Form } from "@remix-run/react"; import { useState, useEffect } from "react"; import { Input } from "~/components/ui/Input"; import { Button } from "~/components/ui/Button"; import { Flex } from "~/components/layout/Flex"; import { EXPENSE_CATEGORIES } from "~/lib/constants"; import type { Expense } from "@prisma/client"; interface ExpenseFormProps { expense?: Expense; onCancel: () => void; errors?: Record; isLoading: boolean; } export function ExpenseForm({ expense, onCancel, errors = {}, isLoading, }: ExpenseFormProps) { const [formData, setFormData] = useState({ description: expense?.description || "", category: expense?.category || "", amount: expense?.amount?.toString() || "", expenseDate: expense?.expenseDate ? new Date(expense.expenseDate).toISOString().split('T')[0] : new Date().toISOString().split('T')[0], }); // Reset form data when expense changes useEffect(() => { if (expense) { setFormData({ description: expense.description || "", category: expense.category || "", amount: expense.amount?.toString() || "", expenseDate: expense.expenseDate ? new Date(expense.expenseDate).toISOString().split('T')[0] : new Date().toISOString().split('T')[0], }); } else { setFormData({ description: "", category: "", amount: "", expenseDate: new Date().toISOString().split('T')[0], }); } }, [expense]); const handleInputChange = (field: string, value: string) => { setFormData(prev => ({ ...prev, [field]: value, })); }; const isEditing = !!expense; return (
{isEditing && ( )} {/* Description */}
handleInputChange("description", e.target.value)} placeholder="أدخل وصف المصروف" error={errors.description} required disabled={isLoading} /> {errors.description && (

{errors.description}

)}
{/* Category */}
{errors.category && (

{errors.category}

)}
{/* Amount */}
handleInputChange("amount", e.target.value)} placeholder="0.00" error={errors.amount} required disabled={isLoading} dir="ltr" /> {errors.amount && (

{errors.amount}

)}
{/* Expense Date */}
handleInputChange("expenseDate", e.target.value)} error={errors.expenseDate} disabled={isLoading} /> {errors.expenseDate && (

{errors.expenseDate}

)}
{/* Form Actions */}
); }