import React, { useEffect, useMemo, useState } from "react"; import { getRegionEvolution, RegionEvolutionParams, TaxType } from "../../../api/stats"; import { RegionEvolutionPoint } from "../../../models/RegionEvolution"; import { groupByRegion } from "./timeseries.utils"; import { TimeSeriesControls } from "./TimeSeriesControls"; import { TimeSeriesChart, HoverPoint } from "./TimeSeriesChart"; import { TimeSeriesDetails } from "./TimeSeriesDetails"; import "./TimeSeries.css"; const USE_MOCK_DATA = false; const TimeSeries: React.FC = () => { const [raw, setRaw] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); // Filters const [selectedTax, setSelectedTax] = useState("tfpb"); const [startYear, setStartYear] = useState(2019); const [endYear, setEndYear] = useState(2023); const [hover, setHover] = useState(null); const [selectedRegion, setSelectedRegion] = useState(null); useEffect(() => { let cancelled = false; async function load() { try { setLoading(true); setError(null); if (USE_MOCK_DATA) { if (!cancelled) setRaw([]); } else { const params: RegionEvolutionParams = { tax: selectedTax, startYear, endYear }; const res = await getRegionEvolution(params); if (!cancelled) setRaw(res.member); } } catch (e: any) { if (!cancelled) setError(e.message ?? "Erreur API"); } finally { if (!cancelled) setLoading(false); } } load(); return () => { cancelled = true; }; }, [selectedTax, startYear, endYear]); const series = useMemo(() => groupByRegion(raw), [raw]); if (loading) return

Chargement…

; if (error) return

Erreur : {error}

; if (raw.length === 0) return

Aucune donnée.

; const detailsRegion = hover?.regionName || selectedRegion; const regionDetails = detailsRegion ? series.get(detailsRegion) : null; return (
{ setSelectedTax(t); setSelectedRegion(null); }} onStartYearChange={(y) => setStartYear(y)} onEndYearChange={(y) => setEndYear(y)} />
setSelectedRegion(region)} /> {regionDetails && detailsRegion && ( setSelectedRegion(null)} /> )}
); }; export default TimeSeries;