@wordpress/block-editor
Version:
142 lines (116 loc) • 5.27 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _element = require("@wordpress/element");
var _lodash = require("lodash");
var _i18n = require("@wordpress/i18n");
var _components = require("@wordpress/components");
var _compose = require("@wordpress/compose");
var _a11y = require("@wordpress/a11y");
var _blockTypesList = _interopRequireDefault(require("../block-types-list"));
var _blockPatternsList = _interopRequireDefault(require("../block-patterns-list"));
var _inserterMenuExtension = _interopRequireDefault(require("../inserter-menu-extension"));
var _panel = _interopRequireDefault(require("./panel"));
var _noResults = _interopRequireDefault(require("./no-results"));
var _useInsertionPoint = _interopRequireDefault(require("./hooks/use-insertion-point"));
var _usePatternsState = _interopRequireDefault(require("./hooks/use-patterns-state"));
var _useBlockTypesState = _interopRequireDefault(require("./hooks/use-block-types-state"));
var _searchItems = require("./search-items");
var _inserterListbox = _interopRequireDefault(require("../inserter-listbox"));
/**
* External dependencies
*/
/**
* WordPress dependencies
*/
/**
* Internal dependencies
*/
function InserterSearchResults({
filterValue,
onSelect,
onHover,
rootClientId,
clientId,
isAppender,
__experimentalInsertionIndex,
maxBlockPatterns,
maxBlockTypes,
showBlockDirectory = false,
isDraggable = true,
shouldFocusBlock = true
}) {
const debouncedSpeak = (0, _compose.useDebounce)(_a11y.speak, 500);
const [destinationRootClientId, onInsertBlocks] = (0, _useInsertionPoint.default)({
onSelect,
rootClientId,
clientId,
isAppender,
insertionIndex: __experimentalInsertionIndex,
shouldFocusBlock
});
const [blockTypes, blockTypeCategories, blockTypeCollections, onSelectBlockType] = (0, _useBlockTypesState.default)(destinationRootClientId, onInsertBlocks);
const [patterns,, onSelectBlockPattern] = (0, _usePatternsState.default)(onInsertBlocks, destinationRootClientId);
const filteredBlockTypes = (0, _element.useMemo)(() => {
const results = (0, _searchItems.searchBlockItems)((0, _lodash.orderBy)(blockTypes, ['frecency'], ['desc']), blockTypeCategories, blockTypeCollections, filterValue);
return maxBlockTypes !== undefined ? results.slice(0, maxBlockTypes) : results;
}, [filterValue, blockTypes, blockTypeCategories, blockTypeCollections, maxBlockTypes]);
const filteredBlockPatterns = (0, _element.useMemo)(() => {
const results = (0, _searchItems.searchItems)(patterns, filterValue);
return maxBlockPatterns !== undefined ? results.slice(0, maxBlockPatterns) : results;
}, [filterValue, patterns, maxBlockPatterns]); // Announce search results on change
(0, _element.useEffect)(() => {
if (!filterValue) {
return;
}
const count = filteredBlockTypes.length + filteredBlockPatterns.length;
const resultsFoundMessage = (0, _i18n.sprintf)(
/* translators: %d: number of results. */
(0, _i18n._n)('%d result found.', '%d results found.', count), count);
debouncedSpeak(resultsFoundMessage);
}, [filterValue, debouncedSpeak]);
const currentShownPatterns = (0, _compose.useAsyncList)(filteredBlockPatterns);
const hasItems = !(0, _lodash.isEmpty)(filteredBlockTypes) || !(0, _lodash.isEmpty)(filteredBlockPatterns);
return (0, _element.createElement)(_inserterListbox.default, null, !showBlockDirectory && !hasItems && (0, _element.createElement)(_noResults.default, null), !!filteredBlockTypes.length && (0, _element.createElement)(_panel.default, {
title: (0, _element.createElement)(_components.VisuallyHidden, null, (0, _i18n.__)('Blocks'))
}, (0, _element.createElement)(_blockTypesList.default, {
items: filteredBlockTypes,
onSelect: onSelectBlockType,
onHover: onHover,
label: (0, _i18n.__)('Blocks'),
isDraggable: isDraggable
})), !!filteredBlockTypes.length && !!filteredBlockPatterns.length && (0, _element.createElement)("div", {
className: "block-editor-inserter__quick-inserter-separator"
}), !!filteredBlockPatterns.length && (0, _element.createElement)(_panel.default, {
title: (0, _element.createElement)(_components.VisuallyHidden, null, (0, _i18n.__)('Block Patterns'))
}, (0, _element.createElement)("div", {
className: "block-editor-inserter__quick-inserter-patterns"
}, (0, _element.createElement)(_blockPatternsList.default, {
shownPatterns: currentShownPatterns,
blockPatterns: filteredBlockPatterns,
onClickPattern: onSelectBlockPattern,
isDraggable: isDraggable
}))), showBlockDirectory && (0, _element.createElement)(_inserterMenuExtension.default.Slot, {
fillProps: {
onSelect: onSelectBlockType,
onHover,
filterValue,
hasItems,
rootClientId: destinationRootClientId
}
}, fills => {
if (fills.length) {
return fills;
}
if (!hasItems) {
return (0, _element.createElement)(_noResults.default, null);
}
return null;
}));
}
var _default = InserterSearchResults;
exports.default = _default;
//# sourceMappingURL=search-results.js.map