UNPKG

@wordpress/block-editor

Version:
158 lines (134 loc) 5.43 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.BlockSettingsDropdown = BlockSettingsDropdown; exports.default = void 0; var _element = require("@wordpress/element"); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _lodash = require("lodash"); var _i18n = require("@wordpress/i18n"); var _components = require("@wordpress/components"); var _data = require("@wordpress/data"); var _icons = require("@wordpress/icons"); var _blocks = require("@wordpress/blocks"); var _keyboardShortcuts = require("@wordpress/keyboard-shortcuts"); var _compose = require("@wordpress/compose"); var _blockActions = _interopRequireDefault(require("../block-actions")); var _blockModeToggle = _interopRequireDefault(require("./block-mode-toggle")); var _blockHtmlConvertButton = _interopRequireDefault(require("./block-html-convert-button")); var _blockSettingsMenuFirstItem = _interopRequireDefault(require("./block-settings-menu-first-item")); var _blockSettingsMenuControls = _interopRequireDefault(require("../block-settings-menu-controls")); /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ const POPOVER_PROPS = { className: 'block-editor-block-settings-menu__popover', position: 'bottom right', isAlternate: true }; function CopyMenuItem({ blocks, onCopy }) { const ref = (0, _compose.useCopyToClipboard)(() => (0, _blocks.serialize)(blocks), onCopy); return (0, _element.createElement)(_components.MenuItem, { ref: ref }, (0, _i18n.__)('Copy')); } function BlockSettingsDropdown({ clientIds, __experimentalSelectBlock, children, ...props }) { const blockClientIds = (0, _lodash.castArray)(clientIds); const count = blockClientIds.length; const firstBlockClientId = blockClientIds[0]; const shortcuts = (0, _data.useSelect)(select => { const { getShortcutRepresentation } = select(_keyboardShortcuts.store); return { duplicate: getShortcutRepresentation('core/block-editor/duplicate'), remove: getShortcutRepresentation('core/block-editor/remove'), insertAfter: getShortcutRepresentation('core/block-editor/insert-after'), insertBefore: getShortcutRepresentation('core/block-editor/insert-before') }; }, []); const updateSelection = (0, _element.useCallback)(__experimentalSelectBlock ? async clientIdsPromise => { const ids = await clientIdsPromise; if (ids && ids[0]) { __experimentalSelectBlock(ids[0]); } } : _lodash.noop, [__experimentalSelectBlock]); const removeBlockLabel = count === 1 ? (0, _i18n.__)('Remove block') : (0, _i18n.__)('Remove blocks'); return (0, _element.createElement)(_blockActions.default, { clientIds: clientIds, __experimentalUpdateSelection: !__experimentalSelectBlock }, ({ canDuplicate, canInsertDefaultBlock, isLocked, onDuplicate, onInsertAfter, onInsertBefore, onRemove, onCopy, onMoveTo, blocks }) => (0, _element.createElement)(_components.DropdownMenu, (0, _extends2.default)({ icon: _icons.moreVertical, label: (0, _i18n.__)('Options'), className: "block-editor-block-settings-menu", popoverProps: POPOVER_PROPS, noIcons: true }, props), ({ onClose }) => (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(_components.MenuGroup, null, (0, _element.createElement)(_blockSettingsMenuFirstItem.default.Slot, { fillProps: { onClose } }), count === 1 && (0, _element.createElement)(_blockHtmlConvertButton.default, { clientId: firstBlockClientId }), (0, _element.createElement)(CopyMenuItem, { blocks: blocks, onCopy: onCopy }), canDuplicate && (0, _element.createElement)(_components.MenuItem, { onClick: (0, _lodash.flow)(onClose, onDuplicate, updateSelection), shortcut: shortcuts.duplicate }, (0, _i18n.__)('Duplicate')), canInsertDefaultBlock && (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(_components.MenuItem, { onClick: (0, _lodash.flow)(onClose, onInsertBefore), shortcut: shortcuts.insertBefore }, (0, _i18n.__)('Insert before')), (0, _element.createElement)(_components.MenuItem, { onClick: (0, _lodash.flow)(onClose, onInsertAfter), shortcut: shortcuts.insertAfter }, (0, _i18n.__)('Insert after'))), !isLocked && (0, _element.createElement)(_components.MenuItem, { onClick: (0, _lodash.flow)(onClose, onMoveTo) }, (0, _i18n.__)('Move to')), count === 1 && (0, _element.createElement)(_blockModeToggle.default, { clientId: firstBlockClientId, onToggle: onClose })), (0, _element.createElement)(_blockSettingsMenuControls.default.Slot, { fillProps: { onClose }, clientIds: clientIds }), typeof children === 'function' ? children({ onClose }) : _element.Children.map(child => (0, _element.cloneElement)(child, { onClose })), (0, _element.createElement)(_components.MenuGroup, null, !isLocked && (0, _element.createElement)(_components.MenuItem, { onClick: (0, _lodash.flow)(onClose, onRemove, updateSelection), shortcut: shortcuts.remove }, removeBlockLabel))))); } var _default = BlockSettingsDropdown; exports.default = _default; //# sourceMappingURL=block-settings-dropdown.js.map