import { Link } from "@tanstack/react-router" import * as Icons from "lucide-react" import { useSuspenseQuery } from "@tanstack/react-query" import { useMemo } from "react" import { asignaturaExtraOptions } from "./planQueries" import { SmallStat } from "./SmallStat" export function AsignaturaPreviewCard({ asignatura }: { asignatura: { id: string; nombre: string; semestre: number | null; creditos: number | null } }) { const { data: extra } = useSuspenseQuery(asignaturaExtraOptions(asignatura.id)) const horasT = extra?.horas_teoricas ?? null const horasP = extra?.horas_practicas ?? null const horasTot = (horasT ?? 0) + (horasP ?? 0) const resumenContenidos = useMemo(() => { const c = extra?.contenidos if (!c) return { unidades: 0, temas: 0 } const unidades = Object.keys(c).length const temas = Object.values(c).reduce((acc, temasObj) => acc + Object.keys(temasObj || {}).length, 0) return { unidades, temas } }, [extra?.contenidos]) const tipo = (extra?.tipo ?? "").toLowerCase() const tipoChip = tipo.includes("oblig") ? "bg-emerald-50 text-emerald-700 border-emerald-200" : tipo.includes("opt") ? "bg-amber-50 text-amber-800 border-amber-200" : tipo.includes("taller") ? "bg-indigo-50 text-indigo-700 border-indigo-200" : tipo.includes("lab") ? "bg-sky-50 text-sky-700 border-sky-200" : "bg-neutral-100 text-neutral-700 border-neutral-200" return (
{asignatura.nombre}
{asignatura.semestre != null && ( S{asignatura.semestre} )} {asignatura.creditos != null && ( {asignatura.creditos} cr )} {extra?.tipo && ( {extra.tipo} )}
{horasT != null || horasP != null ? ( <>H T/P: {horasT ?? "—"}/{horasP ?? "—"} ) : ( Resumen listo )}
Ver detalle
) }