"use client"; import { useEffect, useState } from "react"; import SamShell from "./components/SamShell"; import { apiGet, nombreCompleto, useMisCursos, type Asignacion, type Template } from "./lib/mis"; import { useSession } from "./lib/session"; export default function Home() { const { user } = useSession(); const [templates, setTemplates] = useState([]); const [asignaciones, setAsignaciones] = useState>({}); const { cursos, loading, error } = useMisCursos(); useEffect(() => { apiGet("/templates").then(setTemplates).catch(() => {}); }, []); 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 total = Object.values(asignaciones).reduce((s, as) => s + as.length, 0); return ( {loading &&
} {error &&
{error}
}
{cursos.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.

)} ); }