[WIP] Add task editing
This commit is contained in:
@ -93,7 +93,8 @@ func (p ReportPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
case BackMsg:
|
||||
p.subpageActive = false
|
||||
case TaskMsg:
|
||||
p.populateTaskTable(msg)
|
||||
p.tasks = taskwarrior.Tasks(msg)
|
||||
p.populateTaskTable(p.tasks)
|
||||
case UpdateReportMsg:
|
||||
p.activeReport = msg
|
||||
cmds = append(cmds, p.getTasks())
|
||||
@ -106,6 +107,8 @@ func (p ReportPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
cmds = append(cmds, p.getTasks())
|
||||
case AddedTaskMsg:
|
||||
cmds = append(cmds, p.getTasks())
|
||||
case EditedTaskMsg:
|
||||
cmds = append(cmds, p.getTasks())
|
||||
case tea.KeyMsg:
|
||||
switch {
|
||||
case key.Matches(msg, p.common.Keymap.Quit):
|
||||
@ -128,6 +131,12 @@ func (p ReportPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
p.subpageActive = true
|
||||
p.common.PageStack.Push(p)
|
||||
return p.subpage, nil
|
||||
case key.Matches(msg, p.common.Keymap.Edit):
|
||||
p.subpage = NewTaskEditorPage(p.common, *p.selectedTask)
|
||||
p.subpage.Init()
|
||||
p.subpageActive = true
|
||||
p.common.PageStack.Push(p)
|
||||
return p.subpage, nil
|
||||
case key.Matches(msg, p.common.Keymap.SetProject):
|
||||
p.subpage = NewProjectPickerPage(p.common, p.activeProject)
|
||||
p.subpage.Init()
|
||||
@ -152,7 +161,7 @@ func (p ReportPage) View() string {
|
||||
return p.common.Styles.Main.Render(p.taskTable.View()) + "\n"
|
||||
}
|
||||
|
||||
func (p *ReportPage) populateTaskTable(tasks []*taskwarrior.Task) {
|
||||
func (p *ReportPage) populateTaskTable(tasks taskwarrior.Tasks) {
|
||||
nCols := len(p.activeReport.Columns)
|
||||
columns := make([]table.Column, 0)
|
||||
columnSizes := make([]int, nCols)
|
||||
@ -162,7 +171,7 @@ func (p *ReportPage) populateTaskTable(tasks []*taskwarrior.Task) {
|
||||
for i, task := range tasks {
|
||||
row := table.Row{}
|
||||
for i, col := range p.activeReport.Columns {
|
||||
field := task.Get(col)
|
||||
field := task.GetString(col)
|
||||
columnSizes[i] = max(columnSizes[i], len(field))
|
||||
row = append(row, field)
|
||||
}
|
||||
@ -204,8 +213,8 @@ func (p *ReportPage) getTasks() tea.Cmd {
|
||||
if p.activeProject != "" {
|
||||
filters = append(filters, "project:"+p.activeProject)
|
||||
}
|
||||
p.tasks = p.common.TW.GetTasks(p.activeReport, filters...)
|
||||
return TaskMsg(p.tasks)
|
||||
tasks := p.common.TW.GetTasks(p.activeReport, filters...)
|
||||
return TaskMsg(tasks)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -16,6 +16,7 @@ type TaskEditorPage struct {
|
||||
common *common.Common
|
||||
task taskwarrior.Task
|
||||
form *huh.Form
|
||||
edit bool
|
||||
}
|
||||
|
||||
type TaskEditorKeys struct {
|
||||
@ -32,6 +33,10 @@ func NewTaskEditorPage(common *common.Common, task taskwarrior.Task) *TaskEditor
|
||||
task: task,
|
||||
}
|
||||
|
||||
if task.Uuid != "" {
|
||||
p.edit = true
|
||||
}
|
||||
|
||||
if p.task.Priority == "" {
|
||||
p.task.Priority = "(none)"
|
||||
}
|
||||
@ -118,7 +123,11 @@ func (p *TaskEditorPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
}
|
||||
|
||||
if p.form.State == huh.StateCompleted {
|
||||
cmds = append(cmds, p.addTaskCmd)
|
||||
if p.edit {
|
||||
cmds = append(cmds, p.editTaskCmd)
|
||||
} else {
|
||||
cmds = append(cmds, p.addTaskCmd)
|
||||
}
|
||||
model, err := p.common.PageStack.Pop()
|
||||
if err != nil {
|
||||
slog.Error("page stack empty")
|
||||
@ -139,8 +148,15 @@ func (p *TaskEditorPage) addTaskCmd() tea.Msg {
|
||||
return AddedTaskMsg{}
|
||||
}
|
||||
|
||||
func (p *TaskEditorPage) editTaskCmd() tea.Msg {
|
||||
p.common.TW.ModifyTask(&p.task)
|
||||
return EditedTaskMsg{}
|
||||
}
|
||||
|
||||
type AddedTaskMsg struct{}
|
||||
|
||||
type EditedTaskMsg struct{}
|
||||
|
||||
// TODO: move this to taskwarrior; add missing date formats
|
||||
func validateDate(s string) error {
|
||||
formats := []string{
|
||||
|
||||
Reference in New Issue
Block a user