Files
web/apps/scandic-web/components/HotelReservation/EnterDetails/Payment/PaymentCallback/HandleErrorCallback.tsx
Bianca Widstam c41dea4118 Merged in feat/SW-1414-guarantee-enter-details-tracking (pull request #1744)
Feat/SW-1414 guarantee enter details tracking

* feat(SW-1414): add tracking for gla enter details

* feat(SW-1414): add tracking for gla

* feat(SW-1414): add tracking for gla in enter details

* feat(SW-1414): fix pr comments

* feat(SW-1414): fix pr comment client only

* feat(SW-1414): fix pr comments

* feat(SW-1414): add tracking on load


Approved-by: Christian Andolf
2025-04-09 06:26:19 +00:00

98 lines
2.8 KiB
TypeScript

"use client"
import { useRouter } from "next/navigation"
import { useEffect } from "react"
import { PaymentCallbackStatusEnum } from "@/constants/booking"
import { detailsStorageName } from "@/stores/enter-details"
import LoadingSpinner from "@/components/LoadingSpinner"
import { trackPaymentEvent } from "@/utils/tracking"
import { trackEvent } from "@/utils/tracking/base"
import { convertObjToSearchParams } from "@/utils/url"
import { clearGlaSessionStorage, readGlaFromSessionStorage } from "./helpers"
import type { PersistedState } from "@/types/stores/enter-details"
export default function HandleErrorCallback({
returnUrl,
searchObject,
status,
errorMessage,
}: {
returnUrl: string
searchObject: URLSearchParams
status: PaymentCallbackStatusEnum
errorMessage?: string
}) {
const router = useRouter()
useEffect(() => {
const bookingData = window.sessionStorage.getItem(detailsStorageName)
if (bookingData) {
const detailsStorage: PersistedState = JSON.parse(bookingData)
const searchParams = convertObjToSearchParams(
detailsStorage.booking,
searchObject
)
const lateArrivalGuarantee = readGlaFromSessionStorage()
if (status === PaymentCallbackStatusEnum.Cancel) {
if (lateArrivalGuarantee) {
trackEvent({
event: "glaCardSaveCancelled",
hotelInfo: {
hotelId: detailsStorage.booking.hotelId,
lateArrivalGuarantee,
guaranteedProduct: "room",
},
paymentInfo: {
hotelId: detailsStorage.booking.hotelId,
status: "glacardsavecancelled",
},
})
} else {
trackPaymentEvent({
event: "paymentCancel",
hotelId: detailsStorage.booking.hotelId,
status: "cancelled",
})
}
}
if (status === PaymentCallbackStatusEnum.Error) {
if (lateArrivalGuarantee) {
trackEvent({
event: "glaCardSaveFailed",
hotelInfo: {
hotelId: detailsStorage.booking.hotelId,
lateArrivalGuarantee,
guaranteedProduct: "room",
},
paymentInfo: {
hotelId: detailsStorage.booking.hotelId,
status: "glacardsavefailed",
},
})
} else {
trackPaymentEvent({
event: "paymentFail",
hotelId: detailsStorage.booking.hotelId,
errorMessage,
status: "failed",
})
}
}
clearGlaSessionStorage()
if (searchParams.size > 0) {
router.replace(`${returnUrl}?${searchParams.toString()}`)
}
}
}, [returnUrl, router, searchObject, status, errorMessage])
return <LoadingSpinner fullPage />
}