UNPKG

@gechiui/block-editor

Version:
190 lines (164 loc) 6.39 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("@gechiui/element"); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _lodash = require("lodash"); var _i18n = require("@gechiui/i18n"); var _components = require("@gechiui/components"); var _data = require("@gechiui/data"); var _icons = require("@gechiui/icons"); var _blocks = require("@gechiui/blocks"); var _keyboardShortcuts = require("@gechiui/keyboard-shortcuts"); var _compose = require("@gechiui/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")); var _store = require("../../store"); /** * External dependencies */ /** * GeChiUI dependencies */ /** * Internal dependencies */ const POPOVER_PROPS = { className: 'block-editor-block-settings-menu__popover', position: 'bottom right', isAlternate: true }; function CopyMenuItem(_ref) { let { blocks, onCopy } = _ref; const ref = (0, _compose.useCopyToClipboard)(() => (0, _blocks.serialize)(blocks), onCopy); return (0, _element.createElement)(_components.MenuItem, { ref: ref }, (0, _i18n.__)('复制')); } function BlockSettingsDropdown(_ref2) { let { clientIds, __experimentalSelectBlock, children, ...props } = _ref2; const blockClientIds = (0, _lodash.castArray)(clientIds); const count = blockClientIds.length; const firstBlockClientId = blockClientIds[0]; const { onlyBlock, title } = (0, _data.useSelect)(select => { var _getBlockType; const { getBlockCount, getBlockName } = select(_store.store); const { getBlockType } = select(_blocks.store); return { onlyBlock: 1 === getBlockCount(), title: (_getBlockType = getBlockType(getBlockName(firstBlockClientId))) === null || _getBlockType === void 0 ? void 0 : _getBlockType.title }; }, [firstBlockClientId]); 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 label = (0, _i18n.sprintf)( /* translators: %s: block name */ (0, _i18n.__)('删除 %s'), title); const removeBlockLabel = count === 1 ? label : (0, _i18n.__)('移除区块'); return (0, _element.createElement)(_blockActions.default, { clientIds: clientIds, __experimentalUpdateSelection: !__experimentalSelectBlock }, _ref3 => { let { canDuplicate, canInsertDefaultBlock, canMove, canRemove, onDuplicate, onInsertAfter, onInsertBefore, onRemove, onCopy, onMoveTo, blocks } = _ref3; return (0, _element.createElement)(_components.DropdownMenu, (0, _extends2.default)({ icon: _icons.moreVertical, label: (0, _i18n.__)('选项'), className: "block-editor-block-settings-menu", popoverProps: POPOVER_PROPS, noIcons: true }, props), _ref4 => { let { onClose } = _ref4; return (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.__)('创建副本')), canInsertDefaultBlock && (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(_components.MenuItem, { onClick: (0, _lodash.flow)(onClose, onInsertBefore), shortcut: shortcuts.insertBefore }, (0, _i18n.__)('在当前区块前插入')), (0, _element.createElement)(_components.MenuItem, { onClick: (0, _lodash.flow)(onClose, onInsertAfter), shortcut: shortcuts.insertAfter }, (0, _i18n.__)('在当前区块后插入'))), canMove && !onlyBlock && (0, _element.createElement)(_components.MenuItem, { onClick: (0, _lodash.flow)(onClose, onMoveTo) }, (0, _i18n.__)('移动至')), 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 })), canRemove && (0, _element.createElement)(_components.MenuGroup, null, (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