100 Commits
Author SHA1 Message Date
Guillermo.Arrieta 6c744b8c89 Merge pull request 'Merge branch 'main' into issue/225-mejoras-en-el-diseo' (#232) from issue/225-mejoras-en-el-diseo into main
Deploy to Azure Static Web Apps / build-and-deploy (push) Successful in 1m26s
Reviewed-on: #232
2026-04-14 19:04:15 +00:00
Guillermo.Arrieta 18ba592378 Merge branch 'main' into issue/225-mejoras-en-el-diseo 2026-04-14 13:03:16 -06:00
Guillermo.Arrieta 1ede5bca32 Merge branch 'main' into issue/225-mejoras-en-el-diseo 2026-04-14 12:52:14 -06:00
Guillermo.Arrieta b37d36fe15 Resumen de cambios del commit y de los dos wips anteriores:
• Cambio del estilo visual del layout del detalle de asignatura
	• El nivel de un plan de estudios se muestra como editable con un select
	• se quitó 'disabled:pointer-events-none' del componente button para permitir que el cursor cambie a cursor-not-allowed sobre botones disabled
	• todos los botones y elementos con role de button no deshabilitados tienen cursor-pointer
	• todos los botones y elementos con role de button deshabilitados tienen cursor-not-allowed
cada cambio tanto en el historial de un plan como de una asignatura se puede abrir picandole en cualquier parte del cambio
2026-04-13 13:54:28 -06:00
Guillermo.Arrieta d3267e5890 wip 2026-04-13 11:04:28 -06:00
Guillermo.Arrieta b77906e2e9 wip 2026-03-27 19:32:37 -06:00
Guillermo.Arrieta 36b9c559fa Nuevo fondo y logo de La Salle en login 2026-03-27 13:51:12 -06:00
Guillermo.Arrieta 434b50cfc3 Se quitó teal y otros estilos hardcoded de la página 2026-03-27 13:27:53 -06:00
Guillermo.Arrieta 51f967a955 Merge pull request 'Primera parte de arreglos en el diseño' (#229) from issue/225-mejoras-en-el-diseo into main
Deploy to Azure Static Web Apps / build-and-deploy (push) Successful in 2m2s
Reviewed-on: #229
2026-03-27 17:29:18 +00:00
Guillermo.Arrieta f5a4b0b9af Merge branch 'main' into issue/225-mejoras-en-el-diseo 2026-03-27 11:13:20 -06:00
Guillermo.Arrieta 8ae3469e10 mejoras de diseño de mapa curricular parte 3
- Se cambió el layout para ser más claro de usar
- El botón de agregar linea abre un dialog donde eliges como llamar tu nueva línea curricular
- Al agregar lineas curriculares se les asigna un color al azar que persiste en la base de datos
- al quitarle zoom a la pagina los margenes permanecen
2026-03-26 22:24:17 -06:00
Guillermo.Arrieta ddb83782a6 mejoras de diseño de mapa curricular parte 2
- color picker añadido por linea
- bote de basura para borrar linea alineado abajo a la derecha
- se quitó degradado y linea de color superior de las tarjetas de asignaturas
2026-03-26 22:18:16 -06:00
Guillermo.Arrieta 085e6fa0e9 mejoras de diseño de mapa curricular parte 1
- ancho de ciclos fijo
- alineacion correcta de CR, HD y HI
- tamaño de nombre de asignatura pasó de md a sm
2026-03-26 19:06:54 -06:00
Guillermo.Arrieta 54200986ab Espaciado ahora es consistente 2026-03-26 14:11:09 -06:00
Guillermo.Arrieta bfafb8999e Cambios a la card de plan de estudio 2026-03-26 12:54:12 -06:00
Guillermo.Arrieta 883e6e7fa4 Merge pull request 'Clonacion de asignaturas a partir del sistema' (#227) from issue/212-nueva-asignatura-clonada-desde-el-sistema into main
Deploy to Azure Static Web Apps / build-and-deploy (push) Successful in 1m21s
Reviewed-on: #227
2026-03-25 22:46:57 +00:00
Guillermo.Arrieta dd11c2707e Búsqueda correcta y optimizada con un único rpc a search_asignaturas 2026-03-25 16:09:04 -06:00
Guillermo.Arrieta 60c2e8402d generación automática de vectores de búsqueda de asignaturas 2026-03-25 15:33:26 -06:00
Guillermo.Arrieta 3bb3a11779 wip
ya funciona la busqueda de asignaturas, pero ocurre un bug en la insercion de la asignatura clonada
2026-03-24 20:43:29 -06:00
Guillermo.Arrieta ed318fa67b Funcional pero falta arreglar diseño y responsividad 2026-03-23 13:11:24 -06:00
Guillermo.Arrieta 4c730fa0ab Merge pull request 'Se renderizan las previsualizaciones del plan y de la asignatura y también se pueden descargar como word o pdf' (#211) from issue/200-renderizado-de-plantillas-con-edge-function-de-car into main
Deploy to Azure Static Web Apps / build-and-deploy (push) Successful in 1m21s
Reviewed-on: #211
2026-03-20 23:47:37 +00:00
Guillermo.Arrieta 2abe296b9e close #200: Se guardan los docx y pdf con el nombre del plan/asignatura 2026-03-20 17:44:36 -06:00
Guillermo.Arrieta 1bce226d15 Se descargan correctamente los docx del plan y de la asignatura 2026-03-20 17:31:59 -06:00
Guillermo.Arrieta b986ec343e Se visualiza y descarga el pdf de la asignatura 2026-03-20 17:31:07 -06:00
Guillermo.Arrieta d9a5cec3c5 En el body se manda el parámetro para convertir el documento a pdf 2026-03-20 13:22:23 -06:00
Guillermo.Arrieta 96848e1793 Se utiliza la edge function de carbone para obtener el pdf del anexo del plan de estudios a partir del id del plan 2026-03-20 12:24:17 -06:00
Guillermo.Arrieta 32f0c4c4d4 fix #189: Se arregló un bug en el que no se podía poner espacios al editar la editorial de una referencia 2026-03-18 14:48:55 -06:00
Guillermo.Arrieta 6a520ef6b1 close #186: se agregó botón de Nueva Unidad al inicio del contenido temático 2026-03-17 15:45:36 -06:00
Guillermo.Arrieta 25d451839e hotfix: se mejoró UX modificando el tipo de cursor que se muestra al hacer hover sobre elementos interactuables y se restringió el input de horas estimadas a un rango de 0 a 200 pero permitiendo medias horas 2026-03-17 13:33:20 -06:00
Guillermo.Arrieta fe8f1d4753 Merge pull request 'contenido es ordenable, botón de nueva unidad después de cada unidad, mejora de UX con unidades expandidas' (#185) from issue/182-funcionalidad-de-reacomodo-e-insercin-aleatoria-de into main
Reviewed-on: #185
2026-03-17 18:47:56 +00:00
Guillermo.Arrieta 518b1124d8 close #182: se implementó la lista de unidades como sortable con dnd-kit y se solucionó el parpadeo al reordenar.
Se convirtió la lista de unidades en un sortable controlado usando @dnd-kit/react; al arrastrar desde el GripVertical se reordenan las unidades en la UI y persiste el orden en la base de datos.
Se colocó el botón "Nueva unidad" como un overlay que aparece debajo de cada unidad al hacer hover (posición bottom) y su clic inserta una unidad entre las existentes o al final si se pulsa después de la última, sin desplazar el layout.
Se hizo que, al cargar el componente por primera vez, la primera unidad quede desplegada automáticamente; una vez que el usuario realiza cualquier modificación y se guarda, se empieza a respetar el conjunto de unidades que el usuario tenga expandidas (la bandera de inicialización se activa durante la persistencia).
Se arregló un bug en el que al reordenar la lista de unidades sucedía una recarga de la lista.
Por qué ocurría el parpadeo y cómo fue arreglado:
- Causa: tras el reorder optimista la UI quedaba actualizada, pero cuando la lista fresca llegaba del servidor un useEffect reasignaba IDs por posición (índice), provocando que React creyera que los elementos eran nuevos, se destruyeran y se volvieran a montar — de ahí el "parpadeo" y la pérdida del estado de los acordiones.
- Solución (Escudo Optimista): se añadieron dos defensas.
  1) Escudo de aborto temprano: si el payload actual (UI optimista) y el payload entrante del servidor son idénticos (JSON), se aborta el procesamiento del useEffect para evitar re-render innecesario.
  2) Reciclaje por contenido: cuando los datos difieren, las IDs locales se reciclan buscando coincidencias por contenido (título) en lugar de por posición, de modo que cada unidad conserva su ID real aunque cambie de lugar; así React mueve las tarjetas en vez de destruirlas.

Con esto, el reorder es estable, el overlay de inserción funciona sin alterar el flow visual y el estado de expansiones se preserva tras ediciones del usuario.
2026-03-17 12:36:14 -06:00
Guillermo.Arrieta 8bdaf935ca fix #181: al darle a siguiente desde estructura, se fuerza la regeneración de citas 2026-03-13 12:38:02 -06:00
Guillermo.Arrieta 674c8a6bee Merge pull request 'Propuesta de vista para elegir entre sugerencias de bibliografia encontradas en línea y coincidencias encontradas en la biblioteca' (#177) from issue/169-crear-vista-de-validacin-en-biblioteca-la-salle into main
Reviewed-on: #177
2026-03-12 22:18:51 +00:00
Guillermo.Arrieta 3acea813b6 close #169: Se actualizó el modal de nueva bibliografía y se añadió el paso "Biblioteca"
- Se unificó el stepper en cinco pasos y se configuró para omitir el paso "Biblioteca" cuando el método sea MANUAL.
- Se añadió el paso "Biblioteca" con un accordion múltiple para comparar cada sugerencia con alternativas de la biblioteca; se eliminaron los estados de "Buscando" y su badge.
- Se incorporaron tres conjuntos hardcodeados de coincidencias (0, 2 y 5) que se asignan al azar si la sugerencia no trae datos de biblioteca; si no hay coincidencias la sugerencia se marca automáticamente como mantenida.
- Se implementó BookSelectionAccordion para elegir conservar la sugerencia o sustituirla por una coincidencia; se preservó el estilo visual de las opciones.
- Se añadieron validaciones y comportamientos de navegación: bloqueo de avance si quedan accordions por revisar, apertura y scroll al primer accordion sin resolver, y salto del paso "Biblioteca" en modo MANUAL.
2026-03-12 16:17:58 -06:00
Guillermo.Arrieta 88c6dc6b4d wip 2026-03-12 13:47:56 -06:00
Guillermo.Arrieta 03caa791ad hotfix: correccion de columnas de bibliografia 2026-03-12 12:08:22 -06:00
Guillermo.Arrieta 8ecb0f205a Merge pull request 'Se añadieron validaciones y mejoras en el modal de nueva bibliografía, incluida la validacion de al menos tres caracteres para el query' (#171) from issue/170-validacin-de-mnimo-3-caracteres-en-la-bsqueda-de-b into main
Reviewed-on: #171
2026-03-11 22:04:26 +00:00
Guillermo.Arrieta ea842ee46c close #170: se añadieron validaciones y mejoras en el modal de nueva bibliografía
-Se implementaron restricciones en SugerenciasStep: el campo de búsqueda se limitó a 200 caracteres y la generación quedó bloqueada si hay 20 o más referencias seleccionadas; se añadió tooltip en el botón de generar cuando la query tiene menos de 3 caracteres.
-Se reforzaron validaciones en FormatoYCitasStep y DatosBasicosManualStep: el título se trim-eó y se forzó a no quedar vacío (max 500 caracteres); si un título queda vacío se hace scroll al input/card, se muestra mensaje de error junto al label y se resalta el input; autores se limitó a 2000 caracteres; editorial a 300 caracteres; ISBN a 20 caracteres; el año se convirtió en input numérico permitiendo vacío o un año de 4 dígitos entre 1450 y el año actual +1.
-Se añadieron checkboxes "Año aproximado" y "En prensa" (mutuamente excluyentes): "En prensa" deshabilita el input de año y se marca el estado para citeproc; "Año aproximado" se envía como circa en issued.
-Al generar CSL se incluyeron las propiedades issued.circa y status ('in press') según los flags del ref.
-En ResumenStep se añadieron advertencias por referencia cuando falte autor(es), año (si no está "en prensa"), editorial o ISBN.
-Se corrigieron detalles de UX en edición de autores para preservar saltos de línea y se añadieron handlers para evitar errores de validación al mover entre pasos.
2026-03-11 16:03:05 -06:00
Guillermo.Arrieta 11369ce792 Límite de al menos 3 caracteres y tooltip en boton de generar sugerencias 2026-03-11 13:47:54 -06:00
Guillermo.Arrieta 78471c19d9 Merge pull request 'Observaciones corregidas' (#168) from issue/164-obervaciones-en-la-bibliografa into main
Reviewed-on: #168
2026-03-10 23:04:07 +00:00
Guillermo.Arrieta 06bae3ba3e Se añadieron enlaces a las páginas de los libros 2026-03-10 15:18:57 -06:00
Guillermo.Arrieta 614ef3ffaf El textarea de los autores ya te permite añadir más autores 2026-03-10 14:37:07 -06:00
Guillermo.Arrieta 2c0c9e0ba4 Se colocaron subtítulos y se editan los campos de la referencia individualmente 2026-03-10 14:34:56 -06:00
Guillermo.Arrieta a07304c555 Merge pull request 'Se permite obtener resultados de un solo idioma, se obtienen también de Open Library, y se ordenan de manera descendente por año de publicación' (#162) from issue/150-propuesta-de-biliografas into main
Reviewed-on: #162
2026-03-09 23:06:28 +00:00
Guillermo.Arrieta ab2510ba1c Integrada la búsqueda de bibliografía ahora también con Open Library y permitiendo obtener resultados de un idioma
- Se actualizó el contrato de búsqueda para enviar términos y parámetros por endpoint (Google y Open Library), y se consumió una respuesta unificada con origen por resultado.
- Se reemplazó el control de cantidad por un selector de idioma, y se mapearon los códigos a ISO 639-1 (Google) e ISO 639-2 (Open Library).
- Se forzó la obtención de resultados más recientes (orderBy="newest" y sort="new") y se ordenaron los resultados en frontend por año de publicación descendente, sin importar el endpoint.
- Se etiquetó cada sugerencia con un badge de origen (Google u Open Library).
2026-03-09 17:03:47 -06:00
Guillermo.Arrieta 2c594fb9f7 Hotfix: generación de citas en orden 2026-03-07 06:33:39 +00:00
Guillermo.Arrieta 98be1a0405 close #150: Se implementó el modal de “Agregar Bibliografía” con búsqueda en línea, generación de citas y tipado fuerte
- Se creó el modal de “Agregar Bibliografía” como ruta-modal y se enlazó desde el botón correspondiente con estilo consistente.
- Se implementó la búsqueda de sugerencias en línea mediante Edge Function y se conservó únicamente lo seleccionado al regenerar sugerencias.
- Se replicó el tooltip de “seleccionadas” con control total: se mostró solo en la primera generación y se permitió cerrarlo únicamente con el tache.
- Se integró la generación de citas con citeproc-js y se cargaron los recursos CSL/locale desde archivos locales en public/, usando BASE_URL.
- Se decodificaron entidades HTML en las citas generadas (p. ej., & → &).
- Se habilitó la regeneración forzada de citas por formato y se conservaron las citas (incluidas ediciones) al alternar formatos.
- Se mejoró la UI: se usó textarea autoajustable para citas y se estiró el select de tipo a ancho completo en sm+; se validó cantidad 1–40 o vacío (con deshabilitado del botón).
- Se tipó fuertemente la inserción a bibliografia_asignatura y se tiparon source/tipo en las referencias conforme a los tipos de Supabase.
2026-03-06 19:58:32 -06:00
Guillermo.Arrieta 2165d4a976 Generación de sugerencias y persistencia en BDD funcional. Falta afinar detalles 2026-03-06 17:58:40 -06:00
Guillermo.Arrieta 37fab3ead6 refactor: Update CriterioEvaluacionRow structure and related logic for consistency 2026-03-04 15:49:43 -06:00
Guillermo.Arrieta fa200acbfd fix #148: Refactorización para limpieza y generalidad 2026-03-04 14:53:23 -06:00
Guillermo.Arrieta 020caf4e68 Sistema de Evaluación AHora está ligado a Criterios de evaluación
- En los datos generales se renderizan como texto plano los criterios de evaluación.
- Si le picas a editar los Criterios de evaluación te dirige a Sistema de evaluación y lo pone en modo de edición.
- La infocard de SIstema de evaluación se edita adecuadamente y persiste en la BDD
2026-03-04 14:15:22 -06:00
Guillermo.Arrieta 314a96f2c5 Merge pull request 'Se generan planes de estudio y asignaturas con IA en segundo plano y se actualiza con realtime de supabase' (#146) from issue/142-creacin-de-planes-de-estudio-y-de-asignaturas-con- into main
Reviewed-on: #146
2026-02-27 18:32:48 +00:00
Guillermo.Arrieta 7693f86951 tipos de supabase actualizados 2026-02-27 12:31:11 -06:00
Guillermo.Arrieta 8ad6c8096e Merge branch 'main' into issue/142-creacin-de-planes-de-estudio-y-de-asignaturas-con- 2026-02-27 12:26:16 -06:00
Guillermo.Arrieta 28742615d8 Implementa suscripción en tiempo real para el estado de los planes de estudio en WizardControls 2026-02-27 11:29:48 -06:00
Guillermo.Arrieta f6b25ad86a Se cambió el polling de tanstack query por realtime de supabase y postgres_changes 2026-02-26 16:37:21 -06:00
Guillermo.Arrieta d7d4eff523 Generación de asignaturas funcional 2026-02-26 16:20:21 -06:00
Guillermo.Arrieta 4d1f102acb Creación de planes de estudio con polling debido a mandar crear los datos en segundo plano 2026-02-25 17:37:06 -06:00
Guillermo.Arrieta f28804bb5b closes #133: Mejoras de usabilidad en ContenidoTemático — edición inmediata y foco
- Mueve el botón "+ Nueva unidad" al final de la lista y lo centra.
- Al crear una unidad: hace scrollIntoView, la unidad queda expandida, el título entra en modo edición y recibe focus.
- Al crear un subtema: nombre y horas quedan editables y el input del nombre recibe focus.
- Click en título de unidad o en un subtema inicia la edición y pone focus en el campo correspondiente.
- Elimina el botón "Listo": los cambios se guardan al pulsar Enter o perder el foco (onBlur).
- Presionar Esc cancela la edición y restaura el valor anterior.
- Evita el bug donde pulsar Enter tras crear una unidad añadía unidades extra (se desenfoca el botón y se dirige el foco al input correspondiente).
- Persistencia inmediata: las modificaciones se guardan vía useUpdateSubjectContenido en los puntos de commit.
- Conserva el estado de unidades expandidas tras las actualizaciones para evitar colapsos inesperados.
2026-02-24 14:28:52 -06:00
Guillermo.Arrieta f1d09a37ed Merge pull request 'issue/129-renderizar-datos-generales-ligados-a-columnas-de-t' (#130) from issue/129-renderizar-datos-generales-ligados-a-columnas-de-t into main
Reviewed-on: #130
2026-02-24 19:46:31 +00:00
Guillermo.Arrieta 3c63fdef69 Feat: Al picarle al botón de listo, ya no se ocultan los temas de la unidad 2026-02-24 13:45:39 -06:00
Guillermo.Arrieta 3dc01c3fba finalización del merge de main a la rama issue/129... 2026-02-24 13:10:59 -06:00
Guillermo.Arrieta 1fddb75bf8 Merge branch 'main' into issue/129-renderizar-datos-generales-ligados-a-columnas-de-t 2026-02-24 12:30:42 -06:00
Guillermo.Arrieta f7ab1d61f0 Cambio al logo 2026-02-23 17:18:20 -06:00
Guillermo.Arrieta 6ed5d3541f Al darle clic al botón de editar de Contenido Temático, te lleva a esa tab 2026-02-23 14:06:06 -06:00
Guillermo.Arrieta 3188a61431 Se renderiza el contenido temático en datos generales a partir de su columna en la BDD 2026-02-23 13:58:02 -06:00
Guillermo.Arrieta 02c415a91d Fix #114: Refactor ContenidoTemático: persistencia inmediata y normalización de datos
- Elimina botón "Guardar": persistencia automática al pulsar "Listo", al confirmar eliminación y al terminar de editar nombre de unidad.
- Añade mapper (mapContenidoTematicoFromDb) y serializador (serializeUnidadesToApi) para normalizar contenido_tematico <-> Array<ContenidoApi>.
- Conecta persistencia a useUpdateSubjectContenido: hace update directo de asignaturas.contenido_tematico en la BDD.
- Manejo de caché: setQueryData con merge y invalidación de keys centralizadas (qk.planAsignaturas, qk.planHistorial, qk.asignaturaHistorial) para evitar caché desactualizada o pérdida de relaciones.
- UX/estabilidad: identificadores consistentes, expansión inicial, y persistencia inmediata en puntos clave (añadir, editar, eliminar).
2026-02-17 14:17:09 -06:00
Guillermo.Arrieta 7d45eb4dfa fix #114: refactorización de AsignaturaDetailPage y hooks relacionados: persistencia, caché y tipado
- Persistencia de cambios de "Datos generales" usando updateAsignatura.mutate.
- Corregido el manejo de caché: uso de qk centralizada y merge en setQueryData para no perder relaciones.
- Corregidos los tipos devueltos por subjects_get.
- Evitado estado inválido tras guardar (merge local + actualización de cache).

Verificar: editar → guardar → volver al plan → reingresar muestra datos actualizados sin parpadeos.
2026-02-17 13:20:49 -06:00
Guillermo.Arrieta 54b22b7adf se arregló el estilo visual y comportamiento del grid del mapa curricular
fix #108: ahora se utiliza un único grid para todo el mapa curricular. de esta manera el espaciado se mantiene consistente
2026-02-13 14:13:22 -06:00
Guillermo.Arrieta 13d9f1fe4a Merge pull request 'Se agregan indicadores de que está generandose el plan o la asignatura' (#115) from issue/29-botn-de-generando-plan-de-estudios into main
Reviewed-on: #115
2026-02-13 18:46:20 +00:00
Guillermo.Arrieta 2624b0694d spinners, creación manual de asignatura, actualización de asignaturas generadas por sugerencias
fix #29:
-  Se agregaron spinners en la creación con IA de un plan o una asignatura
- Se añadió la creación manual de asignaturas
- Al generar asignaturas a partir de sugerencias, el badge de estado de la asignatura dice 'Generando' y muestra una animación tipo respiro para indicar que está siendo generada. Adicionalmente, se actualiza automáticamente la UI una vez que acabó de ser generada
2026-02-13 12:44:05 -06:00
Guillermo.Arrieta 2157ffe3bc Merge pull request 'Generación de múltiples asignaturas con sugerencias' (#105) from issue/89-nueva-opcin-en-wizard-crear-asignaturas-con-sugere into main
Reviewed-on: #105
2026-02-12 23:31:45 +00:00
Guillermo.Arrieta c280faef22 feat: add 'vaul' dependency and update database types for conversation management 2026-02-12 17:26:47 -06:00
Guillermo.Arrieta d6c567195a Generación existosa de múltiples asignaturas con IA
TODO: actualización automática de el estado de las asignaturas generadas
2026-02-12 16:17:48 -06:00
Guillermo.Arrieta 9c588cfd8f PasoResumen muestra resumen antes de crear múltiples asignaturas 2026-02-12 16:15:11 -06:00
Guillermo.Arrieta 46d8d6142e feat: integrate Radix UI Accordion component and enhance subject wizard
- Added Radix UI Accordion component for better UI organization in PasoDetallesPanel.
- Implemented structure selection and subject suggestions management in the wizard.
- Updated subject API to initialize new subjects with null values for structure and cycle.
- Modified state management in useNuevaAsignaturaWizard to include estructuraId.
- Adjusted types for suggested subjects to include line and cycle information.
2026-02-12 16:15:11 -06:00
Guillermo.Arrieta 07d08e1b57 Add AI progress loader and enhance suggestion generation logic
- Introduced AIProgressLoader component to display loading progress and messages during suggestion generation.
- Updated PasoSugerenciasForm to manage loading state and display tooltip for preserved suggestions.
- Adjusted suggestion limits and removed unused ciclo input from state.
2026-02-12 16:15:11 -06:00
Guillermo.Arrieta ded54c18dd Se mandan generar sugerencias de asignaturas junto con el id del plan, el enfoque que se le quiere dar, la cantidad de sugerencias, y las sugerencias conservadas 2026-02-12 16:15:10 -06:00
Guillermo.Arrieta 89f264bf5d Primera version funcional de sugerencias 2026-02-12 16:15:10 -06:00
Guillermo.Arrieta 675c76db74 wip 2026-02-12 16:15:10 -06:00
Guillermo.Arrieta d74807c84e wip 2026-02-12 16:15:10 -06:00
Guillermo.Arrieta 846e3abf74 Propuesta de placeholders para descripción del enfoque académico e instrucciones adicionales para la IA. fix #23 2026-02-09 19:18:04 +00:00
Guillermo.Arrieta 958b558111 Se limitaron el número de caracteres y de digitos en los inputs de los wizards 2026-02-06 12:52:54 -06:00
Guillermo.Arrieta 1f78284fb6 Orden de listado de planes issue #71
Fix #71: ahora los planes se listan por orden de creación descendente (los más recientes primero)
2026-02-06 11:20:13 -06:00
Guillermo.Arrieta b1a233fa8c Feat: generación IA de asignaturas, navegación con confetti y ajustes de API
closes #63:
- Añadido AIGenerateSubjectInput y nueva implementación ai_generate_subject que envía FormData (soporta archivosAdjuntos) al Edge Function.
- Creado hook useGenerateSubjectAI (mutation) y usado en WizardControls de asignaturas para generar la asignatura vía IA.
- WizardControls (asignaturas) construye el payload IA, invoca la mutación y navega al detalle de la asignatura creada pasando state.showConfetti para lanzar confetti.
- Ajustes en subjects.api.ts (nombres de endpoint, tipos y envío de datos) y sincronización de tipos en WizardControls (plan y campos básicos).
- Ruta de detalle de asignatura ($asignaturaId) ahora lee location.state.showConfetti y dispara lateralConfetti al entrar.
- Eliminado el prop onCreate del modal de nueva asignatura (la creación IA se gestiona internamente).
2026-02-05 13:41:10 -06:00
Guillermo.Arrieta f00fabeac5 Fix #63: mostrar mensaje real de error de Edge Function en UI
- Mejorar invokeEdge para parsear el body JSON de errores HTTP de las Edge Functions y extraer un message humano (soporta { error: { message } }, { error: "..." } y { message: "..." }).
- EdgeFunctionError ahora incluye status y details; se manejan también FunctionsRelayError y FunctionsFetchError con mensajes más descriptivos.
- Ajustes en el front: WizardControls muestra el mensaje real del error (no el genérico "Edge Function returned a non-2xx status code"), y se corrige navegación/logging tras crear plan IA (uso de `plan` en vez de `data` y `navigate` a `/planes/{plan.id}`).
- Actualización de types/API: renombrados campos en AIGeneratePlanInput para alinear nombres (descripcionEnfoqueAcademico, instruccionesAdicionalesIA).
2026-02-05 13:41:09 -06:00
Guillermo.Arrieta c82fac52f7 Refactor: unifica wizards con WizardLayout/WizardResponsiveHeader y convierte asignaturas en layout con Outlet
- Se introdujo un layout genérico de wizard (WizardLayout) con headerSlot/footerSlot y se migraron los modales de Nuevo Plan y Nueva Asignatura a esta estructura usando defineStepper.
- Se creó y reutilizó WizardResponsiveHeader para un encabezado responsivo consistente (progreso en móvil y navegación en escritorio) en ambos wizards.
- Se homologó WizardControls del wizard de asignaturas para alinearlo al patrón del wizard de planes (props onPrev/onNext, flags de disable, manejo de error/loading y creación).
- Se mejoró la captura de datos en el wizard de asignatura: créditos como flotante con 2 decimales, placeholders/estilos en inputs/selects y uso de catálogo real de estructuras vía useSubjectEstructuras con qk.estructurasAsignatura.
- Se reorganizó la sección de asignaturas del detalle del plan: el contenido del antiguo index se movió a asignaturas.tsx como layout y se agregó <Outlet />; navegación a “nueva asignatura” ajustada al path correcto.
2026-02-05 13:41:09 -06:00
Guillermo.Arrieta 1acb18711f Reintegración con main. Corrección de errores de fetch. Sincronización con la base de datos remota 2026-02-03 15:10:09 -06:00
Guillermo.Arrieta f046bdcc04 Refactorización de wizards para consistencia, reusabilidad y mantenibilidad 2026-02-03 13:13:44 -06:00
Guillermo.Arrieta 12c572a442 Reorganización de archivos y enlace a wizard de creación de asignatura 2026-02-03 13:13:44 -06:00
Guillermo.Arrieta c27f05c5f6 Ahora solo se muestran los círculos con palomita si el archivo/repositorio está seleccionado
fix #61
2026-01-30 13:34:16 -06:00
Guillermo.Arrieta efab8eb2e4 Colocar el nombre de la Facultad/Carrera en el Resumen de la creación de los planes
fix #56:
Ya se muestra el nombre de la facultad y de la carrera.
2026-01-30 13:21:11 -06:00
Guillermo.Arrieta 867ecc53e0 Que se pueda escribir en el campo de Instrucciones adicionales para la IA
fix #59:
El bug se debía a que en la funcion onChange se hacia referencia al valor a cambiar con 'I' mayúscula en vez de minúscula.
2026-01-30 12:50:31 -06:00
Guillermo.Arrieta 4d8f7d7b41 Merge branch 'main' of https://github.lci.ulsa.mx/Guillermo.Arrieta/acad-ia-2 2026-01-30 12:43:54 -06:00
Guillermo.Arrieta 36a369a207 Error de CORS ai-generate-plan
fix #60:
El problema se solucionó del lado del backend perimitiendo el header 'x-supabase-client-platform'. Adicionalmente, al crear un plan ya no se redirige a planes/$planId/datos, sino a planes/$planId.
2026-01-30 12:40:53 -06:00
Guillermo.Arrieta 8786aaae25 Arreglado orden de renderizado de campos 2026-01-28 18:08:00 -06:00
Guillermo.Arrieta 9065899616 bugfix: el enlace a Datos generales aparecía como activo aunque no se estuviera en ese tab 2026-01-28 16:14:53 -06:00
Guillermo.Arrieta 9cad2a0f62 Merge branch 'fix/incidencias' into feat/not-found-pages 2026-01-28 14:25:54 -06:00
Guillermo.Arrieta 4e00262ab0 Redirección de plan de estudios y arreglo de placeholders en datos
close #22:
Al darle clic a un plan te lleva al index de planes/$planId, el cual es ahora la tab de datos.
Al darle al enlace de volver al plan desde el detalle de la asignatura, ya te redirige a planes/$planId/materias.
Se cambió el estilo de los placeholders en la tab de datos del detalle de plan, y ahora solo se muestra el primer ejemplo.
2026-01-28 14:06:17 -06:00
Guillermo.Arrieta 35ea4caa39 Fallback elegante de vista no encontrada
close #44:
Se creó la NotFoundPage y se utiliza en __root con el notFoundComponent.
Se agregó la lógica del loader tanto de plan de estudios como de asignaturas.
Se agregó el NotFoundComponent para el detalle de plan de estudios y el de asignaturas
2026-01-28 12:58:50 -06:00