summaryrefslogtreecommitdiff
path: root/internal/ui/table.go
diff options
context:
space:
mode:
authorPaul Bütow <1224732+snonux@users.noreply.github.com>2025-06-20 21:27:03 +0300
committerPaul Bütow <1224732+snonux@users.noreply.github.com>2025-06-20 21:27:03 +0300
commit3239f41ac7a00342dcc4dd26e699230981f168e3 (patch)
treef5a680d86a7a712159f90df5eda46b78c6589804 /internal/ui/table.go
parent1989b6a3d4339321797a442d2fa2bbee21e23cd1 (diff)
add priority selection hotkey
Diffstat (limited to 'internal/ui/table.go')
-rw-r--r--internal/ui/table.go56
1 files changed, 56 insertions, 0 deletions
diff --git a/internal/ui/table.go b/internal/ui/table.go
index b175776..024be5a 100644
--- a/internal/ui/table.go
+++ b/internal/ui/table.go
@@ -17,6 +17,8 @@ import (
"tasksamurai/internal/task"
)
+var priorityOptions = []string{"H", "M", "L", ""}
+
func init() {
rand.Seed(time.Now().UnixNano())
}
@@ -36,6 +38,10 @@ type Model struct {
dueID int
dueInput textinput.Model
+ prioritySelecting bool
+ priorityID int
+ priorityIndex int
+
filters []string
tasks []task.Task
@@ -183,6 +189,23 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.dueInput, cmd = m.dueInput.Update(msg)
return m, cmd
}
+ if m.prioritySelecting {
+ switch msg.Type {
+ case tea.KeyEnter:
+ task.SetPriority(m.priorityID, priorityOptions[m.priorityIndex])
+ m.prioritySelecting = false
+ m.reload()
+ return m, nil
+ case tea.KeyEsc:
+ m.prioritySelecting = false
+ return m, nil
+ case tea.KeyLeft:
+ m.priorityIndex = (m.priorityIndex + len(priorityOptions) - 1) % len(priorityOptions)
+ case tea.KeyRight:
+ m.priorityIndex = (m.priorityIndex + 1) % len(priorityOptions)
+ }
+ return m, nil
+ }
switch msg.String() {
case "?":
m.showHelp = true
@@ -256,6 +279,16 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.reload()
}
}
+ case "p":
+ if row := m.tbl.SelectedRow(); row != nil {
+ idStr := ansi.Strip(row[0])
+ if id, err := strconv.Atoi(idStr); err == nil {
+ m.priorityID = id
+ m.prioritySelecting = true
+ m.priorityIndex = 0
+ return m, nil
+ }
+ }
case "a":
if row := m.tbl.SelectedRow(); row != nil {
idStr := ansi.Strip(row[0])
@@ -305,6 +338,7 @@ func (m Model) View() string {
"r: random due date",
"a: annotate task",
"A: replace annotations",
+ "p: set priority",
"q: quit",
"?: help", // show help toggle line
)
@@ -326,6 +360,12 @@ func (m Model) View() string {
m.dueInput.View(),
)
}
+ if m.prioritySelecting {
+ view = lipgloss.JoinVertical(lipgloss.Left,
+ view,
+ m.priorityView(),
+ )
+ }
return view
}
@@ -415,3 +455,19 @@ func formatPriority(p string) string {
}
return style.Render(p)
}
+
+func (m Model) priorityView() string {
+ var parts []string
+ for i, p := range priorityOptions {
+ label := p
+ if label == "" {
+ label = "none"
+ }
+ style := lipgloss.NewStyle()
+ if i == m.priorityIndex {
+ style = style.Foreground(lipgloss.Color("229")).Background(lipgloss.Color("57"))
+ }
+ parts = append(parts, style.Render(label))
+ }
+ return "priority: " + strings.Join(parts, " ")
+}