UNPKG

@wordpress/block-editor

Version:
58 lines (54 loc) 2.54 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.usePatternCategories = usePatternCategories; var _element = require("@wordpress/element"); var _i18n = require("@wordpress/i18n"); var _a11y = require("@wordpress/a11y"); var _usePatternsState = _interopRequireDefault(require("../hooks/use-patterns-state")); var _utils = require("./utils"); /** * WordPress dependencies */ /** * Internal dependencies */ function hasRegisteredCategory(pattern, allCategories) { if (!pattern.categories || !pattern.categories.length) { return false; } return pattern.categories.some(cat => allCategories.some(category => category.name === cat)); } function usePatternCategories(rootClientId, sourceFilter = 'all') { const [patterns, allCategories] = (0, _usePatternsState.default)(undefined, rootClientId); const filteredPatterns = (0, _element.useMemo)(() => sourceFilter === 'all' ? patterns : patterns.filter(pattern => !(0, _utils.isPatternFiltered)(pattern, sourceFilter)), [sourceFilter, patterns]); // Remove any empty categories. const populatedCategories = (0, _element.useMemo)(() => { const categories = allCategories.filter(category => filteredPatterns.some(pattern => pattern.categories?.includes(category.name))).sort((a, b) => a.label.localeCompare(b.label)); if (filteredPatterns.some(pattern => !hasRegisteredCategory(pattern, allCategories)) && !categories.find(category => category.name === 'uncategorized')) { categories.push({ name: 'uncategorized', label: (0, _i18n._x)('Uncategorized') }); } if (filteredPatterns.some(pattern => pattern.blockTypes?.includes('core/post-content'))) { categories.unshift(_utils.starterPatternsCategory); } if (filteredPatterns.some(pattern => pattern.type === _utils.INSERTER_PATTERN_TYPES.user)) { categories.unshift(_utils.myPatternsCategory); } if (filteredPatterns.length > 0) { categories.unshift({ name: _utils.allPatternsCategory.name, label: _utils.allPatternsCategory.label }); } (0, _a11y.speak)((0, _i18n.sprintf)(/* translators: %d: number of categories . */ (0, _i18n._n)('%d category button displayed.', '%d category buttons displayed.', categories.length), categories.length)); return categories; }, [allCategories, filteredPatterns]); return populatedCategories; } //# sourceMappingURL=use-pattern-categories.js.map