fix: Stop mobile editor from reverting keystrokes

currentText was $state, and the validated-state sync $effect both reads
and writes it. Every keystroke (which sets currentText in the CodeMirror
updateListener) therefore re-ran the effect while re-validation was
still in flight, dispatching a full-document replacement with the stale
validatedState text — visibly reverting the keystroke and resetting the
cursor until validation caught up.

The effect only needs to react to validatedState publishes, so make
currentText a plain variable, matching DesktopEditor.

No unit test: the repo has no component-test harness, and CodeMirror
cannot mount under jsdom without one.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Sidharth Vinod
2026-06-10 23:51:57 +05:30
co-authored by Claude Fable 5
parent 6a9a306ed7
commit 144b4dc190
+4 -1
View File
@@ -15,7 +15,10 @@
let editorView: EditorView | undefined; let editorView: EditorView | undefined;
let editorContainer: HTMLDivElement; let editorContainer: HTMLDivElement;
let currentText = $state(''); // Deliberately not $state: the sync effect below both reads and writes it,
// so a reactive currentText would make every keystroke re-run the effect
// against the not-yet-revalidated state and revert the user's input.
let currentText = '';
const themeCompartment = new Compartment(); const themeCompartment = new Compartment();
const languageCompartment = new Compartment(); const languageCompartment = new Compartment();