feat(SW-237): Updated typings and code optimizations

This commit is contained in:
Hrishikesh Vaipurkar
2024-08-26 16:53:52 +02:00
parent 4d25573289
commit ad2182a60b
4 changed files with 60 additions and 18 deletions

View File

@@ -6,10 +6,10 @@ export default async function MyPagesLayout({
bookingwidget, bookingwidget,
breadcrumbs, breadcrumbs,
children, children,
}: React.PropsWithChildren & { }: React.PropsWithChildren<{
bookingwidget: React.ReactNode bookingwidget: React.ReactNode
breadcrumbs: React.ReactNode breadcrumbs: React.ReactNode
}) { }>) {
return ( return (
<> <>
{bookingwidget} {bookingwidget}

View File

@@ -255,3 +255,23 @@ 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
>

View File

@@ -1,4 +1,5 @@
import { metrics } from "@opentelemetry/api" import { metrics } from "@opentelemetry/api"
import { ValueOf } from "next/dist/shared/lib/constants"
import { GetContactConfig } from "@/lib/graphql/Query/ContactConfig.graphql" import { GetContactConfig } from "@/lib/graphql/Query/ContactConfig.graphql"
import { import {
@@ -34,10 +35,13 @@ 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"
const meter = metrics.getMeter("trpc.contentstack.base") const meter = metrics.getMeter("trpc.contentstack.base")
// OpenTelemetry metrics: ContactConfig // OpenTelemetry metrics: ContactConfig
@@ -349,46 +353,57 @@ export const baseQueryRouter = router({
return failedResponse return failedResponse
} }
let GetPageSettings = "" let GetPageSettings = ""
let pageType = contentType.replaceAll("-", "_") const contentTypeCMS = <ValueOf<typeof ContentTypeEnum>>(
contentType.replaceAll("-", "_")
)
switch (contentType) { switch (contentTypeCMS) {
case "account-page": case ContentTypeEnum.accountPage:
GetPageSettings = GetAccountPageSettings GetPageSettings = GetAccountPageSettings
break break
case "loyalty-page": case ContentTypeEnum.loyaltyPage:
GetPageSettings = GetLoyaltyPageSettings GetPageSettings = GetLoyaltyPageSettings
break break
case "content-page": case ContentTypeEnum.contentPage:
GetPageSettings = GetContentPageSettings GetPageSettings = GetContentPageSettings
break break
case "hotel-page": case ContentTypeEnum.hotelPage:
GetPageSettings = GetHotelPageSettings GetPageSettings = GetHotelPageSettings
break break
case "current-blocks-page": case ContentTypeEnum.currentBlocksPage:
GetPageSettings = GetCurrentBlocksPageSettings GetPageSettings = GetCurrentBlocksPageSettings
break break
} }
if (!GetPageSettings) { if (!GetPageSettings) {
console.error("No proper Page type defined: ", contentType) console.error("No proper Content type defined: ", contentType)
return failedResponse return failedResponse
} }
const response = await request<any>(GetPageSettings, { const response = await request<ValidateBookingWidgetToggleType>(
uid: uid, GetPageSettings,
locale: lang, {
}) uid: uid,
locale: lang,
}
)
if (!response.data) { const bookingWidgetToggleData =
console.error("Flag hide_booking_widget fetch error: ", response) validateBookingWidgetToggleSchema.safeParse(response.data)
if (!bookingWidgetToggleData.success) {
console.error(
"Flag hide_booking_widget fetch error: ",
bookingWidgetToggleData.error
)
return failedResponse return failedResponse
} }
const hideBookingWidget = const hideBookingWidget =
!!response.data[pageType]?.page_settings?.hide_booking_widget bookingWidgetToggleData.data[contentTypeCMS]?.page_settings
?.hide_booking_widget
return { return {
hideBookingWidget: hideBookingWidget, hideBookingWidget,
} }
}), }),
}) })

View File

@@ -0,0 +1,7 @@
export enum ContentTypeEnum {
accountPage = "account_page",
loyaltyPage = "loyalty_page",
hotelPage = "hotel_page",
contentPage = "content_page",
currentBlocksPage = "current_blocks_page",
}