import { useEffect } from "react"; import { useForm, Controller } from "react-hook-form"; import { z } from "zod"; import { zodResolver } from "@hookform/resolvers/zod"; import type { Expense } from "@/lib/api"; import { useExpensesContext } from "../ExpensesProvider"; import { DatePicker } from "@/components/ui/date-picker"; import { ResponsiveDialog, ResponsiveDialogContent, ResponsiveDialogHeader, ResponsiveDialogTitle, ResponsiveDialogFooter, } from "@/components/ui/responsive-dialog"; import { Button } from "@/components/ui/button"; const paySchema = z.object({ amountPayed: z.number().positive("El monto debe ser mayor a 0"), paymentDate: z.date({ message: "La fecha es obligatoria" }), }); type PayFormValues = z.infer; interface PayExpenseDialogProps { expense: Expense | null; open: boolean; onOpenChange: (open: boolean) => void; } export function PayExpenseDialog({ expense, open, onOpenChange }: PayExpenseDialogProps) { const { payExpense } = useExpensesContext(); const { register, handleSubmit, control, formState: { errors, isSubmitting }, reset, } = useForm({ resolver: zodResolver(paySchema), defaultValues: { amountPayed: 0, paymentDate: undefined, }, }); useEffect(() => { if (expense) { reset({ amountPayed: Number(expense.amount), paymentDate: new Date(), }); } }, [expense, reset]); function handleClose(open: boolean) { onOpenChange(open); if (!open) reset(); } async function onSubmit(data: PayFormValues) { if (!expense) return; await payExpense(expense.id, { amountPayed: data.amountPayed, paymentDate: data.paymentDate.toISOString(), }); handleClose(false); } if (!expense) return null; return ( Registrar pago
{expense.description} Monto original: ${Number(expense.amount).toLocaleString("es-AR", { minimumFractionDigits: 2 })}
{errors.amountPayed && ( {errors.amountPayed.message} )}
( )} /> {errors.paymentDate && ( {errors.paymentDate.message} )}
); }