Add store location map manager #20
@ -559,7 +559,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.location-map-bottom-sheet {
|
.location-map-bottom-sheet {
|
||||||
max-height: 38dvh;
|
max-height: 34dvh;
|
||||||
}
|
}
|
||||||
|
|
||||||
.location-map-topbar {
|
.location-map-topbar {
|
||||||
|
|||||||
@ -480,6 +480,64 @@ test("viewer wraps long zone labels and keeps item counts visible", async ({ pag
|
|||||||
await expect(produceArea.locator(".location-map-count")).toHaveAttribute("y", "92");
|
await expect(produceArea.locator(".location-map-count")).toHaveAttribute("y", "92");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("mobile editor uses bottom sheet controls instead of desktop object toolbar", async ({ page }) => {
|
||||||
|
await page.setViewportSize({ width: 390, height: 844 });
|
||||||
|
await mockMapShell(page);
|
||||||
|
|
||||||
|
const mapState = draftMapState([
|
||||||
|
{
|
||||||
|
id: 1601,
|
||||||
|
location_map_id: 900,
|
||||||
|
zone_id: 501,
|
||||||
|
zone_name: "Bakery",
|
||||||
|
type: "zone",
|
||||||
|
label: "Bakery",
|
||||||
|
x: 40,
|
||||||
|
y: 40,
|
||||||
|
width: 260,
|
||||||
|
height: 160,
|
||||||
|
rotation: 0,
|
||||||
|
locked: false,
|
||||||
|
visible: true,
|
||||||
|
sort_order: 1,
|
||||||
|
},
|
||||||
|
], true);
|
||||||
|
|
||||||
|
await page.route("**/households/1/locations/10/map", async (route) => {
|
||||||
|
await route.fulfill({
|
||||||
|
status: 200,
|
||||||
|
contentType: "application/json",
|
||||||
|
body: JSON.stringify(mapState),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
await page.goto("/stores/100/locations/10/map");
|
||||||
|
|
||||||
|
await expect(page.getByRole("heading", { name: "Costco" })).toBeVisible();
|
||||||
|
await expect(page.getByText("Eastvale")).toBeVisible();
|
||||||
|
await expect(page.getByRole("heading", { name: "Draft Map" })).toBeVisible();
|
||||||
|
await page.getByRole("button", { name: "Continue Editing" }).click();
|
||||||
|
|
||||||
|
await expect(page.getByLabel("Map controls")).toBeVisible();
|
||||||
|
await expect(page.locator(".location-map-tool-buttons")).toBeHidden();
|
||||||
|
await expect(page.locator(".location-map-mobile-tool-switch")).toBeVisible();
|
||||||
|
await expect(page.getByRole("button", { name: "Pan" })).toBeVisible();
|
||||||
|
await expect(page.getByRole("button", { name: "Objects" })).toBeVisible();
|
||||||
|
await expect(page.locator(".location-map-pin")).toHaveCount(0);
|
||||||
|
|
||||||
|
const canvasBox = await page.locator(".location-map-canvas-shell").boundingBox();
|
||||||
|
const sheetBox = await page.locator(".location-map-bottom-sheet").boundingBox();
|
||||||
|
expect(canvasBox).not.toBeNull();
|
||||||
|
expect(sheetBox).not.toBeNull();
|
||||||
|
if (!canvasBox || !sheetBox) throw new Error("Mobile map layout was not measurable");
|
||||||
|
expect(canvasBox.height).toBeGreaterThan(260);
|
||||||
|
expect(sheetBox.height).toBeLessThanOrEqual(360);
|
||||||
|
|
||||||
|
await page.getByRole("button", { name: "Objects" }).click();
|
||||||
|
await page.locator(".location-map-object", { hasText: "Bakery" }).locator("rect").first().click();
|
||||||
|
await expect(page.getByRole("textbox", { name: "Label" })).toBeVisible();
|
||||||
|
});
|
||||||
|
|
||||||
test("members can view a published map but cannot edit it", async ({ page }) => {
|
test("members can view a published map but cannot edit it", async ({ page }) => {
|
||||||
await mockMapShell(page, memberHousehold);
|
await mockMapShell(page, memberHousehold);
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user