diff --git a/src/screens/StartPickListScreen.test.tsx b/src/screens/StartPickListScreen.test.tsx
index 58f6454..e8074e0 100644
--- a/src/screens/StartPickListScreen.test.tsx
+++ b/src/screens/StartPickListScreen.test.tsx
@@ -133,4 +133,36 @@ describe('StartPickListScreen', () => {
expect(item.status).toBe('pending');
});
});
+
+ it('deduplicates products when selected categories include overlaps', async () => {
+ const user = userEvent.setup();
+ productsToArrayMock.mockResolvedValue([
+ ...productsMock,
+ { ...productsMock[0] },
+ { ...productsMock[1], id: 'prod-2-duplicate' },
+ ]);
+
+ render(
+
+
+ ,
+ );
+
+ await user.click(screen.getByLabelText(/area/i));
+ await user.click(screen.getByRole('option', { name: /front counter/i }));
+
+ await user.click(screen.getByRole('checkbox', { name: /drinks/i }));
+ await user.click(screen.getByRole('checkbox', { name: /snacks/i }));
+
+ await user.click(screen.getByRole('button', { name: /save pick list/i }));
+
+ await waitFor(() => expect(pickItemsBulkAddMock).toHaveBeenCalled());
+
+ const pickItems = pickItemsBulkAddMock.mock.calls[0][0];
+ const uniqueProductIds = new Set(pickItems.map((item: any) => item.product_id));
+
+ expect(pickItems).toHaveLength(2);
+ expect(uniqueProductIds.size).toBe(2);
+ expect(uniqueProductIds).toEqual(new Set(['prod-1', 'prod-2']));
+ });
});
diff --git a/src/screens/StartPickListScreen.tsx b/src/screens/StartPickListScreen.tsx
index a4fa143..af314cd 100644
--- a/src/screens/StartPickListScreen.tsx
+++ b/src/screens/StartPickListScreen.tsx
@@ -66,12 +66,23 @@ export const StartPickListScreen = () => {
(product) => selectedCategoryNames.includes(product.category) && !product.archived,
);
+ const uniqueProducts: typeof productsInCategories = [];
+ const seenNames = new Set();
+
+ productsInCategories.forEach((product) => {
+ const nameKey = product.name.toLowerCase();
+ if (!seenNames.has(nameKey)) {
+ seenNames.add(nameKey);
+ uniqueProducts.push(product);
+ }
+ });
+
if (productsInCategories.length === 0) {
return;
}
await db.pickItems.bulkAdd(
- productsInCategories.map((product) => ({
+ uniqueProducts.map((product) => ({
id: uuidv4(),
pick_list_id: pickListId,
product_id: product.id,