diff --git a/src/components/tasks/partials/singleTaskInProject.vue b/src/components/tasks/partials/singleTaskInProject.vue index 6ac02421e..f7974d86c 100644 --- a/src/components/tasks/partials/singleTaskInProject.vue +++ b/src/components/tasks/partials/singleTaskInProject.vue @@ -49,7 +49,7 @@ :labels="task.labels" /> - - – {{ $t('task.detail.due', {at: formatDateSince(task.dueDate)}) }} + – {{ $t('task.detail.due', {at: dueDateFormatted}) }} @@ -119,7 +119,7 @@ - + @@ -127,7 +127,7 @@ import {ref, watch, shallowReactive, onMounted, onBeforeUnmount, computed} from 'vue' import {useI18n} from 'vue-i18n' -import TaskModel, { getHexColor } from '@/models/task' +import TaskModel, {getHexColor} from '@/models/task' import type {ITask} from '@/modelTypes/ITask' import PriorityLabel from '@/components/tasks/partials/priorityLabel.vue' @@ -150,6 +150,7 @@ import {useProjectStore} from '@/stores/projects' import {useBaseStore} from '@/stores/base' import {useTaskStore} from '@/stores/tasks' import AssigneeList from '@/components/tasks/partials/assigneeList.vue' +import {useIntervalFn} from '@vueuse/core' const { theTask, @@ -212,6 +213,20 @@ const taskDetailRoute = computed(() => ({ // state: { backdropView: router.currentRoute.value.fullPath }, })) +function updateDueDate() { + if (!task.value.dueDate) { + return + } + + dueDateFormatted.value = formatDateSince(task.value.dueDate) +} + +const dueDateFormatted = ref('') +useIntervalFn(updateDueDate, 60_000, { + immediateCallback: true, +}) +onMounted(updateDueDate) + async function markAsDone(checked: boolean) { const updateFunc = async () => { @@ -246,6 +261,7 @@ async function toggleFavorite() { } const deferDueDate = ref(null) + function hideDeferDueDatePopup(e) { if (!showDefer.value) { return @@ -281,7 +297,7 @@ function hideDeferDueDatePopup(e) { -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; - + flex: 1 0 50%; .dueDate { @@ -391,7 +407,7 @@ function hideDeferDueDatePopup(e) { color: var(--danger); } - input[type="checkbox"] { + input[type='checkbox'] { vertical-align: middle; } diff --git a/src/helpers/time/formatDate.ts b/src/helpers/time/formatDate.ts index 76d5ab7a2..3d546ee32 100644 --- a/src/helpers/time/formatDate.ts +++ b/src/helpers/time/formatDate.ts @@ -5,8 +5,8 @@ import {format, formatDistanceToNow} from 'date-fns' import {enGB, de, fr, ru} from 'date-fns/locale' import {i18n} from '@/i18n' -import { createSharedComposable, type MaybeRef } from '@vueuse/core' -import { computed, unref } from 'vue' +import {createSharedComposable, type MaybeRef} from '@vueuse/core' +import {computed, unref} from 'vue' const locales = {en: enGB, de, ch: de, fr, ru} @@ -62,7 +62,7 @@ export const useDateTimeFormatter = createSharedComposable((options?: MaybeRef (date: Date) => dateTimeFormatter.value.format(date)) } \ No newline at end of file