'use client'; import { useMunicipalityQuery, useParishQuery, useStateQuery, } from '@/feactures/location/hooks/use-query-location'; import { Button } from '@repo/shadcn/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from '@repo/shadcn/card'; import { Input } from '@repo/shadcn/input'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@repo/shadcn/select'; import { SelectSearchable } from '@repo/shadcn/select-searchable'; import { useState } from 'react'; import { Bar, BarChart, CartesianGrid, Cell, Legend, Pie, PieChart, ResponsiveContainer, Tooltip, XAxis, YAxis, } from 'recharts'; import { useTrainingStatsQuery } from '../hooks/use-training-statistics'; const OSP_TYPES = [ 'EPSD', 'EPSI', 'UPF', 'Cooperativa', 'Grupo de Intercambio', ]; export function TrainingStatistics() { // Filter State const [startDate, setStartDate] = useState(''); const [endDate, setEndDate] = useState(''); const [stateId, setStateId] = useState(0); const [municipalityId, setMunicipalityId] = useState(0); const [parishId, setParishId] = useState(0); const [ospType, setOspType] = useState(''); // Location Data const { data: dataState } = useStateQuery(); const { data: dataMunicipality } = useMunicipalityQuery(stateId); const { data: dataParish } = useParishQuery(municipalityId); const stateOptions = dataState?.data || [{ id: 0, name: 'Sin estados' }]; const municipalityOptions = Array.isArray(dataMunicipality?.data) && dataMunicipality.data.length > 0 ? dataMunicipality.data : [{ id: 0, stateId: 0, name: 'Sin Municipios' }]; const parishOptions = Array.isArray(dataParish?.data) && dataParish.data.length > 0 ? dataParish.data : [{ id: 0, stateId: 0, name: 'Sin Parroquias' }]; // Query with Filters const { data, isLoading, refetch } = useTrainingStatsQuery({ startDate: startDate || undefined, endDate: endDate || undefined, stateId: stateId || undefined, municipalityId: municipalityId || undefined, parishId: parishId || undefined, ospType: ospType || undefined, }); const handleClearFilters = () => { setStartDate(''); setEndDate(''); setStateId(0); setMunicipalityId(0); setParishId(0); setOspType(''); }; if (isLoading) { return (
Cargando estadísticas...
); } if (!data) { return (
No hay datos disponibles.
); } const { totalOsps, totalProducers, statusDistribution, activityDistribution, typeDistribution, stateDistribution, yearDistribution, } = data; const COLORS = [ '#0088FE', '#00C49F', '#FFBB28', '#FF8042', '#8884d8', '#82ca9d', ]; return (
{/* Filters Section */} Filtros
setStartDate(e.target.value)} />
setEndDate(e.target.value)} />
({ value: item.id.toString(), label: item.name, }))} onValueChange={(value: any) => { setStateId(Number(value)); setMunicipalityId(0); // Reset municipality setParishId(0); // Reset parish }} placeholder="Selecciona un estado" defaultValue={stateId ? stateId.toString() : ''} />
({ value: item.id.toString(), label: item.name, }))} onValueChange={(value: any) => { setMunicipalityId(Number(value)); setParishId(0); }} placeholder="Selecciona municipio" defaultValue={municipalityId ? municipalityId.toString() : ''} disabled={!stateId || stateId === 0} />
({ value: item.id.toString(), label: item.name, }))} onValueChange={(value: any) => setParishId(Number(value))} placeholder="Selecciona parroquia" defaultValue={parishId ? parishId.toString() : ''} disabled={!municipalityId || municipalityId === 0} />
{/* Statistics Cards */}
Total de OSP Registradas
{totalOsps}

Organizaciones Socioproductivas

Total de Productores
{totalProducers}

Productores asociados

Actividad Productiva Distribución por tipo de actividad {/* State Distribution */} {/* Distribución por Estado OSP registradas por estado */} {/* Year Distribution */} Año de Constitución Año de registro de la empresa Estatus Actual Estado operativo de las OSP {statusDistribution.map((entry, index) => ( ))} Tipo de Organización Clasificación de las OSP
); }