diff --git a/client/src/components/DashboardLayout.tsx b/client/src/components/DashboardLayout.tsx index 9df67a0..7a36daa 100644 --- a/client/src/components/DashboardLayout.tsx +++ b/client/src/components/DashboardLayout.tsx @@ -160,9 +160,18 @@ function DashboardLayoutContent({ const activeMenuItem = menuSections.flatMap(section => section.items).find(item => item.path === location); const isMobile = useIsMobile(); - // État pour gérer les sections ouvertes/fermées (accordéon) + // État pour gérer les sections ouvertes/fermées (persisté dans localStorage) const [openSections, setOpenSections] = useState>(() => { - // Par défaut, ouvrir toutes les sections + // Essayer de charger depuis localStorage + const saved = localStorage.getItem('menuSectionsState'); + if (saved) { + try { + return JSON.parse(saved); + } catch { + // En cas d'erreur, utiliser les valeurs par défaut + } + } + // Valeurs par défaut : toutes les sections ouvertes const initial: Record = {}; menuSections.forEach(section => { initial[section.title] = true; @@ -172,27 +181,16 @@ function DashboardLayoutContent({ // Fonction pour toggle une section const toggleSection = (sectionTitle: string) => { - setOpenSections(prev => ({ - ...prev, - [sectionTitle]: !prev[sectionTitle] - })); - }; - - // S'assurer que la section contenant l'item actif est ouverte - useEffect(() => { - const activeSection = menuSections.find(section => - section.items.some(item => - item.path === location || - ('subItems' in item && item.subItems?.some((sub: any) => sub.path === location)) - ) - ); - if (activeSection && !openSections[activeSection.title]) { - setOpenSections(prev => ({ + setOpenSections(prev => { + const newState = { ...prev, - [activeSection.title]: true - })); - } - }, [location]); + [sectionTitle]: !prev[sectionTitle] + }; + // Sauvegarder dans localStorage + localStorage.setItem('menuSectionsState', JSON.stringify(newState)); + return newState; + }); + }; useEffect(() => { if (isCollapsed) { diff --git a/todo.md b/todo.md index 8d95127..0f58008 100644 --- a/todo.md +++ b/todo.md @@ -147,3 +147,10 @@ - [x] Implémenter la logique de toggle pour chaque section - [x] Garder la section active automatiquement ouverte - [x] Tester le comportement sur toutes les sections + +## Correction bug accordéons qui s'ouvrent tous + +- [x] Corriger le useEffect pour n'ouvrir que la section contenant l'item actif +- [x] Supprimer le useEffect problématique (toutes sections ouvertes par défaut) +- [x] Utiliser localStorage pour persister l'état des sections +- [x] Tester le comportement en cliquant sur différents items