@roomstay/frontend 2.6.111-2 → 2.6.111

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmationStepContextWrapper.js","sourceRoot":"/","sources":["src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext, ErrorHandler, useMemberContext } from '@frontend/contexts';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport {\n EBookingFlow,\n EBookingPaymentMethod,\n EHotelCardProcessor,\n IBookingCreateErrorResponse,\n IBookingExtraFields,\n IBookingPayment,\n ReservationDTO,\n ReservationsDTO,\n} from '@roomstay/core';\nimport { IconType } from '@roomstay/ui';\nimport * as Sentry from '@sentry/browser';\nimport { Severity } from '@sentry/types';\nimport { unionBy } from 'lodash';\nimport React, { FC, PropsWithChildren, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport API from '@/api/BookingAPI';\nimport Alert, { AlertType } from '@/components/generic/Alert';\nimport BEButton from '@/components/generic/BEButton';\nimport NextStepButton from '@/components/generic/buttons/NextStepButton';\nimport { OverlayLoader } from '@/components/generic/loader/OverlayLoader';\nimport Text, { TextType } from '@/components/generic/Text';\nimport StepConfirmationCheckoutDifferencesModal from '@/components/steps/confirmation/StepConfirmationCheckoutDifferencesModal';\nimport { ConfirmationStepContext } from '@/contexts/ConfirmationStepContext/ConfirmationStepContext';\nimport { PlacedBookingEvent } from '@/events/actions/PlacedBookingEvent';\nimport { CommittedBookingEvent } from '@/events/views/CommittedBookingEvent';\nimport { RolledBackBookingEvent } from '@/events/views/RolledBackBookingEvent';\nimport { adyenPaymentHandler } from '@/handlers/payment/AdyenPaymentHandler';\nimport { afterpayPaymentHandler } from '@/handlers/payment/AfterpayPaymentHandler';\nimport { mastercardPaymentHandler } from '@/handlers/payment/MastercardPaymentHandler';\nimport { PaymentHandler } from '@/handlers/payment/PaymentHandler';\nimport { paypalPaymentHandler } from '@/handlers/payment/PayPalPaymentHandler';\nimport { planpayPaymentHandler } from '@/handlers/payment/PlanpayPaymentHandler';\nimport { redirectPaymentHandler } from '@/handlers/payment/RedirectPaymentHandler';\nimport { stripePaymentHandler } from '@/handlers/payment/StripePaymentHandler';\nimport { trueRewardsPaymentHandler } from '@/handlers/payment/TrueRewardsPaymentHandler';\nimport { vgsMemberPaymentHandler } from '@/handlers/payment/VGSMemberPaymentHandler';\nimport { vgsPaymentHandler } from '@/handlers/payment/VGSPaymentHandler';\nimport { windcavePaymentHandler } from '@/handlers/payment/WindcavePaymentHandler';\nimport { useConfirmationQuery } from '@/hooks/ConfirmationQuery';\nimport { useHistoryConsistentPush } from '@/hooks/HistoryConsistentPush';\nimport { useSignedInMember } from '@/hooks/useSignedInMember';\nimport BasketRowDifferences from '@/models/BasketRowDifferences';\nimport { ConfirmationFormValues, IBookValidationResult, TUserProfileFormValues } from '@/models/Confirmation';\nimport { ListOfCountriesAndCodes } from '@/models/CountryCodesAndNumbers';\nimport UserProfile from '@/models/UserProfile';\nimport { Translation } from '@/translations/Translation';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\nimport getStepRoom from '@/util/GetStepRoom';\n\nimport { ConfirmationValidator } from './ConfirmationStepContextTypes';\nimport { ConfirmationStepErrorModal } from './ConfirmationStepErrorModal';\nimport { ConfirmationStepPriceQuoteErrorModal } from './ConfirmationStepPriceQuoteErrorModal';\n\nconst ConfirmationStepContextProvider = ConfirmationStepContext.Provider;\n\nexport const ConfirmationStepContextWrapper: FC<PropsWithChildren<any>> = ({ children }) => {\n const [differenceWarning, setDifferenceWarning] = useState<{\n differences: BasketRowDifferences[];\n warnings: string[];\n }>({\n differences: [],\n warnings: [],\n });\n\n const { queryRoomstayId: queryReservationId, queryPlanpayCheckoutId, paymentId, isBackFromPlanpay, isBackFromExternalPayment, isInitialCheckout } = useConfirmationQuery();\n // load the engine context\n const engineContext = useContext(BookingEngineContext);\n const { roomstayMember } = useMemberContext();\n\n const [bookingSource, setBookingSource] = useState<string>();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [isPaymentLoading, setIsPaymentLoading] = useState(false);\n const [loadingStatus, setLoadingStatus] = useState('');\n const [isPaymentFailed, setIsPaymentFailed] = useState(false);\n const [customFieldsHaveErrors, setCustomFieldsHaveErrors] = useState(false);\n const { isExternalMemberHotel, memberNumber } = useSignedInMember();\n\n const [apiErrorResponse, setApiErrorResponse] = useState<IBookingCreateErrorResponse>();\n const [errorModalLoading, setErrorModalLoading] = useState(false);\n const [isInPaymentMode, setIsInPaymentMode] = useState(false);\n const methods = useForm<ConfirmationFormValues>({\n mode: 'onSubmit',\n });\n const [errorChecks, setErrorChecks] = useState<(() => ConfirmationValidator)[]>([] as any);\n\n const [availablePaymentHandlers, setAvailablePaymentHandlers] = useState<PaymentHandler[]>([]);\n\n const basketContext = useContext(BasketContext);\n const basketRows = basketContext.getAllValidRows();\n const basketAddonRows = basketContext.basketAddonRows;\n\n const currentSession = useMemo(() => {\n return engineContext.sessionProvider.getSession();\n }, [basketContext.reservationData]);\n\n const { hotel } = useCurrentHotel();\n const { t } = useTranslation();\n const { raise } = useEvent();\n\n const allPaymentHandlers = [\n redirectPaymentHandler(),\n adyenPaymentHandler(),\n vgsPaymentHandler(),\n vgsMemberPaymentHandler(),\n planpayPaymentHandler(),\n afterpayPaymentHandler(),\n mastercardPaymentHandler(),\n trueRewardsPaymentHandler(),\n stripePaymentHandler(),\n paypalPaymentHandler(),\n windcavePaymentHandler(),\n ];\n\n const historyConsistentPush = useHistoryConsistentPush();\n\n const paymentMethod = methods.watch('paymentMethod');\n /**\n * We need to make sure that if the user navigates away from this step, we don't try to update the basket\n * with deposit data, as it can cause an unwanted redirect back to this step.\n */\n const confirmationStepIsActiveRef = useRef(true);\n useEffect(() => {\n return () => {\n confirmationStepIsActiveRef.current = false;\n };\n }, []);\n\n useEffect(() => {\n setBookingSource(engineContext.engine.getSessionProvider().getSession()?.source);\n\n const reservationRoomstayId: string | undefined = basketContext.reservationData?.roomstayId;\n const isMatchingRoomstayId: boolean = !!queryReservationId && (!reservationRoomstayId || queryReservationId === reservationRoomstayId);\n\n if (isBackFromExternalPayment && isMatchingRoomstayId) {\n if (basketContext.reservationData.payment?.isSplitPayment) {\n commitReservation?.(basketContext.reservationData);\n } else {\n commitReservation?.(basketContext.reservationData, 'Please wait... Finalising your reservation');\n }\n }\n\n if (isBackFromPlanpay && queryReservationId === reservationRoomstayId) {\n commitReservation?.(basketContext.reservationData, 'Please wait... Finalising your reservation');\n }\n\n if (isInitialCheckout) {\n DataLayer.instance.sendCheckoutView(basketRows, basketAddonRows);\n }\n }, []);\n\n useEffect(() => {\n const requireCall = hotel?.rmsUseDepositQuote || hotel?.bookingFlow !== EBookingFlow.Default;\n\n // Listen for Basket Row Changes to fetch new deposit quotes on checkout\n if (requireCall && basketContext.quoteQueryID !== '') {\n basketContext.quoteOrPencilReservation(() => confirmationStepIsActiveRef.current);\n }\n }, [hotel?.rmsUseDepositQuote, hotel?.bookingFlow, basketContext.quoteQueryID]);\n\n useEffect(() => {\n const currentlyAvailablePaymentHandlers = allPaymentHandlers.filter((handler) => handler.isAvailable);\n let defaultPaymentHandler = '';\n\n if (roomstayMember?.cards && currentlyAvailablePaymentHandlers.some((handler) => handler.name === 'VGSMember')) {\n defaultPaymentHandler = 'VGSMember';\n }\n\n if (!defaultPaymentHandler && currentlyAvailablePaymentHandlers.length > 0) {\n defaultPaymentHandler = currentlyAvailablePaymentHandlers[0].name;\n }\n\n methods.setValue('paymentMethod', defaultPaymentHandler);\n\n setAvailablePaymentHandlers(currentlyAvailablePaymentHandlers);\n }, [hotel]);\n\n useEffect(() => {\n const selectedPayment = availablePaymentHandlers.find((handler) => handler.name === paymentMethod);\n\n if (!selectedPayment) {\n return;\n }\n\n if (selectedPayment.requireBookingPlaced && !selectedPayment.isExclusive) {\n onContinueClick();\n }\n }, [paymentMethod]);\n\n const exclusivePayment = useMemo(() => {\n return availablePaymentHandlers.find((handler) => handler.isExclusive);\n }, [availablePaymentHandlers]);\n\n const toUserProfiles = (formValues: ConfirmationFormValues): UserProfile[] => {\n return formValues.userProfiles.map((values) => {\n let shortCountryCode: string | undefined = values.CountryCode;\n\n if (!shortCountryCode) {\n const country = ListOfCountriesAndCodes.find((country) => country.label === values.Country);\n shortCountryCode = country?.code;\n }\n\n return {\n title: values.Title,\n firstName: values.Forename,\n lastName: values.Surname,\n phone: values.Phone.replace(' ', ''),\n email: values.Email,\n address: {\n line1: values.Address,\n city: values.City,\n postalCode: values.PostCode,\n state: values.State,\n country: values.Country,\n countryId: values.CountryId,\n countryCode: shortCountryCode,\n },\n marketingOptIn: formValues.marketingOptIn,\n auxInputs: values.AuxInputs,\n };\n });\n };\n\n const validateCustomFields = (scrollToInput?: boolean): boolean => {\n const adhocValid = errorChecks.every((check) => check().validate(scrollToInput));\n return adhocValid === undefined ? true : adhocValid;\n };\n\n const validateReservation = async (data: ReservationsDTO): Promise<IBookValidationResult | undefined> => {\n const apiDifferences: BasketRowDifferences[] = [];\n if (data.reservations) {\n data.reservations.forEach((reservation: ReservationDTO, index) => {\n const diff = basketContext.currentBasketRows[index].checkDiffFromReservation(reservation);\n\n if (diff) {\n apiDifferences.push(diff);\n }\n });\n } else {\n Sentry.addBreadcrumb({\n level: Severity.Error,\n message: 'No reservation data: ' + JSON.stringify(data),\n });\n throw new Error('The reservation could not be completed due to an unexpected issue, please try again');\n }\n\n // If there are differences, we want to display them to make sure the booking still needs to proceed\n if (apiDifferences.length || (data.warnings && data.warnings.length)) {\n return {\n differences: apiDifferences,\n warnings: data.warnings as string[],\n };\n }\n };\n\n const onSubmitSuccess = async (data: ReservationsDTO, paymentMethod: EBookingPaymentMethod) => {\n raise(new PlacedBookingEvent(data, basketContext.currentBasketRows, hotel));\n\n // If this is a planpay booking, we don't need to do anything else.\n if (paymentMethod === EBookingPaymentMethod.Planpay || paymentMethod === EBookingPaymentMethod.TrueRewards) {\n return;\n }\n\n if (hotel?.cardProcessor === EHotelCardProcessor.Passthrough) {\n await commitReservation?.(data);\n } else {\n if (data.payment?.external?.redirectUrl) {\n redirectOut(data.payment?.external?.redirectUrl);\n } else if (!data.payment || Object.keys(data.payment).length === 0) {\n // No payment required (e.g., gift card covers full amount), commit the booking directly\n await commitReservation?.(data);\n }\n }\n };\n\n const placeBooking = async (formPayload: ConfirmationFormValues, payment: IBookingPayment): Promise<ReservationsDTO | null> => {\n DataLayer.instance.sendInteraction('Complete Booking', InteractionType.BUTTON, InteractionStep.GUEST_DETAILS);\n setIsLoading(true);\n let data: ReservationsDTO | undefined;\n\n const userProfiles = toUserProfiles(formPayload);\n const perRowExtraFields: IBookingExtraFields['perRow'] = formPayload.userProfiles.map((formValue: TUserProfileFormValues) => {\n return {\n childAges: formValue.CaptureChildAge?.filter((age) => age != null).map((age) => parseInt(age, 10)),\n };\n });\n\n try {\n const captureChildAgeComments: string[] = hotel?.captureChildAge\n ? formPayload.userProfiles.flatMap(\n (formValue: TUserProfileFormValues, roomIndex: number) =>\n formValue?.CaptureChildAge?.filter((age) => age != null).map(\n (age: string, childIndex: number) => `Room ${roomIndex + 1} - Child: ${childIndex + 1} Age: ${age}`\n ) || []\n )\n : [];\n\n const comments = formPayload.comments;\n\n const bookingComment = captureChildAgeComments.length > 0 ? `${comments}\\n${captureChildAgeComments.join('\\n')}` : comments;\n const customFields = formPayload?.customFields;\n data = await API.Reservation.bookNow(\n basketRows,\n userProfiles,\n payment,\n basketAddonRows,\n bookingComment || '',\n hotel?.hotelID as string,\n engineContext.sessionProvider.getCurrentSessionID().toString(),\n basketContext.pencilId,\n undefined,\n undefined,\n undefined,\n isExternalMemberHotel ? memberNumber : undefined,\n formPayload.giftCardPreauth,\n {\n perRow: perRowExtraFields,\n customFields: customFields,\n eta: formPayload?.eta || undefined,\n }\n );\n\n await basketContext.booked(data, {\n userProfiles,\n payment,\n comments: bookingComment || '',\n eta: formPayload?.eta || undefined,\n basketAddonRows,\n });\n\n const validationResult = await validateReservation(data);\n if (validationResult) {\n setIsLoading(false);\n setDifferenceWarning(validationResult);\n\n return null;\n } else {\n await onSubmitSuccess(data, payment.Method);\n\n return data;\n }\n } catch (error: any) {\n setApiErrorResponse(error as IBookingCreateErrorResponse);\n } finally {\n setIsLoading(false);\n }\n\n return null;\n };\n\n const parseReservationIdsFromData = (data: ReservationsDTO) => {\n return data?.reservations?.map((reservation) => reservation.reservationNumber);\n };\n\n const commitReservation = async (resData: ReservationsDTO, statusUpdate?: string) => {\n try {\n if (statusUpdate) {\n setLoadingStatus(statusUpdate);\n }\n\n setIsLoading(true);\n\n if (resData) {\n const reservationIds = parseReservationIdsFromData(resData);\n if (reservationIds.length) {\n try {\n const response = await API.Reservation.commit(\n reservationIds,\n resData.itineraryNumber,\n hotel?.hotelID as string,\n queryPlanpayCheckoutId || undefined,\n paymentId || undefined\n );\n let basketAddonRows = basketContext.basketAddonRows;\n const reservation = response.reservations?.[0];\n const isReturningWithEmptyBasketAddon = isBackFromExternalPayment && basketAddonRows.length === 0 && (reservation?.addons?.length ?? 0) > 0;\n\n if (isReturningWithEmptyBasketAddon) {\n // Fallback to session data when returning from external payment\n basketAddonRows = currentSession?.reservationRequest?.basketAddonRows ?? [];\n }\n try {\n DataLayer.instance.sendReservationConfirmed(basketContext.getAllValidRows(), basketAddonRows, response);\n } catch (ex) {\n console.error(ex);\n Sentry.captureException('Failed to read reservations from GTM code: ' + JSON.stringify(ex));\n }\n basketContext.checkedOut(response);\n raise(new CommittedBookingEvent(resData, basketContext.currentBasketRows, basketAddonRows, hotel));\n } catch (error: any) {\n if (error.paymentRequired) {\n basketContext.additionalPaymentRequired(error.paymentRequired);\n } else {\n setApiErrorResponse(error);\n }\n }\n } else {\n ErrorHandler.add({ message: t(Translation.Step.Confirmation.UnexpectedErrorOnCommittingReservation) });\n Sentry.captureException('No reservation IDs found when attempting to commit: ' + JSON.stringify(resData));\n }\n }\n } catch (ex) {\n console.error(ex);\n Sentry.captureException(ex);\n }\n\n setIsLoading(false);\n };\n\n const rollbackReservation = async () => {\n if (!basketContext.reservationData) return;\n\n try {\n const reservationIds = parseReservationIdsFromData(basketContext.reservationData);\n if (reservationIds.length) {\n setIsLoading(true);\n await API.Reservation.rollback(reservationIds, basketContext.reservationData.itineraryNumber, hotel?.hotelID as string);\n raise(new RolledBackBookingEvent(basketContext.reservationData));\n } else {\n Sentry.captureException('No reservation IDs found when attempting to rollback: ' + JSON.stringify(basketContext.reservationData));\n }\n } catch (ex) {\n console.log('Failed to rollback reservations');\n Sentry.captureException(ex);\n } finally {\n basketContext.rollback();\n setIsLoading(false);\n }\n };\n\n const redirectOut = (targetUrl: string, stateUpdate?: string) => {\n setIsLoading(true);\n if (stateUpdate) {\n setLoadingStatus(stateUpdate);\n }\n\n window.location.href = targetUrl;\n };\n\n const onRetryBooking = async () => {\n setErrorModalLoading(true);\n setIsLoading(true);\n\n const resRequest = currentSession?.reservationRequest;\n const roomstayId = currentSession?.reservation?.roomstayId;\n\n if (!resRequest || !roomstayId) {\n console.error('No reservation request or roomstay ID found in session', { resRequest, roomstayId });\n return null;\n }\n\n try {\n const data = await API.Reservation.bookNow(\n basketRows,\n resRequest.userProfiles,\n resRequest.payment,\n basketAddonRows,\n resRequest.comments,\n hotel?.hotelID as string,\n engineContext.sessionProvider.getCurrentSessionID().toString(),\n basketContext.pencilId,\n undefined,\n true,\n roomstayId,\n isExternalMemberHotel ? memberNumber : undefined,\n undefined,\n {\n perRow: [],\n eta: resRequest?.eta || undefined,\n }\n );\n await basketContext.booked(data);\n const validationResult = await validateReservation(data);\n\n if (validationResult) {\n setIsLoading(false);\n } else {\n await onSubmitSuccess(data, resRequest.payment?.Method);\n }\n } catch (error: any) {\n setApiErrorResponse(error as IBookingCreateErrorResponse);\n } finally {\n setIsLoading(false);\n setErrorModalLoading(false);\n setIsPaymentFailed(false);\n setApiErrorResponse(undefined);\n }\n };\n\n const onErrorModalClose = async () => {\n setErrorModalLoading(true);\n // We were previously rolling back reservations here, but deciding against it.\n const params = new URLSearchParams(window.location.search);\n window.history.replaceState({}, '', `${window.location.pathname}?${params}`);\n\n window.location.reload();\n };\n\n const attemptFormSubmit = (): Promise<ConfirmationFormValues | null> =>\n new Promise(async (resolve) => {\n const customFieldValidation = await validateCustomFields();\n\n setCustomFieldsHaveErrors(!customFieldValidation);\n\n const onSuccess = (values: ConfirmationFormValues) => {\n if (customFieldValidation) {\n resolve(values);\n } else {\n resolve(null);\n }\n };\n const onFailure = () => {\n // We can just return because custom fields will handle their own validation\n resolve(null);\n };\n\n methods.handleSubmit(onSuccess, onFailure)();\n });\n\n const onContinueClick = async () => {\n // Regardless if we're checking out or getting ready to pay, we need to make sure the details entered are valid\n // so first step will be to validate the inputs.\n\n const values = await attemptFormSubmit();\n\n if (!values) {\n // Error state will be handled within `attemptFormSubmit`\n return;\n }\n\n if (exclusivePayment) {\n // Since we're in exclusive payment mode we need to decide are we submitting, or enabling the payment stage\n if (isInPaymentMode) {\n setIsPaymentLoading(true);\n\n const paymentResponse = await exclusivePayment.onConfirm?.();\n setIsPaymentLoading(false);\n\n if (paymentResponse.success) {\n await commitReservation(basketContext.reservationData, 'Please wait... Finalising your reservation');\n } else {\n // Payment failed. Need to see if user want's to re-try.\n setIsPaymentFailed(true);\n }\n } else {\n if (exclusivePayment.requireBookingPlaced) {\n await placeBooking(values, await exclusivePayment?.getBookingPaymentRequestObject());\n }\n setIsInPaymentMode(true);\n await exclusivePayment.onSelect?.();\n }\n } else {\n // Check if gift card covers the full amount (use absolute value as redemptions are negative)\n const giftCardAmount = Math.abs(values.giftCardPreauth?.amount || 0);\n const totalBookingAmount = basketContext.getTotalPrice() || 0;\n const isFullyCoveredByGiftCard = giftCardAmount > 0 && giftCardAmount >= totalBookingAmount;\n\n if (isFullyCoveredByGiftCard) {\n // Gift card covers everything, skip payment handler and place booking directly\n await placeBooking(values, { Method: EBookingPaymentMethod.Card });\n } else {\n // We're not in exclusive payment mode, so we can just submit the form\n // First we need to find the payment object from the selected value\n const paymentMode = availablePaymentHandlers.find((handler) => handler.name === values.paymentMethod);\n if (!paymentMode) {\n console.error('No payment mode found for selected payment method', { paymentMethod: values.paymentMethod, availablePaymentHandlers });\n return;\n }\n\n try {\n setIsPaymentLoading(true);\n const response = await paymentMode.onConfirm();\n setIsPaymentLoading(false);\n\n if (response.success) {\n const paymentObject = await paymentMode?.getBookingPaymentRequestObject();\n await placeBooking(values, { ...paymentObject, ...response.data });\n } else {\n // The error will be handled in the payment mode.\n }\n } catch (error) {\n console.error(error);\n } finally {\n setIsPaymentLoading(false);\n }\n }\n }\n };\n\n const onBackFromPaymentDetails = () => {\n setIsInPaymentMode(false);\n };\n\n const onClosePriceQuote = () => {\n const params = new URLSearchParams(window.location.search);\n window.history.replaceState({}, '', `${window.location.pathname}?${params}`);\n window.location.reload();\n };\n\n const onBackPriceQuote = () => {\n historyConsistentPush(getStepRoom().getStepUrl());\n };\n\n const onRetryPriceQuote = () => {\n basketContext.quoteOrPencilReservation(() => confirmationStepIsActiveRef.current);\n };\n\n return (\n <FormProvider {...methods}>\n <ConfirmationStepContextProvider\n value={{\n onContinueClick,\n bookingSource,\n\n commitReservation,\n rollbackReservation,\n redirectOut,\n setLoadingStatus,\n\n errorChecks,\n addErrorChecks: (...checks: (() => ConfirmationValidator)[]) => {\n setErrorChecks((oldErrors) => unionBy(checks, oldErrors, (check) => check().name));\n },\n\n isLoading,\n isBackFromPlanpay,\n isBackFromExternalPayment,\n isInPaymentMode,\n apiErrorResponse,\n\n availablePaymentHandlers,\n }}\n >\n {isLoading && <OverlayLoader isFullscreen label={loadingStatus} />}\n <ConfirmationStepErrorModal onRetry={onRetryBooking} onClose={onErrorModalClose} errorData={apiErrorResponse} isLoading={errorModalLoading} />\n <ConfirmationStepPriceQuoteErrorModal open={basketContext.hasPriceQuoteError} onBack={onBackPriceQuote} onRetry={onRetryPriceQuote} onClose={onClosePriceQuote} />\n\n <AutoAutoHeight open={customFieldsHaveErrors}>\n <div className=\"u-pad-bottom\">\n <Alert icon={IconType.Error} type={AlertType.Danger}>\n <Text type={TextType.Small}>{t(Translation.Step.Confirmation.CustomInputFieldError)}</Text>\n </Alert>\n </div>\n </AutoAutoHeight>\n\n {children}\n <StepConfirmationCheckoutDifferencesModal\n differences={differenceWarning.differences}\n warnings={differenceWarning.warnings}\n isLoading={isLoading}\n onClose={async () => {\n await rollbackReservation?.();\n historyConsistentPush(getStepRoom().getStepUrl());\n }}\n onProceed={async () => {\n const resRequest = currentSession?.reservationRequest;\n const resResponse = basketContext.reservationData;\n\n try {\n if (resRequest && resResponse) {\n await onSubmitSuccess(resResponse, resRequest?.payment?.Method);\n setDifferenceWarning({ differences: [], warnings: [] });\n } else {\n ErrorHandler.add({ message: t(Translation.Step.Confirmation.UnexpectedErrorOnCommittingReservation) });\n Sentry.captureException('No reservation request or response found when attempting to commit: ' + JSON.stringify({ resRequest, resResponse }));\n }\n } catch (ex) {\n console.error('Failed to commit reservation', ex);\n Sentry.captureException(ex);\n }\n }}\n />\n\n <div className=\"u-flex u-marg-top--heavy justify-content-end\">\n {exclusivePayment && isInPaymentMode && (\n <div className=\"u-marg-right d-flex\">\n <BEButton icon={IconType.ArrowLeft} isText onClick={onBackFromPaymentDetails}>\n {t(Translation.Step.Confirmation.EditDetails)}\n </BEButton>\n </div>\n )}\n {isPaymentFailed && exclusivePayment?.name !== 'Stripe' && (\n <div className=\"u-marg-right d-flex\">\n <BEButton icon={IconType.Edit} stopIconAnimation primary filled onClick={onRetryBooking} isLoading={isLoading}>\n {t(Translation.Step.Confirmation.RetryPayment)}\n </BEButton>\n </div>\n )}\n {(!exclusivePayment?.hasCustomConfirmButton || !isInPaymentMode) && (\n <NextStepButton\n disabled={paymentMethod === EBookingPaymentMethod.Planpay || isLoading || isPaymentLoading || !basketContext.isQuoteOrPencilReady}\n text={exclusivePayment && !isInPaymentMode ? t(Translation.Step.Confirmation.ContinueToPayment) : t(Translation.Step.Confirmation.ConfirmReservation)}\n isLoading={isLoading || isPaymentLoading || !basketContext.isQuoteOrPencilReady}\n onClick={onContinueClick}\n />\n )}\n </div>\n </ConfirmationStepContextProvider>\n </FormProvider>\n );\n};\n"]}
1
+ {"version":3,"file":"ConfirmationStepContextWrapper.js","sourceRoot":"/","sources":["src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext, ErrorHandler, useMemberContext } from '@frontend/contexts';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport {\n EBookingFlow,\n EBookingPaymentMethod,\n EHotelCardProcessor,\n IBookingCreateErrorResponse,\n IBookingExtraFields,\n IBookingPayment,\n ReservationDTO,\n ReservationsDTO,\n} from '@roomstay/core';\nimport { IconType } from '@roomstay/ui';\nimport * as Sentry from '@sentry/browser';\nimport { Severity } from '@sentry/types';\nimport { unionBy } from 'lodash';\nimport React, { FC, PropsWithChildren, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport API from '@/api/BookingAPI';\nimport Alert, { AlertType } from '@/components/generic/Alert';\nimport BEButton from '@/components/generic/BEButton';\nimport NextStepButton from '@/components/generic/buttons/NextStepButton';\nimport { OverlayLoader } from '@/components/generic/loader/OverlayLoader';\nimport Text, { TextType } from '@/components/generic/Text';\nimport StepConfirmationCheckoutDifferencesModal from '@/components/steps/confirmation/StepConfirmationCheckoutDifferencesModal';\nimport { ConfirmationStepContext } from '@/contexts/ConfirmationStepContext/ConfirmationStepContext';\nimport { PlacedBookingEvent } from '@/events/actions/PlacedBookingEvent';\nimport { CommittedBookingEvent } from '@/events/views/CommittedBookingEvent';\nimport { RolledBackBookingEvent } from '@/events/views/RolledBackBookingEvent';\nimport { adyenPaymentHandler } from '@/handlers/payment/AdyenPaymentHandler';\nimport { afterpayPaymentHandler } from '@/handlers/payment/AfterpayPaymentHandler';\nimport { mastercardPaymentHandler } from '@/handlers/payment/MastercardPaymentHandler';\nimport { PaymentHandler } from '@/handlers/payment/PaymentHandler';\nimport { paypalPaymentHandler } from '@/handlers/payment/PayPalPaymentHandler';\nimport { planpayPaymentHandler } from '@/handlers/payment/PlanpayPaymentHandler';\nimport { redirectPaymentHandler } from '@/handlers/payment/RedirectPaymentHandler';\nimport { stripePaymentHandler } from '@/handlers/payment/StripePaymentHandler';\nimport { trueRewardsPaymentHandler } from '@/handlers/payment/TrueRewardsPaymentHandler';\nimport { vgsMemberPaymentHandler } from '@/handlers/payment/VGSMemberPaymentHandler';\nimport { vgsPaymentHandler } from '@/handlers/payment/VGSPaymentHandler';\nimport { windcavePaymentHandler } from '@/handlers/payment/WindcavePaymentHandler';\nimport { useConfirmationQuery } from '@/hooks/ConfirmationQuery';\nimport { useHistoryConsistentPush } from '@/hooks/HistoryConsistentPush';\nimport { useSignedInMember } from '@/hooks/useSignedInMember';\nimport BasketRowDifferences from '@/models/BasketRowDifferences';\nimport { ConfirmationFormValues, IBookValidationResult, TUserProfileFormValues } from '@/models/Confirmation';\nimport { ListOfCountriesAndCodes } from '@/models/CountryCodesAndNumbers';\nimport UserProfile from '@/models/UserProfile';\nimport { Translation } from '@/translations/Translation';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\nimport getStepRoom from '@/util/GetStepRoom';\n\nimport { ConfirmationValidator } from './ConfirmationStepContextTypes';\nimport { ConfirmationStepErrorModal } from './ConfirmationStepErrorModal';\nimport { ConfirmationStepPriceQuoteErrorModal } from './ConfirmationStepPriceQuoteErrorModal';\n\nconst ConfirmationStepContextProvider = ConfirmationStepContext.Provider;\n\nexport const ConfirmationStepContextWrapper: FC<PropsWithChildren<any>> = ({ children }) => {\n const [differenceWarning, setDifferenceWarning] = useState<{\n differences: BasketRowDifferences[];\n warnings: string[];\n }>({\n differences: [],\n warnings: [],\n });\n\n const { queryRoomstayId: queryReservationId, queryPlanpayCheckoutId, paymentId, isBackFromPlanpay, isBackFromExternalPayment, isInitialCheckout } = useConfirmationQuery();\n // load the engine context\n const engineContext = useContext(BookingEngineContext);\n const { roomstayMember } = useMemberContext();\n\n const [bookingSource, setBookingSource] = useState<string>();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [isPaymentLoading, setIsPaymentLoading] = useState(false);\n const [loadingStatus, setLoadingStatus] = useState('');\n const [isPaymentFailed, setIsPaymentFailed] = useState(false);\n const [customFieldsHaveErrors, setCustomFieldsHaveErrors] = useState(false);\n const { isExternalMemberHotel, memberNumber } = useSignedInMember();\n\n const [apiErrorResponse, setApiErrorResponse] = useState<IBookingCreateErrorResponse>();\n const [errorModalLoading, setErrorModalLoading] = useState(false);\n const [isInPaymentMode, setIsInPaymentMode] = useState(false);\n const methods = useForm<ConfirmationFormValues>({\n mode: 'onSubmit',\n });\n const [errorChecks, setErrorChecks] = useState<(() => ConfirmationValidator)[]>([] as any);\n\n const [availablePaymentHandlers, setAvailablePaymentHandlers] = useState<PaymentHandler[]>([]);\n\n const basketContext = useContext(BasketContext);\n const basketRows = basketContext.getAllValidRows();\n const basketAddonRows = basketContext.basketAddonRows;\n\n const currentSession = useMemo(() => {\n return engineContext.sessionProvider.getSession();\n }, [basketContext.reservationData]);\n\n const { hotel } = useCurrentHotel();\n const { t } = useTranslation();\n const { raise } = useEvent();\n\n const allPaymentHandlers = [\n redirectPaymentHandler(),\n adyenPaymentHandler(),\n vgsPaymentHandler(),\n vgsMemberPaymentHandler(),\n planpayPaymentHandler(),\n afterpayPaymentHandler(),\n mastercardPaymentHandler(),\n trueRewardsPaymentHandler(),\n stripePaymentHandler(),\n paypalPaymentHandler(),\n windcavePaymentHandler(),\n ];\n\n const historyConsistentPush = useHistoryConsistentPush();\n\n const paymentMethod = methods.watch('paymentMethod');\n /**\n * We need to make sure that if the user navigates away from this step, we don't try to update the basket\n * with deposit data, as it can cause an unwanted redirect back to this step.\n */\n const confirmationStepIsActiveRef = useRef(true);\n useEffect(() => {\n return () => {\n confirmationStepIsActiveRef.current = false;\n };\n }, []);\n\n useEffect(() => {\n setBookingSource(engineContext.engine.getSessionProvider().getSession()?.source);\n\n const reservationRoomstayId: string | undefined = basketContext.reservationData?.roomstayId;\n const isMatchingRoomstayId: boolean = !!queryReservationId && (!reservationRoomstayId || queryReservationId === reservationRoomstayId);\n\n if (isBackFromExternalPayment && isMatchingRoomstayId) {\n if (basketContext.reservationData.payment?.isSplitPayment) {\n commitReservation?.(basketContext.reservationData);\n } else {\n commitReservation?.(basketContext.reservationData, 'Please wait... Finalising your reservation');\n }\n }\n\n if (isBackFromPlanpay && queryReservationId === reservationRoomstayId) {\n commitReservation?.(basketContext.reservationData, 'Please wait... Finalising your reservation');\n }\n\n if (isInitialCheckout) {\n DataLayer.instance.sendCheckoutView(basketRows, basketAddonRows);\n }\n }, []);\n\n useEffect(() => {\n const requireCall = hotel?.rmsUseDepositQuote || hotel?.bookingFlow !== EBookingFlow.Default;\n\n // Listen for Basket Row Changes to fetch new deposit quotes on checkout\n if (requireCall && basketContext.quoteQueryID !== '') {\n basketContext.quoteOrPencilReservation(() => confirmationStepIsActiveRef.current);\n }\n }, [hotel?.rmsUseDepositQuote, hotel?.bookingFlow, basketContext.quoteQueryID]);\n\n useEffect(() => {\n const currentlyAvailablePaymentHandlers = allPaymentHandlers.filter((handler) => handler.isAvailable);\n let defaultPaymentHandler = '';\n\n if (roomstayMember?.cards && currentlyAvailablePaymentHandlers.some((handler) => handler.name === 'VGSMember')) {\n defaultPaymentHandler = 'VGSMember';\n }\n\n if (!defaultPaymentHandler && currentlyAvailablePaymentHandlers.length > 0) {\n defaultPaymentHandler = currentlyAvailablePaymentHandlers[0].name;\n }\n\n methods.setValue('paymentMethod', defaultPaymentHandler);\n\n setAvailablePaymentHandlers(currentlyAvailablePaymentHandlers);\n }, [hotel]);\n\n useEffect(() => {\n const selectedPayment = availablePaymentHandlers.find((handler) => handler.name === paymentMethod);\n\n if (!selectedPayment) {\n return;\n }\n\n if (selectedPayment.requireBookingPlaced && !selectedPayment.isExclusive) {\n onContinueClick();\n }\n }, [paymentMethod]);\n\n const exclusivePayment = useMemo(() => {\n return availablePaymentHandlers.find((handler) => handler.isExclusive);\n }, [availablePaymentHandlers]);\n\n const toUserProfiles = (formValues: ConfirmationFormValues): UserProfile[] => {\n return formValues.userProfiles.map((values) => {\n let shortCountryCode: string | undefined = values.CountryCode;\n\n if (!shortCountryCode) {\n const country = ListOfCountriesAndCodes.find((country) => country.label === values.Country);\n shortCountryCode = country?.code;\n }\n\n return {\n title: values.Title,\n firstName: values.Forename,\n lastName: values.Surname,\n phone: values.Phone.replace(' ', ''),\n email: values.Email,\n address: {\n line1: values.Address,\n city: values.City,\n postalCode: values.PostCode,\n state: values.State,\n country: values.Country,\n countryId: values.CountryId,\n countryCode: shortCountryCode,\n },\n marketingOptIn: formValues.marketingOptIn,\n auxInputs: values.AuxInputs,\n };\n });\n };\n\n const validateCustomFields = (scrollToInput?: boolean): boolean => {\n const adhocValid = errorChecks.every((check) => check().validate(scrollToInput));\n return adhocValid === undefined ? true : adhocValid;\n };\n\n const validateReservation = async (data: ReservationsDTO): Promise<IBookValidationResult | undefined> => {\n const apiDifferences: BasketRowDifferences[] = [];\n if (data.reservations) {\n data.reservations.forEach((reservation: ReservationDTO, index) => {\n const diff = basketContext.currentBasketRows[index].checkDiffFromReservation(reservation);\n\n if (diff) {\n apiDifferences.push(diff);\n }\n });\n } else {\n Sentry.addBreadcrumb({\n level: Severity.Error,\n message: 'No reservation data: ' + JSON.stringify(data),\n });\n throw new Error('The reservation could not be completed due to an unexpected issue, please try again');\n }\n\n // If there are differences, we want to display them to make sure the booking still needs to proceed\n if (apiDifferences.length || (data.warnings && data.warnings.length)) {\n return {\n differences: apiDifferences,\n warnings: data.warnings as string[],\n };\n }\n };\n\n const onSubmitSuccess = async (data: ReservationsDTO, paymentMethod: EBookingPaymentMethod) => {\n raise(new PlacedBookingEvent(data, basketContext.currentBasketRows, hotel));\n\n // If this is a planpay booking, we don't need to do anything else.\n if (paymentMethod === EBookingPaymentMethod.Planpay || paymentMethod === EBookingPaymentMethod.TrueRewards) {\n return;\n }\n\n if (hotel?.cardProcessor === EHotelCardProcessor.Passthrough) {\n await commitReservation?.(data);\n } else {\n if (data.payment?.external?.redirectUrl) {\n redirectOut(data.payment?.external?.redirectUrl);\n } else if (!data.payment || Object.keys(data.payment).length === 0) {\n // No payment required (e.g., gift card covers full amount), commit the booking directly\n await commitReservation?.(data);\n }\n }\n };\n\n const placeBooking = async (formPayload: ConfirmationFormValues, payment: IBookingPayment): Promise<ReservationsDTO | null> => {\n DataLayer.instance.sendInteraction('Complete Booking', InteractionType.BUTTON, InteractionStep.GUEST_DETAILS);\n setIsLoading(true);\n let data: ReservationsDTO | undefined;\n\n const userProfiles = toUserProfiles(formPayload);\n const perRowExtraFields: IBookingExtraFields['perRow'] = formPayload.userProfiles.map((formValue: TUserProfileFormValues) => {\n return {\n childAges: formValue.CaptureChildAge?.filter((age) => age != null).map((age) => parseInt(age, 10)),\n };\n });\n\n try {\n const captureChildAgeComments: string[] = hotel?.captureChildAge\n ? formPayload.userProfiles.flatMap(\n (formValue: TUserProfileFormValues, roomIndex: number) =>\n formValue?.CaptureChildAge?.filter((age) => age != null).map(\n (age: string, childIndex: number) => `Room ${roomIndex + 1} - Child: ${childIndex + 1} Age: ${age}`\n ) || []\n )\n : [];\n\n const comments = formPayload.comments;\n\n const bookingComment = captureChildAgeComments.length > 0 ? `${comments}\\n${captureChildAgeComments.join('\\n')}` : comments;\n const customFields = formPayload?.customFields;\n data = await API.Reservation.bookNow(\n basketRows,\n userProfiles,\n payment,\n basketAddonRows,\n bookingComment || '',\n hotel?.hotelID as string,\n engineContext.sessionProvider.getCurrentSessionID().toString(),\n basketContext.pencilId,\n undefined,\n undefined,\n undefined,\n isExternalMemberHotel ? memberNumber : undefined,\n formPayload.giftCardPreauth,\n {\n perRow: perRowExtraFields,\n customFields: customFields,\n eta: formPayload?.eta || undefined,\n }\n );\n\n await basketContext.booked(data, {\n userProfiles,\n payment,\n comments: bookingComment || '',\n eta: formPayload?.eta || undefined,\n basketAddonRows,\n });\n\n const validationResult = await validateReservation(data);\n if (validationResult) {\n setIsLoading(false);\n setDifferenceWarning(validationResult);\n\n return null;\n } else {\n await onSubmitSuccess(data, payment.Method);\n\n return data;\n }\n } catch (error: any) {\n setApiErrorResponse(error as IBookingCreateErrorResponse);\n } finally {\n setIsLoading(false);\n }\n\n return null;\n };\n\n const parseReservationIdsFromData = (data: ReservationsDTO) => {\n return data?.reservations?.map((reservation) => reservation.reservationNumber);\n };\n\n const commitReservation = async (resData: ReservationsDTO, statusUpdate?: string) => {\n try {\n if (statusUpdate) {\n setLoadingStatus(statusUpdate);\n }\n\n setIsLoading(true);\n\n if (resData) {\n const reservationIds = parseReservationIdsFromData(resData);\n if (reservationIds.length) {\n try {\n const response = await API.Reservation.commit(\n reservationIds,\n resData.itineraryNumber,\n hotel?.hotelID as string,\n queryPlanpayCheckoutId || undefined,\n paymentId || undefined\n );\n let basketAddonRows = basketContext.basketAddonRows;\n const reservation = response.reservations?.[0];\n const isReturningWithEmptyBasketAddon = isBackFromExternalPayment && basketAddonRows.length === 0 && (reservation?.addons?.length ?? 0) > 0;\n\n if (isReturningWithEmptyBasketAddon) {\n // Fallback to session data when returning from external payment\n basketAddonRows = currentSession?.reservationRequest?.basketAddonRows ?? [];\n }\n try {\n DataLayer.instance.sendReservationConfirmed(basketContext.getAllValidRows(), basketAddonRows, response);\n } catch (ex) {\n Sentry.captureException('Failed to read reservations from GTM code: ' + JSON.stringify(ex));\n }\n basketContext.checkedOut(response);\n raise(new CommittedBookingEvent(resData, basketContext.currentBasketRows, basketAddonRows, hotel));\n } catch (error: any) {\n if (error.paymentRequired) {\n basketContext.additionalPaymentRequired(error.paymentRequired);\n } else {\n setApiErrorResponse(error);\n }\n }\n } else {\n ErrorHandler.add({ message: t(Translation.Step.Confirmation.UnexpectedErrorOnCommittingReservation) });\n Sentry.captureException('No reservation IDs found when attempting to commit: ' + JSON.stringify(resData));\n }\n }\n } catch (ex) {\n console.error(ex);\n Sentry.captureException(ex);\n }\n\n setIsLoading(false);\n };\n\n const rollbackReservation = async () => {\n if (!basketContext.reservationData) return;\n\n try {\n const reservationIds = parseReservationIdsFromData(basketContext.reservationData);\n if (reservationIds.length) {\n setIsLoading(true);\n await API.Reservation.rollback(reservationIds, basketContext.reservationData.itineraryNumber, hotel?.hotelID as string);\n raise(new RolledBackBookingEvent(basketContext.reservationData));\n } else {\n Sentry.captureException('No reservation IDs found when attempting to rollback: ' + JSON.stringify(basketContext.reservationData));\n }\n } catch (ex) {\n console.log('Failed to rollback reservations');\n Sentry.captureException(ex);\n } finally {\n basketContext.rollback();\n setIsLoading(false);\n }\n };\n\n const redirectOut = (targetUrl: string, stateUpdate?: string) => {\n setIsLoading(true);\n if (stateUpdate) {\n setLoadingStatus(stateUpdate);\n }\n\n window.location.href = targetUrl;\n };\n\n const onRetryBooking = async () => {\n setErrorModalLoading(true);\n setIsLoading(true);\n\n const resRequest = currentSession?.reservationRequest;\n const roomstayId = currentSession?.reservation?.roomstayId;\n\n if (!resRequest || !roomstayId) {\n console.error('No reservation request or roomstay ID found in session', { resRequest, roomstayId });\n return null;\n }\n\n try {\n const data = await API.Reservation.bookNow(\n basketRows,\n resRequest.userProfiles,\n resRequest.payment,\n basketAddonRows,\n resRequest.comments,\n hotel?.hotelID as string,\n engineContext.sessionProvider.getCurrentSessionID().toString(),\n basketContext.pencilId,\n undefined,\n true,\n roomstayId,\n isExternalMemberHotel ? memberNumber : undefined,\n undefined,\n {\n perRow: [],\n eta: resRequest?.eta || undefined,\n }\n );\n await basketContext.booked(data);\n const validationResult = await validateReservation(data);\n\n if (validationResult) {\n setIsLoading(false);\n } else {\n await onSubmitSuccess(data, resRequest.payment?.Method);\n }\n } catch (error: any) {\n setApiErrorResponse(error as IBookingCreateErrorResponse);\n } finally {\n setIsLoading(false);\n setErrorModalLoading(false);\n setIsPaymentFailed(false);\n setApiErrorResponse(undefined);\n }\n };\n\n const onErrorModalClose = async () => {\n setErrorModalLoading(true);\n // We were previously rolling back reservations here, but deciding against it.\n const params = new URLSearchParams(window.location.search);\n window.history.replaceState({}, '', `${window.location.pathname}?${params}`);\n\n window.location.reload();\n };\n\n const attemptFormSubmit = (): Promise<ConfirmationFormValues | null> =>\n new Promise(async (resolve) => {\n const customFieldValidation = await validateCustomFields();\n\n setCustomFieldsHaveErrors(!customFieldValidation);\n\n const onSuccess = (values: ConfirmationFormValues) => {\n if (customFieldValidation) {\n resolve(values);\n } else {\n resolve(null);\n }\n };\n const onFailure = () => {\n // We can just return because custom fields will handle their own validation\n resolve(null);\n };\n\n methods.handleSubmit(onSuccess, onFailure)();\n });\n\n const onContinueClick = async () => {\n // Regardless if we're checking out or getting ready to pay, we need to make sure the details entered are valid\n // so first step will be to validate the inputs.\n\n const values = await attemptFormSubmit();\n\n if (!values) {\n // Error state will be handled within `attemptFormSubmit`\n return;\n }\n\n if (exclusivePayment) {\n // Since we're in exclusive payment mode we need to decide are we submitting, or enabling the payment stage\n if (isInPaymentMode) {\n setIsPaymentLoading(true);\n\n const paymentResponse = await exclusivePayment.onConfirm?.();\n setIsPaymentLoading(false);\n\n if (paymentResponse.success) {\n await commitReservation(basketContext.reservationData, 'Please wait... Finalising your reservation');\n } else {\n // Payment failed. Need to see if user want's to re-try.\n setIsPaymentFailed(true);\n }\n } else {\n if (exclusivePayment.requireBookingPlaced) {\n await placeBooking(values, await exclusivePayment?.getBookingPaymentRequestObject());\n }\n setIsInPaymentMode(true);\n await exclusivePayment.onSelect?.();\n }\n } else {\n // Check if gift card covers the full amount (use absolute value as redemptions are negative)\n const giftCardAmount = Math.abs(values.giftCardPreauth?.amount || 0);\n const totalBookingAmount = basketContext.getTotalPrice() || 0;\n const isFullyCoveredByGiftCard = giftCardAmount > 0 && giftCardAmount >= totalBookingAmount;\n\n if (isFullyCoveredByGiftCard) {\n // Gift card covers everything, skip payment handler and place booking directly\n await placeBooking(values, { Method: EBookingPaymentMethod.Card });\n } else {\n // We're not in exclusive payment mode, so we can just submit the form\n // First we need to find the payment object from the selected value\n const paymentMode = availablePaymentHandlers.find((handler) => handler.name === values.paymentMethod);\n if (!paymentMode) {\n console.error('No payment mode found for selected payment method', { paymentMethod: values.paymentMethod, availablePaymentHandlers });\n return;\n }\n\n try {\n setIsPaymentLoading(true);\n const response = await paymentMode.onConfirm();\n setIsPaymentLoading(false);\n\n if (response.success) {\n const paymentObject = await paymentMode?.getBookingPaymentRequestObject();\n await placeBooking(values, { ...paymentObject, ...response.data });\n } else {\n // The error will be handled in the payment mode.\n }\n } catch (error) {\n console.error(error);\n } finally {\n setIsPaymentLoading(false);\n }\n }\n }\n };\n\n const onBackFromPaymentDetails = () => {\n setIsInPaymentMode(false);\n };\n\n const onClosePriceQuote = () => {\n const params = new URLSearchParams(window.location.search);\n window.history.replaceState({}, '', `${window.location.pathname}?${params}`);\n window.location.reload();\n };\n\n const onBackPriceQuote = () => {\n historyConsistentPush(getStepRoom().getStepUrl());\n };\n\n const onRetryPriceQuote = () => {\n basketContext.quoteOrPencilReservation(() => confirmationStepIsActiveRef.current);\n };\n\n return (\n <FormProvider {...methods}>\n <ConfirmationStepContextProvider\n value={{\n onContinueClick,\n bookingSource,\n\n commitReservation,\n rollbackReservation,\n redirectOut,\n setLoadingStatus,\n\n errorChecks,\n addErrorChecks: (...checks: (() => ConfirmationValidator)[]) => {\n setErrorChecks((oldErrors) => unionBy(checks, oldErrors, (check) => check().name));\n },\n\n isLoading,\n isBackFromPlanpay,\n isBackFromExternalPayment,\n isInPaymentMode,\n apiErrorResponse,\n\n availablePaymentHandlers,\n }}\n >\n {isLoading && <OverlayLoader isFullscreen label={loadingStatus} />}\n <ConfirmationStepErrorModal onRetry={onRetryBooking} onClose={onErrorModalClose} errorData={apiErrorResponse} isLoading={errorModalLoading} />\n <ConfirmationStepPriceQuoteErrorModal open={basketContext.hasPriceQuoteError} onBack={onBackPriceQuote} onRetry={onRetryPriceQuote} onClose={onClosePriceQuote} />\n\n <AutoAutoHeight open={customFieldsHaveErrors}>\n <div className=\"u-pad-bottom\">\n <Alert icon={IconType.Error} type={AlertType.Danger}>\n <Text type={TextType.Small}>{t(Translation.Step.Confirmation.CustomInputFieldError)}</Text>\n </Alert>\n </div>\n </AutoAutoHeight>\n\n {children}\n <StepConfirmationCheckoutDifferencesModal\n differences={differenceWarning.differences}\n warnings={differenceWarning.warnings}\n isLoading={isLoading}\n onClose={async () => {\n await rollbackReservation?.();\n historyConsistentPush(getStepRoom().getStepUrl());\n }}\n onProceed={async () => {\n const resRequest = currentSession?.reservationRequest;\n const resResponse = basketContext.reservationData;\n\n try {\n if (resRequest && resResponse) {\n await onSubmitSuccess(resResponse, resRequest?.payment?.Method);\n setDifferenceWarning({ differences: [], warnings: [] });\n } else {\n ErrorHandler.add({ message: t(Translation.Step.Confirmation.UnexpectedErrorOnCommittingReservation) });\n Sentry.captureException('No reservation request or response found when attempting to commit: ' + JSON.stringify({ resRequest, resResponse }));\n }\n } catch (ex) {\n console.error('Failed to commit reservation', ex);\n Sentry.captureException(ex);\n }\n }}\n />\n\n <div className=\"u-flex u-marg-top--heavy justify-content-end\">\n {exclusivePayment && isInPaymentMode && (\n <div className=\"u-marg-right d-flex\">\n <BEButton icon={IconType.ArrowLeft} isText onClick={onBackFromPaymentDetails}>\n {t(Translation.Step.Confirmation.EditDetails)}\n </BEButton>\n </div>\n )}\n {isPaymentFailed && exclusivePayment?.name !== 'Stripe' && (\n <div className=\"u-marg-right d-flex\">\n <BEButton icon={IconType.Edit} stopIconAnimation primary filled onClick={onRetryBooking} isLoading={isLoading}>\n {t(Translation.Step.Confirmation.RetryPayment)}\n </BEButton>\n </div>\n )}\n {(!exclusivePayment?.hasCustomConfirmButton || !isInPaymentMode) && (\n <NextStepButton\n disabled={paymentMethod === EBookingPaymentMethod.Planpay || isLoading || isPaymentLoading || !basketContext.isQuoteOrPencilReady}\n text={exclusivePayment && !isInPaymentMode ? t(Translation.Step.Confirmation.ContinueToPayment) : t(Translation.Step.Confirmation.ConfirmReservation)}\n isLoading={isLoading || isPaymentLoading || !basketContext.isQuoteOrPencilReady}\n onClick={onContinueClick}\n />\n )}\n </div>\n </ConfirmationStepContextProvider>\n </FormProvider>\n );\n};\n"]}
@@ -133,7 +133,7 @@ function FindReservationResults() {
133
133
  }, [bookingInformation]);
134
134
  const addons = [];
135
135
  const comments = [];
136
- const total = (0, react_1.useMemo)(() => {
136
+ const total = (0, react_1.useCallback)(() => {
137
137
  if (bookingInformation === null || bookingInformation === void 0 ? void 0 : bookingInformation.reservations) {
138
138
  return core_1.TotalCalculator.calculateTotalForReservation(bookingInformation, dismissAddonNightCount);
139
139
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FindReservationResults.js","sourceRoot":"/","sources":["src/pages/findReservation/FindReservationResults.tsx"],"names":[],"mappings":"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","sourcesContent":["import { CompanyContext } from '@frontend/contexts';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport { ReservationAddonDTO, ReservationDTO, ReservationsDTO, SimpleItemisedFee, TotalCalculator } from '@roomstay/core';\nimport dayjs from 'dayjs';\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport API from '@/api/BookingAPI';\nimport Alert, { AlertType } from '@/components/generic/Alert';\nimport BackButton from '@/components/generic/BackButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport LargeLoader from '@/components/generic/loader/LargeLoader';\nimport { PageTitle } from '@/components/generic/PageTitle';\nimport { TaxInclusionNotice } from '@/components/generic/TaxInclusionNotice/TaxInclusionNotice';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { CommonAddonSummary } from '@/components/steps/common/CommonAddonSummary/CommonAddonSummary';\nimport { ItemisedFeesSummary } from '@/components/steps/common/ItemisedFeesSummary/ItemisedFeesSummary';\nimport { FindReservationResultsViewEvent } from '@/events';\nimport { IEventReservation } from '@/models/Api/IEventReservation';\nimport ReservationRow from '@/pages/findReservation/ReservationRow';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nexport default function FindReservationResults() {\n const params: any = useParams();\n const navigate = useNavigate();\n\n const { hotel } = useCurrentHotel();\n const ccx = useContext(CompanyContext);\n\n const { t } = useTranslation();\n\n const [bookingInformation, setBookingInformation] = useState<ReservationsDTO | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n\n const [cancellationMessage, setCancellationMessage] = useState('');\n const [cancellationTrigger, setCancellationTrigger] = useState(0);\n\n const [data, setData] = useState<ReservationsDTO | null>(null);\n const [itemisedFees, setItemisedFees] = useState<SimpleItemisedFee[]>([]);\n\n const pushHistoryOnClick = () => {\n navigate('../');\n };\n\n /**\n * Determines whether addon night count should be dismissed.\n * This is true when the booking is not from Roomstay, indicated by:\n * - the itinerary number not starting with 'RS', and\n * - the hotel not preferring provider booking IDs.\n */\n const dismissAddonNightCount = !bookingInformation?.itineraryNumber?.startsWith('RS') && !hotel?.preferProviderBookingId;\n\n useEffect(() => {\n let isCancelled = false;\n\n setIsLoading(true);\n\n const handleSuccess = (data: ReservationsDTO) => {\n if (!isCancelled) {\n setBookingInformation(data);\n setIsLoading(false);\n setData(data);\n }\n };\n\n if (params?.ref) {\n API.Reservation.findReservation(params.ref, params.email, hotel?.hotelID as string)\n .then((data: ReservationsDTO) => {\n if (data.hotelFrontendId && data.hotelFrontendId !== hotel?.hotelID) {\n // User has searched for a booking that belongs to a different hotel (but within the same company).\n // Let's redirect the user to the correct hotel.\n ccx.getHotel(data.hotelFrontendId)\n .then((hotel) => {\n const findReservationUrl = `${hotel.hotelUrl}/${hotel.checkoutUrl}/#/find-reservation/${params.ref}/${params.email}`;\n window.location.href = findReservationUrl;\n })\n .catch((error) => {\n console.error(`Failed to find hotel: ${error}. Continuing with current hotel.`);\n handleSuccess(data);\n });\n } else {\n handleSuccess(data);\n }\n })\n .catch(() => {\n navigate('/find-reservation');\n });\n } else {\n navigate('/find-reservation');\n }\n\n return () => {\n isCancelled = true;\n };\n }, [cancellationTrigger]);\n\n useEffect(() => {\n setItemisedFees(bookingInformation?.feesSummary || []);\n }, [bookingInformation]);\n\n const addons: ReservationAddonDTO[] = [];\n const comments: string[] = [];\n\n const total = useMemo(() => {\n if (bookingInformation?.reservations) {\n return TotalCalculator.calculateTotalForReservation(bookingInformation, dismissAddonNightCount);\n }\n\n return 0;\n }, [bookingInformation, dismissAddonNightCount]);\n\n const { raise } = useEvent();\n useEffect(() => {\n if (!data) return;\n\n const reservations: IEventReservation[] =\n data.reservations?.map((obj: ReservationDTO) => {\n const nightKeys = Object.keys(obj.nights);\n const dateFormat = 'YYYY-MM-DDTHH:mm:ss';\n\n return {\n reservationId: obj.reservationNumber,\n checkInTime: dayjs(nightKeys[0]).format(dateFormat),\n checkOutTime: dayjs(nightKeys[nightKeys.length - 1])\n .add(1, 'day')\n .format(dateFormat),\n totalPrice: obj.total.afterTax,\n priceCurrency: ccx.currentCurrency,\n };\n }) ?? [];\n\n const event = new FindReservationResultsViewEvent(reservations);\n raise(event);\n }, [data]);\n\n return (\n <div className=\"container u-pad--heavy-plus u-pad-left u-pad-right\">\n <PageTitle step=\"FindReservation\" />\n {isLoading ? (\n <LargeLoader />\n ) : (\n <>\n <div className=\"u-marg-bottom\">\n <BackButton onClick={pushHistoryOnClick} />\n </div>\n <Headline size=\"extra-large\">{t(Translation.FindReservation.YourItinerary)}</Headline>\n <Headline color={Color.DarkGrey}>#{bookingInformation?.itineraryNumber}</Headline>\n <div className=\"row u-marg-top--heavy\">\n <AutoAutoHeight open={!!cancellationMessage}>\n <Alert>{cancellationMessage}</Alert>\n </AutoAutoHeight>\n {bookingInformation?.reservations?.map((obj: ReservationDTO, index: number) => {\n if (obj.addons) {\n const nights = Object.keys(obj.nights);\n obj.addons.forEach((addon) => {\n if (dismissAddonNightCount) {\n addons.push(addon);\n } else {\n addons.push({ ...addon, nights: nights.length });\n }\n });\n }\n\n if (obj.comments && index === 0) {\n obj.comments.map((comment: string) => {\n comments.push(comment);\n });\n }\n\n return (\n <div className=\"col-lg-6\" key={obj.reservationNumber}>\n <ReservationRow reservation={obj} key={obj.reservationNumber} />\n </div>\n );\n })}\n </div>\n {hotel?.itineraryNote && (\n <Alert icon={IconType.Info} type={AlertType.Alert}>\n <Text type={TextType.Small} asDiv>\n <HtmlContentViewer content={hotel.itineraryNote}></HtmlContentViewer>\n </Text>\n </Alert>\n )}\n <LineBreak />\n <CommonAddonSummary addons={addons} />\n {comments.length >= 1 && (\n <>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Label} color={Color.Grey}>\n {t(Translation.Step.Confirmation.Comments)}\n </Text>\n </div>\n {comments.map((comment, index: number) => (\n <Text key={index} type={TextType.Small}>\n {comment}\n </Text>\n ))}\n <LineBreak />\n </>\n )}\n\n <ItemisedFeesSummary fees={itemisedFees} />\n\n <Text type={TextType.Small} align={TextAlign.Right}>\n {t(Translation.Misc.Total)}\n </Text>\n <Headline bold size=\"large\" align={TextAlign.Right}>\n <Currency>{total}</Currency>\n </Headline>\n <Text type={TextType.Small} align={TextAlign.Right} color={Color.DarkGrey}>\n <TaxInclusionNotice />\n </Text>\n </>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"FindReservationResults.js","sourceRoot":"/","sources":["src/pages/findReservation/FindReservationResults.tsx"],"names":[],"mappings":"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","sourcesContent":["import { CompanyContext } from '@frontend/contexts';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport { ReservationAddonDTO, ReservationDTO, ReservationsDTO, SimpleItemisedFee, TotalCalculator } from '@roomstay/core';\nimport dayjs from 'dayjs';\nimport React, { useCallback, useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport API from '@/api/BookingAPI';\nimport Alert, { AlertType } from '@/components/generic/Alert';\nimport BackButton from '@/components/generic/BackButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport LargeLoader from '@/components/generic/loader/LargeLoader';\nimport { PageTitle } from '@/components/generic/PageTitle';\nimport { TaxInclusionNotice } from '@/components/generic/TaxInclusionNotice/TaxInclusionNotice';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { CommonAddonSummary } from '@/components/steps/common/CommonAddonSummary/CommonAddonSummary';\nimport { ItemisedFeesSummary } from '@/components/steps/common/ItemisedFeesSummary/ItemisedFeesSummary';\nimport { FindReservationResultsViewEvent } from '@/events';\nimport { IEventReservation } from '@/models/Api/IEventReservation';\nimport ReservationRow from '@/pages/findReservation/ReservationRow';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nexport default function FindReservationResults() {\n const params: any = useParams();\n const navigate = useNavigate();\n\n const { hotel } = useCurrentHotel();\n const ccx = useContext(CompanyContext);\n\n const { t } = useTranslation();\n\n const [bookingInformation, setBookingInformation] = useState<ReservationsDTO | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n\n const [cancellationMessage, setCancellationMessage] = useState('');\n const [cancellationTrigger, setCancellationTrigger] = useState(0);\n\n const [data, setData] = useState<ReservationsDTO | null>(null);\n const [itemisedFees, setItemisedFees] = useState<SimpleItemisedFee[]>([]);\n\n const pushHistoryOnClick = () => {\n navigate('../');\n };\n\n /**\n * Determines whether addon night count should be dismissed.\n * This is true when the booking is not from Roomstay, indicated by:\n * - the itinerary number not starting with 'RS', and\n * - the hotel not preferring provider booking IDs.\n */\n const dismissAddonNightCount = !bookingInformation?.itineraryNumber?.startsWith('RS') && !hotel?.preferProviderBookingId;\n\n useEffect(() => {\n let isCancelled = false;\n\n setIsLoading(true);\n\n const handleSuccess = (data: ReservationsDTO) => {\n if (!isCancelled) {\n setBookingInformation(data);\n setIsLoading(false);\n setData(data);\n }\n };\n\n if (params?.ref) {\n API.Reservation.findReservation(params.ref, params.email, hotel?.hotelID as string)\n .then((data: ReservationsDTO) => {\n if (data.hotelFrontendId && data.hotelFrontendId !== hotel?.hotelID) {\n // User has searched for a booking that belongs to a different hotel (but within the same company).\n // Let's redirect the user to the correct hotel.\n ccx.getHotel(data.hotelFrontendId)\n .then((hotel) => {\n const findReservationUrl = `${hotel.hotelUrl}/${hotel.checkoutUrl}/#/find-reservation/${params.ref}/${params.email}`;\n window.location.href = findReservationUrl;\n })\n .catch((error) => {\n console.error(`Failed to find hotel: ${error}. Continuing with current hotel.`);\n handleSuccess(data);\n });\n } else {\n handleSuccess(data);\n }\n })\n .catch(() => {\n navigate('/find-reservation');\n });\n } else {\n navigate('/find-reservation');\n }\n\n return () => {\n isCancelled = true;\n };\n }, [cancellationTrigger]);\n\n useEffect(() => {\n setItemisedFees(bookingInformation?.feesSummary || []);\n }, [bookingInformation]);\n\n const addons: ReservationAddonDTO[] = [];\n const comments: string[] = [];\n\n const total = useCallback(() => {\n if (bookingInformation?.reservations) {\n return TotalCalculator.calculateTotalForReservation(bookingInformation, dismissAddonNightCount);\n }\n\n return 0;\n }, [bookingInformation, dismissAddonNightCount]);\n\n const { raise } = useEvent();\n useEffect(() => {\n if (!data) return;\n\n const reservations: IEventReservation[] =\n data.reservations?.map((obj: ReservationDTO) => {\n const nightKeys = Object.keys(obj.nights);\n const dateFormat = 'YYYY-MM-DDTHH:mm:ss';\n\n return {\n reservationId: obj.reservationNumber,\n checkInTime: dayjs(nightKeys[0]).format(dateFormat),\n checkOutTime: dayjs(nightKeys[nightKeys.length - 1])\n .add(1, 'day')\n .format(dateFormat),\n totalPrice: obj.total.afterTax,\n priceCurrency: ccx.currentCurrency,\n };\n }) ?? [];\n\n const event = new FindReservationResultsViewEvent(reservations);\n raise(event);\n }, [data]);\n\n return (\n <div className=\"container u-pad--heavy-plus u-pad-left u-pad-right\">\n <PageTitle step=\"FindReservation\" />\n {isLoading ? (\n <LargeLoader />\n ) : (\n <>\n <div className=\"u-marg-bottom\">\n <BackButton onClick={pushHistoryOnClick} />\n </div>\n <Headline size=\"extra-large\">{t(Translation.FindReservation.YourItinerary)}</Headline>\n <Headline color={Color.DarkGrey}>#{bookingInformation?.itineraryNumber}</Headline>\n <div className=\"row u-marg-top--heavy\">\n <AutoAutoHeight open={!!cancellationMessage}>\n <Alert>{cancellationMessage}</Alert>\n </AutoAutoHeight>\n {bookingInformation?.reservations?.map((obj: ReservationDTO, index: number) => {\n if (obj.addons) {\n const nights = Object.keys(obj.nights);\n obj.addons.forEach((addon) => {\n if (dismissAddonNightCount) {\n addons.push(addon);\n } else {\n addons.push({ ...addon, nights: nights.length });\n }\n });\n }\n\n if (obj.comments && index === 0) {\n obj.comments.map((comment: string) => {\n comments.push(comment);\n });\n }\n\n return (\n <div className=\"col-lg-6\" key={obj.reservationNumber}>\n <ReservationRow reservation={obj} key={obj.reservationNumber} />\n </div>\n );\n })}\n </div>\n {hotel?.itineraryNote && (\n <Alert icon={IconType.Info} type={AlertType.Alert}>\n <Text type={TextType.Small} asDiv>\n <HtmlContentViewer content={hotel.itineraryNote}></HtmlContentViewer>\n </Text>\n </Alert>\n )}\n <LineBreak />\n <CommonAddonSummary addons={addons} />\n {comments.length >= 1 && (\n <>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Label} color={Color.Grey}>\n {t(Translation.Step.Confirmation.Comments)}\n </Text>\n </div>\n {comments.map((comment, index: number) => (\n <Text key={index} type={TextType.Small}>\n {comment}\n </Text>\n ))}\n <LineBreak />\n </>\n )}\n\n <ItemisedFeesSummary fees={itemisedFees} />\n\n <Text type={TextType.Small} align={TextAlign.Right}>\n {t(Translation.Misc.Total)}\n </Text>\n <Headline bold size=\"large\" align={TextAlign.Right}>\n <Currency>{total}</Currency>\n </Headline>\n <Text type={TextType.Small} align={TextAlign.Right} color={Color.DarkGrey}>\n <TaxInclusionNotice />\n </Text>\n </>\n )}\n </div>\n );\n}\n"]}
@@ -59,7 +59,7 @@ const DataLayer_1 = __importDefault(require("../../util/DataLayer"));
59
59
  const StringHelper_1 = __importDefault(require("../../util/StringHelper"));
