chore: Extend eslint configs from @typescript-eslint/recommended * Change to typescript recommended in scandic-web * Remove comment * Change to recommended ts config in partner-sas * Change to recommended ts lint config in booking-flow Approved-by: Linus Flood
126 lines
3.7 KiB
TypeScript
126 lines
3.7 KiB
TypeScript
"use client"
|
|
|
|
import { useRouter } from "next/navigation"
|
|
import { useEffect } from "react"
|
|
|
|
import {
|
|
clearGlaSessionStorage,
|
|
readGlaFromSessionStorage,
|
|
} from "@scandic-hotels/booking-flow/components/EnterDetails/Payment/PaymentCallback/helpers"
|
|
import { PaymentCallbackStatusEnum } from "@scandic-hotels/common/constants/paymentCallbackStatusEnum"
|
|
import { LoadingSpinner } from "@scandic-hotels/design-system/LoadingSpinner"
|
|
import { trackEvent } from "@scandic-hotels/tracking/base"
|
|
|
|
import { getAncillarySessionData } from "@/components/HotelReservation/MyStay/utils/ancillaries"
|
|
import {
|
|
buildAncillariesTracking,
|
|
buildBreakfastTracking,
|
|
} from "@/utils/tracking/myStay"
|
|
|
|
interface TrackGuaranteeProps {
|
|
status: string
|
|
isAncillaryFlow?: boolean
|
|
redirectUrl: string
|
|
errorMessage?: string
|
|
}
|
|
|
|
export default function TrackGuarantee({
|
|
status,
|
|
isAncillaryFlow = false,
|
|
redirectUrl,
|
|
errorMessage,
|
|
}: TrackGuaranteeProps) {
|
|
const router = useRouter()
|
|
|
|
useEffect(() => {
|
|
const trackAncillaryPaymentEvent = (event: string, status: string) => {
|
|
const sessionData = getAncillarySessionData()
|
|
const { formData, selectedAncillary, packages, breakfastData } =
|
|
sessionData || {}
|
|
|
|
trackEvent({
|
|
event,
|
|
paymentInfo: { status },
|
|
hotelInfo: {
|
|
hotelId: selectedAncillary?.hotelId,
|
|
lateArrivalGuarantee: "yes",
|
|
guaranteedProduct: "room + ancillary",
|
|
},
|
|
ancillaries: breakfastData
|
|
? buildBreakfastTracking(breakfastData)
|
|
: buildAncillariesTracking(
|
|
packages ?? [],
|
|
selectedAncillary,
|
|
formData?.deliveryTime
|
|
),
|
|
})
|
|
}
|
|
|
|
const trackGuaranteePaymentEvent = (event: string, status: string) => {
|
|
const glaSessionData = readGlaFromSessionStorage()
|
|
trackEvent({
|
|
event,
|
|
hotelInfo: {
|
|
hotelId: glaSessionData?.hotelId,
|
|
lateArrivalGuarantee: "yes",
|
|
guaranteedProduct: "room",
|
|
},
|
|
paymentInfo: {
|
|
status,
|
|
type: glaSessionData?.paymentMethod,
|
|
isSavedCreditCard: glaSessionData?.isSavedCreditCard,
|
|
...(errorMessage && { errorMessage }),
|
|
},
|
|
})
|
|
clearGlaSessionStorage()
|
|
}
|
|
|
|
switch (status) {
|
|
case PaymentCallbackStatusEnum.Success:
|
|
const glaSessionData = readGlaFromSessionStorage()
|
|
trackEvent({
|
|
event: "guaranteeBookingSuccess",
|
|
hotelInfo: {
|
|
hotelId: glaSessionData?.hotelId,
|
|
lateArrivalGuarantee: "yes",
|
|
guaranteedProduct: "room",
|
|
},
|
|
paymentInfo: {
|
|
type: glaSessionData?.paymentMethod,
|
|
hotelId: glaSessionData?.hotelId,
|
|
isSavedCreditCard: glaSessionData?.isSavedCreditCard,
|
|
},
|
|
})
|
|
clearGlaSessionStorage()
|
|
break
|
|
|
|
case PaymentCallbackStatusEnum.Cancel:
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
isAncillaryFlow
|
|
? trackAncillaryPaymentEvent(
|
|
"GuaranteeCancelAncillary",
|
|
"glacardsavecancelled"
|
|
)
|
|
: trackGuaranteePaymentEvent(
|
|
"glaCardSaveCancelled",
|
|
"glacardsavecancelled"
|
|
)
|
|
break
|
|
|
|
case PaymentCallbackStatusEnum.Error:
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
isAncillaryFlow
|
|
? trackAncillaryPaymentEvent(
|
|
"GuaranteeFailAncillary",
|
|
"glacardsavefailed"
|
|
)
|
|
: trackGuaranteePaymentEvent("glaCardSaveFailed", "glacardsavefailed")
|
|
break
|
|
}
|
|
|
|
router.replace(redirectUrl)
|
|
}, [status, isAncillaryFlow, redirectUrl, errorMessage, router])
|
|
|
|
return <LoadingSpinner />
|
|
}
|