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