@wordpress/block-editor
Version:
158 lines (134 loc) • 5.43 kB
JavaScript
;
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