UNPKG

@wordpress/block-editor

Version:
103 lines (96 loc) 2.67 kB
import { createElement } from "@wordpress/element"; /** * External dependencies */ import classnames from 'classnames'; /** * WordPress dependencies */ import { __ } from '@wordpress/i18n'; import { compose } from '@wordpress/compose'; import { decodeEntities } from '@wordpress/html-entities'; import { withSelect, withDispatch } from '@wordpress/data'; import { ENTER, SPACE } from '@wordpress/keycodes'; /** * Internal dependencies */ import Inserter from '../inserter'; import { store as blockEditorStore } from '../../store'; /** * Zero width non-breaking space, used as padding for the paragraph when it is * empty. */ export const ZWNBSP = '\ufeff'; export function DefaultBlockAppender({ isLocked, onAppend, showPrompt, placeholder, rootClientId }) { if (isLocked) { return null; } const value = decodeEntities(placeholder) || __('Type / to choose a block'); return createElement("div", { "data-root-client-id": rootClientId || '', className: classnames('block-editor-default-block-appender', { 'has-visible-prompt': showPrompt }) }, createElement("p", { tabIndex: "0" // We want this element to be styled as a paragraph by themes. // eslint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role , role: "button", "aria-label": __('Add default block') // A wrapping container for this one already has the wp-block className. , className: "block-editor-default-block-appender__content", onKeyDown: event => { if (ENTER === event.keyCode || SPACE === event.keyCode) { onAppend(); } }, onClick: () => onAppend(), onFocus: () => { if (showPrompt) { onAppend(); } } }, showPrompt ? value : ZWNBSP), createElement(Inserter, { rootClientId: rootClientId, position: "bottom right", isAppender: true, __experimentalIsQuick: true })); } export default compose(withSelect((select, ownProps) => { const { getBlockCount, getSettings, getTemplateLock } = select(blockEditorStore); const isEmpty = !getBlockCount(ownProps.rootClientId); const { bodyPlaceholder } = getSettings(); return { showPrompt: isEmpty, isLocked: !!getTemplateLock(ownProps.rootClientId), placeholder: bodyPlaceholder }; }), withDispatch((dispatch, ownProps) => { const { insertDefaultBlock, startTyping } = dispatch(blockEditorStore); return { onAppend() { const { rootClientId } = ownProps; insertDefaultBlock(undefined, rootClientId); startTyping(); } }; }))(DefaultBlockAppender); //# sourceMappingURL=index.js.map