diff --git a/frontend/src/i18n/locales/fr.json b/frontend/src/i18n/locales/fr.json index 5d95742..98827bb 100644 --- a/frontend/src/i18n/locales/fr.json +++ b/frontend/src/i18n/locales/fr.json @@ -92,7 +92,8 @@ "grille.panel.noneAssigned": "Personne n'est encore affecté sur ce créneau.", "grille.panel.hoursTotal": "{hours} H AU TOTAL", "grille.panel.candidates": "CANDIDATS", - "grille.panel.candidatesHint": "LES MOINS CHARGÉS D'ABORD", + "grille.panel.searchVolunteer": "Rechercher un bénévole…", + "grille.panel.searchNoMatch": "Aucun bénévole ne correspond à cette recherche.", "grille.panel.hoursAssigned": "{hours} H · {slots} CRÉNEAUX", "grille.panel.assign": "AFFECTER", "grille.panel.blocked": "BLOQUÉ", diff --git a/frontend/src/lib/planning.ts b/frontend/src/lib/planning.ts index 9f59c93..5499f49 100644 --- a/frontend/src/lib/planning.ts +++ b/frontend/src/lib/planning.ts @@ -16,6 +16,14 @@ export function categoryLabel(category: PositionCategory): string { return t(`position.category.${category.toLowerCase()}`); } +/** Normalise pour une recherche insensible aux accents et à la casse. */ +export function foldAccents(value: string): string { + return value + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase(); +} + // --------------------------------------------------------------------------- // // Disponibilités : couverture d'un créneau par les fenêtres déclarées // // (portage de `backend/app/validation/engine.py`). // diff --git a/frontend/src/pages/GrillePage.tsx b/frontend/src/pages/GrillePage.tsx index 10a935c..1ccd63b 100644 --- a/frontend/src/pages/GrillePage.tsx +++ b/frontend/src/pages/GrillePage.tsx @@ -175,6 +175,7 @@ export function GrillePage() {