@roomstay/frontend 2.1.14 → 2.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/559.bundle.js +1 -1
  2. package/dist/882.bundle.js +1 -1
  3. package/dist/main.bundle.js +1 -1
  4. package/dist/src/components/generic/Icon/Icon.d.ts +1 -0
  5. package/dist/src/components/generic/Icon/Icon.js +5 -1
  6. package/dist/src/components/generic/Icon/Icon.js.map +1 -1
  7. package/dist/src/components/generic/InputGroup/InputGroup.js +4 -2
  8. package/dist/src/components/generic/InputGroup/InputGroup.js.map +1 -1
  9. package/dist/src/components/generic/date/FloatingDatePicker.js +0 -2
  10. package/dist/src/components/generic/date/FloatingDatePicker.js.map +1 -1
  11. package/dist/src/components/steps/date/StepOneDateRangePicker.js +0 -2
  12. package/dist/src/components/steps/date/StepOneDateRangePicker.js.map +1 -1
  13. package/dist/src/components/steps/room/LargeRoomCard.js +1 -1
  14. package/dist/src/components/steps/room/LargeRoomCard.js.map +1 -1
  15. package/dist/src/components/steps/room/MemberSignInModal/MemberSignInModal.js +5 -4
  16. package/dist/src/components/steps/room/MemberSignInModal/MemberSignInModal.js.map +1 -1
  17. package/dist/src/components/steps/room/roomDetails/RoomDetailsBedsBlock.js +9 -8
  18. package/dist/src/components/steps/room/roomDetails/RoomDetailsBedsBlock.js.map +1 -1
  19. package/dist/src/contexts/BasketContext/BasketContextWrapper.js +1 -0
  20. package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
  21. package/dist/src/models/Api/HotelDTO.d.ts +1 -0
  22. package/dist/src/models/Api/HotelDTO.js.map +1 -1
  23. package/dist/src/models/Client/Hotel/Hotel.d.ts +4 -0
  24. package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
  25. package/dist/src/pages/account/AccountHome/AccountHomePage.js +4 -4
  26. package/dist/src/pages/account/AccountHome/AccountHomePage.js.map +1 -1
  27. package/dist/src/util/DataLayer.js +2 -2
  28. package/dist/src/util/DataLayer.js.map +1 -1
  29. package/dist/test.bundle.js +1 -1
  30. package/dist/tests/offline/entry/RSCompany.js +1 -0
  31. package/dist/tests/offline/entry/RSCompany.js.map +1 -1
  32. package/package.json +3 -2
