import React, { useState, useEffect } from 'react'; import { api } from '../stores/api'; import PageHeader from '../components/PageHeader'; const MOIS_FR = [ '', 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre', ]; export default function Rapports() { const [disponibles, setDisponibles] = useState([]); const [anneesResolutions, setAnneesResolutions] = useState([]); const [loading, setLoading] = useState(true); const [generating, setGenerating] = useState(null); useEffect(() => { Promise.all([ api.get('/rapports/disponibles'), api.get('/rapports/resolutions/annees'), ]).then(([dispo, annees]) => { setDisponibles(dispo); setAnneesResolutions(annees); setLoading(false); }).catch(() => setLoading(false)); }, []); const telecharger = async (path, key, filename) => { setGenerating(key); try { const token = localStorage.getItem('gm_token'); const res = await fetch(`/api/rapports/${path}`, { headers: { Authorization: `Bearer ${token}` }, }); if (!res.ok) throw new Error('Erreur de génération'); const blob = await res.blob(); const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = filename; a.click(); URL.revokeObjectURL(a.href); } catch (e) { alert(`Erreur: ${e.message}`); } setGenerating(null); }; const vide = disponibles.length === 0 && anneesResolutions.length === 0; return (
{loading ? (

Chargement...

) : vide ? (

📄

Aucun rapport disponible

Les rapports apparaîtront après les premières saisies

) : ( <> {/* Rapports mensuels */} {disponibles.map((m) => (

{MOIS_FR[m.mois]} {m.annee}

{m.finances && ( )} {m.reunions && ( )}
))} {/* Registre des résolutions */} {anneesResolutions.length > 0 && (

📜 Registre des résolutions

{anneesResolutions.map((a) => ( ))}
)} )}
); }