60
60
  const TextAlignment_1 = require("../../util/TextAlignment");
61
61
  function ReservationRow(props) {
62
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
62
+ var _a, _b, _c, _d, _e, _f, _g, _h;
63
63
  const { t } = (0, react_i18next_1.useTranslation)();
64
64
  const { hotel } = (0, hooks_1.useCurrentHotel)();
65
65
  const { raise } = (0, hooks_1.useEvent)();
@@ -92,8 +92,7 @@ function ReservationRow(props) {
92
92
  const firstNight = (0, dayjs_1.default)(nightKeys[0]);
93
93
  const lastNight = (0, dayjs_1.default)(nightKeys[nightKeys.length - 1]).add(1, 'day');
94
94
  let images = obj.images;
95
- // Prevent Uncaught TypeError when refreshing reservation result
96
- if ((!images || !images.length) && ((_a = hotel === null || hotel === void 0 ? void 0 : hotel.rooms) === null || _a === void 0 ? void 0 : _a[obj.roomCode])) {
95
+ if ((!images || !images.length) && (hotel === null || hotel === void 0 ? void 0 : hotel.rooms[obj.roomCode])) {
97
96
  images = hotel === null || hotel === void 0 ? void 0 : hotel.rooms[obj.roomCode].images;
98
97
  }
99
98
  const cancelRow = () => {
@@ -115,7 +114,7 @@ function ReservationRow(props) {
115
114
  });
116
115
  });
117
116
  };
