fix: clarify partial unmapped map filters

This commit is contained in:
Nico 2026-06-03 23:15:00 -07:00
parent 76dcea237e
commit b941d5ffed
2 changed files with 62 additions and 0 deletions

View File

@ -84,6 +84,7 @@ export default function LocationMapBottomSheet({
const changedLayerCount = DISPLAY_CONTROLS.filter(([key]) => filters[key] !== DEFAULT_MAP_FILTERS[key]).length; const changedLayerCount = DISPLAY_CONTROLS.filter(([key]) => filters[key] !== DEFAULT_MAP_FILTERS[key]).length;
const unmappedItemPreview = visibleUnmappedItems.slice(0, 8); const unmappedItemPreview = visibleUnmappedItems.slice(0, 8);
const overflowUnmappedItemCount = visibleUnmappedItems.length - unmappedItemPreview.length; const overflowUnmappedItemCount = visibleUnmappedItems.length - unmappedItemPreview.length;
const hiddenUnmappedItemCount = Math.max(0, unmappedItemCount - visibleUnmappedItems.length);
const hasHiddenUnmappedItems = const hasHiddenUnmappedItems =
filters.showUnmapped && unmappedItemCount > 0 && visibleUnmappedItems.length === 0; filters.showUnmapped && unmappedItemCount > 0 && visibleUnmappedItems.length === 0;
const selectedWidth = Number(selectedObject?.width) || 40; const selectedWidth = Number(selectedObject?.width) || 40;
@ -438,6 +439,16 @@ export default function LocationMapBottomSheet({
</li> </li>
) : null} ) : null}
</ul> </ul>
{hiddenUnmappedItemCount > 0 ? (
<div className="location-map-zone-hidden-note">
<p className="location-map-muted">
{hiddenUnmappedItemCount} more hidden by layer filters.
</p>
<button type="button" onClick={showUnmappedItems}>
Show All Unmapped Items
</button>
</div>
) : null}
</div> </div>
) : hasHiddenUnmappedItems ? ( ) : hasHiddenUnmappedItems ? (
<div className="location-map-unmapped-list"> <div className="location-map-unmapped-list">

View File

@ -1539,6 +1539,57 @@ test("viewer explains when unmapped items are hidden by filters", async ({ page
await expect(page.getByRole("button", { name: "Layers, 3 changed" })).toBeVisible(); await expect(page.getByRole("button", { name: "Layers, 3 changed" })).toBeVisible();
}); });
test("viewer marks partial unmapped counts when filters hide some items", async ({ page }) => {
await mockMapShell(page);
const mapState = {
...publishedMapState([], true),
items: [
{
id: 4110,
item_name: "visible batteries",
quantity: 1,
bought: false,
zone_id: null,
zone: null,
added_by_users: ["map-user"],
},
{
id: 4111,
item_name: "hidden batteries",
quantity: 1,
bought: false,
zone_id: null,
zone: null,
added_by_users: ["other-user"],
},
],
unmapped_count: 2,
};
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 page.getByRole("button", { name: "Layers" }).click();
await page.getByLabel("Unmapped").check();
await expect(page.getByText("visible batteries")).toBeVisible();
await expect(page.getByText("hidden batteries")).toHaveCount(0);
await expect(page.getByText("1 more hidden by layer filters.")).toBeVisible();
await expect(page.getByRole("button", { name: "Show All Unmapped Items" })).toBeVisible();
await page.getByRole("button", { name: "Show All Unmapped Items" }).click();
await expect(page.getByText("hidden batteries")).toBeVisible();
await expect(page.getByText("1 more hidden by layer filters.")).toHaveCount(0);
});
test("viewer explains when selected zone items are hidden by filters", async ({ page }) => { test("viewer explains when selected zone items are hidden by filters", async ({ page }) => {
await mockMapShell(page); await mockMapShell(page);