fix(ui): reset pending state on success for all save/confirm buttons
Parent button components (EditVendorButton, EditAccountButton, etc.) stay mounted even when their AdminDialog closes — so pending was never cleared on success, causing buttons to show 'Saving...' on the next open. The payment confirm button (no dialog) was stuck in 'Confirming...' until the page re-render eventually unmounted it. Added setPending(false) before setOpen/router.refresh in every success path. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
5ad85417d9
commit
c92f136b09
8 changed files with 14 additions and 14 deletions
|
|
@ -50,7 +50,7 @@ export function AddAccountButton() {
|
|||
setError("");
|
||||
const result = await createAccount(new FormData(e.currentTarget));
|
||||
if ("error" in result) { setError(result.error); setPending(false); }
|
||||
else { setOpen(false); router.refresh(); }
|
||||
else { setPending(false); setOpen(false); router.refresh(); }
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
@ -94,7 +94,7 @@ export function EditAccountButton({ account }: { account: AccountRow }) {
|
|||
fd.set("id", account.id);
|
||||
const result = await updateAccount(fd);
|
||||
if ("error" in result) { setError(result.error); setPending(false); }
|
||||
else { setOpen(false); router.refresh(); }
|
||||
else { setPending(false); setOpen(false); router.refresh(); }
|
||||
}
|
||||
|
||||
async function handleToggle() {
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ export function AddProductButton() {
|
|||
setError("");
|
||||
const result = await createProduct(new FormData(e.currentTarget));
|
||||
if ("error" in result) { setError(result.error); setPending(false); }
|
||||
else { setOpen(false); router.refresh(); }
|
||||
else { setPending(false); setOpen(false); router.refresh(); }
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ export function AddSiteButton() {
|
|||
e.preventDefault(); setPending(true); setError("");
|
||||
const result = await createSite(new FormData(e.currentTarget));
|
||||
if ("error" in result) { setError(result.error); setPending(false); }
|
||||
else { setOpen(false); router.refresh(); }
|
||||
else { setPending(false); setOpen(false); router.refresh(); }
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
@ -84,7 +84,7 @@ export function EditSiteButton({ site }: { site: SiteRow }) {
|
|||
e.preventDefault(); setPending(true); setError("");
|
||||
const result = await updateSite(site.id, new FormData(e.currentTarget));
|
||||
if ("error" in result) { setError(result.error); setPending(false); }
|
||||
else { setOpen(false); router.refresh(); }
|
||||
else { setPending(false); setOpen(false); router.refresh(); }
|
||||
}
|
||||
|
||||
async function handleToggle() {
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ export function AddUserButton() {
|
|||
setError("");
|
||||
const result = await createUser(new FormData(e.currentTarget));
|
||||
if ("error" in result) { setError(result.error); setPending(false); }
|
||||
else { setOpen(false); router.refresh(); }
|
||||
else { setPending(false); setOpen(false); router.refresh(); }
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
@ -119,7 +119,7 @@ export function EditUserButton({ user }: { user: UserRow }) {
|
|||
fd.set("id", user.id);
|
||||
const result = await updateUser(fd);
|
||||
if ("error" in result) { setError(result.error); setPending(false); }
|
||||
else { setOpen(false); router.refresh(); }
|
||||
else { setPending(false); setOpen(false); router.refresh(); }
|
||||
}
|
||||
|
||||
async function handleToggle() {
|
||||
|
|
|
|||
|
|
@ -253,7 +253,7 @@ export function AddVendorButton() {
|
|||
e.preventDefault(); setPending(true); setError("");
|
||||
const result = await createVendor(new FormData(e.currentTarget));
|
||||
if ("error" in result) { setError(result.error); setPending(false); }
|
||||
else { setOpen(false); router.refresh(); }
|
||||
else { setPending(false); setOpen(false); router.refresh(); }
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
@ -292,7 +292,7 @@ export function EditVendorButton({ vendor }: { vendor: VendorRow }) {
|
|||
fd.set("id", vendor.id);
|
||||
const result = await updateVendor(fd);
|
||||
if ("error" in result) { setError(result.error); setPending(false); }
|
||||
else { setOpen(false); router.refresh(); }
|
||||
else { setPending(false); setOpen(false); router.refresh(); }
|
||||
}
|
||||
|
||||
async function handleToggle() { await toggleVendorActive(vendor.id); router.refresh(); }
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ export function AddVesselButton() {
|
|||
setError("");
|
||||
const result = await createVessel(new FormData(e.currentTarget));
|
||||
if ("error" in result) { setError(result.error); setPending(false); }
|
||||
else { setOpen(false); router.refresh(); }
|
||||
else { setPending(false); setOpen(false); router.refresh(); }
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
@ -79,7 +79,7 @@ export function EditVesselButton({ vessel }: { vessel: VesselRow }) {
|
|||
fd.set("id", vessel.id);
|
||||
const result = await updateVessel(fd);
|
||||
if ("error" in result) { setError(result.error); setPending(false); }
|
||||
else { setOpen(false); router.refresh(); }
|
||||
else { setPending(false); setOpen(false); router.refresh(); }
|
||||
}
|
||||
|
||||
async function handleToggle() {
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ export function PaymentActions({ poId, poStatus, totalAmount = 0, paidAmount = 0
|
|||
setError("");
|
||||
const result = await processPayment({ poId });
|
||||
if ("error" in result) { setError(result.error); setPending(false); }
|
||||
else { router.refresh(); }
|
||||
else { setPending(false); router.refresh(); }
|
||||
}
|
||||
|
||||
async function handleMarkPaid(e: React.FormEvent, forceFullPayment = false) {
|
||||
|
|
@ -48,7 +48,7 @@ export function PaymentActions({ poId, poStatus, totalAmount = 0, paidAmount = 0
|
|||
setError("");
|
||||
const result = await markPaid({ poId, paymentRef: ref, paymentAmount });
|
||||
if ("error" in result) { setError(result.error); setPending(false); }
|
||||
else { router.refresh(); }
|
||||
else { setPending(false); router.refresh(); }
|
||||
}
|
||||
|
||||
if (poStatus === "MGR_APPROVED") {
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ export function VendorIdForm({ poId, vendors }: { poId: string; vendors: Vendor[
|
|||
setError("");
|
||||
const result = await provideVendorId({ poId, vendorId: selectedVendorId });
|
||||
if ("error" in result) { setError(result.error); setPending(false); }
|
||||
else { router.refresh(); }
|
||||
else { setPending(false); router.refresh(); }
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue