@roomstay/frontend 2.6.62 → 2.6.64

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.
Files changed (103) hide show
  1. package/dist/537.bundle.js +1 -1
  2. package/dist/839.bundle.js +1 -1
  3. package/dist/950.bundle.js +1 -1
  4. package/dist/978.bundle.js +1 -1
  5. package/dist/main.bundle.js +1 -1
  6. package/dist/src/api/BaseAPI.js +5 -10
  7. package/dist/src/api/BaseAPI.js.map +1 -1
  8. package/dist/src/api/ReservationAPI.d.ts +23 -3
  9. package/dist/src/api/ReservationAPI.js +75 -31
  10. package/dist/src/api/ReservationAPI.js.map +1 -1
  11. package/dist/src/components/User/Forms/ForgotPasswordForm.js +11 -5
  12. package/dist/src/components/User/Forms/ForgotPasswordForm.js.map +1 -1
  13. package/dist/src/components/User/Forms/SignInForm.js +5 -2
  14. package/dist/src/components/User/Forms/SignInForm.js.map +1 -1
  15. package/dist/src/components/User/Forms/SignUpForm.d.ts +5 -0
  16. package/dist/src/components/User/Forms/SignUpForm.js +27 -10
  17. package/dist/src/components/User/Forms/SignUpForm.js.map +1 -1
  18. package/dist/src/components/generic/date/DatePicker.js +1 -1
  19. package/dist/src/components/generic/date/DatePicker.js.map +1 -1
  20. package/dist/src/components/members/InlineSignUpSection.d.ts +7 -0
  21. package/dist/src/components/members/InlineSignUpSection.js +122 -0
  22. package/dist/src/components/members/InlineSignUpSection.js.map +1 -0
  23. package/dist/src/components/members/SignInModal/ExternalMemberModal.js +4 -4
  24. package/dist/src/components/members/SignInModal/ExternalMemberModal.js.map +1 -1
  25. package/dist/src/components/members/SignInModal/InternalMemberSignInModal.js +78 -33
  26. package/dist/src/components/members/SignInModal/InternalMemberSignInModal.js.map +1 -1
  27. package/dist/src/components/members/SignInModal/MemberSignInModal.js +11 -1
  28. package/dist/src/components/members/SignInModal/MemberSignInModal.js.map +1 -1
  29. package/dist/src/components/reservation/ReservationItem.js +1 -1
  30. package/dist/src/components/reservation/ReservationItem.js.map +1 -1
  31. package/dist/src/components/steps/addons/AddonCard.js +14 -14
  32. package/dist/src/components/steps/addons/AddonCard.js.map +1 -1
  33. package/dist/src/components/steps/confirmation/RoomContactDetails.js +12 -12
  34. package/dist/src/components/steps/confirmation/RoomContactDetails.js.map +1 -1
  35. package/dist/src/components/steps/room/AvailableUpgradesModal.js +1 -1
  36. package/dist/src/components/steps/room/AvailableUpgradesModal.js.map +1 -1
  37. package/dist/src/components/steps/room/LargeRoomCard.js +7 -0
  38. package/dist/src/components/steps/room/LargeRoomCard.js.map +1 -1
  39. package/dist/src/components/steps/room/roomDetails/RoomDetails.js +1 -1
  40. package/dist/src/components/steps/room/roomDetails/RoomDetails.js.map +1 -1
  41. package/dist/src/components/steps/room/roomDetails/RoomDetailsBedsBlock.js +12 -7
  42. package/dist/src/components/steps/room/roomDetails/RoomDetailsBedsBlock.js.map +1 -1
  43. package/dist/src/components/summary/BESummaryAddonRow.js +1 -1
  44. package/dist/src/components/summary/BESummaryAddonRow.js.map +1 -1
  45. package/dist/src/contexts/BasketContext/BasketContextType.d.ts +2 -5
  46. package/dist/src/contexts/BasketContext/BasketContextType.js.map +1 -1
  47. package/dist/src/contexts/BasketContext/BasketContextWrapper.js +48 -22
  48. package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
  49. package/dist/src/contexts/CompanyContext/CompanyContextType.type.d.ts +1 -1
  50. package/dist/src/contexts/CompanyContext/CompanyContextType.type.js.map +1 -1
  51. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +4 -0
  52. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
  53. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +18 -18
  54. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
  55. package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextTypes.d.ts +5 -4
  56. package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextTypes.js.map +1 -1
  57. package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js +35 -14
  58. package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js.map +1 -1
  59. package/dist/src/contexts/Members/RoomstayMemberContext/RoomstayMemberContextProvider.js.map +1 -1
  60. package/dist/src/hooks/useSignedInMember.d.ts +1 -1
  61. package/dist/src/models/Addon/Addon.d.ts +6 -64
  62. package/dist/src/models/Addon/Addon.js +14 -28
  63. package/dist/src/models/Addon/Addon.js.map +1 -1
  64. package/dist/src/models/Api/HotelDTO.d.ts +1 -0
  65. package/dist/src/models/Api/HotelDTO.js.map +1 -1
  66. package/dist/src/models/AppQueryParameters.d.ts +2 -1
  67. package/dist/src/models/AppQueryParameters.js +1 -0
  68. package/dist/src/models/AppQueryParameters.js.map +1 -1
  69. package/dist/src/models/BasketAddonRow.js +3 -2
  70. package/dist/src/models/BasketAddonRow.js.map +1 -1
  71. package/dist/src/models/BasketRow.d.ts +1 -0
  72. package/dist/src/models/BasketRow.js.map +1 -1
  73. package/dist/src/models/Client/Hotel/Hotel.d.ts +4 -2
  74. package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
  75. package/dist/src/models/RoomstaySession.d.ts +1 -0
  76. package/dist/src/models/RoomstaySession.js.map +1 -1
  77. package/dist/src/models/UserProfile.d.ts +20 -20
  78. package/dist/src/models/UserProfile.js.map +1 -1
  79. package/dist/src/pages/account/Reservations/AccountReservationSinglePage.js +2 -2
  80. package/dist/src/pages/account/Reservations/AccountReservationSinglePage.js.map +1 -1
  81. package/dist/src/pages/steps/StepThanks/StepThanksComponent.js +6 -4
  82. package/dist/src/pages/steps/StepThanks/StepThanksComponent.js.map +1 -1
  83. package/dist/src/providers/CurrencyProvider.js +1 -1
  84. package/dist/src/providers/CurrencyProvider.js.map +1 -1
  85. package/dist/src/providers/feature/MemberPortalFeature.d.ts +7 -1
  86. package/dist/src/providers/feature/MemberPortalFeature.js +11 -0
  87. package/dist/src/providers/feature/MemberPortalFeature.js.map +1 -1
  88. package/dist/src/translations/Translation.d.ts +1 -0
  89. package/dist/src/translations/Translation.js +1 -0
  90. package/dist/src/translations/Translation.js.map +1 -1
  91. package/dist/src/translations/languages/en-gb.js +1 -0
  92. package/dist/src/translations/languages/en-gb.js.map +1 -1
  93. package/dist/src/util/Analytics/GoogleAnalytics4.d.ts +1 -1
  94. package/dist/src/util/Analytics/UniversalAnalytics.d.ts +1 -1
  95. package/dist/src/util/CurrencyHelper.js +1 -1
  96. package/dist/src/util/CurrencyHelper.js.map +1 -1
  97. package/dist/src/util/EventsHelper.js +1 -1
  98. package/dist/src/util/EventsHelper.js.map +1 -1
  99. package/dist/src/util/TotalCalculator.js +2 -2
  100. package/dist/src/util/TotalCalculator.js.map +1 -1
  101. package/dist/test.bundle.js +1 -1
  102. package/dist/vendors.bundle.js +1 -1
  103. package/package.json +3 -3
