diff --git a/packages/booking-flow/lib/components/EnterDetails/Details/RoomOne/JoinScandicFriendsCard/index.tsx b/packages/booking-flow/lib/components/EnterDetails/Details/RoomOne/JoinScandicFriendsCard/index.tsx
index a4b824a26..164f964e7 100644
--- a/packages/booking-flow/lib/components/EnterDetails/Details/RoomOne/JoinScandicFriendsCard/index.tsx
+++ b/packages/booking-flow/lib/components/EnterDetails/Details/RoomOne/JoinScandicFriendsCard/index.tsx
@@ -11,10 +11,10 @@ import Link from "@scandic-hotels/design-system/Link"
import { LoginButton } from "@scandic-hotels/design-system/LoginButton"
import { OldDSButton as Button } from "@scandic-hotels/design-system/OldDSButton"
import { Typography } from "@scandic-hotels/design-system/Typography"
+import { trackLoginClick } from "@scandic-hotels/tracking/navigation"
import { useRoomContext } from "../../../../../contexts/EnterDetails/RoomContext"
import useLang from "../../../../../hooks/useLang"
-import { useTrackingContext } from "../../../../../trackingContext"
import styles from "./joinScandicFriendsCard.module.css"
@@ -25,7 +25,6 @@ export default function JoinScandicFriendsCard({ name = "join" }: Props) {
const lang = useLang()
const intl = useIntl()
const loginPathname = useLazyPathname({ includeSearchParams: true })
- const { trackLoginClick } = useTrackingContext()
const {
room,
actions: { updateJoin },
diff --git a/packages/booking-flow/lib/components/EnterDetails/Payment/PaymentCallback/HandleErrorCallback.tsx b/packages/booking-flow/lib/components/EnterDetails/Payment/PaymentCallback/HandleErrorCallback.tsx
index baff78f19..dae1c47de 100644
--- a/packages/booking-flow/lib/components/EnterDetails/Payment/PaymentCallback/HandleErrorCallback.tsx
+++ b/packages/booking-flow/lib/components/EnterDetails/Payment/PaymentCallback/HandleErrorCallback.tsx
@@ -6,9 +6,9 @@ import { useEffect } from "react"
import { PaymentCallbackStatusEnum } from "@scandic-hotels/common/constants/paymentCallbackStatusEnum"
import { LoadingSpinner } from "@scandic-hotels/design-system/LoadingSpinner"
import { trackEvent } from "@scandic-hotels/tracking/base"
+import { trackPaymentEvent } from "@scandic-hotels/tracking/payment"
import { detailsStorageName } from "../../../../stores/enter-details"
-import { useTrackingContext } from "../../../../trackingContext"
import { serializeBookingSearchParams } from "../../../../utils/url"
import {
clearPaymentInfoSessionStorage,
@@ -30,7 +30,6 @@ export function HandleErrorCallback({
errorMessage?: string
}) {
const router = useRouter()
- const { trackPaymentEvent } = useTrackingContext()
useEffect(() => {
const bookingData = window.sessionStorage.getItem(detailsStorageName)
@@ -106,7 +105,7 @@ export function HandleErrorCallback({
router.replace(`${returnUrl}?${searchParams.toString()}`)
}
}
- }, [returnUrl, router, searchObject, status, errorMessage, trackPaymentEvent])
+ }, [returnUrl, router, searchObject, status, errorMessage])
return
}
diff --git a/packages/booking-flow/lib/components/EnterDetails/Payment/PaymentClient.tsx b/packages/booking-flow/lib/components/EnterDetails/Payment/PaymentClient.tsx
index 5d75007df..a9c25e88c 100644
--- a/packages/booking-flow/lib/components/EnterDetails/Payment/PaymentClient.tsx
+++ b/packages/booking-flow/lib/components/EnterDetails/Payment/PaymentClient.tsx
@@ -26,6 +26,10 @@ import { PaymentOption } from "@scandic-hotels/design-system/Form/PaymentOption"
import { PaymentOptionsGroup } from "@scandic-hotels/design-system/Form/PaymentOptionsGroup"
import { Typography } from "@scandic-hotels/design-system/Typography"
import { trackEvent } from "@scandic-hotels/tracking/base"
+import {
+ trackGlaSaveCardAttempt,
+ trackPaymentEvent,
+} from "@scandic-hotels/tracking/payment"
import { trpc } from "@scandic-hotels/trpc/client"
import { bedTypeMap } from "@scandic-hotels/trpc/constants/bedTypeMap"
import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking"
@@ -38,7 +42,6 @@ import { useHandleBookingStatus } from "../../../hooks/useHandleBookingStatus"
import { useIsLoggedIn } from "../../../hooks/useIsLoggedIn"
import useLang from "../../../hooks/useLang"
import { useEnterDetailsStore } from "../../../stores/enter-details"
-import { useTrackingContext } from "../../../trackingContext"
import ConfirmBooking, { ConfirmBookingRedemption } from "../Confirm"
import PriceChangeDialog from "../PriceChangeDialog"
import { writeGlaToSessionStorage } from "./PaymentCallback/helpers"
@@ -80,7 +83,6 @@ export default function PaymentClient({
const searchParams = useSearchParams()
const isUserLoggedIn = useIsLoggedIn()
const { getTopOffset } = useStickyPosition({})
- const { trackPaymentEvent, trackGlaSaveCardAttempt } = useTrackingContext()
const [showBookingAlert, setShowBookingAlert] = useState(false)
@@ -265,7 +267,6 @@ export default function PaymentClient({
bookingMustBeGuaranteed,
hasOnlyFlexRates,
setIsSubmitting,
- trackPaymentEvent,
]
)
@@ -504,8 +505,6 @@ export default function PaymentClient({
isUserLoggedIn,
getTopOffset,
setIsSubmitting,
- trackGlaSaveCardAttempt,
- trackPaymentEvent,
]
)
diff --git a/packages/booking-flow/lib/components/HotelDetailsSidePeek/HotelSidePeekContent/index.tsx b/packages/booking-flow/lib/components/HotelDetailsSidePeek/HotelSidePeekContent/index.tsx
index 3c32a3f5b..558fa2a0a 100644
--- a/packages/booking-flow/lib/components/HotelDetailsSidePeek/HotelSidePeekContent/index.tsx
+++ b/packages/booking-flow/lib/components/HotelDetailsSidePeek/HotelSidePeekContent/index.tsx
@@ -5,8 +5,8 @@ import AccordionItem from "@scandic-hotels/design-system/Accordion/AccordionItem
import ButtonLink from "@scandic-hotels/design-system/ButtonLink"
import { IconName } from "@scandic-hotels/design-system/Icons/iconName"
import { Typography } from "@scandic-hotels/design-system/Typography"
+import { trackAccordionClick } from "@scandic-hotels/tracking/componentEvents"
-import { useTrackingContext } from "../../../trackingContext"
import AdditionalAmenities from "../../AdditionalAmenities"
import Contact from "../../Contact"
import BreakfastAccordionItem from "../../SidePeekAccordions/BreakfastAccordionItem"
@@ -82,7 +82,6 @@ function AccessibilityAccordionItem({
elevatorPitch,
}: AccessibilityAccordionItemProps) {
const intl = useIntl()
- const tracking = useTrackingContext()
if (!elevatorPitch) {
return null
@@ -96,7 +95,7 @@ function AccessibilityAccordionItem({
iconName={IconName.Accessibility}
className={styles.accordionItem}
type="sidepeek"
- onOpen={() => tracking.trackAccordionItemOpen("amenities:accessibility")}
+ onOpen={() => trackAccordionClick("amenities:accessibility")}
>
diff --git a/packages/booking-flow/lib/components/HotelDetailsSidePeek/index.tsx b/packages/booking-flow/lib/components/HotelDetailsSidePeek/index.tsx
index 334006638..72044c644 100644
--- a/packages/booking-flow/lib/components/HotelDetailsSidePeek/index.tsx
+++ b/packages/booking-flow/lib/components/HotelDetailsSidePeek/index.tsx
@@ -5,8 +5,8 @@ import { DialogTrigger } from "react-aria-components"
import { Button } from "@scandic-hotels/design-system/Button"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import SidePeekSelfControlled from "@scandic-hotels/design-system/SidePeekSelfControlled"
+import { trackOpenSidePeekEvent } from "@scandic-hotels/tracking/componentEvents"
-import { useTrackingContext } from "../../trackingContext"
import { HotelSidePeekContent } from "./HotelSidePeekContent"
import type {
@@ -58,7 +58,6 @@ export function HotelDetailsSidePeek({
wrapping = true,
buttonVariant,
}: HotelDetailsSidePeekProps) {
- const tracking = useTrackingContext()
const buttonProps = buttonPropsMap[buttonVariant]
return (
@@ -67,7 +66,7 @@ export function HotelDetailsSidePeek({
{...buttonProps}
wrapping={wrapping}
onPress={() =>
- tracking.trackOpenSidePeek({
+ trackOpenSidePeekEvent({
name: SidePeekEnum.hotelDetails,
hotelId: hotel.operaId,
includePathname: true,
diff --git a/packages/booking-flow/lib/components/RoomDetailsSidePeek/index.tsx b/packages/booking-flow/lib/components/RoomDetailsSidePeek/index.tsx
index 618baabf9..db98201a9 100644
--- a/packages/booking-flow/lib/components/RoomDetailsSidePeek/index.tsx
+++ b/packages/booking-flow/lib/components/RoomDetailsSidePeek/index.tsx
@@ -5,8 +5,8 @@ import { DialogTrigger } from "react-aria-components"
import { Button } from "@scandic-hotels/design-system/Button"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import SidePeekSelfControlled from "@scandic-hotels/design-system/SidePeekSelfControlled"
+import { trackOpenSidePeekEvent } from "@scandic-hotels/tracking/componentEvents"
-import { useTrackingContext } from "../../trackingContext"
import { RoomSidePeekContent } from "./RoomSidePeekContent"
import type { Room } from "@scandic-hotels/trpc/types/hotel"
@@ -53,7 +53,6 @@ export function RoomDetailsSidePeek({
wrapping = true,
buttonVariant: variant = "primary",
}: RoomDetailsSidePeekProps) {
- const tracking = useTrackingContext()
const buttonProps = buttonPropsMap[variant]
return (
@@ -62,7 +61,7 @@ export function RoomDetailsSidePeek({
{...buttonProps}
wrapping={wrapping}
onPress={() =>
- tracking.trackOpenSidePeek({
+ trackOpenSidePeekEvent({
name: SidePeekEnum.roomDetails,
hotelId,
roomTypeCode,
diff --git a/packages/booking-flow/lib/components/SelectHotel/Filters/HotelFilter/index.tsx b/packages/booking-flow/lib/components/SelectHotel/Filters/HotelFilter/index.tsx
index 4e4260c26..37df296ac 100644
--- a/packages/booking-flow/lib/components/SelectHotel/Filters/HotelFilter/index.tsx
+++ b/packages/booking-flow/lib/components/SelectHotel/Filters/HotelFilter/index.tsx
@@ -3,9 +3,10 @@
import { usePathname, useSearchParams } from "next/navigation"
import { useCallback, useEffect } from "react"
+import { trackEvent } from "@scandic-hotels/tracking/base"
+
import useInitializeFiltersFromUrl from "../../../../hooks/useInitializeFiltersFromUrl"
import { useHotelFilterStore } from "../../../../stores/hotel-filters"
-import { useTrackingContext } from "../../../../trackingContext"
import FilterContent from "../FilterContent"
import type { CategorizedHotelFilters } from "../../../../types"
@@ -16,7 +17,6 @@ type HotelFiltersProps = {
}
export default function HotelFilter({ className, filters }: HotelFiltersProps) {
- const tracking = useTrackingContext()
const searchParams = useSearchParams()
const pathname = usePathname()
useInitializeFiltersFromUrl()
@@ -44,18 +44,13 @@ export default function HotelFilter({ className, filters }: HotelFiltersProps) {
.map((id) => surroundingsMap.get(id))
.join(",")
- tracking.trackGenericEvent({
+ trackEvent({
event: "filterUsed",
filter: {
filtersUsed: `Filters values - hotelfacilities:${hotelFacilitiesFilter}|hotelsurroundings:${hotelSurroundingsFilter}`,
},
})
- }, [
- tracking,
- activeFilters,
- filters.facilityFilters,
- filters.surroundingsFilters,
- ])
+ }, [activeFilters, filters.facilityFilters, filters.surroundingsFilters])
// Update the URL when the filters changes
useEffect(() => {
diff --git a/packages/booking-flow/lib/components/SelectHotel/HotelSorter/index.tsx b/packages/booking-flow/lib/components/SelectHotel/HotelSorter/index.tsx
index 697cc1aea..5f074ee20 100644
--- a/packages/booking-flow/lib/components/SelectHotel/HotelSorter/index.tsx
+++ b/packages/booking-flow/lib/components/SelectHotel/HotelSorter/index.tsx
@@ -5,8 +5,7 @@ import { useCallback } from "react"
import { useIntl } from "react-intl"
import DeprecatedSelect from "@scandic-hotels/design-system/DeprecatedSelect"
-
-import { useTrackingContext } from "../../../trackingContext"
+import { trackEvent } from "@scandic-hotels/tracking/base"
const enum SortOrder {
Distance = "distance",
@@ -27,7 +26,6 @@ type HotelSorterProps = {
}
export default function HotelSorter({ discreet }: HotelSorterProps) {
- const tracking = useTrackingContext()
const searchParams = useSearchParams()
const pathname = usePathname()
const intl = useIntl()
@@ -41,7 +39,7 @@ export default function HotelSorter({ discreet }: HotelSorterProps) {
const newSearchParams = new URLSearchParams(searchParams)
newSearchParams.set("sort", newSort)
- tracking.trackGenericEvent({
+ trackEvent({
event: "sortOptionClick",
filter: {
sortOptions: newSort,
@@ -53,7 +51,7 @@ export default function HotelSorter({ discreet }: HotelSorterProps) {
`${pathname}?${newSearchParams.toString()}`
)
},
- [tracking, pathname, searchParams]
+ [pathname, searchParams]
)
const sortItems: SortItem[] = [
{
diff --git a/packages/booking-flow/lib/components/SelectHotel/SelectHotelMap/SelectHotelMapContent/index.tsx b/packages/booking-flow/lib/components/SelectHotel/SelectHotelMap/SelectHotelMapContent/index.tsx
index 3e0b452d2..16d227d39 100644
--- a/packages/booking-flow/lib/components/SelectHotel/SelectHotelMap/SelectHotelMapContent/index.tsx
+++ b/packages/booking-flow/lib/components/SelectHotel/SelectHotelMap/SelectHotelMapContent/index.tsx
@@ -17,6 +17,7 @@ import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import Link from "@scandic-hotels/design-system/Link"
import { InteractiveMap } from "@scandic-hotels/design-system/Map/InteractiveMap"
import { Typography } from "@scandic-hotels/design-system/Typography"
+import { trackEvent } from "@scandic-hotels/tracking/base"
import { useIsLoggedIn } from "../../../../hooks/useIsLoggedIn"
import useLang from "../../../../hooks/useLang"
@@ -27,7 +28,6 @@ import {
} from "../../../../stores/bookingCode-filter"
import { useHotelFilterStore } from "../../../../stores/hotel-filters"
import { useHotelsMapStore } from "../../../../stores/hotels-map"
-import { useTrackingContext } from "../../../../trackingContext"
import BookingCodeFilter from "../../../BookingCodeFilter"
import { getHotelPins } from "../../../HotelCardDialogListing/utils"
import { RoomCardSkeleton } from "../../../RoomCardSkeleton/RoomCardSkeleton"
@@ -68,7 +68,6 @@ export function SelectHotelMapContent({
const intl = useIntl()
const map = useMap()
const isUserLoggedIn = useIsLoggedIn()
- const tracking = useTrackingContext()
const isAboveMobile = useMediaQuery("(min-width: 900px)")
const [visibleHotels, setVisibleHotels] = useState([])
@@ -284,7 +283,7 @@ export function SelectHotelMapContent({
return
}
- tracking.trackGenericEvent({
+ trackEvent({
event: "hotelClickMap",
map: {
action: "hotel click - map",
@@ -297,7 +296,7 @@ export function SelectHotelMapContent({
hotelMapStore.activate(args.hotelName)
}}
onClickHotel={(hotelId) => {
- tracking.trackGenericEvent({
+ trackEvent({
event: "hotelClickMap",
map: {
action: "hotel click - map",
diff --git a/packages/booking-flow/lib/components/SidePeekAccordions/BreakfastAccordionItem.tsx b/packages/booking-flow/lib/components/SidePeekAccordions/BreakfastAccordionItem.tsx
index 935f34614..60f777ff9 100644
--- a/packages/booking-flow/lib/components/SidePeekAccordions/BreakfastAccordionItem.tsx
+++ b/packages/booking-flow/lib/components/SidePeekAccordions/BreakfastAccordionItem.tsx
@@ -7,10 +7,9 @@ import AccordionItem from "@scandic-hotels/design-system/Accordion/AccordionItem
import { IconName } from "@scandic-hotels/design-system/Icons/iconName"
import OpeningHours from "@scandic-hotels/design-system/OpeningHours"
import { Typography } from "@scandic-hotels/design-system/Typography"
+import { trackAccordionClick } from "@scandic-hotels/tracking/componentEvents"
import { HotelTypeEnum } from "@scandic-hotels/trpc/enums/hotelType"
-import { useTrackingContext } from "../../trackingContext"
-
import styles from "./sidePeekAccordion.module.css"
import type { Restaurant } from "@scandic-hotels/trpc/types/hotel"
@@ -25,7 +24,6 @@ export default function BreakfastAccordionItem({
hotelType,
}: BreakfastAccordionItemProps) {
const intl = useIntl()
- const tracking = useTrackingContext()
const openingHours = restaurants
?.map((restaurant) => {
@@ -46,7 +44,7 @@ export default function BreakfastAccordionItem({
iconName={IconName.CoffeeAlt}
type="sidepeek"
className={styles.accordionItem}
- onOpen={() => tracking.trackAccordionItemOpen("amenities:breakfast")}
+ onOpen={() => trackAccordionClick("amenities:breakfast")}
>
{openingHours ? (
tracking.trackAccordionItemOpen("amenities:check-in")}
+ onOpen={() => trackAccordionClick("amenities:check-in")}
>
diff --git a/packages/booking-flow/lib/components/SidePeekAccordions/ParkingAccordionItem.tsx b/packages/booking-flow/lib/components/SidePeekAccordions/ParkingAccordionItem.tsx
index ae5a7229a..b703e4bec 100644
--- a/packages/booking-flow/lib/components/SidePeekAccordions/ParkingAccordionItem.tsx
+++ b/packages/booking-flow/lib/components/SidePeekAccordions/ParkingAccordionItem.tsx
@@ -7,8 +7,7 @@ import ButtonLink from "@scandic-hotels/design-system/ButtonLink"
import { IconName } from "@scandic-hotels/design-system/Icons/iconName"
import ParkingInformation from "@scandic-hotels/design-system/ParkingInformation"
import { Typography } from "@scandic-hotels/design-system/Typography"
-
-import { useTrackingContext } from "../../trackingContext"
+import { trackAccordionClick } from "@scandic-hotels/tracking/componentEvents"
import styles from "./sidePeekAccordion.module.css"
@@ -26,7 +25,6 @@ export default function ParkingAccordionItem({
parkingPageHref,
}: ParkingAccordionItemProps) {
const intl = useIntl()
- const tracking = useTrackingContext()
if (!parking.length && !elevatorPitch && !parkingPageHref) {
return null
@@ -40,7 +38,7 @@ export default function ParkingAccordionItem({
iconName={IconName.Parking}
type="sidepeek"
className={styles.accordionItem}
- onOpen={() => tracking.trackAccordionItemOpen("amenities:parking")}
+ onOpen={() => trackAccordionClick("amenities:parking")}
>
{elevatorPitch ? (
diff --git a/packages/booking-flow/lib/trackingContext.tsx b/packages/booking-flow/lib/trackingContext.tsx
deleted file mode 100644
index 303bb2dff..000000000
--- a/packages/booking-flow/lib/trackingContext.tsx
+++ /dev/null
@@ -1,57 +0,0 @@
-"use client"
-
-import { createContext, useContext } from "react"
-
-import type {
- PaymentEvent,
- TrackingPosition,
-} from "@scandic-hotels/tracking/types"
-import type { BreakfastPackages } from "@scandic-hotels/trpc/routers/hotels/output"
-
-export type TrackingFunctions = {
- trackBookingSearchClick: (
- searchTerm: string,
- searchType: "hotel" | "destination"
- ) => void
- trackAccordionItemOpen: (option: string) => void
- trackOpenSidePeek: (input: {
- name: string | null
- hotelId: string
- includePathname?: boolean
- roomTypeCode?: string | null
- }) => void
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- trackGenericEvent(data: any): void
- trackLoginClick(position: TrackingPosition & (string & {})): void
- trackPaymentEvent(payment: PaymentEvent): void
- trackGlaSaveCardAttempt(args: {
- hotelId: string
- hasSavedCreditCard: boolean
- creditCardType?: string
- lateArrivalGuarantee: "mandatory" | "yes" | "no" | "na"
- }): void
- trackUpdatePaymentMethod(args: { method: string }): void
- trackBreakfastSelection(args: {
- breakfastPackage: BreakfastPackages[number]
- hotelId: string
- units: number
- breakfastOption: string
- }): void
- trackBedSelection(bedType: string): void
-}
-
-export const TrackingContext = createContext(
- undefined
-)
-
-export const useTrackingContext = (): TrackingFunctions => {
- const context = useContext(TrackingContext)
-
- if (!context) {
- throw new Error(
- "useTrackingContext must be used within a BookingFlowTrackingProvider. Did you forget to use the provider in the consuming app?"
- )
- }
-
- return context
-}
diff --git a/packages/booking-flow/package.json b/packages/booking-flow/package.json
index cbe080044..572525faa 100644
--- a/packages/booking-flow/package.json
+++ b/packages/booking-flow/package.json
@@ -13,7 +13,6 @@
"exports": {
"./BookingFlowConfig": "./lib/bookingFlowConfig/bookingFlowConfig.tsx",
"./BookingFlowContextProvider": "./lib/components/BookingFlowContextProvider.tsx",
- "./BookingFlowTrackingProvider": "./lib/components/BookingFlowTrackingProvider.tsx",
"./BookingWidget": "./lib/components/BookingWidget/index.tsx",
"./BookingWidget/BookingWidgetForm/FormContent/Search": "./lib/components/BookingWidget/BookingWidgetForm/FormContent/Search/index.tsx",
"./BookingWidget/FloatingBookingWidget": "./lib/components/BookingWidget/FloatingBookingWidget/index.tsx",
diff --git a/apps/scandic-web/utils/tracking/booking.ts b/packages/tracking/lib/booking.ts
similarity index 95%
rename from apps/scandic-web/utils/tracking/booking.ts
rename to packages/tracking/lib/booking.ts
index 0666f5b98..2becac598 100644
--- a/apps/scandic-web/utils/tracking/booking.ts
+++ b/packages/tracking/lib/booking.ts
@@ -1,6 +1,6 @@
"use client"
-import { trackEvent } from "@scandic-hotels/tracking/base"
+import { trackEvent } from "./base"
import type { BreakfastPackages } from "@scandic-hotels/trpc/routers/hotels/output"
diff --git a/apps/scandic-web/utils/tracking/componentEvents.ts b/packages/tracking/lib/componentEvents.ts
similarity index 91%
rename from apps/scandic-web/utils/tracking/componentEvents.ts
rename to packages/tracking/lib/componentEvents.ts
index 3d6077e68..e239533ce 100644
--- a/apps/scandic-web/utils/tracking/componentEvents.ts
+++ b/packages/tracking/lib/componentEvents.ts
@@ -1,5 +1,5 @@
"use client"
-import { trackEvent } from "@scandic-hotels/tracking/base"
+import { trackEvent } from "./base"
export function trackAccordionClick(option: string) {
trackEvent({
diff --git a/apps/scandic-web/utils/tracking/navigation.ts b/packages/tracking/lib/navigation.ts
similarity index 100%
rename from apps/scandic-web/utils/tracking/navigation.ts
rename to packages/tracking/lib/navigation.ts
diff --git a/apps/scandic-web/utils/tracking/payment.ts b/packages/tracking/lib/payment.ts
similarity index 65%
rename from apps/scandic-web/utils/tracking/payment.ts
rename to packages/tracking/lib/payment.ts
index 4bbb46e88..fdee2a93e 100644
--- a/apps/scandic-web/utils/tracking/payment.ts
+++ b/packages/tracking/lib/payment.ts
@@ -39,3 +39,29 @@ export function trackPaymentEvent(paymentEvent: PaymentEvent) {
}
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,
+ },
+ })
+}