tempus/tui-todo-keys.go

105 lines
2.2 KiB
Go
Raw Normal View History

2024-07-02 09:17:21 +00:00
package main
import (
2024-07-03 02:51:53 +00:00
"github.com/emersion/go-ical"
2024-07-02 09:17:21 +00:00
// "time"
"github.com/charmbracelet/bubbles/list"
"github.com/charmbracelet/bubbles/key"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
// "strings"
// "errors"
)
var (
appStyle = lipgloss.NewStyle().Padding(1, 2)
// titleStyle = lipgloss.NewStyle().
// Foreground(lipgloss.Color("#FFFDF5")).
// Background(lipgloss.Color("#25A065")).
// Padding(0, 1)
statusMessageStyle = lipgloss.NewStyle().
Foreground(lipgloss.AdaptiveColor{Light: "#04B575", Dark: "#04B575"}).
Render
)
// buttons
func (m model) newItemDelegate(keys *delegateKeyMap) list.DefaultDelegate {
d := list.NewDefaultDelegate()
d.UpdateFunc = func(msg tea.Msg, ml *list.Model) tea.Cmd {
var title string
2024-07-03 02:51:53 +00:00
// var todoUID string
var todoIcal ical.Event
2024-07-02 09:17:21 +00:00
if i, ok := ml.SelectedItem().(TODO); ok {
title = i.Title()
2024-07-03 02:51:53 +00:00
// todoUID = i.UID()
todoIcal = ical.Event(i)
2024-07-02 09:17:21 +00:00
} else {
return nil
}
switch msg := msg.(type) {
case tea.KeyMsg:
switch {
case key.Matches(msg, keys.choose):
2024-07-03 02:51:53 +00:00
err := m.CompleteTodo(todoIcal)
if err != nil {return errHandler_tui(err,"can't complete item")}
index := ml.Index()
ml.RemoveItem(index)
if len(ml.Items()) == 0 {
keys.choose.SetEnabled(false)
}
2024-07-02 09:17:21 +00:00
return ml.NewStatusMessage(statusMessageStyle("You chose " + title))
case key.Matches(msg, keys.remove):
2024-07-03 02:51:53 +00:00
err := m.DelTodo(todoIcal)
2024-07-02 09:17:21 +00:00
if err != nil {return errHandler_tui(err,"can't delete item")}
index := ml.Index()
ml.RemoveItem(index)
if len(ml.Items()) == 0 {
keys.remove.SetEnabled(false)
}
return ml.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
}
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"),
),
}
}