@roomstay/frontend 2.0.0-1 → 2.0.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/201.bundle.js +1 -1
- package/dist/218.bundle.js +1 -1
- package/dist/279.bundle.js +1 -1
- package/dist/370.bundle.js +1 -1
- package/dist/449.bundle.js +1 -1
- package/dist/873.bundle.js +1 -1
- package/dist/882.bundle.js +1 -1
- package/dist/972.bundle.js +1 -1
- package/dist/main.bundle.js +1 -1
- package/dist/src/components/steps/confirmation/PaymentDetails/StepConfirmationPaymentDetails.js +1 -11
- package/dist/src/components/steps/confirmation/PaymentDetails/StepConfirmationPaymentDetails.js.map +1 -1
- package/dist/src/components/steps/confirmation/RoomContactDetails.js +2 -1
- package/dist/src/components/steps/confirmation/RoomContactDetails.js.map +1 -1
- package/dist/src/components/steps/room/MemberSignInModal/MemberSignInModal.js +18 -12
- package/dist/src/components/steps/room/MemberSignInModal/MemberSignInModal.js.map +1 -1
- package/dist/src/components/steps/room/RoomList.js +1 -1
- package/dist/src/components/steps/room/RoomList.js.map +1 -1
- package/dist/src/components/steps/room/StepRoomErrorForm.js +2 -1
- package/dist/src/components/steps/room/StepRoomErrorForm.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/RoomDetails.js +8 -8
- package/dist/src/components/steps/room/roomDetails/RoomDetails.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/MembersOnlyRow.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateListPromotion/RoomRateListPromotion.d.ts +7 -0
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateListPromotion/RoomRateListPromotion.js +31 -0
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateListPromotion/RoomRateListPromotion.js.map +1 -0
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRates.js +14 -7
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRates.js.map +1 -1
- package/dist/src/contexts/BasketContext/BasketContextType.js.map +1 -1
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js +12 -8
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
- package/dist/src/contexts/CompanyContext/CompanyContextType.type.d.ts +3 -1
- package/dist/src/contexts/CompanyContext/CompanyContextType.type.js.map +1 -1
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +9 -1
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +3 -2
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
- package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js.map +1 -1
- package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js +71 -1
- package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js.map +1 -1
- package/dist/src/events/RoomstayEventManager.d.ts +1 -1
- package/dist/src/events/RoomstayEventManager.js +23 -4
- package/dist/src/events/RoomstayEventManager.js.map +1 -1
- package/dist/src/events/actions/MemberOnlyFence/MemberOnlyFenceSignUp.d.ts +7 -0
- package/dist/src/events/actions/MemberOnlyFence/MemberOnlyFenceSignUp.js +15 -0
- package/dist/src/events/actions/MemberOnlyFence/MemberOnlyFenceSignUp.js.map +1 -0
- package/dist/src/events/actions/Promotion/PromotionAddedEvent.d.ts +7 -0
- package/dist/src/events/actions/Promotion/PromotionAddedEvent.js +15 -0
- package/dist/src/events/actions/Promotion/PromotionAddedEvent.js.map +1 -0
- package/dist/src/events/actions/Promotion/PromotionClickedEvent.d.ts +7 -0
- package/dist/src/events/actions/Promotion/PromotionClickedEvent.js +15 -0
- package/dist/src/events/actions/Promotion/PromotionClickedEvent.js.map +1 -0
- package/dist/src/events/actions/Promotion/PromotionRemovedEvent.d.ts +7 -0
- package/dist/src/events/actions/Promotion/PromotionRemovedEvent.js +15 -0
- package/dist/src/events/actions/Promotion/PromotionRemovedEvent.js.map +1 -0
- package/dist/src/events/index.d.ts +1 -0
- package/dist/src/events/index.js +1 -0
- package/dist/src/events/index.js.map +1 -1
- package/dist/src/hooks/EventHook.d.ts +1 -1
- package/dist/src/hooks/EventHook.js +2 -2
- package/dist/src/hooks/EventHook.js.map +1 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/models/Promotion/IPromotion.type.d.ts +27 -0
- package/dist/src/models/Promotion/IPromotion.type.js +3 -0
- package/dist/src/models/Promotion/IPromotion.type.js.map +1 -0
- package/dist/src/pages/findReservation/FindReservation.js +2 -1
- package/dist/src/pages/findReservation/FindReservation.js.map +1 -1
- package/dist/src/providers/LanguageProvider.d.ts +14 -3
- package/dist/src/providers/LanguageProvider.js +3 -19
- package/dist/src/providers/LanguageProvider.js.map +1 -1
- package/dist/src/providers/PromotionProvider.d.ts +14 -0
- package/dist/src/providers/PromotionProvider.js +213 -0
- package/dist/src/providers/PromotionProvider.js.map +1 -0
- package/dist/src/util/ObjectHelper.d.ts +4 -0
- package/dist/src/util/ObjectHelper.js +25 -0
- package/dist/src/util/ObjectHelper.js.map +1 -0
- package/dist/src/util/Validation.d.ts +1 -0
- package/dist/src/util/Validation.js +2 -1
- package/dist/src/util/Validation.js.map +1 -1
- package/dist/test.bundle.js +1 -1
- package/dist/tests/jest/helpers/ObjectHelper.test.d.ts +1 -0
- package/dist/tests/jest/helpers/ObjectHelper.test.js +72 -0
- package/dist/tests/jest/helpers/ObjectHelper.test.js.map +1 -0
- package/dist/tests/offline/entry/RSCompany.js +42 -1
- package/dist/tests/offline/entry/RSCompany.js.map +1 -1
- package/dist/vendors.bundle.js +1 -1
- package/package.json +1 -1
- package/dist/src/components/steps/confirmation/StepConfirmationPaymentDetails.d.ts +0 -8
- package/dist/src/components/steps/confirmation/StepConfirmationPaymentDetails.js +0 -241
- package/dist/src/components/steps/confirmation/StepConfirmationPaymentDetails.js.map +0 -1
- package/dist/src/contexts/BasketContext/BasketContextType.d.ts +0 -41
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasketContextWrapper.js","sourceRoot":"/","sources":["src/contexts/BasketContext/BasketContextWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as dayjs from 'dayjs';\nimport * as React from 'react';\nimport { useContext, useEffect, useReducer, useState } from 'react';\n\nimport { useTranslation } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\n\nimport { BasketContextType, RoomstayMemberContext, useMemberContext } from '@frontend/contexts';\nimport { BasketContext, BookingEngineContext, CompanyContext, ErrorHandler, NotificationContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { BasketReducer } from 'reducers/BasketReducer';\nimport API from 'api/BookingAPI';\nimport { IconType } from 'components/generic/Icon/Icon';\nimport MemberSignInModal from 'components/steps/room/MemberSignInModal/MemberSignInModal';\nimport { BasketContextErrorHandler } from 'handlers/BasketContextErrorHandler';\nimport { Addon } from 'models/Addon/Addon';\nimport ReservationsDTO from 'models/Api/ReservationsDTO';\nimport BasketAddonRow from 'models/BasketAddonRow';\nimport BasketRow from 'models/BasketRow';\nimport { RoomRate } from 'models/Room/RoomRate';\nimport StepAddon from 'pages/steps/StepAddon/StepAddon';\nimport StepRoom from 'pages/steps/StepRoom/StepRoom';\nimport StepThanks from 'pages/steps/StepThanks/StepThanks';\nimport InlineAddonStepFeature from 'providers/feature/InlineAddonStepFeature';\nimport DataLayer from 'util/DataLayer';\nimport StepManager from 'util/StepManager';\nimport StringHelper from 'util/StringHelper';\nimport { Translation } from 'translations/Translation';\nimport Text from 'components/generic/Text';\n\nexport interface BasketContextWrapperProps {\n children: React.ReactNode;\n}\n\nexport function BasketContextWrapper(props: BasketContextWrapperProps) {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n\n const notifications = useContext(NotificationContext);\n const beContext = useContext(BookingEngineContext);\n const ccx = useContext(CompanyContext);\n const memberContext = useMemberContext();\n\n const initialSession = beContext?.engine?.getInitialSession();\n\n const [currentBasketRows, basketRowReducer] = useReducer(BasketReducer, initialSession?.basketRows ?? []);\n\n const [selectedBasketRow, setSelectedBasketRow] = useState<BasketRow>(null);\n const [basketAddonRows, setBasketAddonRows] = useState<BasketAddonRow[]>([]);\n\n let loadedStartDate: dayjs.Dayjs;\n let loadedEndDate: dayjs.Dayjs;\n\n if (initialSession?.basketRows?.length) {\n loadedStartDate = initialSession.basketRows[0].getStartDate();\n loadedEndDate = initialSession.basketRows[0].getEndDate();\n } else {\n if (initialSession?.startDate) {\n loadedStartDate = initialSession.startDate;\n }\n\n if (initialSession?.endDate) {\n loadedEndDate = initialSession.endDate;\n }\n }\n\n const [startDate, setStartDate] = useState<dayjs.Dayjs>(loadedStartDate ?? null);\n const [endDate, setEndDate] = useState<dayjs.Dayjs>(loadedEndDate ?? null);\n\n const [hasCheckedOut, setHasCheckedOut] = useState(false);\n const [reservationData, setReservationData] = useState<ReservationsDTO>(initialSession.reservation || null);\n\n const [knownErrorPromoCodes, setKnownErrorPromoCodes] = useState<string[]>([]);\n\n const history = useHistory();\n\n BasketContextErrorHandler.handleAvailabilityWarnings = (warnings: string[]) => {\n warnings.map((warning) => {\n if (warning.toLowerCase().startsWith('invalid promo code')) {\n const promoCode = warning.substr(20);\n\n currentBasketRows.forEach((row) => {\n if (promoCode.toLowerCase() === row.getPromoCode().toLowerCase()) {\n row.setPromoCodeStatus('invalid');\n workingContext.updateBasketRow(row, false);\n }\n });\n\n if (!knownErrorPromoCodes.includes(promoCode.toUpperCase())) {\n setKnownErrorPromoCodes((oldCodes) => {\n return [...oldCodes, promoCode.toUpperCase()];\n });\n }\n } else {\n ErrorHandler.add({\n message: warning,\n });\n }\n });\n };\n\n BasketContextErrorHandler.handlePromoSuccess = (promo: string) => {\n currentBasketRows.forEach((row) => {\n if (row.getPromoCode() === promo && row.getPromoCode() && row.getPromoCodeStatus() !== 'valid') {\n row.setPromoCodeStatus('valid');\n workingContext.updateBasketRow(row, false);\n }\n });\n };\n\n useEffect(() => {\n if (!startDate || !endDate) {\n return;\n }\n\n beContext.sessionProvider?.updateSession({\n startDate,\n endDate,\n });\n\n // TODO re-visit this as we don't want to set dates for everything constantly\n workingContext.getAllDatelessRows().forEach((row: BasketRow) => {\n row.setStartDate(startDate);\n row.setEndDate(endDate);\n\n workingContext.updateBasketRow(row);\n });\n\n if (selectedBasketRow) {\n selectedBasketRow.setStartDate(startDate);\n selectedBasketRow.setEndDate(endDate);\n\n workingContext.updateBasketRow(selectedBasketRow, false);\n } else if (currentBasketRows.length === 1) {\n const onlyBasketRow = currentBasketRows[0];\n onlyBasketRow.setStartDate(startDate);\n onlyBasketRow.setEndDate(endDate);\n\n workingContext.updateBasketRow(onlyBasketRow, false);\n }\n }, [startDate, endDate]);\n\n useEffect(() => {\n beContext.sessionProvider?.updateSession({ basketRows: currentBasketRows });\n }, [currentBasketRows, selectedBasketRow]);\n\n const checkAndApplyMemberOnlyPromo = (row: BasketRow) => {\n if (hotel?.memberOnlyPromoCode && localStorage.getItem('hotel' + hotel?.hotelID + 'user') && !row.getPromoCode()) {\n row.setPromoCode(hotel?.memberOnlyPromoCode);\n workingContext.updateBasketRow(row);\n }\n };\n\n /**\n * This is necessary as when we're adding our first row, hotel might not be set.\n */\n useEffect(() => {\n checkAndApplyMemberOnlyPromo(selectedBasketRow);\n }, [hotel]);\n\n const returnAggregationAndTranslation = (reduction: ((row: BasketRow) => number) | number, translation?: string) => {\n const count = typeof reduction === 'number' ? reduction : currentBasketRows.reduce((total, row) => total + reduction(row), 0);\n\n if (translation) {\n return StringHelper.pluralWithDictAndCount(count, translation, t);\n } else {\n return count;\n }\n };\n\n const getNextAvailableBasketRow = (exclude?: BasketRow): BasketRow => {\n const arrayLength = currentBasketRows.length;\n for (let i = 0; i < arrayLength; i++) {\n if ((!exclude || (exclude && exclude.getID() !== currentBasketRows[i].getID())) && !currentBasketRows[i].getRate()) {\n return currentBasketRows[i];\n }\n }\n\n return null;\n };\n\n const workingContext: BasketContextType = {\n startDate,\n endDate,\n\n selectedBasketRow,\n currentBasketRows,\n basketAddonRows,\n\n hasCheckedOut,\n reservationData,\n\n /**\n * When adding a basket row, will check if there is a `selectedBasketRow`\n * if one is already set, row will simply get added, otherwise selectedBasketRow\n * gets set\n */\n addBasketRow: (row: BasketRow, selectThisRate = false, neverSelectThisRate = false) => {\n if ((!row.getStartDate() || !row.getEndDate()) && startDate && endDate) {\n row.setStartDate(startDate);\n row.setEndDate(endDate);\n } else if (!startDate && !endDate && row.getStartDate() && row.getEndDate()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n }\n\n checkAndApplyMemberOnlyPromo(row);\n\n if (\n (!selectedBasketRow && (!row.isValid() || !currentBasketRows.length || currentBasketRows.length - workingContext.getAllValidRows().length === 0)) ||\n selectThisRate\n ) {\n if (!neverSelectThisRate) {\n setSelectedBasketRow(row);\n }\n }\n\n basketRowReducer({ method: 'Add', row });\n },\n\n //TODO: This function needs to be refactored to simplify a lot of this logic, and move notification raising to use the Event Manager instead\n addRate: async (rate: RoomRate, notify = true) => {\n let basketRow: BasketRow = null;\n let translationString: string;\n\n let addons = [];\n\n if (selectedBasketRow) {\n basketRow = selectedBasketRow;\n if (selectedBasketRow.getRate()) {\n translationString = Translation.Misc.RoomUpdatedNotification;\n } else {\n if (!selectedBasketRow.getStartDate() && selectedBasketRow.getEndDate()) {\n selectedBasketRow.setStartDate(startDate);\n selectedBasketRow.setEndDate(endDate);\n }\n\n translationString = Translation.Misc.RoomAddedNotification;\n }\n } else {\n if (!startDate || !endDate) {\n console.error('room selected with no date values.');\n return;\n }\n\n basketRow = new BasketRow(rate);\n\n basketRow.setStartDate(startDate);\n basketRow.setEndDate(endDate);\n\n translationString = Translation.Misc.RoomAddedNotification;\n }\n\n if (InlineAddonStepFeature.isActive()) {\n basketRow.setRate(rate); // TODO: Fix quick hack to make the Addons load\n addons = await API.Addons.findAddons([basketRow], hotel.hotelID);\n }\n\n basketRowReducer({ method: 'AddRate', rate, row: basketRow });\n\n try {\n DataLayer.instance.sendRoomRateAddToCart(rate, basketRow.getNumberOfDays(), startDate ?? basketRow.getStartDate(), endDate ?? basketRow.getEndDate());\n } catch (ex) {\n console.log('Failed recording basket Add event');\n }\n\n if (notify) {\n notifications.addNotification({\n icon: IconType.Bed,\n children: (\n <Text inline={true}>\n {t(translationString)} <strong className=\"u-marg-left--light\">{rate.getRoom().name}</strong>\n </Text>\n ),\n ttl: 3000,\n });\n }\n\n const nextAvailable = getNextAvailableBasketRow(basketRow);\n\n if (nextAvailable) {\n setSelectedBasketRow(nextAvailable);\n } else {\n setSelectedBasketRow(null);\n const isNextStepAddon = StepManager.getNextStepUrl(StepRoom) === StepAddon.getStepUrl();\n\n if (isNextStepAddon) {\n if (addons.length) {\n history.push(StepAddon.getStepUrl());\n } else {\n history.push(StepManager.getNextStepUrl(StepAddon));\n }\n } else {\n history.push(StepManager.getNextStepUrl(StepRoom));\n }\n }\n },\n\n /**\n * Filter global list of rooms based on their validity.\n *\n * Useful for getting a complete summary of all the rooms.\n */\n getAllValidRows: () => {\n return currentBasketRows.filter((item) => item.isValid());\n },\n getAllDatelessRows: () => {\n return currentBasketRows.filter((item) => !item.getStartDate() || !item.getEndDate());\n },\n\n getNumberOfAdults: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getAdults(), withTranslation ? Translation.Step.Date.Adult : null);\n },\n\n getNumberOfChildren: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getChildren(), withTranslation ? Translation.Step.Date.Child : null);\n },\n\n getNumberOfRooms: (withTranslation = false) => {\n return returnAggregationAndTranslation(currentBasketRows.length, withTranslation ? Translation.Step.Date.Room : null);\n },\n\n getTotalPrice: () => {\n let totalPrice = returnAggregationAndTranslation((row) => (row.isValid() ? row.getRate().getTotalPrice() : 0)) as number;\n\n basketAddonRows.forEach((row) => {\n totalPrice += row.getTotalPrice();\n });\n\n return totalPrice;\n },\n\n /**\n * Pops the provided row from the current basket array\n */\n removeBasketRow: (row: BasketRow) => {\n const rowsBeforeRemoval = currentBasketRows.length;\n\n basketRowReducer({ method: 'Remove', row });\n\n if (selectedBasketRow && row.getID() === selectedBasketRow.getID()) {\n setSelectedBasketRow(getNextAvailableBasketRow(row));\n }\n\n if (rowsBeforeRemoval === 1) {\n workingContext.addBasketRow(new BasketRow(), true);\n }\n },\n\n clearBasketRows: (confirm: boolean) => {\n if (confirm) {\n basketRowReducer({ method: 'Clear' });\n }\n },\n\n updateBasketRow: (row: BasketRow, updateGlobalDates = true) => {\n if (updateGlobalDates && row.getID() === selectedBasketRow?.getID()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n }\n\n basketRowReducer({ method: 'Update', row });\n },\n\n /**\n * Select passed basket row, and update all inputs (like start date)\n */\n selectBasketRow: async (row: BasketRow) => {\n if (row && row.isValid()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n\n setSelectedBasketRow(row);\n } else {\n setSelectedBasketRow(getNextAvailableBasketRow());\n }\n },\n\n setStartDate,\n setEndDate,\n\n booked: (data: ReservationsDTO) => {\n beContext.sessionProvider?.updateSession({\n reservation: data,\n });\n setReservationData(data);\n },\n\n rollback: () => {\n beContext.sessionProvider?.updateSession({\n reservation: null,\n });\n setReservationData(null);\n },\n\n checkedOut: (data: ReservationsDTO) => {\n setHasCheckedOut(true);\n setReservationData(data);\n\n setSelectedBasketRow(null);\n basketRowReducer({ method: 'Clear' });\n\n const row = new BasketRow();\n row.setStartDate(dayjs().add(1, 'day'));\n row.setEndDate(dayjs().add(2, 'day'));\n\n basketRowReducer({ method: 'Add', row });\n setBasketAddonRows([]);\n\n const sessionProvider = beContext?.engine?.getSessionProvider();\n sessionProvider.deleteSession();\n sessionProvider?.initialize(undefined, beContext?.engine?.getSource());\n const params = new URLSearchParams(window.location.search);\n params.delete('planpay_checkout_id');\n window.history.replaceState({}, '', `${window.location.pathname}?${params}`);\n history.push(StepThanks.getStepUrl());\n\n memberContext.fetchRoomstayMember();\n },\n\n clearSelectedRates: () => {\n setSelectedBasketRow(null);\n },\n\n getRowForAddon: (selectedAddon) => {\n if (selectedAddon === undefined) {\n return;\n }\n return basketAddonRows.find((r) => r.getAddon()?.code === selectedAddon?.code);\n },\n\n setAddonQuantities: (addon: Addon, quantities: { quantity: number; adult: number; child: number }, selectedDate: string, selectedTime: string) => {\n let addonRow = basketAddonRows.find((r) => r.getAddon()?.code === addon.code);\n if (addonRow === undefined) {\n addonRow = new BasketAddonRow(addon);\n basketAddonRows.push(addonRow);\n }\n\n addonRow.setQuantity(quantities.quantity ?? 0);\n addonRow.setAdultQuantity(quantities.adult ?? 0);\n addonRow.setChildQuantity(quantities.child ?? 0);\n addonRow.setSelectedDate(selectedDate);\n addonRow.setSelectedTime(addon.availability[selectedDate].selectorTimes ? selectedTime : undefined);\n\n setBasketAddonRows([...basketAddonRows]);\n },\n\n removeBasketAddonRow: (row: BasketAddonRow) => {\n setBasketAddonRows((oldRows) => oldRows.filter((item) => item.getID() !== row.getID()));\n },\n\n attemptSelectUnfilledRow: () => {\n const row = getNextAvailableBasketRow();\n\n if (row) {\n setSelectedBasketRow(row);\n return row;\n }\n },\n };\n\n return (\n <BasketContext.Provider value={workingContext}>\n {props.children}\n <MemberSignInModal isOpen={ccx.isSigningIn} onClose={ccx.closeMemberSignupModal} />\n </BasketContext.Provider>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"BasketContextWrapper.js","sourceRoot":"/","sources":["src/contexts/BasketContext/BasketContextWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as dayjs from 'dayjs';\nimport * as React from 'react';\nimport { useContext, useEffect, useReducer, useState } from 'react';\n\nimport { useTranslation } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\n\nimport { BasketContextType, useMemberContext } from '@frontend/contexts';\nimport { BasketContext, BookingEngineContext, CompanyContext, ErrorHandler, NotificationContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { BasketReducer } from 'reducers/BasketReducer';\nimport API from 'api/BookingAPI';\nimport { IconType } from 'components/generic/Icon/Icon';\nimport MemberSignInModal from 'components/steps/room/MemberSignInModal/MemberSignInModal';\nimport { BasketContextErrorHandler } from 'handlers/BasketContextErrorHandler';\nimport { Addon } from 'models/Addon/Addon';\nimport ReservationsDTO from 'models/Api/ReservationsDTO';\nimport BasketAddonRow from 'models/BasketAddonRow';\nimport BasketRow from 'models/BasketRow';\nimport { RoomRate } from 'models/Room/RoomRate';\nimport StepAddon from 'pages/steps/StepAddon/StepAddon';\nimport StepRoom from 'pages/steps/StepRoom/StepRoom';\nimport StepThanks from 'pages/steps/StepThanks/StepThanks';\nimport InlineAddonStepFeature from 'providers/feature/InlineAddonStepFeature';\nimport DataLayer from 'util/DataLayer';\nimport StepManager from 'util/StepManager';\nimport StringHelper from 'util/StringHelper';\nimport { Translation } from 'translations/Translation';\nimport Text from 'components/generic/Text';\nimport { usePromotionContainer } from 'providers/PromotionProvider';\n\nexport interface BasketContextWrapperProps {\n children: React.ReactNode;\n}\n\nexport function BasketContextWrapper(props: BasketContextWrapperProps) {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n\n const notifications = useContext(NotificationContext);\n const beContext = useContext(BookingEngineContext);\n const ccx = useContext(CompanyContext);\n const memberContext = useMemberContext();\n\n const initialSession = beContext?.engine?.getInitialSession();\n\n const [currentBasketRows, basketRowReducer] = useReducer(BasketReducer, initialSession?.basketRows ?? []);\n\n const [selectedBasketRow, setSelectedBasketRow] = useState<BasketRow>(null);\n const [basketAddonRows, setBasketAddonRows] = useState<BasketAddonRow[]>([]);\n\n let loadedStartDate: dayjs.Dayjs;\n let loadedEndDate: dayjs.Dayjs;\n\n if (initialSession?.basketRows?.length) {\n loadedStartDate = initialSession.basketRows[0].getStartDate();\n loadedEndDate = initialSession.basketRows[0].getEndDate();\n } else {\n if (initialSession?.startDate) {\n loadedStartDate = initialSession.startDate;\n }\n\n if (initialSession?.endDate) {\n loadedEndDate = initialSession.endDate;\n }\n }\n\n const [startDate, setStartDate] = useState<dayjs.Dayjs>(loadedStartDate ?? null);\n const [endDate, setEndDate] = useState<dayjs.Dayjs>(loadedEndDate ?? null);\n\n const [hasCheckedOut, setHasCheckedOut] = useState(false);\n const [reservationData, setReservationData] = useState<ReservationsDTO>(initialSession.reservation || null);\n\n const [knownErrorPromoCodes, setKnownErrorPromoCodes] = useState<string[]>([]);\n\n const history = useHistory();\n\n BasketContextErrorHandler.handleAvailabilityWarnings = (warnings: string[]) => {\n warnings.map((warning) => {\n if (warning.toLowerCase().startsWith('invalid promo code')) {\n const promoCode = warning.substr(20);\n\n currentBasketRows.forEach((row) => {\n if (promoCode.toLowerCase() === row.getPromoCode().toLowerCase()) {\n row.setPromoCodeStatus('invalid');\n workingContext.updateBasketRow(row, false);\n }\n });\n\n if (!knownErrorPromoCodes.includes(promoCode.toUpperCase())) {\n setKnownErrorPromoCodes((oldCodes) => {\n return [...oldCodes, promoCode.toUpperCase()];\n });\n }\n } else {\n ErrorHandler.add({\n message: warning,\n });\n }\n });\n };\n\n BasketContextErrorHandler.handlePromoSuccess = (promo: string) => {\n currentBasketRows.forEach((row) => {\n if (row.getPromoCode() === promo && row.getPromoCode() && row.getPromoCodeStatus() !== 'valid') {\n row.setPromoCodeStatus('valid');\n workingContext.updateBasketRow(row, false);\n }\n });\n };\n\n useEffect(() => {\n if (!startDate || !endDate) {\n return;\n }\n\n beContext.sessionProvider?.updateSession({\n startDate,\n endDate,\n });\n\n // TODO re-visit this as we don't want to set dates for everything constantly\n workingContext.getAllDatelessRows().forEach((row: BasketRow) => {\n row.setStartDate(startDate);\n row.setEndDate(endDate);\n\n workingContext.updateBasketRow(row);\n });\n\n if (selectedBasketRow) {\n selectedBasketRow.setStartDate(startDate);\n selectedBasketRow.setEndDate(endDate);\n\n workingContext.updateBasketRow(selectedBasketRow, false);\n } else if (currentBasketRows.length === 1) {\n const onlyBasketRow = currentBasketRows[0];\n onlyBasketRow.setStartDate(startDate);\n onlyBasketRow.setEndDate(endDate);\n\n workingContext.updateBasketRow(onlyBasketRow, false);\n }\n }, [startDate, endDate]);\n\n useEffect(() => {\n beContext.sessionProvider?.updateSession({ basketRows: currentBasketRows });\n }, [currentBasketRows, selectedBasketRow]);\n\n const checkAndApplyMemberOnlyPromo = (row: BasketRow) => {\n if (hotel?.memberOnlyPromoCode && localStorage.getItem('hotel' + hotel?.hotelID + 'user') && !row?.getPromoCode()) {\n row.setPromoCode(hotel?.memberOnlyPromoCode);\n workingContext.updateBasketRow(row);\n }\n };\n\n /**\n * This is necessary as when we're adding our first row, hotel might not be set.\n */\n useEffect(() => {\n checkAndApplyMemberOnlyPromo(selectedBasketRow);\n }, [hotel]);\n\n const returnAggregationAndTranslation = (reduction: ((row: BasketRow) => number) | number, translation?: string) => {\n const count = typeof reduction === 'number' ? reduction : currentBasketRows.reduce((total, row) => total + reduction(row), 0);\n\n if (translation) {\n return StringHelper.pluralWithDictAndCount(count, translation, t);\n } else {\n return count;\n }\n };\n\n const getNextAvailableBasketRow = (exclude?: BasketRow): BasketRow => {\n const arrayLength = currentBasketRows.length;\n for (let i = 0; i < arrayLength; i++) {\n if ((!exclude || (exclude && exclude.getID() !== currentBasketRows[i].getID())) && !currentBasketRows[i].getRate()) {\n return currentBasketRows[i];\n }\n }\n\n return null;\n };\n\n const updateBasketRow = (row: BasketRow, updateGlobalDates = true) => {\n if (updateGlobalDates && row.getID() === selectedBasketRow?.getID()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n }\n\n basketRowReducer({ method: 'Update', row });\n };\n\n const { loadedPromotion } = usePromotionContainer({ selectedBasketRow, updateBasketRow });\n\n const workingContext: BasketContextType = {\n startDate,\n endDate,\n\n selectedBasketRow,\n currentBasketRows,\n basketAddonRows,\n\n hasCheckedOut,\n reservationData,\n\n loadedPromotion,\n\n /**\n * When adding a basket row, will check if there is a `selectedBasketRow`\n * if one is already set, row will simply get added, otherwise selectedBasketRow\n * gets set\n */\n addBasketRow: (row: BasketRow, selectThisRate = false, neverSelectThisRate = false) => {\n if ((!row.getStartDate() || !row.getEndDate()) && startDate && endDate) {\n row.setStartDate(startDate);\n row.setEndDate(endDate);\n } else if (!startDate && !endDate && row.getStartDate() && row.getEndDate()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n }\n\n checkAndApplyMemberOnlyPromo(row);\n\n if (\n (!selectedBasketRow && (!row.isValid() || !currentBasketRows.length || currentBasketRows.length - workingContext.getAllValidRows().length === 0)) ||\n selectThisRate\n ) {\n if (!neverSelectThisRate) {\n setSelectedBasketRow(row);\n }\n }\n\n basketRowReducer({ method: 'Add', row });\n },\n\n //TODO: This function needs to be refactored to simplify a lot of this logic, and move notification raising to use the Event Manager instead\n addRate: async (rate: RoomRate, notify = true) => {\n let basketRow: BasketRow = null;\n let translationString: string;\n\n let addons = [];\n\n if (selectedBasketRow) {\n basketRow = selectedBasketRow;\n if (selectedBasketRow.getRate()) {\n translationString = Translation.Misc.RoomUpdatedNotification;\n } else {\n if (!selectedBasketRow.getStartDate() && selectedBasketRow.getEndDate()) {\n selectedBasketRow.setStartDate(startDate);\n selectedBasketRow.setEndDate(endDate);\n }\n\n translationString = Translation.Misc.RoomAddedNotification;\n }\n } else {\n if (!startDate || !endDate) {\n console.error('room selected with no date values.');\n return;\n }\n\n basketRow = new BasketRow(rate);\n\n basketRow.setStartDate(startDate);\n basketRow.setEndDate(endDate);\n\n translationString = Translation.Misc.RoomAddedNotification;\n }\n\n if (InlineAddonStepFeature.isActive()) {\n basketRow.setRate(rate); // TODO: Fix quick hack to make the Addons load\n addons = await API.Addons.findAddons([basketRow], hotel.hotelID);\n }\n\n basketRowReducer({ method: 'AddRate', rate, row: basketRow });\n\n try {\n DataLayer.instance.sendRoomRateAddToCart(rate, basketRow.getNumberOfDays(), startDate ?? basketRow.getStartDate(), endDate ?? basketRow.getEndDate());\n } catch (ex) {\n console.log('Failed recording basket Add event');\n }\n\n if (notify) {\n notifications.addNotification({\n icon: IconType.Bed,\n children: (\n <Text inline={true}>\n {t(translationString)} <strong className=\"u-marg-left--light\">{rate.getRoom().name}</strong>\n </Text>\n ),\n ttl: 3000,\n });\n }\n\n const nextAvailable = getNextAvailableBasketRow(basketRow);\n\n if (nextAvailable) {\n setSelectedBasketRow(nextAvailable);\n } else {\n setSelectedBasketRow(null);\n const isNextStepAddon = StepManager.getNextStepUrl(StepRoom) === StepAddon.getStepUrl();\n\n if (isNextStepAddon) {\n if (addons.length) {\n history.push(StepAddon.getStepUrl());\n } else {\n history.push(StepManager.getNextStepUrl(StepAddon));\n }\n } else {\n history.push(StepManager.getNextStepUrl(StepRoom));\n }\n }\n },\n\n /**\n * Filter global list of rooms based on their validity.\n *\n * Useful for getting a complete summary of all the rooms.\n */\n getAllValidRows: () => {\n return currentBasketRows.filter((item) => item.isValid());\n },\n getAllDatelessRows: () => {\n return currentBasketRows.filter((item) => !item.getStartDate() || !item.getEndDate());\n },\n\n getNumberOfAdults: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getAdults(), withTranslation ? Translation.Step.Date.Adult : null);\n },\n\n getNumberOfChildren: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getChildren(), withTranslation ? Translation.Step.Date.Child : null);\n },\n\n getNumberOfRooms: (withTranslation = false) => {\n return returnAggregationAndTranslation(currentBasketRows.length, withTranslation ? Translation.Step.Date.Room : null);\n },\n\n getTotalPrice: () => {\n let totalPrice = returnAggregationAndTranslation((row) => (row.isValid() ? row.getRate().getTotalPrice() : 0)) as number;\n\n basketAddonRows.forEach((row) => {\n totalPrice += row.getTotalPrice();\n });\n\n return totalPrice;\n },\n\n /**\n * Pops the provided row from the current basket array\n */\n removeBasketRow: (row: BasketRow) => {\n const rowsBeforeRemoval = currentBasketRows.length;\n\n basketRowReducer({ method: 'Remove', row });\n\n if (selectedBasketRow && row.getID() === selectedBasketRow.getID()) {\n setSelectedBasketRow(getNextAvailableBasketRow(row));\n }\n\n if (rowsBeforeRemoval === 1) {\n workingContext.addBasketRow(new BasketRow(), true);\n }\n },\n\n clearBasketRows: (confirm: boolean) => {\n if (confirm) {\n basketRowReducer({ method: 'Clear' });\n }\n },\n\n updateBasketRow,\n\n /**\n * Select passed basket row, and update all inputs (like start date)\n */\n selectBasketRow: async (row: BasketRow) => {\n if (row && row.isValid()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n\n setSelectedBasketRow(row);\n } else {\n setSelectedBasketRow(getNextAvailableBasketRow());\n }\n },\n\n setStartDate,\n setEndDate,\n\n booked: (data: ReservationsDTO) => {\n beContext.sessionProvider?.updateSession({\n reservation: data,\n });\n setReservationData(data);\n },\n\n rollback: () => {\n beContext.sessionProvider?.updateSession({\n reservation: null,\n });\n setReservationData(null);\n },\n\n checkedOut: (data: ReservationsDTO) => {\n setHasCheckedOut(true);\n setReservationData(data);\n\n setSelectedBasketRow(null);\n basketRowReducer({ method: 'Clear' });\n\n const row = new BasketRow();\n row.setStartDate(dayjs().add(1, 'day'));\n row.setEndDate(dayjs().add(2, 'day'));\n\n basketRowReducer({ method: 'Add', row });\n setBasketAddonRows([]);\n\n const sessionProvider = beContext?.engine?.getSessionProvider();\n sessionProvider.deleteSession();\n sessionProvider?.initialize(undefined, beContext?.engine?.getSource());\n const params = new URLSearchParams(window.location.search);\n params.delete('planpay_checkout_id');\n window.history.replaceState({}, '', `${window.location.pathname}?${params}`);\n history.push(StepThanks.getStepUrl());\n\n memberContext.fetchRoomstayMember();\n },\n\n clearSelectedRates: () => {\n setSelectedBasketRow(null);\n },\n\n getRowForAddon: (selectedAddon) => {\n if (selectedAddon === undefined) {\n return;\n }\n return basketAddonRows.find((r) => r.getAddon()?.code === selectedAddon?.code);\n },\n\n setAddonQuantities: (addon: Addon, quantities: { quantity: number; adult: number; child: number }, selectedDate: string, selectedTime: string) => {\n let addonRow = basketAddonRows.find((r) => r.getAddon()?.code === addon.code);\n if (addonRow === undefined) {\n addonRow = new BasketAddonRow(addon);\n basketAddonRows.push(addonRow);\n }\n\n addonRow.setQuantity(quantities.quantity ?? 0);\n addonRow.setAdultQuantity(quantities.adult ?? 0);\n addonRow.setChildQuantity(quantities.child ?? 0);\n addonRow.setSelectedDate(selectedDate);\n addonRow.setSelectedTime(addon.availability[selectedDate].selectorTimes ? selectedTime : undefined);\n\n setBasketAddonRows([...basketAddonRows]);\n },\n\n removeBasketAddonRow: (row: BasketAddonRow) => {\n setBasketAddonRows((oldRows) => oldRows.filter((item) => item.getID() !== row.getID()));\n },\n\n attemptSelectUnfilledRow: () => {\n const row = getNextAvailableBasketRow();\n\n if (row) {\n setSelectedBasketRow(row);\n return row;\n }\n },\n };\n\n return (\n <BasketContext.Provider value={workingContext}>\n {props.children}\n <MemberSignInModal isOpen={ccx.isSigningIn} onClose={ccx.closeMemberSignupModal} />\n </BasketContext.Provider>\n );\n}\n"]}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { IPromotion } from 'models/Promotion/IPromotion.type';
|
|
1
2
|
import type BasketRow from 'models/BasketRow';
|
|
2
3
|
import type { Company } from 'models/Client/Hotel/Company';
|
|
3
4
|
import type { Hotel } from 'models/Client/Hotel/Hotel';
|
|
4
5
|
import type { Language } from 'providers/LanguageProvider';
|
|
5
6
|
export type CompanyContextType = Company & {
|
|
6
7
|
selectedHotelID: string;
|
|
8
|
+
memberOnlyModalPromotion: IPromotion | null;
|
|
7
9
|
currentCurrency: string;
|
|
8
10
|
currentLanguage: Language;
|
|
9
11
|
signedInUser: string;
|
|
@@ -13,7 +15,7 @@ export type CompanyContextType = Company & {
|
|
|
13
15
|
setCurrentCurrency: (currency: string) => void;
|
|
14
16
|
setCurrentLanguage: (lang: Language) => void;
|
|
15
17
|
closeMemberSignupModal: () => void;
|
|
16
|
-
openMemberSignupModal: () => void;
|
|
18
|
+
openMemberSignupModal: (promotion?: IPromotion) => void;
|
|
17
19
|
signUserIn: (user: string) => void;
|
|
18
20
|
/**
|
|
19
21
|
* Returns information stored on the Hotel, also calls the API to fetch updated information from the Hotel if it's not been updated already
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompanyContextType.type.js","sourceRoot":"/","sources":["src/contexts/CompanyContext/CompanyContextType.type.ts"],"names":[],"mappings":"","sourcesContent":["import type BasketRow from 'models/BasketRow';\nimport type { Company } from 'models/Client/Hotel/Company';\nimport type { Hotel } from 'models/Client/Hotel/Hotel';\nimport type { Language } from 'providers/LanguageProvider';\n\nexport type CompanyContextType = Company & {\n selectedHotelID: string;\n\n currentCurrency: string;\n currentLanguage: Language;\n\n signedInUser: string;\n isSigningIn: boolean;\n\n updateLowestPricePerNight: (hotelId: string | Hotel, row: BasketRow) => void;\n changeHotel: (hotel: string | Hotel) => boolean;\n\n setCurrentCurrency: (currency: string) => void;\n setCurrentLanguage: (lang: Language) => void;\n\n closeMemberSignupModal: () => void;\n openMemberSignupModal: () => void;\n signUserIn: (user: string) => void;\n\n /**\n * Returns information stored on the Hotel, also calls the API to fetch updated information from the Hotel if it's not been updated already\n *\n * @param hotelId\n * @returns\n */\n getHotel: (hotelId: string) => Promise<Hotel>;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"CompanyContextType.type.js","sourceRoot":"/","sources":["src/contexts/CompanyContext/CompanyContextType.type.ts"],"names":[],"mappings":"","sourcesContent":["import { IPromotion } from 'models/Promotion/IPromotion.type';\nimport type BasketRow from 'models/BasketRow';\nimport type { Company } from 'models/Client/Hotel/Company';\nimport type { Hotel } from 'models/Client/Hotel/Hotel';\nimport type { Language } from 'providers/LanguageProvider';\n\nexport type CompanyContextType = Company & {\n selectedHotelID: string;\n\n memberOnlyModalPromotion: IPromotion | null;\n\n currentCurrency: string;\n currentLanguage: Language;\n\n signedInUser: string;\n isSigningIn: boolean;\n\n updateLowestPricePerNight: (hotelId: string | Hotel, row: BasketRow) => void;\n changeHotel: (hotel: string | Hotel) => boolean;\n\n setCurrentCurrency: (currency: string) => void;\n setCurrentLanguage: (lang: Language) => void;\n\n closeMemberSignupModal: () => void;\n openMemberSignupModal: (promotion?: IPromotion) => void;\n signUserIn: (user: string) => void;\n\n /**\n * Returns information stored on the Hotel, also calls the API to fetch updated information from the Hotel if it's not been updated already\n *\n * @param hotelId\n * @returns\n */\n getHotel: (hotelId: string) => Promise<Hotel>;\n};\n"]}
|
|
@@ -24,6 +24,7 @@ const StepManager_1 = require("util/StepManager");
|
|
|
24
24
|
const StepHotel_1 = require("pages/steps/StepHotel/StepHotel");
|
|
25
25
|
const events_1 = require("@frontend/events");
|
|
26
26
|
const hooks_1 = require("@frontend/hooks");
|
|
27
|
+
const MemberOnlyFenceSignUp_1 = require("events/actions/MemberOnlyFence/MemberOnlyFenceSignUp");
|
|
27
28
|
const CompanyContextWrapper = ({ configCompany: company, children }) => {
|
|
28
29
|
var _a, _b, _c, _d;
|
|
29
30
|
const beContext = (0, react_1.useContext)(contexts_1.BookingEngineContext);
|
|
@@ -44,6 +45,7 @@ const CompanyContextWrapper = ({ configCompany: company, children }) => {
|
|
|
44
45
|
const [selectedHotelID, setSelectedHotelID] = (0, react_1.useState)();
|
|
45
46
|
const [currentCurrency, setCurrentCurrency] = (0, react_1.useState)((_b = (_a = getSelectedHotel()) === null || _a === void 0 ? void 0 : _a.defaultCurrency) !== null && _b !== void 0 ? _b : 'AUD');
|
|
46
47
|
const [currentLanguage, setCurrentLanguage] = (0, react_1.useState)((_d = (_c = getSelectedHotel()) === null || _c === void 0 ? void 0 : _c.defaultLanguage) !== null && _d !== void 0 ? _d : LanguageProvider_1.Language.en_us);
|
|
48
|
+
const [memberOnlyModalPromotion, setMemberOnlyModalPromotion] = (0, react_1.useState)(null);
|
|
47
49
|
const [signedInUser, setSignedInUser] = (0, react_1.useState)(null);
|
|
48
50
|
const [isSigningIn, setIsSigningIn] = (0, react_1.useState)(false);
|
|
49
51
|
const { raise } = (0, hooks_1.useEvent)();
|
|
@@ -218,6 +220,7 @@ const CompanyContextWrapper = ({ configCompany: company, children }) => {
|
|
|
218
220
|
const workingContext = {
|
|
219
221
|
currentLanguage,
|
|
220
222
|
currentCurrency,
|
|
223
|
+
memberOnlyModalPromotion,
|
|
221
224
|
name,
|
|
222
225
|
companyShort,
|
|
223
226
|
logo,
|
|
@@ -266,11 +269,16 @@ const CompanyContextWrapper = ({ configCompany: company, children }) => {
|
|
|
266
269
|
},
|
|
267
270
|
closeMemberSignupModal: () => {
|
|
268
271
|
setIsSigningIn(false);
|
|
272
|
+
setMemberOnlyModalPromotion(null);
|
|
269
273
|
},
|
|
270
|
-
openMemberSignupModal: () => {
|
|
274
|
+
openMemberSignupModal: (promotion) => {
|
|
271
275
|
setIsSigningIn(true);
|
|
276
|
+
if (promotion) {
|
|
277
|
+
setMemberOnlyModalPromotion(promotion);
|
|
278
|
+
}
|
|
272
279
|
},
|
|
273
280
|
signUserIn: (user) => {
|
|
281
|
+
raise(new MemberOnlyFenceSignUp_1.MemberOnlyFenceSignUp(memberOnlyModalPromotion));
|
|
274
282
|
DataLayer_1.default.instance.sendMemberSignUp();
|
|
275
283
|
workingContext.closeMemberSignupModal();
|
|
276
284
|
localStorage.setItem('hotel' + selectedHotelID + 'user', user);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompanyContextWrapper.js","sourceRoot":"/","sources":["src/contexts/CompanyContext/CompanyContextWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { useState, useEffect, useContext, ReactChild, useCallback } from 'react';\n\nimport { BookingEngineContext, CompanyContext, CompanyContextType } from '@frontend/contexts';\nimport type { ConfigCompany } from 'models/Client/Hotel/Company';\nimport type { ConfigHotel, Hotel, InitialHotelDetailsEventPayload } from 'models/Client/Hotel/Hotel';\nimport { Language } from 'providers/LanguageProvider';\nimport { HotelDataSource } from 'models/Client/Hotel/HotelDataSource.types';\nimport TimeHelper from 'util/TimeHelper';\nimport API from 'api/BookingAPI';\nimport BasketRow from 'models/BasketRow';\nimport ColorProfile from 'models/Client/Hotel/ColorProfile';\nimport CurrencyProvider from 'providers/CurrencyProvider';\nimport StaticContextProvider from 'providers/StaticContextProvider';\nimport DataLayer from 'util/DataLayer';\nimport StepManager from 'util/StepManager';\nimport StepHotel from 'pages/steps/StepHotel/StepHotel';\nimport { InitialHotelDetailsEvent } from '@frontend/events';\nimport { useEvent } from '@frontend/hooks';\n\ninterface CompanyContextWrapperProps {\n children: ReactChild;\n configCompany: ConfigCompany;\n}\n\nexport const CompanyContextWrapper = ({ configCompany: company, children }: CompanyContextWrapperProps) => {\n const beContext = useContext(BookingEngineContext);\n\n const getSelectedHotel = () => {\n for (const hotel of hotels) {\n if (selectedHotelID + '' === hotel.hotelID + '') {\n return hotel;\n }\n }\n };\n\n const [name, setName] = useState(company.name);\n const [companyShort, setCompanyShort] = useState(company.companyShort);\n const [logo, setLogo] = useState(company.logo);\n const [colors, setColors] = useState(company.colors);\n const [hotels, setHotels] = useState<Hotel[]>(company.hotels as Hotel[]);\n const [logoLink, setLogoLink] = useState(company.logoLink);\n const [brandSuffix, setBrandSuffix] = useState(company.brandSuffix);\n\n const [selectedHotelID, setSelectedHotelID] = useState<string>();\n\n const [currentCurrency, setCurrentCurrency] = useState<string>(getSelectedHotel()?.defaultCurrency ?? 'AUD');\n const [currentLanguage, setCurrentLanguage] = useState<Language>(getSelectedHotel()?.defaultLanguage ?? Language.en_us);\n\n const [signedInUser, setSignedInUser] = useState(null);\n const [isSigningIn, setIsSigningIn] = useState(false);\n\n const { raise } = useEvent();\n\n const getHotelFromArrayWithId = (id: string, arrayOfHotels: Hotel[] | ConfigHotel[]) => {\n for (const nextHotel of arrayOfHotels) {\n if (nextHotel.hotelID + '' === id + '') {\n return nextHotel;\n }\n }\n };\n const getHotelFromID = (id: string): Hotel => {\n return getHotelFromArrayWithId(id, hotels) as Hotel;\n };\n\n const updateHotel = (newHotel: Hotel, callback?: (hotel: Hotel) => Hotel) => {\n setHotels((oldHotels) => {\n let modified = false;\n const newHotelArray = oldHotels.map((mappingHotel) => {\n if (mappingHotel.hotelID + '' === newHotel.hotelID + '') {\n modified = true;\n\n const hotelDetails: InitialHotelDetailsEventPayload = {\n name: newHotel.name,\n hotelID: newHotel.hotelID,\n hotelUrl: newHotel.hotelUrl,\n currency: newHotel.defaultCurrency,\n language: newHotel.defaultLanguage,\n address: newHotel.address,\n };\n\n const event = new InitialHotelDetailsEvent(hotelDetails);\n raise(event);\n\n if (callback) {\n return callback(mappingHotel);\n }\n\n return newHotel;\n }\n\n return mappingHotel;\n });\n\n if (!modified) {\n newHotelArray.push(newHotel);\n }\n\n return newHotelArray;\n });\n };\n\n const getHotel = useCallback(\n (hotelId: string) =>\n new Promise<Hotel>(async (resolve) => {\n const currentHotelVersion: Hotel = getHotelFromID(hotelId) as Hotel;\n const newHotel: Hotel = {\n ...currentHotelVersion,\n };\n\n const details = await API.Hotel.fetchData(currentLanguage, newHotel);\n\n updateHotel(newHotel, (updatedHotel) => {\n updatedHotel.name = details.name;\n updatedHotel.address = details.address;\n\n updatedHotel.latitude = Number(details.latitude);\n updatedHotel.longitude = Number(details.longitude);\n updatedHotel.phone = details.phone;\n\n updatedHotel.checkInTime = TimeHelper.convert24To12hr(details.checkInTime);\n updatedHotel.checkOutTime = TimeHelper.convert24To12hr(details.checkOutTime);\n\n updatedHotel.paymentCardTypes = details.paymentCardTypes;\n updatedHotel.description = details.description;\n updatedHotel.locationDescription = details.locationDescription;\n updatedHotel.policies = details.policies;\n\n updatedHotel.hotelServices = details.hotelServices;\n updatedHotel.businessServices = details.businessServices;\n updatedHotel.rooms = details.rooms;\n\n updatedHotel.hasLoadedDetails = true;\n updatedHotel.dataSource = details.dataSource;\n\n updatedHotel.defaultCurrency = details.currencyCode;\n updatedHotel.paymentMethods = details.paymentMethods;\n updatedHotel.planpay = details.planpay;\n\n if (updatedHotel.dataSource === HotelDataSource.Roomstay) {\n if (details.logo) {\n updatedHotel.logo = details.logo;\n }\n\n if (details.colors) {\n updatedHotel.colors = details.colors as ColorProfile;\n }\n\n if (details.distanceUnitType) {\n updatedHotel.distanceUnitType = details.distanceUnitType;\n }\n\n if (details.weekdayStartsOn) {\n updatedHotel.startsWeekOnDay = details.weekdayStartsOn;\n }\n\n if (details.crossSellHotelIds) {\n updatedHotel.crossSellHotelIds = details.crossSellHotelIds;\n }\n }\n\n if (details.rooms) {\n const roomArray = Object.values(details.rooms);\n if (roomArray.length) {\n updatedHotel.maxOccupancy = roomArray.reduce((previousMax, current) => {\n return Math.max(previousMax, current.maxOccupancy);\n }, 0);\n }\n }\n\n resolve(updatedHotel);\n return updatedHotel;\n });\n }),\n []\n );\n\n useEffect(() => {\n setName(company.name);\n setCompanyShort(company.companyShort);\n setLogo(company.logo);\n setColors(company.colors);\n setLogoLink(company.logoLink);\n setBrandSuffix(company.brandSuffix);\n\n DataLayer.instance.setBrandSuffix(company.brandSuffix);\n\n const configHotels = company.hotels.map((hotel: ConfigHotel) => {\n return { ...hotel, hasLoadedDetails: false, hotelID: `${hotel.hotelID}` } as Hotel;\n });\n setHotels(configHotels);\n\n if (company.selectedHotel) {\n const hotelId = typeof company.selectedHotel === 'string' ? company.selectedHotel : company.selectedHotel.hotelID + '';\n const targetHotel: ConfigHotel = getHotelFromArrayWithId(hotelId, configHotels);\n if (targetHotel) {\n setSelectedHotelID(hotelId);\n } else {\n // TODO: add centralized error logging\n console.log(`Unable to set selected hotel automatically. No Hotel found with ID: ${company.selectedHotel}`);\n }\n } else {\n /*\n We need to check if for some reason HotelStep isn't set as the first step,\n to automatically select a hotel, so engine doesn't fall over\n\n Possible TODO: We might need to do this on a new Step level, instead of here, as dynamically checking if StepHotel\n is first is probably not a great idea...\n */\n\n if (StepManager.getFirstStep() !== StepHotel) {\n setSelectedHotelID(configHotels[0].hotelID);\n console.log(`No selected hotel found - defaulting to ${configHotels[0].name}`);\n }\n }\n }, [company]);\n\n const onSelectedHotelIDChanged = React.useCallback(async () => {\n if (selectedHotelID) {\n const selectedHotel = await getHotel(selectedHotelID);\n\n if (selectedHotel) {\n CurrencyProvider.loadExchangeRates(selectedHotel.defaultCurrency ?? 'AUD');\n\n StaticContextProvider.MemberOnlyRateCodes = selectedHotel.memberOnlyRates ?? [];\n\n DataLayer.instance.setProviderHotelID(selectedHotel.providerHotelID);\n DataLayer.instance.setHotelName(selectedHotel.name);\n\n if (selectedHotel.datalayer?.gtmIds.length) {\n DataLayer.initialiseGTM(selectedHotel);\n }\n\n beContext.engine.getSessionProvider().setHotelID(selectedHotelID);\n\n setCurrentCurrency(selectedHotel.defaultCurrency);\n\n const existingUser = localStorage.getItem('hotel' + selectedHotel.hotelID + 'user');\n if (existingUser) {\n setSignedInUser(existingUser);\n }\n\n selectedHotel?.onLoad?.();\n }\n } else {\n DataLayer.instance.setProviderHotelID('');\n DataLayer.instance.setHotelName(name);\n if (company?.datalayer?.gtmIds.length) {\n DataLayer.initialiseGTM(company);\n }\n }\n }, [selectedHotelID]);\n\n useEffect(() => {\n onSelectedHotelIDChanged();\n }, [onSelectedHotelIDChanged]);\n\n useEffect(() => {\n const selectedHotel = getSelectedHotel();\n\n DataLayer.instance.setCurrencyCodes(currentCurrency, selectedHotel?.defaultCurrency ?? currentCurrency);\n }, [currentCurrency, selectedHotelID]);\n\n // TODO: Add Hotel Details fetch\n // TODO: re-do fetch on language change\n\n const workingContext: CompanyContextType = {\n currentLanguage,\n currentCurrency,\n\n name,\n companyShort,\n logo,\n logoLink,\n brandSuffix,\n\n colors,\n hotels,\n\n signedInUser,\n isSigningIn,\n\n selectedHotelID,\n\n updateLowestPricePerNight: (hotel: string | Hotel, row: BasketRow) => {\n const targetHotel = getHotelFromID(typeof hotel === 'string' ? hotel : hotel.hotelID + '');\n\n if (targetHotel && row) {\n const resetPriceToZero = (isLoading = false) => {\n updateHotel(targetHotel, (updatingHotel) => ({ ...updatingHotel, lowestPrice: { value: 0, isLoading } }));\n };\n\n resetPriceToZero(true);\n\n API.Availability.getCheapestPricePerDay(row.getStartDate(), row.getEndDate(), row.getAdults(), row.getChildren(), row.getPromoCode(), targetHotel.hotelID).then(\n (prices) => {\n let wasSet = false;\n if (prices) {\n let lowest = 0;\n const allPrices = Object.values(prices);\n if (allPrices?.length > 0) {\n lowest = Object.values(prices).reduce((prevValue, newValue) => (prevValue > newValue ? newValue : prevValue));\n\n wasSet = true;\n updateHotel(targetHotel, (updatingHotel) => ({ ...updatingHotel, lowestPrice: { value: lowest, isLoading: false } }));\n }\n }\n\n if (!wasSet) {\n resetPriceToZero();\n }\n }\n );\n }\n },\n\n changeHotel: (hotel: string | Hotel) => {\n const targetHotel = getHotelFromID(typeof hotel === 'string' ? hotel : hotel.hotelID + '');\n\n if (targetHotel) {\n setSelectedHotelID(targetHotel.hotelID);\n return true;\n } else {\n // TODO: add centralized error logging\n console.log(`Unable to set selected hotel automatically. No Hotel found with ID: ${company.selectedHotel}`);\n return false;\n }\n },\n\n closeMemberSignupModal: () => {\n setIsSigningIn(false);\n },\n openMemberSignupModal: () => {\n setIsSigningIn(true);\n },\n signUserIn: (user: string) => {\n DataLayer.instance.sendMemberSignUp();\n workingContext.closeMemberSignupModal();\n localStorage.setItem('hotel' + selectedHotelID + 'user', user);\n setSignedInUser(user);\n },\n\n setCurrentCurrency,\n setCurrentLanguage,\n\n getHotel,\n };\n\n return <CompanyContext.Provider value={workingContext}>{children}</CompanyContext.Provider>;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"CompanyContextWrapper.js","sourceRoot":"/","sources":["src/contexts/CompanyContext/CompanyContextWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { useState, useEffect, useContext, ReactChild, useCallback } from 'react';\n\nimport { BookingEngineContext, CompanyContext, CompanyContextType } from '@frontend/contexts';\nimport type { ConfigCompany } from 'models/Client/Hotel/Company';\nimport type { ConfigHotel, Hotel, InitialHotelDetailsEventPayload } from 'models/Client/Hotel/Hotel';\nimport { Language } from 'providers/LanguageProvider';\nimport { HotelDataSource } from 'models/Client/Hotel/HotelDataSource.types';\nimport TimeHelper from 'util/TimeHelper';\nimport API from 'api/BookingAPI';\nimport BasketRow from 'models/BasketRow';\nimport ColorProfile from 'models/Client/Hotel/ColorProfile';\nimport CurrencyProvider from 'providers/CurrencyProvider';\nimport StaticContextProvider from 'providers/StaticContextProvider';\nimport DataLayer from 'util/DataLayer';\nimport StepManager from 'util/StepManager';\nimport StepHotel from 'pages/steps/StepHotel/StepHotel';\nimport { InitialHotelDetailsEvent } from '@frontend/events';\nimport { useEvent } from '@frontend/hooks';\nimport { IPromotion } from 'models/Promotion/IPromotion.type';\nimport { MemberOnlyFenceSignUp } from 'events/actions/MemberOnlyFence/MemberOnlyFenceSignUp';\n\ninterface CompanyContextWrapperProps {\n children: ReactChild;\n configCompany: ConfigCompany;\n}\n\nexport const CompanyContextWrapper = ({ configCompany: company, children }: CompanyContextWrapperProps) => {\n const beContext = useContext(BookingEngineContext);\n\n const getSelectedHotel = () => {\n for (const hotel of hotels) {\n if (selectedHotelID + '' === hotel.hotelID + '') {\n return hotel;\n }\n }\n };\n\n const [name, setName] = useState(company.name);\n const [companyShort, setCompanyShort] = useState(company.companyShort);\n const [logo, setLogo] = useState(company.logo);\n const [colors, setColors] = useState(company.colors);\n const [hotels, setHotels] = useState<Hotel[]>(company.hotels as Hotel[]);\n const [logoLink, setLogoLink] = useState(company.logoLink);\n const [brandSuffix, setBrandSuffix] = useState(company.brandSuffix);\n\n const [selectedHotelID, setSelectedHotelID] = useState<string>();\n\n const [currentCurrency, setCurrentCurrency] = useState<string>(getSelectedHotel()?.defaultCurrency ?? 'AUD');\n const [currentLanguage, setCurrentLanguage] = useState<Language>(getSelectedHotel()?.defaultLanguage ?? Language.en_us);\n\n const [memberOnlyModalPromotion, setMemberOnlyModalPromotion] = useState<IPromotion>(null);\n\n const [signedInUser, setSignedInUser] = useState(null);\n const [isSigningIn, setIsSigningIn] = useState(false);\n\n const { raise } = useEvent();\n\n const getHotelFromArrayWithId = (id: string, arrayOfHotels: Hotel[] | ConfigHotel[]) => {\n for (const nextHotel of arrayOfHotels) {\n if (nextHotel.hotelID + '' === id + '') {\n return nextHotel;\n }\n }\n };\n const getHotelFromID = (id: string): Hotel => {\n return getHotelFromArrayWithId(id, hotels) as Hotel;\n };\n\n const updateHotel = (newHotel: Hotel, callback?: (hotel: Hotel) => Hotel) => {\n setHotels((oldHotels) => {\n let modified = false;\n const newHotelArray = oldHotels.map((mappingHotel) => {\n if (mappingHotel.hotelID + '' === newHotel.hotelID + '') {\n modified = true;\n\n const hotelDetails: InitialHotelDetailsEventPayload = {\n name: newHotel.name,\n hotelID: newHotel.hotelID,\n hotelUrl: newHotel.hotelUrl,\n currency: newHotel.defaultCurrency,\n language: newHotel.defaultLanguage,\n address: newHotel.address,\n };\n\n const event = new InitialHotelDetailsEvent(hotelDetails);\n raise(event);\n\n if (callback) {\n return callback(mappingHotel);\n }\n\n return newHotel;\n }\n\n return mappingHotel;\n });\n\n if (!modified) {\n newHotelArray.push(newHotel);\n }\n\n return newHotelArray;\n });\n };\n\n const getHotel = useCallback(\n (hotelId: string) =>\n new Promise<Hotel>(async (resolve) => {\n const currentHotelVersion: Hotel = getHotelFromID(hotelId) as Hotel;\n const newHotel: Hotel = {\n ...currentHotelVersion,\n };\n\n const details = await API.Hotel.fetchData(currentLanguage, newHotel);\n\n updateHotel(newHotel, (updatedHotel) => {\n updatedHotel.name = details.name;\n updatedHotel.address = details.address;\n\n updatedHotel.latitude = Number(details.latitude);\n updatedHotel.longitude = Number(details.longitude);\n updatedHotel.phone = details.phone;\n\n updatedHotel.checkInTime = TimeHelper.convert24To12hr(details.checkInTime);\n updatedHotel.checkOutTime = TimeHelper.convert24To12hr(details.checkOutTime);\n\n updatedHotel.paymentCardTypes = details.paymentCardTypes;\n updatedHotel.description = details.description;\n updatedHotel.locationDescription = details.locationDescription;\n updatedHotel.policies = details.policies;\n\n updatedHotel.hotelServices = details.hotelServices;\n updatedHotel.businessServices = details.businessServices;\n updatedHotel.rooms = details.rooms;\n\n updatedHotel.hasLoadedDetails = true;\n updatedHotel.dataSource = details.dataSource;\n\n updatedHotel.defaultCurrency = details.currencyCode;\n updatedHotel.paymentMethods = details.paymentMethods;\n updatedHotel.planpay = details.planpay;\n\n if (updatedHotel.dataSource === HotelDataSource.Roomstay) {\n if (details.logo) {\n updatedHotel.logo = details.logo;\n }\n\n if (details.colors) {\n updatedHotel.colors = details.colors as ColorProfile;\n }\n\n if (details.distanceUnitType) {\n updatedHotel.distanceUnitType = details.distanceUnitType;\n }\n\n if (details.weekdayStartsOn) {\n updatedHotel.startsWeekOnDay = details.weekdayStartsOn;\n }\n\n if (details.crossSellHotelIds) {\n updatedHotel.crossSellHotelIds = details.crossSellHotelIds;\n }\n }\n\n if (details.rooms) {\n const roomArray = Object.values(details.rooms);\n if (roomArray.length) {\n updatedHotel.maxOccupancy = roomArray.reduce((previousMax, current) => {\n return Math.max(previousMax, current.maxOccupancy);\n }, 0);\n }\n }\n\n resolve(updatedHotel);\n return updatedHotel;\n });\n }),\n []\n );\n\n useEffect(() => {\n setName(company.name);\n setCompanyShort(company.companyShort);\n setLogo(company.logo);\n setColors(company.colors);\n setLogoLink(company.logoLink);\n setBrandSuffix(company.brandSuffix);\n\n DataLayer.instance.setBrandSuffix(company.brandSuffix);\n\n const configHotels = company.hotels.map((hotel: ConfigHotel) => {\n return { ...hotel, hasLoadedDetails: false, hotelID: `${hotel.hotelID}` } as Hotel;\n });\n setHotels(configHotels);\n\n if (company.selectedHotel) {\n const hotelId = typeof company.selectedHotel === 'string' ? company.selectedHotel : company.selectedHotel.hotelID + '';\n const targetHotel: ConfigHotel = getHotelFromArrayWithId(hotelId, configHotels);\n if (targetHotel) {\n setSelectedHotelID(hotelId);\n } else {\n // TODO: add centralized error logging\n console.log(`Unable to set selected hotel automatically. No Hotel found with ID: ${company.selectedHotel}`);\n }\n } else {\n /*\n We need to check if for some reason HotelStep isn't set as the first step,\n to automatically select a hotel, so engine doesn't fall over\n\n Possible TODO: We might need to do this on a new Step level, instead of here, as dynamically checking if StepHotel\n is first is probably not a great idea...\n */\n\n if (StepManager.getFirstStep() !== StepHotel) {\n setSelectedHotelID(configHotels[0].hotelID);\n console.log(`No selected hotel found - defaulting to ${configHotels[0].name}`);\n }\n }\n }, [company]);\n\n const onSelectedHotelIDChanged = React.useCallback(async () => {\n if (selectedHotelID) {\n const selectedHotel = await getHotel(selectedHotelID);\n\n if (selectedHotel) {\n CurrencyProvider.loadExchangeRates(selectedHotel.defaultCurrency ?? 'AUD');\n\n StaticContextProvider.MemberOnlyRateCodes = selectedHotel.memberOnlyRates ?? [];\n\n DataLayer.instance.setProviderHotelID(selectedHotel.providerHotelID);\n DataLayer.instance.setHotelName(selectedHotel.name);\n\n if (selectedHotel.datalayer?.gtmIds.length) {\n DataLayer.initialiseGTM(selectedHotel);\n }\n\n beContext.engine.getSessionProvider().setHotelID(selectedHotelID);\n\n setCurrentCurrency(selectedHotel.defaultCurrency);\n\n const existingUser = localStorage.getItem('hotel' + selectedHotel.hotelID + 'user');\n if (existingUser) {\n setSignedInUser(existingUser);\n }\n\n selectedHotel?.onLoad?.();\n }\n } else {\n DataLayer.instance.setProviderHotelID('');\n DataLayer.instance.setHotelName(name);\n if (company?.datalayer?.gtmIds.length) {\n DataLayer.initialiseGTM(company);\n }\n }\n }, [selectedHotelID]);\n\n useEffect(() => {\n onSelectedHotelIDChanged();\n }, [onSelectedHotelIDChanged]);\n\n useEffect(() => {\n const selectedHotel = getSelectedHotel();\n\n DataLayer.instance.setCurrencyCodes(currentCurrency, selectedHotel?.defaultCurrency ?? currentCurrency);\n }, [currentCurrency, selectedHotelID]);\n\n // TODO: Add Hotel Details fetch\n // TODO: re-do fetch on language change\n\n const workingContext: CompanyContextType = {\n currentLanguage,\n currentCurrency,\n\n memberOnlyModalPromotion,\n\n name,\n companyShort,\n logo,\n logoLink,\n brandSuffix,\n\n colors,\n hotels,\n\n signedInUser,\n isSigningIn,\n\n selectedHotelID,\n\n updateLowestPricePerNight: (hotel: string | Hotel, row: BasketRow) => {\n const targetHotel = getHotelFromID(typeof hotel === 'string' ? hotel : hotel.hotelID + '');\n\n if (targetHotel && row) {\n const resetPriceToZero = (isLoading = false) => {\n updateHotel(targetHotel, (updatingHotel) => ({ ...updatingHotel, lowestPrice: { value: 0, isLoading } }));\n };\n\n resetPriceToZero(true);\n\n API.Availability.getCheapestPricePerDay(row.getStartDate(), row.getEndDate(), row.getAdults(), row.getChildren(), row.getPromoCode(), targetHotel.hotelID).then(\n (prices) => {\n let wasSet = false;\n if (prices) {\n let lowest = 0;\n const allPrices = Object.values(prices);\n if (allPrices?.length > 0) {\n lowest = Object.values(prices).reduce((prevValue, newValue) => (prevValue > newValue ? newValue : prevValue));\n\n wasSet = true;\n updateHotel(targetHotel, (updatingHotel) => ({ ...updatingHotel, lowestPrice: { value: lowest, isLoading: false } }));\n }\n }\n\n if (!wasSet) {\n resetPriceToZero();\n }\n }\n );\n }\n },\n\n changeHotel: (hotel: string | Hotel) => {\n const targetHotel = getHotelFromID(typeof hotel === 'string' ? hotel : hotel.hotelID + '');\n\n if (targetHotel) {\n setSelectedHotelID(targetHotel.hotelID);\n return true;\n } else {\n // TODO: add centralized error logging\n console.log(`Unable to set selected hotel automatically. No Hotel found with ID: ${company.selectedHotel}`);\n return false;\n }\n },\n\n closeMemberSignupModal: () => {\n setIsSigningIn(false);\n\n setMemberOnlyModalPromotion(null);\n },\n openMemberSignupModal: (promotion?: IPromotion) => {\n setIsSigningIn(true);\n\n if (promotion) {\n setMemberOnlyModalPromotion(promotion);\n }\n },\n signUserIn: (user: string) => {\n raise(new MemberOnlyFenceSignUp(memberOnlyModalPromotion));\n\n DataLayer.instance.sendMemberSignUp();\n workingContext.closeMemberSignupModal();\n localStorage.setItem('hotel' + selectedHotelID + 'user', user);\n setSignedInUser(user);\n },\n\n setCurrentCurrency,\n setCurrentLanguage,\n\n getHotel,\n };\n\n return <CompanyContext.Provider value={workingContext}>{children}</CompanyContext.Provider>;\n};\n"]}
|
|
@@ -111,7 +111,7 @@ const ConfirmationStepContextWrapper = ({ children }) => {
|
|
|
111
111
|
try {
|
|
112
112
|
setIsLoading(true);
|
|
113
113
|
if (resData) {
|
|
114
|
-
const reservationIds = parseReservationIdsFromData(
|
|
114
|
+
const reservationIds = parseReservationIdsFromData(resData);
|
|
115
115
|
if (reservationIds.length) {
|
|
116
116
|
try {
|
|
117
117
|
BookingAPI_1.default.Reservation.commit(reservationIds, resData.itineraryNumber, hotel.hotelID, payment)
|
|
@@ -143,7 +143,8 @@ const ConfirmationStepContextWrapper = ({ children }) => {
|
|
|
143
143
|
}
|
|
144
144
|
catch (ex) {
|
|
145
145
|
setApiErrors('Failed to commit reservation');
|
|
146
|
-
console.log('Failed to commit reservation');
|
|
146
|
+
console.log('Failed to commit reservation ');
|
|
147
|
+
console.error(ex);
|
|
147
148
|
Sentry.captureException(ex);
|
|
148
149
|
}
|
|
149
150
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfirmationStepContextWrapper.js","sourceRoot":"/","sources":["src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { FC, PropsWithChildren, useContext, useState } from 'react';\nimport ReservationsDTO from '../../models/Api/ReservationsDTO';\nimport reservationsDTO, { ReservationDTO } from '../../models/Api/ReservationsDTO';\nimport API from '../../api/BookingAPI';\nimport UserProfile from '../../models/UserProfile';\nimport { BasketContext, ErrorHandler } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport BasketRowDifferences from '../../models/BasketRowDifferences';\nimport * as Sentry from '@sentry/browser';\nimport { Severity } from '@sentry/types';\nimport { ConfirmationFormValues, FBookSuccessCallback, FBookValidateFunction, FBookValidationCallback, IBookValidationResult } from 'models/Confirmation';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport DataLayer, { InteractionStep, InteractionType } from '../../util/DataLayer';\nimport { useConfirmationQuery } from 'hooks/ConfirmationQuery';\nimport { ConfirmationStepContext } from './ConfirmationStepContext';\nimport { IBookingPayment } from '@roomstay/core';\n\nconst ConfirmationStepContextProvider = ConfirmationStepContext.Provider;\nexport const ConfirmationStepContextWrapper: FC<PropsWithChildren<any>> = ({ children }) => {\n const { queryPaymentMethod, queryRoomstayId: queryReservationId, queryPlanpayCheckoutId } = useConfirmationQuery();\n\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [apiErrors, setApiErrors] = useState<string>('');\n const methods = useForm<ConfirmationFormValues>({\n mode: 'onChange',\n });\n const basketContext = useContext(BasketContext);\n const basketRows = basketContext.getAllValidRows();\n const basketAddonRows = basketContext.basketAddonRows;\n const { hotel } = useCurrentHotel();\n\n const toUserProfiles = (formValues: ConfirmationFormValues): UserProfile[] => {\n return formValues.userProfiles.map((values) => ({\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 Country: values.Country,\n },\n MarketingOptIn: false,\n }));\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,\n };\n }\n };\n\n const onSubmit =\n (payment: IBookingPayment, preValidate?: FBookValidateFunction, onPostValidationError?: FBookValidationCallback, onSuccess?: FBookSuccessCallback) =>\n async (formValues: ConfirmationFormValues): Promise<void> => {\n DataLayer.instance.sendInteraction('Complete Booking', InteractionType.BUTTON, InteractionStep.GUEST_DETAILS);\n setIsLoading(true);\n let data: ReservationsDTO | undefined;\n const validateResult = !preValidate || (await preValidate());\n if (!validateResult) {\n setIsLoading(false);\n return;\n }\n\n try {\n data = await API.Reservation.bookNow(basketRows, toUserProfiles(formValues), payment, basketAddonRows, formValues.comment, hotel.hotelID);\n basketContext.booked(data);\n const validationResult = await validateReservation(data);\n if (validationResult) {\n onPostValidationError?.(validationResult);\n } else onSuccess?.(data);\n } catch (error) {\n console.log(error);\n setApiErrors(error?.Message ?? 'Unexpected error returned from the booking database.');\n } finally {\n setIsLoading(false);\n }\n };\n\n const isBackFromPlanpay = !!queryPlanpayCheckoutId && !!queryReservationId && !!queryPaymentMethod;\n\n const parseReservationIdsFromData = (data: ReservationsDTO) => {\n return data?.reservations?.map((reservation) => reservation.reservationNumber);\n };\n\n const commitReservation = async (resData: ReservationsDTO, payment: IBookingPayment) => {\n try {\n setIsLoading(true);\n if (resData) {\n const reservationIds = parseReservationIdsFromData(basketContext.reservationData);\n if (reservationIds.length) {\n try {\n API.Reservation.commit(reservationIds, resData.itineraryNumber, hotel.hotelID, payment)\n .then((response: ReservationsDTO) => {\n setIsLoading(false);\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 })\n .catch((ex: any) => {\n console.log(ex);\n setApiErrors('Unexpected error');\n });\n } catch (error) {\n setApiErrors(error?.Message ?? 'Unexpected error returned from the booking database.');\n }\n } else {\n setApiErrors('Committing reservation failed due to an unexpected error');\n ErrorHandler.add({ message: 'Committing reservation failed due to an unexpected error' });\n Sentry.captureException('No reservation IDs found when attempting to commit: ' + JSON.stringify(resData));\n }\n }\n } catch (ex) {\n setApiErrors('Failed to commit reservation');\n console.log('Failed to commit reservation');\n Sentry.captureException(ex);\n }\n };\n\n const rollbackReservation = async () => {\n if (!basketContext.reservationData) return;\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);\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 clearApiErrors = () => setApiErrors('');\n const book = async (payment: IBookingPayment, preValidate?: FBookValidateFunction, onPostValidationError?: FBookValidationCallback, onSuccess?: FBookSuccessCallback) => {\n await methods.handleSubmit(onSubmit(payment, preValidate, onPostValidationError, onSuccess))();\n };\n\n return (\n <FormProvider {...methods}>\n <ConfirmationStepContextProvider\n value={{\n book,\n commitReservation,\n rollbackReservation,\n\n isLoading,\n apiErrors,\n clearApiErrors,\n isBackFromPlanpay,\n }}\n >\n {children}\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 * as React from 'react';\nimport { FC, PropsWithChildren, useContext, useState } from 'react';\nimport ReservationsDTO from '../../models/Api/ReservationsDTO';\nimport reservationsDTO, { ReservationDTO } from '../../models/Api/ReservationsDTO';\nimport API from '../../api/BookingAPI';\nimport UserProfile from '../../models/UserProfile';\nimport { BasketContext, ErrorHandler } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport BasketRowDifferences from '../../models/BasketRowDifferences';\nimport * as Sentry from '@sentry/browser';\nimport { Severity } from '@sentry/types';\nimport { ConfirmationFormValues, FBookSuccessCallback, FBookValidateFunction, FBookValidationCallback, IBookValidationResult } from 'models/Confirmation';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport DataLayer, { InteractionStep, InteractionType } from '../../util/DataLayer';\nimport { useConfirmationQuery } from 'hooks/ConfirmationQuery';\nimport { ConfirmationStepContext } from './ConfirmationStepContext';\nimport { IBookingPayment } from '@roomstay/core';\n\nconst ConfirmationStepContextProvider = ConfirmationStepContext.Provider;\nexport const ConfirmationStepContextWrapper: FC<PropsWithChildren<any>> = ({ children }) => {\n const { queryPaymentMethod, queryRoomstayId: queryReservationId, queryPlanpayCheckoutId } = useConfirmationQuery();\n\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [apiErrors, setApiErrors] = useState<string>('');\n const methods = useForm<ConfirmationFormValues>({\n mode: 'onChange',\n });\n const basketContext = useContext(BasketContext);\n const basketRows = basketContext.getAllValidRows();\n const basketAddonRows = basketContext.basketAddonRows;\n const { hotel } = useCurrentHotel();\n\n const toUserProfiles = (formValues: ConfirmationFormValues): UserProfile[] => {\n return formValues.userProfiles.map((values) => ({\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 Country: values.Country,\n },\n MarketingOptIn: false,\n }));\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,\n };\n }\n };\n\n const onSubmit =\n (payment: IBookingPayment, preValidate?: FBookValidateFunction, onPostValidationError?: FBookValidationCallback, onSuccess?: FBookSuccessCallback) =>\n async (formValues: ConfirmationFormValues): Promise<void> => {\n DataLayer.instance.sendInteraction('Complete Booking', InteractionType.BUTTON, InteractionStep.GUEST_DETAILS);\n setIsLoading(true);\n let data: ReservationsDTO | undefined;\n const validateResult = !preValidate || (await preValidate());\n if (!validateResult) {\n setIsLoading(false);\n return;\n }\n\n try {\n data = await API.Reservation.bookNow(basketRows, toUserProfiles(formValues), payment, basketAddonRows, formValues.comment, hotel.hotelID);\n basketContext.booked(data);\n const validationResult = await validateReservation(data);\n if (validationResult) {\n onPostValidationError?.(validationResult);\n } else onSuccess?.(data);\n } catch (error) {\n console.log(error);\n setApiErrors(error?.Message ?? 'Unexpected error returned from the booking database.');\n } finally {\n setIsLoading(false);\n }\n };\n\n const isBackFromPlanpay = !!queryPlanpayCheckoutId && !!queryReservationId && !!queryPaymentMethod;\n\n const parseReservationIdsFromData = (data: ReservationsDTO) => {\n return data?.reservations?.map((reservation) => reservation.reservationNumber);\n };\n\n const commitReservation = async (resData: ReservationsDTO, payment: IBookingPayment) => {\n try {\n setIsLoading(true);\n if (resData) {\n const reservationIds = parseReservationIdsFromData(resData);\n if (reservationIds.length) {\n try {\n API.Reservation.commit(reservationIds, resData.itineraryNumber, hotel.hotelID, payment)\n .then((response: ReservationsDTO) => {\n setIsLoading(false);\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 })\n .catch((ex: any) => {\n console.log(ex);\n setApiErrors('Unexpected error');\n });\n } catch (error) {\n setApiErrors(error?.Message ?? 'Unexpected error returned from the booking database.');\n }\n } else {\n setApiErrors('Committing reservation failed due to an unexpected error');\n ErrorHandler.add({ message: 'Committing reservation failed due to an unexpected error' });\n Sentry.captureException('No reservation IDs found when attempting to commit: ' + JSON.stringify(resData));\n }\n }\n } catch (ex) {\n setApiErrors('Failed to commit reservation');\n console.log('Failed to commit reservation ');\n console.error(ex);\n Sentry.captureException(ex);\n }\n };\n\n const rollbackReservation = async () => {\n if (!basketContext.reservationData) return;\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);\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 clearApiErrors = () => setApiErrors('');\n const book = async (payment: IBookingPayment, preValidate?: FBookValidateFunction, onPostValidationError?: FBookValidationCallback, onSuccess?: FBookSuccessCallback) => {\n await methods.handleSubmit(onSubmit(payment, preValidate, onPostValidationError, onSuccess))();\n };\n\n return (\n <FormProvider {...methods}>\n <ConfirmationStepContextProvider\n value={{\n book,\n commitReservation,\n rollbackReservation,\n\n isLoading,\n apiErrors,\n clearApiErrors,\n isBackFromPlanpay,\n }}\n >\n {children}\n </ConfirmationStepContextProvider>\n </FormProvider>\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FullPageEngineContextWrapper.js","sourceRoot":"/","sources":["src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { useContext, useEffect, useState } from 'react';\n\nimport {\n AuthenticationContextProvider,\n BasketContext,\n BookingEngineContext,\n CompanyContext,\n FullPageBookingEngineUrlParameters,\n FullPageEngineContext,\n FullPageEngineContextType,\n ModalContextWrapper,\n} from '@frontend/contexts';\nimport * as dayjs from 'dayjs';\nimport Step from 'pages/steps/Step';\nimport StepManager from 'util/StepManager';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { Redirect, Route, useHistory, useLocation, useRouteMatch } from 'react-router-dom';\nimport FeatureProvider from 'providers/FeatureProvider';\nimport FeaturedPromoFeature from 'providers/feature/FeaturedPromoFeature';\nimport RoomTypeFilter from 'models/Room/Filters/RoomTypeFilter';\nimport RateTypeFilter from 'models/Room/Filters/RateTypeFilter';\nimport BasketRow from 'models/BasketRow';\nimport StepRoom from 'pages/steps/StepRoom/StepRoom';\nimport ScrollToTop from 'components/generic/ScrollToTop';\nimport Header from 'components/navigation/Header';\nimport AvailableUpgradesModal from 'components/steps/room/AvailableUpgradesModal';\n\nimport FindReservation, { EFindReservationPath, QUERY_PARAM_NAME } from 'pages/findReservation/FindReservation';\nimport FindReservationResults from 'pages/findReservation/FindReservationResults';\nimport HotelInfo from 'pages/hotel/HotelInfo';\nimport HotelInfoPlaceholder from 'pages/hotel/HotelInfoPlaceholder';\nimport StepRoute from 'routes/NaturallyProgressedStepRoute';\nimport { AccountRouter } from 'pages/account/AccountRouter';\nimport { PageColorComponent } from 'components/pages/PageColorComponent';\nimport MemberPortalFeature from 'providers/feature/MemberPortalFeature';\n\ninterface FullPageEngineContextWrapperProps {\n children?: React.ReactNode;\n}\n\nexport function FullPageEngineContextWrapper(props: FullPageEngineContextWrapperProps) {\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) ?? StepManager.getFirstStep());\n const [initialStep, setInitialStep] = useState<Step>(StepManager.getFirstStep());\n\n const { hotel } = useCurrentHotel();\n\n const location = useLocation();\n const history = useHistory();\n\n const isInStepRoot = useRouteMatch({\n path: StepManager.STEP_BASE,\n });\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\n if (location.search) {\n const query = new URLSearchParams(location.search);\n\n const format = 'YYYY-MM-DD';\n\n let start = dayjs(query.get('arrive'), format);\n let end = dayjs(query.get('depart'), format);\n\n const promoCode = query.get('promocode');\n const promoOnly = query.get('promoonly');\n\n const promoFeatured = query.get('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 roomCode = query.get('room');\n if (roomCode) {\n // TODO: Refactor this to come from this context instead.\n beContext.setCurrentFilters({\n ...beContext.currentFilters,\n ['RoomType']: new RoomTypeFilter([roomCode]),\n });\n }\n\n const rateCode = query.get('rate');\n if (rateCode) {\n // TODO: Refactor this to come from this context instead.\n beContext.setCurrentFilters({\n ...beContext.currentFilters,\n ['RateType']: new RateTypeFilter([rateCode]),\n });\n }\n\n const hotelId = query.get('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(StepRoom);\n }\n\n urlParameterBuilder.hotelId = hotelId;\n }\n\n const defaultCity = query.get('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('adults'), 10);\n if (!isNaN(adults) && adults > 1) {\n if (!hotel || hotel.maxOccupancy >= adults) {\n urlParameterBuilder.adults = adults;\n }\n }\n\n const children = Number.parseInt(query.get('children'), 10);\n if (!isNaN(children) && children > 0) {\n if (!hotel || hotel.maxOccupancy + (isNaN(adults) ? 0 : adults) >= children) {\n urlParameterBuilder.children = children;\n }\n }\n\n const roomCount = Number.parseInt(query.get('rooms'), 10);\n if (!isNaN(roomCount) && roomCount > 1) {\n urlParameterBuilder.rooms = addXRooms = roomCount;\n }\n\n setUrlParameters(urlParameterBuilder);\n }\n\n let firstBasketRow: BasketRow;\n const { startDate, endDate, promoCode, promoOnly, adults, children } = urlParameterBuilder;\n for (let i = 0; i < addXRooms; i++) {\n const basketRow = new BasketRow();\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 basketContext.addBasketRow(basketRow, false, i !== 0);\n\n if (i === 0) {\n firstBasketRow = basketRow;\n }\n }\n\n if (firstBasketRow.getStartDate() && firstBasketRow.getEndDate()) {\n setInitialStep(StepRoom);\n }\n } else {\n const initialSession = beContext.engine.getInitialSession();\n if (initialSession) {\n setInitialStep(StepManager.getStepFromName(initialSession.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 history.push({\n ...location,\n pathname: initialStep.getStepUrl(),\n });\n }\n }\n }, [engineReady]);\n\n const workingContext: FullPageEngineContextType = { urlParameters, currentStep, setCurrentStep };\n\n const renderRouteHandler = () => {\n return <Redirect to={StepManager.getFirstStep().getStepUrl()} />;\n };\n\n return (\n <FullPageEngineContext.Provider value={workingContext}>\n {/*<BasketContextWrapper>*/}\n <AuthenticationContextProvider>\n <ModalContextWrapper>\n <ScrollToTop />\n <Route exact={true} path=\"/\" render={renderRouteHandler} />\n <header className=\"engine-header\">\n <Header />\n </header>\n {engineReady && (\n <>\n {/* {<div>{<Login />}</div>} */}\n <div className=\"engine-page\">\n <React.Suspense fallback={<HotelInfoPlaceholder />}>\n <Route exact={true} path={'/hotel-info/'} component={HotelInfo} />\n </React.Suspense>\n <React.Suspense fallback={<div>Loading...</div>}>\n <Route\n exact={true}\n path={`/:${QUERY_PARAM_NAME}(${Object.values(EFindReservationPath)\n .filter((path) => MemberPortalFeature.isActive() || path === EFindReservationPath.FindReservation)\n .join('|')})`}\n component={FindReservation}\n />\n <Route path={'/find-reservation/:ref/:email'} component={FindReservationResults} />\n </React.Suspense>\n\n {MemberPortalFeature.isActive() && (\n <React.Suspense fallback={<div>TODO:</div>}>\n <AccountRouter />\n </React.Suspense>\n )}\n </div>\n <div className=\"engine-body\">\n <AvailableUpgradesModal />\n {StepManager.getSteps().map((step: Step) => (\n <StepRoute key={step.getName()} step={step} />\n ))}\n <Route path=\"*\" component={PageColorComponent} />\n </div>\n </>\n )}\n </ModalContextWrapper>\n </AuthenticationContextProvider>\n {/*</BasketContextWrapper>*/}\n </FullPageEngineContext.Provider>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"FullPageEngineContextWrapper.js","sourceRoot":"/","sources":["src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.tsx"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,iCAAwD;AAExD,iDAS4B;AAC5B,+BAA+B;AAE/B,kDAA2C;AAC3C,2CAAkD;AAClD,uDAA2F;AAC3F,+DAAwD;AACxD,iFAA0E;AAC1E,uEAAgE;AAChE,uEAAgE;AAChE,gDAAyC;AACzC,4DAAqD;AACrD,gEAAyD;AACzD,yDAAkD;AAClD,yFAAkF;AAElF,2EAAgH;AAChH,yFAAkF;AAClF,qDAA8C;AAC9C,2EAAoE;AACpE,sFAA4D;AAC5D,+DAA4D;AAC5D,4EAAyE;AACzE,+EAAwE;AAMxE,SAAgB,4BAA4B,CAAC,KAAwC;;IACjF,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAC,yBAAc,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,IAAA,kBAAU,EAAC,+BAAoB,CAAC,CAAC;IAEnD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IACtD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAqC,EAAE,CAAC,CAAC;IAE3F,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAO,MAAA,qBAAW,CAAC,eAAe,CAAC,MAAA,SAAS,CAAC,MAAM,CAAC,iBAAiB,EAAE,0CAAE,IAAI,CAAC,mCAAI,qBAAW,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5J,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAO,qBAAW,CAAC,YAAY,EAAE,CAAC,CAAC;IAEjF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IAEpC,MAAM,QAAQ,GAAG,IAAA,8BAAW,GAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,IAAA,6BAAU,GAAE,CAAC;IAE7B,MAAM,YAAY,GAAG,IAAA,gCAAa,EAAC;QAC/B,IAAI,EAAE,qBAAW,CAAC,SAAS;KAC9B,CAAC,CAAC;IAEH,IAAA,iBAAS,EAAC,GAAG,EAAE;;QACX,MAAA,SAAS,CAAC,eAAe,0CAAE,aAAa,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC9E,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,MAAM,iBAAiB,GAAG,aAAa,CAAC,iBAAiB,CAAC;QAE1D,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,yFAAyF;QACzF,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;YAChC,MAAM,mBAAmB,GAAuC,EAAE,CAAC;YAEnE,IAAI,QAAQ,CAAC,MAAM,EAAE;gBACjB,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAEnD,MAAM,MAAM,GAAG,YAAY,CAAC;gBAE5B,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC/C,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;gBAE7C,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBACzC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAEzC,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBAEjD,IAAI,SAAS,EAAE;oBACX,mBAAmB,CAAC,SAAS,GAAG,SAAS,CAAC;iBAC7C;gBAED,IAAI,SAAS,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE;oBAClD,mBAAmB,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;iBACtD;gBAED,IAAI,aAAa,IAAI,aAAa,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE;oBAC1D,yBAAe,CAAC,IAAI,CAAC,8BAAoB,CAAC,CAAC;oBAC3C,mBAAmB,CAAC,aAAa,GAAG,IAAI,CAAC;iBAC5C;gBAED,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACnC,IAAI,QAAQ,EAAE;oBACV,yDAAyD;oBACzD,SAAS,CAAC,iBAAiB,iCACpB,SAAS,CAAC,cAAc,KAC3B,CAAC,UAAU,CAAC,EAAE,IAAI,wBAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,IAC9C,CAAC;iBACN;gBAED,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACnC,IAAI,QAAQ,EAAE;oBACV,yDAAyD;oBACzD,SAAS,CAAC,iBAAiB,iCACpB,SAAS,CAAC,cAAc,KAC3B,CAAC,UAAU,CAAC,EAAE,IAAI,wBAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,IAC9C,CAAC;iBACN;gBAED,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAEnC,IAAI,OAAO,EAAE;oBACT,IAAI,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;wBAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;4BAClB,KAAK,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;yBACjC;wBAED,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE;4BAChB,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;yBAC7B;wBAED,cAAc,CAAC,kBAAQ,CAAC,CAAC;qBAC5B;oBAED,mBAAmB,CAAC,OAAO,GAAG,OAAO,CAAC;iBACzC;gBAED,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBAC7C,IAAI,WAAW,EAAE;oBACb,mBAAmB,CAAC,WAAW,GAAG,WAAW,CAAC;iBACjD;gBAED,yGAAyG;gBACzG,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE;oBAClC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE;wBACzB,KAAK,GAAG,KAAK,EAAE,CAAC;qBACnB;oBAED,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;wBACrB,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;qBAC7B;yBAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;wBAC5C,GAAG,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;qBAC/B;oBAED,mBAAmB,CAAC,SAAS,GAAG,KAAK,CAAC;oBACtC,mBAAmB,CAAC,OAAO,GAAG,GAAG,CAAC;iBACrC;gBAED,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;oBAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,IAAI,MAAM,EAAE;wBACxC,mBAAmB,CAAC,MAAM,GAAG,MAAM,CAAC;qBACvC;iBACJ;gBAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC5D,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;oBAClC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,QAAQ,EAAE;wBACzE,mBAAmB,CAAC,QAAQ,GAAG,QAAQ,CAAC;qBAC3C;iBACJ;gBAED,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC1D,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE;oBACpC,mBAAmB,CAAC,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;iBACrD;gBAED,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;aACzC;YAED,IAAI,cAAyB,CAAC;YAC9B,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC;YAC3F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;gBAChC,MAAM,SAAS,GAAG,IAAI,mBAAS,EAAE,CAAC;gBAElC,IAAI,SAAS,EAAE;oBACX,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;iBACrC;gBAED,IAAI,OAAO,EAAE;oBACT,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;iBACjC;gBAED,IAAI,SAAS,EAAE;oBACX,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;iBACrC;gBAED,IAAI,SAAS,EAAE;oBACX,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;iBACrC;gBAED,IAAI,MAAM,EAAE;oBACR,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;iBAC/B;gBAED,IAAI,QAAQ,EAAE;oBACV,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;iBACnC;gBAED,aAAa,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBAEtD,IAAI,CAAC,KAAK,CAAC,EAAE;oBACT,cAAc,GAAG,SAAS,CAAC;iBAC9B;aACJ;YAED,IAAI,cAAc,CAAC,YAAY,EAAE,IAAI,cAAc,CAAC,UAAU,EAAE,EAAE;gBAC9D,cAAc,CAAC,kBAAQ,CAAC,CAAC;aAC5B;SACJ;aAAM;YACH,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAC5D,IAAI,cAAc,EAAE;gBAChB,cAAc,CAAC,qBAAW,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;aACpE;SACJ;QAED,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP;;OAEG;IACH,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,CAAC,WAAW,EAAE;YACd,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,EAAE;gBACzC,cAAc,CAAC,IAAI,CAAC,CAAC;aACxB;SACJ;IACL,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IAEjC,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,WAAW,EAAE;YACb,IAAI,YAAY,IAAI,WAAW,EAAE;gBAC7B,OAAO,CAAC,IAAI,iCACL,QAAQ,KACX,QAAQ,EAAE,WAAW,CAAC,UAAU,EAAE,IACpC,CAAC;aACN;SACJ;IACL,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,MAAM,cAAc,GAA8B,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;IAEjG,MAAM,kBAAkB,GAAG,GAAG,EAAE;QAC5B,OAAO,oBAAC,2BAAQ,IAAC,EAAE,EAAE,qBAAW,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,GAAI,CAAC;IACrE,CAAC,CAAC;IAEF,OAAO,CACH,oBAAC,gCAAqB,CAAC,QAAQ,IAAC,KAAK,EAAE,cAAc;QACjD,oBAAC,wCAA6B;YAC1B,oBAAC,8BAAmB;gBAChB,oBAAC,qBAAW,OAAG;gBACf,oBAAC,wBAAK,IAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAC,GAAG,EAAC,MAAM,EAAE,kBAAkB,GAAI;gBAC3D,gCAAQ,SAAS,EAAC,eAAe;oBAC7B,oBAAC,gBAAM,OAAG,CACL;gBACR,WAAW,IAAI,CACZ;oBACI,6BAAK,SAAS,EAAC,aAAa;wBACxB,oBAAC,KAAK,CAAC,QAAQ,IAAC,QAAQ,EAAE,oBAAC,8BAAoB,OAAG;4BAC9C,oBAAC,wBAAK,IAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,mBAAS,GAAI,CACrD;wBACjB,oBAAC,KAAK,CAAC,QAAQ,IAAC,QAAQ,EAAE,8CAAqB;4BAC3C,oBAAC,wBAAK,IACF,KAAK,EAAE,IAAI,EACX,IAAI,EAAE,KAAK,kCAAgB,IAAI,MAAM,CAAC,MAAM,CAAC,sCAAoB,CAAC;qCAC7D,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,6BAAmB,CAAC,QAAQ,EAAE,IAAI,IAAI,KAAK,sCAAoB,CAAC,eAAe,CAAC;qCACjG,IAAI,CAAC,GAAG,CAAC,GAAG,EACjB,SAAS,EAAE,yBAAe,GAC5B;4BACF,oBAAC,wBAAK,IAAC,IAAI,EAAE,+BAA+B,EAAE,SAAS,EAAE,gCAAsB,GAAI,CACtE;wBAEhB,6BAAmB,CAAC,QAAQ,EAAE,IAAI,CAC/B,oBAAC,KAAK,CAAC,QAAQ,IAAC,QAAQ,EAAE,yCAAgB;4BACtC,oBAAC,6BAAa,OAAG,CACJ,CACpB,CACC;oBACN,6BAAK,SAAS,EAAC,aAAa;wBACxB,oBAAC,gCAAsB,OAAG;wBACzB,qBAAW,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,IAAU,EAAE,EAAE,CAAC,CACxC,oBAAC,sCAAS,IAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,GAAI,CACjD,CAAC;wBACF,oBAAC,wBAAK,IAAC,IAAI,EAAC,GAAG,EAAC,SAAS,EAAE,uCAAkB,GAAI,CAC/C,CACP,CACN,CACiB,CACM,CACH,CACpC,CAAC;AACN,CAAC;AArQD,oEAqQC","sourcesContent":["import * as React from 'react';\nimport { useContext, useEffect, useState } from 'react';\n\nimport {\n AuthenticationContextProvider,\n BasketContext,\n BookingEngineContext,\n CompanyContext,\n FullPageBookingEngineUrlParameters,\n FullPageEngineContext,\n FullPageEngineContextType,\n ModalContextWrapper,\n} from '@frontend/contexts';\nimport * as dayjs from 'dayjs';\nimport Step from 'pages/steps/Step';\nimport StepManager from 'util/StepManager';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { Redirect, Route, useHistory, useLocation, useRouteMatch } from 'react-router-dom';\nimport FeatureProvider from 'providers/FeatureProvider';\nimport FeaturedPromoFeature from 'providers/feature/FeaturedPromoFeature';\nimport RoomTypeFilter from 'models/Room/Filters/RoomTypeFilter';\nimport RateTypeFilter from 'models/Room/Filters/RateTypeFilter';\nimport BasketRow from 'models/BasketRow';\nimport StepRoom from 'pages/steps/StepRoom/StepRoom';\nimport ScrollToTop from 'components/generic/ScrollToTop';\nimport Header from 'components/navigation/Header';\nimport AvailableUpgradesModal from 'components/steps/room/AvailableUpgradesModal';\n\nimport FindReservation, { EFindReservationPath, QUERY_PARAM_NAME } from 'pages/findReservation/FindReservation';\nimport FindReservationResults from 'pages/findReservation/FindReservationResults';\nimport HotelInfo from 'pages/hotel/HotelInfo';\nimport HotelInfoPlaceholder from 'pages/hotel/HotelInfoPlaceholder';\nimport StepRoute from 'routes/NaturallyProgressedStepRoute';\nimport { AccountRouter } from 'pages/account/AccountRouter';\nimport { PageColorComponent } from 'components/pages/PageColorComponent';\nimport MemberPortalFeature from 'providers/feature/MemberPortalFeature';\n\ninterface FullPageEngineContextWrapperProps {\n children?: React.ReactNode;\n}\n\nexport function FullPageEngineContextWrapper(props: FullPageEngineContextWrapperProps) {\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) ?? StepManager.getFirstStep());\n const [initialStep, setInitialStep] = useState<Step>(StepManager.getFirstStep());\n\n const { hotel } = useCurrentHotel();\n\n const location = useLocation();\n const history = useHistory();\n\n const isInStepRoot = useRouteMatch({\n path: StepManager.STEP_BASE,\n });\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\n if (location.search) {\n const query = new URLSearchParams(location.search);\n\n const format = 'YYYY-MM-DD';\n\n let start = dayjs(query.get('arrive'), format);\n let end = dayjs(query.get('depart'), format);\n\n const promoCode = query.get('promocode');\n const promoOnly = query.get('promoonly');\n\n const promoFeatured = query.get('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 roomCode = query.get('room');\n if (roomCode) {\n // TODO: Refactor this to come from this context instead.\n beContext.setCurrentFilters({\n ...beContext.currentFilters,\n ['RoomType']: new RoomTypeFilter([roomCode]),\n });\n }\n\n const rateCode = query.get('rate');\n if (rateCode) {\n // TODO: Refactor this to come from this context instead.\n beContext.setCurrentFilters({\n ...beContext.currentFilters,\n ['RateType']: new RateTypeFilter([rateCode]),\n });\n }\n\n const hotelId = query.get('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(StepRoom);\n }\n\n urlParameterBuilder.hotelId = hotelId;\n }\n\n const defaultCity = query.get('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('adults'), 10);\n if (!isNaN(adults) && adults > 1) {\n if (!hotel || hotel.maxOccupancy >= adults) {\n urlParameterBuilder.adults = adults;\n }\n }\n\n const children = Number.parseInt(query.get('children'), 10);\n if (!isNaN(children) && children > 0) {\n if (!hotel || hotel.maxOccupancy + (isNaN(adults) ? 0 : adults) >= children) {\n urlParameterBuilder.children = children;\n }\n }\n\n const roomCount = Number.parseInt(query.get('rooms'), 10);\n if (!isNaN(roomCount) && roomCount > 1) {\n urlParameterBuilder.rooms = addXRooms = roomCount;\n }\n\n setUrlParameters(urlParameterBuilder);\n }\n\n let firstBasketRow: BasketRow;\n const { startDate, endDate, promoCode, promoOnly, adults, children } = urlParameterBuilder;\n for (let i = 0; i < addXRooms; i++) {\n const basketRow = new BasketRow();\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 basketContext.addBasketRow(basketRow, false, i !== 0);\n\n if (i === 0) {\n firstBasketRow = basketRow;\n }\n }\n\n if (firstBasketRow.getStartDate() && firstBasketRow.getEndDate()) {\n setInitialStep(StepRoom);\n }\n } else {\n const initialSession = beContext.engine.getInitialSession();\n if (initialSession) {\n setInitialStep(StepManager.getStepFromName(initialSession.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 history.push({\n ...location,\n pathname: initialStep.getStepUrl(),\n });\n }\n }\n }, [engineReady]);\n\n const workingContext: FullPageEngineContextType = { urlParameters, currentStep, setCurrentStep };\n\n const renderRouteHandler = () => {\n return <Redirect to={StepManager.getFirstStep().getStepUrl()} />;\n };\n\n return (\n <FullPageEngineContext.Provider value={workingContext}>\n <AuthenticationContextProvider>\n <ModalContextWrapper>\n <ScrollToTop />\n <Route exact={true} path=\"/\" render={renderRouteHandler} />\n <header className=\"engine-header\">\n <Header />\n </header>\n {engineReady && (\n <>\n <div className=\"engine-page\">\n <React.Suspense fallback={<HotelInfoPlaceholder />}>\n <Route exact={true} path={'/hotel-info/'} component={HotelInfo} />\n </React.Suspense>\n <React.Suspense fallback={<div>Loading...</div>}>\n <Route\n exact={true}\n path={`/:${QUERY_PARAM_NAME}(${Object.values(EFindReservationPath)\n .filter((path) => MemberPortalFeature.isActive() || path === EFindReservationPath.FindReservation)\n .join('|')})`}\n component={FindReservation}\n />\n <Route path={'/find-reservation/:ref/:email'} component={FindReservationResults} />\n </React.Suspense>\n\n {MemberPortalFeature.isActive() && (\n <React.Suspense fallback={<div>TODO:</div>}>\n <AccountRouter />\n </React.Suspense>\n )}\n </div>\n <div className=\"engine-body\">\n <AvailableUpgradesModal />\n {StepManager.getSteps().map((step: Step) => (\n <StepRoute key={step.getName()} step={step} />\n ))}\n <Route path=\"*\" component={PageColorComponent} />\n </div>\n </>\n )}\n </ModalContextWrapper>\n </AuthenticationContextProvider>\n </FullPageEngineContext.Provider>\n );\n}\n"]}
|