From 13fb11219cdfd856918c6e5b395295805aebecca Mon Sep 17 00:00:00 2001 From: Alma Date: Sun, 13 Apr 2025 16:46:39 +0200 Subject: [PATCH] calendar 30 --- components/calendar/calendar-client.tsx | 89 +++++++++++++++++++++---- 1 file changed, 75 insertions(+), 14 deletions(-) diff --git a/components/calendar/calendar-client.tsx b/components/calendar/calendar-client.tsx index 0644159a..ba645dae 100644 --- a/components/calendar/calendar-client.tsx +++ b/components/calendar/calendar-client.tsx @@ -495,12 +495,34 @@ export function CalendarClient({ initialCalendars, userId, userProfile }: Calend const response = await fetch("/api/calendars"); if (!response.ok) throw new Error("Failed to fetch calendars"); const data = await response.json(); - console.log("Fetched calendars:", data); + console.log("Raw calendars data:", data); - let calendarsData = data; + // First, clean up duplicate calendars and migrate events + let calendarsData = []; + let seenPrincipal = false; + let principalCalendarId = null; + let eventsToMigrate = []; - // Create principal calendar if it doesn't exist - if (data.length === 0 || !data.some((cal: Calendar) => cal.name === "Calendrier principal")) { + // First pass: identify the principal calendar to keep and collect events + for (const cal of data) { + if (cal.name === "Calendrier principal") { + if (!seenPrincipal) { + seenPrincipal = true; + principalCalendarId = cal.id; + calendarsData.push(cal); + } + } else if (cal.name === "Default") { + // Collect events from Default calendar + if (cal.events && cal.events.length > 0) { + eventsToMigrate.push(...cal.events); + } + } else { + calendarsData.push(cal); + } + } + + // If no principal calendar exists, create one + if (!seenPrincipal) { const principalCalendar = await fetch("/api/calendars", { method: "POST", headers: { @@ -516,18 +538,57 @@ export function CalendarClient({ initialCalendars, userId, userProfile }: Calend if (principalCalendar.ok) { const newCalendar = await principalCalendar.json(); - calendarsData = [newCalendar, ...data]; + principalCalendarId = newCalendar.id; + calendarsData.unshift(newCalendar); } - } else { - // Remove any duplicate "Calendrier principal" and "Default" calendars - const seenPrincipal = false; - calendarsData = data.filter((cal: Calendar) => { - if (cal.name === "Calendrier principal") { - if (seenPrincipal) return false; - return true; + } + + // Migrate events from Default calendar to Principal calendar + if (eventsToMigrate.length > 0 && principalCalendarId) { + console.log("Migrating events to principal calendar:", eventsToMigrate.length); + for (const event of eventsToMigrate) { + try { + const response = await fetch("/api/events", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + ...event, + calendarId: principalCalendarId, + }), + }); + if (response.ok) { + const newEvent = await response.json(); + // Add the migrated event to the principal calendar + calendarsData = calendarsData.map(cal => { + if (cal.id === principalCalendarId) { + return { + ...cal, + events: [...(cal.events || []), newEvent] + }; + } + return cal; + }); + } + } catch (error) { + console.error("Error migrating event:", error); } - return cal.name !== "Default"; - }); + } + } + + // Delete duplicate Calendrier principal and Default calendars + for (const cal of data) { + if ((cal.name === "Calendrier principal" && cal.id !== principalCalendarId) || + cal.name === "Default") { + try { + await fetch(`/api/calendars/${cal.id}`, { + method: "DELETE", + }); + } catch (error) { + console.error("Error deleting calendar:", error); + } + } } // Ensure events array exists for each calendar and convert dates