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:
co-authored by
Claude Fable 5
parent
6a9a306ed7
commit
144b4dc190
@@ -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();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user