Explorar documentación
Documentación de v0.14.0Ver fuente original ↗

Navegación y feedback de carga

Pasada sobre las rutas de ui_web/src/main.tsx, navegación móvil/escritorio, componentes de carga y paneles de ajustes. Rama fix/ui-navigation-feedback.

Hallazgos y cambios

  • El cierre del drawer y la selección se completan juntos al recibir popstate: retirarlo antes exponía brevemente la vista anterior antes del skeleton. Los cierres sin selección siguen siendo inmediatos. Se conserva el historial y una prueba retrasa su resolución para cubrir la regresión.
  • Las rutas divididas en módulos usaban lazy sin fallback propio. asyncPage muestra el destino y su título mientras importa el código, comparte imports en vuelo y conserva únicamente el módulo, no la página ni datos de cuenta. Una respuesta de una página abandonada no vuelve a montarla. Fallos de import y de render tienen reintento y dejan disponible la navegación del shell.
  • Artistas monta una cuadrícula local completa. Se permite pintar el título y skeleton antes del trabajo de montaje mediante dos frames cancelables. No es una virtualización ni una reducción demostrada del tiempo total de montaje.
  • Álbumes consultaba al servidor sin skeleton propio y convertía errores en colecciones vacías. Ahora separa carga, contenido, vacío y fallo con reintento; al refrescar conserva la cuadrícula previa con estado ocupado y texto de carga.
  • Las fichas de artista/álbum condicionaban las canciones locales a la respuesta del perfil externo. Ya pueden mostrarlas sin esa dependencia. Al pasar entre entidades no se presenta el perfil anterior mientras llega el nuevo.
  • Listas y portada de Podcasts ya no presentan un vacío antes de terminar su carga inicial. Descargas distingue petición pendiente, error y cola vacía.
  • Episodios de podcast distinguen error de feed vacío y permiten reintentar.
  • Reproducción, configuración de Descargas y acceso Subsonic no ofrecen valores por defecto editables antes de leer la configuración. Comparten SettingsLoad. Usuarios y mejoras lossless también muestran carga inicial y error recuperable.
  • Se reutilizan skeletons y botones del sistema visual, con mensajes en los cuatro idiomas. No se añade una duración mínima de espera. Los skeletons existentes respetan movimiento reducido y anuncian carga a lectores de pantalla.

Mapa de dependencias y cobertura

SuperficieDependencia de datosFeedback
Menú móvil, sidebar, barra inferiorCliente; historial al cerrar drawerCierre sincronizado con la selección; destino con fallback común si falta el módulo
Canciones, Favoritos, detalle de listaStore de biblioteca sincronizadoTrackList ya tenía skeleton; se conserva
Artistas de bibliotecaCatálogo sincronizado; montaje local de gridSkeleton redondo durante primera carga y antes de montar
Álbumes de bibliotecaAPI de álbumes por orden/filtro/revisiónSkeleton inicial, refresco ocupado, fallo con reintento
Artista / álbumPerfil externo y consulta local por ID independientesContenido local independiente; skeleton de descubrimiento y reintento
ListasStore sincronizadoSkeleton inicial de tarjetas
Búsqueda / descubrimientoAPI, nodos y cachéYa había skeletons por dominio y resultados previos inertes durante búsqueda; se conserva
PodcastsSuscripciones del store, recomendaciones y búsquedaSkeleton de portada añadido; feedback de búsqueda existente conservado
EpisodiosAPI del feedSkeleton existente y nuevo error con reintento
DescargasAPI de cola, después eventosSkeleton inicial, errores recuperables, progreso por descarga conservado
LiveComunidad / conexión de audioEstados de conexión, recuperación y creación existentes conservados
ImportaciónRestauración del trabajo y proceso de importaciónStatusCard y progreso existentes conservados
Ajustes locales / cuentaPreferencias y sesión del clienteSe muestran sin esperar datos de biblioteca
Ajustes de servidor / SubsonicAPI de configuraciónSkeleton antes de controles reales, error y reintento
Usuarios / losslessAPI de administración / estadoSkeleton inicial y error recuperable
Dispositivos / emparejamientoAPI y proceso de pairingSkeletons y estados existentes conservados
Reproductor, letras, menús y acciones de colecciónStore, audio y peticiones puntualesFeedback específico existente conservado; no se bloquea el shell por carga de rutas
Login / invitaciónSesión / validación de tokenPantalla de arranque y estados de formulario existentes conservados

Validación y límites

cd ui_web && npm test: typecheck y 1.164 pruebas / 122 archivos correctos. git diff --check correcto. Las regresiones añadidas comprueban navegación con un módulo pendiente, abandono y vuelta a una ruta, reintento de import, cancelación de frames, cierre sincronizado con popstate, catálogo pendiente, fallo de álbumes, independencia de pistas locales, cambio de entidad, cola de descargas y carga de ajustes.

No se ejecutó build local ni se modificaron servicios o datos reales. La revisión es de código y pruebas DOM/router con peticiones controladas: no constituye una medición de latencia en móvil ni aceptación visual en un dispositivo físico. Para la aceptación física pendiente: menú → Artistas/Álbumes, primera visita a cada pestaña con red lenta, volver durante una carga y reintentar tras recuperar red.

Las cuadrículas siguen montando todas las tarjetas tras el primer feedback; una biblioteca enorme puede requerir un trabajo separado de virtualización.

Correcciones de CI

  • El contador de reconstrucciones del catálogo queda limitado al archivo SQLite de la prueba; abrir otra base no altera sus aserciones. La simulación de reinicio invalida solo su entrada de esquema. Suite Python: 1.567 pruebas correctas, cobertura 69,65 % (umbral de CI: 55 %).
  • La búsqueda de ajustes espera a que los paneles asíncronos dejen sus skeletons antes de calcular el desplazamiento. El panel lossless anterior al resultado podía crecer después del scroll y sacar la fila de la pantalla. La espera de una carga lenta no se confunde con el timeout de un ancla inexistente.
  • Regresión DOM y de navegador con respuesta lossless retenida más allá del timeout del ancla; pruebas de búsqueda en Chromium y WebKit móvil/escritorio.
  • Navegador en contenedor Playwright: búsqueda de ajustes, navegación móvil y escala de interfaz, 119 pruebas correctas y 33 omitidas por plataforma, sin reintentos, en Chromium y WebKit móvil/escritorio.

Buscar documentación