Files
Mimante/Mimante/Documentation/FEATURE_AUTO_FOCUS_AFTER_DELETE.md
T
Alby96 4bfcf147b4 Miglioramenti UI e gestione puntate server
- Implementato focus automatico sulla riga successiva dopo la
  cancellazione di un'asta, con scrolling e reset focus.
- Utilizzo dei dati ufficiali del server per il conteggio
  delle puntate residue e usate su asta, con fallback manuale.
- Corretto il parsing dei campi della risposta server
  (campo 2: puntate residue, campo 5: puntate usate).
- Risolto il mancato aggiornamento immediato della UI
  (colonna "Clicks" e banner "Puntate residue").
- Aggiunto logging dettagliato per il parsing della risposta
  server e il debugging di eventuali problemi.
- Documentate le modifiche in file dedicati con scenari di
  test e istruzioni per il troubleshooting.
2025-11-20 23:01:53 +01:00

7.4 KiB

? Feature: Focus Automatico su Asta Successiva dopo Cancellazione

?? Obiettivo

Permettere la cancellazione rapida di più aste spostando automaticamente il focus sulla riga successiva dopo ogni cancellazione, così l'utente può:

  1. Selezionare un'asta
  2. Premere Canc (o cliccare "Rimuovi")
  3. Confermare la rimozione
  4. Il focus si sposta automaticamente sulla riga successiva
  5. Premere di nuovo Canc per rimuovere l'asta successiva
  6. Ripetere rapidamente

? Implementazione

File Modificato: Core/MainWindow.ButtonHandlers.cs

Metodo: RemoveUrlButton_Click

Logica Implementata

// 1?? Salva l'indice corrente PRIMA di rimuovere
var currentIndex = _auctionViewModels.IndexOf(_selectedAuction);

// 2?? ... rimuove l'asta ...

// 3?? Calcola quale asta selezionare dopo
if (_auctionViewModels.Count > 0)
{
    int newIndex;
    
    if (currentIndex >= _auctionViewModels.Count)
    {
        // L'asta rimossa era l'ultima ? seleziona la nuova ultima
        newIndex = _auctionViewModels.Count - 1;
    }
    else
    {
        // Seleziona l'asta che ora si trova nella stessa posizione
        newIndex = currentIndex;
    }
    
    // 4?? Seleziona l'asta
    MultiAuctionsGrid.SelectedIndex = newIndex;
    _selectedAuction = _auctionViewModels[newIndex];
    
    // 5?? Forza il focus sulla griglia (con delay per permettere UI update)
    Dispatcher.BeginInvoke(new Action(() =>
    {
        MultiAuctionsGrid.Focus();
        
        // Scroll fino alla riga selezionata
        if (MultiAuctionsGrid.SelectedItem != null)
        {
            MultiAuctionsGrid.ScrollIntoView(MultiAuctionsGrid.SelectedItem);
        }
        
        Log($"[FOCUS] Focus spostato su: {_selectedAuction.Name}", LogLevel.Info);
    }), System.Windows.Threading.DispatcherPriority.Background);
}
else
{
    // Nessuna asta rimasta
    _selectedAuction = null;
    Log($"[REMOVE] Nessuna asta rimasta nella lista", LogLevel.Info);
}

?? Comportamento

Scenario 1: Rimuovi Asta in Mezzo alla Lista

Lista iniziale:

1. Asta A
2. Asta B  ? SELEZIONATA
3. Asta C
4. Asta D

Azioni:

  1. Premi Canc su "Asta B"
  2. Confermi la rimozione

Risultato:

1. Asta A
2. Asta C  ? FOCUS AUTOMATICO (era in posizione 3, ora in posizione 2)
3. Asta D

? Focus su "Asta C" (riga successiva)


Scenario 2: Rimuovi Ultima Asta

Lista iniziale:

1. Asta A
2. Asta B
3. Asta C
4. Asta D  ? SELEZIONATA

Azioni:

  1. Premi Canc su "Asta D"
  2. Confermi la rimozione

Risultato:

1. Asta A
2. Asta B
3. Asta C  ? FOCUS AUTOMATICO (nuova ultima asta)

? Focus su "Asta C" (nuova ultima asta)


Scenario 3: Rimuovi Prima Asta

Lista iniziale:

1. Asta A  ? SELEZIONATA
2. Asta B
3. Asta C
4. Asta D

Azioni:

  1. Premi Canc su "Asta A"
  2. Confermi la rimozione

Risultato:

1. Asta B  ? FOCUS AUTOMATICO (era in posizione 2, ora in posizione 1)
2. Asta C
3. Asta D

? Focus su "Asta B" (nuova prima asta)


Scenario 4: Rimuovi Tutte le Aste Rapidamente

Lista iniziale:

1. Asta A  ? SELEZIONATA
2. Asta B
3. Asta C

Azioni rapide:

  1. Canc ? Conferma ? Focus su "Asta B"
  2. Canc ? Conferma ? Focus su "Asta C"
  3. Canc ? Conferma ? Nessuna asta rimasta

Risultato:

(lista vuota)

