Fix new project/tags
This commit is contained in:
@ -9,6 +9,7 @@ type Keymap struct {
|
|||||||
Quit key.Binding
|
Quit key.Binding
|
||||||
Back key.Binding
|
Back key.Binding
|
||||||
Ok key.Binding
|
Ok key.Binding
|
||||||
|
Delete key.Binding
|
||||||
Input key.Binding
|
Input key.Binding
|
||||||
Add key.Binding
|
Add key.Binding
|
||||||
Edit key.Binding
|
Edit key.Binding
|
||||||
@ -45,6 +46,11 @@ func NewKeymap() *Keymap {
|
|||||||
key.WithHelp("enter", "Ok"),
|
key.WithHelp("enter", "Ok"),
|
||||||
),
|
),
|
||||||
|
|
||||||
|
Delete: key.NewBinding(
|
||||||
|
key.WithKeys("d"),
|
||||||
|
key.WithHelp("d", "Delete"),
|
||||||
|
),
|
||||||
|
|
||||||
Input: key.NewBinding(
|
Input: key.NewBinding(
|
||||||
key.WithKeys(":"),
|
key.WithKeys(":"),
|
||||||
key.WithHelp(":", "Input"),
|
key.WithHelp(":", "Input"),
|
||||||
|
|||||||
@ -18,6 +18,7 @@ type ReportPage struct {
|
|||||||
activeContext *taskwarrior.Context
|
activeContext *taskwarrior.Context
|
||||||
activeProject string
|
activeProject string
|
||||||
selectedTask *taskwarrior.Task
|
selectedTask *taskwarrior.Task
|
||||||
|
taskCursor int
|
||||||
|
|
||||||
tasks taskwarrior.Tasks
|
tasks taskwarrior.Tasks
|
||||||
|
|
||||||
@ -109,6 +110,9 @@ func (p *ReportPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
case key.Matches(msg, p.common.Keymap.Ok):
|
case key.Matches(msg, p.common.Keymap.Ok):
|
||||||
p.common.TW.SetTaskDone(p.selectedTask)
|
p.common.TW.SetTaskDone(p.selectedTask)
|
||||||
return p, p.getTasks()
|
return p, p.getTasks()
|
||||||
|
case key.Matches(msg, p.common.Keymap.Delete):
|
||||||
|
p.common.TW.DeleteTask(p.selectedTask)
|
||||||
|
return p, p.getTasks()
|
||||||
case key.Matches(msg, p.common.Keymap.SetProject):
|
case key.Matches(msg, p.common.Keymap.SetProject):
|
||||||
p.subpage = NewProjectPickerPage(p.common, p.activeProject)
|
p.subpage = NewProjectPickerPage(p.common, p.activeProject)
|
||||||
p.subpage.Init()
|
p.subpage.Init()
|
||||||
@ -167,7 +171,7 @@ func (p *ReportPage) populateTaskTable(tasks taskwarrior.Tasks) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
selected := 0
|
selected := p.taskTable.Cursor()
|
||||||
|
|
||||||
if p.selectedTask != nil {
|
if p.selectedTask != nil {
|
||||||
for i, task := range tasks {
|
for i, task := range tasks {
|
||||||
@ -176,6 +180,9 @@ func (p *ReportPage) populateTaskTable(tasks taskwarrior.Tasks) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if selected > len(tasks)-1 {
|
||||||
|
selected = len(tasks) - 1
|
||||||
|
}
|
||||||
|
|
||||||
p.taskTable = table.New(
|
p.taskTable = table.New(
|
||||||
p.common,
|
p.common,
|
||||||
|
|||||||
@ -3,6 +3,8 @@ package pages
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log/slog"
|
"log/slog"
|
||||||
|
"slices"
|
||||||
|
"strings"
|
||||||
"tasksquire/common"
|
"tasksquire/common"
|
||||||
|
|
||||||
"tasksquire/taskwarrior"
|
"tasksquire/taskwarrior"
|
||||||
@ -50,6 +52,8 @@ func NewTaskEditorPage(com *common.Common, task taskwarrior.Task) *TaskEditorPag
|
|||||||
priorityOptions := append([]string{"(none)"}, p.common.TW.GetPriorities()...)
|
priorityOptions := append([]string{"(none)"}, p.common.TW.GetPriorities()...)
|
||||||
projectOptions := append([]string{"(none)"}, p.common.TW.GetProjects()...)
|
projectOptions := append([]string{"(none)"}, p.common.TW.GetProjects()...)
|
||||||
tagOptions := p.common.TW.GetTags()
|
tagOptions := p.common.TW.GetTags()
|
||||||
|
tagOptions = append(tagOptions, strings.Split(p.common.TW.GetConfig().Get("uda.tasksquire.tags.default"), ",")...)
|
||||||
|
slices.Sort(tagOptions)
|
||||||
|
|
||||||
p.areas = map[area]tea.Model{
|
p.areas = map[area]tea.Model{
|
||||||
areaTask: NewTaskEdit(p.common, &p.task.Description, &p.task.Priority, &p.task.Project, priorityOptions, projectOptions),
|
areaTask: NewTaskEdit(p.common, &p.task.Description, &p.task.Priority, &p.task.Project, priorityOptions, projectOptions),
|
||||||
@ -63,9 +67,10 @@ func NewTaskEditorPage(com *common.Common, task taskwarrior.Task) *TaskEditorPag
|
|||||||
|
|
||||||
p.areaPicker = NewAreaPicker(com, []string{"Task", "Tags", "Dates"})
|
p.areaPicker = NewAreaPicker(com, []string{"Task", "Tags", "Dates"})
|
||||||
|
|
||||||
|
p.columnCursor = 1
|
||||||
if p.task.Uuid == "" {
|
if p.task.Uuid == "" {
|
||||||
// p.mode = modeInsert
|
// p.mode = modeInsert
|
||||||
p.mode = modeNormal
|
p.mode = modeInsert
|
||||||
} else {
|
} else {
|
||||||
p.mode = modeNormal
|
p.mode = modeNormal
|
||||||
}
|
}
|
||||||
@ -173,7 +178,9 @@ func (p *TaskEditorPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
case key.Matches(msg, p.common.Keymap.Back):
|
case key.Matches(msg, p.common.Keymap.Back):
|
||||||
return p, changeMode(modeNormal)
|
return p, changeMode(modeNormal)
|
||||||
case key.Matches(msg, p.common.Keymap.Ok):
|
case key.Matches(msg, p.common.Keymap.Ok):
|
||||||
return p, nextField()
|
area, cmd := p.areas[p.area].Update(msg)
|
||||||
|
p.areas[p.area] = area
|
||||||
|
return p, tea.Batch(cmd, nextField())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -788,9 +795,15 @@ func (p *TaskEditorPage) updateTasksCmd() tea.Msg {
|
|||||||
if p.task.Priority == "(none)" {
|
if p.task.Priority == "(none)" {
|
||||||
p.task.Priority = ""
|
p.task.Priority = ""
|
||||||
}
|
}
|
||||||
// if p.additionalTags != "" {
|
|
||||||
// p.task.Tags = append(p.task.Tags, strings.Split(p.additionalTags, " ")...)
|
if *p.areas[areaTask].(taskEdit).newProjectName != "" {
|
||||||
// }
|
p.task.Project = *p.areas[areaTask].(taskEdit).newProjectName
|
||||||
|
}
|
||||||
|
|
||||||
|
if *p.areas[areaTags].(tagEdit).newTagsValue != "" {
|
||||||
|
p.task.Tags = append(p.task.Tags, strings.Split(*p.areas[areaTags].(tagEdit).newTagsValue, " ")...)
|
||||||
|
}
|
||||||
|
|
||||||
// if p.additionalProject != "" {
|
// if p.additionalProject != "" {
|
||||||
// p.task.Project = p.additionalProject
|
// p.task.Project = p.additionalProject
|
||||||
// }
|
// }
|
||||||
|
|||||||
@ -14,6 +14,7 @@ var (
|
|||||||
defaultConfig = map[string]string{
|
defaultConfig = map[string]string{
|
||||||
"uda.tasksquire.report.default": "next",
|
"uda.tasksquire.report.default": "next",
|
||||||
"uda.tasksquire.tag.default": "next",
|
"uda.tasksquire.tag.default": "next",
|
||||||
|
"uda.tasksquire.tags.default": "low_energy,customer,delegate,code,communication,research",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -93,6 +93,7 @@ type TaskWarrior interface {
|
|||||||
AddTask(task *Task) error
|
AddTask(task *Task) error
|
||||||
ImportTask(task *Task)
|
ImportTask(task *Task)
|
||||||
SetTaskDone(task *Task)
|
SetTaskDone(task *Task)
|
||||||
|
DeleteTask(task *Task)
|
||||||
StartTask(task *Task)
|
StartTask(task *Task)
|
||||||
StopTask(task *Task)
|
StopTask(task *Task)
|
||||||
|
|
||||||
@ -394,6 +395,18 @@ func (ts *TaskSquire) SetTaskDone(task *Task) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ts *TaskSquire) DeleteTask(task *Task) {
|
||||||
|
ts.mutex.Lock()
|
||||||
|
defer ts.mutex.Unlock()
|
||||||
|
|
||||||
|
cmd := exec.Command(twBinary, append(ts.defaultArgs, []string{task.Uuid, "delete"}...)...)
|
||||||
|
err := cmd.Run()
|
||||||
|
if err != nil {
|
||||||
|
slog.Error("Failed deleting task:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (ts *TaskSquire) Undo() {
|
func (ts *TaskSquire) Undo() {
|
||||||
ts.mutex.Lock()
|
ts.mutex.Lock()
|
||||||
defer ts.mutex.Unlock()
|
defer ts.mutex.Unlock()
|
||||||
|
|||||||
Reference in New Issue
Block a user