From 10bd84e9841924075e6b071baf7e80ef6e5469d7 Mon Sep 17 00:00:00 2001 From: Tai Groot Date: Thu, 2 Mar 2023 11:32:56 -0800 Subject: [PATCH] allow selected items in filter --- ui/listdelegate.go | 2 +- ui/settings.go | 61 +++++++++++++++++++++++++++++++++++++++------- ui/ui.go | 2 +- 3 files changed, 54 insertions(+), 11 deletions(-) diff --git a/ui/listdelegate.go b/ui/listdelegate.go index 271a057..3d318b7 100644 --- a/ui/listdelegate.go +++ b/ui/listdelegate.go @@ -46,7 +46,7 @@ type delegateKeyMap struct { func newDelegateKeyMap() *delegateKeyMap { return &delegateKeyMap{ toggle: key.NewBinding( - key.WithKeys("space"), + key.WithKeys(" "), key.WithHelp("space", "choose"), ), } diff --git a/ui/settings.go b/ui/settings.go index 251a32b..b4b0844 100644 --- a/ui/settings.go +++ b/ui/settings.go @@ -49,7 +49,7 @@ func (i selectablelist) GetSelected() []string { var settingsKey = key.NewBinding( key.WithKeys("ctrl+g"), - key.WithHelp("", "press ctrl+g to open settings"), + key.WithHelp("ctrl+g", "press ctrl+g to open settings"), ) func (m Settings) Update(msg tea.Msg) (tea.Model, tea.Cmd) { @@ -60,31 +60,74 @@ func (m Settings) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch m.cursor { case authors: var cmd tea.Cmd + batch := []tea.Cmd{} switch msg := msg.(type) { case tea.KeyMsg: switch msg.String() { - case "space", "enter": - selected := m.AuthorList.Cursor() - m.AllAuthors[selected].selected = !m.AllAuthors[selected].selected + case " ", "enter": + selected := 0 + if !m.AuthorList.IsFiltered() { + selected = m.AuthorList.Index() + m.AllAuthors[selected].selected = !m.AllAuthors[selected].selected + cmd = m.AuthorList.SetItem(selected, m.AllAuthors[selected]) + batch = append(batch, cmd) + } else { + val := m.AuthorList.SelectedItem() + selectedItem, ok := val.(selectable) + if ok { + for i, v := range m.AllAuthors { + if v.text == selectedItem.text { + selected = i + break + } + } + m.AllAuthors[selected].selected = !m.AllAuthors[selected].selected + cmd = m.AuthorList.SetItem(selected, m.AllAuthors[selected]) + batch = append(batch, cmd) + } + } } } m.SelectedAuthors = m.AllAuthors.GetSelected() m.AuthorList, cmd = m.AuthorList.Update(msg) - return m, cmd + batch = append(batch, cmd) + return m, tea.Batch(batch...) case repos: var cmd tea.Cmd + batch := []tea.Cmd{} switch msg := msg.(type) { case tea.KeyMsg: switch msg.String() { - case "space", "enter": - selected := m.RepoList.Cursor() - m.AllRepos[selected].selected = !m.AllRepos[selected].selected + case " ", "enter": + selected := 0 + if !m.RepoList.IsFiltered() { + selected = m.RepoList.Index() + m.AllRepos[selected].selected = !m.AllRepos[selected].selected + cmd = m.RepoList.SetItem(selected, m.AllRepos[selected]) + batch = append(batch, cmd) + } else { + val := m.RepoList.SelectedItem() + selectedItem, ok := val.(selectable) + if ok { + for i, v := range m.AllRepos { + if v.text == selectedItem.text { + selected = i + break + } + } + m.AllRepos[selected].selected = !m.AllRepos[selected].selected + cmd = m.RepoList.SetItem(selected, m.AllRepos[selected]) + batch = append(batch, cmd) + } + } } } m.SelectedRepos = m.AllRepos.GetSelected() m.RepoList, cmd = m.RepoList.Update(msg) - return m, cmd + batch = append(batch, cmd) + return m, tea.Batch(batch...) } + return m, nil } diff --git a/ui/ui.go b/ui/ui.go index 0fea979..7461f78 100644 --- a/ui/ui.go +++ b/ui/ui.go @@ -29,7 +29,7 @@ type ( ) var quitKeys = key.NewBinding( - key.WithKeys("q", "esc", "ctrl+c"), + key.WithKeys("q", "ctrl+c"), key.WithHelp("", "press q to quit"), )