import { Editor, EditorChange } from 'codemirror' import 'codemirror/addon/comment/comment' import 'codemirror/addon/display/autorefresh' import 'codemirror/addon/display/fullscreen' import 'codemirror/addon/display/placeholder' import 'codemirror/addon/edit/closebrackets' import 'codemirror/addon/edit/closetag' import 'codemirror/addon/edit/continuelist' import 'codemirror/addon/edit/matchbrackets' import 'codemirror/addon/edit/matchtags' import 'codemirror/addon/fold/foldcode' import 'codemirror/addon/fold/foldgutter' import 'codemirror/addon/hint/show-hint' import 'codemirror/addon/search/match-highlighter' import 'codemirror/addon/selection/active-line' import 'codemirror/keymap/sublime.js' import 'codemirror/mode/gfm/gfm.js' import React, { useCallback, useState } from 'react' import { Controlled as ControlledCodeMirror } from 'react-codemirror2' import { useTranslation } from 'react-i18next' import './editor-window.scss' import { emojiHints, emojiWordRegex, findWordAtCursor } from './hints/emoji' import { defaultKeyMap } from './key-map' import { ToolBar } from './tool-bar/tool-bar' export interface EditorWindowProps { onContentChange: (content: string) => void content: string } const hintOptions = { hint: emojiHints, completeSingle: false, completeOnSingleClick: false, alignWithWord: true } const onChange = (editor: Editor) => { const searchTerm = findWordAtCursor(editor) if (emojiWordRegex.test(searchTerm.text)) { editor.showHint(hintOptions) } } export const EditorWindow: React.FC = ({ onContentChange, content }) => { const { t } = useTranslation() const [editor, setEditor] = useState() const onBeforeChange = useCallback((editor: Editor, data: EditorChange, value: string) => { onContentChange(value) }, [onContentChange]) return (
setEditor(mountedEditor)} onBeforeChange={onBeforeChange} onChange={onChange} />
) }