Skip to content

refactor(ux): migliorare feedback visivo thumbnail export e coerenza pulsanti #142

Description

@nikazzio

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

  • Cambio pagina/page-size thumbnail mostra loading indicator
  • Pulsanti bulk ottimizzazione si disabilitano durante l'operazione
  • Feedback visivo coerente tra azioni sincrone e asincrone
  • (Opzionale) Convertire ottimizzazione in job asincrono con polling

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions