UNPKG

@gechiui/block-editor

Version:
168 lines (139 loc) 5.53 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = BlockTools; var _element = require("@gechiui/element"); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _lodash = require("lodash"); var _data = require("@gechiui/data"); var _compose = require("@gechiui/compose"); var _components = require("@gechiui/components"); var _keyboardShortcuts = require("@gechiui/keyboard-shortcuts"); var _insertionPoint = _interopRequireDefault(require("./insertion-point")); var _blockPopover = _interopRequireDefault(require("./block-popover")); var _store = require("../../store"); var _blockContextualToolbar = _interopRequireDefault(require("./block-contextual-toolbar")); var _usePopoverScroll = require("./use-popover-scroll"); /** * External dependencies */ /** * GeChiUI dependencies */ /** * Internal dependencies */ /** * Renders block tools (the block toolbar, select/navigation mode toolbar, the * insertion point and a slot for the inline rich text toolbar). Must be wrapped * around the block content and editor styles wrapper or iframe. * * @param {Object} $0 Props. * @param {Object} $0.children The block content and style container. * @param {Object} $0.__unstableContentRef Ref holding the content scroll container. */ function BlockTools(_ref) { let { children, __unstableContentRef, ...props } = _ref; const isLargeViewport = (0, _compose.useViewportMatch)('medium'); const hasFixedToolbar = (0, _data.useSelect)(select => select(_store.store).getSettings().hasFixedToolbar, []); const isMatch = (0, _keyboardShortcuts.__unstableUseShortcutEventMatch)(); const { getSelectedBlockClientIds, getBlockRootClientId } = (0, _data.useSelect)(_store.store); const { duplicateBlocks, removeBlocks, insertAfterBlock, insertBeforeBlock, clearSelectedBlock, moveBlocksUp, moveBlocksDown } = (0, _data.useDispatch)(_store.store); function onKeyDown(event) { if (isMatch('core/block-editor/move-up', event)) { const clientIds = getSelectedBlockClientIds(); if (clientIds.length) { event.preventDefault(); const rootClientId = getBlockRootClientId((0, _lodash.first)(clientIds)); moveBlocksUp(clientIds, rootClientId); } } else if (isMatch('core/block-editor/move-down', event)) { const clientIds = getSelectedBlockClientIds(); if (clientIds.length) { event.preventDefault(); const rootClientId = getBlockRootClientId((0, _lodash.first)(clientIds)); moveBlocksDown(clientIds, rootClientId); } } else if (isMatch('core/block-editor/duplicate', event)) { const clientIds = getSelectedBlockClientIds(); if (clientIds.length) { event.preventDefault(); duplicateBlocks(clientIds); } } else if (isMatch('core/block-editor/remove', event)) { const clientIds = getSelectedBlockClientIds(); if (clientIds.length) { event.preventDefault(); removeBlocks(clientIds); } } else if (isMatch('core/block-editor/insert-after', event)) { const clientIds = getSelectedBlockClientIds(); if (clientIds.length) { event.preventDefault(); insertAfterBlock((0, _lodash.last)(clientIds)); } } else if (isMatch('core/block-editor/insert-before', event)) { const clientIds = getSelectedBlockClientIds(); if (clientIds.length) { event.preventDefault(); insertBeforeBlock((0, _lodash.first)(clientIds)); } } else if (isMatch('core/block-editor/delete-multi-selection', event)) { /** * Check if the target element is a text area, input or * event.defaultPrevented and return early. In all these * cases backspace could be handled elsewhere. */ if (['INPUT', 'TEXTAREA'].includes(event.target.nodeName) || event.defaultPrevented) { return; } const clientIds = getSelectedBlockClientIds(); if (clientIds.length > 1) { event.preventDefault(); removeBlocks(clientIds); } } else if (isMatch('core/block-editor/unselect', event)) { const clientIds = getSelectedBlockClientIds(); if (clientIds.length > 1) { event.preventDefault(); clearSelectedBlock(); event.target.ownerDocument.defaultView.getSelection().removeAllRanges(); } } } return (// eslint-disable-next-line jsx-a11y/no-static-element-interactions (0, _element.createElement)("div", (0, _extends2.default)({}, props, { onKeyDown: onKeyDown }), (0, _element.createElement)(_insertionPoint.default, { __unstableContentRef: __unstableContentRef }, (hasFixedToolbar || !isLargeViewport) && (0, _element.createElement)(_blockContextualToolbar.default, { isFixed: true }), (0, _element.createElement)(_blockPopover.default, { __unstableContentRef: __unstableContentRef }), (0, _element.createElement)(_components.Popover.Slot, { name: "block-toolbar", ref: (0, _usePopoverScroll.usePopoverScroll)(__unstableContentRef) }), children, (0, _element.createElement)(_components.Popover.Slot, { name: "__unstable-block-tools-after", ref: (0, _usePopoverScroll.usePopoverScroll)(__unstableContentRef) }))) ); } //# sourceMappingURL=index.js.map