fix: request map area delete from keyboard

This commit is contained in:
Nico 2026-06-16 00:20:12 -07:00
parent d3194959fc
commit fc883e9f62
2 changed files with 53 additions and 0 deletions

View File

@ -285,6 +285,47 @@ export default function LocationMapManager() {
saving, 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) { if (!hasLoaded || householdLoading || loading) {
return ( return (
<LocationMapMessageState <LocationMapMessageState

View File

@ -2438,6 +2438,18 @@ test("admin selected map area uses compact editable fields", async ({ page }) =>
await expect(page.getByRole("spinbutton", { name: "W" })).toHaveCount(0); await expect(page.getByRole("spinbutton", { name: "W" })).toHaveCount(0);
await expect(page.getByRole("spinbutton", { name: "H" })).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.getByRole("textbox", { name: "Label" }).focus();
await page.keyboard.press("Escape"); await page.keyboard.press("Escape");
await expect(page.getByRole("textbox", { name: "Label" })).toBeVisible(); await expect(page.getByRole("textbox", { name: "Label" })).toBeVisible();