From 58977af1b1bf4ef3218b1c1f8f495277a7fa6b1c Mon Sep 17 00:00:00 2001 From: lenhanphung Date: Fri, 17 Oct 2025 15:22:21 +0700 Subject: [PATCH] fix: prevent crash when deleting calendar - Add safety check for calendar.events access to prevent undefined error - Auto-remove deleted calendars from selectedCalendars state - Fixes TypeError: Cannot read properties of undefined (reading 'events') --- src/components/Calendar/Calendar.tsx | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/components/Calendar/Calendar.tsx b/src/components/Calendar/Calendar.tsx index f8c9d88..67d88fc 100644 --- a/src/components/Calendar/Calendar.tsx +++ b/src/components/Calendar/Calendar.tsx @@ -79,9 +79,11 @@ export default function CalendarApp({ const pending = useAppSelector((state) => state.calendars.pending); const [selectedCalendars, setSelectedCalendars] = useState([]); - const dottedEvents: CalendarEvent[] = selectedCalendars.flatMap((calId) => - Object.values(calendars[calId].events) - ); + const dottedEvents: CalendarEvent[] = selectedCalendars.flatMap((calId) => { + const calendar = calendars[calId]; + if (!calendar?.events) return []; + return Object.values(calendar.events); + }); const [currentView, setCurrentView] = useState("timeGridWeek"); const timezone = useAppSelector((state) => state.calendars.timeZone); @@ -114,6 +116,13 @@ export default function CalendarApp({ } }, [calendars, userId]); + useEffect(() => { + const validCalendarIds = new Set(Object.keys(calendars)); + setSelectedCalendars((prev) => + prev.filter((calId) => validCalendarIds.has(calId)) + ); + }, [calendars]); + const calendarRange = getCalendarRange(selectedDate); // Create a stable string key for the range