allow selected items in filter

This commit is contained in:
2023-03-02 11:32:56 -08:00
parent 1b47179339
commit 10bd84e984
3 changed files with 54 additions and 11 deletions

View File

@@ -46,7 +46,7 @@ type delegateKeyMap struct {
func newDelegateKeyMap() *delegateKeyMap { func newDelegateKeyMap() *delegateKeyMap {
return &delegateKeyMap{ return &delegateKeyMap{
toggle: key.NewBinding( toggle: key.NewBinding(
key.WithKeys("space"), key.WithKeys(" "),
key.WithHelp("space", "choose"), key.WithHelp("space", "choose"),
), ),
} }

View File

@@ -49,7 +49,7 @@ func (i selectablelist) GetSelected() []string {
var settingsKey = key.NewBinding( var settingsKey = key.NewBinding(
key.WithKeys("ctrl+g"), 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) { 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 { switch m.cursor {
case authors: case authors:
var cmd tea.Cmd var cmd tea.Cmd
batch := []tea.Cmd{}
switch msg := msg.(type) { switch msg := msg.(type) {
case tea.KeyMsg: case tea.KeyMsg:
switch msg.String() { switch msg.String() {
case "space", "enter": case " ", "enter":
selected := m.AuthorList.Cursor() selected := 0
if !m.AuthorList.IsFiltered() {
selected = m.AuthorList.Index()
m.AllAuthors[selected].selected = !m.AllAuthors[selected].selected 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.SelectedAuthors = m.AllAuthors.GetSelected()
m.AuthorList, cmd = m.AuthorList.Update(msg) m.AuthorList, cmd = m.AuthorList.Update(msg)
return m, cmd batch = append(batch, cmd)
return m, tea.Batch(batch...)
case repos: case repos:
var cmd tea.Cmd var cmd tea.Cmd
batch := []tea.Cmd{}
switch msg := msg.(type) { switch msg := msg.(type) {
case tea.KeyMsg: case tea.KeyMsg:
switch msg.String() { switch msg.String() {
case "space", "enter": case " ", "enter":
selected := m.RepoList.Cursor() selected := 0
if !m.RepoList.IsFiltered() {
selected = m.RepoList.Index()
m.AllRepos[selected].selected = !m.AllRepos[selected].selected 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.SelectedRepos = m.AllRepos.GetSelected()
m.RepoList, cmd = m.RepoList.Update(msg) m.RepoList, cmd = m.RepoList.Update(msg)
return m, cmd batch = append(batch, cmd)
return m, tea.Batch(batch...)
} }
return m, nil return m, nil
} }

View File

@@ -29,7 +29,7 @@ type (
) )
var quitKeys = key.NewBinding( var quitKeys = key.NewBinding(
key.WithKeys("q", "esc", "ctrl+c"), key.WithKeys("q", "ctrl+c"),
key.WithHelp("", "press q to quit"), key.WithHelp("", "press q to quit"),
) )