diff --git a/src/web-service/frontend/src/lib/forms/Checkbox.svelte b/src/web-service/frontend/src/lib/forms/Checkbox.svelte index 3849455a..1ebbe3fb 100644 --- a/src/web-service/frontend/src/lib/forms/Checkbox.svelte +++ b/src/web-service/frontend/src/lib/forms/Checkbox.svelte @@ -2,14 +2,15 @@ import Checkmark from "../../assets/svg/Checkmark.svelte"; import {createEventDispatcher} from "svelte"; - export let label: string; export let id: number; + export let label: string; + export let count: number; export let checked: boolean | undefined; const dispatch = createEventDispatcher(); -
+
{ checked = ! checked; dispatch('updateShoppingListEntry') } } type="checkbox" @@ -23,7 +24,10 @@
\ No newline at end of file diff --git a/src/web-service/frontend/src/lib/shopping-list/ShoppingListEntry.svelte b/src/web-service/frontend/src/lib/shopping-list/ShoppingListEntry.svelte index 75a4e464..22e9594d 100644 --- a/src/web-service/frontend/src/lib/shopping-list/ShoppingListEntry.svelte +++ b/src/web-service/frontend/src/lib/shopping-list/ShoppingListEntry.svelte @@ -2,6 +2,7 @@ import {createEventDispatcher, onMount} from 'svelte'; import Checkbox from "$lib/forms/Checkbox.svelte"; import {handleErrors} from "../../assets/helper/handleErrors"; + import Trash from "../../assets/svg/Trash.svelte"; type ViewState = "detailed" | "compressed"; @@ -47,7 +48,7 @@ }); function updateShoppingListEntry(): void { - if (! listId || !productData.id) return; + if (! listId || ! productData.id ) return; const apiUrl: string = `/api/v1/shoppinglistentries/${listId}/${productData.id}`; const requestOptions = { @@ -61,18 +62,39 @@ .then(()=> dispatch('updateCheckedEntriesCount', { state: entry.checked })) .catch(error => console.error("Failed to fetch data:", error.message)); } + + function deleteShoppingListEntry(): void { + if (! listId || ! productData.id) return; + + const apiUrl: string = `/api/v1/shoppinglistentries/${listId}/${productData.id}`; + const requestOptions = { + method: "DELETE", + headers: { 'Content-Type': 'application/json' }, + }; + + fetch(apiUrl, requestOptions) + .then(handleErrors) + .then(()=> { location.reload(); dispatch('updateCheckedEntriesCount', { state: true }) }) + .catch(error => console.error("Failed to fetch data:", error.message)); + }
  • -
    - - - {entry.count} Stk. - +
    +
    + +
    +
    {#if view === 'detailed' && priceData}

    diff --git a/src/web-service/frontend/src/routes/shopping-lists/[id]/+page.svelte b/src/web-service/frontend/src/routes/shopping-lists/[id]/+page.svelte index b6981892..4780c357 100644 --- a/src/web-service/frontend/src/routes/shopping-lists/[id]/+page.svelte +++ b/src/web-service/frontend/src/routes/shopping-lists/[id]/+page.svelte @@ -23,6 +23,11 @@ checkedEntriesCount++; } }) + + if (data.entries.length > 0 && data.list.completed && checkedEntriesCount != data.entries.length) { + data.list.completed = false; + updateShoppingList(); + } }); function updateCheckedEntriesCount(event: any): void { @@ -83,6 +88,10 @@

    Deine Einkaufsliste

      + {#if data.entries.length === 0} +

      Keine Einträge vorhanden.

      + {/if} + {#each data.entries as entry} - {#if ! data.list.completed} - - {/if} +