118
- const roomName = obj.roomType ? obj.roomType : (_c = (_b = hotel === null || hotel === void 0 ? void 0 : hotel.rooms) === null || _b === void 0 ? void 0 : _b[obj.roomCode]) === null || _c === void 0 ? void 0 : _c.name;
117
+ const roomName = obj.roomType ? obj.roomType : (_a = hotel === null || hotel === void 0 ? void 0 : hotel.rooms[obj.roomCode]) === null || _a === void 0 ? void 0 : _a.name;
119
118
  return (react_1.default.createElement(react_1.default.Fragment, null,
120
119
  react_1.default.createElement("div", { className: "reservation-row" },
121
120
  react_1.default.createElement("div", { className: "room-details +is-open " },
@@ -137,8 +136,8 @@ function ReservationRow(props) {
137
136
  react_1.default.createElement(Text_1.default, { color: Color_1.Color.DarkGrey, type: Text_1.TextType.Small },
138
137
  react_1.default.createElement(react_1.default.Fragment, null, hotel === null || hotel === void 0 ? void 0 :
139
138
  hotel.name,
140
- " - ", (_d = hotel === null || hotel === void 0 ? void 0 : hotel.address) === null || _d === void 0 ? void 0 :
141
- _d.line1)))),
139
+ " - ", (_b = hotel === null || hotel === void 0 ? void 0 : hotel.address) === null || _b === void 0 ? void 0 :
140
+ _b.line1)))),
142
141
  react_1.default.createElement("div", { className: "" },
143
142
  react_1.default.createElement("ul", null,
144
143
  react_1.default.createElement("li", { className: "u-flex justify-content-start u-marg-bottom--light" },
@@ -165,10 +164,10 @@ function ReservationRow(props) {
165
164
  react_1.default.createElement(Icon_1.default, { icon: Icon_1.IconType.CreditCard, color: Color_1.Color.Grey }),
166
165
  react_1.default.createElement("div", { className: "u-marg-left--light" },
167
166
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, (obj === null || obj === void 0 ? void 0 : obj.paymentMethod) === core_1.EBookingPaymentMethod.Planpay ? (t(Translation_1.Translation.Step.Confirmation.PaidWithPlanpay)) : (react_1.default.createElement(react_1.default.Fragment, null,
168
- "\u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 ", (_f = (_e = obj.paymentCard) === null || _e === void 0 ? void 0 : _e.last4) !== null && _f !== void 0 ? _f : 'N/A',
167
+ "\u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 ", (_d = (_c = obj.paymentCard) === null || _c === void 0 ? void 0 : _c.last4) !== null && _d !== void 0 ? _d : 'N/A',
169
168
  ' ',
170
169
  react_1.default.createElement("span", { style: { color: Color_1.Color.DarkGrey } },
171
- "(", (_h = (_g = obj.paymentCard) === null || _g === void 0 ? void 0 : _g.type) !== null && _h !== void 0 ? _h : 'N/A',
170
+ "(", (_f = (_e = obj.paymentCard) === null || _e === void 0 ? void 0 : _e.type) !== null && _f !== void 0 ? _f : 'N/A',
172
171
  ")")))))))))),
