@roomstay/frontend 2.6.72 → 2.6.73

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 (64) hide show
  1. package/dist/288.bundle.js +1 -1
  2. package/dist/659.bundle.js +1 -1
  3. package/dist/903.bundle.js +1 -1
  4. package/dist/978.bundle.js +1 -1
  5. package/dist/984.bundle.js +1 -0
  6. package/dist/main.bundle.js +1 -1
  7. package/dist/src/components/members/SignInModal/EmailAndFullnameMemberModal.d.ts +4 -1
  8. package/dist/src/components/members/SignInModal/EmailAndFullnameMemberModal.js +15 -1
  9. package/dist/src/components/members/SignInModal/EmailAndFullnameMemberModal.js.map +1 -1
  10. package/dist/src/components/members/SignInModal/ExternalMemberModal.d.ts +2 -0
  11. package/dist/src/components/members/SignInModal/ExternalMemberModal.js +5 -3
  12. package/dist/src/components/members/SignInModal/ExternalMemberModal.js.map +1 -1
  13. package/dist/src/components/members/SignInModal/MemberSignInModal.js +2 -0
  14. package/dist/src/components/members/SignInModal/MemberSignInModal.js.map +1 -1
  15. package/dist/src/components/steps/addons/AddonCard.js +3 -1
  16. package/dist/src/components/steps/addons/AddonCard.js.map +1 -1
  17. package/dist/src/components/steps/common/CommonAddonSummary/CommonAddonSummary.js +4 -4
  18. package/dist/src/components/steps/common/CommonAddonSummary/CommonAddonSummary.js.map +1 -1
  19. package/dist/src/components/steps/confirmation/additionalOffers/AdditionalOffersModal.js +3 -1
  20. package/dist/src/components/steps/confirmation/additionalOffers/AdditionalOffersModal.js.map +1 -1
  21. package/dist/src/components/steps/room/RoomList.js +1 -4
  22. package/dist/src/components/steps/room/RoomList.js.map +1 -1
  23. package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRoomList.js +1 -4
  24. package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRoomList.js.map +1 -1
  25. package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRooms.js +6 -2
  26. package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRooms.js.map +1 -1
  27. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRates.js +6 -5
  28. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRates.js.map +1 -1
  29. package/dist/src/components/summary/BESummaryRoomRow.js +6 -1
  30. package/dist/src/components/summary/BESummaryRoomRow.js.map +1 -1
  31. package/dist/src/contexts/BookingEngineContext/BookingEngineContextType.types.d.ts +2 -0
  32. package/dist/src/contexts/BookingEngineContext/BookingEngineContextType.types.js.map +1 -1
  33. package/dist/src/contexts/BookingEngineContext/BookingEngineContextWrapper.js +3 -0
  34. package/dist/src/contexts/BookingEngineContext/BookingEngineContextWrapper.js.map +1 -1
  35. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +5 -1
  36. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
  37. package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js +8 -3
  38. package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js.map +1 -1
  39. package/dist/src/contexts/HotelOverridesContext.js +4 -0
  40. package/dist/src/contexts/HotelOverridesContext.js.map +1 -1
  41. package/dist/src/events/index.d.ts +1 -1
  42. package/dist/src/events/index.js +1 -1
  43. package/dist/src/events/index.js.map +1 -1
  44. package/dist/src/events/state/SelectedHotelChangeEvent.js.map +1 -1
  45. package/dist/src/hooks/RoomRateAvailabilityListFromApi.js +51 -2
  46. package/dist/src/hooks/RoomRateAvailabilityListFromApi.js.map +1 -1
  47. package/dist/src/models/Api/HotelDTO.js.map +1 -1
  48. package/dist/src/models/Api/HotelOverrideDTO.d.ts +5 -0
  49. package/dist/src/models/Api/HotelOverrideDTO.js.map +1 -1
  50. package/dist/src/models/Client/Hotel/Hotel.d.ts +8 -0
  51. package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
  52. package/dist/src/models/Room/RoomRate.js +2 -0
  53. package/dist/src/models/Room/RoomRate.js.map +1 -1
  54. package/dist/src/translations/Translation.d.ts +3 -0
  55. package/dist/src/translations/Translation.js +3 -0
  56. package/dist/src/translations/Translation.js.map +1 -1
  57. package/dist/src/translations/languages/en-gb.js +3 -0
  58. package/dist/src/translations/languages/en-gb.js.map +1 -1
  59. package/dist/test.bundle.js +1 -1
  60. package/dist/tests/offline/entry/config/hotelSpecDefault.js +2 -0
  61. package/dist/tests/offline/entry/config/hotelSpecDefault.js.map +1 -1
  62. package/dist/vendors.bundle.js +1 -1
  63. package/package.json +2 -2
  64. package/dist/663.bundle.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"RoomRateAvailabilityListFromApi.js","sourceRoot":"/","sources":["src/hooks/RoomRateAvailabilityListFromApi.ts"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext, CompanyContext, RoomstayMemberContext } from '@frontend/contexts';\nimport { GuestSearchEvent, RoomListSearchEvent } from '@frontend/events';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport { IRoomstayMemberBookingItem } from '@roomstay/core';\nimport dayjs from 'dayjs';\nimport { useContext, useEffect, useMemo, useState } from 'react';\n\nimport BasketRow from '@/models/BasketRow';\nimport Filter from '@/models/Room/Filters/Filter';\nimport { Room } from '@/models/Room/Room';\nimport { RoomListSearch } from '@/models/RoomListSearch';\nimport { SearchParameters } from '@/models/SearchParameters';\nimport FilterProvider from '@/providers/FilterProvider';\n\nimport { useSignedInMember } from './useSignedInMember';\n\nexport const useRoomRateAvailabilityListFromApi = () => {\n const { hotel } = useCurrentHotel();\n const ccx = useContext(CompanyContext);\n\n const beContext = useContext(BookingEngineContext);\n const { roomstayMember } = useContext(RoomstayMemberContext);\n\n const { attemptSelectUnfilledRow, selectedBasketRow, getAllValidRows } = useContext(BasketContext);\n\n const [rooms, setRooms] = useState<Room[]>([]);\n\n const [isLoading, setIsLoading] = useState(false);\n const [loadingAttempted, setLoadingAttempted] = useState(false);\n\n const [openRoom, setOpenRoom] = useState<boolean | null>(null);\n const [apiHasError, setApiHasError] = useState<boolean | null>(null);\n\n const startDate = selectedBasketRow?.getStartDate();\n const endDate = selectedBasketRow?.getEndDate();\n const promoCode = selectedBasketRow?.getPromoCode();\n\n const adults = selectedBasketRow?.getAdults();\n const children = selectedBasketRow?.getChildren();\n\n const { memberNumber } = useSignedInMember();\n\n const { raise } = useEvent();\n\n const retargetingRoom = useMemo(() => {\n if (!roomstayMember || roomstayMember.bookings?.length === 0) return null;\n\n let lastBookingDate: dayjs.Dayjs;\n let lastBookingRoomcode = '';\n roomstayMember.bookings?.forEach?.((booking) => {\n if (booking.hotelId !== hotel?.hotelID) {\n return;\n }\n\n Object.values<IRoomstayMemberBookingItem>(booking.itinerary).map((itinerary) => {\n const { roomCode, nights } = itinerary;\n const dates = Object.keys(nights).map(dayjs);\n const maxDate = dayjs(\n Math.max.apply(\n null,\n dates.map((d) => +d)\n )\n );\n if (!lastBookingDate || maxDate.isAfter(maxDate)) {\n lastBookingDate = maxDate;\n lastBookingRoomcode = roomCode;\n }\n });\n });\n\n return rooms.find((room) => room.code === lastBookingRoomcode);\n }, [rooms, roomstayMember]);\n\n const getRoomsByBasketRow = async (basketRow: BasketRow): Promise<Room[]> => {\n const filters: Filter[] = Object.values(beContext.currentFilters).filter((filter) => !!filter) as Filter[];\n return await FilterProvider.getRoomList(basketRow, filters, hotel?.hotelID as string, memberNumber);\n };\n\n useEffect(() => {\n let isCancelled = false;\n\n try {\n const search: SearchParameters = {\n checkInTime: startDate?.format('YYYY-M-D'),\n checkOutTime: endDate?.format('YYYY-M-D'),\n numAdults: adults,\n numChildren: children,\n numRooms: 1,\n promoCode: promoCode,\n };\n\n const event = new GuestSearchEvent(search);\n raise(event);\n\n const filters: Filter[] = Object.values(beContext.currentFilters).filter((filter) => !!filter) as Filter[];\n\n let row = selectedBasketRow;\n\n if (!row && !rooms.length) {\n row = attemptSelectUnfilledRow() as BasketRow;\n }\n\n if (!row) {\n const validRows = getAllValidRows();\n row = validRows[validRows.length - 1];\n }\n\n const onRoomListFinished = () => {\n setLoadingAttempted(true);\n setIsLoading(false);\n };\n\n if (row) {\n setIsLoading(true);\n // Avoid using .finally() when you need to wait for .then() or .catch() logic to complete —\n // it runs after the Promise settles, but not after those blocks finish executing;\n // instead, manually call your cleanup function at the end of .then() and .catch().\n FilterProvider.getRoomList(row, filters, hotel?.hotelID as string, memberNumber)\n .then((availableRooms) => {\n if (!isCancelled) {\n setRooms(availableRooms);\n setOpenRoom(!!selectedBasketRow);\n setApiHasError(false);\n\n const foundRooms: RoomListSearch[] =\n availableRooms?.map((room) => {\n const { name, code } = room;\n\n const foundRoom: RoomListSearch = {\n name: name as string,\n code: code as string,\n lowestPrice: room.getLowestPrice(),\n highestPrice: room.getHighestPrice(),\n currency: ccx.currentCurrency,\n\n rates:\n room.getRates()?.map((rate) => {\n const { name, code } = rate;\n return {\n name,\n code,\n\n price: {\n averagePrice: rate.getAveragePrice(),\n totalPrice: rate.getTotalPrice(),\n currency: ccx.currentCurrency,\n },\n };\n }) ?? [],\n };\n\n return foundRoom;\n }) ?? [];\n\n const event = new RoomListSearchEvent(search, foundRooms);\n raise(event);\n onRoomListFinished();\n }\n })\n .catch(() => {\n if (!isCancelled) {\n setRooms([]);\n setOpenRoom(null);\n setApiHasError(true);\n }\n onRoomListFinished();\n });\n }\n } catch (ex) {\n //\n }\n\n return () => {\n setIsLoading(false);\n isCancelled = true;\n };\n }, [adults, children, startDate, endDate, promoCode, ccx.currentLanguage, beContext.currentFilters, selectedBasketRow?.getStale(), memberNumber, roomstayMember]);\n\n return { loadingAttempted, isLoading, rooms, openRoom, apiHasError, retargetingRoom, getRoomsByBasketRow };\n};\n"]}
1
+ {"version":3,"file":"RoomRateAvailabilityListFromApi.js","sourceRoot":"/","sources":["src/hooks/RoomRateAvailabilityListFromApi.ts"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext, CompanyContext, RoomstayMemberContext } from '@frontend/contexts';\nimport { GuestSearchEvent, RoomListSearchEvent } from '@frontend/events';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport { IRoomstayMemberBookingItem } from '@roomstay/core';\nimport dayjs from 'dayjs';\nimport { useContext, useEffect, useMemo, useState } from 'react';\nimport cloneDeep from 'lodash/cloneDeep';\n\nimport BasketRow from '@/models/BasketRow';\nimport Filter from '@/models/Room/Filters/Filter';\nimport { Room } from '@/models/Room/Room';\nimport { RoomListSearch } from '@/models/RoomListSearch';\nimport { SearchParameters } from '@/models/SearchParameters';\nimport FilterProvider from '@/providers/FilterProvider';\n\nimport { useSignedInMember } from './useSignedInMember';\n\nexport const useRoomRateAvailabilityListFromApi = () => {\n const { hotel } = useCurrentHotel();\n const ccx = useContext(CompanyContext);\n\n const beContext = useContext(BookingEngineContext);\n const { roomstayMember } = useContext(RoomstayMemberContext);\n\n const { attemptSelectUnfilledRow, selectedBasketRow, getAllValidRows, currentBasketRows } = useContext(BasketContext);\n\n const [rooms, setRooms] = useState<Room[]>([]);\n\n const [isLoading, setIsLoading] = useState(false);\n const [loadingAttempted, setLoadingAttempted] = useState(false);\n\n const [openRoom, setOpenRoom] = useState<boolean | null>(null);\n const [apiHasError, setApiHasError] = useState<boolean | null>(null);\n\n const startDate = selectedBasketRow?.getStartDate();\n const endDate = selectedBasketRow?.getEndDate();\n const promoCode = selectedBasketRow?.getPromoCode();\n\n const adults = selectedBasketRow?.getAdults();\n const children = selectedBasketRow?.getChildren();\n\n const { memberNumber } = useSignedInMember();\n\n const { raise } = useEvent();\n\n const retargetingRoom = useMemo(() => {\n if (!roomstayMember || roomstayMember.bookings?.length === 0) return null;\n\n let lastBookingDate: dayjs.Dayjs;\n let lastBookingRoomcode = '';\n roomstayMember.bookings?.forEach?.((booking) => {\n if (booking.hotelId !== hotel?.hotelID) {\n return;\n }\n\n Object.values<IRoomstayMemberBookingItem>(booking.itinerary).map((itinerary) => {\n const { roomCode, nights } = itinerary;\n const dates = Object.keys(nights).map(dayjs);\n const maxDate = dayjs(\n Math.max.apply(\n null,\n dates.map((d) => +d)\n )\n );\n if (!lastBookingDate || maxDate.isAfter(maxDate)) {\n lastBookingDate = maxDate;\n lastBookingRoomcode = roomCode;\n }\n });\n });\n\n return rooms.find((room) => room.code === lastBookingRoomcode);\n }, [rooms, roomstayMember]);\n\n const getRoomsByBasketRow = async (basketRow: BasketRow): Promise<Room[]> => {\n const filters: Filter[] = Object.values(beContext.currentFilters).filter((filter) => !!filter) as Filter[];\n return await FilterProvider.getRoomList(basketRow, filters, hotel?.hotelID as string, memberNumber);\n };\n\n useEffect(() => {\n let isCancelled = false;\n\n try {\n const search: SearchParameters = {\n checkInTime: startDate?.format('YYYY-M-D'),\n checkOutTime: endDate?.format('YYYY-M-D'),\n numAdults: adults,\n numChildren: children,\n numRooms: 1,\n promoCode: promoCode,\n };\n\n const event = new GuestSearchEvent(search);\n raise(event);\n\n const filters: Filter[] = Object.values(beContext.currentFilters).filter((filter) => !!filter) as Filter[];\n\n let row = selectedBasketRow;\n\n if (!row && !rooms.length) {\n row = attemptSelectUnfilledRow() as BasketRow;\n }\n\n if (!row) {\n const validRows = getAllValidRows();\n row = validRows[validRows.length - 1];\n }\n\n const onRoomListFinished = () => {\n setLoadingAttempted(true);\n setIsLoading(false);\n };\n\n if (row) {\n setIsLoading(true);\n // Avoid using .finally() when you need to wait for .then() or .catch() logic to complete —\n // it runs after the Promise settles, but not after those blocks finish executing;\n // instead, manually call your cleanup function at the end of .then() and .catch().\n FilterProvider.getRoomList(row, filters, hotel?.hotelID as string, memberNumber)\n .then((rooms) =>\n // Subtract availability already taken by other basket rows\n rooms.map((cacheableRoom) => {\n const room = cloneDeep(cacheableRoom);\n\n const startDate = row.getStartDate();\n const endDate = row.getEndDate();\n\n if (!startDate || !endDate) {\n return room;\n }\n\n const otherBasketRowsForRoom = getAllValidRows().filter((candidate) => {\n if (candidate.getID() === selectedBasketRow?.getID()) {\n // We are editing this basket row, so don't count it.\n return false;\n }\n\n return candidate.getRoomCode() === room.code;\n });\n\n for (const rate of room.filteredRates ?? []) {\n for (const date of Object.keys(rate.nightRates)) {\n for (const otherRow of otherBasketRowsForRoom) {\n const otherRowStartDate = otherRow.getStartDate();\n const otherRowEndDate = otherRow.getEndDate();\n\n if (!otherRowStartDate || !otherRowEndDate) {\n continue;\n }\n\n if (dayjs(date).isBetween(otherRowStartDate, otherRowEndDate, 'day', '[)')) {\n // @ts-expect-error, the type is wrong :(\n rate.nightRates[date].available = Math.max(rate.nightRates[date].available - 1, 0);\n }\n }\n }\n }\n\n return room;\n })\n )\n .then((rooms) => rooms.filter((room) => hotel?.showUnavailableRooms || room.isAvailable()))\n .then((availableRooms) => {\n if (!isCancelled) {\n setRooms(availableRooms);\n setOpenRoom(!!selectedBasketRow);\n setApiHasError(false);\n\n const foundRooms: RoomListSearch[] =\n availableRooms?.map((room) => {\n const { name, code } = room;\n\n const foundRoom: RoomListSearch = {\n name: name as string,\n code: code as string,\n lowestPrice: room.getLowestPrice(),\n highestPrice: room.getHighestPrice(),\n currency: ccx.currentCurrency,\n\n rates:\n room.getRates()?.map((rate) => {\n const { name, code } = rate;\n return {\n name,\n code,\n\n price: {\n averagePrice: rate.getAveragePrice(),\n totalPrice: rate.getTotalPrice(),\n currency: ccx.currentCurrency,\n },\n };\n }) ?? [],\n };\n\n return foundRoom;\n }) ?? [];\n\n const event = new RoomListSearchEvent(search, foundRooms);\n raise(event);\n onRoomListFinished();\n }\n })\n .catch(() => {\n if (!isCancelled) {\n setRooms([]);\n setOpenRoom(null);\n setApiHasError(true);\n }\n onRoomListFinished();\n });\n }\n } catch (ex) {\n //\n }\n\n return () => {\n setIsLoading(false);\n isCancelled = true;\n };\n }, [\n adults,\n children,\n startDate,\n endDate,\n promoCode,\n ccx.currentLanguage,\n beContext.currentFilters,\n selectedBasketRow?.getStale(),\n memberNumber,\n roomstayMember,\n selectedBasketRow,\n currentBasketRows,\n ]);\n\n return { loadingAttempted, isLoading, rooms, openRoom, apiHasError, retargetingRoom, getRoomsByBasketRow };\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"HotelDTO.js","sourceRoot":"/","sources":["src/models/Api/HotelDTO.ts"],"names":[],"mappings":";;;AAMA,uDAAiH;AAkJjH,IAAY,WAOX;AAPD,WAAY,WAAW;IACnB,4BAAa,CAAA;IACb,wCAAyB,CAAA;IACzB,0BAAW,CAAA;IACX,wCAAyB,CAAA;IACzB,uCAAwB,CAAA;IACxB,oCAAqB,CAAA;AACzB,CAAC,EAPW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAOtB;AAEY,QAAA,0BAA0B,GAAsD;IACzF,CAAC,wBAAgB,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,IAAI;IACzC,CAAC,wBAAgB,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,UAAU;IACrD,CAAC,wBAAgB,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,GAAG;IACvC,CAAC,wBAAgB,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,eAAe;IAC/D,CAAC,wBAAgB,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,UAAU;IACrD,CAAC,wBAAgB,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,QAAQ;CACpD,CAAC","sourcesContent":["import { EnvironmentName } from '@planpay/web/src/lib/shared-lib-duplicates';\nimport type { EBookingPaymentMethod, EHotelCardProcessor, EHotelStateFieldConfiguration, EIntegration, IAuxiliaryFilter } from '@roomstay/core';\nimport { DeepPartial } from 'react-hook-form';\n\nimport ColorProfile from '@/models/Client/Hotel/ColorProfile';\nimport { DistanceUnitType } from '@/models/Client/Hotel/DistanceUnitType.types';\nimport { AdminHotelConfig, ClientHotelConfig, ConfigHotel, EPaymentCardType } from '@/models/Client/Hotel/Hotel';\nimport HotelAddress from '@/models/Client/Hotel/HotelAddress';\nimport { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nimport { WeekdayStartsOn } from '@/models/Client/Hotel/WeekdayStartsOn.types';\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 HotelRoomGroupsDTO = {\n groupName: string;\n id: string;\n checkInTime?: string | null;\n checkOutTime?: string | null;\n filters: {\n [id: string]: {\n name: string;\n type: 'select';\n includeAllAbove: boolean;\n requireInput: boolean;\n options: IAuxiliaryFilter['options'];\n };\n };\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 showBedType?: boolean;\n standardNumBeds: number;\n maxRollaways: number;\n bedType: string;\n amenities: HotelRoomAmenitiesDTO[];\n features: HotelRoomAmenitiesDTO[];\n bedTypeOverride?: string;\n roomGroupId?: string;\n roomSize?: number;\n prePerkDisclaimer?: string;\n perks?: ConfigHotel['perks'];\n petFriendly?: boolean;\n};\n\nexport type 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 timeZone: 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 cardProcessor: EHotelCardProcessor;\n planpay?: {\n username: string;\n minDaysShowPlanpay: number;\n env: EnvironmentName;\n };\n\n email?: string;\n hotelUrl?: string;\n heroImage?: string;\n images?: string[];\n integrations?: EIntegration[];\n roomGroups: HotelRoomGroupsDTO;\n requireDeposit?: boolean;\n /** @deprecated Use the new Fees model instead */\n enableCreditCardSurcharge?: boolean;\n availableCountries?: { name: string; value: string }[];\n preventCancellation?: boolean;\n maxAdults?: number;\n maxChildren?: number;\n maxInfants?: number;\n stateFieldConfiguration?: EHotelStateFieldConfiguration;\n itineraryNote: string;\n disableSavedPayments: boolean;\n} & Pick<\n AdminHotelConfig,\n | 'childConfiguration'\n | 'perks'\n | 'perkTitle'\n | 'countryPrefix'\n | 'quoteImageDesktop'\n | 'quoteImageMobile'\n | 'memberOnlyImage'\n | 'captureChildAge'\n | 'company'\n | 'fees'\n | 'addDepositFeeToBookingTotal'\n | 'minAdultAge'\n | 'maxAdultAge'\n | 'countInfantsInOccupancy'\n | 'preferProviderBookingId'\n | 'showUnavailableRooms'\n> &\n Pick<ClientHotelConfig, 'memberOnlyRenderRateLast'>;\n\nexport enum VGSCardName {\n Visa = 'visa',\n Mastercard = 'mastercard',\n JCB = 'jcb',\n DinersClub = 'dinersclub',\n AmericanExpress = 'amex',\n UnionPay = 'unionpay',\n}\n\nexport const SynxisToVGSCardNameMapping: { [synxisName in EPaymentCardType]: VGSCardName } = {\n [EPaymentCardType.Visa]: VGSCardName.Visa,\n [EPaymentCardType.Mastercard]: VGSCardName.Mastercard,\n [EPaymentCardType.JCB]: VGSCardName.JCB,\n [EPaymentCardType.AmericanExpress]: VGSCardName.AmericanExpress,\n [EPaymentCardType.DinersClub]: VGSCardName.DinersClub,\n [EPaymentCardType.UnionPay]: VGSCardName.UnionPay,\n};\n"]}
1
+ {"version":3,"file":"HotelDTO.js","sourceRoot":"/","sources":["src/models/Api/HotelDTO.ts"],"names":[],"mappings":";;;AAMA,uDAAiH;AAmJjH,IAAY,WAOX;AAPD,WAAY,WAAW;IACnB,4BAAa,CAAA;IACb,wCAAyB,CAAA;IACzB,0BAAW,CAAA;IACX,wCAAyB,CAAA;IACzB,uCAAwB,CAAA;IACxB,oCAAqB,CAAA;AACzB,CAAC,EAPW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAOtB;AAEY,QAAA,0BAA0B,GAAsD;IACzF,CAAC,wBAAgB,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,IAAI;IACzC,CAAC,wBAAgB,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,UAAU;IACrD,CAAC,wBAAgB,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,GAAG;IACvC,CAAC,wBAAgB,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,eAAe;IAC/D,CAAC,wBAAgB,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,UAAU;IACrD,CAAC,wBAAgB,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,QAAQ;CACpD,CAAC","sourcesContent":["import { EnvironmentName } from '@planpay/web/src/lib/shared-lib-duplicates';\nimport type { EBookingPaymentMethod, EHotelCardProcessor, EHotelStateFieldConfiguration, EIntegration, IAuxiliaryFilter } from '@roomstay/core';\nimport { DeepPartial } from 'react-hook-form';\n\nimport ColorProfile from '@/models/Client/Hotel/ColorProfile';\nimport { DistanceUnitType } from '@/models/Client/Hotel/DistanceUnitType.types';\nimport { AdminHotelConfig, ClientHotelConfig, ConfigHotel, EPaymentCardType } from '@/models/Client/Hotel/Hotel';\nimport HotelAddress from '@/models/Client/Hotel/HotelAddress';\nimport { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nimport { WeekdayStartsOn } from '@/models/Client/Hotel/WeekdayStartsOn.types';\nimport { Room } from '@/models/Room/Room';\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 HotelRoomGroupsDTO = {\n groupName: string;\n id: string;\n checkInTime?: string | null;\n checkOutTime?: string | null;\n filters: {\n [id: string]: {\n name: string;\n type: 'select';\n includeAllAbove: boolean;\n requireInput: boolean;\n options: IAuxiliaryFilter['options'];\n };\n };\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 showBedType?: boolean;\n standardNumBeds: number;\n maxRollaways: number;\n bedType: string;\n amenities: HotelRoomAmenitiesDTO[];\n features: HotelRoomAmenitiesDTO[];\n bedTypeOverride?: string;\n roomGroupId?: string;\n roomSize?: number;\n prePerkDisclaimer?: string;\n perks?: ConfigHotel['perks'];\n petFriendly?: boolean;\n};\n\nexport type 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 timeZone: 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 cardProcessor: EHotelCardProcessor;\n planpay?: {\n username: string;\n minDaysShowPlanpay: number;\n env: EnvironmentName;\n };\n\n email?: string;\n hotelUrl?: string;\n heroImage?: string;\n images?: string[];\n integrations?: EIntegration[];\n roomGroups: HotelRoomGroupsDTO;\n requireDeposit?: boolean;\n /** @deprecated Use the new Fees model instead */\n enableCreditCardSurcharge?: boolean;\n availableCountries?: { name: string; value: string }[];\n preventCancellation?: boolean;\n maxAdults?: number;\n maxChildren?: number;\n maxInfants?: number;\n stateFieldConfiguration?: EHotelStateFieldConfiguration;\n itineraryNote: string;\n disableSavedPayments: boolean;\n} & Pick<\n AdminHotelConfig,\n | 'childConfiguration'\n | 'perks'\n | 'perkTitle'\n | 'countryPrefix'\n | 'quoteImageDesktop'\n | 'quoteImageMobile'\n | 'memberOnlyImage'\n | 'captureChildAge'\n | 'company'\n | 'fees'\n | 'addDepositFeeToBookingTotal'\n | 'minAdultAge'\n | 'maxAdultAge'\n | 'countInfantsInOccupancy'\n | 'preferProviderBookingId'\n | 'showUnavailableRooms'\n> &\n Pick<ClientHotelConfig, 'memberOnlyRenderRateLast'>;\n\nexport enum VGSCardName {\n Visa = 'visa',\n Mastercard = 'mastercard',\n JCB = 'jcb',\n DinersClub = 'dinersclub',\n AmericanExpress = 'amex',\n UnionPay = 'unionpay',\n}\n\nexport const SynxisToVGSCardNameMapping: { [synxisName in EPaymentCardType]: VGSCardName } = {\n [EPaymentCardType.Visa]: VGSCardName.Visa,\n [EPaymentCardType.Mastercard]: VGSCardName.Mastercard,\n [EPaymentCardType.JCB]: VGSCardName.JCB,\n [EPaymentCardType.AmericanExpress]: VGSCardName.AmericanExpress,\n [EPaymentCardType.DinersClub]: VGSCardName.DinersClub,\n [EPaymentCardType.UnionPay]: VGSCardName.UnionPay,\n};\n"]}
@@ -70,5 +70,10 @@ export interface HotelOverrideDTO extends ShowYearOnCalendarProps, ShowPromoCode
70
70
  * If true, displays the long description next to the short description side by side in the room modal
71
71
  */
72
72
  roomModalDescSideBySide?: boolean;
73
+ /**
74
+ * If true, Disable grouping rooms in the All Accommodation tab
75
+ * Default: false
76
+ */
77
+ disableGroupRoomsAllTab?: boolean;
73
78
  orderUnavailableRoomsLast?: boolean;
74
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"HotelOverrideDTO.js","sourceRoot":"/","sources":["src/models/Api/HotelOverrideDTO.ts"],"names":[],"mappings":"","sourcesContent":["import { DistanceUnitType } from '@/models/Client/Hotel/DistanceUnitType.types';\n\nexport interface TransportDistancesConfig {\n subTitle?: string;\n unit?: string;\n suffix?: string;\n}\nexport interface TransportDistances {\n /** Seems that the old way had these as numbers, and if the unit wasn't metric done conversions on the number\n As they're inputting the string directly now I've changed the Distance component to accept both types and only\n run the conversion on numbers.\n */\n displayCard?: boolean;\n plane?: string | number;\n train?: string | number;\n tram?: string | number;\n bus?: string | number;\n taxi?: string | number;\n car?: string | number;\n ferry?: string | number;\n location?: string | number;\n configuration?: {\n plane?: TransportDistancesConfig;\n train?: TransportDistancesConfig;\n tram?: TransportDistancesConfig;\n bus?: TransportDistancesConfig;\n taxi?: TransportDistancesConfig;\n car?: TransportDistancesConfig;\n ferry?: TransportDistancesConfig;\n location?: TransportDistancesConfig;\n };\n}\n\nexport interface ShowYearOnCalendarProps {\n showYearOnCalendar?: boolean;\n yearDisplayOption?: string;\n}\n\nexport interface ShowPromoCodeAlertProps {\n showPromoCodeAlert?: boolean;\n promoCodeAlertType?: 'popup' | 'notification';\n}\n\nexport interface IPageTitle {\n enable: boolean;\n HotelInfo: string;\n FindReservation: string;\n Date: string;\n Room: string;\n Addon: string;\n Confirmation: string;\n Thanks: string;\n}\n\nexport interface IOverrideMessage {\n enable: boolean;\n BestRatePerks: string;\n BestRatePerksAlert: string;\n PreSignUp: string;\n PostSignUp: string;\n pricesIncludeFeesMessage?: string;\n}\n\nexport interface HotelOverrideDTO extends ShowYearOnCalendarProps, ShowPromoCodeAlertProps {\n hideByLine?: boolean;\n overrideDistanceUnitType?: boolean;\n distanceUnitType?: DistanceUnitType;\n transportDistances?: TransportDistances;\n phoneNumberInSummary?: string;\n enabledEventIds?: string[];\n pageTitle?: IPageTitle;\n showPromoCodeDescription?: boolean;\n alwaysShowDecimals?: boolean;\n messages?: IOverrideMessage;\n /**\n * If true, displays the long description next to the short description side by side in the room modal\n */\n roomModalDescSideBySide?: boolean;\n orderUnavailableRoomsLast?: boolean;\n}\n"]}
1
+ {"version":3,"file":"HotelOverrideDTO.js","sourceRoot":"/","sources":["src/models/Api/HotelOverrideDTO.ts"],"names":[],"mappings":"","sourcesContent":["import { DistanceUnitType } from '@/models/Client/Hotel/DistanceUnitType.types';\n\nexport interface TransportDistancesConfig {\n subTitle?: string;\n unit?: string;\n suffix?: string;\n}\nexport interface TransportDistances {\n /** Seems that the old way had these as numbers, and if the unit wasn't metric done conversions on the number\n As they're inputting the string directly now I've changed the Distance component to accept both types and only\n run the conversion on numbers.\n */\n displayCard?: boolean;\n plane?: string | number;\n train?: string | number;\n tram?: string | number;\n bus?: string | number;\n taxi?: string | number;\n car?: string | number;\n ferry?: string | number;\n location?: string | number;\n configuration?: {\n plane?: TransportDistancesConfig;\n train?: TransportDistancesConfig;\n tram?: TransportDistancesConfig;\n bus?: TransportDistancesConfig;\n taxi?: TransportDistancesConfig;\n car?: TransportDistancesConfig;\n ferry?: TransportDistancesConfig;\n location?: TransportDistancesConfig;\n };\n}\n\nexport interface ShowYearOnCalendarProps {\n showYearOnCalendar?: boolean;\n yearDisplayOption?: string;\n}\n\nexport interface ShowPromoCodeAlertProps {\n showPromoCodeAlert?: boolean;\n promoCodeAlertType?: 'popup' | 'notification';\n}\n\nexport interface IPageTitle {\n enable: boolean;\n HotelInfo: string;\n FindReservation: string;\n Date: string;\n Room: string;\n Addon: string;\n Confirmation: string;\n Thanks: string;\n}\n\nexport interface IOverrideMessage {\n enable: boolean;\n BestRatePerks: string;\n BestRatePerksAlert: string;\n PreSignUp: string;\n PostSignUp: string;\n pricesIncludeFeesMessage?: string;\n}\n\nexport interface HotelOverrideDTO extends ShowYearOnCalendarProps, ShowPromoCodeAlertProps {\n hideByLine?: boolean;\n overrideDistanceUnitType?: boolean;\n distanceUnitType?: DistanceUnitType;\n transportDistances?: TransportDistances;\n phoneNumberInSummary?: string;\n enabledEventIds?: string[];\n pageTitle?: IPageTitle;\n showPromoCodeDescription?: boolean;\n alwaysShowDecimals?: boolean;\n messages?: IOverrideMessage;\n /**\n * If true, displays the long description next to the short description side by side in the room modal\n */\n roomModalDescSideBySide?: boolean;\n /**\n * If true, Disable grouping rooms in the All Accommodation tab\n * Default: false\n */\n disableGroupRoomsAllTab?: boolean;\n orderUnavailableRoomsLast?: boolean;\n}\n"]}
@@ -183,7 +183,14 @@ export interface ClientHotelConfig {
183
183
  * This is where you can specify custom fields, language overrides, feature toggles etc.
184
184
  */
185
185
  onLoad?: () => void;
186
+ /**
187
+ * Order available rooms
188
+ */
186
189
  currentRoomSort?: RoomSort;
190
+ /**
191
+ * Order available rates
192
+ */
193
+ currentRoomRateSort?: RoomSort | undefined;
187
194
  maxAdults?: number;
188
195
  mobileDefaultRatesClosed?: boolean;
189
196
  }
@@ -195,6 +202,7 @@ export type Hotel = ConfigHotel & {
195
202
  isLoading: boolean;
196
203
  };
197
204
  integrations?: EIntegration[];
205
+ isRACMemberNoRequired?: boolean;
198
206
  };
199
207
  /**
200
208
  * Used for DetailsHotel event
@@ -1 +1 @@
1
- {"version":3,"file":"Hotel.js","sourceRoot":"/","sources":["src/models/Client/Hotel/Hotel.ts"],"names":[],"mappings":";;;AAmBA,IAAY,gBAOX;AAPD,WAAY,gBAAgB;IACxB,+BAAW,CAAA;IACX,qCAAiB,CAAA;IACjB,8BAAU,CAAA;IACV,0CAAsB,CAAA;IACtB,qCAAiB,CAAA;IACjB,mCAAe,CAAA;AACnB,CAAC,EAPW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAO3B","sourcesContent":["import { EnvironmentName } from '@planpay/web/src/lib/shared-lib-duplicates';\nimport { EBookingFlow, EBookingPaymentMethod, EHotelCardProcessor, EHotelStateFieldConfiguration, EIntegration, IHotelColorScheme } from '@roomstay/core';\nimport { Property } from 'csstype';\nimport type { ReactChild } from 'react';\n\nimport type { InternalMemberSignInInputs } from '@/components/members/SignInModal/InternalMemberSignInModal.types';\nimport type { HotelRoomGroupsDTO, HotelRoomsDTO, HotelServiceDTO } from '@/models/Api/HotelDTO';\nimport type { TransportDistances } from '@/models/Api/HotelOverrideDTO';\nimport type { HasDatalayerTags } from '@/models/Client/Hotel/Company';\nimport type { DistanceUnitType } from '@/models/Client/Hotel/DistanceUnitType.types';\nimport type HotelAddress from '@/models/Client/Hotel/HotelAddress';\nimport type { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nimport type { HotelPerk } from '@/models/Client/Hotel/HotelPerk';\nimport type { HotelRoomOverwrite } from '@/models/Client/Hotel/HotelRoomOverwrite';\nimport type { WeekdayStartsOn } from '@/models/Client/Hotel/WeekdayStartsOn.types';\nimport { HotelFee } from '@/models/Fee';\nimport type { Language } from '@/providers/LanguageProvider';\nimport { RoomSort } from '@/providers/RoomSortProvider';\n\nexport enum EPaymentCardType {\n Visa = 'VI',\n Mastercard = 'MC',\n JCB = 'JC',\n AmericanExpress = 'AX',\n DinersClub = 'DN',\n UnionPay = 'UP',\n}\n\nexport interface IVGSVaultNames {\n standard: string;\n members: string;\n}\n\n/**\n * This config comes from admin -- TODO: Move to Roomstay Core\n */\nexport interface AdminHotelConfig {\n hotelID: string;\n name: string;\n address?: HotelAddress;\n latitude?: number;\n longitude?: number;\n phone?: string;\n email?: string;\n checkInTime?: string;\n checkOutTime?: string;\n paymentCardTypes?: EPaymentCardType[];\n description?: string;\n locationDescription?: string;\n policies?: string;\n hotelServices: HotelServiceDTO[];\n businessServices: HotelServiceDTO[];\n rooms: HotelRoomsDTO;\n hasLoadedDetails?: boolean;\n dataSource: HotelDataSource;\n defaultCurrency: string;\n paymentMethods: EBookingPaymentMethod[];\n planpay?: {\n username: string;\n minDaysShowPlanpay: number;\n env: EnvironmentName;\n };\n hotelUrl: string;\n heroImage: string;\n memberOnlyModalImage?: string;\n memberOnlyModalImageSize: Property.ObjectFit;\n images?: string[];\n logo: string | ReactChild;\n colors: IHotelColorScheme;\n distanceUnitType: DistanceUnitType;\n startsWeekOnDay?: WeekdayStartsOn;\n crossSellHotelIds?: string[];\n maxOccupancy?: number;\n minAdultAge?: number;\n maxAdultAge?: number;\n maxAdults?: number;\n maxChildren?: number;\n maxInfants?: number;\n countInfantsInOccupancy?: boolean;\n hideByLine?: boolean;\n transportDistances?: TransportDistances;\n roomGroups: HotelRoomGroupsDTO;\n cardProcessor: EHotelCardProcessor;\n\n requireDeposit?: boolean;\n bookingFlow: EBookingFlow;\n\n /** @deprecated Use the new Fees model instead */\n enableCreditCardSurcharge?: boolean;\n availableCountries?: { name: string; value: string }[];\n\n childConfiguration?: {\n supportChildren?: boolean;\n supportInfants: boolean;\n childRange: { min: number; max: number };\n infantRange: { min: number; max: number };\n };\n preventCancellation?: boolean;\n\n perks?: HotelPerk[];\n perkTitle?: string;\n\n stateFieldConfiguration?: EHotelStateFieldConfiguration;\n\n countryPrefix?: string;\n quoteImageDesktop?: string;\n quoteImageMobile?: string;\n memberOnlyImage?: string;\n captureChildAge?: boolean;\n itineraryNote: string;\n\n fees?: HotelFee[];\n addDepositFeeToBookingTotal?: boolean;\n\n company: {\n url?: string;\n logo?: string;\n };\n\n facebookUrl: string;\n instagramUrl: string;\n linkedinUrl: string;\n preferProviderBookingId: boolean;\n disableSavedPayments?: boolean;\n showUnavailableRooms?: boolean;\n}\n\n/**\n * This config comes from hard static local file\n */\nexport interface ClientHotelConfig {\n providerHotelID: string;\n shortName?: 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 defaultLanguage: Language;\n privacyPolicyUrl: string;\n bookNowPayLaterUrl?: string;\n bestRateNoBSUrl?: string;\n\n memberOnlyRates?: string[];\n memberOnlyPromoCode?: string;\n memberOnlyRenderRateLast?: boolean;\n memberOnlySignupInputs?: InternalMemberSignInInputs;\n googleMapsImage?: string;\n /**\n * Whether to show the Breakfast / Lunch / Dinner included\n */\n showMealPill?: boolean;\n perks?: HotelPerk[];\n perkTitle?: string;\n /**\n * Hide perks on room row\n */\n perksHideOnRoomRow?: boolean;\n /**\n * Hide perks on room detail modal\n */\n perksHideOnRoomDetail?: boolean;\n perksShowDisclaimer?: boolean;\n /** @deprecated Use the vgs.vaultNames.standard property now */\n vgsVaultName?: string;\n vgs?: {\n vaultNames: IVGSVaultNames;\n };\n showAddonLoader: boolean;\n overwrites?: { [code: string]: Partial<HotelRoomOverwrite> };\n forwardFindReservationToSynxis?: boolean;\n additionalOptions?: { [name: string]: any };\n googleReCaptcha?: {\n loadForMembers?: boolean;\n siteKey?: string;\n };\n /**\n * Show description on RoomDetails\n */\n showDescriptionOnRoomDetails?: boolean;\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 * 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 currentRoomSort?: RoomSort; //override default room sort\n maxAdults?: number; //fixed from frontend\n mobileDefaultRatesClosed?: boolean;\n}\n\nexport interface ConfigHotel extends ClientHotelConfig, AdminHotelConfig, HasDatalayerTags {}\n\nexport type Hotel = ConfigHotel & {\n lowestPrice?: {\n value: number;\n isLoading: boolean;\n };\n integrations?: EIntegration[];\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":";;;AAmBA,IAAY,gBAOX;AAPD,WAAY,gBAAgB;IACxB,+BAAW,CAAA;IACX,qCAAiB,CAAA;IACjB,8BAAU,CAAA;IACV,0CAAsB,CAAA;IACtB,qCAAiB,CAAA;IACjB,mCAAe,CAAA;AACnB,CAAC,EAPW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAO3B","sourcesContent":["import { EnvironmentName } from '@planpay/web/src/lib/shared-lib-duplicates';\nimport { EBookingFlow, EBookingPaymentMethod, EHotelCardProcessor, EHotelStateFieldConfiguration, EIntegration, IHotelColorScheme } from '@roomstay/core';\nimport { Property } from 'csstype';\nimport type { ReactChild } from 'react';\n\nimport type { InternalMemberSignInInputs } from '@/components/members/SignInModal/InternalMemberSignInModal.types';\nimport type { HotelRoomGroupsDTO, HotelRoomsDTO, HotelServiceDTO } from '@/models/Api/HotelDTO';\nimport type { TransportDistances } from '@/models/Api/HotelOverrideDTO';\nimport type { HasDatalayerTags } from '@/models/Client/Hotel/Company';\nimport type { DistanceUnitType } from '@/models/Client/Hotel/DistanceUnitType.types';\nimport type HotelAddress from '@/models/Client/Hotel/HotelAddress';\nimport type { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nimport type { HotelPerk } from '@/models/Client/Hotel/HotelPerk';\nimport type { HotelRoomOverwrite } from '@/models/Client/Hotel/HotelRoomOverwrite';\nimport type { WeekdayStartsOn } from '@/models/Client/Hotel/WeekdayStartsOn.types';\nimport { HotelFee } from '@/models/Fee';\nimport type { Language } from '@/providers/LanguageProvider';\nimport { RoomSort } from '@/providers/RoomSortProvider';\n\nexport enum EPaymentCardType {\n Visa = 'VI',\n Mastercard = 'MC',\n JCB = 'JC',\n AmericanExpress = 'AX',\n DinersClub = 'DN',\n UnionPay = 'UP',\n}\n\nexport interface IVGSVaultNames {\n standard: string;\n members: string;\n}\n\n/**\n * This config comes from admin -- TODO: Move to Roomstay Core\n */\nexport interface AdminHotelConfig {\n hotelID: string;\n name: string;\n address?: HotelAddress;\n latitude?: number;\n longitude?: number;\n phone?: string;\n email?: string;\n checkInTime?: string;\n checkOutTime?: string;\n paymentCardTypes?: EPaymentCardType[];\n description?: string;\n locationDescription?: string;\n policies?: string;\n hotelServices: HotelServiceDTO[];\n businessServices: HotelServiceDTO[];\n rooms: HotelRoomsDTO;\n hasLoadedDetails?: boolean;\n dataSource: HotelDataSource;\n defaultCurrency: string;\n paymentMethods: EBookingPaymentMethod[];\n planpay?: {\n username: string;\n minDaysShowPlanpay: number;\n env: EnvironmentName;\n };\n hotelUrl: string;\n heroImage: string;\n memberOnlyModalImage?: string;\n memberOnlyModalImageSize: Property.ObjectFit;\n images?: string[];\n logo: string | ReactChild;\n colors: IHotelColorScheme;\n distanceUnitType: DistanceUnitType;\n startsWeekOnDay?: WeekdayStartsOn;\n crossSellHotelIds?: string[];\n maxOccupancy?: number;\n minAdultAge?: number;\n maxAdultAge?: number;\n maxAdults?: number;\n maxChildren?: number;\n maxInfants?: number;\n countInfantsInOccupancy?: boolean;\n hideByLine?: boolean;\n transportDistances?: TransportDistances;\n roomGroups: HotelRoomGroupsDTO;\n cardProcessor: EHotelCardProcessor;\n\n requireDeposit?: boolean;\n bookingFlow: EBookingFlow;\n\n /** @deprecated Use the new Fees model instead */\n enableCreditCardSurcharge?: boolean;\n availableCountries?: { name: string; value: string }[];\n\n childConfiguration?: {\n supportChildren?: boolean;\n supportInfants: boolean;\n childRange: { min: number; max: number };\n infantRange: { min: number; max: number };\n };\n preventCancellation?: boolean;\n\n perks?: HotelPerk[];\n perkTitle?: string;\n\n stateFieldConfiguration?: EHotelStateFieldConfiguration;\n\n countryPrefix?: string;\n quoteImageDesktop?: string;\n quoteImageMobile?: string;\n memberOnlyImage?: string;\n captureChildAge?: boolean;\n itineraryNote: string;\n\n fees?: HotelFee[];\n addDepositFeeToBookingTotal?: boolean;\n\n company: {\n url?: string;\n logo?: string;\n };\n\n facebookUrl: string;\n instagramUrl: string;\n linkedinUrl: string;\n preferProviderBookingId: boolean;\n disableSavedPayments?: boolean;\n showUnavailableRooms?: boolean;\n}\n\n/**\n * This config comes from hard static local file\n */\nexport interface ClientHotelConfig {\n providerHotelID: string;\n shortName?: 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 defaultLanguage: Language;\n privacyPolicyUrl: string;\n bookNowPayLaterUrl?: string;\n bestRateNoBSUrl?: string;\n\n memberOnlyRates?: string[];\n memberOnlyPromoCode?: string;\n memberOnlyRenderRateLast?: boolean;\n memberOnlySignupInputs?: InternalMemberSignInInputs;\n googleMapsImage?: string;\n /**\n * Whether to show the Breakfast / Lunch / Dinner included\n */\n showMealPill?: boolean;\n perks?: HotelPerk[];\n perkTitle?: string;\n /**\n * Hide perks on room row\n */\n perksHideOnRoomRow?: boolean;\n /**\n * Hide perks on room detail modal\n */\n perksHideOnRoomDetail?: boolean;\n perksShowDisclaimer?: boolean;\n /** @deprecated Use the vgs.vaultNames.standard property now */\n vgsVaultName?: string;\n vgs?: {\n vaultNames: IVGSVaultNames;\n };\n showAddonLoader: boolean;\n overwrites?: { [code: string]: Partial<HotelRoomOverwrite> };\n forwardFindReservationToSynxis?: boolean;\n additionalOptions?: { [name: string]: any };\n googleReCaptcha?: {\n loadForMembers?: boolean;\n siteKey?: string;\n };\n /**\n * Show description on RoomDetails\n */\n showDescriptionOnRoomDetails?: boolean;\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 * 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 * Order available rooms\n */\n currentRoomSort?: RoomSort;\n /**\n * Order available rates\n */\n currentRoomRateSort?: RoomSort | undefined;\n maxAdults?: number; //fixed from frontend\n mobileDefaultRatesClosed?: boolean;\n}\n\nexport interface ConfigHotel extends ClientHotelConfig, AdminHotelConfig, HasDatalayerTags {}\n\nexport type Hotel = ConfigHotel & {\n lowestPrice?: {\n value: number;\n isLoading: boolean;\n };\n integrations?: EIntegration[];\n\n // TODO: Should be a better way to use this configuration.\n isRACMemberNoRequired?: boolean;\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"]}
@@ -154,6 +154,8 @@ class RoomRate {
154
154
  let name = this.name;
155
155
  // Loop through all overrides and check for any matching the booking dates
156
156
  rateOverrides.forEach((override) => {
157
+ if (!originalRequestedStartDate)
158
+ return;
157
159
  const queryStartDate = (0, dayjs_1.default)(override.queryStartDate);
158
160
  const queryEndDate = (0, dayjs_1.default)(override.queryEndDate);
159
161
  const overlap = (!override.queryStartDate || queryStartDate.isSameOrBefore(originalRequestedStartDate, 'date')) &&
@@ -1 +1 @@
1
- {"version":3,"file":"RoomRate.js","sourceRoot":"/","sources":["src/models/Room/RoomRate.ts"],"names":[],"mappings":"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","sourcesContent":["import dayjs, { Dayjs } from 'dayjs';\n\nimport AvailabilityAPI from '@/api/AvailabilityAPI';\nimport { accumulateFees, feeMapToArray, HotelFee, ItemisedFee, mapSimpleFeesToItemisedFees } from '@/models/Fee';\nimport type { Room } from '@/models/Room/Room';\nimport RoomRateNight, { IRoomRateNight } from '@/models/Room/RoomRateNight';\nimport type RoomRateSortable from '@/models/Room/RoomRateSortable';\nimport type { Serializable } from '@/models/Serializable';\nimport StaticContextProvider from '@/providers/StaticContextProvider';\n\nexport enum RoomRatePriceInclusion {\n ExcludingFees = 'Fees Excluded',\n ExcludingTaxes = 'Taxes Excluded',\n ExcludingFeesAndTaxes = 'Excluding Fees and Taxes',\n IncludingFeesAndTaxes = 'Including Fees and Taxes',\n}\n\nexport interface IRoomRate {\n name: string;\n code: string;\n description: string;\n longDescription?: string;\n\n isMemberOnly?: boolean;\n guaranteeCode: string;\n cancelPolicyCode: string;\n nightRates: { [date: string]: IRoomRateNight };\n\n lowestPrice: number;\n promoCode: string;\n promoCodeName: string;\n\n mealsIncluded?: {\n breakfast: boolean;\n lunch: boolean;\n dinner: boolean;\n };\n rateOverrides?: RateOverride[];\n}\n\nexport type RateLabelsByDay = {\n Monday: boolean;\n Tuesday: boolean;\n Wednesday: boolean;\n Thursday: boolean;\n Friday: boolean;\n Saturday: boolean;\n Sunday: boolean;\n};\n\nexport type RateOverride = {\n name: string;\n shortDescription: string;\n longDescription: string;\n enabledPerDay: RateLabelsByDay;\n startDate: string;\n endDate: string;\n queryStartDate: string;\n queryEndDate: string;\n};\n\nexport type RateOverrideKeys = 'name' | 'shortDescription' | 'longDescription';\n\ninterface RequestedDate {\n startDate: Dayjs;\n endDate: Dayjs;\n}\n\ninterface DisplayRate {\n name: string;\n shortDescription: string;\n longDescription: string;\n startDate?: Dayjs;\n endDate?: Dayjs;\n override: RateOverride;\n}\n\nexport class RoomRate implements RoomRateSortable, Serializable<RoomRate, IRoomRate> {\n public name!: string;\n public code!: string;\n\n public description!: string;\n public longDescription!: string;\n\n public isMemberOnly!: boolean;\n\n public guaranteeCode!: string;\n\n public cancelPolicyCode!: string;\n\n public nightRates: { [date: string]: RoomRateNight };\n public lowestPrice!: number;\n public promoCode?: string;\n public promoCodeName?: string;\n public mealsIncluded?: {\n breakfast: boolean;\n lunch: boolean;\n dinner: boolean;\n } = {\n breakfast: false,\n lunch: false,\n dinner: false,\n };\n private nightRatesArray: RoomRateNight[];\n private room!: Room;\n public rateOverrides?: RateOverride[];\n\n public constructor() {\n this.nightRates = {};\n this.nightRatesArray = [];\n }\n\n public static fromData(data: Partial<{ code: string }> | any) {\n const rate = new this();\n\n rate.applyData(data);\n\n if (StaticContextProvider.MemberOnlyRateCodes?.includes(data.code)) {\n rate.isMemberOnly = true;\n }\n\n return rate;\n }\n\n public applyData(data: any) {\n Object.keys(data).map((key: any) => {\n (this as any)[key] = (data as any)[key];\n }, this);\n }\n\n public setRoom(room: Room) {\n this.room = room;\n }\n\n public getRoom(): Room {\n return this.room;\n }\n\n public getTotalPrice = (getCost = false) => {\n let total = 0;\n const nightsAsArray = Object.values(this.nightRates);\n nightsAsArray.forEach((night: RoomRateNight) => {\n total += Number(getCost ? night.cost : night.total);\n });\n return total;\n };\n\n public getTotalPriceBeforeDiscount = (getCost = false) => {\n let total = 0;\n const nightsAsArray = Object.values(this.nightRates);\n nightsAsArray.forEach((night: RoomRateNight) => {\n total += Number(getCost ? night.cost : night.total) + Number(night.discount);\n });\n return total;\n };\n\n public getTotalDiscount = () => {\n return this.nightRateTotal((night: RoomRateNight) => {\n return Number(night.discount);\n });\n };\n\n public getAveragePrice = (getCost = false): number => {\n const total = this.getTotalPrice(getCost);\n\n return total / Object.keys(this.nightRates).length;\n };\n\n public getAveragePriceBeforeDiscount = (getCost = false) => {\n let total = 0;\n const nightsAsArray = Object.values(this.nightRates);\n nightsAsArray.forEach((night: RoomRateNight) => {\n total += Number(getCost ? night.cost : night.total) + Number(night.discount);\n });\n\n return total / nightsAsArray.length;\n };\n\n public getTotalFees = () => {\n return this.nightRateTotal((night: RoomRateNight) => {\n return Number(night.fee);\n });\n };\n\n public getItemisedFees = (hotelFees: HotelFee[]): ItemisedFee[] => {\n const feeMap = new Map<HotelFee, number>();\n\n this.getNightRateArray().forEach((night) => {\n if (night.fees) {\n const fees = mapSimpleFeesToItemisedFees(night.fees, hotelFees);\n accumulateFees(feeMap, fees);\n }\n });\n\n return feeMapToArray(feeMap);\n };\n\n public getTotalTaxes = () => {\n return this.nightRateTotal((night: RoomRateNight) => {\n return Number(night.tax);\n });\n };\n\n public getPriceType = () => {\n let hasFees = false;\n let hasTax = false;\n\n Object.values(this.nightRates).forEach((night) => {\n if (night.fee && night.fee !== '0') {\n hasFees = true;\n }\n\n if (night.tax && night.tax !== '0') {\n hasTax = true;\n }\n });\n\n if (hasFees && hasTax) {\n return RoomRatePriceInclusion.ExcludingFeesAndTaxes;\n } else if (hasFees) {\n return RoomRatePriceInclusion.ExcludingTaxes;\n } else if (hasTax) {\n return RoomRatePriceInclusion.ExcludingFees;\n } else {\n return RoomRatePriceInclusion.IncludingFeesAndTaxes;\n }\n };\n\n public getGuaranteePolicy = () => {\n return AvailabilityAPI.policyMappings.guarantee[this.guaranteeCode] ?? '';\n };\n\n public getCancellationPolicy = () => {\n return AvailabilityAPI.policyMappings.cancel[this.cancelPolicyCode] ?? '';\n };\n\n public getPriceSortValue = () => {\n return this.getAveragePrice();\n };\n\n /**\n * Not implemented\n */\n public getRecommendedSortValue() {\n return 0;\n }\n\n public serialize() {\n const serializedNightRates: any = {};\n Object.keys(this.nightRates).forEach((date) => {\n serializedNightRates[date] = this.nightRates[date].serialize();\n });\n\n const toSerialize: IRoomRate = {\n name: this.name,\n code: this.code,\n description: this.description,\n longDescription: this.longDescription,\n isMemberOnly: this.isMemberOnly,\n guaranteeCode: this.guaranteeCode,\n cancelPolicyCode: this.cancelPolicyCode,\n nightRates: serializedNightRates,\n lowestPrice: this.lowestPrice,\n promoCode: this.promoCode,\n promoCodeName: this.promoCodeName,\n mealsIncluded: this.mealsIncluded,\n rateOverrides: this.rateOverrides,\n } as IRoomRate;\n\n return toSerialize;\n }\n\n public unSerialize(data: IRoomRate) {\n const { name, code, description, longDescription, isMemberOnly, guaranteeCode, cancelPolicyCode, lowestPrice, promoCode, promoCodeName, mealsIncluded } = data;\n\n const unSerializedNightRates: any = {};\n\n if (data.nightRates) {\n Object.keys(data.nightRates)?.forEach((date) => {\n const nightRate = new RoomRateNight();\n unSerializedNightRates[date] = nightRate.unSerialize(data.nightRates[date]);\n });\n }\n\n this.name = name;\n this.code = code;\n this.description = description;\n this.longDescription = longDescription as string;\n this.isMemberOnly = isMemberOnly as boolean;\n this.guaranteeCode = guaranteeCode;\n this.cancelPolicyCode = cancelPolicyCode;\n this.lowestPrice = lowestPrice;\n this.promoCode = promoCode;\n this.promoCodeName = promoCodeName;\n this.mealsIncluded = mealsIncluded;\n this.nightRates = unSerializedNightRates;\n this.nightRatesArray = [];\n this.rateOverrides = data.rateOverrides;\n\n return this;\n }\n\n private getNightRateArray = () => {\n if (!this.nightRatesArray.length) {\n this.nightRatesArray = Object.values(this.nightRates);\n }\n\n return this.nightRatesArray;\n };\n\n private reduceNightData = (reducer: (sum: number, rate: RoomRateNight) => number) => {\n return this.getNightRateArray().reduce<number>(reducer, 0) ?? 0;\n };\n\n private nightRateTotal = (value: (rate: RoomRateNight) => number) => {\n return this.reduceNightData((sum: number, redNight: RoomRateNight) => {\n const summingValue = value(redNight);\n\n return sum ? sum + summingValue : summingValue;\n });\n };\n\n public datesOverlap = (startDate1: Dayjs, endDate1: Dayjs, startDate2: Dayjs, endDate2: Dayjs): boolean => {\n const overlap1 = startDate1.isSameOrBefore(endDate2) && startDate2.isSameOrBefore(endDate1);\n const overlap2 = startDate1.isSameOrAfter(endDate2) && startDate2.isSameOrAfter(endDate1);\n return overlap1 || overlap2;\n };\n\n public getDefaultLabelsByDate = (requestedDate: RequestedDate) => {\n const days: { label: string; alternateLabel: string }[] = [];\n let currentDate = requestedDate.startDate.clone();\n while (currentDate.isSameOrBefore(requestedDate.endDate)) {\n days.push({\n label: currentDate.format('dddd, MMM DD, YYYY'),\n alternateLabel: '', // No rate label available\n });\n currentDate = currentDate.add(1, 'day');\n }\n return days;\n };\n\n public getPossiblyOverwrittenDetails = (requestedDate: RequestedDate) => {\n const rateOverrides: RateOverride[] = this.getAvailableRateOverrides();\n if (!rateOverrides.length) return { name: this.name, shortDescription: this.description, longDescription: this.longDescription };\n\n const originalRequestedStartDate = requestedDate.startDate;\n\n let shortDescription = this.description;\n let longDescription = this.longDescription;\n let name = this.name;\n\n // Loop through all overrides and check for any matching the booking dates\n rateOverrides.forEach((override) => {\n const queryStartDate = dayjs(override.queryStartDate);\n const queryEndDate = dayjs(override.queryEndDate);\n\n const overlap =\n (!override.queryStartDate || queryStartDate.isSameOrBefore(originalRequestedStartDate, 'date')) &&\n (!override.queryEndDate || queryEndDate.isSameOrAfter(originalRequestedStartDate, 'date'));\n\n const stayDay = originalRequestedStartDate.format('dddd');\n\n if (overlap && override.enabledPerDay[stayDay as keyof RateLabelsByDay] === true) {\n name = override.name;\n shortDescription = override.shortDescription;\n longDescription = override.longDescription;\n }\n });\n\n return { name, shortDescription, longDescription };\n };\n\n public getAvailableRateOverrides = (): RateOverride[] => {\n if (!this.rateOverrides?.length) return [];\n\n const now = dayjs();\n //startDate/endDate/queryStartDate/queryEndDate must not empty\n const rateOverrides: RateOverride[] = this.rateOverrides.filter((override) => {\n // Check if the override can apply to this query in current time.\n // We don't require any of the filter fields, so if they are set we should check that they apply.\n if (override.startDate) {\n if (!dayjs(override.startDate).isSameOrBefore(now)) {\n return false;\n }\n\n if (override.endDate && !dayjs(override.endDate).isSameOrAfter(now)) {\n return false;\n }\n }\n\n return true;\n });\n return rateOverrides;\n };\n\n public hasRateVariesByDay = (requestedDate: RequestedDate): boolean => {\n // Validate startDate/endDate\n if (!requestedDate?.startDate || !requestedDate.endDate) return false;\n\n const rateOverrides: RateOverride[] = this.getAvailableRateOverrides();\n if (!rateOverrides.length) false;\n\n const originalRequestedStartDate = dayjs(requestedDate.startDate);\n const originalRequestedEndDate = dayjs(requestedDate.endDate);\n\n // Loop through all overrides and check for any matching the booking dates\n return rateOverrides.some((override) => {\n const overrideStartDate = dayjs(override.startDate);\n const overrideEndDate = dayjs(override.endDate);\n const queryStartDate = dayjs(override.queryStartDate);\n const queryEndDate = dayjs(override.queryEndDate);\n\n if (override.startDate && overrideStartDate.isAfter(originalRequestedEndDate)) {\n return false;\n }\n\n if (override.endDate && overrideEndDate.isBefore(originalRequestedStartDate)) {\n return false;\n }\n\n if (override.queryStartDate && queryStartDate.isAfter(originalRequestedEndDate)) {\n return false;\n }\n if (override.queryEndDate && queryEndDate.isBefore(originalRequestedStartDate)) {\n return false;\n }\n\n return true;\n });\n };\n\n public getDisplayRates = (requestedDate: RequestedDate): DisplayRate[] => {\n const rateOverrides: RateOverride[] = this.getAvailableRateOverrides();\n if (!rateOverrides.length) return [];\n\n const originalRequestedStartDate = dayjs(requestedDate.startDate);\n const originalRequestedEndDate = dayjs(requestedDate.endDate);\n\n const displayRates: DisplayRate[] = [\n {\n name: this.name,\n shortDescription: this.description,\n longDescription: this.longDescription,\n override: {\n name: this.name,\n shortDescription: this.description,\n longDescription: this.longDescription,\n enabledPerDay: {\n Monday: true,\n Tuesday: true,\n Wednesday: true,\n Thursday: true,\n Friday: true,\n Saturday: true,\n Sunday: true,\n },\n startDate: '',\n endDate: '',\n queryStartDate: '',\n queryEndDate: '',\n },\n },\n ];\n // Loop through all overrides and check for any matching the booking dates\n rateOverrides.forEach((override) => {\n const overrideStartDate = dayjs(override.startDate);\n const overrideEndDate = dayjs(override.endDate);\n const queryStartDate = dayjs(override.queryStartDate);\n const queryEndDate = dayjs(override.queryEndDate);\n //requestedStartDate & requestedEndDate must be in date range of override's startDate/endDate\n const requestedStartDate = originalRequestedStartDate.isBefore(overrideStartDate) ? overrideStartDate : originalRequestedStartDate;\n const requestedEndDate = originalRequestedEndDate.isAfter(overrideEndDate) ? overrideEndDate : originalRequestedEndDate;\n const overlap = this.datesOverlap(requestedStartDate, requestedEndDate, queryStartDate, queryEndDate);\n if (overlap) {\n if (requestedStartDate.isBefore(queryStartDate, 'date')) {\n if (queryEndDate.isBefore(requestedEndDate, 'date')) {\n displayRates.push({\n override: override,\n name: override.name,\n shortDescription: override.shortDescription,\n longDescription: override.longDescription,\n startDate: queryStartDate,\n endDate: queryEndDate,\n });\n } else {\n displayRates.push({\n override: override,\n name: override.name,\n shortDescription: override.shortDescription,\n longDescription: override.longDescription,\n startDate: queryStartDate,\n endDate: requestedEndDate,\n });\n }\n } else {\n if (queryEndDate.isBefore(requestedEndDate, 'date')) {\n displayRates.push({\n override: override,\n name: override.name,\n shortDescription: override.shortDescription,\n longDescription: override.longDescription,\n startDate: requestedStartDate,\n endDate: queryEndDate,\n });\n } else {\n displayRates.push({\n override: override,\n name: override.name,\n shortDescription: override.shortDescription,\n longDescription: override.longDescription,\n startDate: requestedStartDate,\n endDate: requestedEndDate,\n });\n }\n }\n }\n });\n\n return displayRates;\n };\n\n public displayRateToDayLabel = (displayRate: DisplayRate): string => {\n if (!displayRate.startDate || !displayRate.endDate) return '';\n\n const dayDayLabels: Record<string, string> = {};\n const startDayLabel = displayRate.startDate.format('MMM DD, YYYY');\n const endDayLabel = displayRate.endDate.format('MMM DD, YYYY');\n dayDayLabels[startDayLabel] = startDayLabel;\n dayDayLabels[endDayLabel] = endDayLabel;\n return `${Object.values(dayDayLabels).join(' - ')}`;\n };\n\n public displayRateToDayName = (displayRate: DisplayRate): string => {\n if (!displayRate.startDate || !displayRate.endDate) return '';\n\n const dayNames: Record<string, string> = {};\n const startDayName = displayRate.startDate.format('dddd');\n const endDayName = displayRate.endDate.format('dddd');\n dayNames[startDayName] = startDayName;\n dayNames[endDayName] = endDayName;\n return `${Object.values(dayNames).join(' - ')}`;\n };\n\n public getLabelsByDate = (requestedDate: RequestedDate): { label: string; alternateLabel: string; shortDescription?: string; longDescription?: string }[] => {\n const overrides: RateOverride[] = this.getAvailableRateOverrides();\n if (!overrides.length) {\n // If overrides are null or empty, return an empty rateLabelByDay for the whole date range\n return this.getDefaultLabelsByDate(requestedDate);\n }\n\n const labelsByDate: Record<string, { label: string; alternateLabel: string; shortDescription?: string; longDescription?: string; date: string }> = {};\n let dayOneOverride: RateOverride | null = null;\n\n overrides.forEach((override) => {\n const overrideStartDate = dayjs(override.startDate);\n const overrideEndDate = dayjs(override.endDate);\n const overrideQueryStartDate = dayjs(override.queryStartDate);\n const overrideQueryEndDate = dayjs(override.queryEndDate);\n\n const isApplicableForStayDate = () => {\n if (overrideStartDate && overrideStartDate.isAfter(stayDate)) {\n return false;\n }\n\n if (overrideEndDate && overrideEndDate.isBefore(stayDate)) {\n return false;\n }\n\n if (overrideQueryStartDate && overrideQueryStartDate.isAfter(stayDate)) {\n return false;\n }\n\n if (overrideQueryEndDate && overrideQueryEndDate.isBefore(stayDate)) {\n return false;\n }\n\n return true;\n };\n\n let stayDate = requestedDate.startDate.clone();\n while (stayDate.isSameOrBefore(requestedDate.endDate, 'date')) {\n const dayIndex = stayDate.format('YYYY-MM-DD');\n const dayLabel = stayDate.format('dddd, MMM DD, YYYY');\n const stayDay = stayDate.format('dddd');\n //stayDate must be in date range of override's startDate/endDate and queryStartDate/queryEndDate\n if (isApplicableForStayDate()) {\n if (override.enabledPerDay[stayDay as keyof RateLabelsByDay] === true) {\n // Keep setting the dayOneOverride until the first day of the stay is reached, this will tell us\n // what is the initial rate label for the stay\n if (stayDate.isSame(requestedDate.startDate, 'date')) {\n dayOneOverride = override;\n }\n\n labelsByDate[dayIndex] = {\n label: dayLabel,\n date: dayIndex,\n alternateLabel: override.name,\n shortDescription: override.shortDescription,\n longDescription: override.longDescription,\n };\n }\n } else if (!labelsByDate[dayIndex]?.label) {\n // No rate label override\n labelsByDate[dayIndex] = {\n label: dayLabel,\n date: dayIndex,\n alternateLabel: '',\n };\n }\n\n if (dayOneOverride === override) {\n // If the first day of the stay is an override, the user thinks all dates are the same, so we\n // need to remove the override from this day, and specify the default for the remaining empty days.\n\n if (labelsByDate[dayIndex]?.label === dayLabel && labelsByDate[dayIndex]?.alternateLabel === override.name) {\n labelsByDate[dayIndex] = {\n label: dayLabel,\n date: dayIndex,\n alternateLabel: '',\n shortDescription: '',\n longDescription: '',\n };\n } else if (labelsByDate[dayIndex]?.alternateLabel === '') {\n labelsByDate[dayIndex] = {\n label: dayLabel,\n date: dayIndex,\n alternateLabel: this.name,\n shortDescription: this.description,\n longDescription: this.longDescription,\n };\n }\n }\n\n // If label dates aren't populated, they're the originl rate labels.\n if (!labelsByDate[dayIndex]?.label) {\n labelsByDate[dayIndex] = {\n label: dayLabel,\n date: dayIndex,\n alternateLabel: dayOneOverride === override ? this.name : '',\n shortDescription: this.description,\n longDescription: this.longDescription,\n };\n }\n\n stayDate = stayDate.add(1, 'day');\n }\n });\n\n return Object.values(labelsByDate).sort((a, b) => {\n return a.date > b.date ? 1 : -1;\n });\n };\n}\n"]}
1
+ {"version":3,"file":"RoomRate.js","sourceRoot":"/","sources":["src/models/Room/RoomRate.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAqC;AAErC,4EAAoD;AACpD,sCAAiH;AAEjH,gFAA4E;AAG5E,8FAAsE;AAEtE,IAAY,sBAKX;AALD,WAAY,sBAAsB;IAC9B,yDAA+B,CAAA;IAC/B,2DAAiC,CAAA;IACjC,4EAAkD,CAAA;IAClD,4EAAkD,CAAA;AACtD,CAAC,EALW,sBAAsB,GAAtB,8BAAsB,KAAtB,8BAAsB,QAKjC;AA8DD,MAAa,QAAQ;IA8BjB;QAbO,kBAAa,GAIhB;YACA,SAAS,EAAE,KAAK;YAChB,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,KAAK;SAChB,CAAC;QAoCK,kBAAa,GAAG,CAAC,OAAO,GAAG,KAAK,EAAE,EAAE;YACvC,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACrD,aAAa,CAAC,OAAO,CAAC,CAAC,KAAoB,EAAE,EAAE;gBAC3C,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC;QAEK,gCAA2B,GAAG,CAAC,OAAO,GAAG,KAAK,EAAE,EAAE;YACrD,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACrD,aAAa,CAAC,OAAO,CAAC,CAAC,KAAoB,EAAE,EAAE;gBAC3C,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACjF,CAAC,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC;QAEK,qBAAgB,GAAG,GAAW,EAAE;YACnC,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,KAAoB,EAAE,EAAE;gBAChD,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAEK,oBAAe,GAAG,CAAC,OAAO,GAAG,KAAK,EAAU,EAAE;YACjD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAE1C,OAAO,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;QACvD,CAAC,CAAC;QAEK,kCAA6B,GAAG,CAAC,OAAO,GAAG,KAAK,EAAE,EAAE;YACvD,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACrD,aAAa,CAAC,OAAO,CAAC,CAAC,KAAoB,EAAE,EAAE;gBAC3C,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACjF,CAAC,CAAC,CAAC;YAEH,OAAO,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC;QACxC,CAAC,CAAC;QAEK,iBAAY,GAAG,GAAG,EAAE;YACvB,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,KAAoB,EAAE,EAAE;gBAChD,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAEK,oBAAe,GAAG,CAAC,SAAqB,EAAiB,EAAE;YAC9D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;YAE3C,IAAI,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACvC,IAAI,KAAK,CAAC,IAAI,EAAE;oBACZ,MAAM,IAAI,GAAG,IAAA,iCAA2B,EAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;oBAChE,IAAA,oBAAc,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC;iBAChC;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,IAAA,mBAAa,EAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC;QAEK,kBAAa,GAAG,GAAG,EAAE;YACxB,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,KAAoB,EAAE,EAAE;gBAChD,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAEK,iBAAY,GAAG,GAAG,EAAE;YACvB,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,MAAM,GAAG,KAAK,CAAC;YAEnB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC7C,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;oBAChC,OAAO,GAAG,IAAI,CAAC;iBAClB;gBAED,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;oBAChC,MAAM,GAAG,IAAI,CAAC;iBACjB;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,OAAO,IAAI,MAAM,EAAE;gBACnB,OAAO,sBAAsB,CAAC,qBAAqB,CAAC;aACvD;iBAAM,IAAI,OAAO,EAAE;gBAChB,OAAO,sBAAsB,CAAC,cAAc,CAAC;aAChD;iBAAM,IAAI,MAAM,EAAE;gBACf,OAAO,sBAAsB,CAAC,aAAa,CAAC;aAC/C;iBAAM;gBACH,OAAO,sBAAsB,CAAC,qBAAqB,CAAC;aACvD;QACL,CAAC,CAAC;QAEK,uBAAkB,GAAG,GAAG,EAAE;;YAC7B,OAAO,MAAA,yBAAe,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,mCAAI,EAAE,CAAC;QAC9E,CAAC,CAAC;QAEK,0BAAqB,GAAG,GAAG,EAAE;;YAChC,OAAO,MAAA,yBAAe,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,mCAAI,EAAE,CAAC;QAC9E,CAAC,CAAC;QAEK,sBAAiB,GAAG,GAAG,EAAE;YAC5B,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;QAClC,CAAC,CAAC;QAgEM,sBAAiB,GAAG,GAAG,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;gBAC9B,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aACzD;YAED,OAAO,IAAI,CAAC,eAAe,CAAC;QAChC,CAAC,CAAC;QAEM,oBAAe,GAAG,CAAC,OAAqD,EAAE,EAAE;;YAChF,OAAO,MAAA,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAS,OAAO,EAAE,CAAC,CAAC,mCAAI,CAAC,CAAC;QACpE,CAAC,CAAC;QAEM,mBAAc,GAAG,CAAC,KAAsC,EAAE,EAAE;YAChE,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,GAAW,EAAE,QAAuB,EAAE,EAAE;gBACjE,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAErC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;YACnD,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAEK,iBAAY,GAAG,CAAC,UAAiB,EAAE,QAAe,EAAE,UAAiB,EAAE,QAAe,EAAW,EAAE;YACtG,MAAM,QAAQ,GAAG,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC5F,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC1F,OAAO,QAAQ,IAAI,QAAQ,CAAC;QAChC,CAAC,CAAC;QAEK,2BAAsB,GAAG,CAAC,aAA4B,EAAE,EAAE;YAC7D,MAAM,IAAI,GAAgD,EAAE,CAAC;YAC7D,IAAI,WAAW,GAAG,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAClD,OAAO,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;gBACtD,IAAI,CAAC,IAAI,CAAC;oBACN,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,oBAAoB,CAAC;oBAC/C,cAAc,EAAE,EAAE,EAAE,0BAA0B;iBACjD,CAAC,CAAC;gBACH,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;aAC3C;YACD,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC;QAEK,kCAA6B,GAAG,CAAC,aAA4B,EAAE,EAAE;YACpE,MAAM,aAAa,GAAmB,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACvE,IAAI,CAAC,aAAa,CAAC,MAAM;gBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;YAEjI,MAAM,0BAA0B,GAAG,aAAa,CAAC,SAAS,CAAC;YAE3D,IAAI,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC;YACxC,IAAI,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;YAC3C,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAErB,0EAA0E;YAC1E,aAAa,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAC/B,IAAI,CAAC,0BAA0B;oBAAE,OAAO;gBAExC,MAAM,cAAc,GAAG,IAAA,eAAK,EAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;gBACtD,MAAM,YAAY,GAAG,IAAA,eAAK,EAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAElD,MAAM,OAAO,GACT,CAAC,CAAC,QAAQ,CAAC,cAAc,IAAI,cAAc,CAAC,cAAc,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;oBAC/F,CAAC,CAAC,QAAQ,CAAC,YAAY,IAAI,YAAY,CAAC,aAAa,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC,CAAC;gBAE/F,MAAM,OAAO,GAAG,0BAA0B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAE1D,IAAI,OAAO,IAAI,QAAQ,CAAC,aAAa,CAAC,OAAgC,CAAC,KAAK,IAAI,EAAE;oBAC9E,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;oBACrB,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAC;oBAC7C,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC;iBAC9C;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC;QACvD,CAAC,CAAC;QAEK,8BAAyB,GAAG,GAAmB,EAAE;;YACpD,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,MAAM,CAAA;gBAAE,OAAO,EAAE,CAAC;YAE3C,MAAM,GAAG,GAAG,IAAA,eAAK,GAAE,CAAC;YACpB,8DAA8D;YAC9D,MAAM,aAAa,GAAmB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACzE,iEAAiE;gBACjE,iGAAiG;gBACjG,IAAI,QAAQ,CAAC,SAAS,EAAE;oBACpB,IAAI,CAAC,IAAA,eAAK,EAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;wBAChD,OAAO,KAAK,CAAC;qBAChB;oBAED,IAAI,QAAQ,CAAC,OAAO,IAAI,CAAC,IAAA,eAAK,EAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;wBACjE,OAAO,KAAK,CAAC;qBAChB;iBACJ;gBAED,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;YACH,OAAO,aAAa,CAAC;QACzB,CAAC,CAAC;QAEK,uBAAkB,GAAG,CAAC,aAA4B,EAAW,EAAE;YAClE,6BAA6B;YAC7B,IAAI,CAAC,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,SAAS,CAAA,IAAI,CAAC,aAAa,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAC;YAEtE,MAAM,aAAa,GAAmB,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACvE,IAAI,CAAC,aAAa,CAAC,MAAM;gBAAE,KAAK,CAAC;YAEjC,MAAM,0BAA0B,GAAG,IAAA,eAAK,EAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAClE,MAAM,wBAAwB,GAAG,IAAA,eAAK,EAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAE9D,0EAA0E;YAC1E,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACnC,MAAM,iBAAiB,GAAG,IAAA,eAAK,EAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACpD,MAAM,eAAe,GAAG,IAAA,eAAK,EAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAChD,MAAM,cAAc,GAAG,IAAA,eAAK,EAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;gBACtD,MAAM,YAAY,GAAG,IAAA,eAAK,EAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAElD,IAAI,QAAQ,CAAC,SAAS,IAAI,iBAAiB,CAAC,OAAO,CAAC,wBAAwB,CAAC,EAAE;oBAC3E,OAAO,KAAK,CAAC;iBAChB;gBAED,IAAI,QAAQ,CAAC,OAAO,IAAI,eAAe,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE;oBAC1E,OAAO,KAAK,CAAC;iBAChB;gBAED,IAAI,QAAQ,CAAC,cAAc,IAAI,cAAc,CAAC,OAAO,CAAC,wBAAwB,CAAC,EAAE;oBAC7E,OAAO,KAAK,CAAC;iBAChB;gBACD,IAAI,QAAQ,CAAC,YAAY,IAAI,YAAY,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE;oBAC5E,OAAO,KAAK,CAAC;iBAChB;gBAED,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAEK,oBAAe,GAAG,CAAC,aAA4B,EAAiB,EAAE;YACrE,MAAM,aAAa,GAAmB,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACvE,IAAI,CAAC,aAAa,CAAC,MAAM;gBAAE,OAAO,EAAE,CAAC;YAErC,MAAM,0BAA0B,GAAG,IAAA,eAAK,EAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAClE,MAAM,wBAAwB,GAAG,IAAA,eAAK,EAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAE9D,MAAM,YAAY,GAAkB;gBAChC;oBACI,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,gBAAgB,EAAE,IAAI,CAAC,WAAW;oBAClC,eAAe,EAAE,IAAI,CAAC,eAAe;oBACrC,QAAQ,EAAE;wBACN,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,gBAAgB,EAAE,IAAI,CAAC,WAAW;wBAClC,eAAe,EAAE,IAAI,CAAC,eAAe;wBACrC,aAAa,EAAE;4BACX,MAAM,EAAE,IAAI;4BACZ,OAAO,EAAE,IAAI;4BACb,SAAS,EAAE,IAAI;4BACf,QAAQ,EAAE,IAAI;4BACd,MAAM,EAAE,IAAI;4BACZ,QAAQ,EAAE,IAAI;4BACd,MAAM,EAAE,IAAI;yBACf;wBACD,SAAS,EAAE,EAAE;wBACb,OAAO,EAAE,EAAE;wBACX,cAAc,EAAE,EAAE;wBAClB,YAAY,EAAE,EAAE;qBACnB;iBACJ;aACJ,CAAC;YACF,0EAA0E;YAC1E,aAAa,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAC/B,MAAM,iBAAiB,GAAG,IAAA,eAAK,EAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACpD,MAAM,eAAe,GAAG,IAAA,eAAK,EAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAChD,MAAM,cAAc,GAAG,IAAA,eAAK,EAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;gBACtD,MAAM,YAAY,GAAG,IAAA,eAAK,EAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAClD,6FAA6F;gBAC7F,MAAM,kBAAkB,GAAG,0BAA0B,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,0BAA0B,CAAC;gBACnI,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,wBAAwB,CAAC;gBACxH,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;gBACtG,IAAI,OAAO,EAAE;oBACT,IAAI,kBAAkB,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE;wBACrD,IAAI,YAAY,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE;4BACjD,YAAY,CAAC,IAAI,CAAC;gCACd,QAAQ,EAAE,QAAQ;gCAClB,IAAI,EAAE,QAAQ,CAAC,IAAI;gCACnB,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;gCAC3C,eAAe,EAAE,QAAQ,CAAC,eAAe;gCACzC,SAAS,EAAE,cAAc;gCACzB,OAAO,EAAE,YAAY;6BACxB,CAAC,CAAC;yBACN;6BAAM;4BACH,YAAY,CAAC,IAAI,CAAC;gCACd,QAAQ,EAAE,QAAQ;gCAClB,IAAI,EAAE,QAAQ,CAAC,IAAI;gCACnB,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;gCAC3C,eAAe,EAAE,QAAQ,CAAC,eAAe;gCACzC,SAAS,EAAE,cAAc;gCACzB,OAAO,EAAE,gBAAgB;6BAC5B,CAAC,CAAC;yBACN;qBACJ;yBAAM;wBACH,IAAI,YAAY,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE;4BACjD,YAAY,CAAC,IAAI,CAAC;gCACd,QAAQ,EAAE,QAAQ;gCAClB,IAAI,EAAE,QAAQ,CAAC,IAAI;gCACnB,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;gCAC3C,eAAe,EAAE,QAAQ,CAAC,eAAe;gCACzC,SAAS,EAAE,kBAAkB;gCAC7B,OAAO,EAAE,YAAY;6BACxB,CAAC,CAAC;yBACN;6BAAM;4BACH,YAAY,CAAC,IAAI,CAAC;gCACd,QAAQ,EAAE,QAAQ;gCAClB,IAAI,EAAE,QAAQ,CAAC,IAAI;gCACnB,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;gCAC3C,eAAe,EAAE,QAAQ,CAAC,eAAe;gCACzC,SAAS,EAAE,kBAAkB;gCAC7B,OAAO,EAAE,gBAAgB;6BAC5B,CAAC,CAAC;yBACN;qBACJ;iBACJ;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,YAAY,CAAC;QACxB,CAAC,CAAC;QAEK,0BAAqB,GAAG,CAAC,WAAwB,EAAU,EAAE;YAChE,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,OAAO;gBAAE,OAAO,EAAE,CAAC;YAE9D,MAAM,YAAY,GAA2B,EAAE,CAAC;YAChD,MAAM,aAAa,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACnE,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC/D,YAAY,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC;YAC5C,YAAY,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;YACxC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,CAAC,CAAC;QAEK,yBAAoB,GAAG,CAAC,WAAwB,EAAU,EAAE;YAC/D,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,OAAO;gBAAE,OAAO,EAAE,CAAC;YAE9D,MAAM,QAAQ,GAA2B,EAAE,CAAC;YAC5C,MAAM,YAAY,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1D,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACtD,QAAQ,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC;YACtC,QAAQ,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;YAClC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,CAAC,CAAC;QAEK,oBAAe,GAAG,CAAC,aAA4B,EAAoG,EAAE;YACxJ,MAAM,SAAS,GAAmB,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACnE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;gBACnB,0FAA0F;gBAC1F,OAAO,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;aACrD;YAED,MAAM,YAAY,GAAiI,EAAE,CAAC;YACtJ,IAAI,cAAc,GAAwB,IAAI,CAAC;YAE/C,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;;gBAC3B,MAAM,iBAAiB,GAAG,IAAA,eAAK,EAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACpD,MAAM,eAAe,GAAG,IAAA,eAAK,EAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAChD,MAAM,sBAAsB,GAAG,IAAA,eAAK,EAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;gBAC9D,MAAM,oBAAoB,GAAG,IAAA,eAAK,EAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAE1D,MAAM,uBAAuB,GAAG,GAAG,EAAE;oBACjC,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;wBAC1D,OAAO,KAAK,CAAC;qBAChB;oBAED,IAAI,eAAe,IAAI,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;wBACvD,OAAO,KAAK,CAAC;qBAChB;oBAED,IAAI,sBAAsB,IAAI,sBAAsB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;wBACpE,OAAO,KAAK,CAAC;qBAChB;oBAED,IAAI,oBAAoB,IAAI,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;wBACjE,OAAO,KAAK,CAAC;qBAChB;oBAED,OAAO,IAAI,CAAC;gBAChB,CAAC,CAAC;gBAEF,IAAI,QAAQ,GAAG,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;gBAC/C,OAAO,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE;oBAC3D,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;oBAC/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;oBACvD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACxC,gGAAgG;oBAChG,IAAI,uBAAuB,EAAE,EAAE;wBAC3B,IAAI,QAAQ,CAAC,aAAa,CAAC,OAAgC,CAAC,KAAK,IAAI,EAAE;4BACnE,gGAAgG;4BAChG,8CAA8C;4BAC9C,IAAI,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE;gCAClD,cAAc,GAAG,QAAQ,CAAC;6BAC7B;4BAED,YAAY,CAAC,QAAQ,CAAC,GAAG;gCACrB,KAAK,EAAE,QAAQ;gCACf,IAAI,EAAE,QAAQ;gCACd,cAAc,EAAE,QAAQ,CAAC,IAAI;gCAC7B,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;gCAC3C,eAAe,EAAE,QAAQ,CAAC,eAAe;6BAC5C,CAAC;yBACL;qBACJ;yBAAM,IAAI,CAAC,CAAA,MAAA,YAAY,CAAC,QAAQ,CAAC,0CAAE,KAAK,CAAA,EAAE;wBACvC,yBAAyB;wBACzB,YAAY,CAAC,QAAQ,CAAC,GAAG;4BACrB,KAAK,EAAE,QAAQ;4BACf,IAAI,EAAE,QAAQ;4BACd,cAAc,EAAE,EAAE;yBACrB,CAAC;qBACL;oBAED,IAAI,cAAc,KAAK,QAAQ,EAAE;wBAC7B,6FAA6F;wBAC7F,mGAAmG;wBAEnG,IAAI,CAAA,MAAA,YAAY,CAAC,QAAQ,CAAC,0CAAE,KAAK,MAAK,QAAQ,IAAI,CAAA,MAAA,YAAY,CAAC,QAAQ,CAAC,0CAAE,cAAc,MAAK,QAAQ,CAAC,IAAI,EAAE;4BACxG,YAAY,CAAC,QAAQ,CAAC,GAAG;gCACrB,KAAK,EAAE,QAAQ;gCACf,IAAI,EAAE,QAAQ;gCACd,cAAc,EAAE,EAAE;gCAClB,gBAAgB,EAAE,EAAE;gCACpB,eAAe,EAAE,EAAE;6BACtB,CAAC;yBACL;6BAAM,IAAI,CAAA,MAAA,YAAY,CAAC,QAAQ,CAAC,0CAAE,cAAc,MAAK,EAAE,EAAE;4BACtD,YAAY,CAAC,QAAQ,CAAC,GAAG;gCACrB,KAAK,EAAE,QAAQ;gCACf,IAAI,EAAE,QAAQ;gCACd,cAAc,EAAE,IAAI,CAAC,IAAI;gCACzB,gBAAgB,EAAE,IAAI,CAAC,WAAW;gCAClC,eAAe,EAAE,IAAI,CAAC,eAAe;6BACxC,CAAC;yBACL;qBACJ;oBAED,oEAAoE;oBACpE,IAAI,CAAC,CAAA,MAAA,YAAY,CAAC,QAAQ,CAAC,0CAAE,KAAK,CAAA,EAAE;wBAChC,YAAY,CAAC,QAAQ,CAAC,GAAG;4BACrB,KAAK,EAAE,QAAQ;4BACf,IAAI,EAAE,QAAQ;4BACd,cAAc,EAAE,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;4BAC5D,gBAAgB,EAAE,IAAI,CAAC,WAAW;4BAClC,eAAe,EAAE,IAAI,CAAC,eAAe;yBACxC,CAAC;qBACL;oBAED,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;iBACrC;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC7C,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAjiBE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;IAC9B,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAC,IAAqC;;QACxD,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAExB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAErB,IAAI,MAAA,+BAAqB,CAAC,mBAAmB,0CAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAChE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC5B;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,SAAS,CAAC,IAAS;QACtB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE;YAC9B,IAAY,CAAC,GAAG,CAAC,GAAI,IAAY,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC,EAAE,IAAI,CAAC,CAAC;IACb,CAAC;IAEM,OAAO,CAAC,IAAU;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAEM,OAAO;QACV,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAwGD;;OAEG;IACI,uBAAuB;QAC1B,OAAO,CAAC,CAAC;IACb,CAAC;IAEM,SAAS;QACZ,MAAM,oBAAoB,GAAQ,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC1C,oBAAoB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,MAAM,WAAW,GAAc;YAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,UAAU,EAAE,oBAAoB;YAChC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,aAAa,EAAE,IAAI,CAAC,aAAa;SACvB,CAAC;QAEf,OAAO,WAAW,CAAC;IACvB,CAAC;IAEM,WAAW,CAAC,IAAe;;QAC9B,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;QAE/J,MAAM,sBAAsB,GAAQ,EAAE,CAAC;QAEvC,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,MAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,0CAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC3C,MAAM,SAAS,GAAG,IAAI,uBAAa,EAAE,CAAC;gBACtC,sBAAsB,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAChF,CAAC,CAAC,CAAC;SACN;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,eAAe,GAAG,eAAyB,CAAC;QACjD,IAAI,CAAC,YAAY,GAAG,YAAuB,CAAC;QAC5C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,sBAAsB,CAAC;QACzC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QAExC,OAAO,IAAI,CAAC;IAChB,CAAC;CAkWJ;AAjkBD,4BAikBC","sourcesContent":["import dayjs, { Dayjs } from 'dayjs';\n\nimport AvailabilityAPI from '@/api/AvailabilityAPI';\nimport { accumulateFees, feeMapToArray, HotelFee, ItemisedFee, mapSimpleFeesToItemisedFees } from '@/models/Fee';\nimport type { Room } from '@/models/Room/Room';\nimport RoomRateNight, { IRoomRateNight } from '@/models/Room/RoomRateNight';\nimport type RoomRateSortable from '@/models/Room/RoomRateSortable';\nimport type { Serializable } from '@/models/Serializable';\nimport StaticContextProvider from '@/providers/StaticContextProvider';\n\nexport enum RoomRatePriceInclusion {\n ExcludingFees = 'Fees Excluded',\n ExcludingTaxes = 'Taxes Excluded',\n ExcludingFeesAndTaxes = 'Excluding Fees and Taxes',\n IncludingFeesAndTaxes = 'Including Fees and Taxes',\n}\n\nexport interface IRoomRate {\n name: string;\n code: string;\n description: string;\n longDescription?: string;\n\n isMemberOnly?: boolean;\n guaranteeCode: string;\n cancelPolicyCode: string;\n nightRates: { [date: string]: IRoomRateNight };\n\n lowestPrice: number;\n promoCode: string;\n promoCodeName: string;\n\n mealsIncluded?: {\n breakfast: boolean;\n lunch: boolean;\n dinner: boolean;\n };\n rateOverrides?: RateOverride[];\n}\n\nexport type RateLabelsByDay = {\n Monday: boolean;\n Tuesday: boolean;\n Wednesday: boolean;\n Thursday: boolean;\n Friday: boolean;\n Saturday: boolean;\n Sunday: boolean;\n};\n\nexport type RateOverride = {\n name: string;\n shortDescription: string;\n longDescription: string;\n enabledPerDay: RateLabelsByDay;\n startDate: string;\n endDate: string;\n queryStartDate: string;\n queryEndDate: string;\n};\n\nexport type RateOverrideKeys = 'name' | 'shortDescription' | 'longDescription';\n\ninterface RequestedDate {\n startDate: Dayjs;\n endDate: Dayjs;\n}\n\ninterface DisplayRate {\n name: string;\n shortDescription: string;\n longDescription: string;\n startDate?: Dayjs;\n endDate?: Dayjs;\n override: RateOverride;\n}\n\nexport class RoomRate implements RoomRateSortable, Serializable<RoomRate, IRoomRate> {\n public name!: string;\n public code!: string;\n\n public description!: string;\n public longDescription!: string;\n\n public isMemberOnly!: boolean;\n\n public guaranteeCode!: string;\n\n public cancelPolicyCode!: string;\n\n public nightRates: { [date: string]: RoomRateNight };\n public lowestPrice!: number;\n public promoCode?: string;\n public promoCodeName?: string;\n public mealsIncluded?: {\n breakfast: boolean;\n lunch: boolean;\n dinner: boolean;\n } = {\n breakfast: false,\n lunch: false,\n dinner: false,\n };\n private nightRatesArray: RoomRateNight[];\n private room!: Room;\n public rateOverrides?: RateOverride[];\n\n public constructor() {\n this.nightRates = {};\n this.nightRatesArray = [];\n }\n\n public static fromData(data: Partial<{ code: string }> | any) {\n const rate = new this();\n\n rate.applyData(data);\n\n if (StaticContextProvider.MemberOnlyRateCodes?.includes(data.code)) {\n rate.isMemberOnly = true;\n }\n\n return rate;\n }\n\n public applyData(data: any) {\n Object.keys(data).map((key: any) => {\n (this as any)[key] = (data as any)[key];\n }, this);\n }\n\n public setRoom(room: Room) {\n this.room = room;\n }\n\n public getRoom(): Room {\n return this.room;\n }\n\n public getTotalPrice = (getCost = false) => {\n let total = 0;\n const nightsAsArray = Object.values(this.nightRates);\n nightsAsArray.forEach((night: RoomRateNight) => {\n total += Number(getCost ? night.cost : night.total);\n });\n return total;\n };\n\n public getTotalPriceBeforeDiscount = (getCost = false) => {\n let total = 0;\n const nightsAsArray = Object.values(this.nightRates);\n nightsAsArray.forEach((night: RoomRateNight) => {\n total += Number(getCost ? night.cost : night.total) + Number(night.discount);\n });\n return total;\n };\n\n public getTotalDiscount = (): number => {\n return this.nightRateTotal((night: RoomRateNight) => {\n return Number(night.discount);\n });\n };\n\n public getAveragePrice = (getCost = false): number => {\n const total = this.getTotalPrice(getCost);\n\n return total / Object.keys(this.nightRates).length;\n };\n\n public getAveragePriceBeforeDiscount = (getCost = false) => {\n let total = 0;\n const nightsAsArray = Object.values(this.nightRates);\n nightsAsArray.forEach((night: RoomRateNight) => {\n total += Number(getCost ? night.cost : night.total) + Number(night.discount);\n });\n\n return total / nightsAsArray.length;\n };\n\n public getTotalFees = () => {\n return this.nightRateTotal((night: RoomRateNight) => {\n return Number(night.fee);\n });\n };\n\n public getItemisedFees = (hotelFees: HotelFee[]): ItemisedFee[] => {\n const feeMap = new Map<HotelFee, number>();\n\n this.getNightRateArray().forEach((night) => {\n if (night.fees) {\n const fees = mapSimpleFeesToItemisedFees(night.fees, hotelFees);\n accumulateFees(feeMap, fees);\n }\n });\n\n return feeMapToArray(feeMap);\n };\n\n public getTotalTaxes = () => {\n return this.nightRateTotal((night: RoomRateNight) => {\n return Number(night.tax);\n });\n };\n\n public getPriceType = () => {\n let hasFees = false;\n let hasTax = false;\n\n Object.values(this.nightRates).forEach((night) => {\n if (night.fee && night.fee !== '0') {\n hasFees = true;\n }\n\n if (night.tax && night.tax !== '0') {\n hasTax = true;\n }\n });\n\n if (hasFees && hasTax) {\n return RoomRatePriceInclusion.ExcludingFeesAndTaxes;\n } else if (hasFees) {\n return RoomRatePriceInclusion.ExcludingTaxes;\n } else if (hasTax) {\n return RoomRatePriceInclusion.ExcludingFees;\n } else {\n return RoomRatePriceInclusion.IncludingFeesAndTaxes;\n }\n };\n\n public getGuaranteePolicy = () => {\n return AvailabilityAPI.policyMappings.guarantee[this.guaranteeCode] ?? '';\n };\n\n public getCancellationPolicy = () => {\n return AvailabilityAPI.policyMappings.cancel[this.cancelPolicyCode] ?? '';\n };\n\n public getPriceSortValue = () => {\n return this.getAveragePrice();\n };\n\n /**\n * Not implemented\n */\n public getRecommendedSortValue() {\n return 0;\n }\n\n public serialize() {\n const serializedNightRates: any = {};\n Object.keys(this.nightRates).forEach((date) => {\n serializedNightRates[date] = this.nightRates[date].serialize();\n });\n\n const toSerialize: IRoomRate = {\n name: this.name,\n code: this.code,\n description: this.description,\n longDescription: this.longDescription,\n isMemberOnly: this.isMemberOnly,\n guaranteeCode: this.guaranteeCode,\n cancelPolicyCode: this.cancelPolicyCode,\n nightRates: serializedNightRates,\n lowestPrice: this.lowestPrice,\n promoCode: this.promoCode,\n promoCodeName: this.promoCodeName,\n mealsIncluded: this.mealsIncluded,\n rateOverrides: this.rateOverrides,\n } as IRoomRate;\n\n return toSerialize;\n }\n\n public unSerialize(data: IRoomRate) {\n const { name, code, description, longDescription, isMemberOnly, guaranteeCode, cancelPolicyCode, lowestPrice, promoCode, promoCodeName, mealsIncluded } = data;\n\n const unSerializedNightRates: any = {};\n\n if (data.nightRates) {\n Object.keys(data.nightRates)?.forEach((date) => {\n const nightRate = new RoomRateNight();\n unSerializedNightRates[date] = nightRate.unSerialize(data.nightRates[date]);\n });\n }\n\n this.name = name;\n this.code = code;\n this.description = description;\n this.longDescription = longDescription as string;\n this.isMemberOnly = isMemberOnly as boolean;\n this.guaranteeCode = guaranteeCode;\n this.cancelPolicyCode = cancelPolicyCode;\n this.lowestPrice = lowestPrice;\n this.promoCode = promoCode;\n this.promoCodeName = promoCodeName;\n this.mealsIncluded = mealsIncluded;\n this.nightRates = unSerializedNightRates;\n this.nightRatesArray = [];\n this.rateOverrides = data.rateOverrides;\n\n return this;\n }\n\n private getNightRateArray = () => {\n if (!this.nightRatesArray.length) {\n this.nightRatesArray = Object.values(this.nightRates);\n }\n\n return this.nightRatesArray;\n };\n\n private reduceNightData = (reducer: (sum: number, rate: RoomRateNight) => number) => {\n return this.getNightRateArray().reduce<number>(reducer, 0) ?? 0;\n };\n\n private nightRateTotal = (value: (rate: RoomRateNight) => number) => {\n return this.reduceNightData((sum: number, redNight: RoomRateNight) => {\n const summingValue = value(redNight);\n\n return sum ? sum + summingValue : summingValue;\n });\n };\n\n public datesOverlap = (startDate1: Dayjs, endDate1: Dayjs, startDate2: Dayjs, endDate2: Dayjs): boolean => {\n const overlap1 = startDate1.isSameOrBefore(endDate2) && startDate2.isSameOrBefore(endDate1);\n const overlap2 = startDate1.isSameOrAfter(endDate2) && startDate2.isSameOrAfter(endDate1);\n return overlap1 || overlap2;\n };\n\n public getDefaultLabelsByDate = (requestedDate: RequestedDate) => {\n const days: { label: string; alternateLabel: string }[] = [];\n let currentDate = requestedDate.startDate.clone();\n while (currentDate.isSameOrBefore(requestedDate.endDate)) {\n days.push({\n label: currentDate.format('dddd, MMM DD, YYYY'),\n alternateLabel: '', // No rate label available\n });\n currentDate = currentDate.add(1, 'day');\n }\n return days;\n };\n\n public getPossiblyOverwrittenDetails = (requestedDate: RequestedDate) => {\n const rateOverrides: RateOverride[] = this.getAvailableRateOverrides();\n if (!rateOverrides.length) return { name: this.name, shortDescription: this.description, longDescription: this.longDescription };\n\n const originalRequestedStartDate = requestedDate.startDate;\n\n let shortDescription = this.description;\n let longDescription = this.longDescription;\n let name = this.name;\n\n // Loop through all overrides and check for any matching the booking dates\n rateOverrides.forEach((override) => {\n if (!originalRequestedStartDate) return;\n\n const queryStartDate = dayjs(override.queryStartDate);\n const queryEndDate = dayjs(override.queryEndDate);\n\n const overlap =\n (!override.queryStartDate || queryStartDate.isSameOrBefore(originalRequestedStartDate, 'date')) &&\n (!override.queryEndDate || queryEndDate.isSameOrAfter(originalRequestedStartDate, 'date'));\n\n const stayDay = originalRequestedStartDate.format('dddd');\n\n if (overlap && override.enabledPerDay[stayDay as keyof RateLabelsByDay] === true) {\n name = override.name;\n shortDescription = override.shortDescription;\n longDescription = override.longDescription;\n }\n });\n\n return { name, shortDescription, longDescription };\n };\n\n public getAvailableRateOverrides = (): RateOverride[] => {\n if (!this.rateOverrides?.length) return [];\n\n const now = dayjs();\n //startDate/endDate/queryStartDate/queryEndDate must not empty\n const rateOverrides: RateOverride[] = this.rateOverrides.filter((override) => {\n // Check if the override can apply to this query in current time.\n // We don't require any of the filter fields, so if they are set we should check that they apply.\n if (override.startDate) {\n if (!dayjs(override.startDate).isSameOrBefore(now)) {\n return false;\n }\n\n if (override.endDate && !dayjs(override.endDate).isSameOrAfter(now)) {\n return false;\n }\n }\n\n return true;\n });\n return rateOverrides;\n };\n\n public hasRateVariesByDay = (requestedDate: RequestedDate): boolean => {\n // Validate startDate/endDate\n if (!requestedDate?.startDate || !requestedDate.endDate) return false;\n\n const rateOverrides: RateOverride[] = this.getAvailableRateOverrides();\n if (!rateOverrides.length) false;\n\n const originalRequestedStartDate = dayjs(requestedDate.startDate);\n const originalRequestedEndDate = dayjs(requestedDate.endDate);\n\n // Loop through all overrides and check for any matching the booking dates\n return rateOverrides.some((override) => {\n const overrideStartDate = dayjs(override.startDate);\n const overrideEndDate = dayjs(override.endDate);\n const queryStartDate = dayjs(override.queryStartDate);\n const queryEndDate = dayjs(override.queryEndDate);\n\n if (override.startDate && overrideStartDate.isAfter(originalRequestedEndDate)) {\n return false;\n }\n\n if (override.endDate && overrideEndDate.isBefore(originalRequestedStartDate)) {\n return false;\n }\n\n if (override.queryStartDate && queryStartDate.isAfter(originalRequestedEndDate)) {\n return false;\n }\n if (override.queryEndDate && queryEndDate.isBefore(originalRequestedStartDate)) {\n return false;\n }\n\n return true;\n });\n };\n\n public getDisplayRates = (requestedDate: RequestedDate): DisplayRate[] => {\n const rateOverrides: RateOverride[] = this.getAvailableRateOverrides();\n if (!rateOverrides.length) return [];\n\n const originalRequestedStartDate = dayjs(requestedDate.startDate);\n const originalRequestedEndDate = dayjs(requestedDate.endDate);\n\n const displayRates: DisplayRate[] = [\n {\n name: this.name,\n shortDescription: this.description,\n longDescription: this.longDescription,\n override: {\n name: this.name,\n shortDescription: this.description,\n longDescription: this.longDescription,\n enabledPerDay: {\n Monday: true,\n Tuesday: true,\n Wednesday: true,\n Thursday: true,\n Friday: true,\n Saturday: true,\n Sunday: true,\n },\n startDate: '',\n endDate: '',\n queryStartDate: '',\n queryEndDate: '',\n },\n },\n ];\n // Loop through all overrides and check for any matching the booking dates\n rateOverrides.forEach((override) => {\n const overrideStartDate = dayjs(override.startDate);\n const overrideEndDate = dayjs(override.endDate);\n const queryStartDate = dayjs(override.queryStartDate);\n const queryEndDate = dayjs(override.queryEndDate);\n //requestedStartDate & requestedEndDate must be in date range of override's startDate/endDate\n const requestedStartDate = originalRequestedStartDate.isBefore(overrideStartDate) ? overrideStartDate : originalRequestedStartDate;\n const requestedEndDate = originalRequestedEndDate.isAfter(overrideEndDate) ? overrideEndDate : originalRequestedEndDate;\n const overlap = this.datesOverlap(requestedStartDate, requestedEndDate, queryStartDate, queryEndDate);\n if (overlap) {\n if (requestedStartDate.isBefore(queryStartDate, 'date')) {\n if (queryEndDate.isBefore(requestedEndDate, 'date')) {\n displayRates.push({\n override: override,\n name: override.name,\n shortDescription: override.shortDescription,\n longDescription: override.longDescription,\n startDate: queryStartDate,\n endDate: queryEndDate,\n });\n } else {\n displayRates.push({\n override: override,\n name: override.name,\n shortDescription: override.shortDescription,\n longDescription: override.longDescription,\n startDate: queryStartDate,\n endDate: requestedEndDate,\n });\n }\n } else {\n if (queryEndDate.isBefore(requestedEndDate, 'date')) {\n displayRates.push({\n override: override,\n name: override.name,\n shortDescription: override.shortDescription,\n longDescription: override.longDescription,\n startDate: requestedStartDate,\n endDate: queryEndDate,\n });\n } else {\n displayRates.push({\n override: override,\n name: override.name,\n shortDescription: override.shortDescription,\n longDescription: override.longDescription,\n startDate: requestedStartDate,\n endDate: requestedEndDate,\n });\n }\n }\n }\n });\n\n return displayRates;\n };\n\n public displayRateToDayLabel = (displayRate: DisplayRate): string => {\n if (!displayRate.startDate || !displayRate.endDate) return '';\n\n const dayDayLabels: Record<string, string> = {};\n const startDayLabel = displayRate.startDate.format('MMM DD, YYYY');\n const endDayLabel = displayRate.endDate.format('MMM DD, YYYY');\n dayDayLabels[startDayLabel] = startDayLabel;\n dayDayLabels[endDayLabel] = endDayLabel;\n return `${Object.values(dayDayLabels).join(' - ')}`;\n };\n\n public displayRateToDayName = (displayRate: DisplayRate): string => {\n if (!displayRate.startDate || !displayRate.endDate) return '';\n\n const dayNames: Record<string, string> = {};\n const startDayName = displayRate.startDate.format('dddd');\n const endDayName = displayRate.endDate.format('dddd');\n dayNames[startDayName] = startDayName;\n dayNames[endDayName] = endDayName;\n return `${Object.values(dayNames).join(' - ')}`;\n };\n\n public getLabelsByDate = (requestedDate: RequestedDate): { label: string; alternateLabel: string; shortDescription?: string; longDescription?: string }[] => {\n const overrides: RateOverride[] = this.getAvailableRateOverrides();\n if (!overrides.length) {\n // If overrides are null or empty, return an empty rateLabelByDay for the whole date range\n return this.getDefaultLabelsByDate(requestedDate);\n }\n\n const labelsByDate: Record<string, { label: string; alternateLabel: string; shortDescription?: string; longDescription?: string; date: string }> = {};\n let dayOneOverride: RateOverride | null = null;\n\n overrides.forEach((override) => {\n const overrideStartDate = dayjs(override.startDate);\n const overrideEndDate = dayjs(override.endDate);\n const overrideQueryStartDate = dayjs(override.queryStartDate);\n const overrideQueryEndDate = dayjs(override.queryEndDate);\n\n const isApplicableForStayDate = () => {\n if (overrideStartDate && overrideStartDate.isAfter(stayDate)) {\n return false;\n }\n\n if (overrideEndDate && overrideEndDate.isBefore(stayDate)) {\n return false;\n }\n\n if (overrideQueryStartDate && overrideQueryStartDate.isAfter(stayDate)) {\n return false;\n }\n\n if (overrideQueryEndDate && overrideQueryEndDate.isBefore(stayDate)) {\n return false;\n }\n\n return true;\n };\n\n let stayDate = requestedDate.startDate.clone();\n while (stayDate.isSameOrBefore(requestedDate.endDate, 'date')) {\n const dayIndex = stayDate.format('YYYY-MM-DD');\n const dayLabel = stayDate.format('dddd, MMM DD, YYYY');\n const stayDay = stayDate.format('dddd');\n //stayDate must be in date range of override's startDate/endDate and queryStartDate/queryEndDate\n if (isApplicableForStayDate()) {\n if (override.enabledPerDay[stayDay as keyof RateLabelsByDay] === true) {\n // Keep setting the dayOneOverride until the first day of the stay is reached, this will tell us\n // what is the initial rate label for the stay\n if (stayDate.isSame(requestedDate.startDate, 'date')) {\n dayOneOverride = override;\n }\n\n labelsByDate[dayIndex] = {\n label: dayLabel,\n date: dayIndex,\n alternateLabel: override.name,\n shortDescription: override.shortDescription,\n longDescription: override.longDescription,\n };\n }\n } else if (!labelsByDate[dayIndex]?.label) {\n // No rate label override\n labelsByDate[dayIndex] = {\n label: dayLabel,\n date: dayIndex,\n alternateLabel: '',\n };\n }\n\n if (dayOneOverride === override) {\n // If the first day of the stay is an override, the user thinks all dates are the same, so we\n // need to remove the override from this day, and specify the default for the remaining empty days.\n\n if (labelsByDate[dayIndex]?.label === dayLabel && labelsByDate[dayIndex]?.alternateLabel === override.name) {\n labelsByDate[dayIndex] = {\n label: dayLabel,\n date: dayIndex,\n alternateLabel: '',\n shortDescription: '',\n longDescription: '',\n };\n } else if (labelsByDate[dayIndex]?.alternateLabel === '') {\n labelsByDate[dayIndex] = {\n label: dayLabel,\n date: dayIndex,\n alternateLabel: this.name,\n shortDescription: this.description,\n longDescription: this.longDescription,\n };\n }\n }\n\n // If label dates aren't populated, they're the originl rate labels.\n if (!labelsByDate[dayIndex]?.label) {\n labelsByDate[dayIndex] = {\n label: dayLabel,\n date: dayIndex,\n alternateLabel: dayOneOverride === override ? this.name : '',\n shortDescription: this.description,\n longDescription: this.longDescription,\n };\n }\n\n stayDate = stayDate.add(1, 'day');\n }\n });\n\n return Object.values(labelsByDate).sort((a, b) => {\n return a.date > b.date ? 1 : -1;\n });\n };\n}\n"]}
@@ -543,6 +543,7 @@ export declare const Translation: {
543
543
  Guests: string;
544
544
  GuestsPlaceHolder: string;
545
545
  Promocode: string;
546
+ Discount: string;
546
547
  Dates: string;
547
548
  Apply: string;
548
549
  ChooseDates: string;
@@ -709,8 +710,10 @@ export declare const Translation: {
709
710
  Top10Title: string;
710
711
  GDayTitle: string;
711
712
  SalesforceTitle: string;
713
+ RACTitle: string;
712
714
  Fields: {
713
715
  MemberNumber: string;
716
+ MemberNumberOptionalBenefits: string;
714
717
  FamilyName: string;
715
718
  };
716
719
  Submit: string;
@@ -546,6 +546,7 @@ exports.Translation = {
546
546
  Guests: 'Misc.Guests',
547
547
  GuestsPlaceHolder: 'Misc.GuestsPlaceHolder',
548
548
  Promocode: 'Misc.Promocode',
549
+ Discount: 'Misc.Discount',
549
550
  Dates: 'Misc.Dates',
550
551
  Apply: 'Misc.Apply',
551
552
  ChooseDates: 'Misc.ChooseDates',
@@ -712,8 +713,10 @@ exports.Translation = {
712
713
  Top10Title: 'ExternalMemberPopup.Top10Title',
713
714
  GDayTitle: 'ExternalMemberPopup.GDayTitle',
714
715
  SalesforceTitle: 'ExternalMemberPopup.SalesforceTitle',
716
+ RACTitle: 'ExternalMemberPopup.RACTitle',
715
717
  Fields: {
716
718
  MemberNumber: 'ExternalMemberPopup.Fields.MemberNumber',
719
+ MemberNumberOptionalBenefits: 'ExternalMemberPopup.Fields.MemberNumberOptionalBenefits',
717
720
  FamilyName: 'ExternalMemberPopup.Fields.FamilyName',
718
721
  },
719
722
  Submit: 'ExternalMemberPopup.Submit',