@wordpress/block-editor
Version:
74 lines (66 loc) • 2.34 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import { createElement } from "@wordpress/element";
/**
* External dependencies
*/
import { compact, map } from 'lodash';
/**
* WordPress dependencies
*/
import { createSlotFill, MenuGroup, __experimentalStyleProvider as StyleProvider } from '@wordpress/components';
import { useSelect } from '@wordpress/data';
/**
* Internal dependencies
*/
import { useConvertToGroupButtonProps, ConvertToGroupButton } from '../convert-to-group-buttons';
import { store as blockEditorStore } from '../../store';
const {
Fill,
Slot
} = createSlotFill('BlockSettingsMenuControls');
const BlockSettingsMenuControlsSlot = ({
fillProps,
clientIds = null
}) => {
const selectedBlocks = useSelect(select => {
const {
getBlocksByClientId,
getSelectedBlockClientIds
} = select(blockEditorStore);
const ids = clientIds !== null ? clientIds : getSelectedBlockClientIds();
return map(compact(getBlocksByClientId(ids)), block => block.name);
}, [clientIds]); // Check if current selection of blocks is Groupable or Ungroupable
// and pass this props down to ConvertToGroupButton.
const convertToGroupButtonProps = useConvertToGroupButtonProps();
const {
isGroupable,
isUngroupable
} = convertToGroupButtonProps;
const showConvertToGroupButton = isGroupable || isUngroupable;
return createElement(Slot, {
fillProps: { ...fillProps,
selectedBlocks
}
}, fills => {
if ((fills === null || fills === void 0 ? void 0 : fills.length) > 0 || showConvertToGroupButton) {
return createElement(MenuGroup, null, fills, createElement(ConvertToGroupButton, _extends({}, convertToGroupButtonProps, {
onClose: fillProps === null || fillProps === void 0 ? void 0 : fillProps.onClose
})));
}
});
};
/**
* @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-settings-menu-controls/README.md
*
* @param {Object} props Fill props.
* @return {WPElement} Element.
*/
function BlockSettingsMenuControls({ ...props
}) {
return createElement(StyleProvider, {
document: document
}, createElement(Fill, props));
}
BlockSettingsMenuControls.Slot = BlockSettingsMenuControlsSlot;
export default BlockSettingsMenuControls;
//# sourceMappingURL=index.js.map