diff --git a/frontend/src/lib/components/forms/edit-book/edit-book.svelte b/frontend/src/lib/components/forms/edit-book/edit-book.svelte
index 1b0a5e0..cfcc300 100644
--- a/frontend/src/lib/components/forms/edit-book/edit-book.svelte
+++ b/frontend/src/lib/components/forms/edit-book/edit-book.svelte
@@ -9,8 +9,17 @@
let { book, open = $bindable() }: { book?: Book; open: boolean } = $props();
+
{#if book}
+ {#key book.id}
@@ -35,5 +44,6 @@
+ {/key}
{/if}
diff --git a/frontend/src/lib/components/forms/edit-book/edit-cover.svelte b/frontend/src/lib/components/forms/edit-book/edit-cover.svelte
index db2578c..86b31f4 100644
--- a/frontend/src/lib/components/forms/edit-book/edit-cover.svelte
+++ b/frontend/src/lib/components/forms/edit-book/edit-cover.svelte
@@ -18,7 +18,8 @@
let { book, open = $bindable() }: { book: Book; open: boolean } = $props();
let formEl = $state();
- let coverImagePreview = $state(`/api/${book.cover_image}`);
+ // Seeded once per mount — see the key in edit-book.svelte
+ let coverImagePreview = $state(untrack(() => `/api/${book.cover_image}`));
let autoUploadOnDrop = $state(true);
const onUpload: FileDropZoneProps['onUpload'] = async (uploadedFiles) => {
diff --git a/frontend/src/lib/components/forms/edit-book/edit-metadata.svelte b/frontend/src/lib/components/forms/edit-book/edit-metadata.svelte
index 7b935be..5345d6c 100644
--- a/frontend/src/lib/components/forms/edit-book/edit-metadata.svelte
+++ b/frontend/src/lib/components/forms/edit-book/edit-metadata.svelte
@@ -14,10 +14,12 @@
let { book, open = $bindable() }: { book: Book; open: boolean } = $props();
- let authors = $state(book.authors.map((author) => author.name) || []);
- let tags = $state(book.tags.map((tag) => tag.name) || []);
- let identifierKeys = $state(Object.keys(book.identifiers));
- let identifierValues = $state(Object.values(book.identifiers));
+ // Seeded once per mount; edit-book.svelte keys this form on book.id so a
+ // different book gets a fresh form rather than the previous book's values.
+ let authors = $state(untrack(() => book.authors.map((author) => author.name) || []));
+ let tags = $state(untrack(() => book.tags.map((tag) => tag.name) || []));
+ let identifierKeys = $state(untrack(() => Object.keys(book.identifiers)));
+ let identifierValues = $state(untrack(() => Object.values(book.identifiers)));
function handleAddIdentifier() {
// Add empty strings to both arrays