From bf209aa843bdb2c78a64aedcbe8567d1541c33a4 Mon Sep 17 00:00:00 2001 From: "Roberto.silva" Date: Thu, 22 Jan 2026 08:01:15 -0600 Subject: [PATCH] Se agrega id de ruta en las tabs y se corrigen redirecciones --- .../asignaturas/detalle/BibliographyItem.tsx | 60 ++++++++++--------- .../asignaturas/detalle/HistorialTab.tsx | 36 ++++++----- .../asignaturas/detalle/MateriaDetailPage.tsx | 27 +++++++-- .../planes/$planId/_detalle/materias.tsx | 1 + 4 files changed, 70 insertions(+), 54 deletions(-) diff --git a/src/components/asignaturas/detalle/BibliographyItem.tsx b/src/components/asignaturas/detalle/BibliographyItem.tsx index 170feb0..928b662 100644 --- a/src/components/asignaturas/detalle/BibliographyItem.tsx +++ b/src/components/asignaturas/detalle/BibliographyItem.tsx @@ -1,4 +1,3 @@ -import { useEffect, useState } from 'react' import { Plus, Search, @@ -8,25 +7,8 @@ import { Edit3, Save, } from 'lucide-react' -import { Card, CardContent } from '@/components/ui/card' -import { Button } from '@/components/ui/button' -import { Input } from '@/components/ui/input' -import { Textarea } from '@/components/ui/textarea' -import { Badge } from '@/components/ui/badge' -import { - Dialog, - DialogContent, - DialogHeader, - DialogTitle, - DialogTrigger, -} from '@/components/ui/dialog' -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from '@/components/ui/select' +import { useEffect, useState } from 'react' + import { AlertDialog, AlertDialogAction, @@ -37,10 +19,29 @@ import { AlertDialogHeader, AlertDialogTitle, } from '@/components/ui/alert-dialog' -import { cn } from '@/lib/utils' +import { Badge } from '@/components/ui/badge' +import { Button } from '@/components/ui/button' +import { Card, CardContent } from '@/components/ui/card' +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, + DialogTrigger, +} from '@/components/ui/dialog' +import { Input } from '@/components/ui/input' +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@/components/ui/select' +import { Textarea } from '@/components/ui/textarea' import { useSubjectBibliografia } from '@/data/hooks/useSubjects' -//import { toast } from 'sonner'; -//import { mockLibraryResources } from '@/data/mockMateriaData'; +import { cn } from '@/lib/utils' +// import { toast } from 'sonner'; +// import { mockLibraryResources } from '@/data/mockMateriaData'; export const mockLibraryResources = [ { @@ -84,19 +85,20 @@ export interface BibliografiaEntry { } interface BibliografiaTabProps { - bibliografia: BibliografiaEntry[] - onSave: (bibliografia: BibliografiaEntry[]) => void + bibliografia: Array + onSave: (bibliografia: Array) => void isSaving: boolean } export function BibliographyItem({ bibliografia, + asignaturaId, onSave, isSaving, }: BibliografiaTabProps) { const { data: bibliografia2, isLoading: loadinmateria } = - useSubjectBibliografia('9d4dda6a-488f-428a-8a07-38081592a641') - const [entries, setEntries] = useState(bibliografia) + useSubjectBibliografia(asignaturaId) + const [entries, setEntries] = useState>(bibliografia) const [isAddDialogOpen, setIsAddDialogOpen] = useState(false) const [isLibraryDialogOpen, setIsLibraryDialogOpen] = useState(false) const [deleteId, setDeleteId] = useState(null) @@ -128,7 +130,7 @@ export function BibliographyItem({ } setEntries([...entries, newEntry]) setIsAddDialogOpen(false) - //toast.success('Referencia manual añadida'); + // toast.success('Referencia manual añadida'); } const handleAddFromLibrary = ( @@ -145,7 +147,7 @@ export function BibliographyItem({ } setEntries([...entries, newEntry]) setIsLibraryDialogOpen(false) - //toast.success('Añadido desde biblioteca'); + // toast.success('Añadido desde biblioteca'); } const handleUpdateCita = (id: string, cita: string) => { diff --git a/src/components/asignaturas/detalle/HistorialTab.tsx b/src/components/asignaturas/detalle/HistorialTab.tsx index 862b6de..f71efaa 100644 --- a/src/components/asignaturas/detalle/HistorialTab.tsx +++ b/src/components/asignaturas/detalle/HistorialTab.tsx @@ -1,4 +1,5 @@ -import { useState, useMemo } from 'react' +import { format, parseISO } from 'date-fns' +import { es } from 'date-fns/locale' import { History, FileText, @@ -6,31 +7,30 @@ import { BookMarked, Sparkles, FileCheck, - User, Filter, Calendar, Loader2, Eye, } from 'lucide-react' -import { Card, CardContent } from '@/components/ui/card' -import { Button } from '@/components/ui/button' +import { useState, useMemo } from 'react' + import { Badge } from '@/components/ui/badge' -import { - DropdownMenu, - DropdownMenuContent, - DropdownMenuCheckboxItem, - DropdownMenuTrigger, -} from '@/components/ui/dropdown-menu' -import { cn } from '@/lib/utils' -import { format, parseISO } from 'date-fns' -import { es } from 'date-fns/locale' -import { useSubjectHistorial } from '@/data/hooks/useSubjects' +import { Button } from '@/components/ui/button' +import { Card, CardContent } from '@/components/ui/card' import { Dialog, DialogContent, DialogHeader, DialogTitle, } from '@/components/ui/dialog' +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuCheckboxItem, + DropdownMenuTrigger, +} from '@/components/ui/dropdown-menu' +import { useSubjectHistorial } from '@/data/hooks/useSubjects' +import { cn } from '@/lib/utils' const tipoConfig: Record = { @@ -53,11 +53,9 @@ const tipoConfig: Record = }, } -export function HistorialTab() { +export function HistorialTab({ asignaturaId }) { // 1. Obtenemos los datos directamente dentro del componente - const { data: rawData, isLoading } = useSubjectHistorial( - '9d4dda6a-488f-428a-8a07-38081592a641', - ) + const { data: rawData, isLoading } = useSubjectHistorial(asignaturaId) const [filtros, setFiltros] = useState>( new Set(['datos', 'contenido', 'bibliografia', 'ia', 'documento']), @@ -164,7 +162,7 @@ export function HistorialTab() { groups[dateKey].push(cambio) return groups }, - {} as Record, + {} as Record>, ) const sortedDates = Object.keys(groupedHistorial).sort((a, b) => diff --git a/src/components/asignaturas/detalle/MateriaDetailPage.tsx b/src/components/asignaturas/detalle/MateriaDetailPage.tsx index 0ef02ee..a7c4883 100644 --- a/src/components/asignaturas/detalle/MateriaDetailPage.tsx +++ b/src/components/asignaturas/detalle/MateriaDetailPage.tsx @@ -1,4 +1,9 @@ -import { Link, useRouterState } from '@tanstack/react-router' +import { + createFileRoute, + Link, + useParams, + useRouterState, +} from '@tanstack/react-router' import { ArrowLeft, GraduationCap, Pencil, Sparkles } from 'lucide-react' import { useCallback, useState, useEffect } from 'react' @@ -79,12 +84,21 @@ function EditableHeaderField({ ) } + +export const Route = createFileRoute( + '/planes/$planId/asignaturas/$asignaturaId', +)({ + component: MateriaDetailPage, +}) + export default function MateriaDetailPage() { const routerState = useRouterState() const state = routerState.location.state as any - const { data: asignaturasApi, isLoading: loadingAsig } = useSubject( - state?.realId, - ) + const { asignaturaId } = useParams({ + from: '/planes/$planId/asignaturas/$asignaturaId', + }) + const { data: asignaturasApi, isLoading: loadingAsig } = + useSubject(asignaturaId) // 1. Asegúrate de tener estos estados en tu componente principal const [messages, setMessages] = useState>([]) const [datosGenerales, setDatosGenerales] = useState({}) @@ -179,7 +193,7 @@ export default function MateriaDetailPage() {
Volver al plan @@ -280,6 +294,7 @@ export default function MateriaDetailPage() { @@ -313,7 +328,7 @@ export default function MateriaDetailPage() { - +
diff --git a/src/routes/planes/$planId/_detalle/materias.tsx b/src/routes/planes/$planId/_detalle/materias.tsx index 6c7d5f4..fe38a50 100644 --- a/src/routes/planes/$planId/_detalle/materias.tsx +++ b/src/routes/planes/$planId/_detalle/materias.tsx @@ -233,6 +233,7 @@ function MateriasPage() { }, state: { realId: materia.id, // 👈 ID largo oculto + asignaturaId: materia.id, } as any, }) }