MCPcopy Create free account
hub / github.com/devnullvoid/pvetui / restoreSelection

Method restoreSelection

internal/ui/components/selection.go:9–88  ·  view source on GitHub ↗

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,
)

Source from the content-addressed store, hash-verified

7
8// restoreSelection restores node and VM selections after a refresh.
9func (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()

Callers 3

doEnrichNodesMethod · 0.95
autoRefreshDataMethod · 0.95

Calls 10

shouldRestoreVMSelectionFunction · 0.85
GetSelectedVMMethod · 0.65
GetCurrentItemMethod · 0.65
GetVMsMethod · 0.65
SetCurrentItemMethod · 0.65
UpdateMethod · 0.65
ClearMethod · 0.65
GetSelectedNodeMethod · 0.65
GetNodesMethod · 0.65

Tested by

no test coverage detected