From 9bb0416346ac0968496e4415c2817394bc260f13 Mon Sep 17 00:00:00 2001 From: Alexandre Brandizzi Date: Fri, 25 Sep 2026 12:24:16 -0300 Subject: [PATCH] fix(sites): block delete until the open work-order check succeeds --- .../_components/site-delete-dialog.tsx | 23 ++++++++++++++++--- .../locations/site-delete.test.tsx | 23 +++++++++++++++++++ 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/src/app/(protected)/locations/_components/site-delete-dialog.tsx b/src/app/(protected)/locations/_components/site-delete-dialog.tsx index bdd5bb08..56e3c232 100644 --- a/src/app/(protected)/locations/_components/site-delete-dialog.tsx +++ b/src/app/(protected)/locations/_components/site-delete-dialog.tsx @@ -21,6 +21,9 @@ interface SiteDeleteDialogProps { onDeleted: () => void; } +const CHECK_FAILED_MESSAGE = + "Couldn't check this site for open work orders. Try again before deleting it."; + function describeDeletion(siteCode: string, openCount: number): string { if (openCount === 0) { return `This will permanently remove ${siteCode} from Sites. This cannot be undone.`; @@ -39,8 +42,16 @@ export function SiteDeleteDialog({ }: SiteDeleteDialogProps) { const navigate = useNavigate(); const deleteLocation = useDeleteLocation(); - const { data: openWorkOrders, isLoading } = useSiteOpenWorkOrders(siteId, open); + const { + data: openWorkOrders, + isLoading, + isError, + isFetching, + refetch, + } = useSiteOpenWorkOrders(siteId, open); const openCount = openWorkOrders?.count ?? 0; + // Without the count the warning cannot be shown, so Delete waits for a successful check. + const countUnknown = isLoading || isError; return ( Delete this site? {isLoading && } - {!isLoading && ( + {isError && {CHECK_FAILED_MESSAGE}} + {!countUnknown && ( {describeDeletion(siteCode, openCount)} )} @@ -64,6 +76,11 @@ export function SiteDeleteDialog({ + {isError && ( + + )} {openCount > 0 && (