diff --git a/frontend/src/pages/Plateformes.jsx b/frontend/src/pages/Plateformes.jsx index 83fea1d..f6dac6e 100644 --- a/frontend/src/pages/Plateformes.jsx +++ b/frontend/src/pages/Plateformes.jsx @@ -289,9 +289,12 @@ export default function Plateformes() { /* ── État sélecteurs ── */ /* selectedPlatName et activeTab sont dans l'URL pour survivre au retour arrière */ const selectedPlatName = searchParams.get('plat') || null; - const setSelectedPlatName = (nom) => setSearchParams(p => { const n = new URLSearchParams(p); n.set('plat', nom); return n; }, { replace: true }); - const [selectedDetenteurId, setSelectedDetenteurId] = useState('all'); - const [selectedYear, setSelectedYear] = useState(String(new Date().getFullYear())); + const setSelectedPlatName = (nom) => { + try { localStorage.setItem('cl_plat_selected', nom); } catch {} + setSearchParams(p => { const n = new URLSearchParams(p); n.set('plat', nom); return n; }, { replace: true }); + }; + const [selectedDetenteurId, setSelectedDetenteurId] = useState(() => { try { return localStorage.getItem('cl_plat_detenteur') || 'all'; } catch { return 'all'; } }); + const [selectedYear, setSelectedYear] = useState(() => { try { return localStorage.getItem('cl_plat_year') || String(new Date().getFullYear()); } catch { return String(new Date().getFullYear()); } }); const [windowStart, setWindowStart] = useState(0); const [drDetaille, setDrDetaille] = useState(() => { try { return localStorage.getItem('cl_dr_plat_detaille') === 'true'; } catch { return false; } @@ -326,8 +329,11 @@ export default function Plateformes() { const [pfuRates, setPfuRates] = useState([]); /* ── État UI ── */ - const activeTab = searchParams.get('tab') || 'remboursements'; - const setActiveTab = (tab) => setSearchParams(p => { const n = new URLSearchParams(p); n.set('tab', tab); return n; }, { replace: true }); + const activeTab = searchParams.get('tab') || (() => { try { return localStorage.getItem('cl_plat_tab') || 'remboursements'; } catch { return 'remboursements'; } })(); + const setActiveTab = (tab) => { + try { localStorage.setItem('cl_plat_tab', tab); } catch {} + setSearchParams(p => { const n = new URLSearchParams(p); n.set('tab', tab); return n; }, { replace: true }); + }; const [listFocused, setListFocused] = useState(false); /* ── Chargement ── */ @@ -390,10 +396,12 @@ export default function Plateformes() { return Object.values(map).sort((a, b) => b.investi - a.investi); }, [allRows, plats]); - /* ── Init sélecteur plateforme ── */ + /* ── Init sélecteur plateforme — préfère localStorage ── */ useEffect(() => { if (!selectedPlatName && platOptions.length > 0) { - setSelectedPlatName(platOptions[0].nom); + const saved = (() => { try { return localStorage.getItem('cl_plat_selected'); } catch { return null; } })(); + const target = platOptions.find(p => p.nom === saved) ? saved : platOptions[0].nom; + setSelectedPlatName(target); } }, [platOptions, selectedPlatName]); @@ -416,8 +424,17 @@ export default function Plateformes() { ]; }, [platRows, investisseurs]); - /* ── Reset détenteur quand plateforme change ── */ - useEffect(() => { setSelectedDetenteurId('all'); }, [selectedPlatName]); + /* ── Reset détenteur quand plateforme change (skip restauration initiale) ── */ + const isFirstPlatChange = useRef(true); + useEffect(() => { + if (isFirstPlatChange.current) { isFirstPlatChange.current = false; return; } + setSelectedDetenteurId('all'); + try { localStorage.setItem('cl_plat_detenteur', 'all'); } catch {} + }, [selectedPlatName]); + + /* ── Persistance selectedYear et selectedDetenteurId ── */ + useEffect(() => { try { localStorage.setItem('cl_plat_year', selectedYear); } catch {} }, [selectedYear]); + useEffect(() => { try { localStorage.setItem('cl_plat_detenteur', selectedDetenteurId); } catch {} }, [selectedDetenteurId]); /* ── IDs des plateformes correspondant à la sélection nom + détenteur ── */ const filteredPlatIds = useMemo(() => {