aboutsummaryrefslogtreecommitdiffstats
path: root/language-web/src/main/js/components/XtextCodeMirror.jsx
diff options
context:
space:
mode:
Diffstat (limited to 'language-web/src/main/js/components/XtextCodeMirror.jsx')
-rw-r--r--language-web/src/main/js/components/XtextCodeMirror.jsx32
1 files changed, 32 insertions, 0 deletions
diff --git a/language-web/src/main/js/components/XtextCodeMirror.jsx b/language-web/src/main/js/components/XtextCodeMirror.jsx
new file mode 100644
index 00000000..75a20daa
--- /dev/null
+++ b/language-web/src/main/js/components/XtextCodeMirror.jsx
@@ -0,0 +1,32 @@
1import React, { useCallback, useState } from 'react';
2import { Controlled as CodeMirror } from 'react-codemirror2';
3import 'mode-problem';
4import { createServices, removeServices } from 'xtext/xtext-codemirror';
5
6export default function XtextCodeMirror({ initialValue }) {
7 const [value, setValue] = useState(initialValue);
8
9 const codeMirrorOptions = {
10 mode: 'xtext/problem',
11 indentUnit: 2,
12 };
13
14 const xtextOptions = {
15 xtextLang: 'problem',
16 enableFormattingAction: true,
17 };
18
19 const onBeforeChange = useCallback((_editor, _data, newValue) => {
20 setValue(newValue);
21 }, [setValue]);
22
23 return (
24 <CodeMirror
25 value={value}
26 options={codeMirrorOptions}
27 editorDidMount={editor => createServices(editor, xtextOptions)}
28 editorWillUnmount={removeServices}
29 onBeforeChange={onBeforeChange}
30 />
31 );
32};