diff --git a/internal/tui/tui.go b/internal/tui/tui.go index 7dce56f..6f39829 100644 --- a/internal/tui/tui.go +++ b/internal/tui/tui.go @@ -219,6 +219,8 @@ func InitialModel(isAdmin bool, s store.Store, eng *monitor.Engine, version stri } } + detailPref, _ := s.GetPreference(context.Background(), "detail_open") + return Model{ state: stateDashboard, logViewport: vpLogs, @@ -232,6 +234,7 @@ func InitialModel(isAdmin bool, s store.Store, eng *monitor.Engine, version stri theme: theme, themeIndex: themeIdx, st: newStyles(theme), + detailOpen: detailPref == "true", demoMode: os.Getenv("UPTOP_DEMO") == "1", version: version, sparkTooltipIdx: -1, diff --git a/internal/tui/update.go b/internal/tui/update.go index 4dcc996..1004871 100644 --- a/internal/tui/update.go +++ b/internal/tui/update.go @@ -624,9 +624,23 @@ func (m *Model) handleDashboardKey(msg tea.KeyMsg) (tea.Model, tea.Cmd) { if m.currentTab == tabMonitors && len(m.sites) > 0 { m.detailOpen = !m.detailOpen m.recalcLayout() + st := m.store + open := m.detailOpen + var cmd tea.Cmd if m.detailOpen { - return m, m.loadDetailCmd(m.sites[m.cursor].ID) + cmd = m.loadDetailCmd(m.sites[m.cursor].ID) } + saveCmd := writeCmd("Save detail preference", func() error { + v := "false" + if open { + v = "true" + } + return st.SetPreference(context.Background(), "detail_open", v) + }) + if cmd != nil { + return m, tea.Batch(cmd, saveCmd) + } + return m, saveCmd } else if m.currentTab == tabSettings && m.settingsSection == sectionAlerts && len(m.alerts) > 0 { m.state = stateAlertDetail } @@ -637,6 +651,10 @@ func (m *Model) handleDashboardKey(msg tea.KeyMsg) (tea.Model, tea.Cmd) { } else if m.detailOpen { m.detailOpen = false m.recalcLayout() + st := m.store + return m, writeCmd("Save detail preference", func() error { + return st.SetPreference(context.Background(), "detail_open", "false") + }) } } case "h":