calendar 12

This commit is contained in:
Alma 2025-04-13 14:05:35 +02:00
parent c88091a1dc
commit 04d266614c

View File

@ -412,6 +412,7 @@ export function CalendarClient({ initialCalendars, userId, userProfile }: Calend
end: "",
allDay: false,
location: null,
calendarId: selectedCalendarId
});
const [selectedEventPreview, setSelectedEventPreview] = useState<Event | null>(null);
@ -439,6 +440,31 @@ export function CalendarClient({ initialCalendars, userId, userProfile }: Calend
const calendarRef = useRef<any>(null);
const fetchCalendars = async () => {
try {
setLoading(true);
const response = await fetch("/api/calendars");
if (!response.ok) throw new Error("Failed to fetch calendars");
const data = await response.json();
setCalendars(data.map((cal: Calendar & { events: Event[] }) => ({
...cal,
events: cal.events || []
})));
if (data.length > 0 && !selectedCalendarId) {
setSelectedCalendarId(data[0].id);
}
} catch (error) {
console.error("Error fetching calendars:", error);
setError(error instanceof Error ? error.message : "Failed to fetch calendars");
} finally {
setLoading(false);
}
};
useEffect(() => {
fetchCalendars();
}, []);
const handleCalendarSave = async (calendarData: Partial<Calendar>) => {
try {
setLoading(true);
@ -454,21 +480,14 @@ export function CalendarClient({ initialCalendars, userId, userProfile }: Calend
});
if (!response.ok) {
throw new Error("Erreur lors de la sauvegarde du calendrier");
throw new Error("Failed to save calendar");
}
const updatedCalendar = await response.json();
if (calendarData.id) {
setCalendars(calendars.map(cal =>
cal.id === calendarData.id ? { ...cal, ...updatedCalendar } : cal
));
} else {
setCalendars([...calendars, updatedCalendar]);
}
await fetchCalendars();
setIsCalendarModalOpen(false);
} catch (error) {
console.error("Error saving calendar:", error);
setError(error instanceof Error ? error.message : "Une erreur est survenue");
setError(error instanceof Error ? error.message : "Failed to save calendar");
} finally {
setLoading(false);
}
@ -511,45 +530,36 @@ export function CalendarClient({ initialCalendars, userId, userProfile }: Calend
const handleEventSubmit = async () => {
try {
setLoading(true);
const response = await fetch("/api/calendar", {
method: "POST",
const response = await fetch("/api/events", {
method: selectedEvent ? "PUT" : "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
title: eventForm.title,
description: eventForm.description,
start: eventForm.start,
end: eventForm.end,
isAllDay: eventForm.allDay,
location: eventForm.location,
calendarId: eventForm.calendarId,
...eventForm,
calendarId: selectedCalendarId,
userId,
}),
});
if (!response.ok) {
throw new Error("Erreur lors de la sauvegarde de l'événement");
throw new Error("Failed to save event");
}
const newEvent = await response.json();
// Update events state with the new event
setCalendars((prev) => prev.map(cal => ({
...cal,
events: [...cal.events, newEvent]
})));
await fetchCalendars();
setIsEventModalOpen(false);
setEventForm({
title: "",
description: "",
description: null,
start: "",
end: "",
allDay: false,
location: "",
calendarId: calendars[0]?.id || "",
location: null,
calendarId: selectedCalendarId
});
} catch (error) {
console.error("Error saving event:", error);
setError(error instanceof Error ? error.message : "Une erreur est survenue");
setError(error instanceof Error ? error.message : "Failed to save event");
} finally {
setLoading(false);
}
@ -560,26 +570,20 @@ export function CalendarClient({ initialCalendars, userId, userProfile }: Calend
try {
setLoading(true);
const response = await fetch(`/api/calendar?id=${selectedEvent.id}`, {
const response = await fetch(`/api/events/${selectedEvent.id}`, {
method: "DELETE",
});
if (!response.ok) {
throw new Error("Erreur lors de la suppression de l'événement");
throw new Error("Failed to delete event");
}
// Refresh calendar data
const eventsResponse = await fetch("/api/calendar");
const updatedEvents = await eventsResponse.json();
setCalendars(calendars.map(cal => ({
...cal,
events: updatedEvents.filter((event: Event) => event.calendarId === cal.id)
})));
await fetchCalendars();
setIsEventModalOpen(false);
setSelectedEvent(null);
} catch (error) {
setError((error as Error).message);
console.error("Error deleting event:", error);
setError(error instanceof Error ? error.message : "Failed to delete event");
} finally {
setLoading(false);
}
@ -612,6 +616,15 @@ export function CalendarClient({ initialCalendars, userId, userProfile }: Calend
<Button
onClick={() => {
setSelectedEvent(null);
setEventForm({
title: "",
description: null,
start: "",
end: "",
allDay: false,
location: null,
calendarId: selectedCalendarId
});
setIsEventModalOpen(true);
}}
className="bg-primary hover:bg-primary/90 text-white"