173
172
  react_1.default.createElement("div", { className: "reservation-row--actions" },
174
173
  react_1.default.createElement("div", { className: "u-flex justify-content-start align-items-center" },
@@ -180,10 +179,10 @@ function ReservationRow(props) {
180
179
  react_1.default.createElement("div", { className: "u-marg-left" },
181
180
  !isCancelled ? (react_1.default.createElement(Text_1.default, { color: Color_1.Color.Navy },
182
181
  react_1.default.createElement("strong", null,
183
- react_1.default.createElement(Currency_1.default, null, (_j = obj.total.beforeFees) !== null && _j !== void 0 ? _j : obj.total.afterTax)))) : (react_1.default.createElement(Text_1.default, { color: Color_1.Color.Navy },
182
+ react_1.default.createElement(Currency_1.default, null, (_g = obj.total.beforeFees) !== null && _g !== void 0 ? _g : obj.total.afterTax)))) : (react_1.default.createElement(Text_1.default, { color: Color_1.Color.Navy },
184
183
  react_1.default.createElement("del", null,
185
184
  react_1.default.createElement("strong", { className: "u-flex u-flex-direction-row align-items-center" },
186
- react_1.default.createElement(Currency_1.default, null, (_k = obj.total.beforeFees) !== null && _k !== void 0 ? _k : obj.total.afterTax))))),
185
+ react_1.default.createElement(Currency_1.default, null, (_h = obj.total.beforeFees) !== null && _h !== void 0 ? _h : obj.total.afterTax))))),
187
186
  react_1.default.createElement(Text_1.default, { color: Color_1.Color.DarkGrey, type: Text_1.TextType.Small, align: TextAlignment_1.TextAlign.Right },
188
187
  react_1.default.createElement(TaxInclusionNotice_1.TaxInclusionNotice, null)))))),
