@wordpress/block-editor
Version:
58 lines (54 loc) • 2.54 kB
JavaScript
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
;