diff --git a/components/Current/Header/index.tsx b/components/Current/Header/index.tsx index de5948d30..a13346c22 100644 --- a/components/Current/Header/index.tsx +++ b/components/Current/Header/index.tsx @@ -24,10 +24,11 @@ export default async function Header({ const user = await serverClient().user.name() - /** - * ToDo: Create logic to get this info from ContentStack based on page - * */ - const hideBookingWidget = true + // Get the booking widget show/hide status based on page specific settings + const bookingWidgetToggle = + await serverClient().contentstack.base.page_settings({ + lang: getLang(), + }) if (!data) { return null @@ -60,7 +61,9 @@ export default async function Header({ bookingHref={homeHref} user={user} /> - {hideBookingWidget ? null : } + {bookingWidgetToggle && bookingWidgetToggle.hideBookingWidget ? null : ( + + )} ) } diff --git a/lib/graphql/Query/PageSettings.graphql b/lib/graphql/Query/PageSettings.graphql new file mode 100644 index 000000000..fa6f73fff --- /dev/null +++ b/lib/graphql/Query/PageSettings.graphql @@ -0,0 +1,39 @@ +query GetAccountPageSettings($uid: String!, $locale: String!) { + account_page(uid: $uid, locale: $locale) { + page_settings { + hide_booking_widget + } + } +} + +query GetLoyaltyPageSettings($uid: String!, $locale: String!) { + loyalty_page(uid: $uid, locale: $locale) { + page_settings { + hide_booking_widget + } + } +} + +query GetContentPageSettings($uid: String!, $locale: String!) { + content_page(uid: $uid, locale: $locale) { + page_settings { + hide_booking_widget + } + } +} + +query GetHotelPageSettings($uid: String!, $locale: String!) { + hotel_page(uid: $uid, locale: $locale) { + page_settings { + hide_booking_widget + } + } +} + +query GetCurrentBlocksPageSettings($uid: String!, $locale: String!) { + current_blocks_page(uid: $uid, locale: $locale) { + page_settings { + hide_booking_widget + } + } +} diff --git a/server/routers/contentstack/base/query.ts b/server/routers/contentstack/base/query.ts index 12b1fa6d6..7c2882a97 100644 --- a/server/routers/contentstack/base/query.ts +++ b/server/routers/contentstack/base/query.ts @@ -9,6 +9,13 @@ 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" @@ -330,4 +337,58 @@ 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 = "" + let pageType = contentType.replaceAll("-", "_") + + switch (contentType) { + case "account-page": + GetPageSettings = GetAccountPageSettings + break + case "loyalty-page": + GetPageSettings = GetLoyaltyPageSettings + break + case "content-page": + GetPageSettings = GetContentPageSettings + break + case "hotel-page": + GetPageSettings = GetHotelPageSettings + break + case "current-blocks-page": + GetPageSettings = GetCurrentBlocksPageSettings + break + } + + if (!GetPageSettings) { + console.error("No proper Page type defined: ", contentType) + return failedResponse + } + + const response = await request(GetPageSettings, { + uid: uid, + locale: lang, + }) + + if (!response.data) { + console.error("Flag hide_booking_widget fetch error: ", response) + return failedResponse + } + + const hideBookingWidget = + !!response.data[pageType]?.page_settings?.hide_booking_widget + + return { + hideBookingWidget: hideBookingWidget, + } + }), })