@@ -1 +1 @@
1
- {"version":3,"file":"BasketContextWrapper.js","sourceRoot":"/","sources":["src/contexts/BasketContext/BasketContextWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["import dayjs, { Dayjs } from 'dayjs';\nimport 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, AddonPricingType } 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>(null);\n const [basketAddonRows, setBasketAddonRows] = useState<BasketAddonRow[]>([]);\n\n let loadedStartDate: dayjs.Dayjs | null = null;\n let loadedEndDate: dayjs.Dayjs | null = null;\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 | null>(loadedStartDate ?? null);\n const [endDate, setEndDate] = useState<dayjs.Dayjs | null>(loadedEndDate ?? null);\n\n const [hasCheckedOut, setHasCheckedOut] = useState(false);\n const [reservationData, setReservationData] = useState<ReservationsDTO | null>(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 (row && 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 as BasketRow);\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 | null => {\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 syncSelectedDateRange = (row?: BasketRow) => {\n if (!row) return;\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\n const { loadedPromotion } = usePromotionContainer({ selectedBasketRow: selectedBasketRow as BasketRow, updateBasketRow });\n\n const workingContext: BasketContextType = {\n startDate: startDate as Dayjs,\n endDate: endDate as Dayjs,\n\n selectedBasketRow: selectedBasketRow as BasketRow,\n currentBasketRows,\n basketAddonRows,\n\n hasCheckedOut,\n reservationData: reservationData as ReservationsDTO,\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 syncSelectedDateRange(row);\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 initBasketRows: (rows: BasketRow[]) => {\n const firstRow = rows[0];\n syncSelectedDateRange(firstRow);\n setSelectedBasketRow(firstRow);\n basketRowReducer({\n method: 'Init',\n rows: rows,\n });\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 = 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 as Dayjs);\n selectedBasketRow.setEndDate(endDate as Dayjs);\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 as string);\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>\n {t(translationString)} <strong className=\"u-marg-left--light\">{rate.getRoom().name}</strong>\n </Text>\n ),\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 : undefined);\n },\n\n getNumberOfChildren: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getChildren(), withTranslation ? Translation.Step.Date.Child : undefined);\n },\n\n getNumberOfRooms: (withTranslation = false) => {\n return returnAggregationAndTranslation(currentBasketRows.length, withTranslation ? Translation.Step.Date.Room : undefined);\n },\n\n getTotalPrice: () => {\n let totalPrice = returnAggregationAndTranslation((row) => (row.isValid() ? (row.getRate()?.getTotalPrice() as number) : 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 | null) => {\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: undefined,\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 // TODO: Quick hack to fix Synxis Basic Addon quantities.\n if (addon.pricingType === AddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT) {\n // TODO: Because all addons only apply to first room, we can select the 0th from the list.\n const basketRow = currentBasketRows?.[0];\n if (basketRow) {\n addonRow.setAdultQuantity(basketRow.getAdults());\n }\n }\n\n if (addon.pricingType === AddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT) {\n // TODO: Because all addons only apply to first room, we can select the 0th from the list.\n const basketRow = currentBasketRows?.[0];\n if (basketRow) {\n addonRow.setChildQuantity(basketRow.getChildren());\n }\n }\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 dayjs, { Dayjs } from 'dayjs';\nimport 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, AddonPricingType } 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>(null);\n const [basketAddonRows, setBasketAddonRows] = useState<BasketAddonRow[]>([]);\n\n let loadedStartDate: dayjs.Dayjs | null = null;\n let loadedEndDate: dayjs.Dayjs | null = null;\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 | null>(loadedStartDate ?? null);\n const [endDate, setEndDate] = useState<dayjs.Dayjs | null>(loadedEndDate ?? null);\n\n const [hasCheckedOut, setHasCheckedOut] = useState(false);\n const [reservationData, setReservationData] = useState<ReservationsDTO | null>(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 DataLayer.instance.sendDateSelection(startDate, endDate);\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 (row && 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 as BasketRow);\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 | null => {\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 syncSelectedDateRange = (row?: BasketRow) => {\n if (!row) return;\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\n const { loadedPromotion } = usePromotionContainer({ selectedBasketRow: selectedBasketRow as BasketRow, updateBasketRow });\n\n const workingContext: BasketContextType = {\n startDate: startDate as Dayjs,\n endDate: endDate as Dayjs,\n\n selectedBasketRow: selectedBasketRow as BasketRow,\n currentBasketRows,\n basketAddonRows,\n\n hasCheckedOut,\n reservationData: reservationData as ReservationsDTO,\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 syncSelectedDateRange(row);\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 initBasketRows: (rows: BasketRow[]) => {\n const firstRow = rows[0];\n syncSelectedDateRange(firstRow);\n setSelectedBasketRow(firstRow);\n basketRowReducer({\n method: 'Init',\n rows: rows,\n });\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 = 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 as Dayjs);\n selectedBasketRow.setEndDate(endDate as Dayjs);\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 as string);\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>\n {t(translationString)} <strong className=\"u-marg-left--light\">{rate.getRoom().name}</strong>\n </Text>\n ),\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 : undefined);\n },\n\n getNumberOfChildren: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getChildren(), withTranslation ? Translation.Step.Date.Child : undefined);\n },\n\n getNumberOfRooms: (withTranslation = false) => {\n return returnAggregationAndTranslation(currentBasketRows.length, withTranslation ? Translation.Step.Date.Room : undefined);\n },\n\n getTotalPrice: () => {\n let totalPrice = returnAggregationAndTranslation((row) => (row.isValid() ? (row.getRate()?.getTotalPrice() as number) : 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 | null) => {\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: undefined,\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 // TODO: Quick hack to fix Synxis Basic Addon quantities.\n if (addon.pricingType === AddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT) {\n // TODO: Because all addons only apply to first room, we can select the 0th from the list.\n const basketRow = currentBasketRows?.[0];\n if (basketRow) {\n addonRow.setAdultQuantity(basketRow.getAdults());\n }\n }\n\n if (addon.pricingType === AddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT) {\n // TODO: Because all addons only apply to first room, we can select the 0th from the list.\n const basketRow = currentBasketRows?.[0];\n if (basketRow) {\n addonRow.setChildQuantity(basketRow.getChildren());\n }\n }\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"]}
@@ -34,6 +34,7 @@ export type HotelRoomDTO = {
34
34
  bedType: string;
35
35
  amenities: HotelRoomAmenitiesDTO[];
36
36
  features: HotelRoomAmenitiesDTO[];
37
+ bedTypeOverride?: string;
37
38
  };
38
39
  type HotelDTO = {
39
40
  id: number;
@@ -1 +1 @@
1
- {"version":3,"file":"HotelDTO.js","sourceRoot":"/","sources":["src/models/Api/HotelDTO.ts"],"names":[],"mappings":";;;AA0Fa,QAAA,0BAA0B,GAAqC;IACxE,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,YAAY;IAChB,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,YAAY;IAChB,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,YAAY;IAChB,EAAE,EAAE,UAAU;CACjB,CAAC","sourcesContent":["import { DeepPartial } from 'react-hook-form';\nimport ColorProfile from '@/models/Client/Hotel/ColorProfile';\nimport { DistanceUnitType } from '@/models/Client/Hotel/DistanceUnitType.types';\nimport HotelAddress from '@/models/Client/Hotel/HotelAddress';\nimport { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nimport { WeekdayStartsOn } from '@/models/Client/Hotel/WeekdayStartsOn.types';\nimport { EPaymentCardType } from '@/models/Client/Hotel/Hotel';\nimport type { EBookingPaymentMethod } from '@roomstay/core';\nimport type { PlanPayEnvironment } from '@planpay/web';\n\nexport type HotelServiceDTO = {\n detail: string;\n included: boolean;\n name: string;\n onsite: boolean;\n};\n\nexport type HotelRoomsDTO = {\n [roomTypeCode: string]: HotelRoomDTO;\n};\n\nexport type HotelRoomAmenitiesDTO = {\n type: string;\n description: string;\n};\n\nexport type HotelRoomDTO = {\n code: string;\n name: string;\n shortDescription: string;\n longDescription: string;\n images: string[];\n quantity: number;\n maxOccupancy: number;\n bedQuantity: number;\n standardNumBeds: number;\n maxRollaways: number;\n bedType: string;\n amenities: HotelRoomAmenitiesDTO[];\n features: HotelRoomAmenitiesDTO[];\n};\n\ntype HotelDTO = {\n id: number;\n name: string;\n chainId: number;\n chainName: string;\n\n address: HotelAddress;\n phone: string;\n\n latitude: string;\n longitude: string;\n\n utcOffset: string;\n\n languageCode: string;\n currencyCode: string;\n\n checkInTime: string;\n checkOutTime: string;\n\n paymentCardTypes: EPaymentCardType[];\n\n description: string;\n locationDescription: string;\n policies: string;\n\n hotelServices: HotelServiceDTO[];\n businessServices: HotelServiceDTO[];\n\n rooms: { [roomTypeCode: string]: HotelRoomDTO };\n dataSource: HotelDataSource;\n\n // Following fields are only present if dataSource = 'roomstay'\n logo?: string;\n colors: DeepPartial<ColorProfile>;\n distanceUnitType?: DistanceUnitType;\n weekdayStartsOn?: WeekdayStartsOn;\n\n crossSellHotelIds?: string[];\n paymentMethods: EBookingPaymentMethod[];\n planpay?: {\n minDaysShowPlanpay: number;\n env: PlanPayEnvironment;\n };\n hotelUrl?: string;\n heroImage?: string;\n};\n\nexport const SynxisToVGSCardNameMapping: { [synxisName: string]: string } = {\n VI: 'visa',\n MC: 'mastercard',\n JC: 'jcb',\n DS: 'dinersclub',\n AX: 'amex',\n DN: 'dinersclub',\n UP: 'unionpay',\n};\n\nexport default HotelDTO;\n"]}
1
+ {"version":3,"file":"HotelDTO.js","sourceRoot":"/","sources":["src/models/Api/HotelDTO.ts"],"names":[],"mappings":";;;AA2Fa,QAAA,0BAA0B,GAAqC;IACxE,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,YAAY;IAChB,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,YAAY;IAChB,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,YAAY;IAChB,EAAE,EAAE,UAAU;CACjB,CAAC","sourcesContent":["import { DeepPartial } from 'react-hook-form';\nimport ColorProfile from '@/models/Client/Hotel/ColorProfile';\nimport { DistanceUnitType } from '@/models/Client/Hotel/DistanceUnitType.types';\nimport HotelAddress from '@/models/Client/Hotel/HotelAddress';\nimport { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nimport { WeekdayStartsOn } from '@/models/Client/Hotel/WeekdayStartsOn.types';\nimport { EPaymentCardType } from '@/models/Client/Hotel/Hotel';\nimport type { EBookingPaymentMethod } from '@roomstay/core';\nimport type { PlanPayEnvironment } from '@planpay/web';\n\nexport type HotelServiceDTO = {\n detail: string;\n included: boolean;\n name: string;\n onsite: boolean;\n};\n\nexport type HotelRoomsDTO = {\n [roomTypeCode: string]: HotelRoomDTO;\n};\n\nexport type HotelRoomAmenitiesDTO = {\n type: string;\n description: string;\n};\n\nexport type HotelRoomDTO = {\n code: string;\n name: string;\n shortDescription: string;\n longDescription: string;\n images: string[];\n quantity: number;\n maxOccupancy: number;\n bedQuantity: number;\n standardNumBeds: number;\n maxRollaways: number;\n bedType: string;\n amenities: HotelRoomAmenitiesDTO[];\n features: HotelRoomAmenitiesDTO[];\n bedTypeOverride?: string;\n};\n\ntype HotelDTO = {\n id: number;\n name: string;\n chainId: number;\n chainName: string;\n\n address: HotelAddress;\n phone: string;\n\n latitude: string;\n longitude: string;\n\n utcOffset: string;\n\n languageCode: string;\n currencyCode: string;\n\n checkInTime: string;\n checkOutTime: string;\n\n paymentCardTypes: EPaymentCardType[];\n\n description: string;\n locationDescription: string;\n policies: string;\n\n hotelServices: HotelServiceDTO[];\n businessServices: HotelServiceDTO[];\n\n rooms: { [roomTypeCode: string]: HotelRoomDTO };\n dataSource: HotelDataSource;\n\n // Following fields are only present if dataSource = 'roomstay'\n logo?: string;\n colors: DeepPartial<ColorProfile>;\n distanceUnitType?: DistanceUnitType;\n weekdayStartsOn?: WeekdayStartsOn;\n\n crossSellHotelIds?: string[];\n paymentMethods: EBookingPaymentMethod[];\n planpay?: {\n minDaysShowPlanpay: number;\n env: PlanPayEnvironment;\n };\n hotelUrl?: string;\n heroImage?: string;\n};\n\nexport const SynxisToVGSCardNameMapping: { [synxisName: string]: string } = {\n VI: 'visa',\n MC: 'mastercard',\n JC: 'jcb',\n DS: 'dinersclub',\n AX: 'amex',\n DN: 'dinersclub',\n UP: 'unionpay',\n};\n\nexport default HotelDTO;\n"]}
@@ -81,6 +81,10 @@ export interface ConfigHotel extends HasDatalayerTags {
81
81
  minDaysShowPlanpay: number;
82
82
  env: PlanPayEnvironment;
83
83
  };
84
+ /**
85
+ * Customize the Member modal colours. Specifically replacing the green (success) with the primary color of hotel (accent)
86
+ */
87
+ memberOnlyModalUsePrimaryColor?: boolean;
84
88
  /**
85
89
  * Callback to trigger specific events on load of a hotel.
86
90
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Hotel.js","sourceRoot":"/","sources":["src/models/Client/Hotel/Hotel.ts"],"names":[],"mappings":";;;AAiBA,IAAY,gBAKX;AALD,WAAY,gBAAgB;IACxB,+BAAW,CAAA;IACX,qCAAiB,CAAA;IACjB,8BAAU,CAAA;IACV,yCAAqB,CAAA;AACzB,CAAC,EALW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAK3B","sourcesContent":["import type { ReactChild } from 'react';\n\nimport type { Language } from '@/providers/LanguageProvider';\nimport type { HotelPerk } from '@/models/Client/Hotel/HotelPerk';\nimport type { HotelRoomOverwrite } from '@/models/Client/Hotel/HotelRoomOverwrite';\nimport type ColorProfile from '@/models/Client/Hotel/ColorProfile';\nimport type HotelAddress from '@/models/Client/Hotel/HotelAddress';\nimport type { HotelRoomsDTO, HotelServiceDTO } from '@/models/Api/HotelDTO';\nimport type { HasDatalayerTags } from '@/models/Client/Hotel/Company';\nimport type { TransportDistances } from '@/models/Api/HotelOverrideDTO';\nimport type { MemberOnlyModalInputs } from '@/components/steps/room/MemberSignInModal/MemberSignInModal.types';\nimport type { DistanceUnitType } from '@/models/Client/Hotel/DistanceUnitType.types';\nimport type { WeekdayStartsOn } from '@/models/Client/Hotel/WeekdayStartsOn.types';\nimport type { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nimport { EBookingPaymentMethod } from '@roomstay/core';\nimport type { PlanPayEnvironment } from '@planpay/web';\n\nexport enum EPaymentCardType {\n Visa = 'VI',\n Mastercard = 'MC',\n JCB = 'JC',\n AmericanExpress = 'X',\n}\n\nexport interface ConfigHotel extends HasDatalayerTags {\n hotelID: number | string;\n providerHotelID: string;\n\n /* Fields subject to change when pulled from API */\n name: string;\n description?: string;\n locationDescription?: string;\n\n address?: HotelAddress;\n latitude?: number;\n longitude?: number;\n\n phone?: string;\n\n checkInTime?: string;\n checkOutTime?: string;\n\n paymentCardTypes?: EPaymentCardType[];\n\n policies?: string;\n\n maxOccupancy?: number;\n\n /* End of Changing Fields */\n\n startsWeekOnDay?: WeekdayStartsOn;\n\n hotelUrl: string;\n defaultDatepickerType?: 'Month' | 'Week';\n // TODO: need to do magic to see if we need to append / prepend stuff, for now we assume that it's only used while on the site.\n checkoutUrl?: string;\n defaultCurrency: string;\n defaultLanguage: Language;\n logo: string | ReactChild;\n heroImage: string;\n privacyPolicyUrl: string;\n bookNowPayLaterUrl?: string;\n bestRateNoBSUrl?: string;\n\n colors: ColorProfile;\n memberOnlyRates?: string[];\n memberOnlyPromoCode?: string;\n\n memberOnlySignupInputs?: MemberOnlyModalInputs;\n\n crossSellHotelIds?: string[];\n\n googleMapsImage?: string;\n\n hideByLine?: boolean;\n\n /**\n * Wether to show the Breakfast / Lunch / Dinner included\n */\n showMealPill?: boolean;\n\n /**\n * Distances for the Summary, and Hotel Info pages\n */\n transportDistances?: TransportDistances;\n\n distanceUnitType: DistanceUnitType;\n perks: HotelPerk[];\n\n vgsVaultName: string;\n showAddonLoader: boolean;\n overwrites?: { [code: string]: Partial<HotelRoomOverwrite> };\n\n forwardFindReservationToSynxis?: boolean;\n\n additionalOptions?: { [name: string]: any };\n\n images?: string[];\n\n googleReCaptcha?: {\n loadForMembers?: boolean;\n siteKey?: string;\n };\n\n paymentMethods: EBookingPaymentMethod[];\n\n planpay?: {\n minDaysShowPlanpay: number;\n env: PlanPayEnvironment;\n };\n\n /**\n * Callback to trigger specific events on load of a hotel.\n *\n * This is where you can specify custom fields, language overrides, feature toggles etc.\n */\n onLoad?: () => void;\n}\n\nexport type Hotel = ConfigHotel & {\n hotelID: string;\n\n hasLoadedDetails?: boolean;\n\n hotelServices: HotelServiceDTO[];\n businessServices: HotelServiceDTO[];\n rooms: HotelRoomsDTO;\n dataSource: HotelDataSource;\n\n lowestPrice?: {\n value: number;\n isLoading: boolean;\n };\n};\n\n/**\n * Used for DetailsHotel event\n */\nexport type InitialHotelDetailsEventPayload = {\n name: string;\n hotelID: number | string;\n hotelUrl: string;\n currency: string;\n language: Language;\n address?: HotelAddress;\n};\n"]}
1
+ {"version":3,"file":"Hotel.js","sourceRoot":"/","sources":["src/models/Client/Hotel/Hotel.ts"],"names":[],"mappings":";;;AAiBA,IAAY,gBAKX;AALD,WAAY,gBAAgB;IACxB,+BAAW,CAAA;IACX,qCAAiB,CAAA;IACjB,8BAAU,CAAA;IACV,yCAAqB,CAAA;AACzB,CAAC,EALW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAK3B","sourcesContent":["import type { ReactChild } from 'react';\n\nimport type { Language } from '@/providers/LanguageProvider';\nimport type { HotelPerk } from '@/models/Client/Hotel/HotelPerk';\nimport type { HotelRoomOverwrite } from '@/models/Client/Hotel/HotelRoomOverwrite';\nimport type ColorProfile from '@/models/Client/Hotel/ColorProfile';\nimport type HotelAddress from '@/models/Client/Hotel/HotelAddress';\nimport type { HotelRoomsDTO, HotelServiceDTO } from '@/models/Api/HotelDTO';\nimport type { HasDatalayerTags } from '@/models/Client/Hotel/Company';\nimport type { TransportDistances } from '@/models/Api/HotelOverrideDTO';\nimport type { MemberOnlyModalInputs } from '@/components/steps/room/MemberSignInModal/MemberSignInModal.types';\nimport type { DistanceUnitType } from '@/models/Client/Hotel/DistanceUnitType.types';\nimport type { WeekdayStartsOn } from '@/models/Client/Hotel/WeekdayStartsOn.types';\nimport type { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nimport { EBookingPaymentMethod } from '@roomstay/core';\nimport type { PlanPayEnvironment } from '@planpay/web';\n\nexport enum EPaymentCardType {\n Visa = 'VI',\n Mastercard = 'MC',\n JCB = 'JC',\n AmericanExpress = 'X',\n}\n\nexport interface ConfigHotel extends HasDatalayerTags {\n hotelID: number | string;\n providerHotelID: string;\n\n /* Fields subject to change when pulled from API */\n name: string;\n description?: string;\n locationDescription?: string;\n\n address?: HotelAddress;\n latitude?: number;\n longitude?: number;\n\n phone?: string;\n\n checkInTime?: string;\n checkOutTime?: string;\n\n paymentCardTypes?: EPaymentCardType[];\n\n policies?: string;\n\n maxOccupancy?: number;\n\n /* End of Changing Fields */\n\n startsWeekOnDay?: WeekdayStartsOn;\n\n hotelUrl: string;\n defaultDatepickerType?: 'Month' | 'Week';\n // TODO: need to do magic to see if we need to append / prepend stuff, for now we assume that it's only used while on the site.\n checkoutUrl?: string;\n defaultCurrency: string;\n defaultLanguage: Language;\n logo: string | ReactChild;\n heroImage: string;\n privacyPolicyUrl: string;\n bookNowPayLaterUrl?: string;\n bestRateNoBSUrl?: string;\n\n colors: ColorProfile;\n memberOnlyRates?: string[];\n memberOnlyPromoCode?: string;\n\n memberOnlySignupInputs?: MemberOnlyModalInputs;\n\n crossSellHotelIds?: string[];\n\n googleMapsImage?: string;\n\n hideByLine?: boolean;\n\n /**\n * Wether to show the Breakfast / Lunch / Dinner included\n */\n showMealPill?: boolean;\n\n /**\n * Distances for the Summary, and Hotel Info pages\n */\n transportDistances?: TransportDistances;\n\n distanceUnitType: DistanceUnitType;\n perks: HotelPerk[];\n\n vgsVaultName: string;\n showAddonLoader: boolean;\n overwrites?: { [code: string]: Partial<HotelRoomOverwrite> };\n\n forwardFindReservationToSynxis?: boolean;\n\n additionalOptions?: { [name: string]: any };\n\n images?: string[];\n\n googleReCaptcha?: {\n loadForMembers?: boolean;\n siteKey?: string;\n };\n\n paymentMethods: EBookingPaymentMethod[];\n\n planpay?: {\n minDaysShowPlanpay: number;\n env: PlanPayEnvironment;\n };\n\n /**\n * Customize the Member modal colours. Specifically replacing the green (success) with the primary color of hotel (accent)\n */\n memberOnlyModalUsePrimaryColor?: boolean;\n\n /**\n * Callback to trigger specific events on load of a hotel.\n *\n * This is where you can specify custom fields, language overrides, feature toggles etc.\n */\n onLoad?: () => void;\n}\n\nexport type Hotel = ConfigHotel & {\n hotelID: string;\n\n hasLoadedDetails?: boolean;\n\n hotelServices: HotelServiceDTO[];\n businessServices: HotelServiceDTO[];\n rooms: HotelRoomsDTO;\n dataSource: HotelDataSource;\n\n lowestPrice?: {\n value: number;\n isLoading: boolean;\n };\n};\n\n/**\n * Used for DetailsHotel event\n */\nexport type InitialHotelDetailsEventPayload = {\n name: string;\n hotelID: number | string;\n hotelUrl: string;\n currency: string;\n language: Language;\n address?: HotelAddress;\n};\n"]}
@@ -90,15 +90,15 @@ const AccountHomePage = () => {
90
90
  color: Color_1.Color.Accent,
91
91
  } })),
