"use client"; import Link from "next/link"; import { FormEvent, useEffect, useState } from "react"; import { api, Subject, Week } from "@/lib/api"; import { Shell } from "@/components/Shell"; import { Button, Card, Input, Label } from "@/components/ui"; export default function SubjectPage({ params }: { params: { subjectId: string } }) { const subjectId = Number(params.subjectId); const [subject, setSubject] = useState(null); const [weeks, setWeeks] = useState([]); const [number, setNumber] = useState(1); const [title, setTitle] = useState(""); const [editingWeek, setEditingWeek] = useState(null); const [editNumber, setEditNumber] = useState(1); const [editTitle, setEditTitle] = useState(""); const [error, setError] = useState(""); async function load() { try { const [subjectData, weekList] = await Promise.all([api.subject(subjectId), api.weeks(subjectId)]); setSubject(subjectData); setWeeks(weekList); setNumber((weekList.at(-1)?.number || 0) + 1); } catch (err) { setError(err instanceof Error ? err.message : "No se pudo cargar la materia"); } } useEffect(() => { load(); }, [subjectId]); async function createWeek(event: FormEvent) { event.preventDefault(); try { setError(""); await api.createWeek(subjectId, number, title); setTitle(""); await load(); } catch (err) { setError(err instanceof Error ? err.message : "No se pudo crear la semana"); } } function startEdit(week: Week) { setEditingWeek(week); setEditNumber(week.number); setEditTitle(week.title || ""); setError(""); } async function saveEdit(event: FormEvent) { event.preventDefault(); if (!editingWeek) return; try { setError(""); await api.updateWeek(subjectId, editingWeek.number, editNumber, editTitle); setEditingWeek(null); await load(); } catch (err) { setError(err instanceof Error ? err.message : "No se pudo editar la semana"); } } async function deleteWeek(week: Week) { const confirmed = window.confirm(`Eliminar la semana ${week.number} tambien borrara sus archivos subidos, Markdown procesado y exports. Esta accion no se puede deshacer.`); if (!confirmed) return; try { setError(""); await api.deleteWeek(subjectId, week.number); if (editingWeek?.id === week.id) setEditingWeek(null); await load(); } catch (err) { setError(err instanceof Error ? err.message : "No se pudo eliminar la semana"); } } return ( Volver a materias

{subject?.name || "Materia"}

Divide el conocimiento por semanas y sube fuentes a cada una.

{error && {error}}
{weeks.map((week) => (
Semana {week.number}
{week.title || "Sin titulo"}
Abrir semana
))} {weeks.length === 0 && Todavia no hay semanas.}
); }