Problema
Il pannello Export Tab (thumbnails + azioni pagina) ha diversi problemi di feedback visivo che rendono l'UX confusa, specialmente con documenti grandi dove le operazioni sono lente.
Problemi identificati
1. Nessun feedback al cambio pagina thumbnail
File: components/studio/export/thumbnails.py (linee 355-402)
Prev/Next e il selettore page-size fanno hx_get senza hx_indicator. Lo skeleton animato (render_export_thumbnails_loading_shell) appare solo al primo caricamento (defer_thumbs_load=True), mai sulle navigazioni successive. L'utente vede la UI congelata per secondi mentre il server genera le thumbnail on-demand.
Soluzione proposta: Aggiungere un hx_indicator con skeleton/spinner sui controlli di paginazione, oppure mostrare il loading shell durante ogni cambio pagina.
2. Pulsanti bulk "Ottimizza" senza protezione doppio-click
File: components/studio/export/pages.py (linee 116-155)
"Ottimizza selezione" e "Ottimizza tutte" mostrano solo un piccolo "…" come indicatore. Non si disabilitano durante l'operazione. L'ottimizzazione è sincrona e può essere lenta — l'utente può cliccare più volte generando richieste duplicate.
Soluzione proposta: Aggiungere hx_disabled_elt="this" o disabilitazione JS al submit, più un indicatore di progresso più visibile.
3. Ottimizzazione sincrona blocca la risposta HTTP
File: routes/studio_handlers.py (linee 527-624)
Sia optimize_studio_export_scans (bulk) che optimize_studio_export_page (per-card) eseguono optimize_local_scans() in modo sincrono. Per documenti grandi, la risposta HTTP resta bloccata per molti secondi senza feedback di progresso.
Soluzione proposta (futura): Convertire in job asincrono con poller, come già fatto per Hi-res e Stitch.
4. Pulsante "⚙ Opt" usa progress bar pensata per job asincroni
Il pulsante Opt per-card mostra una progress bar (studio-thumb-progress-opt-{page}) progettata per job con polling, ma l'ottimizzazione è sincrona — la barra non si aggiorna durante l'operazione.
Criteri di accettazione
File coinvolti
src/studio_ui/components/studio/export/thumbnails.py
src/studio_ui/components/studio/export/pages.py
src/studio_ui/routes/studio_handlers.py
src/studio_ui/components/studio/export/tab_script.py
Problema
Il pannello Export Tab (thumbnails + azioni pagina) ha diversi problemi di feedback visivo che rendono l'UX confusa, specialmente con documenti grandi dove le operazioni sono lente.
Problemi identificati
1. Nessun feedback al cambio pagina thumbnail
File:
components/studio/export/thumbnails.py(linee 355-402)Prev/Next e il selettore page-size fanno
hx_getsenzahx_indicator. Lo skeleton animato (render_export_thumbnails_loading_shell) appare solo al primo caricamento (defer_thumbs_load=True), mai sulle navigazioni successive. L'utente vede la UI congelata per secondi mentre il server genera le thumbnail on-demand.Soluzione proposta: Aggiungere un
hx_indicatorcon skeleton/spinner sui controlli di paginazione, oppure mostrare il loading shell durante ogni cambio pagina.2. Pulsanti bulk "Ottimizza" senza protezione doppio-click
File:
components/studio/export/pages.py(linee 116-155)"Ottimizza selezione" e "Ottimizza tutte" mostrano solo un piccolo
"…"come indicatore. Non si disabilitano durante l'operazione. L'ottimizzazione è sincrona e può essere lenta — l'utente può cliccare più volte generando richieste duplicate.Soluzione proposta: Aggiungere
hx_disabled_elt="this"o disabilitazione JS al submit, più un indicatore di progresso più visibile.3. Ottimizzazione sincrona blocca la risposta HTTP
File:
routes/studio_handlers.py(linee 527-624)Sia
optimize_studio_export_scans(bulk) cheoptimize_studio_export_page(per-card) eseguonooptimize_local_scans()in modo sincrono. Per documenti grandi, la risposta HTTP resta bloccata per molti secondi senza feedback di progresso.Soluzione proposta (futura): Convertire in job asincrono con poller, come già fatto per Hi-res e Stitch.
4. Pulsante "⚙ Opt" usa progress bar pensata per job asincroni
Il pulsante Opt per-card mostra una progress bar (
studio-thumb-progress-opt-{page}) progettata per job con polling, ma l'ottimizzazione è sincrona — la barra non si aggiorna durante l'operazione.Criteri di accettazione
File coinvolti
src/studio_ui/components/studio/export/thumbnails.pysrc/studio_ui/components/studio/export/pages.pysrc/studio_ui/routes/studio_handlers.pysrc/studio_ui/components/studio/export/tab_script.py