@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.
- package/dist/288.bundle.js +1 -1
- package/dist/659.bundle.js +1 -1
- package/dist/903.bundle.js +1 -1
- package/dist/978.bundle.js +1 -1
- package/dist/984.bundle.js +1 -0
- package/dist/main.bundle.js +1 -1
- package/dist/src/components/members/SignInModal/EmailAndFullnameMemberModal.d.ts +4 -1
- package/dist/src/components/members/SignInModal/EmailAndFullnameMemberModal.js +15 -1
- package/dist/src/components/members/SignInModal/EmailAndFullnameMemberModal.js.map +1 -1
- package/dist/src/components/members/SignInModal/ExternalMemberModal.d.ts +2 -0
- package/dist/src/components/members/SignInModal/ExternalMemberModal.js +5 -3
- package/dist/src/components/members/SignInModal/ExternalMemberModal.js.map +1 -1
- package/dist/src/components/members/SignInModal/MemberSignInModal.js +2 -0
- package/dist/src/components/members/SignInModal/MemberSignInModal.js.map +1 -1
- package/dist/src/components/steps/addons/AddonCard.js +3 -1
- package/dist/src/components/steps/addons/AddonCard.js.map +1 -1
- package/dist/src/components/steps/common/CommonAddonSummary/CommonAddonSummary.js +4 -4
- package/dist/src/components/steps/common/CommonAddonSummary/CommonAddonSummary.js.map +1 -1
- package/dist/src/components/steps/confirmation/additionalOffers/AdditionalOffersModal.js +3 -1
- package/dist/src/components/steps/confirmation/additionalOffers/AdditionalOffersModal.js.map +1 -1
- package/dist/src/components/steps/room/RoomList.js +1 -4
- package/dist/src/components/steps/room/RoomList.js.map +1 -1
- package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRoomList.js +1 -4
- package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRoomList.js.map +1 -1
- package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRooms.js +6 -2
- package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRooms.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRates.js +6 -5
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRates.js.map +1 -1
- package/dist/src/components/summary/BESummaryRoomRow.js +6 -1
- package/dist/src/components/summary/BESummaryRoomRow.js.map +1 -1
- package/dist/src/contexts/BookingEngineContext/BookingEngineContextType.types.d.ts +2 -0
- package/dist/src/contexts/BookingEngineContext/BookingEngineContextType.types.js.map +1 -1
- package/dist/src/contexts/BookingEngineContext/BookingEngineContextWrapper.js +3 -0
- package/dist/src/contexts/BookingEngineContext/BookingEngineContextWrapper.js.map +1 -1
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +5 -1
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
- package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js +8 -3
- package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js.map +1 -1
- package/dist/src/contexts/HotelOverridesContext.js +4 -0
- package/dist/src/contexts/HotelOverridesContext.js.map +1 -1
- package/dist/src/events/index.d.ts +1 -1
- package/dist/src/events/index.js +1 -1
- package/dist/src/events/index.js.map +1 -1
- package/dist/src/events/state/SelectedHotelChangeEvent.js.map +1 -1
- package/dist/src/hooks/RoomRateAvailabilityListFromApi.js +51 -2
- package/dist/src/hooks/RoomRateAvailabilityListFromApi.js.map +1 -1
- package/dist/src/models/Api/HotelDTO.js.map +1 -1
- package/dist/src/models/Api/HotelOverrideDTO.d.ts +5 -0
- package/dist/src/models/Api/HotelOverrideDTO.js.map +1 -1
- package/dist/src/models/Client/Hotel/Hotel.d.ts +8 -0
- package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
- package/dist/src/models/Room/RoomRate.js +2 -0
- package/dist/src/models/Room/RoomRate.js.map +1 -1
- package/dist/src/translations/Translation.d.ts +3 -0
- package/dist/src/translations/Translation.js +3 -0
- package/dist/src/translations/Translation.js.map +1 -1
- package/dist/src/translations/languages/en-gb.js +3 -0
- package/dist/src/translations/languages/en-gb.js.map +1 -1
- package/dist/test.bundle.js +1 -1
- package/dist/tests/offline/entry/config/hotelSpecDefault.js +2 -0
- package/dist/tests/offline/entry/config/hotelSpecDefault.js.map +1 -1
- package/dist/vendors.bundle.js +1 -1
- package/package.json +2 -2
- package/dist/663.bundle.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomRateAvailabilityListFromApi.js","sourceRoot":"/","sources":["src/hooks/RoomRateAvailabilityListFromApi.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,iDAAgH;AAChH,6CAAyE;AACzE,2CAA4D;AAE5D,kDAA0B;AAC1B,iCAAiE;AAOjE,gFAAwD;AAExD,2DAAwD;AAEjD,MAAM,kCAAkC,GAAG,GAAG,EAAE;IACnD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IACpC,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAC,yBAAc,CAAC,CAAC;IAEvC,MAAM,SAAS,GAAG,IAAA,kBAAU,EAAC,+BAAoB,CAAC,CAAC;IACnD,MAAM,EAAE,cAAc,EAAE,GAAG,IAAA,kBAAU,EAAC,gCAAqB,CAAC,CAAC;IAE7D,MAAM,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,eAAe,EAAE,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAEnG,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAS,EAAE,CAAC,CAAC;IAE/C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAEhE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAiB,IAAI,CAAC,CAAC;IAC/D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAiB,IAAI,CAAC,CAAC;IAErE,MAAM,SAAS,GAAG,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,YAAY,EAAE,CAAC;IACpD,MAAM,OAAO,GAAG,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,UAAU,EAAE,CAAC;IAChD,MAAM,SAAS,GAAG,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,YAAY,EAAE,CAAC;IAEpD,MAAM,MAAM,GAAG,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,SAAS,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,WAAW,EAAE,CAAC;IAElD,MAAM,EAAE,YAAY,EAAE,GAAG,IAAA,qCAAiB,GAAE,CAAC;IAE7C,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,gBAAQ,GAAE,CAAC;IAE7B,MAAM,eAAe,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;;QACjC,IAAI,CAAC,cAAc,IAAI,CAAA,MAAA,cAAc,CAAC,QAAQ,0CAAE,MAAM,MAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAE1E,IAAI,eAA4B,CAAC;QACjC,IAAI,mBAAmB,GAAG,EAAE,CAAC;QAC7B,MAAA,MAAA,cAAc,CAAC,QAAQ,0CAAE,OAAO,mDAAG,CAAC,OAAO,EAAE,EAAE;YAC3C,IAAI,OAAO,CAAC,OAAO,MAAK,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,CAAA,EAAE;gBACpC,OAAO;aACV;YAED,MAAM,CAAC,MAAM,CAA6B,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;gBAC3E,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;gBACvC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,eAAK,CAAC,CAAC;gBAC7C,MAAM,OAAO,GAAG,IAAA,eAAK,EACjB,IAAI,CAAC,GAAG,CAAC,KAAK,CACV,IAAI,EACJ,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CACvB,CACJ,CAAC;gBACF,IAAI,CAAC,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBAC9C,eAAe,GAAG,OAAO,CAAC;oBAC1B,mBAAmB,GAAG,QAAQ,CAAC;iBAClC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC;IACnE,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;IAE5B,MAAM,mBAAmB,GAAG,CAAO,SAAoB,EAAmB,EAAE;QACxE,MAAM,OAAO,GAAa,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAa,CAAC;QAC3G,OAAO,MAAM,wBAAc,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAiB,EAAE,YAAY,CAAC,CAAC;IACxG,CAAC,CAAA,CAAC;IAEF,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,IAAI;YACA,MAAM,MAAM,GAAqB;gBAC7B,WAAW,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,CAAC,UAAU,CAAC;gBAC1C,YAAY,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAC,UAAU,CAAC;gBACzC,SAAS,EAAE,MAAM;gBACjB,WAAW,EAAE,QAAQ;gBACrB,QAAQ,EAAE,CAAC;gBACX,SAAS,EAAE,SAAS;aACvB,CAAC;YAEF,MAAM,KAAK,GAAG,IAAI,yBAAgB,CAAC,MAAM,CAAC,CAAC;YAC3C,KAAK,CAAC,KAAK,CAAC,CAAC;YAEb,MAAM,OAAO,GAAa,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAa,CAAC;YAE3G,IAAI,GAAG,GAAG,iBAAiB,CAAC;YAE5B,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBACvB,GAAG,GAAG,wBAAwB,EAAe,CAAC;aACjD;YAED,IAAI,CAAC,GAAG,EAAE;gBACN,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;gBACpC,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;aACzC;YAED,MAAM,kBAAkB,GAAG,GAAG,EAAE;gBAC5B,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBAC1B,YAAY,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC,CAAC;YAEF,IAAI,GAAG,EAAE;gBACL,YAAY,CAAC,IAAI,CAAC,CAAC;gBACnB,2FAA2F;gBAC3F,kFAAkF;gBAClF,mFAAmF;gBACnF,wBAAc,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAiB,EAAE,YAAY,CAAC;qBAC3E,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE;;oBACrB,IAAI,CAAC,WAAW,EAAE;wBACd,QAAQ,CAAC,cAAc,CAAC,CAAC;wBACzB,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;wBACjC,cAAc,CAAC,KAAK,CAAC,CAAC;wBAEtB,MAAM,UAAU,GACZ,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;;4BACzB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;4BAE5B,MAAM,SAAS,GAAmB;gCAC9B,IAAI,EAAE,IAAc;gCACpB,IAAI,EAAE,IAAc;gCACpB,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE;gCAClC,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE;gCACpC,QAAQ,EAAE,GAAG,CAAC,eAAe;gCAE7B,KAAK,EACD,MAAA,MAAA,IAAI,CAAC,QAAQ,EAAE,0CAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oCAC1B,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;oCAC5B,OAAO;wCACH,IAAI;wCACJ,IAAI;wCAEJ,KAAK,EAAE;4CACH,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE;4CACpC,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE;4CAChC,QAAQ,EAAE,GAAG,CAAC,eAAe;yCAChC;qCACJ,CAAC;gCACN,CAAC,CAAC,mCAAI,EAAE;6BACf,CAAC;4BAEF,OAAO,SAAS,CAAC;wBACrB,CAAC,CAAC,mCAAI,EAAE,CAAC;wBAEb,MAAM,KAAK,GAAG,IAAI,4BAAmB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;wBAC1D,KAAK,CAAC,KAAK,CAAC,CAAC;wBACb,kBAAkB,EAAE,CAAC;qBACxB;gBACL,CAAC,CAAC;qBACD,KAAK,CAAC,GAAG,EAAE;oBACR,IAAI,CAAC,WAAW,EAAE;wBACd,QAAQ,CAAC,EAAE,CAAC,CAAC;wBACb,WAAW,CAAC,IAAI,CAAC,CAAC;wBAClB,cAAc,CAAC,IAAI,CAAC,CAAC;qBACxB;oBACD,kBAAkB,EAAE,CAAC;gBACzB,CAAC,CAAC,CAAC;aACV;SACJ;QAAC,OAAO,EAAE,EAAE;YACT,EAAE;SACL;QAED,OAAO,GAAG,EAAE;YACR,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,WAAW,GAAG,IAAI,CAAC;QACvB,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC,cAAc,EAAE,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,QAAQ,EAAE,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC;IAElK,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,mBAAmB,EAAE,CAAC;AAC/G,CAAC,CAAC;AAnKW,QAAA,kCAAkC,sCAmK7C","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;
|
|
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
|
|
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":";;;;;;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,GAAG,EAAE;YAC3B,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,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;QA/hBE,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;CAgWJ;AA/jBD,4BA+jBC","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',
|