Add store location map manager #20
@ -19,6 +19,7 @@ export default function useLocationMapViewControls({
|
|||||||
setFuture,
|
setFuture,
|
||||||
setHasUnsavedChanges,
|
setHasUnsavedChanges,
|
||||||
setHistory,
|
setHistory,
|
||||||
|
setLayersOpen,
|
||||||
setMode,
|
setMode,
|
||||||
setObjects,
|
setObjects,
|
||||||
setPreviewDraft,
|
setPreviewDraft,
|
||||||
@ -72,13 +73,15 @@ export default function useLocationMapViewControls({
|
|||||||
const handlePreviewDraft = useCallback(() => {
|
const handlePreviewDraft = useCallback(() => {
|
||||||
setMode("view");
|
setMode("view");
|
||||||
setEditorTool("pan");
|
setEditorTool("pan");
|
||||||
|
setLayersOpen(false);
|
||||||
setPreviewDraft(true);
|
setPreviewDraft(true);
|
||||||
setSelectedObjectKey(null);
|
setSelectedObjectKey(null);
|
||||||
}, [setEditorTool, setMode, setPreviewDraft, setSelectedObjectKey]);
|
}, [setEditorTool, setLayersOpen, setMode, setPreviewDraft, setSelectedObjectKey]);
|
||||||
|
|
||||||
const handleViewMode = useCallback(() => {
|
const handleViewMode = useCallback(() => {
|
||||||
setMode("view");
|
setMode("view");
|
||||||
setEditorTool("pan");
|
setEditorTool("pan");
|
||||||
|
setLayersOpen(false);
|
||||||
if (hasUnsavedChanges) {
|
if (hasUnsavedChanges) {
|
||||||
setPreviewDraft(true);
|
setPreviewDraft(true);
|
||||||
setSelectedObjectKey(null);
|
setSelectedObjectKey(null);
|
||||||
@ -92,6 +95,7 @@ export default function useLocationMapViewControls({
|
|||||||
hasUnsavedChanges,
|
hasUnsavedChanges,
|
||||||
mapState,
|
mapState,
|
||||||
setEditorTool,
|
setEditorTool,
|
||||||
|
setLayersOpen,
|
||||||
setMode,
|
setMode,
|
||||||
setPreviewDraft,
|
setPreviewDraft,
|
||||||
setSelectedObjectKey,
|
setSelectedObjectKey,
|
||||||
@ -101,6 +105,7 @@ export default function useLocationMapViewControls({
|
|||||||
const handleEditMode = useCallback(() => {
|
const handleEditMode = useCallback(() => {
|
||||||
setMode("edit");
|
setMode("edit");
|
||||||
setEditorTool("edit");
|
setEditorTool("edit");
|
||||||
|
setLayersOpen(false);
|
||||||
setPreviewDraft(true);
|
setPreviewDraft(true);
|
||||||
if (!previewDraft && mapState && !hasUnsavedChanges) {
|
if (!previewDraft && mapState && !hasUnsavedChanges) {
|
||||||
syncMapDraftFromState(mapState, "edit", true);
|
syncMapDraftFromState(mapState, "edit", true);
|
||||||
@ -110,6 +115,7 @@ export default function useLocationMapViewControls({
|
|||||||
mapState,
|
mapState,
|
||||||
previewDraft,
|
previewDraft,
|
||||||
setEditorTool,
|
setEditorTool,
|
||||||
|
setLayersOpen,
|
||||||
setMode,
|
setMode,
|
||||||
setPreviewDraft,
|
setPreviewDraft,
|
||||||
syncMapDraftFromState,
|
syncMapDraftFromState,
|
||||||
|
|||||||
@ -340,6 +340,7 @@ export default function LocationMapManager() {
|
|||||||
setFuture,
|
setFuture,
|
||||||
setHasUnsavedChanges,
|
setHasUnsavedChanges,
|
||||||
setHistory,
|
setHistory,
|
||||||
|
setLayersOpen,
|
||||||
setMode,
|
setMode,
|
||||||
setObjects,
|
setObjects,
|
||||||
setPreviewDraft,
|
setPreviewDraft,
|
||||||
|
|||||||
@ -1182,6 +1182,74 @@ test("admin status follows the visible map when a saved draft exists", async ({
|
|||||||
await expect(page.locator(".location-map-object", { hasText: "Live Bakery" })).toBeVisible();
|
await expect(page.locator(".location-map-object", { hasText: "Live Bakery" })).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("mode switches close open map layers without resetting filters", async ({ page }) => {
|
||||||
|
await mockMapShell(page);
|
||||||
|
|
||||||
|
const publishedObjects = [
|
||||||
|
{
|
||||||
|
id: 1241,
|
||||||
|
location_map_id: 901,
|
||||||
|
zone_id: 501,
|
||||||
|
zone_name: "Bakery",
|
||||||
|
type: "zone",
|
||||||
|
label: "Live Bakery",
|
||||||
|
x: 40,
|
||||||
|
y: 40,
|
||||||
|
width: 260,
|
||||||
|
height: 160,
|
||||||
|
rotation: 0,
|
||||||
|
locked: false,
|
||||||
|
visible: true,
|
||||||
|
sort_order: 1,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
const draftObjects = [
|
||||||
|
{
|
||||||
|
...publishedObjects[0],
|
||||||
|
id: 1242,
|
||||||
|
location_map_id: 900,
|
||||||
|
label: "Draft Bakery",
|
||||||
|
x: 80,
|
||||||
|
y: 80,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
await page.route("**/households/1/locations/10/map", async (route) => {
|
||||||
|
await route.fulfill({
|
||||||
|
status: 200,
|
||||||
|
contentType: "application/json",
|
||||||
|
body: JSON.stringify(draftAndPublishedMapState(draftObjects, publishedObjects, true)),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
await page.goto("/stores/100/locations/10/map");
|
||||||
|
|
||||||
|
await page.getByRole("button", { name: "Layers" }).click();
|
||||||
|
await page.getByRole("button", { name: "Pins" }).click();
|
||||||
|
await expect(page.getByRole("button", { name: "Layers, 1 changed" })).toHaveAttribute("aria-expanded", "true");
|
||||||
|
await expect(page.locator(".location-map-display-panel")).toBeVisible();
|
||||||
|
|
||||||
|
await page.getByRole("button", { name: "Edit Draft" }).click();
|
||||||
|
|
||||||
|
await expect(page.getByRole("button", { name: "Layers, 1 changed" })).toHaveAttribute("aria-expanded", "false");
|
||||||
|
await expect(page.locator(".location-map-display-panel")).toHaveCount(0);
|
||||||
|
|
||||||
|
await page.getByRole("button", { name: "Layers, 1 changed" }).click();
|
||||||
|
await expect(page.locator(".location-map-display-panel")).toBeVisible();
|
||||||
|
await page.getByRole("button", { name: "View", exact: true }).click();
|
||||||
|
|
||||||
|
await expect(page.getByRole("button", { name: "Layers, 1 changed" })).toHaveAttribute("aria-expanded", "false");
|
||||||
|
await expect(page.locator(".location-map-display-panel")).toHaveCount(0);
|
||||||
|
|
||||||
|
await page.getByRole("button", { name: "Edit Draft" }).click();
|
||||||
|
await page.getByRole("button", { name: "Layers, 1 changed" }).click();
|
||||||
|
await expect(page.locator(".location-map-display-panel")).toBeVisible();
|
||||||
|
await page.getByRole("button", { name: "Preview Draft" }).click();
|
||||||
|
|
||||||
|
await expect(page.getByRole("button", { name: "Layers, 1 changed" })).toHaveAttribute("aria-expanded", "false");
|
||||||
|
await expect(page.locator(".location-map-display-panel")).toHaveCount(0);
|
||||||
|
});
|
||||||
|
|
||||||
test("mobile keeps draft preview status compact in the topbar", async ({ page }) => {
|
test("mobile keeps draft preview status compact in the topbar", async ({ page }) => {
|
||||||
await page.setViewportSize({ width: 409, height: 838 });
|
await page.setViewportSize({ width: 409, height: 838 });
|
||||||
await mockMapShell(page);
|
await mockMapShell(page);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user