From 8568cab283ab7a606dc0f022b68d6a7c88fba78c Mon Sep 17 00:00:00 2001 From: Alex van Andel Date: Sat, 20 Dec 2025 06:33:46 +0000 Subject: [PATCH] fix: Handle error when no default calendar exists for a o365 account (#26074) * fix: Handle error when no default calendar exists for a o365 account * Update packages/app-store/office365calendar/api/callback.ts Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> --------- Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> --- .../web/components/apps/CalendarListContainer.tsx | 2 +- apps/web/modules/apps/[slug]/slug-view.tsx | 4 ++-- apps/web/public/static/locales/en/common.json | 1 + .../app-store/office365calendar/api/callback.ts | 15 +++++++++++---- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/apps/web/components/apps/CalendarListContainer.tsx b/apps/web/components/apps/CalendarListContainer.tsx index a40edcf2ed..5c6a512154 100644 --- a/apps/web/components/apps/CalendarListContainer.tsx +++ b/apps/web/components/apps/CalendarListContainer.tsx @@ -106,7 +106,7 @@ export function CalendarListContainer({ const { error, setQuery: setError } = useRouterQuery("error"); useEffect(() => { - if (error === "account_already_linked") { + if (error === "account_already_linked" || error === "no_default_calendar") { showToast(t(error), "error", { id: error }); setError(undefined); } diff --git a/apps/web/modules/apps/[slug]/slug-view.tsx b/apps/web/modules/apps/[slug]/slug-view.tsx index 3de5c44d33..b983e05364 100644 --- a/apps/web/modules/apps/[slug]/slug-view.tsx +++ b/apps/web/modules/apps/[slug]/slug-view.tsx @@ -15,7 +15,7 @@ import App from "@components/apps/App"; function SingleAppPage(props: AppDataProps) { const { error, setQuery: setError } = useRouterQuery("error"); const { t } = useLocale(); - if (error === "account_already_linked") { + if (error === "account_already_linked" || error === "no_default_calendar") { showToast(t(error), "error", { id: error }); setError(undefined); } @@ -66,7 +66,7 @@ function SingleAppPage(props: AppDataProps) { // privacy="https://zoom.us/privacy" body={ <> - {/* eslint-disable-next-line react/no-danger */} + { }
} diff --git a/apps/web/public/static/locales/en/common.json b/apps/web/public/static/locales/en/common.json index e8bd920484..c0b49aecab 100644 --- a/apps/web/public/static/locales/en/common.json +++ b/apps/web/public/static/locales/en/common.json @@ -2893,6 +2893,7 @@ "field_identifiers_as_variables": "Use field identifiers as variables for your custom event redirect", "field_identifiers_as_variables_with_example": "Use field identifiers as variables for your custom event redirect (e.g. {{variable}})", "account_already_linked": "Account is already linked", + "no_default_calendar": "No default calendar found for this account, unable to link", "send_email": "Send email", "cal_ai_phone_call_action": "Call attendee using Cal.ai Voice Agent", "call_to_confirm_booking": "Call to confirm booking", diff --git a/packages/app-store/office365calendar/api/callback.ts b/packages/app-store/office365calendar/api/callback.ts index 4254d88904..960d5d6d9a 100644 --- a/packages/app-store/office365calendar/api/callback.ts +++ b/packages/app-store/office365calendar/api/callback.ts @@ -104,15 +104,14 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) logger.info("Office365 Calendar: handleErrorsJson completed", { userId: req.session?.user?.id, - calendarCount: calBody.value.length ?? 0, + calendarCount: calBody.value?.length ?? 0, }); if (typeof responseBody === "string") { calBody = JSON.parse(responseBody) as { value: OfficeCalendar[] }; } - const findDefaultCalendar = calBody.value.find((calendar) => calendar.isDefaultCalendar); - + const findDefaultCalendar = (calBody.value ?? []).find((calendar) => calendar.isDefaultCalendar); if (findDefaultCalendar) { defaultCalendar = findDefaultCalendar; } @@ -124,7 +123,15 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) } } - if (defaultCalendar?.id && req.session?.user?.id) { + if (!defaultCalendar?.id) { + const errorMessage = "no_default_calendar"; + res.redirect( + `${getSafeRedirectUrl(state?.onErrorReturnTo) ?? getInstalledAppPath({ variant: "calendar", slug: "office365-calendar" })}?error=${errorMessage}` + ); + return; + } + + if (req.session?.user?.id) { const credential = await prisma.credential.create({ data: { type: "office365_calendar",