mirror of
https://codeberg.org/scip/anydb.git
synced 2025-12-17 12:31:02 +01:00
initial try
This commit is contained in:
96
ui/delegate.go
Normal file
96
ui/delegate.go
Normal file
@@ -0,0 +1,96 @@
|
||||
package ui
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/charmbracelet/bubbles/key"
|
||||
"github.com/charmbracelet/bubbles/list"
|
||||
tea "github.com/charmbracelet/bubbletea"
|
||||
"github.com/tlinden/anydb/app"
|
||||
"github.com/tlinden/anydb/cfg"
|
||||
)
|
||||
|
||||
func newItemDelegate(keys *delegateKeyMap, config *cfg.Config) list.DefaultDelegate {
|
||||
d := list.NewDefaultDelegate()
|
||||
|
||||
d.UpdateFunc = func(msg tea.Msg, m *list.Model) tea.Cmd {
|
||||
var title string
|
||||
|
||||
if entry, ok := m.SelectedItem().(app.DbEntry); ok {
|
||||
title = entry.Title()
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
|
||||
switch msg := msg.(type) {
|
||||
case tea.KeyMsg:
|
||||
switch {
|
||||
case key.Matches(msg, keys.choose):
|
||||
return m.NewStatusMessage(statusMessageStyle("You chose " + title))
|
||||
|
||||
case key.Matches(msg, keys.remove):
|
||||
if err := config.DB.Del(&app.DbAttr{Key: title}); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
index := m.Index()
|
||||
m.RemoveItem(index)
|
||||
if len(m.Items()) == 0 {
|
||||
keys.remove.SetEnabled(false)
|
||||
}
|
||||
return m.NewStatusMessage(statusMessageStyle("Deleted " + title))
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
help := []key.Binding{keys.choose, keys.remove}
|
||||
|
||||
d.ShortHelpFunc = func() []key.Binding {
|
||||
return help
|
||||
}
|
||||
|
||||
d.FullHelpFunc = func() [][]key.Binding {
|
||||
return [][]key.Binding{help}
|
||||
}
|
||||
|
||||
return d
|
||||
}
|
||||
|
||||
type delegateKeyMap struct {
|
||||
choose key.Binding
|
||||
remove key.Binding
|
||||
}
|
||||
|
||||
// Additional short help entries. This satisfies the help.KeyMap interface and
|
||||
// is entirely optional.
|
||||
func (d delegateKeyMap) ShortHelp() []key.Binding {
|
||||
return []key.Binding{
|
||||
d.choose,
|
||||
d.remove,
|
||||
}
|
||||
}
|
||||
|
||||
// Additional full help entries. This satisfies the help.KeyMap interface and
|
||||
// is entirely optional.
|
||||
func (d delegateKeyMap) FullHelp() [][]key.Binding {
|
||||
return [][]key.Binding{
|
||||
{
|
||||
d.choose,
|
||||
d.remove,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func newDelegateKeyMap() *delegateKeyMap {
|
||||
return &delegateKeyMap{
|
||||
choose: key.NewBinding(
|
||||
key.WithKeys("enter"),
|
||||
key.WithHelp("enter", "choose"),
|
||||
),
|
||||
remove: key.NewBinding(
|
||||
key.WithKeys("x", "backspace"),
|
||||
key.WithHelp("x", "delete"),
|
||||
),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user