From 5f423e365ada8aae63ad07099031a23252f47514 Mon Sep 17 00:00:00 2001 From: Martin Kagamino Lehoux Date: Mon, 27 Jul 2026 20:44:10 +0200 Subject: feat: navbar + split list/catalog into separate pages - Navbar component with List, Catalog, Categories tabs - / = shopping list (unchecked items with add form) - /catalog = full catalog with toggle - /categories = category management - Removed page titles (navbar indicates context) --- src/lib/components/Nav.svelte | 40 +++++++++++ src/routes/+layout.svelte | 4 ++ src/routes/+page.server.ts | 8 ++- src/routes/+page.svelte | 47 +------------ src/routes/catalog/+page.server.ts | 52 ++++++++++++++ src/routes/catalog/+page.svelte | 136 +++++++++++++++++++++++++++++++++++++ src/routes/categories/+page.svelte | 2 - 7 files changed, 239 insertions(+), 50 deletions(-) create mode 100644 src/lib/components/Nav.svelte create mode 100644 src/routes/catalog/+page.server.ts create mode 100644 src/routes/catalog/+page.svelte (limited to 'src') diff --git a/src/lib/components/Nav.svelte b/src/lib/components/Nav.svelte new file mode 100644 index 0000000..2899bfc --- /dev/null +++ b/src/lib/components/Nav.svelte @@ -0,0 +1,40 @@ + + + + + diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index db5327e..8ba4f8f 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,4 +1,7 @@ @@ -7,6 +10,7 @@
+
diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts index 27ecbe1..d548d09 100644 --- a/src/routes/+page.server.ts +++ b/src/routes/+page.server.ts @@ -1,12 +1,16 @@ import { fail } from '@sveltejs/kit'; import { db } from '$lib/server/db'; import { groceries, categories, references } from '$lib/server/db/schema'; -import { eq, desc, asc } from 'drizzle-orm'; +import { eq, desc } from 'drizzle-orm'; import type { Actions, PageServerLoad } from './$types'; export const load: PageServerLoad = async () => { const [items, cats, refs] = await Promise.all([ - db.select().from(groceries).orderBy(desc(groceries.createdAt)), + db + .select() + .from(groceries) + .where(eq(groceries.checked, false)) + .orderBy(desc(groceries.createdAt)), db.select().from(categories).orderBy(desc(categories.name)), db.select().from(references).orderBy(desc(references.qualityScore)), ]); diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 1a70f47..57ce3d0 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -5,8 +5,7 @@ let { data, form } = $props(); let name = $state(''); - let listItems = $derived(data?.items?.filter((i) => !i.checked) ?? []); - let catalogItems = $derived(data?.items?.filter((i) => i.checked) ?? []); + let listItems = $derived(data?.items ?? []); function groupByCategory(items: typeof listItems) { const groups: Record = {}; @@ -18,8 +17,6 @@ } -

Groceries

-