diff --git a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/@modal/(.)map/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/@modal/(.)map/page.tsx
index fd9cc33c5..bade52f6a 100644
--- a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/@modal/(.)map/page.tsx
+++ b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/@modal/(.)map/page.tsx
@@ -1,5 +1,7 @@
+import { differenceInCalendarDays, format, isWeekend } from "date-fns"
import { notFound } from "next/navigation"
+import { Lang } from "@/constants/languages"
import { env } from "@/env/server"
import { getLocations } from "@/lib/trpc/memoizedRequests"
@@ -10,11 +12,17 @@ import {
getHotelReservationQueryParams,
} from "@/components/HotelReservation/SelectRate/RoomSelection/utils"
import { MapModal } from "@/components/MapModal"
+import TrackingSDK from "@/components/TrackingSDK"
import { setLang } from "@/i18n/serverContext"
import { fetchAvailableHotels } from "../../utils"
import type { SelectHotelSearchParams } from "@/types/components/hotelReservation/selectHotel/selectHotelSearchParams"
+import {
+ TrackingChannelEnum,
+ TrackingSDKHotelInfo,
+ TrackingSDKPageData,
+} from "@/types/components/tracking"
import type { LangParams, PageArgs } from "@/types/params"
export default async function SelectHotelMapPage({
@@ -44,9 +52,8 @@ export default async function SelectHotelMapPage({
const selectHotelParamsObject =
getHotelReservationQueryParams(selectHotelParams)
const adults = selectHotelParamsObject.room[0].adults // TODO: Handle multiple rooms
- const children = selectHotelParamsObject.room[0].child
- ? generateChildrenString(selectHotelParamsObject.room[0].child)
- : undefined // TODO: Handle multiple rooms
+ const child = selectHotelParamsObject.room[0].child // TODO: Handle multiple rooms
+ const children = child ? generateChildrenString(child) : undefined // TODO: Handle multiple rooms
const hotels = await fetchAvailableHotels({
cityId: city.id,
@@ -56,6 +63,34 @@ export default async function SelectHotelMapPage({
children,
})
+ const arrivalDate = new Date(searchParams.fromDate)
+ const departureDate = new Date(searchParams.toDate)
+
+ const pageTrackingData: TrackingSDKPageData = {
+ pageId: "select-hotel",
+ domainLanguage: params.lang as Lang,
+ channel: TrackingChannelEnum["hotelreservation"],
+ pageName: "hotelreservation|select-hotel|mapview",
+ siteSections: "hotelreservation|select-hotel|mapview",
+ pageType: "bookinghotelsmapviewpage",
+ }
+
+ const hotelsTrackingData: TrackingSDKHotelInfo = {
+ availableResults: hotels.length,
+ searchTerm: searchParams.city,
+ arrivalDate: format(arrivalDate, "yyyy-MM-dd"),
+ departureDate: format(departureDate, "yyyy-MM-dd"),
+ noOfAdults: adults,
+ noOfChildren: child?.length,
+ noOfRooms: 1, // // TODO: Handle multiple rooms
+ duration: differenceInCalendarDays(departureDate, arrivalDate),
+ leadTime: differenceInCalendarDays(arrivalDate, new Date()),
+ searchType: "destination",
+ bookingTypeofDay: isWeekend(arrivalDate) ? "weekend" : "weekday",
+ country: hotels?.[0].hotelData.address.country,
+ region: hotels?.[0].hotelData.address.city,
+ }
+
const hotelPins = getHotelPins(hotels)
return (
@@ -66,6 +101,7 @@ export default async function SelectHotelMapPage({
mapId={googleMapId}
hotels={hotels}
/>
+
)
}
diff --git a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/page.tsx
index b7fbf345c..981531917 100644
--- a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/page.tsx
+++ b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/page.tsx
@@ -97,8 +97,8 @@ export default async function SelectHotelPage({
leadTime: differenceInCalendarDays(arrivalDate, new Date()),
searchType: "destination",
bookingTypeofDay: isWeekend(arrivalDate) ? "weekend" : "weekday",
- country: hotels[0].hotelData.address.country,
- region: hotels[0].hotelData.address.city,
+ country: hotels?.[0].hotelData.address.country,
+ region: hotels?.[0].hotelData.address.city,
}
return (
diff --git a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate/page.tsx
index fd9db4d6c..dfd3fba09 100644
--- a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate/page.tsx
+++ b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate/page.tsx
@@ -1,5 +1,7 @@
+import { differenceInCalendarDays, format, isWeekend } from "date-fns"
import { notFound } from "next/navigation"
+import { Lang } from "@/constants/languages"
import { dt } from "@/lib/dt"
import {
getHotelData,
@@ -14,10 +16,16 @@ import {
generateChildrenString,
getHotelReservationQueryParams,
} from "@/components/HotelReservation/SelectRate/RoomSelection/utils"
+import TrackingSDK from "@/components/TrackingSDK"
import { setLang } from "@/i18n/serverContext"
import { RoomPackageCodeEnum } from "@/types/components/hotelReservation/selectRate/roomFilter"
import type { SelectRateSearchParams } from "@/types/components/hotelReservation/selectRate/selectRate"
+import {
+ TrackingChannelEnum,
+ TrackingSDKHotelInfo,
+ TrackingSDKPageData,
+} from "@/types/components/tracking"
import type { LangParams, PageArgs } from "@/types/params"
export default async function SelectRatePage({
@@ -84,6 +92,46 @@ export default async function SelectRatePage({
getProfileSafely(),
])
+ const arrivalDate = new Date(searchParams.fromDate)
+ const departureDate = new Date(searchParams.toDate)
+ const hotelAttributes = hotelData?.data.attributes
+
+ const roomCategories = hotelData?.included
+
+ const noRoomsAvailable = roomsAvailability?.roomConfigurations.reduce(
+ (acc, room) => {
+ return acc && room.status === "NotAvailable"
+ },
+ true
+ )
+
+ const pageTrackingData: TrackingSDKPageData = {
+ pageId: "select-rate",
+ domainLanguage: params.lang as Lang,
+ channel: TrackingChannelEnum["hotelreservation"],
+ pageName: "hotelreservation|select-rate",
+ siteSections: "hotelreservation|select-rate",
+ pageType: "bookingroomsandratespage",
+ }
+
+ const hotelsTrackingData: TrackingSDKHotelInfo = {
+ searchTerm: searchParams.city,
+ arrivalDate: format(arrivalDate, "yyyy-MM-dd"),
+ departureDate: format(departureDate, "yyyy-MM-dd"),
+ noOfAdults: adults,
+ noOfChildren: childrenCount,
+ //childBedPreference // "adults|adults|extra|adults"
+ noOfRooms: 1, // // TODO: Handle multiple rooms
+ duration: differenceInCalendarDays(departureDate, arrivalDate),
+ leadTime: differenceInCalendarDays(arrivalDate, new Date()),
+ searchType: "hotel",
+ bookingTypeofDay: isWeekend(arrivalDate) ? "weekend" : "weekday",
+ country: hotelAttributes?.address.country,
+ region: hotelAttributes?.address.city,
+ availableResults: roomCategories?.length,
+ //lowestRoomPrice:
+ }
+
if (!roomsAvailability) {
return "No rooms found" // TODO: Add a proper error message
}
@@ -92,24 +140,19 @@ export default async function SelectRatePage({
return "No hotel data found" // TODO: Add a proper error message
}
- const roomCategories = hotelData?.included
-
- const noRoomsAvailable = roomsAvailability.roomConfigurations.reduce(
- (acc, room) => {
- return acc && room.status === "NotAvailable"
- },
- true
- )
-
return (
<>
-
+
+
>
)
}