From 6144e868e68838afb69a1ed3b6b4cdc73447cecb Mon Sep 17 00:00:00 2001 From: Leo Robinovitch Date: Mon, 30 Dec 2024 15:43:24 -0800 Subject: [PATCH] [fix] esc clears filter on single log page --- internal/app.go | 10 +++++++--- internal/page/entities.go | 4 ++++ internal/page/log.go | 8 ++++---- internal/page/logs.go | 4 ++++ internal/page/page.go | 1 + 5 files changed, 20 insertions(+), 7 deletions(-) diff --git a/internal/app.go b/internal/app.go index 200cba1..86d1c6a 100644 --- a/internal/app.go +++ b/internal/app.go @@ -422,6 +422,10 @@ func (m Model) handleKeyMsg(msg tea.KeyMsg) (Model, tea.Cmd) { return m, tea.Batch(cmds...) } + // store whether a filter is currently applied - helps make decisions later like whether to go back + // from single log page to logs page or just clear the filter upon user pressing ESC + hasAppliedFilter := m.pages[m.focusedPageType].HasAppliedFilter() + // update current page with key msg m.pages[m.focusedPageType], cmd = m.pages[m.focusedPageType].Update(msg) cmds = append(cmds, cmd) @@ -498,7 +502,7 @@ func (m Model) handleKeyMsg(msg tea.KeyMsg) (Model, tea.Cmd) { // single log page specific actions if m.focusedPageType == page.SingleLogPageType { - m, cmd = m.handleSingleLogPageKeyMsg(msg) + m, cmd = m.handleSingleLogPageKeyMsg(msg, hasAppliedFilter) cmds = append(cmds, cmd) return m, tea.Batch(cmds...) } @@ -633,13 +637,13 @@ func (m Model) handleLogsPageKeyMsg(msg tea.KeyMsg) (Model, tea.Cmd) { return m, nil } -func (m Model) handleSingleLogPageKeyMsg(msg tea.KeyMsg) (Model, tea.Cmd) { +func (m Model) handleSingleLogPageKeyMsg(msg tea.KeyMsg, hasAppliedFilter bool) (Model, tea.Cmd) { // handle clear var cmd tea.Cmd var cmds []tea.Cmd isClear := key.Matches(msg, m.keyMap.Clear) notHighjackingInput := !m.pages[m.focusedPageType].HighjackingInput() - noAppliedFilter := !m.pages[m.focusedPageType].(page.SingleLogPage).HasAppliedFilter() + noAppliedFilter := !hasAppliedFilter if isClear && notHighjackingInput && noAppliedFilter { m, cmd = m.changeFocusedPage(page.LogsPageType) cmds = append(cmds, cmd) diff --git a/internal/page/entities.go b/internal/page/entities.go index 2b9d7ac..f99f0c1 100644 --- a/internal/page/entities.go +++ b/internal/page/entities.go @@ -98,6 +98,10 @@ func (p EntityPage) ContentForFile() []string { return content } +func (p EntityPage) HasAppliedFilter() bool { + return p.filterableViewport.Filter.Value() != "" +} + func (p EntityPage) ToggleShowContext() GenericPage { p.filterableViewport.ToggleShowContext() return p diff --git a/internal/page/log.go b/internal/page/log.go index 328a957..f793fda 100644 --- a/internal/page/log.go +++ b/internal/page/log.go @@ -86,6 +86,10 @@ func (p SingleLogPage) ToggleShowContext() GenericPage { return p } +func (p SingleLogPage) HasAppliedFilter() bool { + return p.filterableViewport.Filter.Value() != "" +} + func (p SingleLogPage) ContentForClipboard() []string { // don't include asci escape chars in header when copying single log to clipboard header, content := veryNicelyFormatThisLog(p.log, false) @@ -132,10 +136,6 @@ func (p SingleLogPage) WithLog(log model.PageLog) SingleLogPage { return p } -func (p SingleLogPage) HasAppliedFilter() bool { - return p.filterableViewport.Filter.Value() != "" -} - func veryNicelyFormatThisLog(log model.PageLog, styleHeader bool) (string, []string) { header := fmt.Sprintf("%s | %s", log.Timestamps.Full, log.RenderName(log.ContainerNames.Full, styleHeader)) return header, formatJSON(log.Log.Content) diff --git a/internal/page/logs.go b/internal/page/logs.go index f901289..83ef08c 100644 --- a/internal/page/logs.go +++ b/internal/page/logs.go @@ -108,6 +108,10 @@ func (p LogsPage) ContentForFile() []string { return content } +func (p LogsPage) HasAppliedFilter() bool { + return p.filterableViewport.Filter.Value() != "" +} + func (p LogsPage) ToggleShowContext() GenericPage { p.filterableViewport.ToggleShowContext() return p diff --git a/internal/page/page.go b/internal/page/page.go index 1fea917..a1a30c6 100644 --- a/internal/page/page.go +++ b/internal/page/page.go @@ -10,6 +10,7 @@ type GenericPage interface { View() string ContentForFile() []string ToggleShowContext() GenericPage + HasAppliedFilter() bool HighjackingInput() bool WithDimensions(width, height int) GenericPage WithFocus() GenericPage