calendar 31

This commit is contained in:
Alma 2025-04-13 16:52:08 +02:00
parent 13fb11219c
commit 75e6385ace

View File

@ -501,9 +501,8 @@ export function CalendarClient({ initialCalendars, userId, userProfile }: Calend
let calendarsData = []; let calendarsData = [];
let seenPrincipal = false; let seenPrincipal = false;
let principalCalendarId = null; let principalCalendarId = null;
let eventsToMigrate = [];
// First pass: identify the principal calendar to keep and collect events // First pass: identify the principal calendar and other valid calendars
for (const cal of data) { for (const cal of data) {
if (cal.name === "Calendrier principal") { if (cal.name === "Calendrier principal") {
if (!seenPrincipal) { if (!seenPrincipal) {
@ -511,12 +510,7 @@ export function CalendarClient({ initialCalendars, userId, userProfile }: Calend
principalCalendarId = cal.id; principalCalendarId = cal.id;
calendarsData.push(cal); calendarsData.push(cal);
} }
} else if (cal.name === "Default") { } 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); calendarsData.push(cal);
} }
} }
@ -543,53 +537,36 @@ export function CalendarClient({ initialCalendars, userId, userProfile }: Calend
} }
} }
// Migrate events from Default calendar to Principal calendar // Delete duplicate Calendrier principal and Default calendars
if (eventsToMigrate.length > 0 && principalCalendarId) { const deletePromises = data
console.log("Migrating events to principal calendar:", eventsToMigrate.length); .filter(cal =>
for (const event of eventsToMigrate) { (cal.name === "Calendrier principal" && cal.id !== principalCalendarId) ||
cal.name === "Default"
)
.map(async (cal) => {
try { try {
const response = await fetch("/api/events", { const response = await fetch(`/api/calendars/${cal.id}`, {
method: "POST", method: "DELETE",
headers: { headers: {
"Content-Type": "application/json", "Content-Type": "application/json",
}, },
body: JSON.stringify({
...event,
calendarId: principalCalendarId,
}),
}); });
if (response.ok) { if (!response.ok) {
const newEvent = await response.json(); console.error(`Failed to delete calendar ${cal.id}: ${response.status}`);
// 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);
}
}
}
// 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) { } catch (error) {
console.error("Error deleting calendar:", error); console.error("Error deleting calendar:", error);
} }
} });
}
await Promise.all(deletePromises);
// Sort calendars to ensure Calendrier principal is first
calendarsData.sort((a, b) => {
if (a.name === "Calendrier principal") return -1;
if (b.name === "Calendrier principal") return 1;
return new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime();
});
// Ensure events array exists for each calendar and convert dates // Ensure events array exists for each calendar and convert dates
const calendarsWithEvents = calendarsData.map((cal: Calendar & { events: Event[] }) => ({ const calendarsWithEvents = calendarsData.map((cal: Calendar & { events: Event[] }) => ({