UNPKG

@wordpress/edit-post

Version:
93 lines (88 loc) 2.99 kB
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