@@ -135,7 +135,7 @@ const ConfirmationStepContextWrapper = ({ children }) => {
135
135
  }, []);
136
136
  (0, react_1.useEffect)(() => {
137
137
  if (hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit) {
138
- basketContext.getBasketQuoteDetails(() => confirmationStepIsActiveRef.current);
138
+ basketContext.quoteOrPencilReservation(() => confirmationStepIsActiveRef.current);
139
139
  }
140
140
  }, [hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit]);
141
141
  (0, react_1.useEffect)(() => {
@@ -170,22 +170,22 @@ const ConfirmationStepContextWrapper = ({ children }) => {
170
170
  shortCountryCode = country === null || country === void 0 ? void 0 : country.code;
171
171
  }
172
172
  return {
173
- Title: values.Title,
174
- FirstName: values.Forename,
175
- LastName: values.Surname,
176
- Phone: values.Phone.replace(' ', ''),
177
- Email: values.Email,
178
- Address: {
179
- Line1: values.Address,
180
- City: values.City,
181
- PostalCode: values.PostCode,
182
- State: values.State,
183
- Country: values.Country,
184
- CountryId: values.CountryId,
185
- CountryCode: shortCountryCode,
173
+ title: values.Title,
174
+ firstName: values.Forename,
175
+ lastName: values.Surname,
176
+ phone: values.Phone.replace(' ', ''),
177
+ email: values.Email,
178
+ address: {
179
+ line1: values.Address,
180
+ city: values.City,
181
+ postalCode: values.PostCode,
182
+ state: values.State,
183
+ country: values.Country,
184
+ countryId: values.CountryId,
185
+ countryCode: shortCountryCode,
186
186
  },
187
- MarketingOptIn: formValues.marketingOptIn,
188
- AuxInputs: values.AuxInputs,
187
+ marketingOptIn: formValues.marketingOptIn,
188
+ auxInputs: values.AuxInputs,
189
189
  };
190
190
  });
191
191
  };
