From 27a50d599cd0adbef5923aa1597ee8ed69263fe3 Mon Sep 17 00:00:00 2001 From: Nico Date: Thu, 4 Jun 2026 14:07:19 -0700 Subject: [PATCH] fix: close stale map delete confirmation --- frontend/src/pages/LocationMapManager.jsx | 4 + frontend/tests/location-map-manager.spec.ts | 83 +++++++++++++++++++++ 2 files changed, 87 insertions(+) diff --git a/frontend/src/pages/LocationMapManager.jsx b/frontend/src/pages/LocationMapManager.jsx index 943773c..0b3c6f0 100644 --- a/frontend/src/pages/LocationMapManager.jsx +++ b/frontend/src/pages/LocationMapManager.jsx @@ -296,6 +296,10 @@ export default function LocationMapManager() { toast, }); + useEffect(() => { + setPendingDeleteObject(null); + }, [activeHousehold?.id, locationId, setPendingDeleteObject]); + const { handleEditMode, handleFitMap, diff --git a/frontend/tests/location-map-manager.spec.ts b/frontend/tests/location-map-manager.spec.ts index 580a1f2..39bd3be 100644 --- a/frontend/tests/location-map-manager.spec.ts +++ b/frontend/tests/location-map-manager.spec.ts @@ -756,6 +756,89 @@ test("closes stale map buy modal after switching locations", async ({ page }) => await expect(page.getByText("french bread")).toHaveCount(0); }); +test("closes stale map delete confirmation after switching locations", async ({ page }) => { + await mockMapShell(page, adminHousehold, [storeLocation, secondStoreLocation]); + + const firstLocationState = draftMapState([ + { + id: 493, + location_map_id: 900, + zone_id: 501, + zone_name: "Bakery", + type: "zone", + label: "Eastvale Bakery", + x: 40, + y: 40, + width: 260, + height: 160, + rotation: 0, + locked: false, + visible: true, + sort_order: 1, + }, + ], true); + const nextLocationBaseState = publishedMapState([ + { + id: 494, + location_map_id: 902, + zone_id: 502, + zone_name: "Produce", + type: "zone", + label: "Ontario Produce", + x: 80, + y: 80, + width: 280, + height: 160, + rotation: 0, + locked: false, + visible: true, + sort_order: 1, + }, + ], true); + const nextPublishedMap = { + ...nextLocationBaseState.published_map, + id: 902, + store_location_id: secondStoreLocation.id, + }; + const nextLocationState = { + ...nextLocationBaseState, + location: secondStoreLocation, + map: nextPublishedMap, + published_map: nextPublishedMap, + }; + + await page.route("**/households/1/locations/10/map", async (route) => { + await route.fulfill({ + status: 200, + contentType: "application/json", + body: JSON.stringify(firstLocationState), + }); + }); + await page.route("**/households/1/locations/11/map", async (route) => { + await route.fulfill({ + status: 200, + contentType: "application/json", + body: JSON.stringify(nextLocationState), + }); + }); + + await page.goto("/stores/100/locations/10/map"); + await page.getByRole("button", { name: "Continue Editing" }).click(); + await page.getByRole("button", { name: "Map area Eastvale Bakery" }).click(); + await page.getByRole("button", { name: "Delete" }).click(); + await expect(page.getByRole("heading", { name: "Delete Eastvale Bakery?" })).toBeVisible(); + + await page.evaluate(() => { + window.history.pushState({}, "", "/stores/100/locations/11/map"); + window.dispatchEvent(new PopStateEvent("popstate")); + }); + + await expect(page.getByRole("button", { name: "Map area Ontario Produce" })).toBeVisible(); + await expect(page.locator(".location-map-title span")).toHaveText("Ontario"); + await expect(page.getByRole("heading", { name: "Delete Eastvale Bakery?" })).toHaveCount(0); + await expect(page.locator(".confirm-slide-modal")).toHaveCount(0); +}); + test("admin can add the first area from a blank map canvas", async ({ page }) => { await mockMapShell(page);