@@ -27,8 +27,10 @@ func NewModel(client *eos.Client, endpoint, rootPath string) tea.Model {
2727 )
2828
2929 state := persistedUIState {}
30+ activeView := defaultActiveView ()
3031 if rootPath == "" {
3132 state = loadPersistedUIState ()
33+ activeView = state .ActiveView
3234 }
3335 initialPath := rootPath
3436 if initialPath == "" {
@@ -37,7 +39,6 @@ func NewModel(client *eos.Client, endpoint, rootPath string) tea.Model {
3739 if initialPath == "" {
3840 initialPath = "/eos"
3941 }
40- activeView := state .ActiveView
4142 commandLogVisible := state .CommandLogVisible
4243
4344 return model {
@@ -162,40 +163,13 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
162163 }
163164 return m , nil
164165 case "tab" :
165- m .activeView = (m .activeView + 1 ) % viewCount
166+ m .activeView = nextOrderedView (m .activeView , 1 )
166167 return m .onViewChanged ()
167168 case "shift+tab" :
168- m .activeView = (m .activeView + viewCount - 1 ) % viewCount
169+ m .activeView = nextOrderedView (m .activeView , - 1 )
169170 return m .onViewChanged ()
170- case "1" :
171- m .activeView = viewMGM
172- return m .onViewChanged ()
173- case "2" :
174- m .activeView = viewQDB
175- return m .onViewChanged ()
176- case "3" :
177- m .activeView = viewFST
178- return m .onViewChanged ()
179- case "4" :
180- m .activeView = viewFileSystems
181- return m .onViewChanged ()
182- case "5" :
183- m .activeView = viewNamespace
184- return m .onViewChanged ()
185- case "6" :
186- m .activeView = viewSpaces
187- return m .onViewChanged ()
188- case "7" :
189- m .activeView = viewNamespaceStats
190- return m .onViewChanged ()
191- case "8" :
192- m .activeView = viewSpaceStatus
193- return m .onViewChanged ()
194- case "9" :
195- m .activeView = viewIOShaping
196- return m .onViewChanged ()
197- case "0" :
198- m .activeView = viewGroups
171+ case "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "0" :
172+ m .activeView , _ = viewForHotkey (msg .String ())
199173 return m .onViewChanged ()
200174 case "r" :
201175 return m .refreshActiveView ()
@@ -360,6 +334,17 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
360334 }
361335 m .status = fmt .Sprintf ("Browsing namespace %s" , m .directory .Path )
362336 m .persistUIState ()
337+ return m .startNamespaceAttrLoad (true )
338+ }
339+ case namespaceAttrsLoadedMsg :
340+ if msg .path != m .nsAttrsTargetPath {
341+ return m , nil
342+ }
343+ m .nsAttrsLoading = false
344+ m .nsAttrsLoaded = true
345+ m .nsAttrsErr = msg .err
346+ if msg .err == nil {
347+ m .nsAttrs = msg .attrs
363348 }
364349 case spaceStatusLoadedMsg :
365350 m .spaceStatusLoading = false
@@ -636,16 +621,49 @@ func (m model) refreshActiveView() (tea.Model, tea.Cmd) {
636621}
637622
638623func (m model ) maybeLoadNamespace () (tea.Model , tea.Cmd ) {
639- if m .nsLoaded || m . nsLoading {
624+ if m .nsLoading {
640625 return m , nil
641626 }
627+ if m .nsLoaded {
628+ return m .startNamespaceAttrLoad (false )
629+ }
642630
643631 m .nsLoading = true
644632 m .nsErr = nil
645633 m .status = fmt .Sprintf ("Loading namespace %s..." , m .directory .Path )
646634 return m , loadDirectoryCmd (m .client , m .directory .Path )
647635}
648636
637+ func (m model ) currentNamespaceAttrTargetPath () string {
638+ if selected , ok := m .selectedNamespaceEntry (); ok && selected .Path != "" {
639+ return selected .Path
640+ }
641+ if m .directory .Self .Path != "" {
642+ return m .directory .Self .Path
643+ }
644+ if m .directory .Path != "" {
645+ return m .directory .Path
646+ }
647+ return "/"
648+ }
649+
650+ func (m model ) startNamespaceAttrLoad (force bool ) (tea.Model , tea.Cmd ) {
651+ path := m .currentNamespaceAttrTargetPath ()
652+ if path == "" || m .client == nil {
653+ return m , nil
654+ }
655+ if ! force && m .nsAttrsTargetPath == path && (m .nsAttrsLoading || m .nsAttrsLoaded ) {
656+ return m , nil
657+ }
658+
659+ m .nsAttrsTargetPath = path
660+ m .nsAttrsLoading = true
661+ m .nsAttrsLoaded = false
662+ m .nsAttrsErr = nil
663+ m .nsAttrs = nil
664+ return m , loadNamespaceAttrsCmd (m .client , path )
665+ }
666+
649667func (m model ) maybeLoadSpaceStatus () (tea.Model , tea.Cmd ) {
650668 if ! m .spaceStatusLoading && len (m .spaceStatus ) > 0 {
651669 return m , nil
0 commit comments