From 87be9a1763bd95b9ab1c4e5d77cd94846d90d504 Mon Sep 17 00:00:00 2001 From: Dhruv Thakur Date: Thu, 7 Mar 2024 01:04:56 +0100 Subject: [PATCH] feat: add minor filtering features - Stacks can be filtered - Diff can be viewed from a filtered state - Quitting is better --- model/delegate.go | 12 ++++++++++++ model/initial.go | 5 +++-- model/styles.go | 2 +- model/types.go | 4 ++-- model/update.go | 8 +++++++- model/view.go | 2 +- 6 files changed, 26 insertions(+), 7 deletions(-) diff --git a/model/delegate.go b/model/delegate.go index 7409cc2..8aa722e 100644 --- a/model/delegate.go +++ b/model/delegate.go @@ -45,6 +45,18 @@ func newAppItemDelegate(keys *delegateKeyMap) list.DefaultDelegate { Copy() d.UpdateFunc = func(msg tea.Msg, m *list.Model) tea.Cmd { + fs := m.FilterState() + switch fs { + case list.FilterApplied: + switch msgType := msg.(type) { + case tea.KeyMsg: + if !key.Matches(msgType, keys.showDiff) { + return nil + } + } + case list.Filtering: + return nil + } var stack Stack var cmds []tea.Cmd diff --git a/model/initial.go b/model/initial.go index ce36dd3..a65d390 100644 --- a/model/initial.go +++ b/model/initial.go @@ -13,10 +13,11 @@ func InitialModel(stacks []Stack) model { appDelegate := newAppItemDelegate(appDelegateKeys) m := model{ - stacksList: list.New(stackItems, appDelegate, listPadding, 0), + stacksList: list.New(stackItems, appDelegate, listWidth, 0), } m.stacksList.Title = "Stacks" - m.stacksList.SetFilteringEnabled(false) + m.stacksList.SetStatusBarItemName("stack", "stacks") + m.stacksList.DisableQuitKeybindings() return m } diff --git a/model/styles.go b/model/styles.go index 17a0d11..fb029bd 100644 --- a/model/styles.go +++ b/model/styles.go @@ -10,7 +10,7 @@ var ( PaddingRight(1). Foreground(lipgloss.Color("#282828")) - baseListStyle = lipgloss.NewStyle().PaddingTop(1).PaddingRight(2).PaddingLeft(1).PaddingBottom(1).Width(listPadding + 10) + baseListStyle = lipgloss.NewStyle().PaddingTop(1).PaddingRight(2).PaddingLeft(1).PaddingBottom(1).Width(listWidth + 10) stackListStyle = baseListStyle.Copy() diff --git a/model/types.go b/model/types.go index 689a7b9..ad1de9d 100644 --- a/model/types.go +++ b/model/types.go @@ -29,7 +29,7 @@ type Stack struct { } func (stack Stack) Title() string { - return fmt.Sprintf("%s", RightPadTrim(stack.Name, listPadding-20)) + return fmt.Sprintf("%s", RightPadTrim(stack.Name, listWidth-20)) } func (stack Stack) Description() string { var status string @@ -51,7 +51,7 @@ func (stack Stack) Description() string { if stack.Err != nil { desc = stack.Err.Error() } - return fmt.Sprintf("@%s %s", RightPadTrim(desc, listPadding-20), status) + return fmt.Sprintf("@%s %s", RightPadTrim(desc, listWidth-20), status) } func (stack Stack) FilterValue() string { return stack.Name } diff --git a/model/update.go b/model/update.go index 61d659c..fe2fcad 100644 --- a/model/update.go +++ b/model/update.go @@ -3,6 +3,7 @@ package model import ( "fmt" + "github.com/charmbracelet/bubbles/list" tea "github.com/charmbracelet/bubbletea" ) @@ -15,7 +16,12 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { case tea.KeyMsg: switch msg.String() { case "ctrl+c", "q": - return m, tea.Quit + fs := m.stacksList.FilterState() + if fs == list.Filtering || fs == list.FilterApplied { + m.stacksList.ResetFilter() + } else { + return m, tea.Quit + } } case tea.WindowSizeMsg: _, h1 := stackListStyle.GetFrameSize() diff --git a/model/view.go b/model/view.go index 7c2c1cc..da6b71c 100644 --- a/model/view.go +++ b/model/view.go @@ -7,7 +7,7 @@ import ( ) var ( - listPadding = 100 + listWidth = 120 ) func (m model) View() string {