"use client"; import { useState, useEffect } from "react"; import axios from "axios"; import styles from "./pregunta2.module.scss"; import Cookies from "js-cookie"; import ToggleButton from "../Toggle/ToggleButton"; type OsEntry = { os: string; count: number; isTotal?: boolean; }; type PlatformKey = | "pc-desktop" | "apple-desktop" | "pc-laptop" | "apple-laptop" | "servers"; type PlatformData = Record; const PLATFORM_LABELS: Record = { "pc-desktop": "Computadoras de escritorio Plataforma PC", "apple-desktop": "Computadoras de escritorio Plataforma Apple", "pc-laptop": "Computadoras portátiles Plataforma PC", "apple-laptop": "Computadoras portátiles Plataforma Apple", servers: "Servidores de alto rendimiento", }; interface RawOsEntry { sistema_operativo: string; total: string; } // Función profesional para transformar tu JSON a OsEntry[] function transformPlatform(raw: RawOsEntry[]): OsEntry[] { const rows: OsEntry[] = raw.map((item) => ({ os: item.sistema_operativo, count: Number(item.total), // Convierte string a número })); rows.sort((a, b) => b.os.localeCompare(a.os, undefined, { numeric: true, sensitivity: "base" }) ); const total = rows.reduce((acc, r) => acc + r.count, 0); rows.push({ os: "Total", count: total, isTotal: true, }); return rows; } export default function Pregunta2() { const [activeTab, setActiveTab] = useState("pc-desktop"); const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const cargarDatos = async (baja: boolean) => { const token = Cookies.get("token"); const headers = { Authorization: `Bearer ${token}` }; const body = baja ? ["BAJA"] : ["EN DESUSO", "EN USO"]; axios .post( `${process.env.NEXT_PUBLIC_API_URL}/equipos/reporte/tipoEquipos_sistemasOperativos`, body, { headers } ) .then((res) => { const json = res.data; const formatted: PlatformData = { "pc-desktop": transformPlatform(json[0]), "apple-desktop": transformPlatform(json[1]), "pc-laptop": transformPlatform(json[2]), "apple-laptop": transformPlatform(json[3]), servers: transformPlatform(json[4]), }; setData(formatted); }) .catch((err) => console.error("Error cargando datos", err)) .finally(() => { setLoading(false); }); }; useEffect(() => { cargarDatos(false); }, []); if (loading) return (
Censo de equipos de cómputo - Sitema Operativo
Número de sistemas Operativos por cada categoría y perfil de usuario. { cargarDatos(estado); }} />
Cargando datos...
); if (!data) return (
Censo de equipos de cómputo - Sitema Operativo
Número de sistemas Operativos por cada categoría y perfil de usuario. { cargarDatos(estado); }} />
Error al cargar los datos.
); const currentData = data[activeTab]; return (
Censo de equipos de cómputo - Sitema Operativo
Número de sistemas Operativos por cada categoría y perfil de usuario. { cargarDatos(estado); }} />
{/* Tabs */}
{Object.entries(PLATFORM_LABELS).map(([key, label]) => ( ))}
{/* Tabla */}
{currentData.map((item, index) => (
{item.os}
{item.count}
))}
); }