diff --git a/frontend/src/lib/components/common/ConfirmDialog.svelte b/frontend/src/lib/components/common/ConfirmDialog.svelte new file mode 100644 index 0000000..8e9dafd --- /dev/null +++ b/frontend/src/lib/components/common/ConfirmDialog.svelte @@ -0,0 +1,123 @@ + + + + +
+

{message}

+
+ + +
+
+
+ + \ No newline at end of file diff --git a/frontend/src/routes/categories/[id]/+page.svelte b/frontend/src/routes/categories/[id]/+page.svelte index 9301010..93d0a8c 100644 --- a/frontend/src/routes/categories/[id]/+page.svelte +++ b/frontend/src/routes/categories/[id]/+page.svelte @@ -4,6 +4,7 @@ import { api, ApiError } from '$lib/api/client'; import type { Category, Tag, TagOffsetPage } from '$lib/api/types'; import TagBadge from '$lib/components/tag/TagBadge.svelte'; + import ConfirmDialog from '$lib/components/common/ConfirmDialog.svelte'; let categoryId = $derived(page.params.id); @@ -23,6 +24,7 @@ let loadError = $state(''); let saveError = $state(''); let loaded = $state(false); + let confirmDelete = $state(false); const TAGS_LIMIT = 100; @@ -87,9 +89,8 @@ } } - async function deleteCategory() { - if (deleting) return; - if (!confirm(`Delete category "${name}"? Tags in this category will be unassigned.`)) return; + async function doDeleteCategory() { + confirmDelete = false; deleting = true; try { await api.delete(`/categories/${categoryId}`); @@ -171,7 +172,7 @@ - @@ -212,6 +213,16 @@ +{#if confirmDelete} + (confirmDelete = false)} + /> +{/if} +