72 lines
2.1 KiB
TypeScript
72 lines
2.1 KiB
TypeScript
// 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;
|
|
|
|
const PARAMETRES_STORAGE_KEY = 'itinova_budget_parametres';
|
|
|
|
function getAnneeDefautFromParametres(): number {
|
|
try {
|
|
const raw = localStorage.getItem(PARAMETRES_STORAGE_KEY);
|
|
if (raw) {
|
|
const parsed = JSON.parse(raw);
|
|
if (typeof parsed.anneeDefaut === 'number' && ANNEES_DISPONIBLES.includes(parsed.anneeDefaut)) {
|
|
return parsed.anneeDefaut;
|
|
}
|
|
}
|
|
} catch { /* ignore */ }
|
|
return ANNEE_DEFAUT;
|
|
}
|
|
|
|
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');
|
|
if (stored) {
|
|
const parsed = parseInt(stored, 10);
|
|
if (ANNEES_DISPONIBLES.includes(parsed)) return parsed;
|
|
}
|
|
// Pas de session mémorisée → utiliser l'année par défaut des paramètres
|
|
return getAnneeDefautFromParametres();
|
|
} 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}`;
|
|
}
|