Checkpoint: Inventaire PC distinct par année : clé budgetsi_inventaire_data_YYYY dans localStorage, ImportModal utilise l'année active (useAnnee), indicateur visuel des imports par année dans la modale, useBudgetData + Budget2027 + DsiCapex rechargent l'inventaire à chaque changement d'année
This commit is contained in:
@@ -28,9 +28,9 @@ import type { BudgetData } from '../types/budget';
|
||||
|
||||
const bp2027Data = bp2027Raw as BP2027Data;
|
||||
|
||||
function loadInventaireData(): BudgetData | null {
|
||||
function loadInventaireData(annee: number): BudgetData | null {
|
||||
try {
|
||||
const raw = localStorage.getItem('budgetsi_inventaire_data');
|
||||
const raw = localStorage.getItem(`budgetsi_inventaire_data_${annee}`);
|
||||
return raw ? JSON.parse(raw) as BudgetData : null;
|
||||
} catch { return null; }
|
||||
}
|
||||
@@ -99,20 +99,32 @@ export default function DsiCapex() {
|
||||
const [sortDir, setSortDir] = useState<SortDir>('asc');
|
||||
const [showOnlyFilled, setShowOnlyFilled] = useState(false);
|
||||
const [lastRefresh, setLastRefresh] = useState(Date.now());
|
||||
const [inventaire, setInventaire] = useState<BudgetData | null>(() => loadInventaireData());
|
||||
const [inventaire, setInventaire] = useState<BudgetData | null>(() => loadInventaireData(annee));
|
||||
|
||||
useEffect(() => {
|
||||
setSaisies(loadSaisiesForAnnee(annee));
|
||||
}, [lastRefresh, annee]);
|
||||
|
||||
// Recharger l'inventaire quand l'année change
|
||||
useEffect(() => {
|
||||
const onImport = () => setInventaire(loadInventaireData());
|
||||
setInventaire(loadInventaireData(annee));
|
||||
}, [annee]);
|
||||
|
||||
useEffect(() => {
|
||||
const onImport = (e: Event) => {
|
||||
const detail = (e as CustomEvent).detail;
|
||||
if (!detail || detail.annee === annee) setInventaire(loadInventaireData(annee));
|
||||
};
|
||||
const onStorage = (e: StorageEvent) => {
|
||||
if (e.key === `budgetsi_inventaire_data_${annee}`) setInventaire(loadInventaireData(annee));
|
||||
};
|
||||
window.addEventListener('budgetsi_inventaire_updated', onImport);
|
||||
window.addEventListener('storage', (e: StorageEvent) => {
|
||||
if (e.key === 'budgetsi_inventaire_data') onImport();
|
||||
});
|
||||
return () => window.removeEventListener('budgetsi_inventaire_updated', onImport);
|
||||
}, []);
|
||||
window.addEventListener('storage', onStorage);
|
||||
return () => {
|
||||
window.removeEventListener('budgetsi_inventaire_updated', onImport);
|
||||
window.removeEventListener('storage', onStorage);
|
||||
};
|
||||
}, [annee]);
|
||||
|
||||
const handleRefresh = () => setLastRefresh(Date.now());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user