@wordpress/edit-post
Version:
Edit Post module for WordPress.
93 lines (88 loc) • 2.99 kB
JavaScript
import { createElement } from "@wordpress/element";
/**
* External dependencies
*/
import { filter, includes, isArray } from 'lodash';
/**
* WordPress dependencies
*/
import { store as blocksStore } from '@wordpress/blocks';
import { withSelect } from '@wordpress/data';
import { compose, withState } from '@wordpress/compose';
import { TextControl } from '@wordpress/components';
import { __, _n, sprintf } from '@wordpress/i18n';
/**
* Internal dependencies
*/
import BlockManagerCategory from './category';
import { store as editPostStore } from '../../store';
function BlockManager({
search,
setState,
blockTypes,
categories,
hasBlockSupport,
isMatchingSearchTerm,
numberOfHiddenBlocks
}) {
// Filtering occurs here (as opposed to `withSelect`) to avoid
// wasted renders by consequence of `Array#filter` producing
// a new value reference on each call.
blockTypes = blockTypes.filter(blockType => hasBlockSupport(blockType, 'inserter', true) && (!search || isMatchingSearchTerm(blockType, search)) && (!blockType.parent || includes(blockType.parent, 'core/post-content')));
return createElement("div", {
className: "edit-post-manage-blocks-modal__content"
}, createElement(TextControl, {
type: "search",
label: __('Search for a block'),
value: search,
onChange: nextSearch => setState({
search: nextSearch
}),
className: "edit-post-manage-blocks-modal__search"
}), !!numberOfHiddenBlocks && createElement("div", {
className: "edit-post-manage-blocks-modal__disabled-blocks-count"
}, sprintf(
/* translators: %d: number of blocks. */
_n('%d block is disabled.', '%d blocks are disabled.', numberOfHiddenBlocks), numberOfHiddenBlocks)), createElement("div", {
tabIndex: "0",
role: "region",
"aria-label": __('Available block types'),
className: "edit-post-manage-blocks-modal__results"
}, blockTypes.length === 0 && createElement("p", {
className: "edit-post-manage-blocks-modal__no-results"
}, __('No blocks found.')), categories.map(category => createElement(BlockManagerCategory, {
key: category.slug,
title: category.title,
blockTypes: filter(blockTypes, {
category: category.slug
})
})), createElement(BlockManagerCategory, {
title: __('Uncategorized'),
blockTypes: filter(blockTypes, ({
category
}) => !category)
})));
}
export default compose([withState({
search: ''
}), withSelect(select => {
const {
getBlockTypes,
getCategories,
hasBlockSupport,
isMatchingSearchTerm
} = select(blocksStore);
const {
getPreference
} = select(editPostStore);
const hiddenBlockTypes = getPreference('hiddenBlockTypes');
const numberOfHiddenBlocks = isArray(hiddenBlockTypes) && hiddenBlockTypes.length;
return {
blockTypes: getBlockTypes(),
categories: getCategories(),
hasBlockSupport,
isMatchingSearchTerm,
numberOfHiddenBlocks
};
})])(BlockManager);
//# sourceMappingURL=manager.js.map