92
92
  react_1.default.createElement("div", { className: "col-md-3" },
93
- react_1.default.createElement(IconNavCard_1.IconNavCard, { icon: Icon_1.IconType.CreditCard, title: "Payment Information", description: "Lorem ipsum dolor sit amet, consectetur adipiscing.", link: {
94
- text: 'Edit Info',
93
+ react_1.default.createElement(IconNavCard_1.IconNavCard, { icon: Icon_1.IconType.CreditCard, title: "Payment Information", description: "Effortlessly manage cards for smoother checkout", link: {
94
+ text: 'Manage cards',
95
95
  pathTo: AccountRoutes_1.AccountRoutes.CardDetails.path,
96
96
  icon: 'arrow',
97
97
  color: Color_1.Color.Accent,
98
98
  } })),
99
99
  react_1.default.createElement("div", { className: "col-md-3" },
100
- react_1.default.createElement(IconNavCard_1.IconNavCard, { icon: Icon_1.IconType.Time, title: "Need Help?", description: "Lorem ipsum dolor sit amet, consectetur adipiscing.", link: {
101
- text: 'Edit Info',
100
+ react_1.default.createElement(IconNavCard_1.IconNavCard, { icon: Icon_1.IconType.Time, title: "Need Help?", description: "Connect with our hotel staff for prompt assistance", link: {
101
+ text: 'Contact now',
102
102
  pathTo: AccountRoutes_1.AccountRoutes.Help.path,
103
103
  icon: 'arrow',
104
104
  color: Color_1.Color.Accent,
@@ -1 +1 @@
1
- {"version":3,"file":"AccountHomePage.js","sourceRoot":"/","sources":["src/pages/account/AccountHome/AccountHomePage.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReservationItem from '@/components/reservation/ReservationItem';\nimport Headline from '@/components/generic/Headline';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { IconNavCard } from '@/components/generic/Card/IconNavCard/IconNavCard';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport { Color } from '@/util/Color';\nimport BEButton from '@/components/generic/BEButton';\nimport { Link } from 'react-router-dom';\nimport StepManager from '@/util/StepManager';\nimport { useMember } from '@frontend/hooks';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\nimport { useContext } from 'react';\nimport { BookingEngineContext, IRoomstayMemberBookingItemWithRef } from '@frontend/contexts';\nimport ScreenSize from '@/util/ScreenSize';\nimport { AccountRoutes } from '@/pages/account/AccountRoutes';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\n\nexport const AccountHomePage = () => {\n const { fullName, upcomingBookings } = useMember();\n const { t } = useTranslation();\n\n const context = useContext(BookingEngineContext);\n const isMobile = context.screenSize <= ScreenSize.Large;\n\n const firstStepUrl = StepManager.getFirstStep().getStepUrl();\n\n const hasBookings = (upcomingBookings?.length as number) > 0;\n\n return (\n <div>\n <div className=\"u-marg-top--heavy@m u-marg-top@m- u-marg-bottom\">\n <Link to={StepManager.getFirstStep().getStepUrl()}>\n <BEButton isText icon={IconType.ArrowLeft} size=\"small\">\n {t(Translation.UserPortal.HomeScreen.BackToBooking)}\n </BEButton>\n </Link>\n </div>\n <div className=\"u-marg-bottom--heavy u-pad-top@m\">\n <Headline size=\"extra-large\" className=\"u-marg-bottom\">\n {t(Translation.UserPortal.HomeScreen.Title)} {fullName}!\n </Headline>\n {hasBookings ? (\n <Text type={TextType.Body}>{t(Translation.UserPortal.HomeScreen.Subtitle)}</Text>\n ) : (\n <Text className=\"u-marg-top\">{t(Translation.Reservation.EmptyPage.SubTitle)}</Text>\n )}\n </div>\n\n <div className=\"u-marg-bottom--heavy\">\n {hasBookings ? (\n <ReservationItem itineraryItem={upcomingBookings?.[0] as IRoomstayMemberBookingItemWithRef} />\n ) : (\n <div className=\"u-marg-top--heavy u-flex u-flex-align-center u-flex-direction-column@l- u-flex-gap\">\n <div>\n <img className=\"mw-100\" src={RoomstayThemeEngine.getImageAssetUrl('account/account-home-empty-graphic.svg')} alt=\"Account homepage image\" />\n </div>\n <div className=\"u-marg-top--heavy@m-\">\n <Headline size=\"large\">{t(Translation.Reservation.EmptyPage.Message)}</Headline>\n <Text color={Color.DarkGrey} type={TextType.Small} className=\"u-marg-top--light\">\n {t(Translation.Reservation.EmptyPage.SubMessage)}\n </Text>\n <div className=\"u-marg-top--heavy u-flex u-flex-flex-start u-flex-gap--light u-flex-direction-column@l-\">\n <Link to={firstStepUrl}>\n <BEButton wide={isMobile} rounded filled icon={IconType.ArrowRight} iconPosition=\"right\" primary>\n {t(Translation.Reservation.EmptyPage.SearchRooms)}\n </BEButton>\n </Link>\n <Link to={AccountRoutes.Reservations.path}>\n <BEButton wide={isMobile} rounded icon={IconType.ArrowRight} iconPosition=\"right\">\n {t(Translation.Reservation.EmptyPage.SeeAll)}\n </BEButton>\n </Link>\n </div>\n </div>\n </div>\n )}\n </div>\n\n <div className=\"row\">\n <div className=\"col-md-3\">\n <IconNavCard\n icon={IconType.Info}\n title=\"View all bookings\"\n description=\"See all of your bookings, past, present and cancelled.\"\n link={{\n text: 'See list',\n pathTo: AccountRoutes.Reservations.path,\n icon: 'arrow',\n color: Color.Accent,\n }}\n />\n </div>\n <div className=\"col-md-3\">\n <IconNavCard\n icon={IconType.Person}\n title=\"Profile Information\"\n description=\"Edit your personal details, like address, and name\"\n link={{\n text: 'Edit Info',\n pathTo: AccountRoutes.ProfileDetails.path,\n icon: 'arrow',\n color: Color.Accent,\n }}\n />\n </div>\n\n <div className=\"col-md-3\">\n <IconNavCard\n icon={IconType.CreditCard}\n title=\"Payment Information\"\n description=\"Lorem ipsum dolor sit amet, consectetur adipiscing.\"\n link={{\n text: 'Edit Info',\n pathTo: AccountRoutes.CardDetails.path,\n icon: 'arrow',\n color: Color.Accent,\n }}\n />\n </div>\n\n <div className=\"col-md-3\">\n <IconNavCard\n icon={IconType.Time}\n title=\"Need Help?\"\n description=\"Lorem ipsum dolor sit amet, consectetur adipiscing.\"\n link={{\n text: 'Edit Info',\n pathTo: AccountRoutes.Help.path,\n icon: 'arrow',\n color: Color.Accent,\n }}\n />\n </div>\n </div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"AccountHomePage.js","sourceRoot":"/","sources":["src/pages/account/AccountHome/AccountHomePage.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReservationItem from '@/components/reservation/ReservationItem';\nimport Headline from '@/components/generic/Headline';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { IconNavCard } from '@/components/generic/Card/IconNavCard/IconNavCard';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport { Color } from '@/util/Color';\nimport BEButton from '@/components/generic/BEButton';\nimport { Link } from 'react-router-dom';\nimport StepManager from '@/util/StepManager';\nimport { useMember } from '@frontend/hooks';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\nimport { useContext } from 'react';\nimport { BookingEngineContext, IRoomstayMemberBookingItemWithRef } from '@frontend/contexts';\nimport ScreenSize from '@/util/ScreenSize';\nimport { AccountRoutes } from '@/pages/account/AccountRoutes';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\n\nexport const AccountHomePage = () => {\n const { fullName, upcomingBookings } = useMember();\n const { t } = useTranslation();\n\n const context = useContext(BookingEngineContext);\n const isMobile = context.screenSize <= ScreenSize.Large;\n\n const firstStepUrl = StepManager.getFirstStep().getStepUrl();\n\n const hasBookings = (upcomingBookings?.length as number) > 0;\n\n return (\n <div>\n <div className=\"u-marg-top--heavy@m u-marg-top@m- u-marg-bottom\">\n <Link to={StepManager.getFirstStep().getStepUrl()}>\n <BEButton isText icon={IconType.ArrowLeft} size=\"small\">\n {t(Translation.UserPortal.HomeScreen.BackToBooking)}\n </BEButton>\n </Link>\n </div>\n <div className=\"u-marg-bottom--heavy u-pad-top@m\">\n <Headline size=\"extra-large\" className=\"u-marg-bottom\">\n {t(Translation.UserPortal.HomeScreen.Title)} {fullName}!\n </Headline>\n {hasBookings ? (\n <Text type={TextType.Body}>{t(Translation.UserPortal.HomeScreen.Subtitle)}</Text>\n ) : (\n <Text className=\"u-marg-top\">{t(Translation.Reservation.EmptyPage.SubTitle)}</Text>\n )}\n </div>\n\n <div className=\"u-marg-bottom--heavy\">\n {hasBookings ? (\n <ReservationItem itineraryItem={upcomingBookings?.[0] as IRoomstayMemberBookingItemWithRef} />\n ) : (\n <div className=\"u-marg-top--heavy u-flex u-flex-align-center u-flex-direction-column@l- u-flex-gap\">\n <div>\n <img className=\"mw-100\" src={RoomstayThemeEngine.getImageAssetUrl('account/account-home-empty-graphic.svg')} alt=\"Account homepage image\" />\n </div>\n <div className=\"u-marg-top--heavy@m-\">\n <Headline size=\"large\">{t(Translation.Reservation.EmptyPage.Message)}</Headline>\n <Text color={Color.DarkGrey} type={TextType.Small} className=\"u-marg-top--light\">\n {t(Translation.Reservation.EmptyPage.SubMessage)}\n </Text>\n <div className=\"u-marg-top--heavy u-flex u-flex-flex-start u-flex-gap--light u-flex-direction-column@l-\">\n <Link to={firstStepUrl}>\n <BEButton wide={isMobile} rounded filled icon={IconType.ArrowRight} iconPosition=\"right\" primary>\n {t(Translation.Reservation.EmptyPage.SearchRooms)}\n </BEButton>\n </Link>\n <Link to={AccountRoutes.Reservations.path}>\n <BEButton wide={isMobile} rounded icon={IconType.ArrowRight} iconPosition=\"right\">\n {t(Translation.Reservation.EmptyPage.SeeAll)}\n </BEButton>\n </Link>\n </div>\n </div>\n </div>\n )}\n </div>\n\n <div className=\"row\">\n <div className=\"col-md-3\">\n <IconNavCard\n icon={IconType.Info}\n title=\"View all bookings\"\n description=\"See all of your bookings, past, present and cancelled.\"\n link={{\n text: 'See list',\n pathTo: AccountRoutes.Reservations.path,\n icon: 'arrow',\n color: Color.Accent,\n }}\n />\n </div>\n <div className=\"col-md-3\">\n <IconNavCard\n icon={IconType.Person}\n title=\"Profile Information\"\n description=\"Edit your personal details, like address, and name\"\n link={{\n text: 'Edit Info',\n pathTo: AccountRoutes.ProfileDetails.path,\n icon: 'arrow',\n color: Color.Accent,\n }}\n />\n </div>\n\n <div className=\"col-md-3\">\n <IconNavCard\n icon={IconType.CreditCard}\n title=\"Payment Information\"\n description=\"Effortlessly manage cards for smoother checkout\"\n link={{\n text: 'Manage cards',\n pathTo: AccountRoutes.CardDetails.path,\n icon: 'arrow',\n color: Color.Accent,\n }}\n />\n </div>\n\n <div className=\"col-md-3\">\n <IconNavCard\n icon={IconType.Time}\n title=\"Need Help?\"\n description=\"Connect with our hotel staff for prompt assistance\"\n link={{\n text: 'Contact now',\n pathTo: AccountRoutes.Help.path,\n icon: 'arrow',\n color: Color.Accent,\n }}\n />\n </div>\n </div>\n </div>\n );\n};\n"]}
@@ -320,8 +320,8 @@ class DataLayer {
320
320
  react_gtm_module_1.default.dataLayer({
321
321
  dataLayer: {
322
322
  event: 'dateSelection',
323
- arrivalDate: startDate.format('YYYY-MM-DD'),
324
- departureDate: endDate.format('YYYY-MM-DD'),
323
+ arrivalDate: startDate.format(DATALAYER_DATE_FORMAT),
324
+ departureDate: endDate.format(DATALAYER_DATE_FORMAT),
325
325
  },
326
326
  });
327
327
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DataLayer.js","sourceRoot":"/","sources":["src/util/DataLayer.ts"],"names":[],"mappings":"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","sourcesContent":["import TagManager from 'react-gtm-module';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport { Room } from '@/models/Room/Room';\nimport dayjs from 'dayjs';\nimport { Dayjs } from 'dayjs';\nimport BasketRow from '@/models/BasketRow';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport ReservationsDTO from '@/models/Api/ReservationsDTO';\nimport * as Sentry from '@sentry/browser';\nimport { Severity } from '@sentry/types';\nimport { ConfigCompany, HasDatalayerTags } from '@/models/Client/Hotel/Company';\n\nconst DATALAYER_DATE_FORMAT = 'YYYY-M-D';\nexport default class DataLayer {\n static instance = new DataLayer();\n\n private enableLogging = true;\n\n private hotelName!: string;\n private providerHotelID!: string;\n\n private originalCurrencyCode?: string;\n\n private impressions: Product[] = [];\n\n private brandSuffix?: ConfigCompany['brandSuffix'];\n\n // TODO: Move this GTM initialize call to config, so gtm IDs are always in Client world\n static initialiseGTM(hotelConfig?: HasDatalayerTags) {\n const gtmIds = hotelConfig?.datalayer?.gtmIds;\n gtmIds?.forEach((gtmId) => {\n TagManager.initialize({ gtmId });\n });\n }\n\n public setProviderHotelID(id: string) {\n this.providerHotelID = id;\n }\n\n public setHotelName(hotelName: string) {\n this.hotelName = hotelName;\n }\n\n public setCurrencyCodes(currentCurrencyCode: string, originalCurrencyCode?: string) {\n if (originalCurrencyCode) {\n this.originalCurrencyCode = originalCurrencyCode;\n }\n }\n\n public setBrandSuffix(brandSuffix?: ConfigCompany['brandSuffix']) {\n this.brandSuffix = brandSuffix;\n }\n\n generateProductInfo(room: Room, rate?: RoomRate, listPosition?: number, quantity?: number): Product {\n const price = rate ? rate.getAveragePrice() : room.getLowestPrice();\n const nameParts = [room.name];\n const idParts = [this.providerHotelID, room.code];\n if (rate) {\n nameParts.push(rate.name);\n idParts.push(rate.code);\n }\n\n const product: Product = {\n name: nameParts.join(' - '),\n id: idParts.join(' - '),\n price: price,\n brand: [this.hotelName, this.providerHotelID, this.brandSuffix].filter(Boolean).join(' - '),\n category: room.name as string,\n };\n\n if (rate) {\n product.variant = rate.name;\n }\n\n if (listPosition !== undefined) {\n product.list = 'BE List';\n product.position = listPosition;\n }\n\n if (quantity !== undefined) {\n product.quantity = quantity;\n }\n\n return product;\n }\n\n generateAddonProductInfo(addonRow: BasketAddonRow): Product {\n const addon = addonRow.getAddon();\n return {\n name: addon.name,\n id: addon.code,\n price: addonRow.getTotalPrice(),\n brand: [this.hotelName, this.providerHotelID, this.brandSuffix].filter(Boolean).join(' - '),\n category: addon.category,\n quantity: addonRow.getTotalQuantity(),\n };\n }\n\n addRoomImpression(room: Room) {\n const product = this.generateProductInfo(room, undefined, this.impressions.length + 1);\n this.log('room impression', product);\n this.impressions.push(product);\n }\n\n addRoomRateImpression(room: Room, rate: RoomRate) {\n const product = this.generateProductInfo(room, rate, this.impressions.length + 1);\n this.log('rate impression', product);\n this.impressions.push(product);\n }\n\n sendRoomImpressions() {\n this.log('sending ' + this.impressions.length + ' impressions');\n\n if (this.impressions.length > 0) {\n TagManager.dataLayer({\n dataLayer: {\n event: 'Product impressions',\n ecommerce: {\n currencyCode: this.originalCurrencyCode,\n impressions: this.impressions,\n },\n },\n });\n\n this.impressions = [];\n }\n }\n\n sendRoomClick(room: Room, startDate: Dayjs, endDate: Dayjs) {\n const product = this.generateProductInfo(room);\n this.log('sending room rate click', product);\n TagManager.dataLayer({\n dataLayer: {\n event: 'productClick',\n ecommerce: {\n currencyCode: this.originalCurrencyCode,\n click: {\n products: [product],\n },\n StartDate: startDate.format(DATALAYER_DATE_FORMAT),\n EndDate: endDate.format(DATALAYER_DATE_FORMAT),\n },\n },\n });\n }\n\n sendAwayWindowOpen() {\n this.log('away window triggered');\n TagManager.dataLayer({\n dataLayer: {\n event: 'awayWindow',\n },\n });\n }\n\n sendRoomRateAddToCart(rate: RoomRate, quantity: number, startDate: Dayjs, endDate: Dayjs) {\n const product = this.generateProductInfo(rate.getRoom(), rate, undefined, quantity);\n this.log('sending room rate add to cart', product);\n TagManager.dataLayer({\n dataLayer: {\n event: 'addToCart',\n ecommerce: {\n currencyCode: this.originalCurrencyCode,\n add: {\n products: [product],\n },\n StartDate: startDate.format(DATALAYER_DATE_FORMAT),\n EndDate: endDate.format(DATALAYER_DATE_FORMAT),\n },\n },\n });\n }\n\n sendUpsellCancelled(rate: RoomRate) {\n const product = this.generateProductInfo(rate.getRoom(), rate, undefined, undefined);\n\n this.log('sending room upgrade cancellation event');\n\n TagManager.dataLayer({\n dataLayer: {\n event: 'upsellCancelled',\n item: [product],\n },\n });\n }\n\n sendUpsellConfirmed(oldRate: RoomRate, newRate: RoomRate) {\n this.log('sending room upgrade notification');\n\n const oldProduct = this.generateProductInfo(oldRate.getRoom(), oldRate, undefined, undefined);\n const newProduct = this.generateProductInfo(newRate.getRoom(), newRate, undefined, undefined);\n\n TagManager.dataLayer({\n dataLayer: {\n event: 'upsellConfirmed',\n priceDifference: newRate.getTotalPrice() - oldRate.getTotalPrice(),\n old: {\n products: [oldProduct],\n },\n new: {\n products: [newProduct],\n },\n },\n });\n }\n\n sendRoomView(startDate: Dayjs, endDate: Dayjs) {\n this.log('sending room view');\n\n TagManager.dataLayer({\n dataLayer: {\n event: 'room',\n ecommerce: {\n currencyCode: this.originalCurrencyCode,\n StartDate: startDate?.format(DATALAYER_DATE_FORMAT),\n EndDate: endDate?.format(DATALAYER_DATE_FORMAT),\n PageType: 'offerdetail',\n },\n },\n });\n }\n\n sendCheckoutView(basketRows: BasketRow[], addonRows: BasketAddonRow[]) {\n const products: Product[] = [];\n\n let startDate: Dayjs | undefined = undefined;\n let endDate: Dayjs | undefined = undefined;\n\n basketRows.forEach((row) => {\n startDate = row.getStartDate();\n endDate = row.getEndDate();\n products.push(this.generateProductInfo(row.getRoom(), row.getRate() as RoomRate, undefined, row.getNumberOfDays()));\n });\n\n addonRows.forEach((row) => {\n products.push(this.generateAddonProductInfo(row));\n });\n\n this.log('sending checkout view', products);\n\n TagManager.dataLayer({\n dataLayer: {\n event: 'checkout',\n ecommerce: {\n currencyCode: this.originalCurrencyCode,\n checkout: {\n actionField: { step: 1 },\n products,\n },\n StartDate: (startDate as Dayjs | undefined)?.format(DATALAYER_DATE_FORMAT),\n EndDate: (endDate as Dayjs | undefined)?.format(DATALAYER_DATE_FORMAT),\n PageType: 'conversionintent',\n },\n },\n });\n }\n\n sendReservationConfirmed(basketRows: BasketRow[], addonRows: BasketAddonRow[], reservations: ReservationsDTO) {\n let i = 0;\n basketRows.forEach((row) => {\n const products = [this.generateProductInfo(row.getRoom(), row.getRate() as RoomRate, undefined, row.getNumberOfDays())];\n\n if (i === 0) {\n addonRows.forEach((addonRow) => {\n products.push(this.generateAddonProductInfo(addonRow));\n });\n }\n\n this.log('sending reservation confirmation', products);\n\n try {\n TagManager.dataLayer({\n dataLayer: {\n event: 'roomPurchase',\n ecommerce: {\n currencyCode: this.originalCurrencyCode,\n purchase: {\n actionField: {\n id: reservations.reservations[i].reservationNumber,\n revenue: reservations.reservations[i].total.afterTax,\n tax: reservations.reservations[i].total.afterTax - reservations.reservations[i].total.beforeTax,\n coupon: row.getPromoCode(),\n },\n products,\n },\n StartDate: row.getStartDate().format(DATALAYER_DATE_FORMAT),\n EndDate: row.getEndDate().format(DATALAYER_DATE_FORMAT),\n BookingDate: dayjs().format(DATALAYER_DATE_FORMAT),\n PageType: 'conversion',\n paymentType: reservations.reservations[i].paymentMethod,\n },\n },\n });\n } catch (e) {\n Sentry.addBreadcrumb({\n level: Severity.Error,\n message: 'sending reservation confirmation failed',\n data: { ...reservations, index: i },\n });\n Sentry.captureException(e);\n }\n\n i++;\n });\n }\n\n sendMemberSignUp() {\n TagManager.dataLayer({\n dataLayer: {\n event: 'Email Sign up',\n },\n });\n }\n\n sendInteraction(name: string, type: InteractionType, step: InteractionStep) {\n const interaction = {\n 'Interaction Name': name,\n 'Interaction Type': type,\n 'Interaction Step': step,\n };\n\n this.log('sending interaction', interaction);\n\n TagManager.dataLayer({\n dataLayer: interaction,\n });\n }\n\n sendCancellation(reservationNumber: string) {\n this.log('sending cancellation for reservation ' + reservationNumber);\n\n TagManager.dataLayer({\n dataLayer: {\n event: 'refund',\n ecommerce: {\n refund: {\n actionField: {\n id: reservationNumber,\n },\n },\n },\n },\n });\n }\n\n sendDateSelection(startDate: Dayjs, endDate: Dayjs) {\n if (!startDate || !endDate) {\n return;\n }\n\n this.log('sending date selection ', startDate, endDate);\n\n TagManager.dataLayer({\n dataLayer: {\n event: 'dateSelection',\n arrivalDate: startDate.format('YYYY-MM-DD'),\n departureDate: endDate.format('YYYY-MM-DD'),\n },\n });\n }\n\n protected log(...output: any) {\n if (!this.enableLogging) {\n return;\n }\n\n console.log(\n '[DATALAYER]: ' +\n output\n .map((it: any) => {\n if (typeof it === 'object') {\n return JSON.stringify(it);\n }\n return it;\n })\n .join('; ')\n );\n }\n}\n\ntype Product = {\n name: string; // <Put the Room Variant here example - ‘BAE - Best Available Everyday - Superoo’>\n id: string; // <Put the SKU for Room variant here example - ‘62991 - VEK - 04BAE’>\n price: number; // <Put the PER DAY price of room>\n brand: string; // <Put the hotel brand here example - ‘Australia - Ovolo Woolloomooloo - 62991’>\n category: string; // <Put the Category of room here example - ‘Superoo’>\n variant?: string; // <Put the Variant of room here example - ‘BAE - Best Available Everyday - Prepaid Rate’>\n list?: string; // <Put ‘BE List’ if shown in Booking Engine else put ‘Hotel List’>\n position?: number; // <Put the position of hotel in the list here example 1’>\n quantity?: number; // <Put the rooms X nights>\n};\n\nexport enum InteractionType {\n NUMBER_INPUT = '+-widget',\n CALENDAR = 'Calendar',\n BUTTON = 'Button',\n DROPDOWN = 'Dropdown',\n LINK_DROPDOWN = 'Link dropdown',\n LINK = 'Link',\n FORM_FIELD = 'Form field',\n CHECKBOX = 'Checkbox',\n}\n\nexport enum InteractionStep {\n DATES = 'Dates',\n ROOMS = 'Rooms',\n GUEST_DETAILS = 'Guest Details',\n}\n"]}
1
+ {"version":3,"file":"DataLayer.js","sourceRoot":"/","sources":["src/util/DataLayer.ts"],"names":[],"mappings":"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","sourcesContent":["import TagManager from 'react-gtm-module';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport { Room } from '@/models/Room/Room';\nimport dayjs from 'dayjs';\nimport { Dayjs } from 'dayjs';\nimport BasketRow from '@/models/BasketRow';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport ReservationsDTO from '@/models/Api/ReservationsDTO';\nimport * as Sentry from '@sentry/browser';\nimport { Severity } from '@sentry/types';\nimport { ConfigCompany, HasDatalayerTags } from '@/models/Client/Hotel/Company';\n\nconst DATALAYER_DATE_FORMAT = 'YYYY-M-D';\nexport default class DataLayer {\n static instance = new DataLayer();\n\n private enableLogging = true;\n\n private hotelName!: string;\n private providerHotelID!: string;\n\n private originalCurrencyCode?: string;\n\n private impressions: Product[] = [];\n\n private brandSuffix?: ConfigCompany['brandSuffix'];\n\n // TODO: Move this GTM initialize call to config, so gtm IDs are always in Client world\n static initialiseGTM(hotelConfig?: HasDatalayerTags) {\n const gtmIds = hotelConfig?.datalayer?.gtmIds;\n gtmIds?.forEach((gtmId) => {\n TagManager.initialize({ gtmId });\n });\n }\n\n public setProviderHotelID(id: string) {\n this.providerHotelID = id;\n }\n\n public setHotelName(hotelName: string) {\n this.hotelName = hotelName;\n }\n\n public setCurrencyCodes(currentCurrencyCode: string, originalCurrencyCode?: string) {\n if (originalCurrencyCode) {\n this.originalCurrencyCode = originalCurrencyCode;\n }\n }\n\n public setBrandSuffix(brandSuffix?: ConfigCompany['brandSuffix']) {\n this.brandSuffix = brandSuffix;\n }\n\n generateProductInfo(room: Room, rate?: RoomRate, listPosition?: number, quantity?: number): Product {\n const price = rate ? rate.getAveragePrice() : room.getLowestPrice();\n const nameParts = [room.name];\n const idParts = [this.providerHotelID, room.code];\n if (rate) {\n nameParts.push(rate.name);\n idParts.push(rate.code);\n }\n\n const product: Product = {\n name: nameParts.join(' - '),\n id: idParts.join(' - '),\n price: price,\n brand: [this.hotelName, this.providerHotelID, this.brandSuffix].filter(Boolean).join(' - '),\n category: room.name as string,\n };\n\n if (rate) {\n product.variant = rate.name;\n }\n\n if (listPosition !== undefined) {\n product.list = 'BE List';\n product.position = listPosition;\n }\n\n if (quantity !== undefined) {\n product.quantity = quantity;\n }\n\n return product;\n }\n\n generateAddonProductInfo(addonRow: BasketAddonRow): Product {\n const addon = addonRow.getAddon();\n return {\n name: addon.name,\n id: addon.code,\n price: addonRow.getTotalPrice(),\n brand: [this.hotelName, this.providerHotelID, this.brandSuffix].filter(Boolean).join(' - '),\n category: addon.category,\n quantity: addonRow.getTotalQuantity(),\n };\n }\n\n addRoomImpression(room: Room) {\n const product = this.generateProductInfo(room, undefined, this.impressions.length + 1);\n this.log('room impression', product);\n this.impressions.push(product);\n }\n\n addRoomRateImpression(room: Room, rate: RoomRate) {\n const product = this.generateProductInfo(room, rate, this.impressions.length + 1);\n this.log('rate impression', product);\n this.impressions.push(product);\n }\n\n sendRoomImpressions() {\n this.log('sending ' + this.impressions.length + ' impressions');\n\n if (this.impressions.length > 0) {\n TagManager.dataLayer({\n dataLayer: {\n event: 'Product impressions',\n ecommerce: {\n currencyCode: this.originalCurrencyCode,\n impressions: this.impressions,\n },\n },\n });\n\n this.impressions = [];\n }\n }\n\n sendRoomClick(room: Room, startDate: Dayjs, endDate: Dayjs) {\n const product = this.generateProductInfo(room);\n this.log('sending room rate click', product);\n TagManager.dataLayer({\n dataLayer: {\n event: 'productClick',\n ecommerce: {\n currencyCode: this.originalCurrencyCode,\n click: {\n products: [product],\n },\n StartDate: startDate.format(DATALAYER_DATE_FORMAT),\n EndDate: endDate.format(DATALAYER_DATE_FORMAT),\n },\n },\n });\n }\n\n sendAwayWindowOpen() {\n this.log('away window triggered');\n TagManager.dataLayer({\n dataLayer: {\n event: 'awayWindow',\n },\n });\n }\n\n sendRoomRateAddToCart(rate: RoomRate, quantity: number, startDate: Dayjs, endDate: Dayjs) {\n const product = this.generateProductInfo(rate.getRoom(), rate, undefined, quantity);\n this.log('sending room rate add to cart', product);\n TagManager.dataLayer({\n dataLayer: {\n event: 'addToCart',\n ecommerce: {\n currencyCode: this.originalCurrencyCode,\n add: {\n products: [product],\n },\n StartDate: startDate.format(DATALAYER_DATE_FORMAT),\n EndDate: endDate.format(DATALAYER_DATE_FORMAT),\n },\n },\n });\n }\n\n sendUpsellCancelled(rate: RoomRate) {\n const product = this.generateProductInfo(rate.getRoom(), rate, undefined, undefined);\n\n this.log('sending room upgrade cancellation event');\n\n TagManager.dataLayer({\n dataLayer: {\n event: 'upsellCancelled',\n item: [product],\n },\n });\n }\n\n sendUpsellConfirmed(oldRate: RoomRate, newRate: RoomRate) {\n this.log('sending room upgrade notification');\n\n const oldProduct = this.generateProductInfo(oldRate.getRoom(), oldRate, undefined, undefined);\n const newProduct = this.generateProductInfo(newRate.getRoom(), newRate, undefined, undefined);\n\n TagManager.dataLayer({\n dataLayer: {\n event: 'upsellConfirmed',\n priceDifference: newRate.getTotalPrice() - oldRate.getTotalPrice(),\n old: {\n products: [oldProduct],\n },\n new: {\n products: [newProduct],\n },\n },\n });\n }\n\n sendRoomView(startDate: Dayjs, endDate: Dayjs) {\n this.log('sending room view');\n\n TagManager.dataLayer({\n dataLayer: {\n event: 'room',\n ecommerce: {\n currencyCode: this.originalCurrencyCode,\n StartDate: startDate?.format(DATALAYER_DATE_FORMAT),\n EndDate: endDate?.format(DATALAYER_DATE_FORMAT),\n PageType: 'offerdetail',\n },\n },\n });\n }\n\n sendCheckoutView(basketRows: BasketRow[], addonRows: BasketAddonRow[]) {\n const products: Product[] = [];\n\n let startDate: Dayjs | undefined = undefined;\n let endDate: Dayjs | undefined = undefined;\n\n basketRows.forEach((row) => {\n startDate = row.getStartDate();\n endDate = row.getEndDate();\n products.push(this.generateProductInfo(row.getRoom(), row.getRate() as RoomRate, undefined, row.getNumberOfDays()));\n });\n\n addonRows.forEach((row) => {\n products.push(this.generateAddonProductInfo(row));\n });\n\n this.log('sending checkout view', products);\n\n TagManager.dataLayer({\n dataLayer: {\n event: 'checkout',\n ecommerce: {\n currencyCode: this.originalCurrencyCode,\n checkout: {\n actionField: { step: 1 },\n products,\n },\n StartDate: (startDate as Dayjs | undefined)?.format(DATALAYER_DATE_FORMAT),\n EndDate: (endDate as Dayjs | undefined)?.format(DATALAYER_DATE_FORMAT),\n PageType: 'conversionintent',\n },\n },\n });\n }\n\n sendReservationConfirmed(basketRows: BasketRow[], addonRows: BasketAddonRow[], reservations: ReservationsDTO) {\n let i = 0;\n basketRows.forEach((row) => {\n const products = [this.generateProductInfo(row.getRoom(), row.getRate() as RoomRate, undefined, row.getNumberOfDays())];\n\n if (i === 0) {\n addonRows.forEach((addonRow) => {\n products.push(this.generateAddonProductInfo(addonRow));\n });\n }\n\n this.log('sending reservation confirmation', products);\n\n try {\n TagManager.dataLayer({\n dataLayer: {\n event: 'roomPurchase',\n ecommerce: {\n currencyCode: this.originalCurrencyCode,\n purchase: {\n actionField: {\n id: reservations.reservations[i].reservationNumber,\n revenue: reservations.reservations[i].total.afterTax,\n tax: reservations.reservations[i].total.afterTax - reservations.reservations[i].total.beforeTax,\n coupon: row.getPromoCode(),\n },\n products,\n },\n StartDate: row.getStartDate().format(DATALAYER_DATE_FORMAT),\n EndDate: row.getEndDate().format(DATALAYER_DATE_FORMAT),\n BookingDate: dayjs().format(DATALAYER_DATE_FORMAT),\n PageType: 'conversion',\n paymentType: reservations.reservations[i].paymentMethod,\n },\n },\n });\n } catch (e) {\n Sentry.addBreadcrumb({\n level: Severity.Error,\n message: 'sending reservation confirmation failed',\n data: { ...reservations, index: i },\n });\n Sentry.captureException(e);\n }\n\n i++;\n });\n }\n\n sendMemberSignUp() {\n TagManager.dataLayer({\n dataLayer: {\n event: 'Email Sign up',\n },\n });\n }\n\n sendInteraction(name: string, type: InteractionType, step: InteractionStep) {\n const interaction = {\n 'Interaction Name': name,\n 'Interaction Type': type,\n 'Interaction Step': step,\n };\n\n this.log('sending interaction', interaction);\n\n TagManager.dataLayer({\n dataLayer: interaction,\n });\n }\n\n sendCancellation(reservationNumber: string) {\n this.log('sending cancellation for reservation ' + reservationNumber);\n\n TagManager.dataLayer({\n dataLayer: {\n event: 'refund',\n ecommerce: {\n refund: {\n actionField: {\n id: reservationNumber,\n },\n },\n },\n },\n });\n }\n\n sendDateSelection(startDate: Dayjs, endDate: Dayjs) {\n if (!startDate || !endDate) {\n return;\n }\n\n this.log('sending date selection ', startDate, endDate);\n\n TagManager.dataLayer({\n dataLayer: {\n event: 'dateSelection',\n arrivalDate: startDate.format(DATALAYER_DATE_FORMAT),\n departureDate: endDate.format(DATALAYER_DATE_FORMAT),\n },\n });\n }\n\n protected log(...output: any) {\n if (!this.enableLogging) {\n return;\n }\n\n console.log(\n '[DATALAYER]: ' +\n output\n .map((it: any) => {\n if (typeof it === 'object') {\n return JSON.stringify(it);\n }\n return it;\n })\n .join('; ')\n );\n }\n}\n\ntype Product = {\n name: string; // <Put the Room Variant here example - ‘BAE - Best Available Everyday - Superoo’>\n id: string; // <Put the SKU for Room variant here example - ‘62991 - VEK - 04BAE’>\n price: number; // <Put the PER DAY price of room>\n brand: string; // <Put the hotel brand here example - ‘Australia - Ovolo Woolloomooloo - 62991’>\n category: string; // <Put the Category of room here example - ‘Superoo’>\n variant?: string; // <Put the Variant of room here example - ‘BAE - Best Available Everyday - Prepaid Rate’>\n list?: string; // <Put ‘BE List’ if shown in Booking Engine else put ‘Hotel List’>\n position?: number; // <Put the position of hotel in the list here example 1’>\n quantity?: number; // <Put the rooms X nights>\n};\n\nexport enum InteractionType {\n NUMBER_INPUT = '+-widget',\n CALENDAR = 'Calendar',\n BUTTON = 'Button',\n DROPDOWN = 'Dropdown',\n LINK_DROPDOWN = 'Link dropdown',\n LINK = 'Link',\n FORM_FIELD = 'Form field',\n CHECKBOX = 'Checkbox',\n}\n\nexport enum InteractionStep {\n DATES = 'Dates',\n ROOMS = 'Rooms',\n GUEST_DETAILS = 'Guest Details',\n}\n"]}