diff --git a/apps/scandic-web/app/[lang]/(live)/@bookingwidget/[contentType]/[uid]/page.tsx b/apps/scandic-web/app/[lang]/(live)/@bookingwidget/[contentType]/[uid]/page.tsx
index ebf6596e4..d34d7e826 100644
--- a/apps/scandic-web/app/[lang]/(live)/@bookingwidget/[contentType]/[uid]/page.tsx
+++ b/apps/scandic-web/app/[lang]/(live)/@bookingwidget/[contentType]/[uid]/page.tsx
@@ -33,8 +33,9 @@ export default async function BookingWidgetPage({
}
const hotelPageParams = {
- hotel: hotelData?.hotel.id || "",
- city: hotelData?.hotel.cityName || "",
+ bookingCode: searchParams.bookingCode ?? "",
+ hotel: hotelData?.hotel.id ?? "",
+ city: hotelData?.hotel.cityName ?? "",
}
return
diff --git a/apps/scandic-web/components/BookingWidget/Client.tsx b/apps/scandic-web/components/BookingWidget/Client.tsx
index 9d40efbe8..ed2c258a0 100644
--- a/apps/scandic-web/components/BookingWidget/Client.tsx
+++ b/apps/scandic-web/components/BookingWidget/Client.tsx
@@ -1,7 +1,7 @@
"use client"
import { zodResolver } from "@hookform/resolvers/zod"
-import { useEffect, useRef, useState } from "react"
+import { use, useEffect, useRef, useState } from "react"
import { FormProvider, useForm } from "react-hook-form"
import { REDEMPTION } from "@/constants/booking"
@@ -37,6 +37,7 @@ import type { Location } from "@/types/trpc/routers/hotel/locations"
export default function BookingWidgetClient({
type,
bookingWidgetSearchParams,
+ pageSettingsBookingCodePromise,
}: BookingWidgetClientProps) {
const [isOpen, setIsOpen] = useState(false)
const bookingWidgetRef = useRef(null)
@@ -83,7 +84,13 @@ export default function BookingWidgetClient({
selectedLocation = getLocationObj(locations ?? [], params.city)
}
- const selectedBookingCode = params.bookingCode ?? ""
+ // if bookingCode is not provided in the search params,
+ // we will fetch it from the page settings stored in Contentstack.
+ const selectedBookingCode =
+ params.bookingCode ||
+ (pageSettingsBookingCodePromise !== null
+ ? use(pageSettingsBookingCodePromise)
+ : "")
const defaultRoomsData: BookingWidgetSchema["rooms"] = params.rooms?.map(
(room) => ({
diff --git a/apps/scandic-web/components/BookingWidget/index.tsx b/apps/scandic-web/components/BookingWidget/index.tsx
index e6e7aa415..e9001c3c4 100644
--- a/apps/scandic-web/components/BookingWidget/index.tsx
+++ b/apps/scandic-web/components/BookingWidget/index.tsx
@@ -1,4 +1,7 @@
-import { isBookingWidgetHidden } from "@/lib/trpc/memoizedRequests"
+import {
+ getPageSettingsBookingCode,
+ isBookingWidgetHidden,
+} from "@/lib/trpc/memoizedRequests"
import BookingWidgetClient from "./Client"
@@ -14,10 +17,16 @@ export default async function BookingWidget({
return null
}
+ let pageSettingsBookingCodePromise: Promise | null = null
+ if (!bookingWidgetSearchParams.bookingCode) {
+ pageSettingsBookingCodePromise = getPageSettingsBookingCode()
+ }
+
return (
)
}
diff --git a/apps/scandic-web/lib/graphql/Fragments/PageSettings.graphql b/apps/scandic-web/lib/graphql/Fragments/PageSettings.graphql
index 2b5786598..9f8c06df8 100644
--- a/apps/scandic-web/lib/graphql/Fragments/PageSettings.graphql
+++ b/apps/scandic-web/lib/graphql/Fragments/PageSettings.graphql
@@ -1,3 +1,4 @@
fragment PageSettings on PageSettings {
hide_booking_widget
+ booking_code
}
diff --git a/apps/scandic-web/lib/trpc/memoizedRequests/index.ts b/apps/scandic-web/lib/trpc/memoizedRequests/index.ts
index 0c6f051c2..a6f84a573 100644
--- a/apps/scandic-web/lib/trpc/memoizedRequests/index.ts
+++ b/apps/scandic-web/lib/trpc/memoizedRequests/index.ts
@@ -258,6 +258,14 @@ export const isBookingWidgetHidden = cache(
}
)
+export const getPageSettingsBookingCode = cache(
+ async function getMemoizedPageSettingsBookingCode() {
+ const lang = getLang()
+ const pageSettings = await getPageSettings(lang)
+ return pageSettings?.page.settings.booking_code ?? ""
+ }
+)
+
export const getJobylonFeed = cache(async function getMemoizedJobylonFeed() {
return serverClient().partner.jobylon.feed.get()
})
diff --git a/apps/scandic-web/server/routers/contentstack/pageSettings/output.ts b/apps/scandic-web/server/routers/contentstack/pageSettings/output.ts
index c53e6c96b..16f3a8322 100644
--- a/apps/scandic-web/server/routers/contentstack/pageSettings/output.ts
+++ b/apps/scandic-web/server/routers/contentstack/pageSettings/output.ts
@@ -1,7 +1,10 @@
import { z } from "zod"
+import { nullableStringValidator } from "@/utils/zod/stringValidator"
+
export const pageSettingsSchema = z.object({
hide_booking_widget: z.boolean(),
+ booking_code: nullableStringValidator,
})
export type PageSettingsSchema = z.output
diff --git a/apps/scandic-web/types/components/bookingWidget/index.ts b/apps/scandic-web/types/components/bookingWidget/index.ts
index 4daeb163e..8ecb70620 100644
--- a/apps/scandic-web/types/components/bookingWidget/index.ts
+++ b/apps/scandic-web/types/components/bookingWidget/index.ts
@@ -34,6 +34,7 @@ export interface BookingWidgetProps {
export interface BookingWidgetClientProps {
type?: BookingWidgetType
bookingWidgetSearchParams: SearchParams["searchParams"]
+ pageSettingsBookingCodePromise: Promise | null
}
export interface BookingWidgetToggleButtonProps {