From 06ccab8e4556f0c735bb1500c179a30700353fd5 Mon Sep 17 00:00:00 2001 From: Optic00 Date: Mon, 7 Sep 2026 08:04:55 +0200 Subject: [PATCH] fix: preserve item deletion feedback and reparent navigation --- frontend/src/lib/api/items.js | 2 +- frontend/src/lib/dialogs/DeleteItemDialog.svelte | 1 + frontend/src/lib/features/items/ItemDetail.svelte | 15 ++++++++++++++- frontend/src/lib/stores/itemDetailStore.svelte.js | 4 +++- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/frontend/src/lib/api/items.js b/frontend/src/lib/api/items.js index 7ced7c0b..4447689b 100644 --- a/frontend/src/lib/api/items.js +++ b/frontend/src/lib/api/items.js @@ -230,7 +230,7 @@ export const items = { ), reparentChildren: (id, newParentId) => fetchV2Data(`/items/${id}/reparent-children`, { - method: 'PUT', + method: 'POST', body: JSON.stringify({ parent_id: newParentId }), }), copy: withCrossTabNotice( diff --git a/frontend/src/lib/dialogs/DeleteItemDialog.svelte b/frontend/src/lib/dialogs/DeleteItemDialog.svelte index b1927ecf..d1dc897b 100644 --- a/frontend/src/lib/dialogs/DeleteItemDialog.svelte +++ b/frontend/src/lib/dialogs/DeleteItemDialog.svelte @@ -254,6 +254,7 @@ { if (!itemDetailStore.notFound) return; itemDetailStore.notFound = false; - infoToast('This item was deleted.'); + announceDeletion(); if (isModal && onclose) { onclose({ hasChanges: false }); } else if (!isModal) { @@ -747,6 +754,12 @@ import NativeSelect from '../../components/NativeSelect.svelte'; } function handleDeleteComplete(result) { + // The HTTP response can arrive before the live deletion event. + announceDeletion(); + // Do not let the next detail briefly render the deleted shared-store item. + itemDetailStore.reset(); + // Reparent navigation can reuse this component; allow its next item load. + itemDetailStore.loading = false; const collectionId = $currentRoute.params?.collectionId; // Navigate based on deletion result if (result?.mode === 'reparent' && result?.newParentId) { diff --git a/frontend/src/lib/stores/itemDetailStore.svelte.js b/frontend/src/lib/stores/itemDetailStore.svelte.js index 9ae58b27..74d8898f 100644 --- a/frontend/src/lib/stores/itemDetailStore.svelte.js +++ b/frontend/src/lib/stores/itemDetailStore.svelte.js @@ -643,7 +643,9 @@ class ItemDetailStore { return this.diagrams; }) .catch((err) => { - if (isAbortError(err)) return this.diagrams; + if (isAbortError(err) || controller.signal.aborted || this.item?.id !== itemId) { + return this.diagrams; + } if (err?.status === 404) { this.markDeleted(); return this.diagrams;