From 13bd90bd2acc5eb98d54efb860b9c6ba2e35fa9a Mon Sep 17 00:00:00 2001 From: mARTin Date: Tue, 24 Mar 2026 12:30:42 +0100 Subject: [PATCH] fix: cross-day drag-and-drop + persist showCalendarProviderIcon setting - Cross-day drag now works: getEventsForSlot uses drag state's current start time to assign the dragged event to the correct day column - Add showCalendarProviderIcon to Prisma schema, profile API GET/PATCH so the setting persists across sessions (was frontend-only before) - DB migration applied via prisma db push v1.68.0 Co-Authored-By: Claude Opus 4.6 --- package.json | 2 +- prisma/schema.prisma | 1 + src/app/api/user/profile/route.ts | 4 +++- src/components/WeeklyView.tsx | 10 +++++----- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index d5278b1..5c8629f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "my-weekly-todo-list", - "version": "1.67.1", + "version": "1.68.0", "description": "A web-based weekly task management application that organizes to-dos and calendar events in a single, intuitive weekly view", "main": "index.js", "scripts": { diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 8ccc3e1..34a66a9 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -25,6 +25,7 @@ model User { timezone String @default("UTC") autoRolling Boolean @default(false) protectEventTimes Boolean @default(false) + showCalendarProviderIcon Boolean @default(false) language String @default("de") dateFormat String @default("yyyy-MM-dd") timeFormat String @default("24h") diff --git a/src/app/api/user/profile/route.ts b/src/app/api/user/profile/route.ts index c09e956..1398490 100644 --- a/src/app/api/user/profile/route.ts +++ b/src/app/api/user/profile/route.ts @@ -18,6 +18,7 @@ export async function GET(request: NextRequest) { timezone: true, autoRolling: true, protectEventTimes: true, + showCalendarProviderIcon: true, language: true, dateFormat: true, timeFormat: true, @@ -126,7 +127,7 @@ export async function PATCH(request: NextRequest) { try { const body = await request.json(); const { - name, timezone, password, autoRolling, protectEventTimes, + name, timezone, password, autoRolling, protectEventTimes, showCalendarProviderIcon, language, dateFormat, timeFormat, startHour, endHour, showNextTask, calendarEditMode, focusTimerDuration, focusBreakDuration, showTimeGrid, showSomeday, showAllDayEvents, showSchedule, @@ -156,6 +157,7 @@ export async function PATCH(request: NextRequest) { ...(timezone !== undefined && { timezone }), ...(autoRolling !== undefined && { autoRolling }), ...(protectEventTimes !== undefined && { protectEventTimes }), + ...(showCalendarProviderIcon !== undefined && { showCalendarProviderIcon }), ...(language !== undefined && { language }), ...(dateFormat !== undefined && { dateFormat }), ...(timeFormat !== undefined && { timeFormat }), diff --git a/src/components/WeeklyView.tsx b/src/components/WeeklyView.tsx index 25b1666..72e95d5 100644 --- a/src/components/WeeklyView.tsx +++ b/src/components/WeeklyView.tsx @@ -3605,11 +3605,11 @@ export default function WeeklyView() { const isAllDay = isAllDayEvent(event); if (isAllDay) return false; - if (event.title.includes("Valentinstag")) { - // Debug removed - } + // During drag, use the drag state's current start time for slot assignment + const isDraggedEvent = eventDragState?.eventId === event.id && eventDragState?.hasMoved && eventDragState?.mode === 'move'; + const startTime = isDraggedEvent ? eventDragState!.currentStartTime : event.startTime; - const eventDate = new Date(event.startTime); + const eventDate = new Date(startTime); if (!isSameDay(eventDate, date)) return false; // Extract hour:minute from event start time and compare with slot @@ -3625,7 +3625,7 @@ export default function WeeklyView() { return eventStart >= slotStart && eventStart < slotEnd; }); }, - [calendarEvents, effectiveCellDuration], + [calendarEvents, effectiveCellDuration, eventDragState], ); // Precompute overlap layout: { [eventId]: { column, totalColumns } }