From 13e94ff93442bf485aca14c2b935298a2af54e4f Mon Sep 17 00:00:00 2001 From: Tobias Frischmann Date: Thu, 17 Sep 2026 14:12:54 +0200 Subject: [PATCH] add option to switch week --- app/components/TimeHeader.vue | 92 +++++++++++++------ .../Todo/TimeDisplay/TimeDisplayPoint.vue | 17 ++-- .../Todo/TimeDisplay/TimeDisplayRange.vue | 21 +++-- app/components/Todo/Todos.vue | 2 +- app/composables/useWeekDays.ts | 42 ++++++--- 5 files changed, 116 insertions(+), 58 deletions(-) diff --git a/app/components/TimeHeader.vue b/app/components/TimeHeader.vue index 08de396..c9502ee 100644 --- a/app/components/TimeHeader.vue +++ b/app/components/TimeHeader.vue @@ -1,39 +1,73 @@ diff --git a/app/components/Todo/TimeDisplay/TimeDisplayPoint.vue b/app/components/Todo/TimeDisplay/TimeDisplayPoint.vue index 4e0ee45..7fa954e 100644 --- a/app/components/Todo/TimeDisplay/TimeDisplayPoint.vue +++ b/app/components/Todo/TimeDisplay/TimeDisplayPoint.vue @@ -5,15 +5,20 @@ const { point } = defineProps<{ point: TimePoint }>(); + const weekOffset = useWeekOffset(); + const start = computed(() => { + const now = new Date(); + now.setHours(0, 0, 0, 0); + + return addDays(now, weekOffset.value * 7); + }); + const time = computed(() => { return parseAbsoluteToLocal(point.time).toDate().getTime(); }); const offset = computed(() => { - const now = new Date(); - now.setHours(0, 0, 0, 0); - - const timeDiff = time.value - now.getTime(); + const timeDiff = time.value - start.value.getTime(); const numberOfDays = timeDiff / (24 * 60 * 60 * 1000.0); const percentage = numberOfDays / 7.0; @@ -21,11 +26,11 @@ }); const isCappedRight = computed(() => { - return time.value > addDays(sanitizeDate(new Date()), 7).getTime(); + return time.value > addDays(sanitizeDate(start.value), 7).getTime(); }); const isCappedLeft = computed(() => { - return time.value < sanitizeDate(new Date()).getTime(); + return time.value < sanitizeDate(start.value).getTime(); }); diff --git a/app/components/Todo/TimeDisplay/TimeDisplayRange.vue b/app/components/Todo/TimeDisplay/TimeDisplayRange.vue index ad4797d..6da2e30 100644 --- a/app/components/Todo/TimeDisplay/TimeDisplayRange.vue +++ b/app/components/Todo/TimeDisplay/TimeDisplayRange.vue @@ -5,6 +5,14 @@ const { range } = defineProps<{ range: TimeRange }>(); + const weekOffset = useWeekOffset(); + const start = computed(() => { + const now = new Date(); + now.setHours(0, 0, 0, 0); + + return addDays(now, weekOffset.value * 7); + }); + const timeFrameString = computed(() => { return `${range.start.toWellFormed()} - ${range.end.toWellFormed()}`; }); @@ -21,8 +29,8 @@ function capTime(time: number): number { return Math.min( - Math.max(time, sanitizeDate(new Date()).getTime()), - addDays(sanitizeDate(new Date()), 7).getTime(), + Math.max(time, sanitizeDate(start.value).getTime()), + addDays(sanitizeDate(start.value), 7).getTime(), ); } @@ -41,21 +49,18 @@ }); const offset = computed(() => { - const now = new Date(); - now.setHours(0, 0, 0, 0); - - const timeDiff = cappedTime.value.start - now.getTime(); + const timeDiff = cappedTime.value.start - start.value.getTime(); const numberOfDays = timeDiff / (24 * 60 * 60 * 1000.0); const percentage = numberOfDays / 7.0; return percentage; }); const isCappedRight = computed(() => { - return time.value.end > addDays(sanitizeDate(new Date()), 7).getTime(); + return time.value.end > addDays(sanitizeDate(start.value), 7).getTime(); }); const isCappedLeft = computed(() => { - return time.value.start < sanitizeDate(new Date()).getTime(); + return time.value.start < sanitizeDate(start.value).getTime(); }); diff --git a/app/components/Todo/Todos.vue b/app/components/Todo/Todos.vue index 5282c53..c3d87a2 100644 --- a/app/components/Todo/Todos.vue +++ b/app/components/Todo/Todos.vue @@ -18,7 +18,7 @@