Files
uptop/internal/tui/tab_settings.go
T
lerko 83d9754c89
CI / test (pull_request) Successful in 1m50s
CI / lint (pull_request) Successful in 1m16s
CI / vulncheck (pull_request) Successful in 51s
feat(tui): mouse click for settings sections, column sort, logs toggle
- Click Alerts/Nodes/Users sub-tabs in settings to switch sections
- Click STATUS/NAME/LATENCY column headers to sort (click again
  to reverse direction)
- Click logs panel to toggle focus (click again to unfocus)
2026-06-28 11:34:34 -04:00

63 lines
1.1 KiB
Go

package tui
import (
"fmt"
"github.com/charmbracelet/lipgloss"
)
func (m Model) viewSettingsTab() string {
maxSections := 2
if m.isAdmin {
maxSections = 3
}
sections := []string{"Alerts", "Nodes"}
if m.isAdmin {
sections = append(sections, "Users")
}
_ = maxSections
var tabs []string
for i, name := range sections {
var rendered string
if i == m.settingsSection {
rendered = m.st.activeTab.Render(name)
} else {
rendered = m.st.inactiveTab.Render(name)
}
tabs = append(tabs, m.zones.Mark(fmt.Sprintf("section-%d", i), rendered))
}
header := lipgloss.JoinHorizontal(lipgloss.Top, tabs...)
var content string
switch m.settingsSection {
case sectionAlerts:
content = m.viewAlertsTab()
case sectionNodes:
content = m.viewNodesTab()
case sectionUsers:
if m.isAdmin {
content = m.viewUsersTab()
}
}
return header + "\n" + content
}
func (m *Model) switchSettingsSection(idx int) {
max := 1
if m.isAdmin {
max = 2
}
if idx > max {
idx = 0
}
if idx < 0 {
idx = max
}
m.settingsSection = idx
m.cursor = 0
m.tableOffset = 0
}