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 (
);
}