Merged in feat/book-530-selectrate-tracking (pull request #3128)

feat(BOOK-530): fixed noAvailableRooms tracking on select rate page

* feat(BOOK-530): fixed noAvailableRooms tracking on select rate page


Approved-by: Bianca Widstam
This commit is contained in:
Linus Flood
2025-11-11 14:17:02 +00:00
parent 9175331e4d
commit 78ac93d836
8 changed files with 73 additions and 63 deletions

View File

@@ -1,9 +1,7 @@
"use client"
import { NoAvailabilityTracking } from "@scandic-hotels/tracking/NoAvailabilityTracking"
import { TrackingSDK } from "@scandic-hotels/tracking/TrackingSDK"
import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking"
import { AvailabilityEnum } from "@scandic-hotels/trpc/enums/selectHotel"
import { useSelectRateContext } from "../../../contexts/SelectRate/SelectRateContext"
import useLang from "../../../hooks/useLang"
@@ -22,7 +20,7 @@ interface TrackingProps {
export function SelectRateTracking({ hotelData, booking }: TrackingProps) {
const lang = useLang()
const { availability, input } = useSelectRateContext()
const { input } = useSelectRateContext()
const { fromDate, toDate } = getValidDates(booking.fromDate, booking.toDate)
@@ -39,6 +37,7 @@ export function SelectRateTracking({ hotelData, booking }: TrackingProps) {
return packages ?? ""
})
.join("|")
const { hotelsTrackingData, pageTrackingData } = getSelectRateTracking({
lang,
arrivalDate,
@@ -53,47 +52,7 @@ export function SelectRateTracking({ hotelData, booking }: TrackingProps) {
rooms,
})
let shouldTrackNoAvailability = false
if (availability && !availability.isFetching && availability.data) {
shouldTrackNoAvailability = availability.data.some((room) => {
if (!room || "error" in room) return false
const allRoomsNotAvailable = room.roomConfigurations.every(
(roomConfig) => roomConfig.status === AvailabilityEnum.NotAvailable
)
const isPublicPromotionWithCode = room.roomConfigurations.some((r) => {
const filteredCampaigns = r.campaign.filter(Boolean)
return filteredCampaigns.length
? filteredCampaigns.every(
(product) => !!product.rateDefinition?.isCampaignRate
)
: false
})
const noAvailableBookingCodeRooms =
!isPublicPromotionWithCode &&
room.roomConfigurations.every(
(r) => r.status === AvailabilityEnum.NotAvailable || !r.code.length
)
return (
allRoomsNotAvailable ||
(input.bookingCode && noAvailableBookingCodeRooms)
)
})
}
return (
<>
<NoAvailabilityTracking
lang={lang}
shouldTrackNoAvailability={shouldTrackNoAvailability}
hotelsTrackingData={hotelsTrackingData}
pageTrackingData={pageTrackingData}
/>
<TrackingSDK hotelInfo={hotelsTrackingData} pageData={pageTrackingData} />
</>
<TrackingSDK hotelInfo={hotelsTrackingData} pageData={pageTrackingData} />
)
}