From 66939bab93cdcb9b7732c45d7bc3b99b6951fe15 Mon Sep 17 00:00:00 2001 From: Martin Kagamino Lehoux Date: Wed, 7 Oct 2026 19:17:14 +0200 Subject: feat: promote a reference as the primary shown in lists Add an is_primary flag to references; the promoted ref sorts first on the item page and is the one shown under the item in the list and catalog. Item page gets a star toggle per reference. --- src/routes/grocery/[id]/+page.server.ts | 7 +++++-- src/routes/grocery/[id]/+page.svelte | 37 +++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) (limited to 'src/routes/grocery') diff --git a/src/routes/grocery/[id]/+page.server.ts b/src/routes/grocery/[id]/+page.server.ts index 656e19c..a4ad377 100644 --- a/src/routes/grocery/[id]/+page.server.ts +++ b/src/routes/grocery/[id]/+page.server.ts @@ -6,10 +6,11 @@ import { loadAll as loadCategories } from '$lib/server/services/categories'; import { loadForGrocery, add as addRef, + promote, deleteReference, } from '$lib/server/services/references'; import { updateGrocery, deleteGrocery } from '$lib/server/services/groceries'; -import { deleteByIdAction } from '$lib/server/services/grocery-actions'; +import { idAction } from '$lib/server/services/grocery-actions'; import { numericId, parseFormString, @@ -70,7 +71,9 @@ export const actions: Actions = { }, delete: ({ request }) => - deleteByIdAction(request, deleteReference, { type: 'delete' }), + idAction(request, deleteReference, { type: 'delete' }), + + promote: ({ request }) => idAction(request, promote, { type: 'promote' }), update: async ({ request, params }) => { const data = await request.formData(); diff --git a/src/routes/grocery/[id]/+page.svelte b/src/routes/grocery/[id]/+page.svelte index 027c079..1a9aac8 100644 --- a/src/routes/grocery/[id]/+page.svelte +++ b/src/routes/grocery/[id]/+page.svelte @@ -156,6 +156,9 @@ {#each data?.references ?? [] as ref (ref.id)}
+ {#if ref.isPrimary} + ★ + {/if} {ref.reference} {#if ref.price} Note : {ref.qualityScore}/100 {/if}
+ {#if !ref.isPrimary} + + {/if} @@ -226,6 +239,30 @@ font-weight: 500; } + .primary-badge { + color: var(--accent); + font-size: 0.875rem; + } + + .promote-btn { + flex-shrink: 0; + width: 2rem; + aspect-ratio: 1; + padding: 0; + background: transparent; + border: none; + color: var(--text-secondary); + font-size: 1.25rem; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + } + + .promote-btn:hover { + color: var(--accent); + } + .error { margin-top: -0.25rem; margin-bottom: 0.5rem; -- cgit v1.3