diff --git a/src/screens/ActivePickListScreen.test.tsx b/src/screens/ActivePickListScreen.test.tsx index 3de488b..e1471be 100644 --- a/src/screens/ActivePickListScreen.test.tsx +++ b/src/screens/ActivePickListScreen.test.tsx @@ -772,6 +772,48 @@ describe('ActivePickListScreen product search', () => { expect(screen.queryByText('Chips')).not.toBeInTheDocument(); }); + it('retains a chosen packaging filter when statuses are mixed but packaging types are not', async () => { + pickItemsMock.mockReturnValue([ + { + id: 'item-1', + pick_list_id: 'list-1', + product_id: 'prod-1', + quantity: 1, + is_carton: false, + status: 'pending', + created_at: 0, + updated_at: 0, + }, + { + id: 'item-2', + pick_list_id: 'list-1', + product_id: 'prod-2', + quantity: 1, + is_carton: false, + status: 'picked', + created_at: 0, + updated_at: 0, + }, + ]); + + const user = userEvent.setup(); + + render( + + + } /> + + , + ); + + const unitsRadio = screen.getByRole('radio', { name: /units/i }); + await user.click(unitsRadio); + + expect(unitsRadio).toBeChecked(); + expect(screen.getByText('Cola')).toBeVisible(); + expect(screen.getByText('Chips')).toBeVisible(); + }); + it('disables packaging filters when all items share the same status', () => { pickItemsMock.mockReturnValue([ { diff --git a/src/screens/ActivePickListScreen.tsx b/src/screens/ActivePickListScreen.tsx index afe93fc..6233ade 100644 --- a/src/screens/ActivePickListScreen.tsx +++ b/src/screens/ActivePickListScreen.tsx @@ -156,12 +156,12 @@ export const ActivePickListScreen = () => { ); }, [pickList?.categories, sortedProducts]); - const hasCartonItems = useMemo( - () => itemsVisibleByStatus.some((item) => item.is_carton), + const visibleHasPicked = useMemo( + () => itemsVisibleByStatus.some((item) => item.status === 'picked'), [itemsVisibleByStatus], ); - const hasUnitItems = useMemo( - () => itemsVisibleByStatus.some((item) => !item.is_carton), + const visibleHasUnpicked = useMemo( + () => itemsVisibleByStatus.some((item) => item.status !== 'picked'), [itemsVisibleByStatus], ); const packagingTypeCount = Number(hasCartonItems) + Number(hasUnitItems); @@ -227,16 +227,16 @@ export const ActivePickListScreen = () => { ? sortedItems : sortedItems.filter((item) => item.status !== 'picked'); - if (itemFilter === 'cartons') { + if (appliedItemFilter === 'cartons') { return filteredItems.filter((item) => item.is_carton); } - if (itemFilter === 'units') { + if (appliedItemFilter === 'units') { return filteredItems.filter((item) => !item.is_carton); } return filteredItems; - }, [itemFilter, showPicked, sortedItems]); + }, [appliedItemFilter, showPicked, sortedItems]); const updateItemState = (itemId: string, updater: (item: PickItem) => PickItem) => { setItemState((current) => current.map((item) => (item.id === itemId ? updater(item) : item))); @@ -445,7 +445,7 @@ export const ActivePickListScreen = () => { > setItemFilter(event.target.value as 'all' | 'cartons' | 'units') }