fix(bulk-edit): drop dead initial-* props and clear store on edit-mode discard

Felix B1 — `WhoWhenSection.svelte:37` and `DescriptionSection.svelte:42`
mutated $bindable props at top-level script scope, seeding them from
`initial*` companion props that no caller ever passes. The pattern stomps
parent-owned state in any future component re-evaluation.

Removed the dead initialDateIso / initialLocation / initialDocumentLocation
props and let the bindables carry their own initial value. dateDisplay and
currentTitle now seed from the bindable directly inside untrack — no
re-assignment required.

Elicit B2 — In edit mode the file map IS the user's bulk selection, so
discarding must clear bulkSelectionStore and bounce back to /documents,
otherwise the user is left on /documents/bulk-edit with an empty form
and a stale count in the bottom bar.

Refs #225, PR #331

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Marcel
2026-04-25 16:29:44 +02:00
parent 5cbb14d4a3
commit 499beca124
4 changed files with 39 additions and 14 deletions

View File

@@ -11,7 +11,6 @@ let {
archiveBox = $bindable(''),
archiveFolder = $bindable(''),
initialTitle = '',
initialDocumentLocation = '',
initialSummary = '',
titleRequired = false,
suggestedTitle = '',
@@ -24,7 +23,6 @@ let {
archiveBox?: string;
archiveFolder?: string;
initialTitle?: string;
initialDocumentLocation?: string;
initialSummary?: string;
titleRequired?: boolean;
suggestedTitle?: string;
@@ -32,14 +30,11 @@ let {
editMode?: boolean;
} = $props();
// currentTitle seeds from initialTitle once at mount; subsequent edits flow
// through the oninput handler that flips titleDirty.
let titleDirty = $state(false);
currentTitle = untrack(() => initialTitle);
const titleValue = $derived(titleDirty ? currentTitle : suggestedTitle || currentTitle);
// Initialize controlled location field once from the legacy initial-* props so
// callers that haven't switched to the bindable form keep their existing
// pre-fill behaviour.
documentLocation = untrack(() => documentLocation || initialDocumentLocation);
</script>
<div class="rounded-sm border border-line bg-surface p-6 shadow-sm">