Wizard listo para enviar información a ai-generate-plan

This commit is contained in:
2026-01-15 15:54:36 -06:00
parent b08d58e262
commit 9aad9aed00
14 changed files with 1199 additions and 1142 deletions

View File

@@ -51,7 +51,6 @@ export default function NuevoPlanModalContainer() {
const {
wizard,
setWizard,
carrerasFiltradas,
canContinueDesdeModo,
canContinueDesdeBasicos,
canContinueDesdeDetalles,
@@ -125,7 +124,10 @@ export default function NuevoPlanModalContainer() {
{({ methods }) => {
const currentIndex = Wizard.utils.getIndex(methods.current.id) + 1
const totalSteps = Wizard.steps.length
const nextStep = Wizard.steps[currentIndex]
const nextStep = Wizard.steps[currentIndex] ?? {
title: '',
description: '',
}
return (
<>
@@ -154,7 +156,6 @@ export default function NuevoPlanModalContainer() {
<PasoBasicosForm
wizard={wizard}
onChange={setWizard}
carrerasFiltradas={carrerasFiltradas}
/>
</Wizard.Stepper.Panel>
)}

View File

@@ -1,6 +1,4 @@
import { useMemo, useState } from "react";
import { CARRERAS } from "../catalogs";
import { useState } from "react";
import type { NewPlanWizardState, PlanPreview } from "../types";
import type { NivelPlanEstudio, TipoCiclo } from "@/data/types/domain";
@@ -16,10 +14,7 @@ export function useNuevoPlanWizard() {
nivel: "",
tipoCiclo: "",
numCiclos: undefined,
plantillaPlanId: "",
plantillaPlanVersion: "",
plantillaMapaId: "",
plantillaMapaVersion: "",
estructuraPlanId: null,
},
// datosBasicos: {
// nombrePlan: "Medicina",
@@ -51,11 +46,6 @@ export function useNuevoPlanWizard() {
errorMessage: null,
});
const carrerasFiltradas = useMemo(() => {
const fac = wizard.datosBasicos.facultadId;
return fac ? CARRERAS.filter((c) => c.facultadId === fac) : CARRERAS;
}, [wizard.datosBasicos.facultadId]);
const canContinueDesdeModo = wizard.tipoOrigen === "MANUAL" ||
wizard.tipoOrigen === "IA" ||
(wizard.tipoOrigen === "CLONADO_INTERNO" ||
@@ -68,10 +58,7 @@ export function useNuevoPlanWizard() {
(wizard.datosBasicos.numCiclos !== undefined &&
wizard.datosBasicos.numCiclos > 0) &&
// Requerir ambas plantillas (plan y mapa) con versión
!!wizard.datosBasicos.plantillaPlanId &&
!!wizard.datosBasicos.plantillaPlanVersion &&
!!wizard.datosBasicos.plantillaMapaId &&
!!wizard.datosBasicos.plantillaMapaVersion;
!!wizard.datosBasicos.estructuraPlanId;
const canContinueDesdeDetalles = (() => {
if (wizard.tipoOrigen === "MANUAL") return true;
@@ -130,7 +117,6 @@ export function useNuevoPlanWizard() {
return {
wizard,
setWizard,
carrerasFiltradas,
canContinueDesdeModo,
canContinueDesdeBasicos,
canContinueDesdeDetalles,

View File

@@ -1,3 +1,4 @@
import type { UploadedFile } from "@/components/planes/wizard/PasoDetallesPanel/FileDropZone";
import type {
NivelPlanEstudio,
TipoCiclo,
@@ -24,10 +25,7 @@ export type NewPlanWizardState = {
tipoCiclo: TipoCiclo | "";
numCiclos: number | undefined;
// Selección de plantillas (obligatorias)
plantillaPlanId?: string;
plantillaPlanVersion?: string;
plantillaMapaId?: string;
plantillaMapaVersion?: string;
estructuraPlanId: string | null;
};
clonInterno?: { planOrigenId: string | null };
clonTradicional?: {
@@ -58,7 +56,7 @@ export type NewPlanWizardState = {
archivosReferencia: Array<string>;
repositoriosReferencia?: Array<string>;
archivosAdjuntos?: Array<
{ id: string; name: string; size: string; type: string }
UploadedFile
>;
};
resumen: { previewPlan?: PlanPreview };

View File

@@ -0,0 +1,5 @@
export const formatFileSize = (bytes: number): string => {
if (bytes < 1024) return bytes + " B";
if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + " KB";
return (bytes / (1024 * 1024)).toFixed(1) + " MB";
};