Merged in fix/SW-2428-room-preferences-pageview (pull request #2095)

fix(SW-2428): read room packages from search param in select rate tracking

* fix(SW-2428): read room packages from search param in select rate tracking


Approved-by: Bianca Widstam
This commit is contained in:
Tobias Johansson
2025-05-20 07:15:53 +00:00
parent b641f8387e
commit f4ef5a342f
3 changed files with 107 additions and 46 deletions
@@ -0,0 +1,71 @@
"use client"
import { useSearchParams } from "next/navigation"
import React from "react"
import { REDEMPTION } from "@/constants/booking"
import TrackingSDK from "@/components/TrackingSDK"
import useLang from "@/hooks/useLang"
import { convertSearchParamsToObj, searchParamsToRecord } from "@/utils/url"
import { getValidDates } from "../getValidDates"
import { getTracking } from "./tracking"
import type { SelectRateSearchParams } from "@/types/components/hotelReservation/selectRate/selectRate"
import type { ChildrenInRoom } from "@/utils/hotelSearchDetails"
export default function Tracking({
adultsInRoom,
childrenInRoom,
hotelId,
hotelName,
noOfRooms,
country,
city,
}: {
adultsInRoom: number[]
childrenInRoom: ChildrenInRoom
hotelId: string
hotelName: string
noOfRooms: number
country: string
city: string
}) {
const lang = useLang()
const params = useSearchParams()
const selectRateParams = convertSearchParamsToObj<SelectRateSearchParams>(
searchParamsToRecord(params)
)
const { fromDate, toDate } = getValidDates(
selectRateParams.fromDate,
selectRateParams.toDate
)
const { rooms, searchType, bookingCode, city: paramCity } = selectRateParams
const arrivalDate = fromDate.toDate()
const departureDate = toDate.toDate()
const { hotelsTrackingData, pageTrackingData } = getTracking(
lang,
arrivalDate,
departureDate,
adultsInRoom,
childrenInRoom,
hotelId,
hotelName,
noOfRooms,
country,
city,
paramCity,
bookingCode,
searchType === REDEMPTION,
rooms
)
return (
<TrackingSDK pageData={pageTrackingData} hotelInfo={hotelsTrackingData} />
)
}
@@ -0,0 +1,87 @@
import { differenceInCalendarDays, format, isWeekend } from "date-fns"
import { ChildBedMapEnum } from "@/types/components/bookingWidget/enums"
import { RoomPackageCodeEnum } from "@/types/components/hotelReservation/selectRate/roomFilter"
import type { Room } from "@/types/components/hotelReservation/selectRate/selectRate"
import {
TrackingChannelEnum,
type TrackingSDKHotelInfo,
type TrackingSDKPageData,
} from "@/types/components/tracking"
import type { Lang } from "@/constants/languages"
import type { ChildrenInRoom } from "@/utils/hotelSearchDetails"
export function getTracking(
lang: Lang,
arrivalDate: Date,
departureDate: Date,
adultsInRoom: number[],
childrenInRoom: ChildrenInRoom,
hotelId: string,
hotelName: string,
noOfRooms: number,
country: string | undefined,
hotelCity: string | undefined,
paramCity: string | undefined,
bookingCode?: string,
isRedemption?: boolean,
rooms?: Room[]
) {
const pageTrackingData: TrackingSDKPageData = {
channel: TrackingChannelEnum.hotelreservation,
domainLanguage: lang,
pageId: "select-rate",
pageName: "hotelreservation|select-rate",
pageType: "bookingroomsandratespage",
siteSections: "hotelreservation|select-rate",
siteVersion: "new-web",
}
const hotelsTrackingData: TrackingSDKHotelInfo = {
ageOfChildren: childrenInRoom
?.map((c) => c?.map((k) => k.age).join(",") ?? "")
.join("|"),
arrivalDate: format(arrivalDate, "yyyy-MM-dd"),
bookingTypeofDay: isWeekend(arrivalDate) ? "weekend" : "weekday",
childBedPreference: childrenInRoom
?.map((c) => c?.map((k) => ChildBedMapEnum[k.bed]).join(",") ?? "")
.join("|"),
country,
departureDate: format(departureDate, "yyyy-MM-dd"),
duration: differenceInCalendarDays(departureDate, arrivalDate),
hotelID: hotelId,
leadTime: differenceInCalendarDays(arrivalDate, new Date()),
noOfAdults: adultsInRoom.join(","),
noOfChildren: childrenInRoom?.map((kids) => kids?.length ?? 0).join(","),
noOfRooms,
region: hotelCity,
searchTerm: paramCity ?? hotelName,
searchType: "hotel",
bookingCode: bookingCode ?? "n/a",
rewardNight: isRedemption ? "yes" : "no",
specialRoomType: rooms
?.map((room) => {
const packages = room.packages
?.map((pkg) => {
if (pkg === RoomPackageCodeEnum.ACCESSIBILITY_ROOM) {
return "accessibility"
} else if (pkg === RoomPackageCodeEnum.ALLERGY_ROOM) {
return "allergy friendly"
} else if (pkg === RoomPackageCodeEnum.PET_ROOM) {
return "pet room"
} else {
return ""
}
})
.join(",")
return packages ?? ""
})
.join("|"),
}
return {
hotelsTrackingData,
pageTrackingData,
}
}