Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ibm
GitHub Repository: ibm/watson-machine-learning-samples
Path: blob/master/cloud/ai-service-apps/nextjs-carbon-react-ui/src/components/InputPlugin/InputPlugin.js
6408 views
1
import { useEffect } from "react";
2
import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
3
import { KEY_ENTER_COMMAND, CLEAR_EDITOR_COMMAND, COMMAND_PRIORITY_HIGH } from "lexical";
4
5
import hljs from "highlight.js/lib/core";
6
import hBash from "highlight.js/lib/languages/bash";
7
import hJava from "highlight.js/lib/languages/java";
8
import hJavascript from "highlight.js/lib/languages/javascript";
9
import hJson from "highlight.js/lib/languages/json";
10
import hMarkdown from "highlight.js/lib/languages/markdown";
11
import hPython from "highlight.js/lib/languages/python";
12
import hXml from "highlight.js/lib/languages/xml";
13
14
// Load any languages you need
15
hljs.registerLanguage("javascript", hJavascript);
16
hljs.registerLanguage("json", hJson);
17
hljs.registerLanguage("bash", hBash);
18
hljs.registerLanguage("python", hPython);
19
hljs.registerLanguage("markdown", hMarkdown);
20
hljs.registerLanguage("java", hJava);
21
hljs.registerLanguage("xml", hXml);
22
23
const InputPlugin = ({ input, onChange, onSubmit }) => {
24
const [editor] = useLexicalComposerContext();
25
26
useEffect(() => {
27
if (!input) {
28
editor.dispatchCommand(CLEAR_EDITOR_COMMAND);
29
}
30
}, [input, editor]);
31
32
useEffect(
33
() =>
34
editor.registerCommand(
35
KEY_ENTER_COMMAND,
36
(evt) => {
37
if (evt.key === "Enter" && !evt.shiftKey) {
38
evt.preventDefault();
39
evt.stopPropagation();
40
41
if (input !== "") {
42
onSubmit();
43
}
44
45
return true;
46
}
47
48
return false;
49
},
50
COMMAND_PRIORITY_HIGH
51
),
52
[editor, input, onSubmit]
53
);
54
55
useEffect(
56
() =>
57
editor.registerTextContentListener((textContent) => {
58
onChange(textContent);
59
}),
60
[editor, onChange]
61
);
62
63
return null;
64
};
65
66
export default InputPlugin;
67
68