calendar 30
This commit is contained in:
parent
d85df3e8ce
commit
13fb11219c
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user