UncontrolledCodeMirror.tsx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import React, { FC, ReactNode } from 'react';
  2. import { ICodeMirror, UnControlled as CodeMirror } from 'react-codemirror2';
  3. import { Subscribe } from 'unstated';
  4. import { withUnstatedContainers } from './UnstatedUtils';
  5. import EditorContainer from '~/client/services/EditorContainer';
  6. import AbstractEditor, { AbstractEditorProps } from '~/components/PageEditor/AbstractEditor';
  7. window.CodeMirror = require('codemirror');
  8. require('codemirror/addon/display/placeholder');
  9. require('~/client/util/codemirror/gfm-growi.mode');
  10. export interface UncontrolledCodeMirrorProps extends AbstractEditorProps {
  11. value: string;
  12. // isGfmMode?: boolean;
  13. // indentSize?: number;
  14. // placeholder?: string;
  15. // lineNumbers?: boolean;
  16. // onChange: ICodeMirror['onChange'];
  17. }
  18. class UncontrolledCodeMirrorCore extends AbstractEditor<UncontrolledCodeMirrorProps> {
  19. render(): ReactNode {
  20. // const { editorOptions } = this.props.editorContainer.state;
  21. return (
  22. <CodeMirror
  23. value={this.props.value}
  24. options={{
  25. // lineNumbers: this.props.lineNumbers ?? true,
  26. // mode: this.props.isGfmMode ? 'gfm-growi' : undefined,
  27. // theme: editorOptions.theme,
  28. // styleActiveLine: editorOptions.styleActiveLine,
  29. tabSize: 4,
  30. // indentUnit: this.props.indentSize,
  31. // placeholder: this.props.placeholder,
  32. }}
  33. // onChange={this.props.onChange}
  34. />
  35. );
  36. }
  37. }
  38. // export default withUnstatedContainers(UncontrolledCodeMirrorCore, [EditorContainer]);
  39. export const UncontrolledCodeMirror: FC<UncontrolledCodeMirrorProps> = props => (
  40. <Subscribe to={[EditorContainer]}>
  41. {editor => <UncontrolledCodeMirrorCore {...props} {...editor} />}
  42. </Subscribe>
  43. );