- 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.
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ò:
- Selezionare un'asta
- Premere
Canc(o cliccare "Rimuovi") - Confermare la rimozione
- Il focus si sposta automaticamente sulla riga successiva
- Premere di nuovo
Cancper rimuovere l'asta successiva - 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:
- Premi
Cancsu "Asta B" - 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:
- Premi
Cancsu "Asta D" - 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:
- Premi
Cancsu "Asta A" - 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:
Canc? Conferma ? Focus su "Asta B"Canc? Conferma ? Focus su "Asta C"Canc? Conferma ? Nessuna asta rimasta
Risultato:
(lista vuota)
? Puoi cancellare tutte le aste premendo solo Canc + Invio ripetutamente!
?? Vantaggi
? Cancellazione Rapidissima
Prima:
- Seleziona asta 1
- Premi
Canc - Conferma
- ? Focus perso - devi cliccare di nuovo sulla lista
- Seleziona asta 2
- Premi
Canc - ...
Dopo:
- Seleziona asta 1
- Premi
Canc+Invio(conferma) - ? Focus automaticamente su asta 2
- Premi
Canc+Invio - ? Focus automaticamente su asta 3
- Premi
Canc+Invio - ...
?? 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
- Aggiungi 5 aste
- Seleziona l'asta in posizione 3
- Premi
Canc - Conferma con
Invio - ? Verifica: Focus automaticamente sull'asta che era in posizione 4 (ora posizione 3)
Test 2: Cancellazione Rapida Multiple
- Aggiungi 10 aste
- Seleziona la prima asta
- Premi rapidamente:
Canc?Invio?Canc?Invio?Canc?Invio - ? Verifica: Cancellate 3 aste senza mai perdere il focus
Test 3: Cancellazione Ultima Asta
- Aggiungi 3 aste
- Seleziona l'ultima asta
- Premi
Canc+Invio - ? Verifica: Focus sulla nuova ultima asta (era la penultima)
Test 4: Cancellazione Tutte le Aste
- Aggiungi 5 aste
- Seleziona la prima
- Premi
Canc+Invioper 5 volte di seguito - ? Verifica: Lista vuota, nessun errore
Test 5: Scroll Automatico
- Aggiungi 20 aste (scrollable)
- Scrolla in fondo
- Seleziona un'asta in fondo
- Premi
Canc+Invio - ? 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.Backgroundassicura 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
?? Riepilogo
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!