diff --git a/src/admin/pages/InvoiceDetail.tsx b/src/admin/pages/InvoiceDetail.tsx index ecbf356..0a58baf 100644 --- a/src/admin/pages/InvoiceDetail.tsx +++ b/src/admin/pages/InvoiceDetail.tsx @@ -558,6 +558,10 @@ export default function InvoiceDetail() { ]); const [errors, setErrors] = useState>({}); const [saving, setSaving] = useState(false); + // Which save action is in flight ("draft" | LIVE_STATUS | "save"), so only the + // clicked button shows its spinner — `saving` still disables all of them to + // prevent a concurrent double-submit. + const [savingAction, setSavingAction] = useState(null); const [dataReady, setDataReady] = useState(false); const [invoiceNumber, setInvoiceNumber] = useState(""); const initialSnapshotRef = useRef(null); @@ -976,6 +980,7 @@ export default function InvoiceDetail() { if (Object.keys(newErrors).length > 0) return; setSaving(true); + setSavingAction(targetStatus ?? "save"); try { const payload: Record = { ...form, @@ -1016,6 +1021,7 @@ export default function InvoiceDetail() { ); } finally { setSaving(false); + setSavingAction(null); } }; @@ -1710,7 +1716,7 @@ export default function InvoiceDetail() { onClick={() => handleCreateSubmit("draft")} disabled={saving} > - {saving ? ( + {savingAction === "draft" ? ( ) : ( "Uložit koncept" @@ -1720,7 +1726,7 @@ export default function InvoiceDetail() { onClick={() => handleCreateSubmit(LIVE_STATUS)} disabled={saving} > - {saving ? ( + {savingAction === LIVE_STATUS ? ( <> handleCreateSubmit("draft")} disabled={saving} > - {saving ? ( + {savingAction === "draft" ? ( ) : ( "Uložit koncept" @@ -1756,7 +1762,7 @@ export default function InvoiceDetail() { onClick={() => handleCreateSubmit(LIVE_STATUS)} disabled={saving} > - {saving ? ( + {savingAction === LIVE_STATUS ? ( <>