From ad2182a60b0f759e59f5f476db0a50a37aaed819 Mon Sep 17 00:00:00 2001 From: Hrishikesh Vaipurkar Date: Mon, 26 Aug 2024 16:53:52 +0200 Subject: [PATCH] feat(SW-237): Updated typings and code optimizations --- .../(live)/(protected)/my-pages/layout.tsx | 4 +- server/routers/contentstack/base/output.ts | 20 ++++++++ server/routers/contentstack/base/query.ts | 47 ++++++++++++------- types/requests/contentType.ts | 7 +++ 4 files changed, 60 insertions(+), 18 deletions(-) create mode 100644 types/requests/contentType.ts diff --git a/app/[lang]/(live)/(protected)/my-pages/layout.tsx b/app/[lang]/(live)/(protected)/my-pages/layout.tsx index d070697c5..bc2d1fe2d 100644 --- a/app/[lang]/(live)/(protected)/my-pages/layout.tsx +++ b/app/[lang]/(live)/(protected)/my-pages/layout.tsx @@ -6,10 +6,10 @@ export default async function MyPagesLayout({ bookingwidget, breadcrumbs, children, -}: React.PropsWithChildren & { +}: React.PropsWithChildren<{ bookingwidget: React.ReactNode breadcrumbs: React.ReactNode -}) { +}>) { return ( <> {bookingwidget} diff --git a/server/routers/contentstack/base/output.ts b/server/routers/contentstack/base/output.ts index 3c81aae88..0f3500a57 100644 --- a/server/routers/contentstack/base/output.ts +++ b/server/routers/contentstack/base/output.ts @@ -255,3 +255,23 @@ 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 7c2882a97..9f204be11 100644 --- a/server/routers/contentstack/base/query.ts +++ b/server/routers/contentstack/base/query.ts @@ -1,4 +1,5 @@ import { metrics } from "@opentelemetry/api" +import { ValueOf } from "next/dist/shared/lib/constants" import { GetContactConfig } from "@/lib/graphql/Query/ContactConfig.graphql" import { @@ -34,10 +35,13 @@ import { HeaderData, HeaderDataRaw, HeaderRefDataRaw, + validateBookingWidgetToggleSchema, + ValidateBookingWidgetToggleType, validateContactConfigSchema, validateFooterConfigSchema, validateHeaderConfigSchema, } from "./output" +import { ContentTypeEnum } from "@/types/requests/contentType" const meter = metrics.getMeter("trpc.contentstack.base") // OpenTelemetry metrics: ContactConfig @@ -349,46 +353,57 @@ export const baseQueryRouter = router({ return failedResponse } let GetPageSettings = "" - let pageType = contentType.replaceAll("-", "_") + const contentTypeCMS = >( + contentType.replaceAll("-", "_") + ) - switch (contentType) { - case "account-page": + switch (contentTypeCMS) { + case ContentTypeEnum.accountPage: GetPageSettings = GetAccountPageSettings break - case "loyalty-page": + case ContentTypeEnum.loyaltyPage: GetPageSettings = GetLoyaltyPageSettings break - case "content-page": + case ContentTypeEnum.contentPage: GetPageSettings = GetContentPageSettings break - case "hotel-page": + case ContentTypeEnum.hotelPage: GetPageSettings = GetHotelPageSettings break - case "current-blocks-page": + case ContentTypeEnum.currentBlocksPage: GetPageSettings = GetCurrentBlocksPageSettings break } if (!GetPageSettings) { - console.error("No proper Page type defined: ", contentType) + console.error("No proper Content type defined: ", contentType) return failedResponse } - const response = await request(GetPageSettings, { - uid: uid, - locale: lang, - }) + const response = await request( + GetPageSettings, + { + uid: uid, + locale: lang, + } + ) - if (!response.data) { - console.error("Flag hide_booking_widget fetch error: ", response) + const bookingWidgetToggleData = + validateBookingWidgetToggleSchema.safeParse(response.data) + if (!bookingWidgetToggleData.success) { + console.error( + "Flag hide_booking_widget fetch error: ", + bookingWidgetToggleData.error + ) return failedResponse } const hideBookingWidget = - !!response.data[pageType]?.page_settings?.hide_booking_widget + bookingWidgetToggleData.data[contentTypeCMS]?.page_settings + ?.hide_booking_widget return { - hideBookingWidget: hideBookingWidget, + hideBookingWidget, } }), }) diff --git a/types/requests/contentType.ts b/types/requests/contentType.ts new file mode 100644 index 000000000..605c96c9b --- /dev/null +++ b/types/requests/contentType.ts @@ -0,0 +1,7 @@ +export enum ContentTypeEnum { + accountPage = "account_page", + loyaltyPage = "loyalty_page", + hotelPage = "hotel_page", + contentPage = "content_page", + currentBlocksPage = "current_blocks_page", +}