@roomstay/frontend 2.6.103 → 2.6.104-0
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.
- package/dist/211.bundle.js +1 -1
- package/dist/288.bundle.js +1 -1
- package/dist/main.bundle.js +1 -1
- package/dist/src/components/steps/confirmation/RoomContactDetails.js +1 -1
- package/dist/src/components/steps/confirmation/RoomContactDetails.js.map +1 -1
- package/dist/src/components/steps/confirmation/StepConfirmationCountrySelector.d.ts +2 -1
- package/dist/src/components/steps/confirmation/StepConfirmationCountrySelector.js +1 -0
- package/dist/src/components/steps/confirmation/StepConfirmationCountrySelector.js.map +1 -1
- package/dist/src/components/steps/date/PeoplePicker.js +3 -1
- package/dist/src/components/steps/date/PeoplePicker.js.map +1 -1
- package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js +2 -0
- package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js.map +1 -1
- package/dist/src/components/summary/BESummaryRoomRow.js.map +1 -1
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js +1 -1
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +1 -1
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
- package/dist/src/hooks/AutoFocusOnSelect.d.ts +1 -2
- package/dist/src/hooks/AutoFocusOnSelect.js.map +1 -1
- package/dist/src/pages/hotel/HotelInfo.js +7 -6
- package/dist/src/pages/hotel/HotelInfo.js.map +1 -1
- package/dist/test.bundle.js +1 -1
- package/package.json +1 -1
|
@@ -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 { 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 { 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 { paypalPaymentHandler } from '@/handlers/payment/PayPalPaymentHandler';\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 ];\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\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 }\n );\n\n await basketContext.booked(data, {\n userProfiles,\n payment,\n comments: bookingComment || '',\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 try {\n DataLayer.instance.sendReservationConfirmed(basketContext.getAllValidRows(), basketContext.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, 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 '',\n hotel?.hotelID as string,\n engineContext.sessionProvider.getCurrentSessionID().toString(),\n basketContext.pencilId,\n undefined,\n true,\n roomstayId,\n isExternalMemberHotel ? memberNumber : undefined\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 { 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 ];\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\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 }\n );\n\n await basketContext.booked(data, {\n userProfiles,\n payment,\n comments: bookingComment || '',\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 try {\n DataLayer.instance.sendReservationConfirmed(basketContext.getAllValidRows(), basketContext.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, 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 '',\n hotel?.hotelID as string,\n engineContext.sessionProvider.getCurrentSessionID().toString(),\n basketContext.pencilId,\n undefined,\n true,\n roomstayId,\n isExternalMemberHotel ? memberNumber : undefined\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,4 +1,4 @@
|
|
|
1
|
-
interface UseAutoFocusOnSelectProps {
|
|
1
|
+
export interface UseAutoFocusOnSelectProps {
|
|
2
2
|
/**
|
|
3
3
|
* Reference to the input element that should be managed by the hook.
|
|
4
4
|
* Required for attaching focus, blur, and click event listeners.
|
|
@@ -33,4 +33,3 @@ export declare const useAutoFocusOnSelect: ({ ref, onlyAutoOpenWhenInputEmpty, f
|
|
|
33
33
|
onItemSelected: () => void;
|
|
34
34
|
setIsDropdownOpen: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
35
35
|
};
|
|
36
|
-
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutoFocusOnSelect.js","sourceRoot":"/","sources":["src/hooks/AutoFocusOnSelect.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { debounce } from '../util/Debounce';\n\
|
|
1
|
+
{"version":3,"file":"AutoFocusOnSelect.js","sourceRoot":"/","sources":["src/hooks/AutoFocusOnSelect.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { debounce } from '../util/Debounce';\n\nexport interface UseAutoFocusOnSelectProps {\n /**\n * Reference to the input element that should be managed by the hook.\n * Required for attaching focus, blur, and click event listeners.\n */\n ref: HTMLInputElement | null;\n /**\n * If `true`, the dropdown will only auto-open when the input field is empty.\n *\n * @default false\n */\n onlyAutoOpenWhenInputEmpty?: boolean;\n /**\n * If `true`, the input will regain focus after an item is selected.\n * If `false`, the input will blur after selection.\n *\n * @default true\n */\n focusOnSelected?: boolean;\n /**\n * If `true`, disables automatically opening the dropdown\n * when the input element receives focus.\n *\n * @default false\n */\n disableOpenOnFocus?: boolean;\n}\n\nconst duration = 300;\n\nexport const useAutoFocusOnSelect = ({ ref, onlyAutoOpenWhenInputEmpty = false, focusOnSelected = true, disableOpenOnFocus = false }: UseAutoFocusOnSelectProps) => {\n const [isFocused, setIsFocused] = useState<boolean>(false);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const lockOpen = useRef<boolean>(false);\n const timeout = useRef<NodeJS.Timeout>();\n\n useEffect(() => clearTimeout(timeout.current), []);\n\n const debounceSetFocus = useCallback(\n debounce((value) => {\n setIsFocused(value);\n }, duration),\n []\n );\n\n const onTriggerClicked = () => {\n setIsDropdownOpen(true);\n debounceSetFocus(true);\n };\n\n const onDropdownClosed = (e: Event) => {\n const composedPath = e.composedPath() as HTMLElement[];\n if (composedPath.some((el) => el.isSameNode?.(ref))) {\n return;\n }\n if (!lockOpen.current) {\n setIsDropdownOpen(false);\n }\n debounceSetFocus(false);\n };\n\n const onItemSelected = () => {\n if (!lockOpen.current) setIsDropdownOpen(false);\n if (focusOnSelected) ref?.focus();\n else ref?.blur();\n };\n\n const _onFocus = useCallback(() => {\n if (!isFocused) {\n if (!onlyAutoOpenWhenInputEmpty || !ref?.value) {\n setIsDropdownOpen(!disableOpenOnFocus);\n lockOpen.current = true;\n timeout.current = setTimeout(() => {\n lockOpen.current = false;\n }, duration);\n }\n }\n debounceSetFocus(true);\n }, [setIsFocused, isFocused, isDropdownOpen, setIsDropdownOpen, disableOpenOnFocus]);\n\n const _onBlur = useCallback(() => {\n debounceSetFocus(false);\n }, [setIsFocused]);\n\n useEffect(() => {\n if (!ref) return;\n ref.addEventListener('focus', _onFocus);\n ref.addEventListener('blur', _onBlur);\n ref.addEventListener('click', _onFocus);\n return () => {\n if (!ref) return;\n ref.removeEventListener('focus', _onFocus);\n ref.removeEventListener('blur', _onBlur);\n ref.removeEventListener('click', _onFocus);\n };\n }, [ref, _onFocus, _onBlur]);\n return {\n isFocused,\n isDropdownOpen,\n onDropdownClosed,\n onTriggerClicked,\n onItemSelected,\n setIsDropdownOpen,\n };\n};\n"]}
|
|
@@ -47,6 +47,7 @@ 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");
|
|
50
51
|
const Icon_1 = __importStar(require("../../components/generic/Icon/Icon"));
|
|
51
52
|
const HotelLocationMap_1 = __importDefault(require("../../components/generic/map/HotelLocationMap"));
|
|
52
53
|
const PageTitle_1 = require("../../components/generic/PageTitle");
|
|
@@ -59,7 +60,7 @@ const Color_1 = require("../../util/Color");
|
|
|
59
60
|
const ScreenSize_1 = __importDefault(require("../../util/ScreenSize"));
|
|
60
61
|
const StepManager_1 = __importDefault(require("../../util/StepManager"));
|
|
61
62
|
function HotelInfo() {
|
|
62
|
-
var _a, _b, _c, _d, _e
|
|
63
|
+
var _a, _b, _c, _d, _e;
|
|
63
64
|
const { hotel } = (0, hooks_1.useCurrentHotel)();
|
|
64
65
|
const historyConsistentPush = (0, HistoryConsistentPush_1.useHistoryConsistentPush)();
|
|
65
66
|
const { t } = (0, react_i18next_1.useTranslation)();
|
|
@@ -154,15 +155,15 @@ function HotelInfo() {
|
|
|
154
155
|
react_1.default.createElement("div", { className: "u-marg-bottom u-marg-bottom--heavy" },
|
|
155
156
|
react_1.default.createElement(Headline_1.default, { className: "rs-hotelinfo-about", bold: true }, t(Translation_1.Translation.Step.Hotel.About))),
|
|
156
157
|
react_1.default.createElement("div", { className: "u-marg-bottom u-marg-bottom--heavy" },
|
|
157
|
-
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
|
|
158
|
-
react_1.default.createElement(
|
|
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) || '' })),
|
|
159
160
|
!!(hotel === null || hotel === void 0 ? void 0 : hotel.locationDescription) && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
160
161
|
react_1.default.createElement("div", { className: "u-marg-top" },
|
|
161
162
|
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
|
|
162
163
|
react_1.default.createElement("strong", null, t(Translation_1.Translation.Step.Hotel.Location)))),
|
|
163
|
-
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
|
|
164
|
-
react_1.default.createElement(
|
|
165
|
-
!!((
|
|
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,
|
|
166
167
|
react_1.default.createElement("div", { className: "u-marg-bottom u-marg-bottom--heavy" },
|
|
167
168
|
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
|
|
168
169
|
react_1.default.createElement("strong", { className: "rs-hotelinfo-andyougetall" }, hotel.perkTitle || t(Translation_1.Translation.Step.Hotel.AndYouGetAll)))),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HotelInfo.js","sourceRoot":"/","sources":["src/pages/hotel/HotelInfo.tsx"],"names":[],"mappings":"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","sourcesContent":["import { StepHotelInfoViewEvent } from '@frontend/events';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport FsLightbox from 'fslightbox-react';\nimport { useHistoryConsistentPush } from 'hooks/HistoryConsistentPush';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport HotelLocationMap from '@/components/generic/map/HotelLocationMap';\nimport { PageTitle } from '@/components/generic/PageTitle';\nimport Text, { TextType } from '@/components/generic/Text';\nimport HotelInfoPerkRow from '@/components/steps/hotel/HotelInfoPerksRow';\nimport TransportDistanceFromHotelBlock from '@/components/summary/TransportDistanceFromHotelBlock';\nimport { BookingEngineContext } from '@/index';\nimport ImageProvider, { ImageSize } from '@/providers/ImageProvider';\nimport { Color } from '@/util/Color';\nimport ScreenSize from '@/util/ScreenSize';\nimport StepManager from '@/util/StepManager';\n\nexport default function HotelInfo() {\n const { hotel } = useCurrentHotel();\n const historyConsistentPush = useHistoryConsistentPush();\n const { t } = useTranslation();\n const context = useContext(BookingEngineContext);\n const isMobile = context.screenSize <= ScreenSize.Large;\n\n const imageUrl = hotel?.heroImage;\n\n const { line1, line2, postalCode, country } = hotel?.address ?? {};\n\n const [lightboxController, setLightboxController] = useState({ toggler: false, slide: 1 });\n const [images, setImages] = useState<string[]>([]);\n\n const openSlider = (slide: number) => {\n setLightboxController((controller) => ({ toggler: !controller.toggler, slide: slide + 1 }));\n };\n const openSliderOnClick = () => {\n openSlider(4);\n };\n\n const { raise } = useEvent();\n\n useEffect(() => {\n const event = new StepHotelInfoViewEvent();\n raise(event);\n }, []);\n\n useEffect(() => {\n const newImages: string[] = [];\n\n if (hotel?.images?.length) {\n newImages.push(...hotel.images);\n }\n\n if (hotel?.rooms) {\n for (const room of Object.values(hotel?.rooms)) {\n room.images?.forEach((image) => {\n newImages.push(image);\n });\n }\n }\n\n setImages(newImages);\n }, [hotel?.images, hotel?.rooms]);\n\n const onBookNowClick = () => {\n historyConsistentPush(StepManager.getFirstStep().getStepUrl());\n };\n\n const getImage = (index: number) => {\n const openSliderOnClickHandler = () => {\n openSlider(index);\n };\n\n const resizedUrl = ImageProvider.resizeImage(images[index], ImageSize.Small);\n\n return (\n <div\n style={{ backgroundImage: `url('${resizedUrl}')`, paddingTop: '75%' }}\n className=\"c-images u-block u-w-100 u-marg-bottom u-marg-bottom--heavy\"\n onClick={openSliderOnClickHandler}\n />\n );\n };\n\n const hotelServices = hotel?.hotelServices?.filter(({ name }) => !!name) || [];\n const quoteImage = isMobile ? hotel?.quoteImageMobile : hotel?.quoteImageDesktop;\n\n return (\n <>\n <PageTitle step=\"HotelInfo\" />\n <div\n style={{ backgroundImage: `url('${imageUrl && ImageProvider.resizeImage(imageUrl, ImageSize.Original)}')` }}\n className={classNames('c-masthead has-tint', 'rs-background-hotel-info', `rs-background-${hotel?.hotelID}`)}\n >\n <div className=\"container\">\n <div className=\"c-masthead__body u-fill-white u-pad--heavy u-shadow-accent\">\n <h1 className=\"c-masthead__header\">{hotel?.name}</h1>\n <h2 className=\"c-masthead__sub-header\">\n {hotel?.countryPrefix ?? ''} {hotel?.address?.country}\n </h2>\n </div>\n </div>\n </div>\n <div className=\"u-fill-snow u-pad--heavy-med u-pad-top-bottom--heavy@m-\">\n <div className=\"container\">\n <div className=\"row\">\n <div className=\"col-md-6 u-flex align-items-center\">\n <ul>\n <li className=\"u-flex u-marg-bottom--heavy\">\n <Icon icon={IconType.Map} size=\"1.3em\" color={Color.Accent} />\n <span className=\"u-flex__item u-marg-left\">\n {line1}\n <br />\n {line2} {postalCode}, {country}\n </span>\n </li>\n <li className=\"u-flex u-marg-bottom--heavy\">\n <Icon icon={IconType.Phone} size=\"1.3em\" color={Color.Accent} />\n <span className=\"u-flex__item u-marg-left\">{hotel?.phone}</span>\n </li>\n <li className=\"u-flex u-marg-bottom--heavy\">\n <Icon icon={IconType.Hotel2} size=\"1.3em\" color={Color.Accent} />\n <span className=\"u-flex__item u-marg-left\">\n <a href={hotel?.hotelUrl} style={{ color: 'var(--rs-color-accent-1)' }}>\n {hotel?.name}\n </a>\n </span>\n </li>\n <li className=\"u-flex\">\n <BEButton icon={IconType.ArrowRight} primary filled iconPosition=\"right\" onClick={onBookNowClick}>\n {t(Translation.Misc.BookNow)}\n </BEButton>\n </li>\n </ul>\n </div>\n <div className=\"col-md-6\">\n <div className=\"c-overlap\">\n <div className=\"u-marg-bottom u-marg-bottom--heavy u-marg-top u-marg-top--heavy\" style={{ height: '240px' }}>\n <HotelLocationMap />\n </div>\n <div className=\"u-flex u-flex-column justify-content-center rs-hotelinfo-transport-distance u-w-100\">\n <TransportDistanceFromHotelBlock hotel={hotel} />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div className=\"u-pad u-pad--heavy-plus u-pad-top-bottom--heavy@m-\">\n <div className=\"container rs-hotelinfo\">\n <div className=\"row\">\n <div className=\"col-lg-6\">\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <Headline className=\"rs-hotelinfo-about\" bold>\n {t(Translation.Step.Hotel.About)}\n </Headline>\n </div>\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <Text type={TextType.Small}>\n <span dangerouslySetInnerHTML={{ __html: hotel?.description?.replace('\\r\\n', '<br/><br/>') || '' }} />\n </Text>\n {!!hotel?.locationDescription && (\n <>\n <div className=\"u-marg-top\">\n <Text type={TextType.Small}>\n <strong>{t(Translation.Step.Hotel.Location)}</strong>\n </Text>\n </div>\n <Text type={TextType.Small}>\n <span dangerouslySetInnerHTML={{ __html: hotel?.locationDescription?.replace('\\r\\n', '<br/><br/>') }} />\n </Text>\n </>\n )}\n </div>\n {!!hotel?.perks?.length && (\n <>\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <Text type={TextType.Small}>\n <strong className=\"rs-hotelinfo-andyougetall\">{hotel.perkTitle || t(Translation.Step.Hotel.AndYouGetAll)}</strong>\n </Text>\n </div>\n <div className=\"row\">\n <HotelInfoPerkRow hotel={hotel} />\n </div>\n {hotel?.perksShowDisclaimer && (\n <div className=\"row u-marg-top--lighter\">\n <small className=\"col-12\">{t(Translation.Misc.PerksDisclaimer)}</small>\n </div>\n )}\n </>\n )}\n </div>\n {!!hotelServices.length && (\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom--heavy\">\n <Headline className=\"rs-hotelinfo-hotelamenities\" bold>\n {t(Translation.Step.Hotel.HotelAmenities)}\n </Headline>\n </div>\n <div className=\"row\">\n {hotelServices.map((hotelService, index) => {\n return (\n <div key={index} className=\"col-md-6\">\n <div className=\"u-flex u-marg-bottom\">\n <Icon icon={IconType.Check} color={Color.White} backgroundColor={Color.Accent} borderRadius=\"round\" noPadding size=\"16px\" />\n <span className=\"u-flex__item u-marg-left--light\">\n <Text type={TextType.Small}>{hotelService.name}</Text>\n </span>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n )}\n {!!hotel?.policies && (\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom--heavy\">\n <Headline className=\"rs-hotelinfo-policies\" bold>\n {t(Translation.Step.Hotel.Policies)}\n </Headline>\n </div>\n <Text type={TextType.Small}>\n <a href={hotel?.policies} target=\"_blank\" style={{ color: hotel?.colors.accent }} rel=\"noreferrer\">\n {hotel?.policies}\n </a>\n </Text>\n </div>\n )}\n\n {quoteImage && (\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <QuoteImage\n isMobile={isMobile}\n className={classNames('u-marg-bottom--heavy rs-hotelinfo-quote-images', {\n '--mobile': isMobile,\n '--desktop': !isMobile,\n })}\n src={quoteImage}\n ></QuoteImage>\n </div>\n )}\n </div>\n <div className=\"col-lg-6\">\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <Headline className=\"rs-hotelinfo-gallery\" bold>\n {t(Translation.Step.Hotel.Gallery)}\n </Headline>\n </div>\n {images.length >= 1 && getImage(0)}\n <div className=\"row\">\n {[1, 2, 3].map((index) => {\n if (images.length > index) {\n return (\n <div key={index} className=\"col-6\">\n {getImage(index)}\n </div>\n );\n }\n })}\n {images.length > 5 && (\n <div className=\"col-6\">\n <div className=\"c-images c-images--more\" onClick={openSliderOnClick}>\n {getImage(4)}\n <span>+ {images.length - 5}</span>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n {!!images?.length && (\n <FsLightbox\n toggler={lightboxController.toggler}\n slide={lightboxController.slide}\n sources={images.map((image) => ImageProvider.resizeImage(image, ImageSize.Original))}\n type=\"image\"\n />\n )}\n </>\n );\n}\n\nconst QuoteImage = ({ src, className, isMobile }: { src: string; className?: string; isMobile: boolean }) => {\n const [aspectRatio, setAspectRatio] = useState<number | null>(null);\n const [imageHeight, setImageHeight] = useState<number | null>(null);\n\n useEffect(() => {\n if (!src) return;\n\n const img = new Image();\n img.src = src;\n img.onload = () => setAspectRatio(img.width > 0 ? img.height / img.width : 1); // Fallback aspect ratio\n img.onerror = () => {\n console.error('Failed to load image');\n setAspectRatio(1);\n };\n }, [src]);\n\n useEffect(() => {\n if (!isMobile || aspectRatio === null || typeof window === 'undefined') return;\n\n const updateHeight = () => setImageHeight(window.innerWidth * aspectRatio);\n updateHeight();\n\n window.addEventListener('resize', updateHeight);\n return () => window.removeEventListener('resize', updateHeight);\n }, [aspectRatio, isMobile]);\n\n return (\n <div className={className} style={{ width: '100%', textAlign: 'center' }}>\n {src && (\n <img\n src={src}\n alt=\"Quote\"\n style={{\n width: '100%',\n height: isMobile && imageHeight ? `${imageHeight}px` : 'auto',\n objectFit: 'contain', // Ensures full image is visible, no cropping\n display: 'block', // Prevents inline whitespace issue\n margin: '0 auto', // Centers the image in the div\n }}\n />\n )}\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"HotelInfo.js","sourceRoot":"/","sources":["src/pages/hotel/HotelInfo.tsx"],"names":[],"mappings":"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","sourcesContent":["import { StepHotelInfoViewEvent } from '@frontend/events';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport FsLightbox from 'fslightbox-react';\nimport { useHistoryConsistentPush } from 'hooks/HistoryConsistentPush';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Headline from '@/components/generic/Headline';\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport HotelLocationMap from '@/components/generic/map/HotelLocationMap';\nimport { PageTitle } from '@/components/generic/PageTitle';\nimport Text, { TextType } from '@/components/generic/Text';\nimport HotelInfoPerkRow from '@/components/steps/hotel/HotelInfoPerksRow';\nimport TransportDistanceFromHotelBlock from '@/components/summary/TransportDistanceFromHotelBlock';\nimport { BookingEngineContext } from '@/index';\nimport ImageProvider, { ImageSize } from '@/providers/ImageProvider';\nimport { Color } from '@/util/Color';\nimport ScreenSize from '@/util/ScreenSize';\nimport StepManager from '@/util/StepManager';\n\nexport default function HotelInfo() {\n const { hotel } = useCurrentHotel();\n const historyConsistentPush = useHistoryConsistentPush();\n const { t } = useTranslation();\n const context = useContext(BookingEngineContext);\n const isMobile = context.screenSize <= ScreenSize.Large;\n\n const imageUrl = hotel?.heroImage;\n\n const { line1, line2, postalCode, country } = hotel?.address ?? {};\n\n const [lightboxController, setLightboxController] = useState({ toggler: false, slide: 1 });\n const [images, setImages] = useState<string[]>([]);\n\n const openSlider = (slide: number) => {\n setLightboxController((controller) => ({ toggler: !controller.toggler, slide: slide + 1 }));\n };\n const openSliderOnClick = () => {\n openSlider(4);\n };\n\n const { raise } = useEvent();\n\n useEffect(() => {\n const event = new StepHotelInfoViewEvent();\n raise(event);\n }, []);\n\n useEffect(() => {\n const newImages: string[] = [];\n\n if (hotel?.images?.length) {\n newImages.push(...hotel.images);\n }\n\n if (hotel?.rooms) {\n for (const room of Object.values(hotel?.rooms)) {\n room.images?.forEach((image) => {\n newImages.push(image);\n });\n }\n }\n\n setImages(newImages);\n }, [hotel?.images, hotel?.rooms]);\n\n const onBookNowClick = () => {\n historyConsistentPush(StepManager.getFirstStep().getStepUrl());\n };\n\n const getImage = (index: number) => {\n const openSliderOnClickHandler = () => {\n openSlider(index);\n };\n\n const resizedUrl = ImageProvider.resizeImage(images[index], ImageSize.Small);\n\n return (\n <div\n style={{ backgroundImage: `url('${resizedUrl}')`, paddingTop: '75%' }}\n className=\"c-images u-block u-w-100 u-marg-bottom u-marg-bottom--heavy\"\n onClick={openSliderOnClickHandler}\n />\n );\n };\n\n const hotelServices = hotel?.hotelServices?.filter(({ name }) => !!name) || [];\n const quoteImage = isMobile ? hotel?.quoteImageMobile : hotel?.quoteImageDesktop;\n\n return (\n <>\n <PageTitle step=\"HotelInfo\" />\n <div\n style={{ backgroundImage: `url('${imageUrl && ImageProvider.resizeImage(imageUrl, ImageSize.Original)}')` }}\n className={classNames('c-masthead has-tint', 'rs-background-hotel-info', `rs-background-${hotel?.hotelID}`)}\n >\n <div className=\"container\">\n <div className=\"c-masthead__body u-fill-white u-pad--heavy u-shadow-accent\">\n <h1 className=\"c-masthead__header\">{hotel?.name}</h1>\n <h2 className=\"c-masthead__sub-header\">\n {hotel?.countryPrefix ?? ''} {hotel?.address?.country}\n </h2>\n </div>\n </div>\n </div>\n <div className=\"u-fill-snow u-pad--heavy-med u-pad-top-bottom--heavy@m-\">\n <div className=\"container\">\n <div className=\"row\">\n <div className=\"col-md-6 u-flex align-items-center\">\n <ul>\n <li className=\"u-flex u-marg-bottom--heavy\">\n <Icon icon={IconType.Map} size=\"1.3em\" color={Color.Accent} />\n <span className=\"u-flex__item u-marg-left\">\n {line1}\n <br />\n {line2} {postalCode}, {country}\n </span>\n </li>\n <li className=\"u-flex u-marg-bottom--heavy\">\n <Icon icon={IconType.Phone} size=\"1.3em\" color={Color.Accent} />\n <span className=\"u-flex__item u-marg-left\">{hotel?.phone}</span>\n </li>\n <li className=\"u-flex u-marg-bottom--heavy\">\n <Icon icon={IconType.Hotel2} size=\"1.3em\" color={Color.Accent} />\n <span className=\"u-flex__item u-marg-left\">\n <a href={hotel?.hotelUrl} style={{ color: 'var(--rs-color-accent-1)' }}>\n {hotel?.name}\n </a>\n </span>\n </li>\n <li className=\"u-flex\">\n <BEButton icon={IconType.ArrowRight} primary filled iconPosition=\"right\" onClick={onBookNowClick}>\n {t(Translation.Misc.BookNow)}\n </BEButton>\n </li>\n </ul>\n </div>\n <div className=\"col-md-6\">\n <div className=\"c-overlap\">\n <div className=\"u-marg-bottom u-marg-bottom--heavy u-marg-top u-marg-top--heavy\" style={{ height: '240px' }}>\n <HotelLocationMap />\n </div>\n <div className=\"u-flex u-flex-column justify-content-center rs-hotelinfo-transport-distance u-w-100\">\n <TransportDistanceFromHotelBlock hotel={hotel} />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div className=\"u-pad u-pad--heavy-plus u-pad-top-bottom--heavy@m-\">\n <div className=\"container rs-hotelinfo\">\n <div className=\"row\">\n <div className=\"col-lg-6\">\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <Headline className=\"rs-hotelinfo-about\" bold>\n {t(Translation.Step.Hotel.About)}\n </Headline>\n </div>\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <Text type={TextType.Small} asDiv>\n <HtmlContentViewer content={hotel?.description || ''} />\n </Text>\n\n {!!hotel?.locationDescription && (\n <>\n <div className=\"u-marg-top\">\n <Text type={TextType.Small}>\n <strong>{t(Translation.Step.Hotel.Location)}</strong>\n </Text>\n </div>\n <Text type={TextType.Small} asDiv>\n <HtmlContentViewer content={hotel.locationDescription} />\n </Text>\n </>\n )}\n </div>\n {!!hotel?.perks?.length && (\n <>\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <Text type={TextType.Small}>\n <strong className=\"rs-hotelinfo-andyougetall\">{hotel.perkTitle || t(Translation.Step.Hotel.AndYouGetAll)}</strong>\n </Text>\n </div>\n <div className=\"row\">\n <HotelInfoPerkRow hotel={hotel} />\n </div>\n {hotel?.perksShowDisclaimer && (\n <div className=\"row u-marg-top--lighter\">\n <small className=\"col-12\">{t(Translation.Misc.PerksDisclaimer)}</small>\n </div>\n )}\n </>\n )}\n </div>\n {!!hotelServices.length && (\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom--heavy\">\n <Headline className=\"rs-hotelinfo-hotelamenities\" bold>\n {t(Translation.Step.Hotel.HotelAmenities)}\n </Headline>\n </div>\n <div className=\"row\">\n {hotelServices.map((hotelService, index) => {\n return (\n <div key={index} className=\"col-md-6\">\n <div className=\"u-flex u-marg-bottom\">\n <Icon icon={IconType.Check} color={Color.White} backgroundColor={Color.Accent} borderRadius=\"round\" noPadding size=\"16px\" />\n <span className=\"u-flex__item u-marg-left--light\">\n <Text type={TextType.Small}>{hotelService.name}</Text>\n </span>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n )}\n {!!hotel?.policies && (\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom--heavy\">\n <Headline className=\"rs-hotelinfo-policies\" bold>\n {t(Translation.Step.Hotel.Policies)}\n </Headline>\n </div>\n <Text type={TextType.Small}>\n <a href={hotel?.policies} target=\"_blank\" style={{ color: hotel?.colors.accent }} rel=\"noreferrer\">\n {hotel?.policies}\n </a>\n </Text>\n </div>\n )}\n\n {quoteImage && (\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <QuoteImage\n isMobile={isMobile}\n className={classNames('u-marg-bottom--heavy rs-hotelinfo-quote-images', {\n '--mobile': isMobile,\n '--desktop': !isMobile,\n })}\n src={quoteImage}\n ></QuoteImage>\n </div>\n )}\n </div>\n <div className=\"col-lg-6\">\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <Headline className=\"rs-hotelinfo-gallery\" bold>\n {t(Translation.Step.Hotel.Gallery)}\n </Headline>\n </div>\n {images.length >= 1 && getImage(0)}\n <div className=\"row\">\n {[1, 2, 3].map((index) => {\n if (images.length > index) {\n return (\n <div key={index} className=\"col-6\">\n {getImage(index)}\n </div>\n );\n }\n })}\n {images.length > 5 && (\n <div className=\"col-6\">\n <div className=\"c-images c-images--more\" onClick={openSliderOnClick}>\n {getImage(4)}\n <span>+ {images.length - 5}</span>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n {!!images?.length && (\n <FsLightbox\n toggler={lightboxController.toggler}\n slide={lightboxController.slide}\n sources={images.map((image) => ImageProvider.resizeImage(image, ImageSize.Original))}\n type=\"image\"\n />\n )}\n </>\n );\n}\n\nconst QuoteImage = ({ src, className, isMobile }: { src: string; className?: string; isMobile: boolean }) => {\n const [aspectRatio, setAspectRatio] = useState<number | null>(null);\n const [imageHeight, setImageHeight] = useState<number | null>(null);\n\n useEffect(() => {\n if (!src) return;\n\n const img = new Image();\n img.src = src;\n img.onload = () => setAspectRatio(img.width > 0 ? img.height / img.width : 1); // Fallback aspect ratio\n img.onerror = () => {\n console.error('Failed to load image');\n setAspectRatio(1);\n };\n }, [src]);\n\n useEffect(() => {\n if (!isMobile || aspectRatio === null || typeof window === 'undefined') return;\n\n const updateHeight = () => setImageHeight(window.innerWidth * aspectRatio);\n updateHeight();\n\n window.addEventListener('resize', updateHeight);\n return () => window.removeEventListener('resize', updateHeight);\n }, [aspectRatio, isMobile]);\n\n return (\n <div className={className} style={{ width: '100%', textAlign: 'center' }}>\n {src && (\n <img\n src={src}\n alt=\"Quote\"\n style={{\n width: '100%',\n height: isMobile && imageHeight ? `${imageHeight}px` : 'auto',\n objectFit: 'contain', // Ensures full image is visible, no cropping\n display: 'block', // Prevents inline whitespace issue\n margin: '0 auto', // Centers the image in the div\n }}\n />\n )}\n </div>\n );\n};\n"]}
|