diff --git a/client/components/BillModal.jsx b/client/components/BillModal.jsx index 9293548..f52b7dc 100644 --- a/client/components/BillModal.jsx +++ b/client/components/BillModal.jsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import { useActionState, useEffect, useState } from 'react'; import { ChevronDown, Copy, Layers, Link2, Link2Off, Loader2, Pencil, Plus, RefreshCw, Trash2 } from 'lucide-react'; import { toast } from 'sonner'; import { Button } from '@/components/ui/button'; @@ -172,7 +172,6 @@ export default function BillModal({ bill, initialBill, categories, onClose, onSa ); const [saveTemplate, setSaveTemplate] = useState(false); const [templateName, setTemplateName] = useState(''); - const [busy, setBusy] = useState(false); const [errors, setErrors] = useState({}); const [payments, setPayments] = useState([]); const [paymentsLoading, setPaymentsLoading] = useState(false); @@ -508,9 +507,7 @@ export default function BillModal({ bill, initialBill, categories, onClose, onSa } } - async function handleSubmit(e) { - e.preventDefault(); - + const [, submitAction, isPending] = useActionState(async () => { if (!validateForm()) { toast.error('Please fix the form errors before saving.'); return; @@ -560,7 +557,6 @@ export default function BillModal({ bill, initialBill, categories, onClose, onSa snowball_include: snowballInclude, snowball_exempt: snowballExempt, }; - setBusy(true); try { let savedBill; if (isNew) { @@ -583,10 +579,8 @@ export default function BillModal({ bill, initialBill, categories, onClose, onSa onClose(); } catch (err) { toast.error(err.message); - } finally { - setBusy(false); } - } + }, null); const inp = 'bg-background/50 border-border/60 h-9 text-sm w-full'; @@ -599,7 +593,7 @@ export default function BillModal({ bill, initialBill, categories, onClose, onSa -