feat: orden y filtros persistentes en el listado de estudiantes (RF08)
Qué se hizo
El listado de estudiantes ahora permite elegir el orden, y los filtros se conservan: al recargar, al usar "atrás", al compartir el link y al volver al listado desde la ficha de un estudiante. Es parte del RF08 ("búsqueda y filtrado ... con paginación y orden"; post-condición: "filtros aplicados persistentes").
Por qué
- El orden era fijo (siempre por apellido), sin forma de cambiarlo.
- Los filtros vivían solo en la memoria de la pantalla: al entrar a una ficha y volver, o al recargar, se perdían y había que volver a armar la búsqueda.
Cambios
-
"Ordenar por": selector arriba de la tabla, visible para todos (no es un filtro, así que no exige
BUSCAR_ESTUDIANTE). Opciones: Apellido (A-Z, por defecto), Apellido (Z-A), Nombre (A-Z), Documento y Más recientes. Se envía al backend comosort(formato de Spring Data). Cambiar el orden vuelve a la primera página. -
Filtros en la URL: búsqueda, grupo, carrera, estado, orden y página quedan en la dirección, por ejemplo
/estudiantes?q=ana&carrera=LTI&orden=recientes&pagina=2.- Sobreviven a recargar, al botón "atrás" y a compartir el link.
- La página (
page.tsx) los lee del lado del servidor, así el listado arranca ya filtrado. - La URL se actualiza con
window.history.replaceState, que Next integra con su router: no recarga, no hace pedidos al servidor y no suma una entrada al historial por cada tecla. - El listado sin filtros queda como
/estudiantes, sin parámetros.
-
Recordados en la sesión (
sessionStorage): si se vuelve a/estudiantessin filtros en la URL (con "Volver a estudiantes" desde la ficha, o desde el menú), se restauran los últimos usados. La primera búsqueda espera esa restauración, para no buscar sin filtros y repetir. - "Limpiar filtros": aparece cuando hay algo distinto del listado por defecto, y vuelve todo a cero.
-
lib/estudiantes-filtros.ts(nuevo): lectura y escritura de los filtros en la URL. Los valores inválidos escritos a mano (orden o estado desconocidos, página negativa) se ignoran y se usa el valor por defecto. -
lib/students.ts: nuevo parámetro opcionalsortenlistStudents.
Cómo probar
- En Estudiantes, cambiar "Ordenar por" a "Más recientes" → los recién creados aparecen primero, y la URL muestra
?orden=recientes. - Buscar un nombre, elegir carrera y estado, y pasar a la página 2 → la URL refleja todo. Recargar (F5) → queda igual.
- Entrar a la ficha de un estudiante y tocar "Volver a estudiantes" → el listado vuelve con los mismos filtros, orden y página.
- Copiar la URL y abrirla en otra pestaña → mismo listado.
- "Limpiar filtros" → listado por defecto, con la URL
/estudiantes. - Abrir
/estudiantes?orden=cualquiercosa&pagina=-3→ se ignoran los valores inválidos y se muestra el listado por defecto.
Relación con otros MRs
- No depende de ningún otro MR para funcionar.
- Se complementa con el MR de backend "Fix: la búsqueda de estudiantes aplicaba un solo filtro e ignoraba el resto": hasta que ese esté mergeado, al combinar varios filtros el backend sigue aplicando solo uno.
Verificación
Typecheck y lint pasan.
🗄️ Cambios en la base de datos
Ninguno.