feat(SW-237): Detached booking widget toggle graphql query from page settings
This commit is contained in:
@@ -6,9 +6,7 @@ import { getLang } from "@/i18n/serverContext"
|
|||||||
export default async function BookingWidgetPage() {
|
export default async function BookingWidgetPage() {
|
||||||
// Get the booking widget show/hide status based on page specific settings
|
// Get the booking widget show/hide status based on page specific settings
|
||||||
const bookingWidgetToggle =
|
const bookingWidgetToggle =
|
||||||
await serverClient().contentstack.base.page_settings({
|
await serverClient().contentstack.bookingwidget.getToggle()
|
||||||
lang: getLang(),
|
|
||||||
})
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -255,23 +255,3 @@ const validateFooterRefConfigSchema = z.object({
|
|||||||
})
|
})
|
||||||
|
|
||||||
export type FooterRefDataRaw = z.infer<typeof validateFooterRefConfigSchema>
|
export type FooterRefDataRaw = z.infer<typeof validateFooterRefConfigSchema>
|
||||||
|
|
||||||
const bookingWidgetToggleSchema = z
|
|
||||||
.object({
|
|
||||||
page_settings: z.object({
|
|
||||||
hide_booking_widget: z.boolean(),
|
|
||||||
}),
|
|
||||||
})
|
|
||||||
.optional()
|
|
||||||
|
|
||||||
export const validateBookingWidgetToggleSchema = z.object({
|
|
||||||
account_page: bookingWidgetToggleSchema,
|
|
||||||
loyalty_page: bookingWidgetToggleSchema,
|
|
||||||
content_page: bookingWidgetToggleSchema,
|
|
||||||
hotel_page: bookingWidgetToggleSchema,
|
|
||||||
current_blocks_page: bookingWidgetToggleSchema,
|
|
||||||
})
|
|
||||||
|
|
||||||
export type ValidateBookingWidgetToggleType = z.infer<
|
|
||||||
typeof validateBookingWidgetToggleSchema
|
|
||||||
>
|
|
||||||
|
|||||||
@@ -10,13 +10,6 @@ import {
|
|||||||
GetCurrentHeader,
|
GetCurrentHeader,
|
||||||
GetCurrentHeaderRef,
|
GetCurrentHeaderRef,
|
||||||
} from "@/lib/graphql/Query/CurrentHeader.graphql"
|
} from "@/lib/graphql/Query/CurrentHeader.graphql"
|
||||||
import {
|
|
||||||
GetAccountPageSettings,
|
|
||||||
GetContentPageSettings,
|
|
||||||
GetCurrentBlocksPageSettings,
|
|
||||||
GetHotelPageSettings,
|
|
||||||
GetLoyaltyPageSettings,
|
|
||||||
} from "@/lib/graphql/Query/PageSettings.graphql"
|
|
||||||
import { request } from "@/lib/graphql/request"
|
import { request } from "@/lib/graphql/request"
|
||||||
import { notFound } from "@/server/errors/trpc"
|
import { notFound } from "@/server/errors/trpc"
|
||||||
import { contentstackBaseProcedure, router } from "@/server/trpc"
|
import { contentstackBaseProcedure, router } from "@/server/trpc"
|
||||||
@@ -35,12 +28,11 @@ import {
|
|||||||
HeaderData,
|
HeaderData,
|
||||||
HeaderDataRaw,
|
HeaderDataRaw,
|
||||||
HeaderRefDataRaw,
|
HeaderRefDataRaw,
|
||||||
validateBookingWidgetToggleSchema,
|
|
||||||
ValidateBookingWidgetToggleType,
|
|
||||||
validateContactConfigSchema,
|
validateContactConfigSchema,
|
||||||
validateFooterConfigSchema,
|
validateFooterConfigSchema,
|
||||||
validateHeaderConfigSchema,
|
validateHeaderConfigSchema,
|
||||||
} from "./output"
|
} from "./output"
|
||||||
|
|
||||||
import { ContentTypeEnum } from "@/types/requests/contentType"
|
import { ContentTypeEnum } from "@/types/requests/contentType"
|
||||||
|
|
||||||
const meter = metrics.getMeter("trpc.contentstack.base")
|
const meter = metrics.getMeter("trpc.contentstack.base")
|
||||||
@@ -341,69 +333,4 @@ export const baseQueryRouter = router({
|
|||||||
)
|
)
|
||||||
return validatedFooterConfig.data.all_current_footer.items[0]
|
return validatedFooterConfig.data.all_current_footer.items[0]
|
||||||
}),
|
}),
|
||||||
page_settings: contentstackBaseProcedure
|
|
||||||
.input(langInput)
|
|
||||||
.query(async ({ ctx }) => {
|
|
||||||
const failedResponse = { hideBookingWidget: false }
|
|
||||||
const { contentType, uid, lang } = ctx
|
|
||||||
|
|
||||||
// This condition is to handle 404 page case
|
|
||||||
if (!contentType || !uid) {
|
|
||||||
console.log("No proper params defined: ", contentType, uid)
|
|
||||||
return failedResponse
|
|
||||||
}
|
|
||||||
let GetPageSettings = ""
|
|
||||||
const contentTypeCMS = <ValueOf<typeof ContentTypeEnum>>(
|
|
||||||
contentType.replaceAll("-", "_")
|
|
||||||
)
|
|
||||||
|
|
||||||
switch (contentTypeCMS) {
|
|
||||||
case ContentTypeEnum.accountPage:
|
|
||||||
GetPageSettings = GetAccountPageSettings
|
|
||||||
break
|
|
||||||
case ContentTypeEnum.loyaltyPage:
|
|
||||||
GetPageSettings = GetLoyaltyPageSettings
|
|
||||||
break
|
|
||||||
case ContentTypeEnum.contentPage:
|
|
||||||
GetPageSettings = GetContentPageSettings
|
|
||||||
break
|
|
||||||
case ContentTypeEnum.hotelPage:
|
|
||||||
GetPageSettings = GetHotelPageSettings
|
|
||||||
break
|
|
||||||
case ContentTypeEnum.currentBlocksPage:
|
|
||||||
GetPageSettings = GetCurrentBlocksPageSettings
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!GetPageSettings) {
|
|
||||||
console.error("No proper Content type defined: ", contentType)
|
|
||||||
return failedResponse
|
|
||||||
}
|
|
||||||
|
|
||||||
const response = await request<ValidateBookingWidgetToggleType>(
|
|
||||||
GetPageSettings,
|
|
||||||
{
|
|
||||||
uid: uid,
|
|
||||||
locale: lang,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
const bookingWidgetToggleData =
|
|
||||||
validateBookingWidgetToggleSchema.safeParse(response.data)
|
|
||||||
if (!bookingWidgetToggleData.success) {
|
|
||||||
console.error(
|
|
||||||
"Flag hide_booking_widget fetch error: ",
|
|
||||||
bookingWidgetToggleData.error
|
|
||||||
)
|
|
||||||
return failedResponse
|
|
||||||
}
|
|
||||||
|
|
||||||
const hideBookingWidget =
|
|
||||||
bookingWidgetToggleData.data[contentTypeCMS]?.page_settings
|
|
||||||
?.hide_booking_widget
|
|
||||||
|
|
||||||
return {
|
|
||||||
hideBookingWidget,
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
})
|
})
|
||||||
|
|||||||
5
server/routers/contentstack/bookingwidget/index.ts
Normal file
5
server/routers/contentstack/bookingwidget/index.ts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
import { mergeRouters } from "@/server/trpc"
|
||||||
|
|
||||||
|
import { bookingwidgetQueryRouter } from "./query"
|
||||||
|
|
||||||
|
export const bookingwidgetRouter = mergeRouters(bookingwidgetQueryRouter)
|
||||||
21
server/routers/contentstack/bookingwidget/output.ts
Normal file
21
server/routers/contentstack/bookingwidget/output.ts
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
import { z } from "zod"
|
||||||
|
|
||||||
|
const bookingWidgetToggleSchema = z
|
||||||
|
.object({
|
||||||
|
page_settings: z.object({
|
||||||
|
hide_booking_widget: z.boolean(),
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
.optional()
|
||||||
|
|
||||||
|
export const validateBookingWidgetToggleSchema = z.object({
|
||||||
|
account_page: bookingWidgetToggleSchema,
|
||||||
|
loyalty_page: bookingWidgetToggleSchema,
|
||||||
|
content_page: bookingWidgetToggleSchema,
|
||||||
|
hotel_page: bookingWidgetToggleSchema,
|
||||||
|
current_blocks_page: bookingWidgetToggleSchema,
|
||||||
|
})
|
||||||
|
|
||||||
|
export type ValidateBookingWidgetToggleType = z.infer<
|
||||||
|
typeof validateBookingWidgetToggleSchema
|
||||||
|
>
|
||||||
92
server/routers/contentstack/bookingwidget/query.ts
Normal file
92
server/routers/contentstack/bookingwidget/query.ts
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
import { ValueOf } from "next/dist/shared/lib/constants"
|
||||||
|
|
||||||
|
import {
|
||||||
|
GetAccountPageSettings,
|
||||||
|
GetContentPageSettings,
|
||||||
|
GetCurrentBlocksPageSettings,
|
||||||
|
GetHotelPageSettings,
|
||||||
|
GetLoyaltyPageSettings,
|
||||||
|
} from "@/lib/graphql/Query/BookingWidgetToggle.graphql"
|
||||||
|
import { request } from "@/lib/graphql/request"
|
||||||
|
import { contentstackExtendedProcedureUID, router } from "@/server/trpc"
|
||||||
|
|
||||||
|
import { generateTag } from "@/utils/generateTag"
|
||||||
|
|
||||||
|
import {
|
||||||
|
validateBookingWidgetToggleSchema,
|
||||||
|
ValidateBookingWidgetToggleType,
|
||||||
|
} from "./output"
|
||||||
|
|
||||||
|
import { ContentTypeEnum } from "@/types/requests/contentType"
|
||||||
|
|
||||||
|
export const bookingwidgetQueryRouter = router({
|
||||||
|
getToggle: contentstackExtendedProcedureUID.query(async ({ ctx }) => {
|
||||||
|
const failedResponse = { hideBookingWidget: false }
|
||||||
|
const { contentType, uid, lang } = ctx
|
||||||
|
|
||||||
|
// This condition is to handle 404 page case
|
||||||
|
if (!contentType || !uid) {
|
||||||
|
console.log("No proper params defined: ", contentType, uid)
|
||||||
|
return failedResponse
|
||||||
|
}
|
||||||
|
let GetPageSettings = ""
|
||||||
|
const contentTypeCMS = <ValueOf<typeof ContentTypeEnum>>(
|
||||||
|
contentType.replaceAll("-", "_")
|
||||||
|
)
|
||||||
|
|
||||||
|
switch (contentTypeCMS) {
|
||||||
|
case ContentTypeEnum.accountPage:
|
||||||
|
GetPageSettings = GetAccountPageSettings
|
||||||
|
break
|
||||||
|
case ContentTypeEnum.loyaltyPage:
|
||||||
|
GetPageSettings = GetLoyaltyPageSettings
|
||||||
|
break
|
||||||
|
case ContentTypeEnum.contentPage:
|
||||||
|
GetPageSettings = GetContentPageSettings
|
||||||
|
break
|
||||||
|
case ContentTypeEnum.hotelPage:
|
||||||
|
GetPageSettings = GetHotelPageSettings
|
||||||
|
break
|
||||||
|
case ContentTypeEnum.currentBlocksPage:
|
||||||
|
GetPageSettings = GetCurrentBlocksPageSettings
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!GetPageSettings) {
|
||||||
|
console.error("No proper Content type defined: ", contentType)
|
||||||
|
return failedResponse
|
||||||
|
}
|
||||||
|
|
||||||
|
const response = await request<ValidateBookingWidgetToggleType>(
|
||||||
|
GetPageSettings,
|
||||||
|
{
|
||||||
|
uid: uid,
|
||||||
|
locale: lang,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
next: {
|
||||||
|
tags: [generateTag(lang, uid, "bookingwidget")],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
const bookingWidgetToggleData = validateBookingWidgetToggleSchema.safeParse(
|
||||||
|
response.data
|
||||||
|
)
|
||||||
|
if (!bookingWidgetToggleData.success) {
|
||||||
|
console.error(
|
||||||
|
"Flag hide_booking_widget fetch error: ",
|
||||||
|
bookingWidgetToggleData.error
|
||||||
|
)
|
||||||
|
return failedResponse
|
||||||
|
}
|
||||||
|
|
||||||
|
const hideBookingWidget =
|
||||||
|
bookingWidgetToggleData.data[contentTypeCMS]?.page_settings
|
||||||
|
?.hide_booking_widget
|
||||||
|
|
||||||
|
return {
|
||||||
|
hideBookingWidget,
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
})
|
||||||
@@ -2,6 +2,7 @@ import { router } from "@/server/trpc"
|
|||||||
|
|
||||||
import { accountPageRouter } from "./accountPage"
|
import { accountPageRouter } from "./accountPage"
|
||||||
import { baseRouter } from "./base"
|
import { baseRouter } from "./base"
|
||||||
|
import { bookingwidgetRouter } from "./bookingwidget"
|
||||||
import { breadcrumbsRouter } from "./breadcrumbs"
|
import { breadcrumbsRouter } from "./breadcrumbs"
|
||||||
import { contentPageRouter } from "./contentPage"
|
import { contentPageRouter } from "./contentPage"
|
||||||
import { hotelPageRouter } from "./hotelPage"
|
import { hotelPageRouter } from "./hotelPage"
|
||||||
@@ -13,6 +14,7 @@ import { myPagesRouter } from "./myPages"
|
|||||||
export const contentstackRouter = router({
|
export const contentstackRouter = router({
|
||||||
accountPage: accountPageRouter,
|
accountPage: accountPageRouter,
|
||||||
base: baseRouter,
|
base: baseRouter,
|
||||||
|
bookingwidget: bookingwidgetRouter,
|
||||||
breadcrumbs: breadcrumbsRouter,
|
breadcrumbs: breadcrumbsRouter,
|
||||||
hotelPage: hotelPageRouter,
|
hotelPage: hotelPageRouter,
|
||||||
languageSwitcher: languageSwitcherRouter,
|
languageSwitcher: languageSwitcherRouter,
|
||||||
|
|||||||
Reference in New Issue
Block a user