import React, { useState, useEffect } from 'react'; import { openCandApi } from '../api'; import type { OpenCandDataAvailabilityStats } from '../api/apiModels'; import Card from '../Components/Card'; const DataStatsPage: React.FC = () => { const [stats, setStats] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const fetchStats = async () => { try { setLoading(true); const data = await openCandApi.getDataAvailabilityStats(); setStats(data); } catch (err) { setError('Erro ao carregar estatísticas de disponibilidade de dados'); console.error('Error fetching data availability stats:', err); } finally { setLoading(false); } }; fetchStats(); }, []); if (loading) { return (

Carregando dados...

); } if (error) { return (

{error}

); } if (!stats) { return (

Nenhum dado disponível

); } // Get all unique years from all data types const allYears = new Set(); Object.values(stats).forEach((yearArray: number[]) => { yearArray.forEach((year: number) => allYears.add(year)); }); const sortedYears = Array.from(allYears).sort((a, b) => b - a); const dataTypes = [ { key: 'candidatos', label: 'Candidatos', icon: '👤' }, { key: 'bemCandidatos', label: 'Bens de Candidatos', icon: '💰' }, { key: 'despesaCandidatos', label: 'Despesas de Candidatos', icon: '💸' }, { key: 'receitaCandidatos', label: 'Receitas de Candidatos', icon: '💵' }, { key: 'redeSocialCandidatos', label: 'Redes Sociais', icon: '📱' }, { key: 'fotosCandidatos', label: 'Fotos de Candidatos', icon: '📸' }, ]; return (
{/* Header */}

Disponibilidade de Dados

Visualize a disponibilidade dos dados por ano em nossa base

{/* Stats Cards */}
📊
{dataTypes.length}
Tipos de Dados
📅
{sortedYears.length}
Anos Disponíveis
🗓️
{sortedYears.length > 0 ? `${Math.min(...sortedYears)} - ${Math.max(...sortedYears)}` : 'N/A'}
Período
{/* Data Availability Table */}

Matriz de Disponibilidade

✅ Disponível • ❌ Não Disponível

{sortedYears.map((year, index) => ( ))} {dataTypes.map((dataType, rowIndex) => ( {sortedYears.map((year, cellIndex) => { const isAvailable = (stats[dataType.key as keyof OpenCandDataAvailabilityStats] as number[]).includes(year); return ( ); })} ))}
Tipo de Dado {year}
{dataType.icon} {dataType.label}
{isAvailable ? '✅' : '❌'}
); }; export default DataStatsPage;