/* eslint-disable react/no-multi-comp */
import React, { useRef, useState, useEffect, ReactElement } from 'react';
import Editor, { createEditorStateWithText } from '@draft-js-plugins/editor';
import createToolbarPlugin, {
Separator,
} from '@draft-js-plugins/static-toolbar';
import {
ItalicButton,
BoldButton,
UnderlineButton,
CodeButton,
HeadlineOneButton,
HeadlineTwoButton,
HeadlineThreeButton,
UnorderedListButton,
OrderedListButton,
BlockquoteButton,
CodeBlockButton,
SubButton,
SupButton,
} from '@draft-js-plugins/buttons';
import editorStyles from './editorStyles.css';
const HeadlinesPicker = (props): ReactElement => {
const onWindowClick = (): void =>
// Call `onOverrideContent` again with `undefined`
// so the toolbar can show its regular content again.
props.onOverrideContent(undefined);
useEffect(() => {
const timeout = setTimeout(() => {
window.addEventListener('click', onWindowClick);
});
return () => {
if (timeout) {
clearTimeout(timeout);
}
window.removeEventListener('click', onWindowClick);
};
}, []);
const buttons = [HeadlineOneButton, HeadlineTwoButton, HeadlineThreeButton];
return (
{buttons.map((
Button,
i // eslint-disable-next-line
) => (
// eslint-disable-next-line react/no-array-index-key
))}
);
};
const HeadlinesButton = ({ onOverrideContent }): ReactElement => {
const onClick = (): void =>
// A button can call `onOverrideContent` to replace the content
// of the toolbar. This can be useful for displaying sub
// menus or requesting additional information from the user.
onOverrideContent(HeadlinesPicker);
return (
H
);
};
const toolbarPlugin = createToolbarPlugin({
structure: [
BoldButton,
ItalicButton,
UnderlineButton,
CodeButton,
Separator,
HeadlinesButton,
UnorderedListButton,
OrderedListButton,
BlockquoteButton,
CodeBlockButton,
SubButton,
SupButton,
],
});
const { Toolbar } = toolbarPlugin;
const plugins = [toolbarPlugin];
const text =
'Remember to place the component bellow the Editor component …';
const CustomToolbarEditor = (): ReactElement => {
const [editorState, setEditorState] = useState(
createEditorStateWithText(text)
);
const editor = useRef();
const onChange = (value): void => {
setEditorState(value);
};
const focus = (): void => {
editor.current.focus();
};
return (
{
editor.current = element;
}}
/>
);
};
export default CustomToolbarEditor;