? Puoi cancellare tutte le aste premendo solo Canc + Invio ripetutamente!


?? Vantaggi

? Cancellazione Rapidissima

Prima:

  1. Seleziona asta 1
  2. Premi Canc
  3. Conferma
  4. ? Focus perso - devi cliccare di nuovo sulla lista
  5. Seleziona asta 2
  6. Premi Canc
  7. ...

Dopo:

  1. Seleziona asta 1
  2. Premi Canc + Invio (conferma)
  3. ? Focus automaticamente su asta 2
  4. Premi Canc + Invio
  5. ? Focus automaticamente su asta 3
  6. Premi Canc + Invio
  7. ...

?? Workflow Migliorato

  • ? Non serve più usare il mouse dopo la prima selezione
  • ? Cancellazione sequenziale rapidissima con solo tastiera
  • ? Scroll automatico alla riga selezionata (sempre visibile)
  • ? Log dettagliato del focus spostato

?? Come Testare

Test 1: Cancellazione Singola

  1. Aggiungi 5 aste
  2. Seleziona l'asta in posizione 3
  3. Premi Canc
  4. Conferma con Invio
  5. ? Verifica: Focus automaticamente sull'asta che era in posizione 4 (ora posizione 3)

Test 2: Cancellazione Rapida Multiple

  1. Aggiungi 10 aste
  2. Seleziona la prima asta
  3. Premi rapidamente: Canc ? Invio ? Canc ? Invio ? Canc ? Invio
  4. ? Verifica: Cancellate 3 aste senza mai perdere il focus

Test 3: Cancellazione Ultima Asta

  1. Aggiungi 3 aste
  2. Seleziona l'ultima asta
  3. Premi Canc + Invio
  4. ? Verifica: Focus sulla nuova ultima asta (era la penultima)

Test 4: Cancellazione Tutte le Aste

  1. Aggiungi 5 aste
  2. Seleziona la prima
  3. Premi Canc + Invio per 5 volte di seguito
  4. ? Verifica: Lista vuota, nessun errore

Test 5: Scroll Automatico

  1. Aggiungi 20 aste (scrollable)
  2. Scrolla in fondo
  3. Seleziona un'asta in fondo
  4. Premi Canc + Invio
  5. ? Verifica: La vista scrolla per mostrare la nuova asta selezionata

?? Log di Debug

Dopo ogni cancellazione, nel log appare:

[REMOVE] Asta rimossa: Balenciaga Collana (ID: 82746448)
[FOCUS] Focus spostato su: iPhone 15 Pro

Se rimuovi l'ultima asta:

[REMOVE] Asta rimossa: Ultima Asta (ID: 12345)
[REMOVE] Nessuna asta rimasta nella lista

?? Dettagli Tecnici

Uso di Dispatcher.BeginInvoke

Dispatcher.BeginInvoke(new Action(() =>
{
    MultiAuctionsGrid.Focus();
    MultiAuctionsGrid.ScrollIntoView(MultiAuctionsGrid.SelectedItem);
    Log($"[FOCUS] Focus spostato su: {_selectedAuction.Name}", LogLevel.Info);
}), System.Windows.Threading.DispatcherPriority.Background);

Perché?

  • Il focus va dato DOPO che la UI ha completato il rendering della rimozione
  • DispatcherPriority.Background assicura che l'operazione avvenga quando la UI è pronta
  • Senza questo delay, il focus potrebbe essere perso o applicato alla riga sbagliata

Gestione Indici

Caso 1: Rimuovi asta in mezzo

currentIndex = 2  // Asta B
// Dopo rimozione, Count = 3
newIndex = currentIndex = 2  // Ora punta a Asta C

Caso 2: Rimuovi ultima asta

currentIndex = 4  // Asta D (ultima)
// Dopo rimozione, Count = 3
currentIndex >= Count  // true
newIndex = Count - 1 = 2  // Asta C (nuova ultima)

? Checklist Verifica

  • Focus si sposta automaticamente dopo cancellazione
  • Funziona con asta in mezzo alla lista
  • Funziona con ultima asta
  • Funziona con prima asta
  • Funziona con lista vuota
  • Scroll automatico alla riga selezionata
  • Log dettagliato del focus
  • Nessun errore se lista vuota
  • Cancellazione rapida con solo tastiera funziona
  • Build compila senza errori

Data Feature: 2025-01-23
Versione: 4.1+
Feature: Auto-focus su asta successiva dopo cancellazione
Status: ? IMPLEMENTATA


Prima:

  • ? Focus perso dopo cancellazione
  • ? Serve cliccare di nuovo sulla lista
  • ? Cancellazione multipla lenta

Dopo:

  • ? Focus automatico sulla riga successiva
  • ? Cancellazione rapidissima con solo tastiera
  • ? Workflow fluido e intuitivo
  • ? Scroll automatico per visibilità
  • ? Log dettagliato per debugging

Shortcut Rapido:

Seleziona asta ? Canc ? Invio ? Canc ? Invio ? Canc ? Invio ? ...

?? Cancellazione ultra-rapida di multiple aste!