UNPKG

@wordpress/block-editor

Version:
142 lines (116 loc) 5.27 kB
"use strict"; 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