diff --git a/src/routes/planes/$planId/_detalle/MateriaCard.tsx b/src/routes/planes/$planId/_detalle/MateriaCard.tsx index 0f6bf41..403c7c9 100644 --- a/src/routes/planes/$planId/_detalle/MateriaCard.tsx +++ b/src/routes/planes/$planId/_detalle/MateriaCard.tsx @@ -1,5 +1,5 @@ import * as Dialog from '@radix-ui/react-dialog'; -import { Pencil, X, Info } from 'lucide-react'; +import { Pencil, X } from 'lucide-react'; export type Materia = { id: string; clave: string; diff --git a/src/routes/planes/$planId/_detalle/datos.tsx b/src/routes/planes/$planId/_detalle/datos.tsx index 90e58e9..8680682 100644 --- a/src/routes/planes/$planId/_detalle/datos.tsx +++ b/src/routes/planes/$planId/_detalle/datos.tsx @@ -1,41 +1,148 @@ import { createFileRoute } from '@tanstack/react-router' +import { useState } from 'react' +import type { DatosGeneralesField } from '@/types/plan' +import { Button } from '@/components/ui/button' +import { Textarea } from '@/components/ui/textarea' +import { + Pencil, + Check, + X, + Sparkles, + AlertCircle +} from 'lucide-react' +//import { toast } from 'sonner' // Asegúrate de tener sonner instalado o quita la línea export const Route = createFileRoute('/planes/$planId/_detalle/datos')({ - component: DatosGenerales, + component: DatosGeneralesPage, }) -function DatosGenerales() { +function DatosGeneralesPage() { + // 1. Definimos los DATOS iniciales (Lo que antes venía por props) + const [campos, setCampos] = useState([ + { id: '1', label: 'Objetivo General', value: 'Formar profesionales...', requerido: true, tipo: 'texto' }, + { id: '2', label: 'Perfil de Ingreso', value: 'Interés por la tecnología...', requerido: true, tipo: 'lista' }, + { id: '3', label: 'Perfil de Egreso', value: '', requerido: true, tipo: 'texto' }, + ]) + + // 2. Estados de edición + const [editingId, setEditingId] = useState(null) + const [editValue, setEditValue] = useState('') + + // 3. Manejadores de acciones (Ahora como funciones locales) + const handleEdit = (campo: DatosGeneralesField) => { + setEditingId(campo.id) + setEditValue(campo.value) + } + + const handleCancel = () => { + setEditingId(null) + setEditValue('') + } + + const handleSave = (id: string) => { + // Actualizamos el estado local de la lista + setCampos(prev => prev.map(c => + c.id === id ? { ...c, value: editValue } : c + )) + setEditingId(null) + setEditValue('') + //toast.success('Cambios guardados localmente') + } + + const handleIARequest = (id: string) => { + //toast.info('La IA está analizando el campo ' + id) + // Aquí conectarías con tu endpoint de IA + } + return ( -
- - Formar profesionales altamente capacitados... - +
+
+

+ Datos Generales del Plan +

+

+ Información estructural y descriptiva del plan de estudios +

+
- - Egresados de educación media superior... - +
+ {campos.map((campo) => { + const isEditing = editingId === campo.id - - Profesional capaz de diseñar... - + return ( +
+ {/* Header de la Card */} +
+
+

{campo.label}

+ {campo.requerido && *} +
- - Pensamiento crítico, comunicación efectiva... - + {!isEditing && ( +
+ + +
+ )} +
+ + {/* Contenido de la Card */} +
+ {isEditing ? ( +
+