From f4eac4d9c34247d70a966a93bc154e9f09551f10 Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Tue, 21 Apr 2026 23:45:32 +0200 Subject: [PATCH] feat(shopping): Rezept-Chips mit Portions-Stepper --- src/lib/components/ShoppingCartChip.svelte | 75 ++++++++++++++++++++++ src/routes/shopping-list/+page.svelte | 30 +++++++++ 2 files changed, 105 insertions(+) create mode 100644 src/lib/components/ShoppingCartChip.svelte diff --git a/src/lib/components/ShoppingCartChip.svelte b/src/lib/components/ShoppingCartChip.svelte new file mode 100644 index 0000000..2bc6352 --- /dev/null +++ b/src/lib/components/ShoppingCartChip.svelte @@ -0,0 +1,75 @@ + + +
+ {recipe.title} +
+ + {recipe.servings}p + + +
+
+ + diff --git a/src/routes/shopping-list/+page.svelte b/src/routes/shopping-list/+page.svelte index f695f9b..db6919a 100644 --- a/src/routes/shopping-list/+page.svelte +++ b/src/routes/shopping-list/+page.svelte @@ -3,6 +3,7 @@ import { ShoppingCart } from 'lucide-svelte'; import type { ShoppingListSnapshot } from '$lib/server/shopping/repository'; import ShoppingListRow from '$lib/components/ShoppingListRow.svelte'; + import ShoppingCartChip from '$lib/components/ShoppingCartChip.svelte'; import type { ShoppingListRow as Row } from '$lib/server/shopping/repository'; import { shoppingCartStore } from '$lib/client/shopping-cart.svelte'; @@ -30,6 +31,22 @@ void shoppingCartStore.refresh(); } + async function onServingsChange(recipeId: number, servings: number) { + await fetch(`/api/shopping-list/recipe/${recipeId}`, { + method: 'PATCH', + headers: { 'content-type': 'application/json' }, + body: JSON.stringify({ servings }) + }); + await load(); + void shoppingCartStore.refresh(); + } + + async function onRemoveRecipe(recipeId: number) { + await fetch(`/api/shopping-list/recipe/${recipeId}`, { method: 'DELETE' }); + await load(); + void shoppingCartStore.refresh(); + } + onMount(load); @@ -51,6 +68,11 @@

Lege Rezepte auf der Wunschliste in den Wagen, um sie hier zu sehen.

{:else} +
+ {#each snapshot.recipes as r (r.recipe_id)} + + {/each} +