diff --git a/frontend/src/lib/shared/discussion/MentionDropdown.svelte b/frontend/src/lib/shared/discussion/MentionDropdown.svelte index 39b115cf..4191879d 100644 --- a/frontend/src/lib/shared/discussion/MentionDropdown.svelte +++ b/frontend/src/lib/shared/discussion/MentionDropdown.svelte @@ -34,6 +34,12 @@ let searchQuery = $state(untrack(() => editorQuery)); let userHasEdited = $state(false); // Mirror the editor's typed text until the user takes ownership. +// +// Why `$state + $effect` (not `$derived`): `searchQuery` is also written by +// `bind:value` on the below, so it needs to be a mutable `$state`. +// A `$derived` would be read-only and would clobber direct user edits on +// every editor keystroke. The `userHasEdited` latch pins ownership once the +// user types into the input. Felix #1 on PR #629. $effect(() => { if (!userHasEdited) { searchQuery = editorQuery;