From e1658127929abca73d5e501a58bd481404ca75f7 Mon Sep 17 00:00:00 2001 From: neon <18559658+neonsolstice@users.noreply.github.com> Date: Tue, 25 Aug 2026 00:53:04 +0000 Subject: [PATCH] feat(client): confirm destructive Book Dock discards Require explicit confirmation before row, sheet, or bulk discard deletes files from disk. Provide a separate deselect action for bulk selections. Closes #1007 --- .../components/BookDockDiscardDialog.vue | 73 +++++++++++ .../components/BookDockFileSheet.vue | 9 +- .../book-dock/components/BookDockListBar.vue | 15 ++- .../__tests__/BookDockDiscardDialog.spec.ts | 117 ++++++++++++++++++ .../__tests__/BookDockFileRow.spec.ts | 8 ++ .../__tests__/BookDockFileSheet.spec.ts | 13 +- .../__tests__/BookDockListBar.spec.ts | 65 ++++++++++ .../__tests__/useBookDockFiles.spec.ts | 32 +++++ .../composables/useBookDockDetail.ts | 7 +- .../book-dock/composables/useBookDockFiles.ts | 7 ++ client/src/locales/en.json | 7 ++ client/src/views/BookDockView.vue | 85 ++++++++++--- 12 files changed, 407 insertions(+), 31 deletions(-) create mode 100644 client/src/features/book-dock/components/BookDockDiscardDialog.vue create mode 100644 client/src/features/book-dock/components/__tests__/BookDockDiscardDialog.spec.ts create mode 100644 client/src/features/book-dock/components/__tests__/BookDockListBar.spec.ts create mode 100644 client/src/features/book-dock/composables/__tests__/useBookDockFiles.spec.ts diff --git a/client/src/features/book-dock/components/BookDockDiscardDialog.vue b/client/src/features/book-dock/components/BookDockDiscardDialog.vue new file mode 100644 index 000000000..f32f6bba5 --- /dev/null +++ b/client/src/features/book-dock/components/BookDockDiscardDialog.vue @@ -0,0 +1,73 @@ + + + + + + {{ t('bookDock.discardDialog.failed') }} + + + diff --git a/client/src/features/book-dock/components/BookDockFileSheet.vue b/client/src/features/book-dock/components/BookDockFileSheet.vue index aa0730c4e..655c01290 100644 --- a/client/src/features/book-dock/components/BookDockFileSheet.vue +++ b/client/src/features/book-dock/components/BookDockFileSheet.vue @@ -30,11 +30,11 @@ const props = defineProps<{ file: BookDockFile }>() const emit = defineEmits<{ close: [] - discarded: [] + discard: [BookDockFile] updated: [BookDockFile] }>() -const { saved, saveError, saveMetadata, setTarget, discardFile, coverUrl } = useBookDockDetail() +const { saved, saveError, saveMetadata, setTarget, coverUrl } = useBookDockDetail() const { libraries, fetchLibraries: fetchLibs } = useLibraries() const meta = computed(() => props.file.selectedMetadata ?? props.file.embeddedMetadata ?? ({} as BookDockMetadata)) @@ -195,9 +195,8 @@ function formatDate(iso: string): string { return formatDateTime(new Date(iso)) } -async function handleDiscard() { - await discardFile(props.file.id) - emit('discarded') +function handleDiscard() { + emit('discard', props.file) } const { diff --git a/client/src/features/book-dock/components/BookDockListBar.vue b/client/src/features/book-dock/components/BookDockListBar.vue index 6ac182bb3..ccea20bc1 100644 --- a/client/src/features/book-dock/components/BookDockListBar.vue +++ b/client/src/features/book-dock/components/BookDockListBar.vue @@ -1,7 +1,7 @@
+ {{ t('bookDock.discardDialog.failed') }} +