/
list.go
85 lines (69 loc) · 1.74 KB
/
list.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package usecases
import (
"os"
"strconv"
"github.com/dondakeshimo/todo-cli/pkg/domain/task"
"github.com/olekukonko/tablewriter"
)
type columns struct {
id string
task string
group string
remindTime string
reminder string
priority string
}
// List is a function that show task list.
func List(group string) error {
h, err := task.NewHandler(taskRepository)
if err != nil {
return err
}
table := tablewriter.NewWriter(os.Stdout)
table.SetAutoFormatHeaders(false) // for preventing header from being made upper case automatically
table.SetColWidth(config.ColumnWidth)
header := columns{
id: "ID",
task: "Task",
group: "Group",
remindTime: "RemindTime",
reminder: "Reminder",
priority: "Priority",
}
table.SetHeader(buildRowAccordingToConfig(header))
tasks := h.GetTasks()
if group != "" {
tasks = h.GetTasksInGroup(group)
}
for _, t := range tasks {
row := columns{
id: strconv.Itoa(t.ID()),
task: t.Task(),
group: t.Group(),
remindTime: string(t.RemindTime()),
reminder: string(t.Reminder()),
priority: strconv.Itoa(t.Priority()),
}
table.Append(buildRowAccordingToConfig(row))
}
table.Render()
return nil
}
// buildColumnAccordingToSetting build a row of table according to hide-setting.
// this function define column order.
func buildRowAccordingToConfig(row columns) []string {
builtRow := []string{row.id, row.task}
if !config.HideRemindTime {
builtRow = append(builtRow, row.remindTime)
}
if !config.HideGroup {
builtRow = append(builtRow, row.group)
}
if !config.HideReminder {
builtRow = append(builtRow, row.reminder)
}
if !config.HidePriority {
builtRow = append(builtRow, row.priority)
}
return builtRow
}