From bd9bd556f4021bdf374e9888e8b8594328024ac2 Mon Sep 17 00:00:00 2001
From: Till-JS <101404291+Till-JS@users.noreply.github.com>
Date: Mon, 2 Feb 2026 18:54:05 +0100
Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=B8=20feat(calendar):=20hide=20tasks?=
=?UTF-8?q?=20by=20default=20and=20scroll=20to=20midday=20on=20load?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- Add showTasksInCalendar setting (default: false) to hide task blocks
- Auto-scroll time-grid views to 12:00 on initial load for better UX
- Tasks can be re-enabled via settings toggle
---
.../lib/components/calendar/DayView.svelte | 38 ++++++------
.../components/calendar/MultiDayView.svelte | 62 ++++++++++---------
.../components/calendar/ViewCarousel.svelte | 38 +++++++++++-
.../lib/components/calendar/WeekView.svelte | 62 ++++++++++---------
.../web/src/lib/stores/settings.svelte.ts | 11 ++++
5 files changed, 132 insertions(+), 79 deletions(-)
diff --git a/apps/calendar/apps/web/src/lib/components/calendar/DayView.svelte b/apps/calendar/apps/web/src/lib/components/calendar/DayView.svelte
index 34f4a64b0..f21b2776c 100644
--- a/apps/calendar/apps/web/src/lib/components/calendar/DayView.svelte
+++ b/apps/calendar/apps/web/src/lib/components/calendar/DayView.svelte
@@ -813,24 +813,26 @@
/>
{/each}
-
- {#each getScheduledTasks() as task (task.id)}
- {@const isTaskBeingDragged = isTaskDragging && draggedTask?.id === task.id}
- {@const isTaskBeingResized = isTaskResizing && resizeTask?.id === task.id}
-
- {/each}
+
+ {#if settingsStore.showTasksInCalendar}
+ {#each getScheduledTasks() as task (task.id)}
+ {@const isTaskBeingDragged = isTaskDragging && draggedTask?.id === task.id}
+ {@const isTaskBeingResized = isTaskResizing && resizeTask?.id === task.id}
+
+ {/each}
+ {/if}
{#if overflowEvents.before.length > 0}
diff --git a/apps/calendar/apps/web/src/lib/components/calendar/MultiDayView.svelte b/apps/calendar/apps/web/src/lib/components/calendar/MultiDayView.svelte
index abfb51478..038b02d2b 100644
--- a/apps/calendar/apps/web/src/lib/components/calendar/MultiDayView.svelte
+++ b/apps/calendar/apps/web/src/lib/components/calendar/MultiDayView.svelte
@@ -976,37 +976,39 @@
{/each}
-
- {#each getScheduledTasksForDay(day) as task (task.id)}
- {@const isTaskBeingDragged = isTaskDragging && draggedTask?.id === task.id}
- {@const isTaskBeingResized = isTaskResizing && resizeTask?.id === task.id}
- {@const isTaskCrossDayDrag =
- isTaskBeingDragged &&
- taskDragTargetDay !== null &&
- !isSameDay(day, taskDragTargetDay)}
-
- {/each}
+
+ {#if settingsStore.showTasksInCalendar}
+ {#each getScheduledTasksForDay(day) as task (task.id)}
+ {@const isTaskBeingDragged = isTaskDragging && draggedTask?.id === task.id}
+ {@const isTaskBeingResized = isTaskResizing && resizeTask?.id === task.id}
+ {@const isTaskCrossDayDrag =
+ isTaskBeingDragged &&
+ taskDragTargetDay !== null &&
+ !isSameDay(day, taskDragTargetDay)}
+
+ {/each}
-
- {#if isTaskDragging && draggedTask && taskDragTargetDay && isSameDay(day, taskDragTargetDay) && !getScheduledTasksForDay(day).some((t) => t.id === draggedTask!.id)}
-
+
+ {#if isTaskDragging && draggedTask && taskDragTargetDay && isSameDay(day, taskDragTargetDay) && !getScheduledTasksForDay(day).some((t) => t.id === draggedTask!.id)}
+
+ {/if}
{/if}
diff --git a/apps/calendar/apps/web/src/lib/components/calendar/ViewCarousel.svelte b/apps/calendar/apps/web/src/lib/components/calendar/ViewCarousel.svelte
index 8ea78cb75..4658e609f 100644
--- a/apps/calendar/apps/web/src/lib/components/calendar/ViewCarousel.svelte
+++ b/apps/calendar/apps/web/src/lib/components/calendar/ViewCarousel.svelte
@@ -1,8 +1,10 @@
@@ -331,7 +367,7 @@
-
+
{#if viewStore.viewType === 'day'}
{:else if viewStore.viewType === '3day'}
diff --git a/apps/calendar/apps/web/src/lib/components/calendar/WeekView.svelte b/apps/calendar/apps/web/src/lib/components/calendar/WeekView.svelte
index b5df3cd64..22ddb4341 100644
--- a/apps/calendar/apps/web/src/lib/components/calendar/WeekView.svelte
+++ b/apps/calendar/apps/web/src/lib/components/calendar/WeekView.svelte
@@ -1003,37 +1003,39 @@
/>
{/each}
-
- {#each getScheduledTasksForDay(day) as task (task.id)}
- {@const isTaskBeingDragged = isTaskDragging && draggedTask?.id === task.id}
- {@const isTaskBeingResized = isTaskResizing && resizeTask?.id === task.id}
- {@const isTaskCrossDayDrag =
- isTaskBeingDragged &&
- taskDragTargetDay !== null &&
- !isSameDay(day, taskDragTargetDay)}
-
- {/each}
+
+ {#if settingsStore.showTasksInCalendar}
+ {#each getScheduledTasksForDay(day) as task (task.id)}
+ {@const isTaskBeingDragged = isTaskDragging && draggedTask?.id === task.id}
+ {@const isTaskBeingResized = isTaskResizing && resizeTask?.id === task.id}
+ {@const isTaskCrossDayDrag =
+ isTaskBeingDragged &&
+ taskDragTargetDay !== null &&
+ !isSameDay(day, taskDragTargetDay)}
+
+ {/each}
-
- {#if isTaskDragging && draggedTask && taskDragTargetDay && isSameDay(day, taskDragTargetDay) && !getScheduledTasksForDay(day).some((t) => t.id === draggedTask!.id)}
-
+
+ {#if isTaskDragging && draggedTask && taskDragTargetDay && isSameDay(day, taskDragTargetDay) && !getScheduledTasksForDay(day).some((t) => t.id === draggedTask!.id)}
+
+ {/if}
{/if}
diff --git a/apps/calendar/apps/web/src/lib/stores/settings.svelte.ts b/apps/calendar/apps/web/src/lib/stores/settings.svelte.ts
index 789c6ad4e..6c58f6480 100644
--- a/apps/calendar/apps/web/src/lib/stores/settings.svelte.ts
+++ b/apps/calendar/apps/web/src/lib/stores/settings.svelte.ts
@@ -54,6 +54,9 @@ export interface CalendarAppSettings extends Record {
showBirthdays: boolean;
showBirthdayAge: boolean;
+ // Task settings
+ showTasksInCalendar: boolean;
+
// UI settings
sidebarCollapsed: boolean;
@@ -96,6 +99,7 @@ const DEFAULT_SETTINGS: CalendarAppSettings = {
immersiveModeEnabled: false,
showBirthdays: true,
showBirthdayAge: true,
+ showTasksInCalendar: false,
sidebarCollapsed: false,
quickViewPillViews: ['week', 'month', 'agenda'],
customDayCount: 30,
@@ -231,6 +235,9 @@ export const settingsStore = {
get showBirthdayAge() {
return baseStore.settings.showBirthdayAge;
},
+ get showTasksInCalendar() {
+ return baseStore.settings.showTasksInCalendar;
+ },
get defaultEventDuration() {
return baseStore.settings.defaultEventDuration;
},
@@ -295,6 +302,10 @@ export const settingsStore = {
baseStore.set('selectedTagIds', []);
},
+ toggleTasksInCalendar() {
+ baseStore.set('showTasksInCalendar', !baseStore.settings.showTasksInCalendar);
+ },
+
// Time formatting helpers
formatTime(date: Date): string {
if (baseStore.settings.timeFormat === '12h') {