From 31d75ffa74b7548b2fe2a8ea12269be4639d6932 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20J=C3=A4derberg?= Date: Thu, 15 May 2025 10:41:16 +0000 Subject: [PATCH] Merged in fix/default-page-settings (pull request #2076) fix: default page settings when invalid or missing * fix: default page settings when invalid or missing since most pages don't have pageSettings Approved-by: Anton Gunnarsson --- .../lib/trpc/memoizedRequests/index.ts | 2 +- .../contentstack/pageSettings/output.ts | 14 ++- .../contentstack/pageSettings/query.ts | 87 ++++++++----------- 3 files changed, 51 insertions(+), 52 deletions(-) diff --git a/apps/scandic-web/lib/trpc/memoizedRequests/index.ts b/apps/scandic-web/lib/trpc/memoizedRequests/index.ts index e4d4e6938..3c09db9d4 100644 --- a/apps/scandic-web/lib/trpc/memoizedRequests/index.ts +++ b/apps/scandic-web/lib/trpc/memoizedRequests/index.ts @@ -266,7 +266,7 @@ export const isBookingWidgetHidden = cache( siteConfigResults.status === "fulfilled" ? siteConfigResults.value : null const hideFromPageSettings = - pageSettings?.page?.settings?.hide_booking_widget ?? false + pageSettings?.page.settings.hide_booking_widget ?? false const hideFromSiteConfig = siteConfig?.bookingWidgetDisabled ?? false return hideFromPageSettings || hideFromSiteConfig diff --git a/apps/scandic-web/server/routers/contentstack/pageSettings/output.ts b/apps/scandic-web/server/routers/contentstack/pageSettings/output.ts index 16f3a8322..24555d826 100644 --- a/apps/scandic-web/server/routers/contentstack/pageSettings/output.ts +++ b/apps/scandic-web/server/routers/contentstack/pageSettings/output.ts @@ -8,11 +8,23 @@ export const pageSettingsSchema = z.object({ }) export type PageSettingsSchema = z.output +const DEFAULT_PAGE_SETTINGS: PageSettingsSchema = { + hide_booking_widget: false, + booking_code: "", +} as const export const getPageSettingsSchema = z.object({ page: z.object({ - settings: pageSettingsSchema, + settings: pageSettingsSchema + .nullable() + .optional() + .transform((val) => val ?? DEFAULT_PAGE_SETTINGS), }), }) export type GetPageSettingsSchema = z.output +export const DEFAULT_GET_PAGE_SETTINGS: GetPageSettingsSchema = { + page: { + settings: DEFAULT_PAGE_SETTINGS, + }, +} diff --git a/apps/scandic-web/server/routers/contentstack/pageSettings/query.ts b/apps/scandic-web/server/routers/contentstack/pageSettings/query.ts index 94697e53e..c2d1fe6a4 100644 --- a/apps/scandic-web/server/routers/contentstack/pageSettings/query.ts +++ b/apps/scandic-web/server/routers/contentstack/pageSettings/query.ts @@ -1,3 +1,5 @@ +import * as Sentry from "@sentry/nextjs" + import { GetAccountPageSettings, GetCollectionPageSettings, @@ -16,7 +18,11 @@ import { langInput } from "@/server/utils" import { generateTag } from "@/utils/generateTag" -import { type GetPageSettingsSchema, getPageSettingsSchema } from "./output" +import { + DEFAULT_GET_PAGE_SETTINGS, + type GetPageSettingsSchema, + getPageSettingsSchema, +} from "./output" import { affix } from "./utils" import { PageContentTypeEnum } from "@/types/requests/contentType" @@ -24,61 +30,27 @@ import { PageContentTypeEnum } from "@/types/requests/contentType" export const pageSettingsQueryRouter = router({ get: contentstackBaseProcedure .input(langInput) - .query(async ({ input, ctx }) => { + .query(async ({ input, ctx }): Promise => { const { contentType, uid } = ctx const lang = input.lang ?? ctx.lang // This condition is to handle 404 page case and booking flow if (!contentType || !uid) { - console.log("No proper params defined: ", contentType, uid) - return null + return DEFAULT_GET_PAGE_SETTINGS } - let GetPageSettings = "" + const getPageSettingsQuery = + graphqlQueriesForContentType[contentType as PageContentTypeEnum] - switch (contentType) { - case PageContentTypeEnum.accountPage: - GetPageSettings = GetAccountPageSettings - break - case PageContentTypeEnum.collectionPage: - GetPageSettings = GetCollectionPageSettings - break - case PageContentTypeEnum.contentPage: - GetPageSettings = GetContentPageSettings - break - case PageContentTypeEnum.currentBlocksPage: - GetPageSettings = GetCurrentBlocksPageSettings - break - case PageContentTypeEnum.destinationCityPage: - GetPageSettings = GetDestinationCityPageSettings - break - case PageContentTypeEnum.destinationCountryPage: - GetPageSettings = GetDestinationCountryPageSettings - break - case PageContentTypeEnum.destinationOverviewPage: - GetPageSettings = GetDestinationOverviewPageSettings - break - case PageContentTypeEnum.hotelPage: - GetPageSettings = GetHotelPageSettings - break - case PageContentTypeEnum.loyaltyPage: - GetPageSettings = GetLoyaltyPageSettings - break - case PageContentTypeEnum.startPage: - GetPageSettings = GetStartPageSettings - break - } - - if (!GetPageSettings) { - console.error( - "[pageSettings] No proper Content type defined: ", - contentType + if (!getPageSettingsQuery) { + Sentry.captureMessage( + `GetPageSettings: No proper Content type defined for '${contentType}'` ) - return null + return DEFAULT_GET_PAGE_SETTINGS } const response = await request( - GetPageSettings, + getPageSettingsQuery, { uid: uid, locale: lang, @@ -89,13 +61,28 @@ export const pageSettingsQueryRouter = router({ } ) - const result = getPageSettingsSchema.safeParse(response.data) + try { + const result = getPageSettingsSchema.parse(response.data) + return result + } catch (error) { + Sentry.captureException(error, { extra: { uid, contentType } }) - if (!result.success) { - console.error("Page settings fetch error: ", result.error) - return null + return DEFAULT_GET_PAGE_SETTINGS } - - return result.data }), }) + +const graphqlQueriesForContentType: Record = { + [PageContentTypeEnum.accountPage]: GetAccountPageSettings, + [PageContentTypeEnum.collectionPage]: GetCollectionPageSettings, + [PageContentTypeEnum.contentPage]: GetContentPageSettings, + [PageContentTypeEnum.currentBlocksPage]: GetCurrentBlocksPageSettings, + [PageContentTypeEnum.destinationCityPage]: GetDestinationCityPageSettings, + [PageContentTypeEnum.destinationCountryPage]: + GetDestinationCountryPageSettings, + [PageContentTypeEnum.destinationOverviewPage]: + GetDestinationOverviewPageSettings, + [PageContentTypeEnum.hotelPage]: GetHotelPageSettings, + [PageContentTypeEnum.loyaltyPage]: GetLoyaltyPageSettings, + [PageContentTypeEnum.startPage]: GetStartPageSettings, +}