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
This commit is contained in:
@@ -266,7 +266,7 @@ export const isBookingWidgetHidden = cache(
|
|||||||
siteConfigResults.status === "fulfilled" ? siteConfigResults.value : null
|
siteConfigResults.status === "fulfilled" ? siteConfigResults.value : null
|
||||||
|
|
||||||
const hideFromPageSettings =
|
const hideFromPageSettings =
|
||||||
pageSettings?.page?.settings?.hide_booking_widget ?? false
|
pageSettings?.page.settings.hide_booking_widget ?? false
|
||||||
const hideFromSiteConfig = siteConfig?.bookingWidgetDisabled ?? false
|
const hideFromSiteConfig = siteConfig?.bookingWidgetDisabled ?? false
|
||||||
|
|
||||||
return hideFromPageSettings || hideFromSiteConfig
|
return hideFromPageSettings || hideFromSiteConfig
|
||||||
|
|||||||
@@ -8,11 +8,23 @@ export const pageSettingsSchema = z.object({
|
|||||||
})
|
})
|
||||||
|
|
||||||
export type PageSettingsSchema = z.output<typeof pageSettingsSchema>
|
export type PageSettingsSchema = z.output<typeof pageSettingsSchema>
|
||||||
|
const DEFAULT_PAGE_SETTINGS: PageSettingsSchema = {
|
||||||
|
hide_booking_widget: false,
|
||||||
|
booking_code: "",
|
||||||
|
} as const
|
||||||
|
|
||||||
export const getPageSettingsSchema = z.object({
|
export const getPageSettingsSchema = z.object({
|
||||||
page: z.object({
|
page: z.object({
|
||||||
settings: pageSettingsSchema,
|
settings: pageSettingsSchema
|
||||||
|
.nullable()
|
||||||
|
.optional()
|
||||||
|
.transform((val) => val ?? DEFAULT_PAGE_SETTINGS),
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
|
||||||
export type GetPageSettingsSchema = z.output<typeof getPageSettingsSchema>
|
export type GetPageSettingsSchema = z.output<typeof getPageSettingsSchema>
|
||||||
|
export const DEFAULT_GET_PAGE_SETTINGS: GetPageSettingsSchema = {
|
||||||
|
page: {
|
||||||
|
settings: DEFAULT_PAGE_SETTINGS,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import * as Sentry from "@sentry/nextjs"
|
||||||
|
|
||||||
import {
|
import {
|
||||||
GetAccountPageSettings,
|
GetAccountPageSettings,
|
||||||
GetCollectionPageSettings,
|
GetCollectionPageSettings,
|
||||||
@@ -16,7 +18,11 @@ import { langInput } from "@/server/utils"
|
|||||||
|
|
||||||
import { generateTag } from "@/utils/generateTag"
|
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 { affix } from "./utils"
|
||||||
|
|
||||||
import { PageContentTypeEnum } from "@/types/requests/contentType"
|
import { PageContentTypeEnum } from "@/types/requests/contentType"
|
||||||
@@ -24,61 +30,27 @@ import { PageContentTypeEnum } from "@/types/requests/contentType"
|
|||||||
export const pageSettingsQueryRouter = router({
|
export const pageSettingsQueryRouter = router({
|
||||||
get: contentstackBaseProcedure
|
get: contentstackBaseProcedure
|
||||||
.input(langInput)
|
.input(langInput)
|
||||||
.query(async ({ input, ctx }) => {
|
.query(async ({ input, ctx }): Promise<GetPageSettingsSchema> => {
|
||||||
const { contentType, uid } = ctx
|
const { contentType, uid } = ctx
|
||||||
const lang = input.lang ?? ctx.lang
|
const lang = input.lang ?? ctx.lang
|
||||||
|
|
||||||
// This condition is to handle 404 page case and booking flow
|
// This condition is to handle 404 page case and booking flow
|
||||||
if (!contentType || !uid) {
|
if (!contentType || !uid) {
|
||||||
console.log("No proper params defined: ", contentType, uid)
|
return DEFAULT_GET_PAGE_SETTINGS
|
||||||
return null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let GetPageSettings = ""
|
const getPageSettingsQuery =
|
||||||
|
graphqlQueriesForContentType[contentType as PageContentTypeEnum]
|
||||||
|
|
||||||
switch (contentType) {
|
if (!getPageSettingsQuery) {
|
||||||
case PageContentTypeEnum.accountPage:
|
Sentry.captureMessage(
|
||||||
GetPageSettings = GetAccountPageSettings
|
`GetPageSettings: No proper Content type defined for '${contentType}'`
|
||||||
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
|
|
||||||
)
|
)
|
||||||
return null
|
return DEFAULT_GET_PAGE_SETTINGS
|
||||||
}
|
}
|
||||||
|
|
||||||
const response = await request<GetPageSettingsSchema>(
|
const response = await request<GetPageSettingsSchema>(
|
||||||
GetPageSettings,
|
getPageSettingsQuery,
|
||||||
{
|
{
|
||||||
uid: uid,
|
uid: uid,
|
||||||
locale: lang,
|
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) {
|
return DEFAULT_GET_PAGE_SETTINGS
|
||||||
console.error("Page settings fetch error: ", result.error)
|
|
||||||
return null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return result.data
|
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const graphqlQueriesForContentType: Record<PageContentTypeEnum, any> = {
|
||||||
|
[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,
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user