UNPKG

@wordpress/components

Version:
108 lines (89 loc) 3.22 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 _i18n = require("@wordpress/i18n"); var _withSpokenMessages = _interopRequireDefault(require("../../higher-order/with-spoken-messages")); var _context = require("./context"); var _context2 = require("../context"); var _navigationStyles = require("../styles/navigation-styles"); var _constants = require("../constants"); /** * WordPress dependencies */ /** * Internal dependencies */ function MenuTitleSearch(_ref) { let { debouncedSpeak, onCloseSearch, onSearch, search, title } = _ref; const { navigationTree: { items } } = (0, _context2.useNavigationContext)(); const { menu } = (0, _context.useNavigationMenuContext)(); const inputRef = (0, _element.useRef)(null); // Wait for the slide-in animation to complete before autofocusing the input. // This prevents scrolling to the input during the animation. (0, _element.useEffect)(() => { const delayedFocus = setTimeout(() => { var _inputRef$current; (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus(); }, _constants.SEARCH_FOCUS_DELAY); return () => { clearTimeout(delayedFocus); }; }, []); (0, _element.useEffect)(() => { if (!search) { return; } const count = Object.values(items).filter(item => item._isVisible).length; const resultsFoundMessage = (0, _i18n.sprintf)( /* translators: %d: number of results. */ (0, _i18n._n)('%d result found.', '%d results found.', count), count); debouncedSpeak(resultsFoundMessage); // Ignore exhaustive-deps rule for now. See https://github.com/WordPress/gutenberg/pull/44090 // eslint-disable-next-line react-hooks/exhaustive-deps }, [items, search]); const onClose = () => { onSearch === null || onSearch === void 0 ? void 0 : onSearch(''); onCloseSearch(); }; const onKeyDown = event => { if (event.code === 'Escape' && !event.defaultPrevented) { event.preventDefault(); onClose(); } }; const inputId = `components-navigation__menu-title-search-${menu}`; const placeholder = (0, _i18n.sprintf)( /* translators: placeholder for menu search box. %s: menu title */ (0, _i18n.__)('Search %s'), title === null || title === void 0 ? void 0 : title.toLowerCase()).trim(); return (0, _element.createElement)("div", { className: "components-navigation__menu-title-search" }, (0, _element.createElement)(_navigationStyles.MenuTitleSearchUI, { autoComplete: "off", className: "components-navigation__menu-search-input", id: inputId, onChange: value => onSearch === null || onSearch === void 0 ? void 0 : onSearch(value), onKeyDown: onKeyDown, placeholder: placeholder, onClose: onClose, ref: inputRef, type: "search", value: search })); } var _default = (0, _withSpokenMessages.default)(MenuTitleSearch); exports.default = _default; //# sourceMappingURL=menu-title-search.js.map