diff --git a/src/app/invoice-tools/invoice-tools-client.tsx b/src/app/invoice-tools/invoice-tools-client.tsx index cafc9fd..51a7b08 100644 --- a/src/app/invoice-tools/invoice-tools-client.tsx +++ b/src/app/invoice-tools/invoice-tools-client.tsx @@ -37,7 +37,12 @@ export function InvoiceToolsClient() {

Create invoice (with validation)

- + { + console.log("Draft saved:", draft); + alert(`Draft saved for: ${draft.description || "unnamed invoice"}`); + }} + />
diff --git a/src/components/invoice/invoice-create-form.tsx b/src/components/invoice/invoice-create-form.tsx index 2705aa8..54efa4f 100644 --- a/src/components/invoice/invoice-create-form.tsx +++ b/src/components/invoice/invoice-create-form.tsx @@ -30,12 +30,14 @@ function todayIso(): string { export type InvoiceCreateFormProps = { onSubmit?: (invoice: InvoiceCreateInput) => Promise | void; + onDraft?: (draft: typeof initialDraft) => void; }; -export function InvoiceCreateForm({ onSubmit }: InvoiceCreateFormProps) { +export function InvoiceCreateForm({ onSubmit, onDraft }: InvoiceCreateFormProps) { const [draft, setDraft] = useState(initialDraft); const [errors, setErrors] = useState({}); const [isSubmitting, setIsSubmitting] = useState(false); + const [isDrafting, setIsDrafting] = useState(false); function updateField( field: K, @@ -49,7 +51,7 @@ export function InvoiceCreateForm({ onSubmit }: InvoiceCreateFormProps) { async function handleSubmit(event: FormEvent) { event.preventDefault(); - if (isSubmitting) return; + if (isSubmitting || isDrafting) return; const result = validateInvoiceCreate({ amount: draft.amount, @@ -73,6 +75,16 @@ export function InvoiceCreateForm({ onSubmit }: InvoiceCreateFormProps) { } } + function handleSaveDraft() { + setIsDrafting(true); + setErrors({}); + try { + onDraft?.(draft); + } finally { + setIsDrafting(false); + } + } + return (
+
); }