blob: e7e103bc01562a0e307cf96a7a858e4409e8f8d9 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/** Lowercase and strip diacritics so "etirements" matches "Étirements". */
function fold(value: string): string {
return value.normalize('NFD').replace(/\p{M}/gu, '').toLowerCase();
}
/** Filter `items` to those whose `name` contains `query` as a literal
* substring, case- and accent-insensitive. Order is preserved and no result
* cap applies. Empty/whitespace query returns everything. */
export function filterByName<T extends { name: string }>(
items: T[],
query: string,
): T[] {
const q = fold(query.trim());
if (q === '') return items;
return items.filter((item) => fold(item.name).includes(q));
}
|