import { useNavigate } from '@tanstack/react-router' import * as Icons from 'lucide-react' import { useNuevoPlanWizard } from './hooks/useNuevoPlanWizard' import { PasoBasicosForm } from '@/components/planes/wizard/PasoBasicosForm' import { PasoDetallesPanel } from '@/components/planes/wizard/PasoDetallesPanel' import { PasoModoCardGroup } from '@/components/planes/wizard/PasoModoCardGroup' import { PasoResumenCard } from '@/components/planes/wizard/PasoResumenCard' import { WizardControls } from '@/components/planes/wizard/WizardControls' import { WizardHeader } from '@/components/planes/wizard/WizardHeader' import { defineStepper } from '@/components/stepper' import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from '@/components/ui/card' import { Dialog, DialogContent, DialogHeader, DialogTitle, } from '@/components/ui/dialog' // Mock de permisos/rol const auth_get_current_user_role = () => 'JEFE_CARRERA' as const const Wizard = defineStepper( { id: 'modo', title: 'Método', description: 'Selecciona cómo crearás el plan', }, { id: 'basicos', title: 'Datos básicos', description: 'Nombre, carrera, nivel y ciclos', }, { id: 'detalles', title: 'Detalles', description: 'IA, clonado o archivos' }, { id: 'resumen', title: 'Resumen', description: 'Confirma y crea el plan' }, ) export default function NuevoPlanModalContainer() { const navigate = useNavigate() const role = auth_get_current_user_role() const { wizard, setWizard, carrerasFiltradas, canContinueDesdeModo, canContinueDesdeBasicos, canContinueDesdeDetalles, generarPreviewIA, } = useNuevoPlanWizard() const handleClose = () => { navigate({ to: '/planes', resetScroll: false }) } const crearPlan = async () => { setWizard((w) => ({ ...w, isLoading: true, errorMessage: null })) await new Promise((r) => setTimeout(r, 900)) const nuevoId = (() => { if (wizard.modoCreacion === 'MANUAL') return 'plan_new_manual_001' if (wizard.modoCreacion === 'IA') return 'plan_new_ai_001' if (wizard.subModoClonado === 'INTERNO') return 'plan_new_clone_001' return 'plan_new_import_001' })() navigate({ to: `/planes/${nuevoId}` }) } return ( !open && handleClose()}> { e.preventDefault() }} > {role !== 'JEFE_CARRERA' ? ( <> Nuevo plan de estudios
Sin permisos No tienes permisos para crear planes de estudio.
) : ( {({ methods }) => { const currentIndex = Wizard.utils.getIndex(methods.current.id) + 1 const totalSteps = Wizard.steps.length const nextStep = Wizard.steps[currentIndex] return ( <>
{Wizard.utils.getIndex(methods.current.id) === 0 && ( )} {Wizard.utils.getIndex(methods.current.id) === 1 && ( )} {Wizard.utils.getIndex(methods.current.id) === 2 && ( )} {Wizard.utils.getIndex(methods.current.id) === 3 && ( )}
methods.prev()} onNext={() => methods.next()} onCreate={crearPlan} disablePrev={ Wizard.utils.getIndex(methods.current.id) === 0 || wizard.isLoading } disableNext={ wizard.isLoading || (Wizard.utils.getIndex(methods.current.id) === 0 && !canContinueDesdeModo) || (Wizard.utils.getIndex(methods.current.id) === 1 && !canContinueDesdeBasicos) || (Wizard.utils.getIndex(methods.current.id) === 2 && !canContinueDesdeDetalles) } disableCreate={wizard.isLoading} isLastStep={ Wizard.utils.getIndex(methods.current.id) >= Wizard.steps.length - 1 } />
) }}
)}
) }