189
188
  react_1.default.createElement(ReservationRowModal_1.default, { open: isModalOpen, onClose: closeModalOnClick, reservation: props.reservation, images: images }),
@@ -1 +1 @@
1
- {"version":3,"file":"ReservationRow.js","sourceRoot":"/","sources":["src/pages/findReservation/ReservationRow.tsx"],"names":[],"mappings":"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","sourcesContent":["import { ErrorHandler } from '@frontend/contexts';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport { EBookingPaymentMethod, ReservationDTO } from '@roomstay/core';\nimport dayjs from 'dayjs';\nimport React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport ConfirmationModal from '@/components/generic/modal/ConfirmationModal';\nimport { TaxInclusionNotice } from '@/components/generic/TaxInclusionNotice/TaxInclusionNotice';\nimport Text, { TextType } from '@/components/generic/Text';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport { CancelledBookingEvent } from '@/events/views/CancelledBookingEvent';\nimport ReservationRowModal from '@/pages/findReservation/ReservationRowModal';\nimport { Color } from '@/util/Color';\nimport DataLayer from '@/util/DataLayer';\nimport StringHelper from '@/util/StringHelper';\nimport { TextAlign } from '@/util/TextAlignment';\n\ninterface ReservationRowProps {\n reservation: ReservationDTO;\n onCancelled?: () => void;\n}\n\nexport default function ReservationRow(props: ReservationRowProps) {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const { raise } = useEvent();\n\n const obj = props.reservation;\n\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [isCancelled, setIsCancelled] = useState(obj.status === 'Cancelled');\n const [isCancelLoading, setIsCancelLoading] = useState(false);\n\n const [confirmOpen, setConfirmOpen] = useState(false);\n\n let adultsAndChildren = StringHelper.pluralWithDictAndCount(obj.guestCounts.adults, Translation.Step.Date.Adult, t);\n\n if (obj.guestCounts.children) {\n adultsAndChildren += ', ' + StringHelper.pluralWithDictAndCount(obj.guestCounts.children, Translation.Step.Date.Child, t);\n }\n\n const nightKeys = Object.keys(obj.nights);\n\n const openModalOnClick = () => {\n setIsModalOpen(true);\n };\n const closeModalOnClick = () => {\n setIsModalOpen(false);\n };\n const confirmModalOnClick = () => {\n setConfirmOpen(true);\n };\n const onConfirmHandler = () => {\n cancelRow();\n setConfirmOpen(false);\n };\n const openConfirmationHandler = () => {\n setConfirmOpen(false);\n };\n\n const firstNight = dayjs(nightKeys[0]);\n const lastNight = dayjs(nightKeys[nightKeys.length - 1]).add(1, 'day');\n\n let images: string[] = obj.images;\n\n // Prevent Uncaught TypeError when refreshing reservation result\n if ((!images || !images.length) && hotel?.rooms?.[obj.roomCode]) {\n images = hotel?.rooms[obj.roomCode].images;\n }\n\n const cancelRow = () => {\n setIsCancelLoading(true);\n\n API.Reservation.cancelReservation(obj.reservationNumber, obj.guest.email, hotel?.hotelID as string)\n .then(() => {\n DataLayer.instance.sendCancellation(obj);\n raise(new CancelledBookingEvent(obj.reservationNumber, obj.guest.email));\n\n setIsCancelled(true);\n setIsCancelLoading(false);\n\n if (props.onCancelled) {\n props.onCancelled();\n }\n })\n .catch((ex) => {\n ErrorHandler.add({\n title: t(Translation.Step.Thanks.Errors.CancelFailed),\n message: ex.Message,\n });\n });\n };\n\n const roomName = obj.roomType ? obj.roomType : hotel?.rooms?.[obj.roomCode]?.name;\n\n return (\n <>\n <div className=\"reservation-row\">\n <div className=\"room-details +is-open \">\n <div className=\"room-details--image\">\n <ImageGallerySlider images={images} />\n </div>\n <div className=\"room-details--content u-pad--heavy u-pad@m-\">\n <div className=\"u-marg-bottom\">\n <div className=\"room-details--content-title u-marg-bottom--light\">\n {!isCancelled ? (\n <Text>\n <strong>{roomName}</strong>\n <small style={{ color: Color.Grey }}> #{obj.reservationNumber}</small>\n </Text>\n ) : (\n <Text>\n <del>\n <strong>{roomName}</strong>\n </del>\n <small style={{ color: Color.Alert }}> {t(Translation.Misc.Cancelled)}</small>\n </Text>\n )}\n </div>\n <div className=\"room-details--content-description u-marg-bottom--light\">\n <Text color={Color.DarkGrey} type={TextType.Small}>\n <>\n {hotel?.name} - {hotel?.address?.line1}\n </>\n </Text>\n </div>\n </div>\n\n <div className=\"\">\n <ul>\n <li className=\"u-flex justify-content-start u-marg-bottom--light\">\n <Icon color={Color.Grey} icon={IconType.Person} />\n <div className=\"u-marg-left--light\">\n <Text type={TextType.Small}>\n {obj.guest.firstName} {obj.guest.lastName} <span style={{ color: Color.DarkGrey }}>- {adultsAndChildren}</span>\n </Text>\n </div>\n </li>\n <li className=\"u-flex justify-content-start u-marg-bottom--light\">\n <Icon icon={IconType.Email} color={Color.Grey} />\n <div className=\"u-marg-left--light\">\n <Text type={TextType.Small}>{obj.guest.email}</Text>\n </div>\n </li>\n <li className=\"u-flex justify-content-start u-marg-bottom--light\">\n <Icon icon={IconType.Calendar} color={Color.Grey} />\n <div className=\"u-marg-left--light\">\n <Text type={TextType.Small}>{firstNight.format('dddd, MMM D, YYYY')}</Text>\n <Text type={TextType.Small}>{lastNight.format('dddd, MMM D, YYYY')}</Text>\n </div>\n </li>\n <li className=\"u-flex justify-content-start\">\n <Icon icon={IconType.CreditCard} color={Color.Grey} />\n <div className=\"u-marg-left--light\">\n <Text type={TextType.Small}>\n {obj?.paymentMethod === EBookingPaymentMethod.Planpay ? (\n t(Translation.Step.Confirmation.PaidWithPlanpay)\n ) : (\n <>\n •••• •••• •••• {obj.paymentCard?.last4 ?? 'N/A'}{' '}\n <span style={{ color: Color.DarkGrey }}>({obj.paymentCard?.type ?? 'N/A'})</span>\n </>\n )}\n </Text>\n </div>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div className=\"reservation-row--actions\">\n <div className=\"u-flex justify-content-start align-items-center\">\n <div className=\"u-marg-right--heavy u-inline-flex\">\n <BEButton icon={IconType.ArrowRight2} isText primary size=\"tiny\" iconPosition=\"right\" onClick={openModalOnClick}>\n {t(Translation.Step.Room.RoomInfo.MoreDetails)}\n </BEButton>\n </div>\n <div className=\"u-inline-flex\">\n {hotel?.preventCancellation !== true && (\n <BEButton\n isText\n size=\"tiny\"\n isLoading={isCancelLoading}\n disabled={!obj.isCancelable || isCancelled}\n textColor={Color.DarkGrey}\n onClick={confirmModalOnClick}\n >\n {t(Translation.Misc.Cancel)}\n </BEButton>\n )}\n </div>\n </div>\n <div className=\"u-flex u-flex-direction-row align-items-center\">\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {t(Translation.Misc.Total)}\n </Text>\n <div className=\"u-marg-left\">\n {!isCancelled ? (\n <Text color={Color.Navy}>\n <strong>\n <Currency>{obj.total.beforeFees ?? obj.total.afterTax}</Currency>\n </strong>\n </Text>\n ) : (\n <Text color={Color.Navy}>\n <del>\n <strong className=\"u-flex u-flex-direction-row align-items-center\">\n <Currency>{obj.total.beforeFees ?? obj.total.afterTax}</Currency>\n </strong>\n </del>\n </Text>\n )}\n <Text color={Color.DarkGrey} type={TextType.Small} align={TextAlign.Right}>\n <TaxInclusionNotice />\n </Text>\n </div>\n </div>\n </div>\n </div>\n <ReservationRowModal open={isModalOpen} onClose={closeModalOnClick} reservation={props.reservation} images={images} />\n <ConfirmationModal open={confirmOpen} message=\"Are you sure you want to cancel this reservation?\" onConfirm={onConfirmHandler} onClose={openConfirmationHandler} />\n </>\n );\n}\n"]}
1
+ {"version":3,"file":"ReservationRow.js","sourceRoot":"/","sources":["src/pages/findReservation/ReservationRow.tsx"],"names":[],"mappings":"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","sourcesContent":["import { ErrorHandler } from '@frontend/contexts';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport { EBookingPaymentMethod, ReservationDTO } from '@roomstay/core';\nimport dayjs from 'dayjs';\nimport React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport ConfirmationModal from '@/components/generic/modal/ConfirmationModal';\nimport { TaxInclusionNotice } from '@/components/generic/TaxInclusionNotice/TaxInclusionNotice';\nimport Text, { TextType } from '@/components/generic/Text';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport { CancelledBookingEvent } from '@/events/views/CancelledBookingEvent';\nimport ReservationRowModal from '@/pages/findReservation/ReservationRowModal';\nimport { Color } from '@/util/Color';\nimport DataLayer from '@/util/DataLayer';\nimport StringHelper from '@/util/StringHelper';\nimport { TextAlign } from '@/util/TextAlignment';\n\ninterface ReservationRowProps {\n reservation: ReservationDTO;\n onCancelled?: () => void;\n}\n\nexport default function ReservationRow(props: ReservationRowProps) {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const { raise } = useEvent();\n\n const obj = props.reservation;\n\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [isCancelled, setIsCancelled] = useState(obj.status === 'Cancelled');\n const [isCancelLoading, setIsCancelLoading] = useState(false);\n\n const [confirmOpen, setConfirmOpen] = useState(false);\n\n let adultsAndChildren = StringHelper.pluralWithDictAndCount(obj.guestCounts.adults, Translation.Step.Date.Adult, t);\n\n if (obj.guestCounts.children) {\n adultsAndChildren += ', ' + StringHelper.pluralWithDictAndCount(obj.guestCounts.children, Translation.Step.Date.Child, t);\n }\n\n const nightKeys = Object.keys(obj.nights);\n\n const openModalOnClick = () => {\n setIsModalOpen(true);\n };\n const closeModalOnClick = () => {\n setIsModalOpen(false);\n };\n const confirmModalOnClick = () => {\n setConfirmOpen(true);\n };\n const onConfirmHandler = () => {\n cancelRow();\n setConfirmOpen(false);\n };\n const openConfirmationHandler = () => {\n setConfirmOpen(false);\n };\n\n const firstNight = dayjs(nightKeys[0]);\n const lastNight = dayjs(nightKeys[nightKeys.length - 1]).add(1, 'day');\n\n let images: string[] = obj.images;\n\n if ((!images || !images.length) && hotel?.rooms[obj.roomCode]) {\n images = hotel?.rooms[obj.roomCode].images;\n }\n\n const cancelRow = () => {\n setIsCancelLoading(true);\n\n API.Reservation.cancelReservation(obj.reservationNumber, obj.guest.email, hotel?.hotelID as string)\n .then(() => {\n DataLayer.instance.sendCancellation(obj);\n raise(new CancelledBookingEvent(obj.reservationNumber, obj.guest.email));\n\n setIsCancelled(true);\n setIsCancelLoading(false);\n\n if (props.onCancelled) {\n props.onCancelled();\n }\n })\n .catch((ex) => {\n ErrorHandler.add({\n title: t(Translation.Step.Thanks.Errors.CancelFailed),\n message: ex.Message,\n });\n });\n };\n\n const roomName = obj.roomType ? obj.roomType : hotel?.rooms[obj.roomCode]?.name;\n\n return (\n <>\n <div className=\"reservation-row\">\n <div className=\"room-details +is-open \">\n <div className=\"room-details--image\">\n <ImageGallerySlider images={images} />\n </div>\n <div className=\"room-details--content u-pad--heavy u-pad@m-\">\n <div className=\"u-marg-bottom\">\n <div className=\"room-details--content-title u-marg-bottom--light\">\n {!isCancelled ? (\n <Text>\n <strong>{roomName}</strong>\n <small style={{ color: Color.Grey }}> #{obj.reservationNumber}</small>\n </Text>\n ) : (\n <Text>\n <del>\n <strong>{roomName}</strong>\n </del>\n <small style={{ color: Color.Alert }}> {t(Translation.Misc.Cancelled)}</small>\n </Text>\n )}\n </div>\n <div className=\"room-details--content-description u-marg-bottom--light\">\n <Text color={Color.DarkGrey} type={TextType.Small}>\n <>\n {hotel?.name} - {hotel?.address?.line1}\n </>\n </Text>\n </div>\n </div>\n\n <div className=\"\">\n <ul>\n <li className=\"u-flex justify-content-start u-marg-bottom--light\">\n <Icon color={Color.Grey} icon={IconType.Person} />\n <div className=\"u-marg-left--light\">\n <Text type={TextType.Small}>\n {obj.guest.firstName} {obj.guest.lastName} <span style={{ color: Color.DarkGrey }}>- {adultsAndChildren}</span>\n </Text>\n </div>\n </li>\n <li className=\"u-flex justify-content-start u-marg-bottom--light\">\n <Icon icon={IconType.Email} color={Color.Grey} />\n <div className=\"u-marg-left--light\">\n <Text type={TextType.Small}>{obj.guest.email}</Text>\n </div>\n </li>\n <li className=\"u-flex justify-content-start u-marg-bottom--light\">\n <Icon icon={IconType.Calendar} color={Color.Grey} />\n <div className=\"u-marg-left--light\">\n <Text type={TextType.Small}>{firstNight.format('dddd, MMM D, YYYY')}</Text>\n <Text type={TextType.Small}>{lastNight.format('dddd, MMM D, YYYY')}</Text>\n </div>\n </li>\n <li className=\"u-flex justify-content-start\">\n <Icon icon={IconType.CreditCard} color={Color.Grey} />\n <div className=\"u-marg-left--light\">\n <Text type={TextType.Small}>\n {obj?.paymentMethod === EBookingPaymentMethod.Planpay ? (\n t(Translation.Step.Confirmation.PaidWithPlanpay)\n ) : (\n <>\n •••• •••• •••• {obj.paymentCard?.last4 ?? 'N/A'}{' '}\n <span style={{ color: Color.DarkGrey }}>({obj.paymentCard?.type ?? 'N/A'})</span>\n </>\n )}\n </Text>\n </div>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div className=\"reservation-row--actions\">\n <div className=\"u-flex justify-content-start align-items-center\">\n <div className=\"u-marg-right--heavy u-inline-flex\">\n <BEButton icon={IconType.ArrowRight2} isText primary size=\"tiny\" iconPosition=\"right\" onClick={openModalOnClick}>\n {t(Translation.Step.Room.RoomInfo.MoreDetails)}\n </BEButton>\n </div>\n <div className=\"u-inline-flex\">\n {hotel?.preventCancellation !== true && (\n <BEButton\n isText\n size=\"tiny\"\n isLoading={isCancelLoading}\n disabled={!obj.isCancelable || isCancelled}\n textColor={Color.DarkGrey}\n onClick={confirmModalOnClick}\n >\n {t(Translation.Misc.Cancel)}\n </BEButton>\n )}\n </div>\n </div>\n <div className=\"u-flex u-flex-direction-row align-items-center\">\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {t(Translation.Misc.Total)}\n </Text>\n <div className=\"u-marg-left\">\n {!isCancelled ? (\n <Text color={Color.Navy}>\n <strong>\n <Currency>{obj.total.beforeFees ?? obj.total.afterTax}</Currency>\n </strong>\n </Text>\n ) : (\n <Text color={Color.Navy}>\n <del>\n <strong className=\"u-flex u-flex-direction-row align-items-center\">\n <Currency>{obj.total.beforeFees ?? obj.total.afterTax}</Currency>\n </strong>\n </del>\n </Text>\n )}\n <Text color={Color.DarkGrey} type={TextType.Small} align={TextAlign.Right}>\n <TaxInclusionNotice />\n </Text>\n </div>\n </div>\n </div>\n </div>\n <ReservationRowModal open={isModalOpen} onClose={closeModalOnClick} reservation={props.reservation} images={images} />\n <ConfirmationModal open={confirmOpen} message=\"Are you sure you want to cancel this reservation?\" onConfirm={onConfirmHandler} onClose={openConfirmationHandler} />\n </>\n );\n}\n"]}
@@ -47,7 +47,6 @@ const react_i18next_1 = require("react-i18next");
47
47
  const Translation_1 = require("translations/Translation");
