// src/pages/VueConso/VueConso.jsx // Page Vue consolidée : graphique barres + tableau avec export CSV import { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { Download } from 'lucide-react'; import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts'; import { getDashboard, exportToCSV } from '../../services/api'; import DataTable from '../../components/common/DataTable'; import LoadingSpinner from '../../components/common/LoadingSpinner'; import ErrorMessage from '../../components/common/ErrorMessage'; import Button from '../../components/common/Button'; import { getStatutMonitoring } from '../../utils/statutMonitoring'; import { buildMonitoringColumns } from '../../utils/monitoringColumns'; import styles from './VueConso.module.css'; export default function VueConso() { const navigate = useNavigate(); const [data, setData] = useState([]); const [loading, setLoading] = useState(true); const [erreur, setErreur] = useState(''); useEffect(() => { async function loadData() { setLoading(true); setErreur(''); try { const result = await getDashboard(); setData(Array.isArray(result) ? result : []); } catch (e) { setErreur(e.message || 'Erreur lors du chargement de la vue consolidée.'); } finally { setLoading(false); } } loadData(); }, []); if (loading) return ; if (erreur) return ; /* Préparation des données pour le graphique */ const chartData = data.map(item => ({ name: item.nom || item.nom_monito || item.libelle || 'Monitoring', erreurs: item.nb_erreurs ?? item.count ?? 0, fill: getStatutMonitoring(item.nb_erreurs ?? item.count ?? 0).color })); const columns = buildMonitoringColumns(navigate); return (

Vue consolidée

{/* Graphique */}
{/* Tableau */}
); }