From 111985ce81ef328b4d3daafba143f8855ee3e98e Mon Sep 17 00:00:00 2001 From: Martin Schulze Date: Sun, 28 Jun 2026 10:47:13 +0200 Subject: [PATCH] fix(TaskBody): show due date instead of start date in task list The recurring tasks change (#3021) made the task list prefer the start date over the due date whenever a start date was set, so a task with both a start and a due date wrongly showed its start date and hid the due date (#3187). Revert the date column to its pre-0.18.0 behavior: always show the due date. The start date is not the actionable date in the list, and showing it in the same column as the due date - same style, no label - made it impossible to tell which date was shown. Recurrence does not change this: the completion handler advances the due date (anchored on `task.due || task.start`), so the due date is the relevant value for recurring tasks too. The recurring indicator icon is unaffected. This also restores correct overdue semantics: a task is overdue based on its due date only, not its start date. Fixes #3187 --- src/components/TaskBody.vue | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/components/TaskBody.vue b/src/components/TaskBody.vue index 7ad96a3c9..779a499d1 100644 --- a/src/components/TaskBody.vue +++ b/src/components/TaskBody.vue @@ -82,7 +82,7 @@ License along with this library. If not, see . :title="t('tasks', 'Task has a note')" @click="openAppSidebarTab($event, 'app-sidebar-tab-notes')" @dblclick.stop="openAppSidebarTab($event, 'app-sidebar-tab-notes', true)" /> -
+
{{ dueDateShort }} {{ dueDateLong }}
@@ -289,10 +289,9 @@ export default { }), dueDateShort() { - const taskDate = this.task.startMoment.isValid() ? this.task.startMoment : this.task.dueMoment if (!this.task.completed) { - return taskDate.isValid() - ? taskDate.calendar(null, { + return this.task.dueMoment.isValid() + ? this.task.dueMoment.calendar(null, { // TRANSLATORS This is a string for moment.js. The square brackets escape the string from moment.js. Please translate the string and keep the brackets. lastDay: t('tasks', '[Yesterday]'), // TRANSLATORS This is a string for moment.js. The square brackets escape the string from moment.js. Please translate the string and keep the brackets. @@ -328,10 +327,9 @@ export default { if (this.task.allDay) { return this.dueDateShort } - const taskDate = this.task.startMoment.isValid() ? this.task.startMoment : this.task.dueMoment if (!this.task.completed) { - return taskDate.isValid() - ? taskDate.calendar(null, { + return this.task.dueMoment.isValid() + ? this.task.dueMoment.calendar(null, { // TRANSLATORS This is a string for moment.js. The square brackets escape the string from moment.js. Please translate the string and keep the brackets. lastDay: t('tasks', '[Yesterday at] LT'), // TRANSLATORS This is a string for moment.js. The square brackets escape the string from moment.js. Please translate the string and keep the brackets.