Skip to content

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 como sort (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 /estudiantes sin 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 opcional sort en listStudents.

Cómo probar

  1. En Estudiantes, cambiar "Ordenar por" a "Más recientes" → los recién creados aparecen primero, y la URL muestra ?orden=recientes.
  2. Buscar un nombre, elegir carrera y estado, y pasar a la página 2 → la URL refleja todo. Recargar (F5) → queda igual.
  3. Entrar a la ficha de un estudiante y tocar "Volver a estudiantes" → el listado vuelve con los mismos filtros, orden y página.
  4. Copiar la URL y abrirla en otra pestaña → mismo listado.
  5. "Limpiar filtros" → listado por defecto, con la URL /estudiantes.
  6. 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.

Merge request reports

Loading