@gechiui/block-editor
Version:
190 lines (164 loc) • 6.39 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("@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