/
githubmirror
/
gutenberg
Обзор
Документация
Войти
/
githubmirror
/
gutenberg
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
trunk
packages/block-library/src/utils/search-patterns.js
73 строки
2 KB
Marco Ciampini
ESLint: Replace strict config with bulk suppressions (#81248)
07 авг 2026, 14:34
Не верифицирован
07 авг 2026, 14:34
7f43eaf
Код
Авторство
О чём код?
import removeAccents from 'remove-accents'; /** * Sanitizes the search input string. * * @param {string} input The search input to normalize. * * @return {string} The normalized search input. */ export function normalizeSearchInput( input = '' ) { // 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 */ export 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( patterns = [], searchValue = '' ) { if ( ! searchValue ) { return patterns; } const rankedPatterns = patterns .map( ( pattern ) => { return [ pattern, getPatternSearchRank( pattern, searchValue ) ]; } ) .filter( ( [ , rank ] ) => rank > 0 ); rankedPatterns.sort( ( [ , rank1 ], [ , rank2 ] ) => rank2 - rank1 ); return rankedPatterns.map( ( [ pattern ] ) => pattern ); }