From 76c353058b46b88fcabafd971f2c5f6aeb7a448b Mon Sep 17 00:00:00 2001 From: Bianca Widstam Date: Wed, 22 Oct 2025 14:34:59 +0000 Subject: [PATCH] Merged in fix/BOOK-459-tracking-search (pull request #2984) fix(BOOK-459): update searchTerm to city or hotelname * fix(BOOK-459): update searchTerm to city or hotelname Approved-by: Erik Tiekstra --- .../BookingConfirmation/Tracking/index.tsx | 7 +------ .../BookingConfirmation/Tracking/tracking.ts | 5 ++--- .../EnterDetails/Payment/BookingAlert/index.tsx | 10 +++++++--- .../components/EnterDetails/Tracking/index.tsx | 6 +----- .../components/EnterDetails/Tracking/tracking.ts | 5 ++--- .../components/SelectRate/AvailabilityError.tsx | 15 +++++++++++---- .../SelectRate/Tracking/SelectRateTracking.tsx | 3 +-- .../components/SelectRate/Tracking/tracking.ts | 4 +--- .../lib/components/SelectRate/index.tsx | 2 +- .../contexts/EnterDetails/EnterDetailsContext.tsx | 3 +++ .../lib/pages/AlternativeHotelsMapPage.tsx | 2 +- .../lib/pages/AlternativeHotelsPage.tsx | 2 +- .../booking-flow/lib/pages/EnterDetailsPage.tsx | 1 + .../booking-flow/lib/pages/SelectHotelMapPage.tsx | 2 +- .../lib/stores/enter-details/index.ts | 1 + .../lib/stores/enter-details/types.ts | 2 ++ packages/tracking/lib/NoAvailabilityTracking.tsx | 5 +++-- 17 files changed, 40 insertions(+), 35 deletions(-) diff --git a/packages/booking-flow/lib/components/BookingConfirmation/Tracking/index.tsx b/packages/booking-flow/lib/components/BookingConfirmation/Tracking/index.tsx index 701a59a2f..5f7f1bd20 100644 --- a/packages/booking-flow/lib/components/BookingConfirmation/Tracking/index.tsx +++ b/packages/booking-flow/lib/components/BookingConfirmation/Tracking/index.tsx @@ -7,7 +7,6 @@ import { TrackingSDK } from "@scandic-hotels/tracking/TrackingSDK" import { useBookingFlowConfig } from "../../../bookingFlowConfig/bookingFlowConfigContext" import { clearPaymentInfoSessionStorage } from "../../../components/EnterDetails/Payment/helpers" import useLang from "../../../hooks/useLang" -import { useSearchHistory } from "../../../hooks/useSearchHistory" import { useBookingConfirmationStore } from "../../../stores/booking-confirmation" import { getTracking } from "./tracking" @@ -37,9 +36,6 @@ export default function BookingConfirmationTracking({ sessionStorage.setItem("loadedBookingConfirmationRefId", refId) }, [refId]) - const searchHistory = useSearchHistory() - const searchTerm = searchHistory.searchHistory[0]?.name - let trackingData = null if (bookingRooms.every(Boolean)) { @@ -49,8 +45,7 @@ export default function BookingConfirmationTracking({ bookingConfirmation.booking, bookingConfirmation.hotel, rooms, - config, - searchTerm + config ) } diff --git a/packages/booking-flow/lib/components/BookingConfirmation/Tracking/tracking.ts b/packages/booking-flow/lib/components/BookingConfirmation/Tracking/tracking.ts index 5e2294f02..14d0b381a 100644 --- a/packages/booking-flow/lib/components/BookingConfirmation/Tracking/tracking.ts +++ b/packages/booking-flow/lib/components/BookingConfirmation/Tracking/tracking.ts @@ -64,8 +64,7 @@ export function getTracking( booking: BookingConfirmation["booking"], hotel: BookingConfirmation["hotel"], rooms: Room[], - config: Pick, - searchTerm?: string + config: Pick ) { const arrivalDate = new Date(booking.checkInDate) const departureDate = new Date(booking.checkOutDate) @@ -160,7 +159,7 @@ export function getTracking( points: booking.roomPoints > 0 ? booking.roomPoints : undefined, roomPrice: rooms.reduce((total, room) => total + room.roomPrice, 0), roomTypeCode: rooms.map((r) => r.roomTypeCode ?? "").join(","), - searchTerm, + searchTerm: hotel.name, searchType: "hotel", specialRoomType: rooms .map((room) => getSpecialRoomType(room.packages)) diff --git a/packages/booking-flow/lib/components/EnterDetails/Payment/BookingAlert/index.tsx b/packages/booking-flow/lib/components/EnterDetails/Payment/BookingAlert/index.tsx index aef23de45..8f9a33de2 100644 --- a/packages/booking-flow/lib/components/EnterDetails/Payment/BookingAlert/index.tsx +++ b/packages/booking-flow/lib/components/EnterDetails/Payment/BookingAlert/index.tsx @@ -10,6 +10,7 @@ import { useSessionId } from "@scandic-hotels/common/hooks/useSessionId" import useStickyPosition from "@scandic-hotels/common/hooks/useStickyPosition" import { Alert } from "@scandic-hotels/design-system/Alert" import { trackNoAvailability } from "@scandic-hotels/tracking/NoAvailabilityTracking" +import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking" import { BookingErrorCodeEnum } from "@scandic-hotels/trpc/enums/bookingErrorCode" import useLang from "../../../../hooks/useLang" @@ -169,6 +170,7 @@ export default function BookingAlert({ isVisible = false }: BookingAlertProps) { function useNoAvailabilityTracking() { const { fromDate, toDate, hotelId, bookingCode, searchType, rooms } = useEnterDetailsStore((state) => state.booking) + const hotelName = useEnterDetailsStore((state) => state.hotelName) const lang = useLang() const sessionId = useSessionId() @@ -186,12 +188,13 @@ function useNoAvailabilityTracking() { trackNoAvailability({ specialRoomType, lang, - searchTerm: hotelId, + searchTerm: hotelName, fromDate, toDate, hotelId, noOfRooms: rooms.length, - searchType, + searchType: "hotel", + rewardNight: searchType === SEARCH_TYPE_REDEMPTION ? "yes" : "no", bookingCode: bookingCode ?? "n/a", pageId: "details", pageName: "hotelreservation|details", @@ -203,9 +206,10 @@ function useNoAvailabilityTracking() { [ specialRoomType, lang, - hotelId, + hotelName, fromDate, toDate, + hotelId, rooms.length, searchType, bookingCode, diff --git a/packages/booking-flow/lib/components/EnterDetails/Tracking/index.tsx b/packages/booking-flow/lib/components/EnterDetails/Tracking/index.tsx index f4ce3ef7a..244c78139 100644 --- a/packages/booking-flow/lib/components/EnterDetails/Tracking/index.tsx +++ b/packages/booking-flow/lib/components/EnterDetails/Tracking/index.tsx @@ -3,7 +3,6 @@ import { TrackingSDK } from "@scandic-hotels/tracking/TrackingSDK" import { useBookingFlowConfig } from "../../../bookingFlowConfig/bookingFlowConfigContext" -import { useSearchHistory } from "../../../hooks/useSearchHistory" import { useEnterDetailsStore } from "../../../stores/enter-details" import { getTracking } from "./tracking" @@ -33,8 +32,6 @@ export default function EnterDetailsTrackingWrapper({ breakfastPackages: state.breakfastPackages, })) const config = useBookingFlowConfig() - const searchHistory = useSearchHistory() - const searchTerm = searchHistory.searchHistory[0]?.name const { hotelsTrackingData, pageTrackingData, ancillaries } = getTracking( booking, @@ -44,8 +41,7 @@ export default function EnterDetailsTrackingWrapper({ lang, storedRooms, breakfastPackages, - config, - searchTerm + config ) return ( diff --git a/packages/booking-flow/lib/components/EnterDetails/Tracking/tracking.ts b/packages/booking-flow/lib/components/EnterDetails/Tracking/tracking.ts index 8dd0bf668..5d31527bf 100644 --- a/packages/booking-flow/lib/components/EnterDetails/Tracking/tracking.ts +++ b/packages/booking-flow/lib/components/EnterDetails/Tracking/tracking.ts @@ -36,8 +36,7 @@ export function getTracking( lang: Lang, storedRooms: RoomState[], breakfastPackages: BreakfastPackages, - config: Pick, - searchTerm?: string + config: Pick ) { const arrivalDate = new Date(booking.fromDate) const departureDate = new Date(booking.toDate) @@ -205,7 +204,7 @@ export function getTracking( // @ts-expect-error - redemption object doesn't exist error rooms.find((room) => "redemption" in room.roomRate)?.roomRate.redemption .localPrice.pointsPerStay ?? "n/a", - searchTerm, + searchTerm: hotel.name, searchType: "hotel", specialRoomType: rooms .map((room) => getSpecialRoomType(room.packages)) diff --git a/packages/booking-flow/lib/components/SelectRate/AvailabilityError.tsx b/packages/booking-flow/lib/components/SelectRate/AvailabilityError.tsx index 7b8eb35f6..e953ce54a 100644 --- a/packages/booking-flow/lib/components/SelectRate/AvailabilityError.tsx +++ b/packages/booking-flow/lib/components/SelectRate/AvailabilityError.tsx @@ -7,6 +7,7 @@ import { useIntl } from "react-intl" import { useSessionId } from "@scandic-hotels/common/hooks/useSessionId" import { toast } from "@scandic-hotels/design-system/Toast" import { trackNoAvailability } from "@scandic-hotels/tracking/NoAvailabilityTracking" +import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking" import { BookingErrorCodeEnum } from "@scandic-hotels/trpc/enums/bookingErrorCode" import useLang from "../../hooks/useLang" @@ -16,9 +17,13 @@ import type { SelectRateBooking } from "../../types/components/selectRate/select type AvailabilityErrorProps = { booking: SelectRateBooking + hotelName: string } -export default function AvailabilityError({ booking }: AvailabilityErrorProps) { +export default function AvailabilityError({ + booking, + hotelName, +}: AvailabilityErrorProps) { const intl = useIntl() const pathname = usePathname() const searchParams = useSearchParams() @@ -53,13 +58,14 @@ export default function AvailabilityError({ booking }: AvailabilityErrorProps) { trackNoAvailability({ specialRoomType, - searchTerm: hotelId, + searchTerm: hotelName, lang, fromDate, toDate, noOfRooms: rooms.length, - searchType, + searchType: "hotel", hotelId, + rewardNight: searchType === SEARCH_TYPE_REDEMPTION ? "yes" : "no", bookingCode, pageId: "select-rate", pageName: "hotelreservation|select-rate", @@ -70,11 +76,12 @@ export default function AvailabilityError({ booking }: AvailabilityErrorProps) { }) }, [ rooms, - hotelId, + hotelName, lang, fromDate, toDate, searchType, + hotelId, bookingCode, sessionId, ]) diff --git a/packages/booking-flow/lib/components/SelectRate/Tracking/SelectRateTracking.tsx b/packages/booking-flow/lib/components/SelectRate/Tracking/SelectRateTracking.tsx index 55652fe6b..b2fbcc6d4 100644 --- a/packages/booking-flow/lib/components/SelectRate/Tracking/SelectRateTracking.tsx +++ b/packages/booking-flow/lib/components/SelectRate/Tracking/SelectRateTracking.tsx @@ -26,7 +26,7 @@ export function SelectRateTracking({ hotelData, booking }: TrackingProps) { const { fromDate, toDate } = getValidDates(booking.fromDate, booking.toDate) - const { rooms, searchType, bookingCode, city: paramCity } = booking + const { rooms, searchType, bookingCode } = booking const arrivalDate = fromDate.toDate() const departureDate = toDate.toDate() @@ -47,7 +47,6 @@ export function SelectRateTracking({ hotelData, booking }: TrackingProps) { hotelName: hotelData.hotel.name, country: hotelData.hotel.address.country, hotelCity: hotelData.hotel.address.city, - paramCity, bookingCode, isRedemption: searchType === SEARCH_TYPE_REDEMPTION, specialRoomType, diff --git a/packages/booking-flow/lib/components/SelectRate/Tracking/tracking.ts b/packages/booking-flow/lib/components/SelectRate/Tracking/tracking.ts index 1b3eb72df..e8fd707b6 100644 --- a/packages/booking-flow/lib/components/SelectRate/Tracking/tracking.ts +++ b/packages/booking-flow/lib/components/SelectRate/Tracking/tracking.ts @@ -24,7 +24,6 @@ type SelectRateTrackingInput = { hotelName: string country: string | undefined hotelCity: string | undefined - paramCity: string | undefined bookingCode?: string isRedemption?: boolean specialRoomType?: string @@ -39,7 +38,6 @@ export function getSelectRateTracking({ hotelName, country, hotelCity, - paramCity, bookingCode, isRedemption = false, specialRoomType, @@ -80,7 +78,7 @@ export function getSelectRateTracking({ noOfChildren: childrenInRoom?.map((kids) => kids?.length ?? 0).join(","), noOfRooms: rooms?.length ?? 0, region: hotelCity, - searchTerm: paramCity ?? hotelName, + searchTerm: hotelName, searchType: "hotel", bookingCode: bookingCode ?? "n/a", rewardNight: isRedemption ? "yes" : "no", diff --git a/packages/booking-flow/lib/components/SelectRate/index.tsx b/packages/booking-flow/lib/components/SelectRate/index.tsx index 1e236715b..4e2566da0 100644 --- a/packages/booking-flow/lib/components/SelectRate/index.tsx +++ b/packages/booking-flow/lib/components/SelectRate/index.tsx @@ -87,7 +87,7 @@ export async function SelectRate({ /> )} - + ) } diff --git a/packages/booking-flow/lib/contexts/EnterDetails/EnterDetailsContext.tsx b/packages/booking-flow/lib/contexts/EnterDetails/EnterDetailsContext.tsx index a7e16b3ed..7319d42ea 100644 --- a/packages/booking-flow/lib/contexts/EnterDetails/EnterDetailsContext.tsx +++ b/packages/booking-flow/lib/contexts/EnterDetails/EnterDetailsContext.tsx @@ -41,6 +41,7 @@ type DetailsProviderProps = React.PropsWithChildren & { searchParamsStr: string user: User | null vat: number + hotelName: string roomCategories: RoomCategories } @@ -53,6 +54,7 @@ export default function EnterDetailsProvider({ searchParamsStr, user, vat, + hotelName, roomCategories, }: DetailsProviderProps) { // This state is needed to be able to use defaultValues for @@ -93,6 +95,7 @@ export default function EnterDetailsProvider({ isFlexRate: room.isFlexRate, })), vat, + hotelName, roomCategories, } diff --git a/packages/booking-flow/lib/pages/AlternativeHotelsMapPage.tsx b/packages/booking-flow/lib/pages/AlternativeHotelsMapPage.tsx index 4d86e5caf..7a5438d6b 100644 --- a/packages/booking-flow/lib/pages/AlternativeHotelsMapPage.tsx +++ b/packages/booking-flow/lib/pages/AlternativeHotelsMapPage.tsx @@ -98,7 +98,7 @@ export async function AlternativeHotelsMapPage({ departureDate, rooms: booking.rooms, hotelsResult: hotels.length, - searchTerm: isAlternativeFor ? booking.hotelId : cityIdentifier, + searchTerm: isAlternativeFor ? isAlternativeFor.name : cityIdentifier, country: hotels?.[0]?.hotel.address.country, hotelCity: hotels?.[0]?.hotel.address.city, bookingCode: booking.bookingCode, diff --git a/packages/booking-flow/lib/pages/AlternativeHotelsPage.tsx b/packages/booking-flow/lib/pages/AlternativeHotelsPage.tsx index e95ba84fc..3fc58f105 100644 --- a/packages/booking-flow/lib/pages/AlternativeHotelsPage.tsx +++ b/packages/booking-flow/lib/pages/AlternativeHotelsPage.tsx @@ -102,7 +102,7 @@ export async function AlternativeHotelsPage({ rooms: booking.rooms, hotelsResult: hotels?.length ?? 0, searchTerm: searchDetails.hotel - ? booking.hotelId + ? searchDetails.hotel.name : searchDetails.cityIdentifier, country: hotels?.[0]?.hotel.address.country, hotelCity: hotels?.[0]?.hotel.address.city, diff --git a/packages/booking-flow/lib/pages/EnterDetailsPage.tsx b/packages/booking-flow/lib/pages/EnterDetailsPage.tsx index 43e007990..d2410166b 100644 --- a/packages/booking-flow/lib/pages/EnterDetailsPage.tsx +++ b/packages/booking-flow/lib/pages/EnterDetailsPage.tsx @@ -128,6 +128,7 @@ export async function EnterDetailsPage({ rooms={rooms} searchParamsStr={selectRoomParams.toString()} user={user} + hotelName={hotel.name} vat={hotel.vat} roomCategories={hotelData.roomCategories} > diff --git a/packages/booking-flow/lib/pages/SelectHotelMapPage.tsx b/packages/booking-flow/lib/pages/SelectHotelMapPage.tsx index fd87652b7..bc8c8b92d 100644 --- a/packages/booking-flow/lib/pages/SelectHotelMapPage.tsx +++ b/packages/booking-flow/lib/pages/SelectHotelMapPage.tsx @@ -99,7 +99,7 @@ export async function SelectHotelMapPage({ departureDate, rooms: booking.rooms, hotelsResult: hotels.length, - searchTerm: isAlternativeFor ? booking.hotelId : cityIdentifier, + searchTerm: isAlternativeFor ? isAlternativeFor.name : cityIdentifier, country: hotels?.[0]?.hotel.address.country, hotelCity: hotels?.[0]?.hotel.address.city, bookingCode: booking.bookingCode, diff --git a/packages/booking-flow/lib/stores/enter-details/index.ts b/packages/booking-flow/lib/stores/enter-details/index.ts index d47ce052d..d02bdac1d 100644 --- a/packages/booking-flow/lib/stores/enter-details/index.ts +++ b/packages/booking-flow/lib/stores/enter-details/index.ts @@ -371,6 +371,7 @@ export function createDetailsStore( searchParamString: searchParams, totalPrice: initialTotalPrice, vat: initialState.vat, + hotelName: initialState.hotelName, defaultCurrency: initialTotalPrice.local.currency, preSubmitCallbacks: {}, diff --git a/packages/booking-flow/lib/stores/enter-details/types.ts b/packages/booking-flow/lib/stores/enter-details/types.ts index eee1946d8..dc75c1e83 100644 --- a/packages/booking-flow/lib/stores/enter-details/types.ts +++ b/packages/booking-flow/lib/stores/enter-details/types.ts @@ -87,6 +87,7 @@ export type InitialState = { booking: DetailsBooking rooms: InitialRoomData[] vat: number + hotelName: string roomCategories: RoomCategories } @@ -108,6 +109,7 @@ export interface DetailsState { searchParamString: string totalPrice: Price vat: number + hotelName: string roomCategories: RoomCategories defaultCurrency: CurrencyEnum preSubmitCallbacks: Record void> diff --git a/packages/tracking/lib/NoAvailabilityTracking.tsx b/packages/tracking/lib/NoAvailabilityTracking.tsx index 9cb9d6039..08ed5c4c6 100644 --- a/packages/tracking/lib/NoAvailabilityTracking.tsx +++ b/packages/tracking/lib/NoAvailabilityTracking.tsx @@ -10,7 +10,6 @@ import { type TrackingSDKHotelInfo, type TrackingSDKPageData, } from "@scandic-hotels/tracking/types" -import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking" import { trackEvent } from "./base" import { createSDKPageObject } from "./pageview" @@ -88,6 +87,7 @@ type TrackNoAvailabilityParams = { searchType?: string bookingCode?: string searchTerm: string + rewardNight: string pageId: string pageName: string pageType: string @@ -107,6 +107,7 @@ export function trackNoAvailability({ searchType, bookingCode, searchTerm, + rewardNight, pageId, pageName, pageType, @@ -128,7 +129,7 @@ export function trackNoAvailability({ leadTime: differenceInCalendarDays(arrivalDate, new Date()), noOfRooms, bookingCode: bookingCode ?? "n/a", - rewardNight: searchType === SEARCH_TYPE_REDEMPTION ? "yes" : "no", + rewardNight, bookingTypeofDay: isWeekend(arrivalDate) ? "weekend" : "weekday", duration: differenceInCalendarDays(departureDate, arrivalDate), specialRoomType,