Path: blob/master/cloud/ai-service-apps/nextjs-carbon-react-ui/src/components/InputPlugin/InputPlugin.js
6408 views
import { useEffect } from "react";1import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";2import { KEY_ENTER_COMMAND, CLEAR_EDITOR_COMMAND, COMMAND_PRIORITY_HIGH } from "lexical";34import hljs from "highlight.js/lib/core";5import hBash from "highlight.js/lib/languages/bash";6import hJava from "highlight.js/lib/languages/java";7import hJavascript from "highlight.js/lib/languages/javascript";8import hJson from "highlight.js/lib/languages/json";9import hMarkdown from "highlight.js/lib/languages/markdown";10import hPython from "highlight.js/lib/languages/python";11import hXml from "highlight.js/lib/languages/xml";1213// Load any languages you need14hljs.registerLanguage("javascript", hJavascript);15hljs.registerLanguage("json", hJson);16hljs.registerLanguage("bash", hBash);17hljs.registerLanguage("python", hPython);18hljs.registerLanguage("markdown", hMarkdown);19hljs.registerLanguage("java", hJava);20hljs.registerLanguage("xml", hXml);2122const InputPlugin = ({ input, onChange, onSubmit }) => {23const [editor] = useLexicalComposerContext();2425useEffect(() => {26if (!input) {27editor.dispatchCommand(CLEAR_EDITOR_COMMAND);28}29}, [input, editor]);3031useEffect(32() =>33editor.registerCommand(34KEY_ENTER_COMMAND,35(evt) => {36if (evt.key === "Enter" && !evt.shiftKey) {37evt.preventDefault();38evt.stopPropagation();3940if (input !== "") {41onSubmit();42}4344return true;45}4647return false;48},49COMMAND_PRIORITY_HIGH50),51[editor, input, onSubmit]52);5354useEffect(55() =>56editor.registerTextContentListener((textContent) => {57onChange(textContent);58}),59[editor, onChange]60);6162return null;63};6465export default InputPlugin;666768