UNPKG

@wordpress/block-library

Version:
84 lines (73 loc) 2.26 kB
/** * External dependencies */ import removeAccents from 'remove-accents'; /** * Sanitizes the search input string. * * @param {string} input The search input to normalize. * * @return {string} The normalized search input. */ function normalizeSearchInput() { let input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; // Disregard diacritics. input = removeAccents(input); // Trim & Lowercase. input = input.trim().toLowerCase(); return input; } /** * Get the search rank for a given pattern and a specific search term. * * @param {Object} pattern Pattern to rank * @param {string} searchValue Search term * @return {number} A pattern search rank */ function getPatternSearchRank(pattern, searchValue) { const normalizedSearchValue = normalizeSearchInput(searchValue); const normalizedTitle = normalizeSearchInput(pattern.title); let rank = 0; if (normalizedSearchValue === normalizedTitle) { rank += 30; } else if (normalizedTitle.startsWith(normalizedSearchValue)) { rank += 20; } else { const searchTerms = normalizedSearchValue.split(' '); const hasMatchedTerms = searchTerms.every(searchTerm => normalizedTitle.includes(searchTerm)); // Prefer pattern with every search word in the title. if (hasMatchedTerms) { rank += 10; } } return rank; } /** * Filters an pattern list given a search term. * * @param {Array} patterns Item list * @param {string} searchValue Search input. * * @return {Array} Filtered pattern list. */ export function searchPatterns() { let patterns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; let searchValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; if (!searchValue) { return patterns; } const rankedPatterns = patterns.map(pattern => { return [pattern, getPatternSearchRank(pattern, searchValue)]; }).filter(_ref => { let [, rank] = _ref; return rank > 0; }); rankedPatterns.sort((_ref2, _ref3) => { let [, rank1] = _ref2; let [, rank2] = _ref3; return rank2 - rank1; }); return rankedPatterns.map(_ref4 => { let [pattern] = _ref4; return pattern; }); } //# sourceMappingURL=search.js.map