"use client"; import { useEffect, useState } from "react"; import SamShell from "../components/SamShell"; import { apiGet, useMisCursos, type Asignacion, type Rendicion, type Template } from "../lib/mis"; import { useSession } from "../lib/session"; export default function Resultados() { const { user } = useSession(); const { cursos } = useMisCursos(); const [templates, setTemplates] = useState([]); const [rows, setRows] = useState<(Rendicion & { prueba: string; curso: string })[]>([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(""); useEffect(() => { apiGet("/templates").then(setTemplates).catch(() => {}); }, []); useEffect(() => { if (!user || cursos.length === 0) return; (async () => { setLoading(true); try { const todas: (Rendicion & { prueba: string; curso: string })[] = []; for (const c of cursos) { const as: Asignacion[] = await apiGet(`/asignaciones?origen=${user.origen}&idCursos=${c.idCursos}`); for (const a of as) { const rs: Rendicion[] = await apiGet(`/asignaciones/${a.id}/rendiciones`); const tpl = templates.find((t) => t.id === a.templateId)?.nombre ?? "Prueba"; rs.filter((r) => r.idAlumno === user.idAlumno).forEach((r) => todas.push({ ...r, prueba: tpl, curso: c.nombreCurso }) ); } } setRows(todas.sort((x, y) => y.inicio.localeCompare(x.inicio))); } catch (e: any) { setError(e.message); } finally { setLoading(false); } })(); }, [user, cursos, templates]); return ( {error &&
{error}
} {loading &&
} {rows.map((r) => ( ))}
PruebaCursoPuntajeEstadoFecha
{r.prueba} {r.curso} {r.puntajeObtenido ?? "—"}/{r.puntajeMaximo ?? "—"} {!r.termino ? Sin cerrar : r.aprobado ? Aprobado : Reprobado} {new Date(r.inicio).toLocaleString()}
{rows.length === 0 && !loading &&

Aún no tienes rendiciones.

} ); }