Skip to content

Commit 827565a

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 de6bc39 commit 827565a

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
@@ -55,13 +55,21 @@ func (sl *ServerList) build() {
5555
}
5656

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

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

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

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

0 commit comments

Comments
 (0)