"use client"; import { envConfig } from "@/app/lib/config"; import { useEffect, useState } from "react"; import axios from "axios"; import "./inscripciones.css" interface Periodo { id_periodo: number; semestre: string; } interface ApiResponse { carrera: string; genero: string | null; profesor: string; total: string; } interface TablaRow { carrera: string; genero: string | null; WINDOWS: number; MACINTOSH: number; LINUX: number; PROFESORES: number; TOTAL: number; } type TipoConteo = "WINDOWS" | "MACINTOSH" | "LINUX" | "PROFESORES"; export default function Inscripciones() { const [periodo, setPeriodo] = useState([]); const [selectedPeriodo, setSelectedPeriodo] = useState(null); const [tablaData, setTablaData] = useState([]); useEffect(() => { const getPeriodo = async () => { const response = await axios.get(`${envConfig.apiUrl}/periodo`); setPeriodo(response.data); }; getPeriodo(); }, []); const handleBuscar = async (e: React.FormEvent) => { e.preventDefault(); if (!selectedPeriodo) return; const response = await axios.get( `${envConfig.apiUrl}/alumno-inscrito/inscritos/${selectedPeriodo}` ); const data: ApiResponse[] = response.data; const agrupado: Record = {}; data.forEach((item) => { const generoNormalizado = item.genero === "F" || item.genero === "Femenino" ? "Femenino" : item.genero === "M" || item.genero === "Masculino" ? "Masculino" : "-"; const key = `${item.carrera}_${generoNormalizado}`; if (!agrupado[key]) { agrupado[key] = { carrera: item.carrera, genero: generoNormalizado, WINDOWS: 0, MACINTOSH: 0, LINUX: 0, PROFESORES: 0, TOTAL: 0, }; } const tipo = item.profesor as TipoConteo; const cantidad = Number(item.total); agrupado[key][tipo] += cantidad; agrupado[key].TOTAL += cantidad; }); setTablaData(Object.values(agrupado)); }; return (

INSCRITOS

{tablaData.map((row, index) => ( ))}
Carrera Genero WINDOWS MACINTOSH LINUX Profesores Total
{row.carrera} {row.genero ?? "-"} {row.WINDOWS} {row.MACINTOSH} {row.LINUX} {row.PROFESORES} {row.TOTAL}
); }