From 00ad4329109a5ae9a5aea2b3862a3048e1717034 Mon Sep 17 00:00:00 2001 From: Bianca Widstam Date: Wed, 8 Oct 2025 13:55:30 +0000 Subject: [PATCH] Merged in fix/BOOK-377-clear-booking-widget-state (pull request #2929) fix(BOOK-377): clear date and guest data after confirmed booking * fix(BOOK-377): clear date and guest data after confirmed booking Approved-by: Erik Tiekstra --- .../Payment/PaymentCallback/HandleSuccessCallback.tsx | 2 ++ .../components/EnterDetails/Payment/PaymentClient.tsx | 3 +++ packages/booking-flow/lib/hooks/useBookingWidgetState.ts | 9 +++++++++ 3 files changed, 14 insertions(+) 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 {} +}