summaryrefslogtreecommitdiff
path: root/internal/ui/table.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-02-28 09:59:06 +0200
committerPaul Buetow <paul@buetow.org>2026-02-28 12:50:12 +0200
commitdbf8980f1bc5428d1eb463505968469617dbf3fc (patch)
treec94c057bfe6d2d8ff3763a64a30cefd59d76cd87 /internal/ui/table.go
parentd2cc2def17b58da762d88090c0c298dc2e87dd1d (diff)
refactor(task): centralize Taskwarrior date format as task.DateFormat
DRY/MEDIUM task (UUID 2c74960f): the format string "20060102T150405Z" was hardcoded in 5+ places across the task and ui packages. - Export task.DateFormat constant from internal/task/task.go - Replace hardcoded string in task.go and stats.go with DateFormat - Update internal/ui/helpers.go to alias the constant (taskDateFormat = task.DateFormat) rather than repeating the string literal - Replace all 6 raw string literals in table.go with task.DateFormat - Remove duplicate dueText() from table.go; its only call site now uses formatDueText() from helpers.go, which also normalises to midnight UTC for more accurate day-difference calculations Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal/ui/table.go')
-rw-r--r--internal/ui/table.go32
1 files changed, 6 insertions, 26 deletions
diff --git a/internal/ui/table.go b/internal/ui/table.go
index 2cc2b3d..97011ff 100644
--- a/internal/ui/table.go
+++ b/internal/ui/table.go
@@ -927,7 +927,7 @@ func (m Model) taskToRow(t task.Task) atable.Row {
}
age := ""
- if ts, err := time.Parse("20060102T150405Z", t.Entry); err == nil {
+ if ts, err := time.Parse(task.DateFormat, t.Entry); err == nil {
days := int(time.Since(ts).Hours() / 24)
age = fmt.Sprintf("%dd", days)
}
@@ -967,7 +967,7 @@ func (m Model) formatDue(s string, width int) string {
if s == "" {
return ""
}
- ts, err := time.Parse("20060102T150405Z", s)
+ ts, err := time.Parse(task.DateFormat, s)
if err != nil {
return s
}
@@ -1078,7 +1078,7 @@ func (m Model) taskToRowSearch(t task.Task, re *regexp.Regexp, styles atable.Sty
}
age := ""
- if ts, err := time.Parse("20060102T150405Z", t.Entry); err == nil {
+ if ts, err := time.Parse(task.DateFormat, t.Entry); err == nil {
days := int(time.Since(ts).Hours() / 24)
age = fmt.Sprintf("%dd", days)
}
@@ -1146,7 +1146,7 @@ func (m Model) expandedCellView() string {
case 1:
val = strconv.Itoa(t.ID)
case 2:
- if ts, err := time.Parse("20060102T150405Z", t.Entry); err == nil {
+ if ts, err := time.Parse(task.DateFormat, t.Entry); err == nil {
days := int(time.Since(ts).Hours() / 24)
val = fmt.Sprintf("%dd", days)
}
@@ -1223,26 +1223,6 @@ func (m *Model) updateTableHeight() {
m.tbl.SetHeight(h)
}
-func dueText(s string) string {
- if s == "" {
- return ""
- }
- ts, err := time.Parse("20060102T150405Z", s)
- if err != nil {
- return s
- }
- days := int(time.Until(ts).Hours() / 24)
- switch days {
- case 0:
- return "today"
- case 1:
- return "tomorrow"
- case -1:
- return "yesterday"
- default:
- return fmt.Sprintf("%dd", days)
- }
-}
func (m *Model) computeColumnWidths() {
maxID := 1
@@ -1258,7 +1238,7 @@ func (m *Model) computeColumnWidths() {
maxID = l
}
age := ""
- if ts, err := time.Parse("20060102T150405Z", t.Entry); err == nil {
+ if ts, err := time.Parse(task.DateFormat, t.Entry); err == nil {
age = fmt.Sprintf("%dd", int(time.Since(ts).Hours()/24))
}
if l := len(age); l > maxAge {
@@ -1268,7 +1248,7 @@ func (m *Model) computeColumnWidths() {
if l := len(urg); l > maxUrg {
maxUrg = l
}
- due := dueText(t.Due)
+ due := formatDueText(t.Due)
if l := len(due); l > maxDue {
maxDue = l
}