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