fix(code): saving on change

This commit is contained in:
Elian Doran
2025-05-10 20:07:53 +03:00
parent ef312c9550
commit 3e5e9096d2
3 changed files with 55 additions and 22 deletions

View File

@@ -1,15 +1,45 @@
import { defaultKeymap } from "@codemirror/commands";
import { EditorView, keymap, lineNumbers, type EditorViewConfig } from "@codemirror/view";
import { EditorView, keymap, lineNumbers, ViewUpdate, type EditorViewConfig } from "@codemirror/view";
type ContentChangedListener = () => void;
export interface EditorConfig extends EditorViewConfig {
onContentChanged?: ContentChangedListener;
}
export default class CodeMirror extends EditorView {
constructor(config: EditorViewConfig) {
private config: EditorConfig;
constructor(config: EditorConfig) {
let extensions = [
keymap.of(defaultKeymap),
lineNumbers()
];
if (Array.isArray(config.extensions)) {
extensions = [...extensions, ...config.extensions];
}
if (config.onContentChanged) {
extensions.push(EditorView.updateListener.of((v) => this.#onDocumentUpdated(v)));
}
super({
...config,
extensions: [
keymap.of(defaultKeymap),
lineNumbers()
]
extensions
});
this.config = config;
}
#onDocumentUpdated(v: ViewUpdate) {
if (v.docChanged) {
this.config.onContentChanged?.();
}
}
getText() {
return this.state.doc.toString();
}
setText(content: string) {