"use client"; import { useEffect, useState } from "react"; import SamShell from "./components/SamShell"; import { apiGet, nombreCompleto, useMisCursos, type Asignacion, type Curso, type Template } from "./lib/mis"; import { useSession } from "./lib/session"; export default function Home() { const { user } = useSession(); const [templates, setTemplates] = useState([]); const [cursosTodos, setCursosTodos] = useState([]); const [asignaciones, setAsignaciones] = useState>({}); const { cursos, loading, error } = useMisCursos(); useEffect(() => { apiGet("/templates").then(setTemplates).catch(() => {}); }, []); useEffect(() => { if (!user) return; apiGet(`/cursos/${user.origen === "SAM" ? "sam" : "empresa"}`) .then(setCursosTodos) .catch(() => {}); }, [user]); useEffect(() => { if (!user || cursos.length === 0) return; cursos.forEach((c) => { apiGet(`/asignaciones?origen=${user.origen}&idCursos=${c.idCursos}`) .then((as: Asignacion[]) => setAsignaciones((m) => ({ ...m, [c.idCursos]: as }))) .catch(() => {}); }); }, [user, cursos]); const tplNombre = (id: string) => templates.find((t) => t.id === id)?.nombre ?? "Prueba"; const planDe = (id: number) => cursosTodos.find((c) => c.idCursos === id)?.planNombre ?? "Otros"; const total = Object.values(asignaciones).reduce((s, as) => s + as.length, 0); const grupos = new Map(); cursos.forEach((c) => { const p = planDe(c.idCursos); if (!grupos.has(p)) grupos.set(p, []); grupos.get(p)!.push(c); }); return ( {loading &&
} {error &&
{error}
} {[...grupos.entries()].map(([plan, cs]) => (
{plan} {cs.length}
{cs.map((c) => (
{c.nombreCurso}
{(asignaciones[c.idCursos] ?? []).length === 0 ? (

Sin pruebas asignadas por ahora.

) : (
    {(asignaciones[c.idCursos] ?? []).map((a) => (
  • {tplNombre(a.templateId)}
  • ))}
)} Rendir
))}
))} {cursos.length > 0 && (

Tienes {total} prueba(s) asignada(s) en {cursos.length} curso(s) con matrícula activa.

)} ); }