From ff68413e62f1fe3bd8dbc649df4db70c70063613 Mon Sep 17 00:00:00 2001 From: Nico Date: Mon, 15 Jun 2026 23:35:13 -0700 Subject: [PATCH] fix: close map layers with escape --- .../components/maps/LocationMapBottomSheet.jsx | 15 +++++++++++++++ frontend/tests/location-map-manager.spec.ts | 8 ++++++++ 2 files changed, 23 insertions(+) diff --git a/frontend/src/components/maps/LocationMapBottomSheet.jsx b/frontend/src/components/maps/LocationMapBottomSheet.jsx index dd7fb39..378f6bd 100644 --- a/frontend/src/components/maps/LocationMapBottomSheet.jsx +++ b/frontend/src/components/maps/LocationMapBottomSheet.jsx @@ -88,6 +88,21 @@ export default function LocationMapBottomSheet({ } }, [selectedObject, setLayersOpen]); + useEffect(() => { + if (!layersOpen || typeof window === "undefined") { + return undefined; + } + + const handleKeyDown = (event) => { + if (event.key === "Escape") { + setLayersOpen(false); + } + }; + + window.addEventListener("keydown", handleKeyDown); + return () => window.removeEventListener("keydown", handleKeyDown); + }, [layersOpen, setLayersOpen]); + const changedLayerCount = useMemo( () => MAP_DISPLAY_CONTROLS.filter(([key]) => filters[key] !== DEFAULT_MAP_FILTERS[key]).length, [filters] diff --git a/frontend/tests/location-map-manager.spec.ts b/frontend/tests/location-map-manager.spec.ts index 0d28005..1bf4257 100644 --- a/frontend/tests/location-map-manager.spec.ts +++ b/frontend/tests/location-map-manager.spec.ts @@ -1394,6 +1394,14 @@ test("mode switches close open map layers without resetting filters", async ({ p await expect(page.getByRole("button", { name: "Layers, 1 changed" })).toHaveAttribute("aria-expanded", "true"); await expect(page.getByRole("group", { name: "Layer filters" })).toBeVisible(); + await page.keyboard.press("Escape"); + + await expect(page.getByRole("button", { name: "Layers, 1 changed" })).toHaveAttribute("aria-expanded", "false"); + await expect(page.getByRole("group", { name: "Layer filters" })).toHaveCount(0); + + await page.getByRole("button", { name: "Layers, 1 changed" }).click(); + await expect(page.getByRole("group", { name: "Layer filters" })).toBeVisible(); + await page.getByRole("button", { name: "Edit Draft" }).click(); await expect(page.getByRole("button", { name: "Layers, 1 changed" })).toHaveAttribute("aria-expanded", "false");