Merged in feat/SW-2440-ancillaries-tracking (pull request #1846)
Feat(SW-2440): Ancillaries tracking * fix(SW-2440): move ancillaries tracking to separate object Approved-by: Christian Andolf
This commit is contained in:
@@ -23,18 +23,20 @@ export default function Tracking({
|
||||
|
||||
const rooms = bookingRooms.filter((room): room is Room => !!room)
|
||||
|
||||
const { hotelsTrackingData, pageTrackingData, paymentInfo } = getTracking(
|
||||
lang,
|
||||
bookingConfirmation.booking,
|
||||
bookingConfirmation.hotel,
|
||||
rooms
|
||||
)
|
||||
const { hotelsTrackingData, pageTrackingData, paymentInfo, ancillaries } =
|
||||
getTracking(
|
||||
lang,
|
||||
bookingConfirmation.booking,
|
||||
bookingConfirmation.hotel,
|
||||
rooms
|
||||
)
|
||||
|
||||
return (
|
||||
<TrackingSDK
|
||||
pageData={pageTrackingData}
|
||||
hotelInfo={hotelsTrackingData}
|
||||
paymentInfo={paymentInfo}
|
||||
ancillaries={ancillaries}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -6,8 +6,10 @@ import { getSpecialRoomType } from "@/utils/specialRoomType"
|
||||
|
||||
import { invertedBedTypeMap } from "../../utils"
|
||||
|
||||
import { RoomPackageCodeEnum } from "@/types/components/hotelReservation/selectRate/roomFilter"
|
||||
import {
|
||||
TrackingChannelEnum,
|
||||
type TrackingSDKAncillaries,
|
||||
type TrackingSDKHotelInfo,
|
||||
type TrackingSDKPageData,
|
||||
type TrackingSDKPaymentInfo,
|
||||
@@ -32,28 +34,30 @@ function getRate(cancellationRule: RateDefinition["cancellationRule"] | null) {
|
||||
}
|
||||
}
|
||||
|
||||
function findBreakfastPackage(
|
||||
function findAncillaryPackages(
|
||||
packages: BookingConfirmation["booking"]["packages"]
|
||||
) {
|
||||
return packages.find(
|
||||
(pkg) => pkg.code === BreakfastPackageEnum.REGULAR_BREAKFAST
|
||||
): BookingConfirmation["booking"]["packages"] {
|
||||
return packages.filter(
|
||||
(pkg) =>
|
||||
pkg.code === RoomPackageCodeEnum.PET_ROOM ||
|
||||
pkg.code === BreakfastPackageEnum.REGULAR_BREAKFAST
|
||||
)
|
||||
}
|
||||
|
||||
function mapBreakfastPackage(
|
||||
breakfastPackage: BookingConfirmation["booking"]["packages"][number],
|
||||
adults: number,
|
||||
function mapAncillaryPackage(
|
||||
ancillaryPackage: BookingConfirmation["booking"]["packages"][number],
|
||||
operaId: string
|
||||
) {
|
||||
return {
|
||||
hotelid: operaId,
|
||||
productCategory: "", // TODO: Add category
|
||||
productId: breakfastPackage.code!, // Is not found unless code exists
|
||||
productName: "BreakfastAdult",
|
||||
productPoints: 0,
|
||||
productPrice: +breakfastPackage.unitPrice,
|
||||
productType: "food",
|
||||
productUnits: adults,
|
||||
productId: ancillaryPackage.code,
|
||||
productName: ancillaryPackage.description,
|
||||
productPoints: ancillaryPackage.points,
|
||||
productPrice: ancillaryPackage.unitPrice,
|
||||
productType: ancillaryPackage.type ?? "",
|
||||
productUnits: ancillaryPackage.unit,
|
||||
productDeliveryTime: "",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,20 +87,17 @@ export function getTracking(
|
||||
booking.rateDefinition.cancellationRule ===
|
||||
CancellationRuleEnum.CancellableBefore6PM
|
||||
|
||||
const ancillaries: TrackingSDKAncillaries = rooms
|
||||
.filter((r) => findAncillaryPackages(r.packages))
|
||||
.flatMap((r) => {
|
||||
return r.packages.map((pkg) => mapAncillaryPackage(pkg, hotel.operaId))
|
||||
})
|
||||
|
||||
const hotelsTrackingData: TrackingSDKHotelInfo = {
|
||||
ageOfChildren: rooms.map((r) => r.childrenAges?.join(",") ?? "-").join("|"),
|
||||
analyticsRateCode: rooms
|
||||
.map((r) => getRate(r.rateDefinition.cancellationRule))
|
||||
.join("|"),
|
||||
ancillaries: rooms
|
||||
.filter((r) => findBreakfastPackage(r.packages))
|
||||
.map((r) => {
|
||||
return mapBreakfastPackage(
|
||||
findBreakfastPackage(r.packages)!,
|
||||
r.adults,
|
||||
hotel.operaId
|
||||
)
|
||||
}),
|
||||
arrivalDate: format(arrivalDate, "yyyy-MM-dd"),
|
||||
bedType: rooms
|
||||
.map((r) => r.bedDescription)
|
||||
@@ -182,5 +183,6 @@ export function getTracking(
|
||||
hotelsTrackingData,
|
||||
pageTrackingData,
|
||||
paymentInfo,
|
||||
ancillaries,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ export const useTrackHardNavigation = ({
|
||||
pageData,
|
||||
hotelInfo,
|
||||
paymentInfo,
|
||||
ancillaries,
|
||||
}: TrackingSDKProps) => {
|
||||
const {
|
||||
data: userTrackingData,
|
||||
@@ -68,6 +69,7 @@ export const useTrackHardNavigation = ({
|
||||
hotelInfo,
|
||||
userData,
|
||||
pageData,
|
||||
ancillaries,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -87,6 +89,7 @@ export const useTrackHardNavigation = ({
|
||||
sessionId,
|
||||
paymentInfo,
|
||||
isPending,
|
||||
ancillaries,
|
||||
])
|
||||
}
|
||||
|
||||
@@ -94,6 +97,7 @@ export const useTrackSoftNavigation = ({
|
||||
pageData,
|
||||
hotelInfo,
|
||||
paymentInfo,
|
||||
ancillaries,
|
||||
}: TrackingSDKProps) => {
|
||||
const {
|
||||
data: userTrackingData,
|
||||
@@ -156,6 +160,7 @@ export const useTrackSoftNavigation = ({
|
||||
userInfo: userData,
|
||||
hotelInfo: hotelInfo,
|
||||
paymentInfo,
|
||||
ancillaries,
|
||||
})
|
||||
}
|
||||
previousPathname.current = pathName // Update for next render
|
||||
@@ -175,6 +180,7 @@ export const useTrackSoftNavigation = ({
|
||||
sessionId,
|
||||
paymentInfo,
|
||||
userTrackingData,
|
||||
ancillaries,
|
||||
])
|
||||
}
|
||||
|
||||
@@ -185,6 +191,7 @@ const trackPerformance = async ({
|
||||
hotelInfo,
|
||||
userData,
|
||||
pageData,
|
||||
ancillaries,
|
||||
}: {
|
||||
pathName: string
|
||||
sessionId: string | null
|
||||
@@ -192,6 +199,7 @@ const trackPerformance = async ({
|
||||
hotelInfo: TrackingSDKProps["hotelInfo"]
|
||||
userData: TrackingSDKUserData
|
||||
pageData: TrackingSDKProps["pageData"]
|
||||
ancillaries: TrackingSDKProps["ancillaries"]
|
||||
}) => {
|
||||
let pageLoadTime: number | undefined = undefined
|
||||
let lcpTime: number | undefined = undefined
|
||||
@@ -223,6 +231,7 @@ const trackPerformance = async ({
|
||||
userInfo: userData,
|
||||
hotelInfo,
|
||||
paymentInfo,
|
||||
ancillaries,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import {
|
||||
} from "@/components/TrackingSDK/hooks"
|
||||
|
||||
import type {
|
||||
TrackingSDKAncillaries,
|
||||
TrackingSDKHotelInfo,
|
||||
TrackingSDKPageData,
|
||||
TrackingSDKPaymentInfo,
|
||||
@@ -15,13 +16,15 @@ export default function TrackingSDK({
|
||||
pageData,
|
||||
hotelInfo,
|
||||
paymentInfo,
|
||||
ancillaries,
|
||||
}: {
|
||||
pageData: TrackingSDKPageData
|
||||
hotelInfo?: TrackingSDKHotelInfo
|
||||
paymentInfo?: TrackingSDKPaymentInfo
|
||||
ancillaries?: TrackingSDKAncillaries
|
||||
}) {
|
||||
useTrackHardNavigation({ pageData, hotelInfo, paymentInfo })
|
||||
useTrackSoftNavigation({ pageData, hotelInfo, paymentInfo })
|
||||
useTrackHardNavigation({ pageData, hotelInfo, paymentInfo, ancillaries })
|
||||
useTrackSoftNavigation({ pageData, hotelInfo, paymentInfo, ancillaries })
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -52,9 +52,10 @@ export type TrackingSDKUserData =
|
||||
}
|
||||
| { loginStatus: "Error" }
|
||||
|
||||
export type TrackingSDKAncillaries = Ancillary[]
|
||||
|
||||
export type TrackingSDKHotelInfo = {
|
||||
ageOfChildren?: string // "10", "2,5,10"
|
||||
ancillaries?: Ancillary[]
|
||||
analyticsRateCode?: RateEnum | string
|
||||
arrivalDate?: string
|
||||
availableResults?: number // Number of hotels to choose from after a city search
|
||||
@@ -126,6 +127,7 @@ export type TrackingSDKProps = {
|
||||
pageData: TrackingSDKPageData
|
||||
hotelInfo?: TrackingSDKHotelInfo
|
||||
paymentInfo?: TrackingSDKPaymentInfo
|
||||
ancillaries?: TrackingSDKAncillaries
|
||||
}
|
||||
|
||||
export type TrackingSDKData = TrackingSDKPageData & {
|
||||
|
||||
Reference in New Issue
Block a user