restoreSelection restores node and VM selections after a refresh.
(hasVM bool, vmID int, vmNode string, vmState *models.SearchState, hasNode bool, nodeName string, nodeState *models.SearchState, )
| 7 | |
| 8 | // restoreSelection restores node and VM selections after a refresh. |
| 9 | func (a *App) restoreSelection(hasVM bool, vmID int, vmNode string, vmState *models.SearchState, |
| 10 | hasNode bool, nodeName string, nodeState *models.SearchState, |
| 11 | ) { |
| 12 | // If user changed VM selection while refresh was in-flight, preserve the |
| 13 | // user's newer selection instead of snapping back to stale pre-refresh state. |
| 14 | if !shouldRestoreVMSelection(hasVM, vmID, vmNode, a.vmList.GetSelectedVM()) { |
| 15 | hasVM = false |
| 16 | if vmState != nil { |
| 17 | vmState.SelectedIndex = a.vmList.GetCurrentItem() |
| 18 | } |
| 19 | } |
| 20 | |
| 21 | if hasVM { |
| 22 | found := false |
| 23 | for i, vm := range a.vmList.GetVMs() { |
| 24 | if vm != nil && vm.ID == vmID && vm.Node == vmNode { |
| 25 | a.vmList.SetCurrentItem(i) |
| 26 | |
| 27 | if vmState != nil { |
| 28 | vmState.SelectedIndex = i |
| 29 | } |
| 30 | |
| 31 | // Manually trigger the VM changed callback to update details |
| 32 | if selectedVM := a.vmList.GetSelectedVM(); selectedVM != nil { |
| 33 | a.vmDetails.Update(selectedVM) |
| 34 | } |
| 35 | |
| 36 | found = true |
| 37 | break |
| 38 | } |
| 39 | } |
| 40 | |
| 41 | // Fallback: if previously selected VM no longer exists (e.g., after deletion), |
| 42 | // select the first available VM and update details; clear details if list is empty. |
| 43 | if !found { |
| 44 | vms := a.vmList.GetVMs() |
| 45 | if len(vms) > 0 { |
| 46 | a.vmList.SetCurrentItem(0) |
| 47 | if vmState != nil { |
| 48 | vmState.SelectedIndex = 0 |
| 49 | } |
| 50 | if selectedVM := a.vmList.GetSelectedVM(); selectedVM != nil { |
| 51 | a.vmDetails.Update(selectedVM) |
| 52 | } |
| 53 | } else { |
| 54 | a.vmDetails.Clear() |
| 55 | if vmState != nil { |
| 56 | vmState.SelectedIndex = 0 |
| 57 | } |
| 58 | } |
| 59 | } |
| 60 | } |
| 61 | |
| 62 | // If user changed node selection while refresh was in-flight, preserve it. |
| 63 | if !shouldRestoreNodeSelection(hasNode, nodeName, a.nodeList.GetSelectedNode()) { |
| 64 | hasNode = false |
| 65 | if nodeState != nil { |
| 66 | nodeState.SelectedIndex = a.nodeList.GetCurrentItem() |
no test coverage detected