import type { PaymentEvent, TrackingPosition, TrackingSDKData, } from "@/types/components/tracking" export function trackClick(name: string) { pushToDataLayer({ event: "linkClick", cta: { name, }, }) } export function trackPageViewStart() { pushToDataLayer({ event: "pageViewStart", }) } export function trackLoginClick(position: TrackingPosition) { const loginEvent = { event: "loginStart", login: { position, action: "login start", ctaName: "login", }, } pushToDataLayer(loginEvent) } export function trackUpdatePaymentMethod(hotelId: string, method: string) { const paymentSelectionEvent = { event: "paymentSelection", hotelInfo: { hotelId: hotelId, }, cta: { name: method, }, } pushToDataLayer(paymentSelectionEvent) } export function trackPaymentEvent(paymentEvent: PaymentEvent) { const paymentAttempt = { event: paymentEvent.event, hotelInfo: { hotelId: paymentEvent.hotelId, }, paymentInfo: { isSavedCreditCard: paymentEvent.isSavedCreditCard, status: "attempt", type: paymentEvent.method, smsEnable: paymentEvent.smsEnable, errorMessage: paymentEvent.errorMessage, }, } pushToDataLayer(paymentAttempt) } function pushToDataLayer(data: any) { if (typeof window !== "undefined" && window.adobeDataLayer) { window.adobeDataLayer.push(data) } } export function createSDKPageObject( trackingData: TrackingSDKData ): TrackingSDKData { let pageName = convertSlashToPipe(trackingData.pageName) let siteSections = convertSlashToPipe(trackingData.siteSections) if (trackingData.pathName.indexOf("/webview/") > -1) { pageName = "webview|" + pageName siteSections = "webview|" + siteSections } return { ...trackingData, domain: window.location.host, pageName: pageName, siteSections: siteSections, } } function convertSlashToPipe(url: string) { const formattedUrl = url.startsWith("/") ? url.slice(1) : url return formattedUrl.replaceAll("/", "|") }