From 04d266614c0c36dae85030d7445d0fbd01533ff0 Mon Sep 17 00:00:00 2001 From: Alma Date: Sun, 13 Apr 2025 14:05:35 +0200 Subject: [PATCH] calendar 12 --- components/calendar/calendar-client.tsx | 95 ++++++++++++++----------- 1 file changed, 54 insertions(+), 41 deletions(-) diff --git a/components/calendar/calendar-client.tsx b/components/calendar/calendar-client.tsx index 1b0c0c3b..854545e2 100644 --- a/components/calendar/calendar-client.tsx +++ b/components/calendar/calendar-client.tsx @@ -412,6 +412,7 @@ export function CalendarClient({ initialCalendars, userId, userProfile }: Calend end: "", allDay: false, location: null, + calendarId: selectedCalendarId }); const [selectedEventPreview, setSelectedEventPreview] = useState(null); @@ -439,6 +440,31 @@ export function CalendarClient({ initialCalendars, userId, userProfile }: Calend const calendarRef = useRef(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) => { 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