@@ -245,7 +245,7 @@ const ConfirmationStepContextWrapper = ({ children }) => {
245
245
  : [];
246
246
  const comments = formPayload.comments;
247
247
  const bookingComment = captureChildAgeComments.length > 0 ? `${comments}\n${captureChildAgeComments.join('\n')}` : comments;
248
- data = yield BookingAPI_1.default.Reservation.bookNow(basketRows, userProfiles, payment, basketAddonRows, bookingComment || '', hotel === null || hotel === void 0 ? void 0 : hotel.hotelID, engineContext.sessionProvider.getCurrentSessionID().toString(), undefined, undefined, undefined, isExternalMemberHotel ? memberNumber : undefined);
248
+ data = yield BookingAPI_1.default.Reservation.bookNow(basketRows, userProfiles, payment, basketAddonRows, bookingComment || '', hotel === null || hotel === void 0 ? void 0 : hotel.hotelID, engineContext.sessionProvider.getCurrentSessionID().toString(), basketContext.pencilId, undefined, undefined, undefined, isExternalMemberHotel ? memberNumber : undefined);
249
249
  yield basketContext.booked(data, {
250
250
  userProfiles,
251
251
  payment,
@@ -351,7 +351,7 @@ const ConfirmationStepContextWrapper = ({ children }) => {
351
351
  return null;
352
352
  }
353
353
  try {
354
- const data = yield BookingAPI_1.default.Reservation.bookNow(basketRows, resRequest.userProfiles, resRequest.payment, basketAddonRows, '', hotel === null || hotel === void 0 ? void 0 : hotel.hotelID, engineContext.sessionProvider.getCurrentSessionID().toString(), undefined, true, roomstayId, isExternalMemberHotel ? memberNumber : undefined);
354
+ const data = yield BookingAPI_1.default.Reservation.bookNow(basketRows, resRequest.userProfiles, resRequest.payment, basketAddonRows, '', hotel === null || hotel === void 0 ? void 0 : hotel.hotelID, engineContext.sessionProvider.getCurrentSessionID().toString(), basketContext.pencilId, undefined, true, roomstayId, isExternalMemberHotel ? memberNumber : undefined);
355
355
  yield basketContext.booked(data);
356
356
  const validationResult = yield validateReservation(data);
357
357
  if (validationResult) {
@@ -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 { EBookingPaymentMethod, EHotelCardProcessor, IBookingCreateErrorResponse, IBookingPayment } from '@roomstay/core';\nimport { IconType } from '@roomstay/ui';\nimport * as Sentry from '@sentry/browser';\nimport { Severity } from '@sentry/types';\nimport { after, 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 { PaymentHandler } from '@/handlers/payment/PaymentHandler';\nimport { planpayPaymentHandler } from '@/handlers/payment/PlanpayPaymentHandler';\nimport { redirectPaymentHandler } from '@/handlers/payment/RedirectPaymentHandler';\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 ReservationsDTO, { ReservationDTO } from '@/models/Api/ReservationsDTO';\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';\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 { queryPaymentMethod, queryRoomstayId: queryReservationId, queryPlanpayCheckoutId, returnFromPayment, success } = 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 = [redirectPaymentHandler(), adyenPaymentHandler(), vgsPaymentHandler(), vgsMemberPaymentHandler(), planpayPaymentHandler(), afterpayPaymentHandler()];\n\n const historyConsistentPush = useHistoryConsistentPush();\n\n const isBackFromPlanpay = !!queryPlanpayCheckoutId && !!queryReservationId && !!queryPaymentMethod;\n const isBackFromExternalPayment = !!returnFromPayment && (!!success || !isBackFromPlanpay) && !!queryReservationId;\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 commitReservation?.(basketContext.reservationData, 'Please wait... Finalising your reservation');\n }\n\n if (isBackFromPlanpay && queryReservationId === reservationRoomstayId) {\n commitReservation?.(basketContext.reservationData, 'Please wait... Finalising your reservation');\n }\n }, []);\n\n useEffect(() => {\n if (hotel?.requireDeposit) {\n basketContext.getBasketQuoteDetails(() => confirmationStepIsActiveRef.current);\n }\n }, [hotel?.requireDeposit]);\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) {\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 }\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\n try {\n const captureChildAgeComments: string[] = hotel?.captureChildAge\n ? formPayload.userProfiles.flatMap(\n (formValue: TUserProfileFormValues, roomIndex: number) =>\n formValue?.CaptureChildAge?.map((age: string, childIndex: number) => `Room ${roomIndex + 1} - Child: ${childIndex + 1} Age: ${age}`) || []\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 undefined,\n undefined,\n undefined,\n isExternalMemberHotel ? memberNumber : undefined\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(reservationIds, resData.itineraryNumber, hotel?.hotelID as string, queryPlanpayCheckoutId || undefined);\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 setApiErrorResponse(error);\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 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 // We're not in exclusive payment mode, so we can just submit the form\n // First we need to find the pamynet 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 await placeBooking(values, { ...(await paymentMode?.getBookingPaymentRequestObject()), ...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 const onBackFromPaymentDetails = () => {\n setIsInPaymentMode(false);\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\n availablePaymentHandlers,\n }}\n >\n {isLoading && <OverlayLoader isFullscreen label={loadingStatus} />}\n <ConfirmationStepErrorModal onRetry={onRetryBooking} onClose={onErrorModalClose} errorData={apiErrorResponse} isLoading={errorModalLoading} />\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 && (\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 <NextStepButton\n disabled={paymentMethod === EBookingPaymentMethod.Planpay || isLoading || isPaymentLoading}\n text={exclusivePayment && !isInPaymentMode ? t(Translation.Step.Confirmation.ContinueToPayment) : t(Translation.Step.Confirmation.ConfirmReservation)}\n isLoading={isLoading}\n onClick={onContinueClick}\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 { EBookingPaymentMethod, EHotelCardProcessor, IBookingCreateErrorResponse, IBookingPayment } 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 { PaymentHandler } from '@/handlers/payment/PaymentHandler';\nimport { planpayPaymentHandler } from '@/handlers/payment/PlanpayPaymentHandler';\nimport { redirectPaymentHandler } from '@/handlers/payment/RedirectPaymentHandler';\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 ReservationsDTO, { ReservationDTO } from '@/models/Api/ReservationsDTO';\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';\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 { queryPaymentMethod, queryRoomstayId: queryReservationId, queryPlanpayCheckoutId, returnFromPayment, success } = 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 = [redirectPaymentHandler(), adyenPaymentHandler(), vgsPaymentHandler(), vgsMemberPaymentHandler(), planpayPaymentHandler(), afterpayPaymentHandler()];\n\n const historyConsistentPush = useHistoryConsistentPush();\n\n const isBackFromPlanpay = !!queryPlanpayCheckoutId && !!queryReservationId && !!queryPaymentMethod;\n const isBackFromExternalPayment = !!returnFromPayment && (!!success || !isBackFromPlanpay) && !!queryReservationId;\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 commitReservation?.(basketContext.reservationData, 'Please wait... Finalising your reservation');\n }\n\n if (isBackFromPlanpay && queryReservationId === reservationRoomstayId) {\n commitReservation?.(basketContext.reservationData, 'Please wait... Finalising your reservation');\n }\n }, []);\n\n useEffect(() => {\n if (hotel?.requireDeposit) {\n basketContext.quoteOrPencilReservation(() => confirmationStepIsActiveRef.current);\n }\n }, [hotel?.requireDeposit]);\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) {\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 }\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\n try {\n const captureChildAgeComments: string[] = hotel?.captureChildAge\n ? formPayload.userProfiles.flatMap(\n (formValue: TUserProfileFormValues, roomIndex: number) =>\n formValue?.CaptureChildAge?.map((age: string, childIndex: number) => `Room ${roomIndex + 1} - Child: ${childIndex + 1} Age: ${age}`) || []\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 );\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(reservationIds, resData.itineraryNumber, hotel?.hotelID as string, queryPlanpayCheckoutId || undefined);\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 setApiErrorResponse(error);\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 // We're not in exclusive payment mode, so we can just submit the form\n // First we need to find the pamynet 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 await placeBooking(values, { ...(await paymentMode?.getBookingPaymentRequestObject()), ...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 const onBackFromPaymentDetails = () => {\n setIsInPaymentMode(false);\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\n availablePaymentHandlers,\n }}\n >\n {isLoading && <OverlayLoader isFullscreen label={loadingStatus} />}\n <ConfirmationStepErrorModal onRetry={onRetryBooking} onClose={onErrorModalClose} errorData={apiErrorResponse} isLoading={errorModalLoading} />\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 && (\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 <NextStepButton\n disabled={paymentMethod === EBookingPaymentMethod.Planpay || isLoading || isPaymentLoading}\n text={exclusivePayment && !isInPaymentMode ? t(Translation.Step.Confirmation.ContinueToPayment) : t(Translation.Step.Confirmation.ConfirmReservation)}\n isLoading={isLoading}\n onClick={onContinueClick}\n />\n </div>\n </ConfirmationStepContextProvider>\n </FormProvider>\n );\n};\n"]}
@@ -8,10 +8,11 @@ export interface FullPageBookingEngineUrlParameters {
8
8
  promoCode?: string;
9
9
  promoOnly?: boolean;
10
10
  promoFeatured?: boolean;
11
- adults?: number;
12
- children?: number;
13
- infants?: number;
14
- rooms?: number;
11
+ rooms?: {
12
+ adults?: number;
13
+ children?: number;
14
+ infants?: number;
15
+ }[];
15
16
  }
16
17
  export interface FullPageEngineContextType {
17
18
  urlParameters: FullPageBookingEngineUrlParameters;
@@ -1 +1 @@
1
- {"version":3,"file":"FullPageEngineContextTypes.js","sourceRoot":"/","sources":["src/contexts/FullPageEngineContext/FullPageEngineContextTypes.ts"],"names":[],"mappings":"","sourcesContent":["import dayjs from 'dayjs';\n\nimport type Step from '@/pages/steps/Step';\n\nexport interface FullPageBookingEngineUrlParameters {\n startDate?: dayjs.Dayjs;\n endDate?: dayjs.Dayjs;\n\n hotelId?: string;\n\n defaultCity?: string;\n\n promoCode?: string;\n promoOnly?: boolean;\n\n promoFeatured?: boolean;\n\n adults?: number;\n children?: number;\n infants?: number;\n\n rooms?: number;\n}\n\nexport interface FullPageEngineContextType {\n urlParameters: FullPageBookingEngineUrlParameters;\n\n currentStep: Step;\n setCurrentStep: (step: Step) => void;\n}\n"]}
1
+ {"version":3,"file":"FullPageEngineContextTypes.js","sourceRoot":"/","sources":["src/contexts/FullPageEngineContext/FullPageEngineContextTypes.ts"],"names":[],"mappings":"","sourcesContent":["import dayjs from 'dayjs';\n\nimport type Step from '@/pages/steps/Step';\n\nexport interface FullPageBookingEngineUrlParameters {\n startDate?: dayjs.Dayjs;\n endDate?: dayjs.Dayjs;\n\n hotelId?: string;\n\n defaultCity?: string;\n\n promoCode?: string;\n promoOnly?: boolean;\n\n promoFeatured?: boolean;\n\n rooms?: {\n adults?: number;\n children?: number;\n infants?: number;\n }[];\n}\n\nexport interface FullPageEngineContextType {\n urlParameters: FullPageBookingEngineUrlParameters;\n\n currentStep: Step;\n setCurrentStep: (step: Step) => void;\n}\n"]}
@@ -73,12 +73,17 @@ function FullPageEngineContextWrapper() {
73
73
  const { hotel } = (0, hooks_1.useCurrentHotel)();
74
74
  const location = (0, react_router_dom_1.useLocation)();
75
75
  const historyConsistentPush = (0, HistoryConsistentPush_1.useHistoryConsistentPush)();
76
+ const navigate = (0, react_router_dom_1.useNavigate)();
76
77
  const isInStepRoot = (0, react_router_dom_1.useMatch)(StepManager_1.default.STEP_BASE);
77
78
  (0, react_1.useEffect)(() => {
78
79
  var _a;
79
80
  (_a = beContext.sessionProvider) === null || _a === void 0 ? void 0 : _a.updateSession({ step: currentStep.getName() });
81
+ if (currentStep === StepHotel_1.default) {
82
+ ccx.changeHotel(null);
83
+ }
80
84
  }, [currentStep]);
81
85
  (0, react_1.useEffect)(() => {
86
+ var _a, _b, _c, _d, _e;
82
87
  const currentBasketRows = basketContext.currentBasketRows;
83
88
  let addXRooms = 1;
84
89
  // TODO: this probably needs to be the only place this is set, and listen for URL changes
@@ -147,27 +152,42 @@ function FullPageEngineContextWrapper() {
147
152
  urlParameterBuilder.startDate = start;
148
153
  urlParameterBuilder.endDate = end;
149
154
  }
150
- const adults = Number.parseInt(query.get(AppQueryParameters_1.EAppQueryParameters.Adults), 10);
151
- if (!isNaN(adults) && adults > 1) {
152
- if (!hotel || hotel.maxOccupancy >= adults) {
153
- urlParameterBuilder.adults = adults;
155
+ const parseQueryInt = (key, min = 0) => {
156
+ var _a;
157
+ const value = Number.parseInt((_a = query.get(key)) !== null && _a !== void 0 ? _a : '', 10);
158
+ return Number.isNaN(value) || value < min ? undefined : value;
159
+ };
160
+ addXRooms = (_a = parseQueryInt(AppQueryParameters_1.EAppQueryParameters.Rooms, 1)) !== null && _a !== void 0 ? _a : 1;
161
+ const globalAdults = parseQueryInt(AppQueryParameters_1.EAppQueryParameters.Adults, 1);
162
+ const globalChildren = parseQueryInt(AppQueryParameters_1.EAppQueryParameters.Children);
163
+ const globalInfants = parseQueryInt(AppQueryParameters_1.EAppQueryParameters.Infants);
164
+ urlParameterBuilder.rooms = [];
165
+ for (let i = 0; i < addXRooms; i++) {
166
+ let roomOccupancy = 1;
167
+ let adults = (_b = parseQueryInt(`adults-${i + 1}`, 1)) !== null && _b !== void 0 ? _b : globalAdults;
168
+ query.delete(`adults-${i + 1}`);
169
+ if (adults && (hotel === null || hotel === void 0 ? void 0 : hotel.maxOccupancy) && (roomOccupancy = adults) > hotel.maxOccupancy) {
170
+ adults = undefined;
154
171
  }
155
- }
156
- const children = Number.parseInt(query.get(AppQueryParameters_1.EAppQueryParameters.Children), 10);
157
- if (!isNaN(children) && children > 0) {
158
- if (!hotel || hotel.maxOccupancy + (isNaN(adults) ? 0 : adults) >= children) {
159
- urlParameterBuilder.children = children;
172
+ let children = (_c = parseQueryInt(`children-${i + 1}`)) !== null && _c !== void 0 ? _c : globalChildren;
173
+ query.delete(`children-${i + 1}`);
174
+ if (children && (hotel === null || hotel === void 0 ? void 0 : hotel.maxOccupancy) && (roomOccupancy += children) > hotel.maxOccupancy) {
175
+ children = undefined;
160
176
  }
177
+ let infants = (_d = parseQueryInt(`infants-${i + 1}`)) !== null && _d !== void 0 ? _d : globalInfants;
178
+ query.delete(`infants-${i + 1}`);
179
+ if (infants && (hotel === null || hotel === void 0 ? void 0 : hotel.maxOccupancy) && hotel.countInfantsInOccupancy && (roomOccupancy += infants) > hotel.maxOccupancy) {
180
+ infants = undefined;
181
+ }
182
+ urlParameterBuilder.rooms[i] = { adults, children, infants };
161
183
  }
162
- const roomCount = Number.parseInt(query.get(AppQueryParameters_1.EAppQueryParameters.Rooms), 10);
163
- if (!isNaN(roomCount) && roomCount > 1) {
164
- urlParameterBuilder.rooms = addXRooms = roomCount;
165
- }
184
+ navigate({ search: query.toString() }, { replace: true });
166
185
  setUrlParameters(urlParameterBuilder);
167
186
  }
168
187
  let firstBasketRow = undefined;
169
- const { startDate, endDate, promoCode, promoOnly, adults, children, infants } = urlParameterBuilder;
188
+ const { startDate, endDate, promoCode, promoOnly, rooms } = urlParameterBuilder;
170
189
  for (let i = 0; i < addXRooms; i++) {
190
+ const { adults, children, infants } = (_e = rooms === null || rooms === void 0 ? void 0 : rooms[i]) !== null && _e !== void 0 ? _e : {};
171
191
  const basketRow = new BasketRow_1.default(undefined, undefined, shouldEnableRoomCodeFilter);
172
192
  if (startDate) {
173
193
  basketRow.setStartDate(startDate);
@@ -196,6 +216,7 @@ function FullPageEngineContextWrapper() {
196
216
  }
197
217
  }
198
218
  if ((firstBasketRow === null || firstBasketRow === void 0 ? void 0 : firstBasketRow.getStartDate()) && firstBasketRow.getEndDate() && StepManager_1.default.getFirstStep() !== StepHotel_1.default) {
219
+ basketContext.selectBasketRow(firstBasketRow);
199
220
  setInitialStep((0, GetStepRoom_1.default)());
200
221
  }
201
222
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FullPageEngineContextWrapper.js","sourceRoot":"/","sources":["src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n BasketContext,\n BookingEngineContext,\n CompanyContext,\n FullPageBookingEngineUrlParameters,\n FullPageEngineContext,\n FullPageEngineContextType,\n ModalContextWrapper,\n} from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport dayjs from 'dayjs';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { Navigate, Route, Routes, useLocation, useMatch } from 'react-router-dom';\nimport StepRoute from 'routes/NaturallyProgressedStepRoute';\n\nimport { API_DATE_FORMAT } from '@/api/BaseAPI';\nimport LargeLoader from '@/components/generic/loader/LargeLoader';\nimport { RoomstayMark } from '@/components/generic/RoomstayMark';\nimport ScrollToTop from '@/components/generic/ScrollToTop';\nimport Header from '@/components/navigation/Header';\nimport { PrivateRoute } from '@/containers/PrivateRoute';\nimport { useHistoryConsistentPush } from '@/hooks/HistoryConsistentPush';\nimport { EAppQueryParameters } from '@/models/AppQueryParameters';\nimport BasketRow from '@/models/BasketRow';\nimport RateTypeFilter from '@/models/Room/Filters/RateTypeFilter';\nimport RoomTypeFilter from '@/models/Room/Filters/RoomTypeFilter';\nimport FindReservation, { EFindReservationPath } from '@/pages/findReservation/FindReservation';\nimport FindReservationResults from '@/pages/findReservation/FindReservationResults';\nimport HotelInfo from '@/pages/hotel/HotelInfo';\nimport HotelInfoPlaceholder from '@/pages/hotel/HotelInfoPlaceholder';\nimport Step from '@/pages/steps/Step';\nimport StepHotel from '@/pages/steps/StepHotel/StepHotel';\nimport FeaturedPromoFeature from '@/providers/feature/FeaturedPromoFeature';\nimport MemberPortalFeature from '@/providers/feature/MemberPortalFeature';\nimport FeatureProvider from '@/providers/FeatureProvider';\nimport getStepRoom from '@/util/GetStepRoom';\nimport { ROUTES } from '@/util/RouteManager';\nimport StepManager from '@/util/StepManager';\n\nimport { EngineBodyLayout } from './EngineBodyLayout';\nimport { EnginePageLayout } from './EnginePageLayout';\n\nconst AccountRouter = React.lazy(() =>\n import('@/pages/account/AccountRouter').then(({ AccountRouter }) => ({\n default: AccountRouter,\n }))\n);\n\nexport function FullPageEngineContextWrapper() {\n const basketContext = useContext(BasketContext);\n const ccx = useContext(CompanyContext);\n const beContext = useContext(BookingEngineContext);\n\n const [engineReady, setEngineReady] = useState(false);\n const [urlFlagsParsed, setUrlFlagsParsed] = useState(false);\n const [urlParameters, setUrlParameters] = useState<FullPageBookingEngineUrlParameters>({});\n\n const [currentStep, setCurrentStep] = useState<Step>(StepManager.getStepFromName(beContext.engine.getInitialSession()?.step as string) ?? StepManager.getFirstStep());\n const [initialStep, setInitialStep] = useState<Step>(StepManager.getFirstStep());\n\n const { hotel } = useCurrentHotel();\n\n const location = useLocation();\n const historyConsistentPush = useHistoryConsistentPush();\n\n const isInStepRoot = useMatch(StepManager.STEP_BASE);\n\n useEffect(() => {\n beContext.sessionProvider?.updateSession({ step: currentStep.getName() });\n }, [currentStep]);\n\n useEffect(() => {\n const currentBasketRows = basketContext.currentBasketRows;\n\n let addXRooms = 1;\n\n // TODO: this probably needs to be the only place this is set, and listen for URL changes\n if (currentBasketRows.length === 0) {\n const urlParameterBuilder: FullPageBookingEngineUrlParameters = {};\n // The Choose Hotel step should not apply the room filter\n const shouldEnableRoomCodeFilter = currentStep.getName() !== StepHotel.getName();\n\n if (location.search) {\n const query = new URLSearchParams(location.search);\n\n const format = API_DATE_FORMAT;\n\n let start = dayjs(query.get(EAppQueryParameters.Arrive), format);\n let end = dayjs(query.get(EAppQueryParameters.Depart), format);\n\n const promoCode = query.get(EAppQueryParameters.PromoCode);\n const promoOnly = query.get(EAppQueryParameters.PromoOnly);\n\n const promoFeatured = query.get(EAppQueryParameters.PromoFeatured);\n\n if (promoCode) {\n urlParameterBuilder.promoCode = promoCode;\n }\n\n if (promoOnly && promoOnly.toLowerCase() !== 'false') {\n urlParameterBuilder.promoOnly = Boolean(promoOnly);\n }\n\n if (promoFeatured && promoFeatured.toLowerCase() !== 'false') {\n FeatureProvider.load(FeaturedPromoFeature);\n urlParameterBuilder.promoFeatured = true;\n }\n\n const updatedCurrentFilters = { ...beContext.currentFilters };\n const roomCode = query.get(EAppQueryParameters.Room);\n\n if (roomCode && shouldEnableRoomCodeFilter) {\n // TODO: Refactor this to come from this context instead.\n updatedCurrentFilters['RoomType'] = new RoomTypeFilter([roomCode]);\n }\n\n const rateCode = query.get(EAppQueryParameters.Rate);\n if (rateCode) {\n // TODO: Refactor this to come from this context instead.\n updatedCurrentFilters['RateType'] = new RateTypeFilter([rateCode]);\n }\n beContext.setCurrentFilters(updatedCurrentFilters);\n\n const hotelId = query.get(EAppQueryParameters.Hotel);\n\n if (hotelId) {\n if (ccx.changeHotel(hotelId)) {\n if (!start.isValid()) {\n start = dayjs().add(1, 'day');\n }\n\n if (!end.isValid()) {\n end = start.add(1, 'day');\n }\n\n setInitialStep(getStepRoom());\n }\n\n urlParameterBuilder.hotelId = hotelId;\n }\n\n const defaultCity = query.get(EAppQueryParameters.DefaultCity);\n if (defaultCity) {\n urlParameterBuilder.defaultCity = defaultCity;\n }\n\n // We're doing dates last, as other properties, like hotelID might change them if they're not already set\n if (start.isValid() && end.isValid()) {\n if (start.isBefore(dayjs())) {\n start = dayjs();\n }\n\n if (end.isBefore(start)) {\n end = start.add(1, 'day');\n } else if (end.isBefore(dayjs().add(1, 'day'))) {\n end = dayjs().add(1, 'day');\n }\n\n urlParameterBuilder.startDate = start;\n urlParameterBuilder.endDate = end;\n }\n\n const adults = Number.parseInt(query.get(EAppQueryParameters.Adults) as string, 10);\n if (!isNaN(adults) && adults > 1) {\n if (!hotel || (hotel.maxOccupancy as number) >= adults) {\n urlParameterBuilder.adults = adults;\n }\n }\n\n const children = Number.parseInt(query.get(EAppQueryParameters.Children) as string, 10);\n if (!isNaN(children) && children > 0) {\n if (!hotel || (hotel.maxOccupancy as number) + (isNaN(adults) ? 0 : adults) >= children) {\n urlParameterBuilder.children = children;\n }\n }\n\n const roomCount = Number.parseInt(query.get(EAppQueryParameters.Rooms) as string, 10);\n if (!isNaN(roomCount) && roomCount > 1) {\n urlParameterBuilder.rooms = addXRooms = roomCount;\n }\n\n setUrlParameters(urlParameterBuilder);\n }\n\n let firstBasketRow: BasketRow | undefined = undefined;\n const { startDate, endDate, promoCode, promoOnly, adults, children, infants } = urlParameterBuilder;\n for (let i = 0; i < addXRooms; i++) {\n const basketRow = new BasketRow(undefined, undefined, shouldEnableRoomCodeFilter);\n\n if (startDate) {\n basketRow.setStartDate(startDate);\n }\n\n if (endDate) {\n basketRow.setEndDate(endDate);\n }\n\n if (promoCode) {\n basketRow.setPromoCode(promoCode);\n }\n\n if (promoOnly) {\n basketRow.setPromoOnly(promoOnly);\n }\n\n if (adults) {\n basketRow.setAdults(adults);\n }\n\n if (children) {\n basketRow.setChildren(children);\n }\n\n if (infants) {\n basketRow.setInfants(infants);\n }\n\n basketContext.addBasketRow(basketRow);\n\n if (i === 0) {\n firstBasketRow = basketRow;\n }\n }\n\n if (firstBasketRow?.getStartDate() && firstBasketRow.getEndDate() && StepManager.getFirstStep() !== StepHotel) {\n setInitialStep(getStepRoom());\n }\n } else {\n const initialSession = beContext.engine.getInitialSession();\n if (initialSession) {\n setInitialStep(StepManager.getStepFromName(initialSession.step) as Step);\n }\n }\n\n setUrlFlagsParsed(true);\n }, []);\n\n /**\n * Engine Ready useEffect, used to deffer loading the UI until everything engine wise is set up properly\n */\n useEffect(() => {\n if (!engineReady) {\n if (ccx.hotels.length > 0 && urlFlagsParsed) {\n setEngineReady(true);\n }\n }\n }, [ccx.hotels, urlFlagsParsed]);\n\n useEffect(() => {\n if (engineReady) {\n if (isInStepRoot && initialStep) {\n // We want to respect the browsers pathname, and only redirect to a defined step if\n // the pathname isn't set, or matches an unknown page.\n\n // Is the current location in the path? i.e does the user want to be somewhere specific\n let pathInLoadedSteps = false;\n for (const step of StepManager.getSteps()) {\n // Using match instead of equals as some clients have skipped the trailing slash\n // We also want to make sure to only match the start of the path, in case step contains nested paths.\n if (location.pathname.match(new RegExp(`${step.getStepUrl()}.+`, 'ig'))) {\n pathInLoadedSteps = true;\n break;\n }\n }\n\n // We're in /step/ but on a not recognized one.\n if (!pathInLoadedSteps) {\n historyConsistentPush(initialStep.getStepUrl());\n }\n }\n }\n }, [engineReady]);\n\n useEffect(() => {\n if (hotel?.currentRoomSort) {\n beContext.setCurrentRoomSort(hotel?.currentRoomSort);\n }\n }, [hotel?.currentRoomSort]);\n\n const workingContext: FullPageEngineContextType = { urlParameters, currentStep, setCurrentStep };\n\n return (\n <FullPageEngineContext.Provider value={workingContext}>\n <ModalContextWrapper>\n <ScrollToTop />\n <header className=\"engine-header\">\n <Header />\n </header>\n\n {engineReady && (\n <Routes>\n <Route path=\"/\" element={<Navigate to={StepManager.getFirstStep().getStepUrl()} replace />} />\n\n <Route path=\"/step\" element={<EngineBodyLayout />}>\n {StepManager.getSteps().map((step: Step) => (\n <Route key={step.getName()} path={`${step.getStepUrl()}*`} element={<StepRoute step={step} />} />\n ))}\n </Route>\n\n {/**\n * We aren't on a /step/ path, or the root path, so it's probably one of the engine-page paths.\n * If no matching path is found, we'll redirect back to the first step.\n */}\n <Route path=\"/*\" element={<EnginePageLayout />}>\n {/* TODO: This startsWith('/') check should be temporary. We should update the Route in client config after this is merged. */}\n <Route\n path={ROUTES.HOTEL_INFO.startsWith('/') ? ROUTES.HOTEL_INFO.substring(1) : ROUTES.HOTEL_INFO}\n element={\n <React.Suspense fallback={<HotelInfoPlaceholder />}>\n <HotelInfo />\n </React.Suspense>\n }\n />\n\n {Object.values(EFindReservationPath)\n .filter((path) => MemberPortalFeature.isActive() || path === EFindReservationPath.FindReservation)\n .map((path) => (\n <Route\n key={path}\n path={path}\n element={\n <React.Suspense fallback={<div>Loading...</div>}>\n <FindReservation />\n </React.Suspense>\n }\n />\n ))}\n\n <Route\n path=\"find-reservation/:ref/:email\"\n element={\n <React.Suspense fallback={<div>Loading...</div>}>\n <FindReservationResults />\n </React.Suspense>\n }\n />\n\n <Route\n path=\"account/*\"\n element={\n <PrivateRoute>\n {MemberPortalFeature.isActive() && (\n <React.Suspense\n fallback={\n <div>\n <LargeLoader />\n </div>\n }\n >\n <AccountRouter />\n </React.Suspense>\n )}\n </PrivateRoute>\n }\n />\n\n {/* We haven't found a matching path, so just redirect to the first step. */}\n <Route path=\"*\" element={<Navigate to={StepManager.getFirstStep().getStepUrl()} replace />} />\n </Route>\n </Routes>\n )}\n\n <RoomstayMark />\n </ModalContextWrapper>\n </FullPageEngineContext.Provider>\n );\n}\n"]}
1
+ {"version":3,"file":"FullPageEngineContextWrapper.js","sourceRoot":"/","sources":["src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n BasketContext,\n BookingEngineContext,\n CompanyContext,\n FullPageBookingEngineUrlParameters,\n FullPageEngineContext,\n FullPageEngineContextType,\n ModalContextWrapper,\n} from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport dayjs from 'dayjs';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { Navigate, Route, Routes, useLocation, useMatch, useNavigate } from 'react-router-dom';\nimport StepRoute from 'routes/NaturallyProgressedStepRoute';\n\nimport { API_DATE_FORMAT } from '@/api/BaseAPI';\nimport LargeLoader from '@/components/generic/loader/LargeLoader';\nimport { RoomstayMark } from '@/components/generic/RoomstayMark';\nimport ScrollToTop from '@/components/generic/ScrollToTop';\nimport Header from '@/components/navigation/Header';\nimport { PrivateRoute } from '@/containers/PrivateRoute';\nimport { useHistoryConsistentPush } from '@/hooks/HistoryConsistentPush';\nimport { EAppQueryParameters } from '@/models/AppQueryParameters';\nimport BasketRow from '@/models/BasketRow';\nimport RateTypeFilter from '@/models/Room/Filters/RateTypeFilter';\nimport RoomTypeFilter from '@/models/Room/Filters/RoomTypeFilter';\nimport FindReservation, { EFindReservationPath } from '@/pages/findReservation/FindReservation';\nimport FindReservationResults from '@/pages/findReservation/FindReservationResults';\nimport HotelInfo from '@/pages/hotel/HotelInfo';\nimport HotelInfoPlaceholder from '@/pages/hotel/HotelInfoPlaceholder';\nimport Step from '@/pages/steps/Step';\nimport StepHotel from '@/pages/steps/StepHotel/StepHotel';\nimport FeaturedPromoFeature from '@/providers/feature/FeaturedPromoFeature';\nimport MemberPortalFeature from '@/providers/feature/MemberPortalFeature';\nimport FeatureProvider from '@/providers/FeatureProvider';\nimport getStepRoom from '@/util/GetStepRoom';\nimport { ROUTES } from '@/util/RouteManager';\nimport StepManager from '@/util/StepManager';\n\nimport { EngineBodyLayout } from './EngineBodyLayout';\nimport { EnginePageLayout } from './EnginePageLayout';\n\nconst AccountRouter = React.lazy(() =>\n import('@/pages/account/AccountRouter').then(({ AccountRouter }) => ({\n default: AccountRouter,\n }))\n);\n\nexport function FullPageEngineContextWrapper() {\n const basketContext = useContext(BasketContext);\n const ccx = useContext(CompanyContext);\n const beContext = useContext(BookingEngineContext);\n\n const [engineReady, setEngineReady] = useState(false);\n const [urlFlagsParsed, setUrlFlagsParsed] = useState(false);\n const [urlParameters, setUrlParameters] = useState<FullPageBookingEngineUrlParameters>({});\n\n const [currentStep, setCurrentStep] = useState<Step>(StepManager.getStepFromName(beContext.engine.getInitialSession()?.step as string) ?? StepManager.getFirstStep());\n const [initialStep, setInitialStep] = useState<Step>(StepManager.getFirstStep());\n\n const { hotel } = useCurrentHotel();\n\n const location = useLocation();\n const historyConsistentPush = useHistoryConsistentPush();\n const navigate = useNavigate();\n\n const isInStepRoot = useMatch(StepManager.STEP_BASE);\n\n useEffect(() => {\n beContext.sessionProvider?.updateSession({ step: currentStep.getName() });\n\n if (currentStep === StepHotel) {\n ccx.changeHotel(null);\n }\n }, [currentStep]);\n\n useEffect(() => {\n const currentBasketRows = basketContext.currentBasketRows;\n\n let addXRooms = 1;\n\n // TODO: this probably needs to be the only place this is set, and listen for URL changes\n if (currentBasketRows.length === 0) {\n const urlParameterBuilder: FullPageBookingEngineUrlParameters = {};\n // The Choose Hotel step should not apply the room filter\n const shouldEnableRoomCodeFilter = currentStep.getName() !== StepHotel.getName();\n\n if (location.search) {\n const query = new URLSearchParams(location.search);\n\n const format = API_DATE_FORMAT;\n\n let start = dayjs(query.get(EAppQueryParameters.Arrive), format);\n let end = dayjs(query.get(EAppQueryParameters.Depart), format);\n\n const promoCode = query.get(EAppQueryParameters.PromoCode);\n const promoOnly = query.get(EAppQueryParameters.PromoOnly);\n\n const promoFeatured = query.get(EAppQueryParameters.PromoFeatured);\n\n if (promoCode) {\n urlParameterBuilder.promoCode = promoCode;\n }\n\n if (promoOnly && promoOnly.toLowerCase() !== 'false') {\n urlParameterBuilder.promoOnly = Boolean(promoOnly);\n }\n\n if (promoFeatured && promoFeatured.toLowerCase() !== 'false') {\n FeatureProvider.load(FeaturedPromoFeature);\n urlParameterBuilder.promoFeatured = true;\n }\n\n const updatedCurrentFilters = { ...beContext.currentFilters };\n const roomCode = query.get(EAppQueryParameters.Room);\n\n if (roomCode && shouldEnableRoomCodeFilter) {\n // TODO: Refactor this to come from this context instead.\n updatedCurrentFilters['RoomType'] = new RoomTypeFilter([roomCode]);\n }\n\n const rateCode = query.get(EAppQueryParameters.Rate);\n if (rateCode) {\n // TODO: Refactor this to come from this context instead.\n updatedCurrentFilters['RateType'] = new RateTypeFilter([rateCode]);\n }\n beContext.setCurrentFilters(updatedCurrentFilters);\n\n const hotelId = query.get(EAppQueryParameters.Hotel);\n\n if (hotelId) {\n if (ccx.changeHotel(hotelId)) {\n if (!start.isValid()) {\n start = dayjs().add(1, 'day');\n }\n\n if (!end.isValid()) {\n end = start.add(1, 'day');\n }\n\n setInitialStep(getStepRoom());\n }\n\n urlParameterBuilder.hotelId = hotelId;\n }\n\n const defaultCity = query.get(EAppQueryParameters.DefaultCity);\n if (defaultCity) {\n urlParameterBuilder.defaultCity = defaultCity;\n }\n\n // We're doing dates last, as other properties, like hotelID might change them if they're not already set\n if (start.isValid() && end.isValid()) {\n if (start.isBefore(dayjs())) {\n start = dayjs();\n }\n\n if (end.isBefore(start)) {\n end = start.add(1, 'day');\n } else if (end.isBefore(dayjs().add(1, 'day'))) {\n end = dayjs().add(1, 'day');\n }\n\n urlParameterBuilder.startDate = start;\n urlParameterBuilder.endDate = end;\n }\n\n const parseQueryInt = (key: string, min = 0): number | undefined => {\n const value = Number.parseInt(query.get(key) ?? '', 10);\n return Number.isNaN(value) || value < min ? undefined : value;\n };\n\n addXRooms = parseQueryInt(EAppQueryParameters.Rooms, 1) ?? 1;\n const globalAdults = parseQueryInt(EAppQueryParameters.Adults, 1);\n const globalChildren = parseQueryInt(EAppQueryParameters.Children);\n const globalInfants = parseQueryInt(EAppQueryParameters.Infants);\n\n urlParameterBuilder.rooms = [];\n\n for (let i = 0; i < addXRooms; i++) {\n let roomOccupancy = 1;\n\n let adults = parseQueryInt(`adults-${i + 1}`, 1) ?? globalAdults;\n query.delete(`adults-${i + 1}`);\n\n if (adults && hotel?.maxOccupancy && (roomOccupancy = adults) > hotel.maxOccupancy) {\n adults = undefined;\n }\n\n let children = parseQueryInt(`children-${i + 1}`) ?? globalChildren;\n query.delete(`children-${i + 1}`);\n\n if (children && hotel?.maxOccupancy && (roomOccupancy += children) > hotel.maxOccupancy) {\n children = undefined;\n }\n\n let infants = parseQueryInt(`infants-${i + 1}`) ?? globalInfants;\n query.delete(`infants-${i + 1}`);\n\n if (infants && hotel?.maxOccupancy && hotel.countInfantsInOccupancy && (roomOccupancy += infants) > hotel.maxOccupancy) {\n infants = undefined;\n }\n\n urlParameterBuilder.rooms[i] = { adults, children, infants };\n }\n\n navigate({ search: query.toString() }, { replace: true });\n setUrlParameters(urlParameterBuilder);\n }\n\n let firstBasketRow: BasketRow | undefined = undefined;\n const { startDate, endDate, promoCode, promoOnly, rooms } = urlParameterBuilder;\n for (let i = 0; i < addXRooms; i++) {\n const { adults, children, infants } = rooms?.[i] ?? {};\n const basketRow = new BasketRow(undefined, undefined, shouldEnableRoomCodeFilter);\n\n if (startDate) {\n basketRow.setStartDate(startDate);\n }\n\n if (endDate) {\n basketRow.setEndDate(endDate);\n }\n\n if (promoCode) {\n basketRow.setPromoCode(promoCode);\n }\n\n if (promoOnly) {\n basketRow.setPromoOnly(promoOnly);\n }\n\n if (adults) {\n basketRow.setAdults(adults);\n }\n\n if (children) {\n basketRow.setChildren(children);\n }\n\n if (infants) {\n basketRow.setInfants(infants);\n }\n\n basketContext.addBasketRow(basketRow);\n\n if (i === 0) {\n firstBasketRow = basketRow;\n }\n }\n\n if (firstBasketRow?.getStartDate() && firstBasketRow.getEndDate() && StepManager.getFirstStep() !== StepHotel) {\n basketContext.selectBasketRow(firstBasketRow);\n setInitialStep(getStepRoom());\n }\n } else {\n const initialSession = beContext.engine.getInitialSession();\n if (initialSession) {\n setInitialStep(StepManager.getStepFromName(initialSession.step) as Step);\n }\n }\n\n setUrlFlagsParsed(true);\n }, []);\n\n /**\n * Engine Ready useEffect, used to deffer loading the UI until everything engine wise is set up properly\n */\n useEffect(() => {\n if (!engineReady) {\n if (ccx.hotels.length > 0 && urlFlagsParsed) {\n setEngineReady(true);\n }\n }\n }, [ccx.hotels, urlFlagsParsed]);\n\n useEffect(() => {\n if (engineReady) {\n if (isInStepRoot && initialStep) {\n // We want to respect the browsers pathname, and only redirect to a defined step if\n // the pathname isn't set, or matches an unknown page.\n\n // Is the current location in the path? i.e does the user want to be somewhere specific\n let pathInLoadedSteps = false;\n for (const step of StepManager.getSteps()) {\n // Using match instead of equals as some clients have skipped the trailing slash\n // We also want to make sure to only match the start of the path, in case step contains nested paths.\n if (location.pathname.match(new RegExp(`${step.getStepUrl()}.+`, 'ig'))) {\n pathInLoadedSteps = true;\n break;\n }\n }\n\n // We're in /step/ but on a not recognized one.\n if (!pathInLoadedSteps) {\n historyConsistentPush(initialStep.getStepUrl());\n }\n }\n }\n }, [engineReady]);\n\n useEffect(() => {\n if (hotel?.currentRoomSort) {\n beContext.setCurrentRoomSort(hotel?.currentRoomSort);\n }\n }, [hotel?.currentRoomSort]);\n\n const workingContext: FullPageEngineContextType = { urlParameters, currentStep, setCurrentStep };\n\n return (\n <FullPageEngineContext.Provider value={workingContext}>\n <ModalContextWrapper>\n <ScrollToTop />\n <header className=\"engine-header\">\n <Header />\n </header>\n\n {engineReady && (\n <Routes>\n <Route path=\"/\" element={<Navigate to={StepManager.getFirstStep().getStepUrl()} replace />} />\n\n <Route path=\"/step\" element={<EngineBodyLayout />}>\n {StepManager.getSteps().map((step: Step) => (\n <Route key={step.getName()} path={`${step.getStepUrl()}*`} element={<StepRoute step={step} />} />\n ))}\n </Route>\n\n {/**\n * We aren't on a /step/ path, or the root path, so it's probably one of the engine-page paths.\n * If no matching path is found, we'll redirect back to the first step.\n */}\n <Route path=\"/*\" element={<EnginePageLayout />}>\n {/* TODO: This startsWith('/') check should be temporary. We should update the Route in client config after this is merged. */}\n <Route\n path={ROUTES.HOTEL_INFO.startsWith('/') ? ROUTES.HOTEL_INFO.substring(1) : ROUTES.HOTEL_INFO}\n element={\n <React.Suspense fallback={<HotelInfoPlaceholder />}>\n <HotelInfo />\n </React.Suspense>\n }\n />\n\n {Object.values(EFindReservationPath)\n .filter((path) => MemberPortalFeature.isActive() || path === EFindReservationPath.FindReservation)\n .map((path) => (\n <Route\n key={path}\n path={path}\n element={\n <React.Suspense fallback={<div>Loading...</div>}>\n <FindReservation />\n </React.Suspense>\n }\n />\n ))}\n\n <Route\n path=\"find-reservation/:ref/:email\"\n element={\n <React.Suspense fallback={<div>Loading...</div>}>\n <FindReservationResults />\n </React.Suspense>\n }\n />\n\n <Route\n path=\"account/*\"\n element={\n <PrivateRoute>\n {MemberPortalFeature.isActive() && (\n <React.Suspense\n fallback={\n <div>\n <LargeLoader />\n </div>\n }\n >\n <AccountRouter />\n </React.Suspense>\n )}\n </PrivateRoute>\n }\n />\n\n {/* We haven't found a matching path, so just redirect to the first step. */}\n <Route path=\"*\" element={<Navigate to={StepManager.getFirstStep().getStepUrl()} replace />} />\n </Route>\n </Routes>\n )}\n\n <RoomstayMark />\n </ModalContextWrapper>\n </FullPageEngineContext.Provider>\n );\n}\n"]}