aboutsummaryrefslogtreecommitdiff
path: root/src/lib/shared/filter-items.ts
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));
}