diff --git a/packages/booking-flow/lib/components/EnterDetails/Payment/PaymentCallback/HandleSuccessCallback.tsx b/packages/booking-flow/lib/components/EnterDetails/Payment/PaymentCallback/HandleSuccessCallback.tsx index d24cbe33f..4fe6546c9 100644 --- a/packages/booking-flow/lib/components/EnterDetails/Payment/PaymentCallback/HandleSuccessCallback.tsx +++ b/packages/booking-flow/lib/components/EnterDetails/Payment/PaymentCallback/HandleSuccessCallback.tsx @@ -6,6 +6,7 @@ import { useEffect } from "react" import { LoadingSpinner } from "@scandic-hotels/design-system/LoadingSpinner" import { BookingStatusEnum } from "@scandic-hotels/trpc/enums/bookingStatus" +import { clearBookingWidgetState } from "../../../../hooks/useBookingWidgetState" import { useHandleBookingStatus } from "../../../../hooks/useHandleBookingStatus" import { MEMBERSHIP_FAILED_ERROR } from "../../../../types/membershipFailedError" import TimeoutSpinner from "./TimeoutSpinner" @@ -58,6 +59,7 @@ export function HandleSuccessCallback({ bookingStatus.booking.reservationStatus as BookingStatusEnum ) ) { + clearBookingWidgetState() trackGuaranteeBookingSuccess(cardType) // a successful booking can still have membership errors const membershipFailedError = bookingStatus.booking.errors.find( diff --git a/packages/booking-flow/lib/components/EnterDetails/Payment/PaymentClient.tsx b/packages/booking-flow/lib/components/EnterDetails/Payment/PaymentClient.tsx index 58f9d3572..b5e5e0e67 100644 --- a/packages/booking-flow/lib/components/EnterDetails/Payment/PaymentClient.tsx +++ b/packages/booking-flow/lib/components/EnterDetails/Payment/PaymentClient.tsx @@ -39,6 +39,7 @@ import { RoomPackageCodeEnum } from "@scandic-hotels/trpc/enums/roomFilter" import { env } from "../../../../env/client" import { useAvailablePaymentOptions } from "../../../hooks/useAvailablePaymentOptions" import { useBookingFlowContext } from "../../../hooks/useBookingFlowContext" +import { clearBookingWidgetState } from "../../../hooks/useBookingWidgetState" import { useHandleBookingStatus } from "../../../hooks/useHandleBookingStatus" import { useIsLoggedIn } from "../../../hooks/useIsLoggedIn" import useLang from "../../../hooks/useLang" @@ -169,6 +170,7 @@ export default function PaymentClient({ const mainRoom = booking.rooms[0] if (booking.reservationStatus == BookingStatusEnum.BookingCompleted) { + clearBookingWidgetState() // Cookie is used by Booking Confirmation page to validate that the user came from payment callback document.cookie = `bcsig=${result.sig}; Path=/; Max-Age=60; Secure; SameSite=Strict` const confirmationUrl = `${bookingConfirmation(lang)}?RefId=${encodeURIComponent(mainRoom.refId)}` @@ -281,6 +283,7 @@ export default function PaymentClient({ BookingStatusEnum.BookingCompleted ) { const mainRoom = bookingStatus.data.booking.rooms[0] + clearBookingWidgetState() // Cookie is used by Booking Confirmation page to validate that the user came from payment callback document.cookie = `bcsig=${bookingStatus.data.sig}; Path=/; Max-Age=60; Secure; SameSite=Strict` const confirmationUrl = `${bookingConfirmation(lang)}?RefId=${encodeURIComponent(mainRoom.refId)}` diff --git a/packages/booking-flow/lib/hooks/useBookingWidgetState.ts b/packages/booking-flow/lib/hooks/useBookingWidgetState.ts index fd0d16736..ab8e0e964 100644 --- a/packages/booking-flow/lib/hooks/useBookingWidgetState.ts +++ b/packages/booking-flow/lib/hooks/useBookingWidgetState.ts @@ -90,3 +90,12 @@ export function setBookingWidgetState(state: BookingWidgetState): void { ) } catch {} } + +export function clearBookingWidgetState(): void { + if (typeof window === "undefined") { + return + } + try { + sessionStorage.removeItem(BOOKING_WIDGET_STATE) + } catch {} +}