Skip to content

Commit d6433da

Browse files
committed
fix: preserve selected row when updating ping status
Maintain the current server selection when ping or ping all operations update the server list. Previously, the selection would reset to the first item after each update.
1 parent 8bcb835 commit d6433da

File tree

1 file changed

+23
-3
lines changed

1 file changed

+23
-3
lines changed

internal/adapters/ui/server_list.go

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,21 @@ func (sl *ServerList) build() {
5656
}
5757

5858
func (sl *ServerList) UpdateServers(servers []domain.Server) {
59+
// Save current selection before clearing
60+
currentIdx := sl.List.GetCurrentItem()
61+
var currentAlias string
62+
if currentIdx >= 0 && currentIdx < len(sl.servers) {
63+
currentAlias = sl.servers[currentIdx].Alias
64+
}
65+
5966
sl.servers = servers
6067
sl.List.Clear()
6168

6269
// Get current width
6370
_, _, width, _ := sl.List.GetInnerRect() //nolint:dogsled
6471
sl.currentWidth = width
6572

73+
newSelectedIdx := -1
6674
for i := range servers {
6775
primary, secondary := formatServerLine(servers[i], width)
6876
idx := i
@@ -71,12 +79,24 @@ func (sl *ServerList) UpdateServers(servers []domain.Server) {
7179
sl.onSelection(sl.servers[idx])
7280
}
7381
})
82+
// Track the new index of previously selected server
83+
if currentAlias != "" && servers[i].Alias == currentAlias {
84+
newSelectedIdx = i
85+
}
7486
}
7587

7688
if sl.List.GetItemCount() > 0 {
77-
sl.List.SetCurrentItem(0)
78-
if sl.onSelectionChange != nil {
79-
sl.onSelectionChange(sl.servers[0])
89+
// Restore previous selection if found, otherwise keep first item
90+
if newSelectedIdx >= 0 {
91+
sl.List.SetCurrentItem(newSelectedIdx)
92+
if sl.onSelectionChange != nil {
93+
sl.onSelectionChange(sl.servers[newSelectedIdx])
94+
}
95+
} else {
96+
sl.List.SetCurrentItem(0)
97+
if sl.onSelectionChange != nil {
98+
sl.onSelectionChange(sl.servers[0])
99+
}
80100
}
81101
}
82102
}

0 commit comments

Comments
 (0)