Checkpoint: Ajout de gardes défensives sur e.nom et e.code dans filteredEtabs et sortedEtabs : conversion explicite en string avant toLowerCase/localeCompare pour éviter le crash quand un établissement a un nom non-string (undefined, null, objet).

This commit is contained in:
Manus
2026-06-10 09:15:38 +00:00
parent 90938eb83c
commit bd9b52d39a

View File

@@ -699,8 +699,10 @@ export default function DsiOpex() {
const filteredEtabs = useMemo(() => { const filteredEtabs = useMemo(() => {
return etablissementsRecalcules.filter(e => { return etablissementsRecalcules.filter(e => {
if (search && !e.nom.toLowerCase().includes(search.toLowerCase()) && const nom = typeof e.nom === 'string' ? e.nom : String(e.nom ?? '');
!e.code.toLowerCase().includes(search.toLowerCase())) return false; const code = typeof e.code === 'string' ? e.code : String(e.code ?? '');
if (search && !nom.toLowerCase().includes(search.toLowerCase()) &&
!code.toLowerCase().includes(search.toLowerCase())) return false;
return true; return true;
}); });
}, [etablissementsRecalcules, search]); }, [etablissementsRecalcules, search]);
@@ -708,7 +710,11 @@ export default function DsiOpex() {
const sortedEtabs = useMemo(() => { const sortedEtabs = useMemo(() => {
const arr = [...filteredEtabs]; const arr = [...filteredEtabs];
if (sortCol === 'total') arr.sort((a, b) => sortDir === 'asc' ? a.total - b.total : b.total - a.total); if (sortCol === 'total') arr.sort((a, b) => sortDir === 'asc' ? a.total - b.total : b.total - a.total);
else if (sortCol === 'nom') arr.sort((a, b) => sortDir === 'asc' ? a.nom.localeCompare(b.nom) : b.nom.localeCompare(a.nom)); else if (sortCol === 'nom') arr.sort((a, b) => {
const na = typeof a.nom === 'string' ? a.nom : String(a.nom ?? '');
const nb = typeof b.nom === 'string' ? b.nom : String(b.nom ?? '');
return sortDir === 'asc' ? na.localeCompare(nb) : nb.localeCompare(na);
});
return arr; return arr;
}, [filteredEtabs, sortCol, sortDir]); }, [filteredEtabs, sortCol, sortDir]);