fix: recover hidden areas from map canvas
This commit is contained in:
parent
0a16ad3e7e
commit
784d0f4d48
@ -22,7 +22,9 @@ export default function LocationMapCanvas({
|
||||
svgRef,
|
||||
dragState,
|
||||
editingLocked = false,
|
||||
hiddenAreaCount = 0,
|
||||
onShowZones,
|
||||
onShowHiddenAreas,
|
||||
setDragState,
|
||||
setSelectedObjectKey,
|
||||
remember,
|
||||
@ -35,6 +37,9 @@ export default function LocationMapCanvas({
|
||||
? objects.filter((object) => object.visible).length
|
||||
: 0;
|
||||
const hasNoVisibleObjects = objects.length > 0 && filters.showZones && visibleObjectCount === 0;
|
||||
const canRecoverHiddenAreas =
|
||||
mode === "edit" && hasNoVisibleObjects && hiddenAreaCount > 0 && typeof onShowHiddenAreas === "function";
|
||||
const hasEmptyCanvasAction = hiddenByZonesLayer || canRecoverHiddenAreas;
|
||||
const emptyCanvasMessage = objects.length === 0
|
||||
? "No map areas yet"
|
||||
: hiddenByZonesLayer
|
||||
@ -155,6 +160,11 @@ export default function LocationMapCanvas({
|
||||
onShowZones?.();
|
||||
};
|
||||
|
||||
const handleShowHiddenAreas = (event) => {
|
||||
event.stopPropagation();
|
||||
onShowHiddenAreas?.();
|
||||
};
|
||||
|
||||
const clearSelection = () => {
|
||||
if (suppressPanClickRef.current) {
|
||||
suppressPanClickRef.current = false;
|
||||
@ -392,7 +402,7 @@ export default function LocationMapCanvas({
|
||||
<div
|
||||
className={[
|
||||
"location-map-empty-canvas",
|
||||
hiddenByZonesLayer ? "has-action" : "",
|
||||
hasEmptyCanvasAction ? "has-action" : "",
|
||||
].filter(Boolean).join(" ")}
|
||||
>
|
||||
<span>{emptyCanvasMessage}</span>
|
||||
@ -404,6 +414,14 @@ export default function LocationMapCanvas({
|
||||
>
|
||||
Show Zones
|
||||
</button>
|
||||
) : canRecoverHiddenAreas ? (
|
||||
<button
|
||||
type="button"
|
||||
onPointerDown={(event) => event.stopPropagation()}
|
||||
onClick={handleShowHiddenAreas}
|
||||
>
|
||||
Show Hidden
|
||||
</button>
|
||||
) : null}
|
||||
</div>
|
||||
) : null}
|
||||
|
||||
@ -558,6 +558,7 @@ export default function LocationMapManager() {
|
||||
svgRef={svgRef}
|
||||
dragState={dragState}
|
||||
editingLocked={saving}
|
||||
hiddenAreaCount={hiddenAreaCount}
|
||||
setDragState={setDragState}
|
||||
setSelectedObjectKey={setSelectedObjectKey}
|
||||
remember={remember}
|
||||
@ -568,6 +569,7 @@ export default function LocationMapManager() {
|
||||
showZones: true,
|
||||
}))
|
||||
}
|
||||
onShowHiddenAreas={handleShowHiddenAreas}
|
||||
/>
|
||||
<LocationMapBottomSheet
|
||||
mode={mode}
|
||||
|
||||
@ -596,7 +596,7 @@ test("admin selecting an object does not mark a draft dirty until it changes", a
|
||||
await expect(page.getByRole("button", { name: "Undo" })).toBeEnabled();
|
||||
});
|
||||
|
||||
test("admin can recover hidden map areas from the edit sheet", async ({ page }) => {
|
||||
test("admin can recover hidden map areas from the empty canvas", async ({ page }) => {
|
||||
await mockMapShell(page);
|
||||
|
||||
let savedPayload: Record<string, unknown> | null = null;
|
||||
@ -655,11 +655,13 @@ test("admin can recover hidden map areas from the edit sheet", async ({ page })
|
||||
await expect(page.getByRole("button", { name: "Map area Bakery" })).toHaveCount(0);
|
||||
await expect(page.locator(".location-map-sheet-header strong")).toHaveText("Edit Objects");
|
||||
await expect(page.getByText("No visible map areas")).toBeVisible();
|
||||
await expect(page.locator(".location-map-empty-canvas").getByRole("button", { name: "Show Hidden" })).toBeVisible();
|
||||
await expect(page.getByRole("button", { name: "Show Hidden Areas (1)" })).toBeVisible();
|
||||
await expect(page.locator(".location-map-status")).toHaveText("Unsaved Draft");
|
||||
|
||||
await page.getByRole("button", { name: "Show Hidden Areas (1)" }).click();
|
||||
await page.locator(".location-map-empty-canvas").getByRole("button", { name: "Show Hidden" }).click();
|
||||
await expect(page.getByRole("button", { name: "Map area Bakery" })).toBeVisible();
|
||||
await expect(page.locator(".location-map-empty-canvas").getByRole("button", { name: "Show Hidden" })).toHaveCount(0);
|
||||
await expect(page.getByRole("button", { name: "Show Hidden Areas (1)" })).toHaveCount(0);
|
||||
|
||||
await page.getByRole("button", { name: "Save Draft" }).click();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user