48
48
  const BEButton_1 = __importDefault(require("../../components/generic/BEButton"));
49
49
  const Headline_1 = __importDefault(require("../../components/generic/Headline"));
50
- const HtmlContentViewer_1 = require("../../components/generic/HtmlContentViewer");
51
50
  const Icon_1 = __importStar(require("../../components/generic/Icon/Icon"));
52
51
  const HotelLocationMap_1 = __importDefault(require("../../components/generic/map/HotelLocationMap"));
53
52
  const PageTitle_1 = require("../../components/generic/PageTitle");
@@ -60,7 +59,7 @@ const Color_1 = require("../../util/Color");
60
59
  const ScreenSize_1 = __importDefault(require("../../util/ScreenSize"));
61
60
  const StepManager_1 = __importDefault(require("../../util/StepManager"));
62
61
  function HotelInfo() {
63
- var _a, _b, _c, _d, _e;
62
+ var _a, _b, _c, _d, _e, _f, _g;
64
63
  const { hotel } = (0, hooks_1.useCurrentHotel)();
65
64
  const historyConsistentPush = (0, HistoryConsistentPush_1.useHistoryConsistentPush)();
66
65
  const { t } = (0, react_i18next_1.useTranslation)();
@@ -155,15 +154,15 @@ function HotelInfo() {
155
154
  react_1.default.createElement("div", { className: "u-marg-bottom u-marg-bottom--heavy" },
156
155
  react_1.default.createElement(Headline_1.default, { className: "rs-hotelinfo-about", bold: true }, t(Translation_1.Translation.Step.Hotel.About))),
157
156
  react_1.default.createElement("div", { className: "u-marg-bottom u-marg-bottom--heavy" },
158
- react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, asDiv: true },
159
- react_1.default.createElement(HtmlContentViewer_1.HtmlContentViewer, { content: (hotel === null || hotel === void 0 ? void 0 : hotel.description) || '' })),
157
+ react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
158
+ react_1.default.createElement("span", { dangerouslySetInnerHTML: { __html: ((_e = hotel === null || hotel === void 0 ? void 0 : hotel.description) === null || _e === void 0 ? void 0 : _e.replace('\r\n', '<br/><br/>')) || '' } })),
160
159
  !!(hotel === null || hotel === void 0 ? void 0 : hotel.locationDescription) && (react_1.default.createElement(react_1.default.Fragment, null,
161
160
  react_1.default.createElement("div", { className: "u-marg-top" },
162
161
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
163
162
  react_1.default.createElement("strong", null, t(Translation_1.Translation.Step.Hotel.Location)))),
164
- react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, asDiv: true },
165
- react_1.default.createElement(HtmlContentViewer_1.HtmlContentViewer, { content: hotel.locationDescription }))))),
166
- !!((_e = hotel === null || hotel === void 0 ? void 0 : hotel.perks) === null || _e === void 0 ? void 0 : _e.length) && (react_1.default.createElement(react_1.default.Fragment, null,
163
+ react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
164
+ react_1.default.createElement("span", { dangerouslySetInnerHTML: { __html: (_f = hotel === null || hotel === void 0 ? void 0 : hotel.locationDescription) === null || _f === void 0 ? void 0 : _f.replace('\r\n', '<br/><br/>') } }))))),
165
+ !!((_g = hotel === null || hotel === void 0 ? void 0 : hotel.perks) === null || _g === void 0 ? void 0 : _g.length) && (react_1.default.createElement(react_1.default.Fragment, null,
167
166
  react_1.default.createElement("div", { className: "u-marg-bottom u-marg-bottom--heavy" },
168
167
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
169
168
  react_1.default.createElement("strong", { className: "rs-hotelinfo-andyougetall" }, hotel.perkTitle || t(Translation_1.Translation.Step.Hotel.AndYouGetAll)))),