From fc883e9f6212a27d91714bf4288b9028b1edad45 Mon Sep 17 00:00:00 2001 From: Nico Date: Tue, 16 Jun 2026 00:20:12 -0700 Subject: [PATCH] fix: request map area delete from keyboard --- frontend/src/pages/LocationMapManager.jsx | 41 +++++++++++++++++++++ frontend/tests/location-map-manager.spec.ts | 12 ++++++ 2 files changed, 53 insertions(+) diff --git a/frontend/src/pages/LocationMapManager.jsx b/frontend/src/pages/LocationMapManager.jsx index 1c51439..32399aa 100644 --- a/frontend/src/pages/LocationMapManager.jsx +++ b/frontend/src/pages/LocationMapManager.jsx @@ -285,6 +285,47 @@ export default function LocationMapManager() { saving, ]); + useEffect(() => { + const hasOpenModal = Boolean(buyModalItem || pendingDeleteObject || pendingLeaveTarget); + if ( + !selectedObjectKey || + mode !== "edit" || + !canManage || + saving || + layersOpen || + hasOpenModal || + typeof window === "undefined" + ) { + return undefined; + } + + const handleKeyDown = (event) => { + if ( + event.defaultPrevented || + !["Backspace", "Delete"].includes(event.key) || + isTextEditingTarget(event.target) + ) { + return; + } + + event.preventDefault(); + requestDeleteObject(); + }; + + window.addEventListener("keydown", handleKeyDown, true); + return () => window.removeEventListener("keydown", handleKeyDown, true); + }, [ + buyModalItem, + canManage, + layersOpen, + mode, + pendingDeleteObject, + pendingLeaveTarget, + requestDeleteObject, + saving, + selectedObjectKey, + ]); + if (!hasLoaded || householdLoading || loading) { return ( await expect(page.getByRole("spinbutton", { name: "W" })).toHaveCount(0); await expect(page.getByRole("spinbutton", { name: "H" })).toHaveCount(0); + await page.getByRole("textbox", { name: "Label" }).focus(); + await page.keyboard.press("Delete"); + await expect(page.getByRole("heading", { name: "Delete Bakery?" })).toHaveCount(0); + await expect(page.locator(".location-map-object.is-selected")).toHaveCount(1); + + await page.getByRole("button", { name: "Visible" }).focus(); + await page.keyboard.press("Delete"); + await expect(page.getByRole("heading", { name: "Delete Bakery?" })).toBeVisible(); + await page.getByRole("button", { name: "Cancel" }).click(); + await expect(page.getByRole("heading", { name: "Delete Bakery?" })).toHaveCount(0); + await expect(page.locator(".location-map-object.is-selected")).toHaveCount(1); + await page.getByRole("textbox", { name: "Label" }).focus(); await page.keyboard.press("Escape"); await expect(page.getByRole("textbox", { name: "Label" })).toBeVisible();