aboutsummaryrefslogtreecommitdiffstats
path: root/language-web/src/main/js/editor/EditorArea.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'language-web/src/main/js/editor/EditorArea.tsx')
-rw-r--r--language-web/src/main/js/editor/EditorArea.tsx42
1 files changed, 42 insertions, 0 deletions
diff --git a/language-web/src/main/js/editor/EditorArea.tsx b/language-web/src/main/js/editor/EditorArea.tsx
new file mode 100644
index 00000000..f07a0ad8
--- /dev/null
+++ b/language-web/src/main/js/editor/EditorArea.tsx
@@ -0,0 +1,42 @@
1import { observer } from 'mobx-react-lite';
2import React, { useRef } from 'react';
3
4import { useRootStore } from '../RootStore';
5
6export const EditorArea = observer(() => {
7 const { editorStore } = useRootStore();
8 const { CodeMirror } = editorStore.chunk || {};
9 const fallbackTextarea = useRef<HTMLTextAreaElement>(null);
10
11 if (!CodeMirror) {
12 return (
13 <textarea
14 value={editorStore.value}
15 onChange={(e) => editorStore.updateValue(e.target.value)}
16 ref={fallbackTextarea}
17 className={`problem-fallback-editor cm-s-${editorStore.codeMirrorTheme}`}
18 >
19 </textarea>
20 );
21 }
22
23 const textarea = fallbackTextarea.current;
24 if (textarea) {
25 editorStore.setInitialSelection(
26 textarea.selectionStart,
27 textarea.selectionEnd,
28 document.activeElement === textarea,
29 );
30 }
31
32 return (
33 <CodeMirror
34 value={editorStore.value}
35 options={editorStore.codeMirrorOptions}
36 editorDidMount={(editor) => editorStore.editorDidMount(editor)}
37 editorWillUnmount={() => editorStore.editorWillUnmount()}
38 onBeforeChange={(_editor, _data, value) => editorStore.updateValue(value)}
39 onChange={() => editorStore.reportChanged()}
40 />
41 );
42});