import { autoBindMethodsForReact } from 'class-autobind-decorator'; import classnames from 'classnames'; import React, { PureComponent } from 'react'; import { Tab, TabList, TabPanel, Tabs } from 'react-tabs'; import { AUTOBIND_CFG } from '../../common/constants'; import { Button } from './base/button'; import { CodeEditor, UnconnectedCodeEditor } from './codemirror/code-editor'; import { MarkdownPreview } from './markdown-preview'; interface Props { onChange: Function; defaultValue: string; placeholder?: string; defaultPreviewMode?: boolean; className?: string; mode?: string; tall?: boolean; } interface State { markdown: string; } @autoBindMethodsForReact(AUTOBIND_CFG) export class MarkdownEditor extends PureComponent { _editor: UnconnectedCodeEditor | null = null; constructor(props: Props) { super(props); this.state = { markdown: props.defaultValue, }; } _handleChange(markdown) { this.props.onChange(markdown); this.setState({ markdown, }); } _setEditorRef(n: UnconnectedCodeEditor) { this._editor = n; } focusEnd() { this._editor?.focusEnd(); } focus() { this._editor?.focus(); } render() { const { mode, placeholder, defaultPreviewMode, className, tall, } = this.props; const { markdown } = this.state; const classes = classnames('react-tabs', 'markdown-editor', 'outlined', className, { 'markdown-editor--dynamic-height': !tall, }); return (
Styling with Markdown is supported
); } }