import React, { MouseEvent, ReactElement } from 'react'; import PropTypes from 'prop-types'; import clsx from 'clsx'; import { EditorState } from 'draft-js'; export interface DividerButtonTheme { buttonWrapper: string; button: string; active: string; } export interface DividerButtonPubProps { theme?: DividerButtonTheme; getEditorState(): EditorState; setEditorState(state: EditorState): void; blockType: string; } export interface DividerButtonProps extends DividerButtonPubProps { addDivider( editorState: EditorState, data?: Record ): EditorState; } const DividerButton = (props: DividerButtonProps): ReactElement => { const onClick = (event: MouseEvent): void => { event.preventDefault(); const editorState = props.getEditorState(); const newEditorState = props.addDivider(editorState); props.setEditorState(newEditorState); }; const preventBubblingUp = (event: MouseEvent): void => { event.preventDefault(); }; const blockTypeIsActive = (): boolean => { const editorState = props.getEditorState(); const type = editorState .getCurrentContent() .getBlockForKey(editorState.getSelection().getStartKey()) .getType(); return type === props.blockType; }; const { theme = {} as DividerButtonTheme } = props; const className = blockTypeIsActive() ? clsx(theme.button, theme.active) : theme.button; return (
); }; DividerButton.propTypes = { theme: PropTypes.object, getEditorState: PropTypes.func.isRequired, // eslint-disable-next-line react/no-unused-prop-types setEditorState: PropTypes.func.isRequired, // eslint-disable-next-line react/no-unused-prop-types addDivider: PropTypes.func.isRequired, }; export default DividerButton;