import React, { forwardRef, ReactNode, Ref } from 'react'; import { ICodeMirror, UnControlled as CodeMirror } from 'react-codemirror2'; import { Container, Subscribe } from 'unstated'; import EditorContainer from '~/client/services/EditorContainer'; import AbstractEditor, { AbstractEditorProps } from '~/components/PageEditor/AbstractEditor'; window.CodeMirror = require('codemirror'); require('codemirror/addon/display/placeholder'); require('~/client/util/codemirror/gfm-growi.mode'); export interface UncontrolledCodeMirrorProps extends AbstractEditorProps { value: string; options?: ICodeMirror['options']; isGfmMode?: boolean; indentSize?: number; lineNumbers?: boolean; } interface UncontrolledCodeMirrorCoreProps extends UncontrolledCodeMirrorProps { editorContainer: Container; forwardedRef: Ref; } class UncontrolledCodeMirrorCore extends AbstractEditor { render(): ReactNode { const { value, isGfmMode, indentSize, lineNumbers, editorContainer, options, forwardedRef, ...rest } = this.props; const { editorOptions } = editorContainer.state; return ( ); } } export const UncontrolledCodeMirror = forwardRef((props, ref) => ( {(EditorContainer: Container) => } ));