57 lines
1.5 KiB
JavaScript
Raw Normal View History

import React, { PropTypes } from 'react';
2017-07-08 23:23:14 -04:00
import { Editor as SlateEditor, Plain as SlatePlain } from 'slate';
import { markdownToHtml, htmlToMarkdown } from '../../unified';
2017-04-18 12:30:38 -04:00
import Toolbar from '../Toolbar/Toolbar';
2017-06-23 14:42:40 -04:00
import { Sticky } from '../../../../UI/Sticky/Sticky';
2016-10-22 04:37:22 -07:00
import styles from './index.css';
export default class RawEditor extends React.Component {
constructor(props) {
super(props);
2017-07-08 23:23:14 -04:00
const value = htmlToMarkdown(this.props.value);
this.state = {
2017-07-08 23:23:14 -04:00
editorState: SlatePlain.deserialize(value || ''),
};
}
2017-07-08 23:23:14 -04:00
handleChange = editorState => {
this.setState({ editorState });
}
handleDocumentChange = (doc, editorState) => {
const value = SlatePlain.serialize(editorState);
const html = markdownToHtml(value);
this.props.onChange(html);
};
2017-07-08 22:09:47 -04:00
handleToggleMode = () => {
this.props.onMode('visual');
};
render() {
2017-07-08 22:09:47 -04:00
return (
<div className={styles.root}>
<Sticky
className={styles.editorControlBar}
classNameActive={styles.editorControlBarSticky}
fillContainerWidth
>
<Toolbar onToggleMode={this.handleToggleMode} disabled rawMode />
</Sticky>
2017-07-08 23:23:14 -04:00
<SlateEditor
className={styles.SlateEditor}
state={this.state.editorState}
2017-07-08 22:09:47 -04:00
onChange={this.handleChange}
2017-07-08 23:23:14 -04:00
onDocumentChange={this.handleDocumentChange}
/>
2017-07-08 22:09:47 -04:00
</div>
);
}
}
RawEditor.propTypes = {
onChange: PropTypes.func.isRequired,
onMode: PropTypes.func.isRequired,
value: PropTypes.node,
};