Checkpoint: Sélecteur d'année global (2025, 2026, 2027+) sur Renouvellement PC, CAPEX-Construction, CAPEX-Synthèse et DSI-OPEX. Données CAPEX isolées par année en localStorage. Titres dynamiques selon l'année sélectionnée.
This commit is contained in:
52
client/src/contexts/AnneeContext.tsx
Normal file
52
client/src/contexts/AnneeContext.tsx
Normal file
@@ -0,0 +1,52 @@
|
||||
// AnneeContext.tsx — Contexte global pour l'année sélectionnée
|
||||
// Partagé entre toutes les pages : Renouvellement PC, CAPEX-Construction, CAPEX-Synthèse, DSI-OPEX
|
||||
|
||||
import { createContext, useContext, useState, ReactNode } from 'react';
|
||||
|
||||
export const ANNEES_DISPONIBLES = [2025, 2026, 2027, 2028, 2029, 2030];
|
||||
export const ANNEE_DEFAUT = 2027;
|
||||
|
||||
interface AnneeContextType {
|
||||
annee: number;
|
||||
setAnnee: (a: number) => void;
|
||||
}
|
||||
|
||||
const AnneeContext = createContext<AnneeContextType>({
|
||||
annee: ANNEE_DEFAUT,
|
||||
setAnnee: () => {},
|
||||
});
|
||||
|
||||
export function AnneeProvider({ children }: { children: ReactNode }) {
|
||||
const [annee, setAnneeState] = useState<number>(() => {
|
||||
try {
|
||||
const stored = localStorage.getItem('itinova_annee_selectionnee');
|
||||
const parsed = stored ? parseInt(stored, 10) : ANNEE_DEFAUT;
|
||||
return ANNEES_DISPONIBLES.includes(parsed) ? parsed : ANNEE_DEFAUT;
|
||||
} catch { return ANNEE_DEFAUT; }
|
||||
});
|
||||
|
||||
const setAnnee = (a: number) => {
|
||||
setAnneeState(a);
|
||||
try { localStorage.setItem('itinova_annee_selectionnee', String(a)); } catch {}
|
||||
};
|
||||
|
||||
return (
|
||||
<AnneeContext.Provider value={{ annee, setAnnee }}>
|
||||
{children}
|
||||
</AnneeContext.Provider>
|
||||
);
|
||||
}
|
||||
|
||||
export function useAnnee() {
|
||||
return useContext(AnneeContext);
|
||||
}
|
||||
|
||||
// Génère la clé localStorage pour les saisies CAPEX d'une année donnée
|
||||
export function getCapexStorageKey(annee: number): string {
|
||||
return `itinova_budget_capex_${annee}`;
|
||||
}
|
||||
|
||||
// Génère la clé localStorage pour les saisies OPEX d'une année donnée
|
||||
export function getOpexStorageKey(annee: number): string {
|
||||
return `itinova_budget_opex_${annee}`;
|
||||
}
|
||||
Reference in New Issue
Block a user