diff --git a/app/[lang]/(live)/@bookingwidget/page.tsx b/app/[lang]/(live)/@bookingwidget/page.tsx index 33a43d76c..9b83da1b8 100644 --- a/app/[lang]/(live)/@bookingwidget/page.tsx +++ b/app/[lang]/(live)/@bookingwidget/page.tsx @@ -6,9 +6,7 @@ import { getLang } from "@/i18n/serverContext" export default async function BookingWidgetPage() { // Get the booking widget show/hide status based on page specific settings const bookingWidgetToggle = - await serverClient().contentstack.base.page_settings({ - lang: getLang(), - }) + await serverClient().contentstack.bookingwidget.getToggle() return ( <> diff --git a/lib/graphql/Query/PageSettings.graphql b/lib/graphql/Query/BookingWidgetToggle.graphql similarity index 100% rename from lib/graphql/Query/PageSettings.graphql rename to lib/graphql/Query/BookingWidgetToggle.graphql diff --git a/server/routers/contentstack/base/output.ts b/server/routers/contentstack/base/output.ts index 0f3500a57..3c81aae88 100644 --- a/server/routers/contentstack/base/output.ts +++ b/server/routers/contentstack/base/output.ts @@ -255,23 +255,3 @@ const validateFooterRefConfigSchema = z.object({ }) export type FooterRefDataRaw = z.infer - -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 -> diff --git a/server/routers/contentstack/base/query.ts b/server/routers/contentstack/base/query.ts index 9f204be11..27fb0368b 100644 --- a/server/routers/contentstack/base/query.ts +++ b/server/routers/contentstack/base/query.ts @@ -10,13 +10,6 @@ import { GetCurrentHeader, GetCurrentHeaderRef, } 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 { notFound } from "@/server/errors/trpc" import { contentstackBaseProcedure, router } from "@/server/trpc" @@ -35,12 +28,11 @@ import { HeaderData, HeaderDataRaw, HeaderRefDataRaw, - validateBookingWidgetToggleSchema, - ValidateBookingWidgetToggleType, validateContactConfigSchema, validateFooterConfigSchema, validateHeaderConfigSchema, } from "./output" + import { ContentTypeEnum } from "@/types/requests/contentType" const meter = metrics.getMeter("trpc.contentstack.base") @@ -341,69 +333,4 @@ export const baseQueryRouter = router({ ) 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 = >( - 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( - 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, - } - }), }) diff --git a/server/routers/contentstack/bookingwidget/index.ts b/server/routers/contentstack/bookingwidget/index.ts new file mode 100644 index 000000000..8aeebe7ae --- /dev/null +++ b/server/routers/contentstack/bookingwidget/index.ts @@ -0,0 +1,5 @@ +import { mergeRouters } from "@/server/trpc" + +import { bookingwidgetQueryRouter } from "./query" + +export const bookingwidgetRouter = mergeRouters(bookingwidgetQueryRouter) diff --git a/server/routers/contentstack/bookingwidget/output.ts b/server/routers/contentstack/bookingwidget/output.ts new file mode 100644 index 000000000..e113bae95 --- /dev/null +++ b/server/routers/contentstack/bookingwidget/output.ts @@ -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 +> diff --git a/server/routers/contentstack/bookingwidget/query.ts b/server/routers/contentstack/bookingwidget/query.ts new file mode 100644 index 000000000..ee98b2f58 --- /dev/null +++ b/server/routers/contentstack/bookingwidget/query.ts @@ -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 = >( + 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( + 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, + } + }), +}) diff --git a/server/routers/contentstack/index.ts b/server/routers/contentstack/index.ts index c04dc867d..d409f06ae 100644 --- a/server/routers/contentstack/index.ts +++ b/server/routers/contentstack/index.ts @@ -2,6 +2,7 @@ import { router } from "@/server/trpc" import { accountPageRouter } from "./accountPage" import { baseRouter } from "./base" +import { bookingwidgetRouter } from "./bookingwidget" import { breadcrumbsRouter } from "./breadcrumbs" import { contentPageRouter } from "./contentPage" import { hotelPageRouter } from "./hotelPage" @@ -13,6 +14,7 @@ import { myPagesRouter } from "./myPages" export const contentstackRouter = router({ accountPage: accountPageRouter, base: baseRouter, + bookingwidget: bookingwidgetRouter, breadcrumbs: breadcrumbsRouter, hotelPage: hotelPageRouter, languageSwitcher: languageSwitcherRouter,