Merged in feat/sw-3473-remove-tracking-context (pull request #2843)

feat(SW-3473): Rework booking-flow tracking provider

* Remove tracking context and import instead

* Remove unused file


Approved-by: Joakim Jäderberg
This commit is contained in:
Anton Gunnarsson
2025-09-22 13:08:10 +00:00
parent a7b19e8b14
commit 630e89c845
30 changed files with 77 additions and 382 deletions

View File

@@ -0,0 +1,64 @@
"use client"
import { trackEvent } from "./base"
import type { BreakfastPackages } from "@scandic-hotels/trpc/routers/hotels/output"
// Tracking for sections of booking flow enter-details page
export function trackBedSelection(bedType: string) {
trackEvent({
event: "bedSelection",
selection: {
name: "bed options selection click",
bedType: bedType,
},
})
}
export function trackBreakfastSelection({
breakfastPackage,
hotelId,
units,
breakfastOption,
}: {
breakfastPackage: BreakfastPackages[number]
hotelId: string
units: number
breakfastOption: string
}) {
trackEvent({
event: "breakfastSelection",
selection: {
name: "breakfast options selection click",
breakfastOption,
},
...(units > 0 && {
ancillaries: [
{
hotelId,
productCategory: "",
productId: breakfastPackage.code,
productUnits: units,
productPrice: breakfastPackage.localPrice.price * units,
productPoints: 0,
productType: "food",
productName: breakfastPackage.packageType,
},
],
}),
})
}
export function trackBookingSearchClick(
searchTerm: string,
searchType: string
) {
trackEvent({
event: "hotelSearchButtonClick",
hotelInfo: {
searchTerm,
searchType,
action: "Hotel search",
},
})
}

View File

@@ -0,0 +1,36 @@
"use client"
import { trackEvent } from "./base"
export function trackAccordionClick(option: string) {
trackEvent({
event: "accordionClick",
accordion: {
action: "accordion open click",
option,
},
})
}
export function trackOpenSidePeekEvent({
name,
hotelId,
includePathname,
roomTypeCode,
}: {
name: string | null
hotelId: string
includePathname?: boolean
roomTypeCode?: string | null
}) {
trackEvent({
event: "openSidePeek",
hotelInfo: {
hotelId: hotelId,
},
cta: {
name,
...(roomTypeCode ? { roomTypeCode } : {}),
...(includePathname ? { pathName: window.location.pathname } : {}),
},
})
}

View File

@@ -0,0 +1,42 @@
import { trackEvent } from "@scandic-hotels/tracking/base"
import type { TrackingPosition } from "@scandic-hotels/tracking/types"
export function trackFooterClick(group: string, name: string) {
trackEvent({
event: "footer link",
footer: {
footerLinkClicked: `${group}:${name}`,
},
})
}
export function trackSocialMediaClick(socialMediaName: string) {
trackEvent({
event: "social media",
social: {
socialIconClicked: socialMediaName,
},
})
}
export function trackLoginClick(position: TrackingPosition) {
trackEvent({
event: "loginStart",
login: {
position,
action: "login start",
ctaName: "login",
},
})
}
export function trackLanguageSwitchClick(fromLang: string, toLang: string) {
trackEvent({
event: "languageSelection",
language: {
fromSelection: fromLang,
toSelection: toLang,
},
})
}

View File

@@ -0,0 +1,67 @@
import { trackEvent } from "@scandic-hotels/tracking/base"
import type {
PaymentEvent,
PaymentFailEvent,
} from "@scandic-hotels/tracking/types"
function isPaymentFailEvent(event: PaymentEvent): event is PaymentFailEvent {
return "errorMessage" in event
}
export function trackUpdatePaymentMethod({ method }: { method: string }) {
trackEvent({
event: "paymentSelection",
hotelInfo: {
hotelId: "", // TODO: Needs to be verified with analytics if this should even be here
},
cta: {
name: method,
},
})
}
export function trackPaymentEvent(paymentEvent: PaymentEvent) {
const paymentAttempt = {
event: paymentEvent.event,
hotelInfo: {
hotelId: paymentEvent.hotelId,
},
paymentInfo: {
isSavedCard: paymentEvent.isSavedCreditCard,
status: paymentEvent.status,
type: paymentEvent.method,
smsEnable: paymentEvent.smsEnable,
errorMessage: isPaymentFailEvent(paymentEvent)
? paymentEvent.errorMessage
: undefined,
},
}
trackEvent(paymentAttempt)
}
export function trackGlaSaveCardAttempt({
hotelId,
hasSavedCreditCard,
creditCardType,
lateArrivalGuarantee,
}: {
hotelId: string
hasSavedCreditCard: boolean
creditCardType?: string
lateArrivalGuarantee: "mandatory" | "yes" | "no" | "na"
}) {
trackEvent({
event: "glaCardSaveAttempt",
hotelInfo: {
hotelId,
lateArrivalGuarantee,
guaranteedProduct: "room",
},
paymentInfo: {
status: "glacardsaveattempt",
isSavedCreditCard: hasSavedCreditCard,
type: creditCardType,
},
})
}