Files
web/apps/scandic-web/hooks/booking/useGuaranteePaymentFailedToast.ts
Christel Westerberg c3b71a05d9 Merged in fix/STAY-2-GLA-cancelled (pull request #3109)
Fix/STAY-2 GLA cancelled

* fix: show toast on cancelling GLA flow

* fix: show the ancillary GLA errors as inline alerts


Approved-by: Bianca Widstam
Approved-by: Erik Tiekstra
2025-11-12 08:29:05 +00:00

70 lines
2.0 KiB
TypeScript

"use client"
import { usePathname, useRouter, useSearchParams } from "next/navigation"
import { useCallback, useEffect, useRef } from "react"
import { useIntl } from "react-intl"
import { toast } from "@scandic-hotels/design-system/Toast"
import { BookingErrorCodeEnum } from "@scandic-hotels/trpc/enums/bookingErrorCode"
import { isAncillaryError } from "@/components/HotelReservation/MyStay/utils"
export function useGuaranteePaymentFailedToast() {
const hasRunOnce = useRef(false)
const intl = useIntl()
const searchParams = useSearchParams()
const pathname = usePathname()
const router = useRouter()
const getErrorMessage = useCallback(
(errorCode: string | null) => {
switch (errorCode) {
case BookingErrorCodeEnum.TransactionCancelled:
return intl.formatMessage({
id: "guaranteePayment.cancelled",
defaultMessage:
"You have cancelled the payment. Your booking is not guaranteed.",
})
default:
return intl.formatMessage({
id: "guaranteePayment.failed",
defaultMessage:
"We had an issue guaranteeing your booking. Please try again.",
})
}
},
[intl]
)
useEffect(() => {
// To prevent multiple toasts in strict mode
if (hasRunOnce.current) {
return
}
const errorCode = searchParams.get("errorCode")
if (!errorCode) {
return
}
// Ancillary errors are handled in AddAncillaryFlowModal
if (isAncillaryError(searchParams)) {
hasRunOnce.current = true
return
}
const errorMessage = getErrorMessage(errorCode)
const toastType =
errorCode === BookingErrorCodeEnum.TransactionCancelled
? "warning"
: "error"
toast[toastType](errorMessage)
const queryParams = new URLSearchParams(searchParams.toString())
queryParams.delete("errorCode")
router.push(`${pathname}?${queryParams.toString()}`)
hasRunOnce.current = true
}, [searchParams, pathname, router, getErrorMessage])
}