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.
This commit is contained in:
2026-02-17 13:20:49 -06:00
parent 54b22b7adf
commit 7d45eb4dfa
7 changed files with 178 additions and 68 deletions

View File

@@ -87,7 +87,7 @@ function AsignaturasPage() {
const navigate = useNavigate()
// 1. Fetch de datos reales
const { data: asignaturasApi, isLoading: loadingAsig } =
const { data: asignaturaApi, isLoading: loadingAsig } =
usePlanAsignaturas(planId)
const { data: lineasApi, isLoading: loadingLineas } = usePlanLineas(planId)
@@ -99,8 +99,8 @@ function AsignaturasPage() {
// 3. Procesamiento de datos
const asignaturas = useMemo(
() => mapAsignaturas(asignaturasApi),
[asignaturasApi],
() => mapAsignaturas(asignaturaApi),
[asignaturaApi],
)
const lineas = useMemo(() => lineasApi || [], [lineasApi])

View File

@@ -183,7 +183,7 @@ function MapaCurricularPage() {
const { mutate: createLinea } = useCreateLinea()
const { mutate: updateLineaApi } = useUpdateLinea()
const { mutate: deleteLineaApi } = useDeleteLinea()
const { data: asignaturasApi, isLoading: loadingAsig } =
const { data: asignaturaApi, isLoading: loadingAsig } =
usePlanAsignaturas(planId)
const { data: lineasApi, isLoading: loadingLineas } = usePlanLineas(planId)
const [asignaturas, setAsignaturas] = useState<Array<Asignatura>>([])
@@ -286,9 +286,9 @@ function MapaCurricularPage() {
}, [lineas])
useEffect(() => {
if (asignaturasApi)
setAsignaturas(mapAsignaturasToAsignaturas(asignaturasApi))
}, [asignaturasApi])
if (asignaturaApi)
setAsignaturas(mapAsignaturasToAsignaturas(asignaturaApi))
}, [asignaturaApi])
useEffect(() => {
if (lineasApi) setLineas(mapLineasToLineaCurricular(lineasApi))