From 33efcdd13e34622be9c324c46c79b8dad8690bae Mon Sep 17 00:00:00 2001 From: Himanshu Date: Sat, 23 Jan 2021 20:40:18 +0530 Subject: [PATCH] feat: add task at current position/bottom of list --- parser/parser.go | 21 +++++++++++++++++---- ui/add.go | 5 +++-- ui/board.go | 10 +++++++++- ui/help.go | 3 ++- 4 files changed, 31 insertions(+), 8 deletions(-) diff --git a/parser/parser.go b/parser/parser.go index 96bd479..944fceb 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -139,15 +139,16 @@ func (d *Data) GetTasks(listIdx int) ([]string, error) { // AddNewTask adds a new task to a list provided the list index and the title of that task. // It returns an error if the index is out of bounds. -func (d *Data) AddNewTask(listIdx int, taskTitle, taskDesc string) error { +func (d *Data) AddNewTask(listIdx int, taskTitle, taskDesc string, taskPos int) error { listCount := d.GetListCount() if err := checkBounds(listIdx, listCount); err != nil { return err } - d.lists[listIdx].listItems = append(d.lists[listIdx].listItems, ListItem{ + newTask := ListItem{ itemName: taskTitle, itemDescription: taskDesc, - }) + } + d.insertTask(listIdx, newTask, taskPos+1) return nil } @@ -190,7 +191,7 @@ func (d *Data) MoveTask(prevTaskIdx, prevListIdx, newListIdx int) error { } taskTitle := d.lists[prevListIdx].listItems[prevTaskIdx].itemName taskDesc := d.lists[prevListIdx].listItems[prevTaskIdx].itemDescription - err = d.AddNewTask(newListIdx, taskTitle, taskDesc) + err = d.AddNewTask(newListIdx, taskTitle, taskDesc, 0) if err != nil { return err } @@ -276,6 +277,18 @@ func (d *Data) GetListCount() int { return len(d.lists) } +func (d *Data) insertTask(listIdx int, task ListItem, taskPos int) { + if len(d.lists[listIdx].listItems) < 1 { + d.lists[listIdx].listItems = append(d.lists[listIdx].listItems, task) + return + } + + d.lists[listIdx].listItems = append(d.lists[listIdx].listItems, ListItem{}) + copy(d.lists[listIdx].listItems[(taskPos+1):], + d.lists[listIdx].listItems[taskPos:]) + d.lists[listIdx].listItems[taskPos] = task +} + func swap(first, second *ListItem) { *second, *first = *first, *second } diff --git a/ui/add.go b/ui/add.go index 50114d5..207a17b 100644 --- a/ui/add.go +++ b/ui/add.go @@ -7,7 +7,7 @@ import ( ) // NewAddPage provides the form to create a new task. -func NewAddPage(p *BoardPage) *tview.Form { +func NewAddPage(p *BoardPage, pos int) *tview.Form { form := tview.NewForm(). AddInputField("Task", "", 20, nil, nil). AddInputField("Task Description", "", 20, nil, nil) @@ -21,13 +21,14 @@ func NewAddPage(p *BoardPage) *tview.Form { } taskDesc := form.GetFormItemByLabel("Task Description").(*tview.InputField).GetText() taskDesc = strings.TrimSpace(taskDesc) - err := p.data.AddNewTask(p.activeListIdx, taskName, taskDesc) + err := p.data.AddNewTask(p.activeListIdx, taskName, taskDesc, pos) if err != nil { app.Stop() panic(err) } p.data.Save(p.fileName) p.redraw(p.activeListIdx) + p.down() pages.SwitchToPage("board") app.SetFocus(p.lists[p.activeListIdx]) }). diff --git a/ui/board.go b/ui/board.go index a4205ac..d9288ba 100644 --- a/ui/board.go +++ b/ui/board.go @@ -319,7 +319,15 @@ func (p *BoardPage) setInputCapture(i int) { case 'L': p.moveRight() case 'a': - pages.AddAndSwitchToPage("add", NewAddPage(p), true) + taskPos := p.activeTaskIdxs[p.activeListIdx] + pages.AddAndSwitchToPage("add", NewAddPage(p, taskPos), true) + case 'A': + lastTaskPos, err := p.data.GetTaskCount(p.activeListIdx) + if err != nil { + app.Stop() + panic(err) + } + pages.AddAndSwitchToPage("add", NewAddPage(p, lastTaskPos-1), true) case 'D': p.removeTask() case 'd': diff --git a/ui/help.go b/ui/help.go index 0b163a7..fefea31 100644 --- a/ui/help.go +++ b/ui/help.go @@ -6,7 +6,8 @@ const helpText = `j: down k: up h: left l: right -a: add task +a: add task under the cursor +A: add task at the end of list D: delete a task d: mark a task as done e: change/edit task