@roomstay/frontend 2.6.31 → 2.6.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/dist/166.bundle.js +1 -1
  2. package/dist/279.bundle.js +1 -1
  3. package/dist/370.bundle.js +1 -1
  4. package/dist/449.bundle.js +1 -1
  5. package/dist/586.bundle.js +1 -1
  6. package/dist/736.bundle.js +1 -1
  7. package/dist/873.bundle.js +1 -1
  8. package/dist/903.bundle.js +1 -1
  9. package/dist/927.bundle.js +1 -1
  10. package/dist/972.bundle.js +1 -1
  11. package/dist/978.bundle.js +1 -1
  12. package/dist/main.bundle.js +1 -1
  13. package/dist/src/api/AvailabilityAPI.d.ts +5 -4
  14. package/dist/src/api/AvailabilityAPI.js +23 -29
  15. package/dist/src/api/AvailabilityAPI.js.map +1 -1
  16. package/dist/src/components/generic/InputGroup/InputGroup.js +1 -0
  17. package/dist/src/components/generic/InputGroup/InputGroup.js.map +1 -1
  18. package/dist/src/components/generic/InputGroup/InputGroup.types.d.ts +1 -1
  19. package/dist/src/components/generic/InputGroup/InputGroup.types.js.map +1 -1
  20. package/dist/src/components/generic/ScrollToTop.js +10 -1
  21. package/dist/src/components/generic/ScrollToTop.js.map +1 -1
  22. package/dist/src/components/generic/date/DatePicker.js +2 -1
  23. package/dist/src/components/generic/date/DatePicker.js.map +1 -1
  24. package/dist/src/components/generic/date/DatePickerDay.js +2 -1
  25. package/dist/src/components/generic/date/DatePickerDay.js.map +1 -1
  26. package/dist/src/components/members/SignInModal/EmailAndFullnameMemberModal.d.ts +4 -0
  27. package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/EmailAndFullnameMemberModal.js +8 -4
  28. package/dist/src/components/members/SignInModal/EmailAndFullnameMemberModal.js.map +1 -0
  29. package/dist/src/components/members/SignInModal/EmailPasswordMemberModal.d.ts +4 -0
  30. package/dist/src/components/members/SignInModal/EmailPasswordMemberModal.js +29 -0
  31. package/dist/src/components/members/SignInModal/EmailPasswordMemberModal.js.map +1 -0
  32. package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/ExternalMemberModal.d.ts +8 -3
  33. package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/ExternalMemberModal.js +24 -23
  34. package/dist/src/components/members/SignInModal/ExternalMemberModal.js.map +1 -0
  35. package/dist/src/components/members/SignInModal/FamilyNameMemberModal.d.ts +4 -0
  36. package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/FamilyNameMemberModal.js +6 -4
  37. package/dist/src/components/members/SignInModal/FamilyNameMemberModal.js.map +1 -0
  38. package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/InternalMemberSignInModal.d.ts +1 -0
  39. package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/InternalMemberSignInModal.js +31 -35
  40. package/dist/src/components/members/SignInModal/InternalMemberSignInModal.js.map +1 -0
  41. package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/InternalMemberSignInModal.types.d.ts +1 -1
  42. package/dist/src/components/members/SignInModal/InternalMemberSignInModal.types.js.map +1 -0
  43. package/dist/src/components/members/SignInModal/MemberSignInModal.js +86 -0
  44. package/dist/src/components/members/SignInModal/MemberSignInModal.js.map +1 -0
  45. package/dist/src/components/steps/MinimumNightStayPill.js.map +1 -1
  46. package/dist/src/components/steps/confirmation/RoomContactDetails.js +72 -4
  47. package/dist/src/components/steps/confirmation/RoomContactDetails.js.map +1 -1
  48. package/dist/src/components/steps/date/PeoplePicker.js +1 -0
  49. package/dist/src/components/steps/date/PeoplePicker.js.map +1 -1
  50. package/dist/src/components/steps/date/PeoplePickerRow.d.ts +1 -0
  51. package/dist/src/components/steps/date/PeoplePickerRow.js +14 -4
  52. package/dist/src/components/steps/date/PeoplePickerRow.js.map +1 -1
  53. package/dist/src/components/steps/date/StepDatePricePerRoom.js +2 -1
  54. package/dist/src/components/steps/date/StepDatePricePerRoom.js.map +1 -1
  55. package/dist/src/components/steps/room/RoomListCrossSellBlock.js +1 -1
  56. package/dist/src/components/steps/room/RoomListCrossSellBlock.js.map +1 -1
  57. package/dist/src/components/steps/room/StepRoomBestRateAlert.js +13 -10
  58. package/dist/src/components/steps/room/StepRoomBestRateAlert.js.map +1 -1
  59. package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRoomList.js +5 -1
  60. package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRoomList.js.map +1 -1
  61. package/dist/src/components/steps/room/roomFilter/RoomFilterRoomType.js.map +1 -1
  62. package/dist/src/contexts/BasketContext/BasketContextWrapper.js +3 -1
  63. package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
  64. package/dist/src/contexts/BookingEngineContext/BookingEngineContextType.types.d.ts +8 -1
  65. package/dist/src/contexts/BookingEngineContext/BookingEngineContextType.types.js.map +1 -1
  66. package/dist/src/contexts/BookingEngineContext/BookingEngineContextWrapper.js +5 -0
  67. package/dist/src/contexts/BookingEngineContext/BookingEngineContextWrapper.js.map +1 -1
  68. package/dist/src/contexts/CompanyContext/CompanyContextType.type.d.ts +1 -0
  69. package/dist/src/contexts/CompanyContext/CompanyContextType.type.js.map +1 -1
  70. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +22 -19
  71. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
  72. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +4 -2
  73. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
  74. package/dist/src/contexts/HotelOverridesContext.js +8 -0
  75. package/dist/src/contexts/HotelOverridesContext.js.map +1 -1
  76. package/dist/src/engines/BaseEngine.d.ts +4 -1
  77. package/dist/src/engines/BaseEngine.js +6 -1
  78. package/dist/src/engines/BaseEngine.js.map +1 -1
  79. package/dist/src/engines/RecentSearchesEngine/RecentSearchesEngineElement.js +1 -1
  80. package/dist/src/engines/RecentSearchesEngine/RecentSearchesEngineElement.js.map +1 -1
  81. package/dist/src/hooks/UpdateQueryParameters.js.map +1 -1
  82. package/dist/src/hooks/useCalendarNightStay.js +4 -2
  83. package/dist/src/hooks/useCalendarNightStay.js.map +1 -1
  84. package/dist/src/index.d.ts +2 -1
  85. package/dist/src/index.js +6 -4
  86. package/dist/src/index.js.map +1 -1
  87. package/dist/src/models/Api/HotelDTO.d.ts +1 -1
  88. package/dist/src/models/Api/HotelDTO.js.map +1 -1
  89. package/dist/src/models/Api/HotelOverrideDTO.d.ts +15 -7
  90. package/dist/src/models/Api/HotelOverrideDTO.js.map +1 -1
  91. package/dist/src/models/BasketRow.d.ts +12 -0
  92. package/dist/src/models/BasketRow.js +17 -0
  93. package/dist/src/models/BasketRow.js.map +1 -1
  94. package/dist/src/models/Client/Hotel/Hotel.d.ts +4 -1
  95. package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
  96. package/dist/src/models/Confirmation.d.ts +5 -0
  97. package/dist/src/models/Confirmation.js +5 -1
  98. package/dist/src/models/Confirmation.js.map +1 -1
  99. package/dist/src/models/LocalStorageModel.d.ts +7 -0
  100. package/dist/src/models/LocalStorageModel.js +3 -0
  101. package/dist/src/models/LocalStorageModel.js.map +1 -0
  102. package/dist/src/models/Promotion/IPromotion.type.d.ts +2 -0
  103. package/dist/src/models/Promotion/IPromotion.type.js.map +1 -1
  104. package/dist/src/providers/RoomstayThemeEngine.js +1 -1
  105. package/dist/src/providers/RoomstayThemeEngine.js.map +1 -1
  106. package/dist/src/providers/storage/LocalStorageProvider.d.ts +9 -14
  107. package/dist/src/providers/storage/LocalStorageProvider.js +19 -97
  108. package/dist/src/providers/storage/LocalStorageProvider.js.map +1 -1
  109. package/dist/src/providers/{SessionProvider.d.ts → storage/SessionProvider.d.ts} +1 -1
  110. package/dist/src/providers/{SessionProvider.js → storage/SessionProvider.js} +13 -12
  111. package/dist/src/providers/storage/SessionProvider.js.map +1 -0
  112. package/dist/src/providers/storage/StorageProvider.d.ts +14 -8
  113. package/dist/src/providers/storage/StorageProvider.js +94 -7
  114. package/dist/src/providers/storage/StorageProvider.js.map +1 -1
  115. package/dist/src/util/CalendarHelper.d.ts +1 -0
  116. package/dist/src/util/CalendarHelper.js +16 -1
  117. package/dist/src/util/CalendarHelper.js.map +1 -1
  118. package/dist/src/util/EventsHelper.js +2 -2
  119. package/dist/src/util/EventsHelper.js.map +1 -1
  120. package/dist/test.bundle.js +1 -1
  121. package/dist/tests/jest/providers/SessionProvider.test.js +7 -7
  122. package/dist/tests/jest/providers/SessionProvider.test.js.map +1 -1
  123. package/dist/tests/jest/providers/storage/LocalStorageProvider.test.js +17 -28
  124. package/dist/tests/jest/providers/storage/LocalStorageProvider.test.js.map +1 -1
  125. package/dist/vendors.bundle.js +1 -1
  126. package/dist/vendors.bundle.js.LICENSE.txt +8 -2
  127. package/package.json +4 -2
  128. package/dist/src/components/steps/room/MemberSignInModal/EmailAndFullnameMemberModal.d.ts +0 -4
  129. package/dist/src/components/steps/room/MemberSignInModal/EmailAndFullnameMemberModal.js.map +0 -1
  130. package/dist/src/components/steps/room/MemberSignInModal/ExternalMemberModal.js.map +0 -1
  131. package/dist/src/components/steps/room/MemberSignInModal/FamilyNameMemberModal.d.ts +0 -8
  132. package/dist/src/components/steps/room/MemberSignInModal/FamilyNameMemberModal.js.map +0 -1
  133. package/dist/src/components/steps/room/MemberSignInModal/InternalMemberSignInModal.js.map +0 -1
  134. package/dist/src/components/steps/room/MemberSignInModal/InternalMemberSignInModal.types.js.map +0 -1
  135. package/dist/src/components/steps/room/MemberSignInModal/MemberSignInModal.js +0 -62
  136. package/dist/src/components/steps/room/MemberSignInModal/MemberSignInModal.js.map +0 -1
  137. package/dist/src/providers/SessionProvider.js.map +0 -1
  138. /package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/InternalMemberSignInModal.types.js +0 -0
  139. /package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/MemberSignInModal.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"RoomListCrossSellBlock.js","sourceRoot":"/","sources":["src/components/steps/room/RoomListCrossSellBlock.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport React, { ReactElement, useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport { API_DATE_FORMAT } from '@/api/BaseAPI';\nimport API from '@/api/BookingAPI';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport SmallSpinner from '@/components/generic/loader/SmallSpinner';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { useExternalMember } from '@/hooks/useExternalMember';\nimport { Room } from '@/models/Room/Room';\nimport ImageProvider, { ImageSize } from '@/providers/ImageProvider';\nimport { Color } from '@/util/Color';\nimport ScreenSize from '@/util/ScreenSize';\n\nexport interface RoomListCrossSellBlockProps {\n hotelId: string;\n}\n\nexport default function RoomListCrossSellBlock(props: RoomListCrossSellBlockProps): ReactElement | null {\n const { t } = useTranslation();\n const context = useContext(BookingEngineContext);\n const basketContext = useContext(BasketContext);\n\n const [isAvailable, setIsAvailable] = useState(false); // True if the dates were found with a calendar search\n const [isReallyAvailable, setIsReallyAvailable] = useState(true); // True if the dates were found with an availability search\n const [isLoading, setIsLoading] = useState(true);\n const [imageUrl, setImageUrl] = useState('');\n const [name, setName] = useState('');\n const [description, setDescription] = useState('');\n const [link, setLink] = useState('');\n const [rooms, setRooms] = useState<Room[]>([]);\n const { memberNumber } = useExternalMember();\n\n useEffect(() => {\n const row = basketContext.selectedBasketRow;\n\n if (!row) {\n return;\n }\n\n API.Availability.getCheapestPricePerDay(\n row.getStartDate(),\n row.getEndDate(),\n row.getAdults(),\n row.getChildren(),\n row.getInfants(),\n row.getPromoCode(),\n props.hotelId,\n memberNumber,\n true\n )\n .catch()\n .then((dayPrices) => {\n if (dayPrices) {\n let allFound = true;\n for (let date = row.getStartDate(); date.isBefore(row.getEndDate(), 'day'); date = date.add(1, 'day')) {\n if (!dayPrices[date.format(API_DATE_FORMAT)]) {\n allFound = false;\n break;\n }\n }\n setIsAvailable(allFound);\n setIsReallyAvailable(true);\n if (allFound) {\n setIsLoading(true);\n const crossSellHotelInfo = API.Availability.getCrossSellHotelInfo(props.hotelId);\n setName(crossSellHotelInfo.name);\n setImageUrl(crossSellHotelInfo.image);\n setDescription(crossSellHotelInfo.description);\n\n const params: string[] = ['arrive=' + row.getStartDate().format('YYYY-M-D'), 'depart=' + row.getEndDate().format('YYYY-M-D')];\n if (row.getAdults() > 1) {\n params.push('adults=' + row.getAdults());\n }\n if (row.getChildren() > 0) {\n params.push('children=' + row.getChildren());\n }\n if (row.getInfants() > 0) {\n params.push('infants=' + row.getInfants());\n }\n if (row.getPromoCode()) {\n params.push('promocode=' + row.getPromoCode());\n }\n setLink(crossSellHotelInfo.checkoutUrl + '#/step/room/?' + params.join('&'));\n\n API.Availability.fetchAvailabilityData(row, props.hotelId, memberNumber)\n .catch((_) => [])\n .then((hotelRooms) => {\n if (hotelRooms?.length) {\n setRooms(hotelRooms);\n setIsLoading(false);\n } else {\n setIsReallyAvailable(false);\n setIsLoading(false);\n }\n });\n }\n }\n });\n }, [basketContext.selectedBasketRow]);\n\n return isAvailable ? (\n <div className=\"u-marg-top--heavy u-marg-bottom\">\n <div className=\"cross-sell-module\">\n <div className=\"cross-sell-module--image\" style={{ backgroundImage: `url('${ImageProvider.resizeImage(imageUrl, ImageSize.Original)}')` }} />\n <div className=\"cross-sell-module--content u-pad--heavy u-pad@m-\">\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"cross-sell-module--content-title u-marg-bottom--light\">\n <Headline bold size={isReallyAvailable ? 'large' : 'normal'}>\n {isLoading\n ? t(Translation.Step.Room.CrossSellBlock.AvailabilityNearBy1)\n : isReallyAvailable\n ? t(Translation.Step.Room.CrossSellBlock.AvailabilityNearBy2)\n : t(Translation.Step.Room.CrossSellBlock.DateUnavailable)}\n </Headline>\n </div>\n {isReallyAvailable && (\n <div className=\"cross-sell-module--content-description u-marg-bottom--light\">\n <Text color={Color.DarkGrey} type={TextType.Body}>\n <strong style={{ color: Color.Accent }}>{name}</strong>\n <div dangerouslySetInnerHTML={{ __html: description }}></div>\n </Text>\n </div>\n )}\n </div>\n\n {isLoading ? (\n <SmallSpinner />\n ) : (\n <>\n {rooms.slice(0, 4).map((room, index) => {\n const roomLink = link + '&room=' + room.code;\n let classNames = 'u-flex align-items-end';\n if (index < rooms.length - 1) {\n classNames += ' u-pad-bottom u-border-bottom u-marg-bottom';\n }\n return (\n <a key={room.code} className={classNames} href={roomLink} target=\"_blank\" rel=\"noreferrer\">\n <div className=\"u-flex flex-column align-items-start justify-content-start\">\n <Text type={TextType.Body} color={Color.Accent} bold>\n {room.name}\n </Text>\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {t(Translation.Step.Room.Sleeps, {\n maxOccupancy: room.occupancy,\n })}\n </Text>\n </div>\n <div className=\"u-flex flex-column align-items-end align-items-md-end\">\n <Text type={TextType.Small} color={Color.DarkGrey} inline>\n {t(Translation.Misc.From)}\n </Text>\n <Text type={TextType.Body} color={Color.Accent} bold>\n <Currency>{room.getLowestPrice(true)}</Currency>\n </Text>\n </div>\n </a>\n );\n })}\n </>\n )}\n\n {isReallyAvailable && (\n <div className=\"u-marg-top--light u-flex justify-content-start u-w-100@m- u-marg-top--heavy\">\n <a\n className={'link-button --primary --filled --success --icon-right --normal' + (context.screenSize <= ScreenSize.Medium ? ' --wide' : '')}\n tabIndex={0}\n type=\"button\"\n href={link}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <span>\n See all {rooms.length} rooms\n <Icon icon={IconType.ArrowRight} size=\"1em\" />\n </span>\n </a>\n </div>\n )}\n </div>\n </div>\n </div>\n ) : null;\n}\n"]}
1
+ {"version":3,"file":"RoomListCrossSellBlock.js","sourceRoot":"/","sources":["src/components/steps/room/RoomListCrossSellBlock.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport React, { ReactElement, useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport { API_DATE_FORMAT } from '@/api/BaseAPI';\nimport API from '@/api/BookingAPI';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport SmallSpinner from '@/components/generic/loader/SmallSpinner';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { useExternalMember } from '@/hooks/useExternalMember';\nimport { Room } from '@/models/Room/Room';\nimport ImageProvider, { ImageSize } from '@/providers/ImageProvider';\nimport { Color } from '@/util/Color';\nimport ScreenSize from '@/util/ScreenSize';\n\nexport interface RoomListCrossSellBlockProps {\n hotelId: string;\n}\n\nexport default function RoomListCrossSellBlock(props: RoomListCrossSellBlockProps): ReactElement | null {\n const { t } = useTranslation();\n const context = useContext(BookingEngineContext);\n const basketContext = useContext(BasketContext);\n\n const [isAvailable, setIsAvailable] = useState(false); // True if the dates were found with a calendar search\n const [isReallyAvailable, setIsReallyAvailable] = useState(true); // True if the dates were found with an availability search\n const [isLoading, setIsLoading] = useState(true);\n const [imageUrl, setImageUrl] = useState('');\n const [name, setName] = useState('');\n const [description, setDescription] = useState('');\n const [link, setLink] = useState('');\n const [rooms, setRooms] = useState<Room[]>([]);\n const { memberNumber } = useExternalMember();\n\n useEffect(() => {\n const row = basketContext.selectedBasketRow;\n\n if (!row) {\n return;\n }\n\n API.Availability.getCheapestPricePerDay(\n row.getStartDate(),\n row.getEndDate(),\n row.getAdults(),\n row.getChildren(),\n row.getInfants(),\n row.getPromoCode(),\n row.getRoomCode(),\n props.hotelId,\n memberNumber,\n true\n )\n .catch()\n .then((dayPrices) => {\n if (dayPrices) {\n let allFound = true;\n for (let date = row.getStartDate(); date.isBefore(row.getEndDate(), 'day'); date = date.add(1, 'day')) {\n if (!dayPrices[date.format(API_DATE_FORMAT)]) {\n allFound = false;\n break;\n }\n }\n setIsAvailable(allFound);\n setIsReallyAvailable(true);\n if (allFound) {\n setIsLoading(true);\n const crossSellHotelInfo = API.Availability.getCrossSellHotelInfo(props.hotelId);\n setName(crossSellHotelInfo.name);\n setImageUrl(crossSellHotelInfo.image);\n setDescription(crossSellHotelInfo.description);\n\n const params: string[] = ['arrive=' + row.getStartDate().format('YYYY-M-D'), 'depart=' + row.getEndDate().format('YYYY-M-D')];\n if (row.getAdults() > 1) {\n params.push('adults=' + row.getAdults());\n }\n if (row.getChildren() > 0) {\n params.push('children=' + row.getChildren());\n }\n if (row.getInfants() > 0) {\n params.push('infants=' + row.getInfants());\n }\n if (row.getPromoCode()) {\n params.push('promocode=' + row.getPromoCode());\n }\n setLink(crossSellHotelInfo.checkoutUrl + '#/step/room/?' + params.join('&'));\n\n API.Availability.fetchAvailabilityData(row, props.hotelId, memberNumber)\n .catch((_) => [])\n .then((hotelRooms) => {\n if (hotelRooms?.length) {\n setRooms(hotelRooms);\n setIsLoading(false);\n } else {\n setIsReallyAvailable(false);\n setIsLoading(false);\n }\n });\n }\n }\n });\n }, [basketContext.selectedBasketRow]);\n\n return isAvailable ? (\n <div className=\"u-marg-top--heavy u-marg-bottom\">\n <div className=\"cross-sell-module\">\n <div className=\"cross-sell-module--image\" style={{ backgroundImage: `url('${ImageProvider.resizeImage(imageUrl, ImageSize.Original)}')` }} />\n <div className=\"cross-sell-module--content u-pad--heavy u-pad@m-\">\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"cross-sell-module--content-title u-marg-bottom--light\">\n <Headline bold size={isReallyAvailable ? 'large' : 'normal'}>\n {isLoading\n ? t(Translation.Step.Room.CrossSellBlock.AvailabilityNearBy1)\n : isReallyAvailable\n ? t(Translation.Step.Room.CrossSellBlock.AvailabilityNearBy2)\n : t(Translation.Step.Room.CrossSellBlock.DateUnavailable)}\n </Headline>\n </div>\n {isReallyAvailable && (\n <div className=\"cross-sell-module--content-description u-marg-bottom--light\">\n <Text color={Color.DarkGrey} type={TextType.Body}>\n <strong style={{ color: Color.Accent }}>{name}</strong>\n <div dangerouslySetInnerHTML={{ __html: description }}></div>\n </Text>\n </div>\n )}\n </div>\n\n {isLoading ? (\n <SmallSpinner />\n ) : (\n <>\n {rooms.slice(0, 4).map((room, index) => {\n const roomLink = link + '&room=' + room.code;\n let classNames = 'u-flex align-items-end';\n if (index < rooms.length - 1) {\n classNames += ' u-pad-bottom u-border-bottom u-marg-bottom';\n }\n return (\n <a key={room.code} className={classNames} href={roomLink} target=\"_blank\" rel=\"noreferrer\">\n <div className=\"u-flex flex-column align-items-start justify-content-start\">\n <Text type={TextType.Body} color={Color.Accent} bold>\n {room.name}\n </Text>\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {t(Translation.Step.Room.Sleeps, {\n maxOccupancy: room.occupancy,\n })}\n </Text>\n </div>\n <div className=\"u-flex flex-column align-items-end align-items-md-end\">\n <Text type={TextType.Small} color={Color.DarkGrey} inline>\n {t(Translation.Misc.From)}\n </Text>\n <Text type={TextType.Body} color={Color.Accent} bold>\n <Currency>{room.getLowestPrice(true)}</Currency>\n </Text>\n </div>\n </a>\n );\n })}\n </>\n )}\n\n {isReallyAvailable && (\n <div className=\"u-marg-top--light u-flex justify-content-start u-w-100@m- u-marg-top--heavy\">\n <a\n className={'link-button --primary --filled --success --icon-right --normal' + (context.screenSize <= ScreenSize.Medium ? ' --wide' : '')}\n tabIndex={0}\n type=\"button\"\n href={link}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <span>\n See all {rooms.length} rooms\n <Icon icon={IconType.ArrowRight} size=\"1em\" />\n </span>\n </a>\n </div>\n )}\n </div>\n </div>\n </div>\n ) : null;\n}\n"]}
@@ -37,31 +37,34 @@ const Text_1 = __importStar(require("../../generic/Text"));
37
37
  const DIProvider_1 = require("../../../providers/DIProvider");
38
38
  exports.STEP_ROOM_BEST_RATE_ALERT = 'StepRoomBestRateAlert';
39
39
  function OriginalBestRateAlert() {
40
+ const overrides = (0, react_1.useContext)(contexts_1.HotelOverridesContext);
40
41
  const basketContext = (0, react_1.useContext)(contexts_1.BasketContext);
41
42
  const ccx = (0, react_1.useContext)(contexts_1.CompanyContext);
42
43
  const { t } = (0, react_i18next_1.useTranslation)();
43
44
  const isEditingRow = !!(basketContext.selectedBasketRow && basketContext.selectedBasketRow.isValid());
44
45
  const hyphen = t(Translation_1.Translation.Misc.Alerts.BestRatePerks) !== '' ? ' - ' : '';
45
46
  const alertText = (0, react_1.useMemo)(() => {
46
- const preSignUp = t(Translation_1.Translation.Misc.Alerts.PreSignUp);
47
- if (preSignUp) {
47
+ var _a, _b, _c, _d;
48
+ const preSignUp = ((_a = overrides.messages) === null || _a === void 0 ? void 0 : _a.PreSignUp) || t(Translation_1.Translation.Misc.Alerts.PreSignUp);
49
+ if (preSignUp && !ccx.signedInUser) {
48
50
  return preSignUp;
49
51
  }
50
52
  if (ccx.signedInUser) {
51
- const postSignUp = t(Translation_1.Translation.Misc.Alerts.PostSignUp, {
52
- name: [ccx.signedInUser.firstName, ccx.signedInUser.lastName].join(' '),
53
- firstName: ccx.signedInUser.firstName,
54
- lastName: ccx.signedInUser.lastName,
55
- email: ccx.signedInUser.email,
56
- });
53
+ const postSignUp = ((_b = overrides.messages) === null || _b === void 0 ? void 0 : _b.PostSignUp) ||
54
+ t(Translation_1.Translation.Misc.Alerts.PostSignUp, {
55
+ name: [ccx.signedInUser.firstName, ccx.signedInUser.lastName].join(' '),
56
+ firstName: ccx.signedInUser.firstName,
57
+ lastName: ccx.signedInUser.lastName,
58
+ email: ccx.signedInUser.email,
59
+ });
57
60
  if (postSignUp) {
58
61
  return postSignUp;
59
62
  }
60
63
  }
61
64
  return (react_1.default.createElement(react_1.default.Fragment, null,
62
- react_1.default.createElement("strong", null, t(Translation_1.Translation.Misc.Alerts.BestRatePerks)),
65
+ react_1.default.createElement("strong", null, ((_c = overrides.messages) === null || _c === void 0 ? void 0 : _c.BestRatePerks) || t(Translation_1.Translation.Misc.Alerts.BestRatePerks)),
63
66
  hyphen,
64
- t(Translation_1.Translation.Misc.Alerts.BestRatePerksAlert)));
67
+ ((_d = overrides.messages) === null || _d === void 0 ? void 0 : _d.BestRatePerksAlert) || t(Translation_1.Translation.Misc.Alerts.BestRatePerksAlert)));
65
68
  }, [ccx]);
66
69
  return (react_1.default.createElement(Alert_1.default, { icon: Icon_1.IconType.Money, noMargin: !isEditingRow },
67
70
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, alertText)));
@@ -1 +1 @@
1
- {"version":3,"file":"StepRoomBestRateAlert.js","sourceRoot":"/","sources":["src/components/steps/room/StepRoomBestRateAlert.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmE;AACnE,+CAAmD;AACnD,iDAA+C;AAC/C,0DAAuD;AAEvD,uEAA+C;AAC/C,yDAA0D;AAC1D,kEAA2D;AAC3D,uDAAgD;AAEnC,QAAA,yBAAyB,GAAG,uBAAuB,CAAC;AAEjE,SAAS,qBAAqB;IAC1B,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAC,yBAAc,CAAC,CAAC;IACvC,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,iBAAiB,IAAI,aAAa,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC;IACtG,MAAM,MAAM,GAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5E,MAAM,SAAS,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAC3B,MAAM,SAAS,GAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,SAAS,EAAE;YACX,OAAO,SAAS,CAAC;SACpB;QAED,IAAI,GAAG,CAAC,YAAY,EAAE;YAClB,MAAM,UAAU,GAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;gBACrD,IAAI,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;gBACvE,SAAS,EAAE,GAAG,CAAC,YAAY,CAAC,SAAS;gBACrC,QAAQ,EAAE,GAAG,CAAC,YAAY,CAAC,QAAQ;gBACnC,KAAK,EAAE,GAAG,CAAC,YAAY,CAAC,KAAK;aAChC,CAAC,CAAC;YAEH,IAAI,UAAU,EAAE;gBACZ,OAAO,UAAU,CAAC;aACrB;SACJ;QAED,OAAO,CACH;YACI,8CAAS,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAU;YAC1D,MAAM;YACN,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAC/C,CACN,CAAC;IACN,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,OAAO,CACH,8BAAC,eAAK,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,YAAY;QAChD,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,SAAS,CAAQ,CAC1C,CACX,CAAC;AACN,CAAC;AAED,SAAwB,qBAAqB;IACzC,OAAO,IAAA,mBAAM,EAAC,iCAAyB,EAAE,qBAAqB,EAAE,IAAI,CAAC,CAAC;AAC1E,CAAC;AAFD,wCAEC","sourcesContent":["import { BasketContext, CompanyContext } from '@frontend/contexts';\nimport React, { useContext, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport Alert from '@/components/generic/Alert';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { withDI } from '@/providers/DIProvider';\n\nexport const STEP_ROOM_BEST_RATE_ALERT = 'StepRoomBestRateAlert';\n\nfunction OriginalBestRateAlert() {\n const basketContext = useContext(BasketContext);\n const ccx = useContext(CompanyContext);\n const { t } = useTranslation();\n const isEditingRow = !!(basketContext.selectedBasketRow && basketContext.selectedBasketRow.isValid());\n const hyphen = t(Translation.Misc.Alerts.BestRatePerks) !== '' ? ' - ' : '';\n\n const alertText = useMemo(() => {\n const preSignUp = t(Translation.Misc.Alerts.PreSignUp);\n if (preSignUp) {\n return preSignUp;\n }\n\n if (ccx.signedInUser) {\n const postSignUp = t(Translation.Misc.Alerts.PostSignUp, {\n name: [ccx.signedInUser.firstName, ccx.signedInUser.lastName].join(' '),\n firstName: ccx.signedInUser.firstName,\n lastName: ccx.signedInUser.lastName,\n email: ccx.signedInUser.email,\n });\n\n if (postSignUp) {\n return postSignUp;\n }\n }\n\n return (\n <>\n <strong>{t(Translation.Misc.Alerts.BestRatePerks)}</strong>\n {hyphen}\n {t(Translation.Misc.Alerts.BestRatePerksAlert)}\n </>\n );\n }, [ccx]);\n\n return (\n <Alert icon={IconType.Money} noMargin={!isEditingRow}>\n <Text type={TextType.Small}>{alertText}</Text>\n </Alert>\n );\n}\n\nexport default function StepRoomBestRateAlert() {\n return withDI(STEP_ROOM_BEST_RATE_ALERT, OriginalBestRateAlert, null);\n}\n"]}
1
+ {"version":3,"file":"StepRoomBestRateAlert.js","sourceRoot":"/","sources":["src/components/steps/room/StepRoomBestRateAlert.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA0F;AAC1F,+CAAmD;AACnD,iDAA+C;AAC/C,0DAAuD;AAEvD,uEAA+C;AAC/C,yDAA0D;AAC1D,kEAA2D;AAC3D,uDAAgD;AAEnC,QAAA,yBAAyB,GAAG,uBAAuB,CAAC;AAEjE,SAAS,qBAAqB;IAC1B,MAAM,SAAS,GAAG,IAAA,kBAAU,EAAC,gCAAqB,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAC,yBAAc,CAAC,CAAC;IACvC,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,iBAAiB,IAAI,aAAa,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC;IACtG,MAAM,MAAM,GAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5E,MAAM,SAAS,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;;QAC3B,MAAM,SAAS,GAAG,CAAA,MAAA,SAAS,CAAC,QAAQ,0CAAE,SAAS,KAAI,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACxF,IAAI,SAAS,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YAChC,OAAO,SAAS,CAAC;SACpB;QAED,IAAI,GAAG,CAAC,YAAY,EAAE;YAClB,MAAM,UAAU,GACZ,CAAA,MAAA,SAAS,CAAC,QAAQ,0CAAE,UAAU;gBAC9B,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;oBAClC,IAAI,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;oBACvE,SAAS,EAAE,GAAG,CAAC,YAAY,CAAC,SAAS;oBACrC,QAAQ,EAAE,GAAG,CAAC,YAAY,CAAC,QAAQ;oBACnC,KAAK,EAAE,GAAG,CAAC,YAAY,CAAC,KAAK;iBAChC,CAAC,CAAC;YAEP,IAAI,UAAU,EAAE;gBACZ,OAAO,UAAU,CAAC;aACrB;SACJ;QAED,OAAO,CACH;YACI,8CAAS,CAAA,MAAA,SAAS,CAAC,QAAQ,0CAAE,aAAa,KAAI,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAU;YAC/F,MAAM;YACN,CAAA,MAAA,SAAS,CAAC,QAAQ,0CAAE,kBAAkB,KAAI,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CACzF,CACN,CAAC;IACN,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,OAAO,CACH,8BAAC,eAAK,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,YAAY;QAChD,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,SAAS,CAAQ,CAC1C,CACX,CAAC;AACN,CAAC;AAED,SAAwB,qBAAqB;IACzC,OAAO,IAAA,mBAAM,EAAC,iCAAyB,EAAE,qBAAqB,EAAE,IAAI,CAAC,CAAC;AAC1E,CAAC;AAFD,wCAEC","sourcesContent":["import { BasketContext, CompanyContext, HotelOverridesContext } from '@frontend/contexts';\nimport React, { useContext, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport Alert from '@/components/generic/Alert';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { withDI } from '@/providers/DIProvider';\n\nexport const STEP_ROOM_BEST_RATE_ALERT = 'StepRoomBestRateAlert';\n\nfunction OriginalBestRateAlert() {\n const overrides = useContext(HotelOverridesContext);\n const basketContext = useContext(BasketContext);\n const ccx = useContext(CompanyContext);\n const { t } = useTranslation();\n const isEditingRow = !!(basketContext.selectedBasketRow && basketContext.selectedBasketRow.isValid());\n const hyphen = t(Translation.Misc.Alerts.BestRatePerks) !== '' ? ' - ' : '';\n\n const alertText = useMemo(() => {\n const preSignUp = overrides.messages?.PreSignUp || t(Translation.Misc.Alerts.PreSignUp);\n if (preSignUp && !ccx.signedInUser) {\n return preSignUp;\n }\n\n if (ccx.signedInUser) {\n const postSignUp =\n overrides.messages?.PostSignUp ||\n t(Translation.Misc.Alerts.PostSignUp, {\n name: [ccx.signedInUser.firstName, ccx.signedInUser.lastName].join(' '),\n firstName: ccx.signedInUser.firstName,\n lastName: ccx.signedInUser.lastName,\n email: ccx.signedInUser.email,\n });\n\n if (postSignUp) {\n return postSignUp;\n }\n }\n\n return (\n <>\n <strong>{overrides.messages?.BestRatePerks || t(Translation.Misc.Alerts.BestRatePerks)}</strong>\n {hyphen}\n {overrides.messages?.BestRatePerksAlert || t(Translation.Misc.Alerts.BestRatePerksAlert)}\n </>\n );\n }, [ccx]);\n\n return (\n <Alert icon={IconType.Money} noMargin={!isEditingRow}>\n <Text type={TextType.Small}>{alertText}</Text>\n </Alert>\n );\n}\n\nexport default function StepRoomBestRateAlert() {\n return withDI(STEP_ROOM_BEST_RATE_ALERT, OriginalBestRateAlert, null);\n}\n"]}
@@ -71,7 +71,11 @@ const TabGroupedRoomList = (props) => {
71
71
  const options = [{ label: 'All', value: null }, ...filter.options];
72
72
  const currentValue = (_b = appliedFilters === null || appliedFilters === void 0 ? void 0 : appliedFilters[filterKey]) !== null && _b !== void 0 ? _b : (_c = options[0]) === null || _c === void 0 ? void 0 : _c.value;
73
73
  const localOnFilterChange = (value) => {
74
- setAppliedFilters((prev) => (Object.assign(Object.assign({}, prev), { [filterKey]: value })));
74
+ setAppliedFilters((prev) => {
75
+ const filter = Object.assign(Object.assign({}, prev), { [filterKey]: value });
76
+ beContext.setCurrentGroupedRoomFilters(filter);
77
+ return filter;
78
+ });
75
79
  };
76
80
  return (react_1.default.createElement("div", { key: filterKey, className: TabGroupedRoomList_module_scss_1.default.filterItem },
77
81
  react_1.default.createElement("div", { className: TabGroupedRoomList_module_scss_1.default['filterItem-label'] },
@@ -1 +1 @@
1
- {"version":3,"file":"TabGroupedRoomList.js","sourceRoot":"/","sources":["src/components/steps/room/TabGroupedRooms/TabGroupedRoomList.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BookingEngineContext } from '@frontend/contexts';\nimport React, { useContext, useMemo, useState } from 'react';\n\nimport Headline from '@/components/generic/Headline';\nimport { Select } from '@/components/generic/Select/Select';\nimport { HotelRoomGroupsDTO } from '@/models/Api/HotelDTO';\nimport { Room } from '@/models/Room/Room';\nimport RoomSortProvider from '@/providers/RoomSortProvider';\n\nimport RoomDetails from '../roomDetails/RoomDetails';\nimport styles from './TabGroupedRoomList.module.scss';\n\ntype TabGroupedRoomListProps = {\n rooms: Room[];\n group: HotelRoomGroupsDTO[number];\n};\n\nexport const TabGroupedRoomList = (props: TabGroupedRoomListProps) => {\n const beContext = useContext(BookingEngineContext);\n const sortBy = beContext.currentRoomSort;\n const { rooms, group } = props;\n const [appliedFilters, setAppliedFilters] = useState<{ [id: string]: any }>({});\n\n const filterKeys = useMemo(() => {\n return Object.keys(group.filters || {});\n }, [group.filters]);\n\n const roomList = useMemo(() => {\n const sortedRooms = [...rooms];\n if (sortedRooms.length !== 0) {\n sortedRooms.sort(RoomSortProvider.getSortByFunction(sortBy));\n }\n return sortedRooms\n .filter((room) => {\n for (const filter of Object.keys(appliedFilters)) {\n if (room.auxiliaryValues?.[filter] && appliedFilters[filter] && !room.auxiliaryValues[filter].includes(`${appliedFilters[filter]}`)) {\n return false;\n }\n }\n\n return room;\n })\n .map((room, index) => {\n return <RoomDetails key={room.code} room={room} disableMarginBottom={index === rooms.length - 1} />;\n });\n }, [rooms, appliedFilters, sortBy]);\n\n return (\n <div className={styles.groupedRoomList}>\n {!!group.groupName && (\n <div className={styles.groupedRoomListHeader}>\n <Headline bold>{group.groupName}</Headline>\n </div>\n )}\n\n {!!filterKeys?.length && rooms.length > 1 && (\n <div className={styles.filterContainer}>\n {filterKeys.map((filterKey) => {\n const filter = group.filters?.[filterKey];\n\n if (filter.type === 'select') {\n const options = [{ label: 'All', value: null }, ...filter.options];\n const currentValue = appliedFilters?.[filterKey] ?? options[0]?.value;\n\n const localOnFilterChange = (value: string) => {\n setAppliedFilters((prev) => ({ ...prev, [filterKey]: value }));\n };\n\n return (\n <div key={filterKey} className={styles.filterItem}>\n <div className={styles['filterItem-label']}>{filter.name}:</div>\n <Select keyName=\"value\" labelName=\"label\" options={options as any} value={currentValue} onChange={localOnFilterChange}></Select>\n </div>\n );\n }\n })}\n </div>\n )}\n {roomList}\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"TabGroupedRoomList.js","sourceRoot":"/","sources":["src/components/steps/room/TabGroupedRooms/TabGroupedRoomList.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BookingEngineContext } from '@frontend/contexts';\nimport React, { useContext, useMemo, useState } from 'react';\n\nimport Headline from '@/components/generic/Headline';\nimport { Select } from '@/components/generic/Select/Select';\nimport { HotelRoomGroupsDTO } from '@/models/Api/HotelDTO';\nimport { Room } from '@/models/Room/Room';\nimport RoomSortProvider from '@/providers/RoomSortProvider';\n\nimport RoomDetails from '../roomDetails/RoomDetails';\nimport styles from './TabGroupedRoomList.module.scss';\n\ntype TabGroupedRoomListProps = {\n rooms: Room[];\n group: HotelRoomGroupsDTO[number];\n};\n\nexport const TabGroupedRoomList = (props: TabGroupedRoomListProps) => {\n const beContext = useContext(BookingEngineContext);\n\n const sortBy = beContext.currentRoomSort;\n const { rooms, group } = props;\n const [appliedFilters, setAppliedFilters] = useState<{ [id: string]: any }>({});\n\n const filterKeys = useMemo(() => {\n return Object.keys(group.filters || {});\n }, [group.filters]);\n\n const roomList = useMemo(() => {\n const sortedRooms = [...rooms];\n if (sortedRooms.length !== 0) {\n sortedRooms.sort(RoomSortProvider.getSortByFunction(sortBy));\n }\n return sortedRooms\n .filter((room) => {\n for (const filter of Object.keys(appliedFilters)) {\n if (room.auxiliaryValues?.[filter] && appliedFilters[filter] && !room.auxiliaryValues[filter].includes(`${appliedFilters[filter]}`)) {\n return false;\n }\n }\n\n return room;\n })\n .map((room, index) => {\n return <RoomDetails key={room.code} room={room} disableMarginBottom={index === rooms.length - 1} />;\n });\n }, [rooms, appliedFilters, sortBy]);\n\n return (\n <div className={styles.groupedRoomList}>\n {!!group.groupName && (\n <div className={styles.groupedRoomListHeader}>\n <Headline bold>{group.groupName}</Headline>\n </div>\n )}\n\n {!!filterKeys?.length && rooms.length > 1 && (\n <div className={styles.filterContainer}>\n {filterKeys.map((filterKey) => {\n const filter = group.filters?.[filterKey];\n\n if (filter.type === 'select') {\n const options = [{ label: 'All', value: null }, ...filter.options];\n const currentValue = appliedFilters?.[filterKey] ?? (options[0] as any)?.value;\n\n const localOnFilterChange = (value: string) => {\n setAppliedFilters((prev) => {\n const filter = { ...prev, [filterKey]: value };\n\n beContext.setCurrentGroupedRoomFilters(filter);\n\n return filter;\n });\n };\n\n return (\n <div key={filterKey} className={styles.filterItem}>\n <div className={styles['filterItem-label']}>{filter.name}:</div>\n <Select keyName=\"value\" labelName=\"label\" options={options as any} value={currentValue} onChange={localOnFilterChange}></Select>\n </div>\n );\n }\n })}\n </div>\n )}\n {roomList}\n </div>\n );\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RoomFilterRoomType.js","sourceRoot":"/","sources":["src/components/steps/room/roomFilter/RoomFilterRoomType.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Checkbox from '@/components/generic/Checkbox/Checkbox';\nimport SmallSpinner from '@/components/generic/loader/SmallSpinner';\nimport Text, { TextType } from '@/components/generic/Text';\nimport RoomTypeFilter from '@/models/Room/Filters/RoomTypeFilter';\nimport { Room } from '@/models/Room/Room';\n\ninterface RoomFilterRoomTypeProps {\n roomList: Room[];\n filter: RoomTypeFilter;\n onChange: (filter: RoomTypeFilter | null) => void;\n}\n\ninterface RoomFilterRoomTypeStatus {\n [name: string]: {\n status: boolean;\n };\n}\n\nexport default function RoomFilterRoomType(props: RoomFilterRoomTypeProps) {\n const { t } = useTranslation();\n\n const [selectedRooms, setSelectedRooms] = useState<{ [name: string]: { status: boolean } }>({});\n const [resetCounter, setResetCounter] = useState(0);\n const obj = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (props.roomList) {\n const roomTypes: RoomFilterRoomTypeStatus = {};\n const visibleRoomsFilter = props.filter ? props.filter.getVisibleRooms() : null;\n\n props.roomList.forEach((room) => {\n roomTypes[room.name as string] = {\n status: visibleRoomsFilter ? visibleRoomsFilter.includes(room.name as string) || visibleRoomsFilter.includes(room.code as string) : true,\n };\n });\n\n setSelectedRooms(roomTypes);\n }\n }, [props.roomList, resetCounter]);\n\n const allRooms = Object.keys(selectedRooms);\n const rooms = allRooms.filter((name) => selectedRooms[name].status);\n useEffect(() => {\n if (!obj?.current || !props.roomList?.length) return;\n if (rooms.length === allRooms.length) {\n props.onChange(null);\n } else {\n props.onChange(new RoomTypeFilter(rooms));\n }\n }, [selectedRooms]);\n const clearOnClickHandler = () => {\n props.onChange(null);\n setResetCounter((old) => old + 1);\n };\n return (\n <>\n <div className=\"u-flex u-marg-bottom u-marg-top--heavy\" ref={obj}>\n <Text inline type={TextType.Small}>\n <strong>{t(Translation.Step.Room.Filter.RoomType)}</strong>\n </Text>\n <BEButton size=\"tiny\" isText disabled={!props.filter} onClick={clearOnClickHandler}>\n {t(Translation.Misc.Clear)}\n </BEButton>\n </div>\n <div>\n {props.roomList?.length > 0 ? (\n selectedRooms &&\n Object.keys(selectedRooms).map((selectedRoomKey) => {\n const onChangeCheckboxHandler = (value: React.ChangeEvent<HTMLInputElement>) => {\n const oldRooms = { ...selectedRooms };\n oldRooms[selectedRoomKey].status = value.target.checked;\n setSelectedRooms(oldRooms);\n };\n return (\n <div className=\"u-marg-bottom--light\" key={selectedRoomKey}>\n <Checkbox label={selectedRoomKey} checked={selectedRooms[selectedRoomKey].status} onChange={onChangeCheckboxHandler} />\n </div>\n );\n })\n ) : (\n <div className=\"u-marg-top-bottom u-flex justify-content-center\">\n <SmallSpinner />\n </div>\n )}\n </div>\n </>\n );\n}\n"]}
1
+ {"version":3,"file":"RoomFilterRoomType.js","sourceRoot":"/","sources":["src/components/steps/room/roomFilter/RoomFilterRoomType.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Checkbox from '@/components/generic/Checkbox/Checkbox';\nimport SmallSpinner from '@/components/generic/loader/SmallSpinner';\nimport Text, { TextType } from '@/components/generic/Text';\nimport RoomTypeFilter from '@/models/Room/Filters/RoomTypeFilter';\nimport { Room } from '@/models/Room/Room';\n\ninterface RoomFilterRoomTypeProps {\n roomList: Room[];\n filter: RoomTypeFilter;\n onChange: (filter: RoomTypeFilter | null) => void;\n}\n\ninterface RoomFilterRoomTypeStatus {\n [name: string]: {\n status: boolean;\n };\n}\n\nexport default function RoomFilterRoomType(props: RoomFilterRoomTypeProps) {\n const { t } = useTranslation();\n const [selectedRooms, setSelectedRooms] = useState<{ [name: string]: { status: boolean } }>({});\n const [resetCounter, setResetCounter] = useState(0);\n const obj = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (props.roomList) {\n const roomTypes: RoomFilterRoomTypeStatus = {};\n const visibleRoomsFilter = props.filter ? props.filter.getVisibleRooms() : null;\n\n props.roomList.forEach((room) => {\n roomTypes[room.name as string] = {\n status: visibleRoomsFilter ? visibleRoomsFilter.includes(room.name as string) || visibleRoomsFilter.includes(room.code as string) : true,\n };\n });\n\n setSelectedRooms(roomTypes);\n }\n }, [props.roomList, resetCounter]);\n\n const allRooms = Object.keys(selectedRooms);\n const rooms = allRooms.filter((name) => selectedRooms[name].status);\n useEffect(() => {\n if (!obj?.current || !props.roomList?.length) return;\n if (rooms.length === allRooms.length) {\n props.onChange(null);\n } else {\n props.onChange(new RoomTypeFilter(rooms));\n }\n }, [selectedRooms]);\n const clearOnClickHandler = () => {\n props.onChange(null);\n setResetCounter((old) => old + 1);\n };\n return (\n <>\n <div className=\"u-flex u-marg-bottom u-marg-top--heavy\" ref={obj}>\n <Text inline type={TextType.Small}>\n <strong>{t(Translation.Step.Room.Filter.RoomType)}</strong>\n </Text>\n <BEButton size=\"tiny\" isText disabled={!props.filter} onClick={clearOnClickHandler}>\n {t(Translation.Misc.Clear)}\n </BEButton>\n </div>\n <div>\n {props.roomList?.length > 0 ? (\n selectedRooms &&\n Object.keys(selectedRooms).map((selectedRoomKey) => {\n const onChangeCheckboxHandler = (value: React.ChangeEvent<HTMLInputElement>) => {\n const oldRooms = { ...selectedRooms };\n oldRooms[selectedRoomKey].status = value.target.checked;\n setSelectedRooms(oldRooms);\n };\n return (\n <div className=\"u-marg-bottom--light\" key={selectedRoomKey}>\n <Checkbox label={selectedRoomKey} checked={selectedRooms[selectedRoomKey].status} onChange={onChangeCheckboxHandler} />\n </div>\n );\n })\n ) : (\n <div className=\"u-marg-top-bottom u-flex justify-content-center\">\n <SmallSpinner />\n </div>\n )}\n </div>\n </>\n );\n}\n"]}
@@ -54,7 +54,7 @@ const Translation_1 = require("translations/Translation");
54
54
  const BookingAPI_1 = __importDefault(require("../../api/BookingAPI"));
55
55
  const Icon_1 = require("../../components/generic/Icon/Icon");
56
56
  const Text_1 = __importDefault(require("../../components/generic/Text"));
57
- const MemberSignInModal_1 = require("../../components/steps/room/MemberSignInModal/MemberSignInModal");
57
+ const MemberSignInModal_1 = require("../../components/members/SignInModal/MemberSignInModal");
58
58
  const PromoCodeVerificationAlert_1 = require("../../components/steps/room/UserSearchSummary/PromoCodeVerificationAlert");
59
59
  const useExternalMember_1 = require("../../hooks/useExternalMember");
60
60
  const Addon_1 = require("../../models/Addon/Addon");
@@ -327,6 +327,8 @@ function BasketContextWrapper(props) {
327
327
  basketRow.setRate(rate); // TODO: Fix quick hack to make the Addons load
328
328
  addons = yield BookingAPI_1.default.Addons.findAddons([basketRow], hotel === null || hotel === void 0 ? void 0 : hotel.hotelID);
329
329
  }
330
+ basketRow.setAuxiliaryFilter(beContext.currentGroupedRoomFilters);
331
+ beContext.setCurrentGroupedRoomFilters({});
330
332
  basketRowReducer({ method: 'AddRate', rate, row: basketRow });
331
333
  try {
332
334
  DataLayer_1.default.instance.sendRoomRateAddToCart(rate, basketRow.getNumberOfDays(), startDate !== null && startDate !== void 0 ? startDate : basketRow.getStartDate(), endDate !== null && endDate !== void 0 ? endDate : basketRow.getEndDate());
@@ -1 +1 @@
1
- {"version":3,"file":"BasketContextWrapper.js","sourceRoot":"/","sources":["src/contexts/BasketContext/BasketContextWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BasketContextType, BookingEngineContext, CompanyContext, ErrorHandler, HotelOverridesContext, NotificationContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { API_DATE_FORMAT } from 'api/BaseAPI';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { BasketContextErrorHandler } from 'handlers/BasketContextErrorHandler';\nimport { useHistoryConsistentPush } from 'hooks/HistoryConsistentPush';\nimport { useUpdateQueryParameters } from 'hooks/UpdateQueryParameters';\nimport { EAppQueryParameters } from 'models/AppQueryParameters';\nimport React, { useCallback, useContext, useEffect, useReducer, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\nimport { BasketReducer } from 'reducers/BasketReducer';\nimport { defer, Observable, throwError, timer } from 'rxjs';\nimport { finalize, mergeMap, retryWhen } from 'rxjs/operators';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport Text from '@/components/generic/Text';\nimport { MemberSignInModal } from '@/components/steps/room/MemberSignInModal/MemberSignInModal';\nimport { PromoCodeVerificationAlert } from '@/components/steps/room/UserSearchSummary/PromoCodeVerificationAlert';\nimport { useExternalMember } from '@/hooks/useExternalMember';\nimport { Addon, AddonPricingType } from '@/models/Addon/Addon';\nimport ReservationsDTO from '@/models/Api/ReservationsDTO';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport BasketRow from '@/models/BasketRow';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport { RoomstaySession } from '@/models/RoomstaySession';\nimport StepAddon from '@/pages/steps/StepAddon/StepAddon';\nimport StepThanks from '@/pages/steps/StepThanks/StepThanks';\nimport InlineAddonStepFeature from '@/providers/feature/InlineAddonStepFeature';\nimport { usePromotionContainer } from '@/providers/PromotionProvider';\nimport DataLayer from '@/util/DataLayer';\nimport { debounce } from '@/util/Debounce';\nimport getStepRoom from '@/util/GetStepRoom';\nimport StepManager from '@/util/StepManager';\nimport StringHelper from '@/util/StringHelper';\nexport interface BasketContextWrapperProps {\n children: React.ReactNode;\n}\n\nexport function BasketContextWrapper(props: BasketContextWrapperProps) {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const updateQueryParams = useUpdateQueryParameters();\n const history = useHistory();\n const historyConsistentPush = useHistoryConsistentPush();\n const { isExternalMemberHotel, memberNumber } = useExternalMember();\n\n const notifications = useContext(NotificationContext);\n const beContext = useContext(BookingEngineContext);\n\n const { showPromoCodeAlert } = useContext(HotelOverridesContext);\n\n const initialSession = beContext?.engine?.getInitialSession();\n\n const [currentBasketRows, basketRowReducer] = useReducer(BasketReducer, initialSession?.basketRows ?? []);\n\n const [selectedBasketRow, setSelectedBasketRow] = useState<BasketRow | null>(null);\n const [basketAddonRows, setBasketAddonRows] = useState<BasketAddonRow[]>([]);\n const [isLoadingPriceQuote, setIsLoadingPriceQuote] = useState(false);\n\n let loadedStartDate: dayjs.Dayjs | null = null;\n let loadedEndDate: dayjs.Dayjs | null = null;\n\n if (initialSession?.basketRows?.length) {\n loadedStartDate = initialSession.basketRows[0].getStartDate();\n loadedEndDate = initialSession.basketRows[0].getEndDate();\n } else {\n if (initialSession?.startDate) {\n loadedStartDate = initialSession.startDate;\n }\n\n if (initialSession?.endDate) {\n loadedEndDate = initialSession.endDate;\n }\n }\n\n const [startDate, setStartDate] = useState<dayjs.Dayjs | null>(loadedStartDate ?? null);\n const [endDate, setEndDate] = useState<dayjs.Dayjs | null>(loadedEndDate ?? null);\n\n const [hasCheckedOut, setHasCheckedOut] = useState(false);\n const [reservationData, setReservationData] = useState<ReservationsDTO | null>(initialSession?.reservation || null);\n\n const [knownErrorPromoCodes, setKnownErrorPromoCodes] = useState<string[]>([]);\n\n BasketContextErrorHandler.handleAvailabilityWarnings = (warnings: string[]) => {\n warnings.map((warning) => {\n if (warning.toLowerCase().startsWith('invalid promo code')) {\n const promoCode = warning.substr(20);\n\n currentBasketRows.forEach((row) => {\n if (promoCode.toLowerCase() === row.getPromoCode().toLowerCase()) {\n row.setPromoCodeStatus('invalid');\n workingContext.updateBasketRow(row, false);\n }\n });\n\n if (!knownErrorPromoCodes.includes(promoCode.toUpperCase())) {\n setKnownErrorPromoCodes((oldCodes) => {\n return [...oldCodes, promoCode.toUpperCase()];\n });\n }\n } else {\n ErrorHandler.add({\n message: warning,\n });\n }\n });\n };\n\n BasketContextErrorHandler.handlePromoSuccess = (promo: string) => {\n currentBasketRows.forEach((row) => {\n if (row.getPromoCode() === promo && row.getPromoCode() && row.getPromoCodeStatus() !== 'valid') {\n row.setPromoCodeStatus('valid');\n workingContext.updateBasketRow(row, false);\n }\n });\n };\n\n const debounceUseEffect = useCallback(\n debounce(() => {\n if (!startDate || !endDate) {\n return;\n }\n\n DataLayer.instance.sendDateSelection({\n startDate,\n endDate,\n adult: selectedBasketRow?.getAdults(),\n children: selectedBasketRow?.getChildren(),\n infant: selectedBasketRow?.getInfants(),\n });\n\n beContext.sessionProvider?.updateSession({\n startDate,\n endDate,\n });\n\n // TODO re-visit this as we don't want to set dates for everything constantly\n workingContext.getAllDatelessRows().forEach((row: BasketRow) => {\n row.setStartDate(startDate);\n row.setEndDate(endDate);\n\n workingContext.updateBasketRow(row);\n });\n\n //When trying to call row.discardGuestsState() in somewhere, we got conflicted here with BasketRow.setStartDate& BasketRow.setEndDate, it set back to previous startDate/endDate\n //Use debounceUseEffect to fix it\n if (selectedBasketRow) {\n selectedBasketRow.setStartDate(startDate);\n selectedBasketRow.setEndDate(endDate);\n\n workingContext.updateBasketRow(selectedBasketRow, false);\n } else if (currentBasketRows.length === 1) {\n const onlyBasketRow = currentBasketRows[0];\n onlyBasketRow.setStartDate(startDate);\n onlyBasketRow.setEndDate(endDate);\n\n workingContext.updateBasketRow(onlyBasketRow, false);\n }\n }, 500),\n [startDate, endDate]\n );\n\n useEffect(() => {\n debounceUseEffect();\n }, [debounceUseEffect]);\n\n useEffect(() => {\n beContext.sessionProvider?.updateSession({ basketRows: currentBasketRows });\n }, [currentBasketRows, selectedBasketRow]);\n\n const checkAndApplyMemberOnlyPromo = (row: BasketRow) => {\n if (row && hotel?.memberOnlyPromoCode && initialSession?.user && !row.getPromoCode()) {\n row.setPromoCode(hotel.memberOnlyPromoCode);\n workingContext.updateBasketRow(row);\n }\n };\n\n /**\n * This is necessary as when we're adding our first row, hotel might not be set.\n */\n useEffect(() => {\n checkAndApplyMemberOnlyPromo(selectedBasketRow as BasketRow);\n }, [hotel]);\n\n const returnAggregationAndTranslation = (reduction: ((row: BasketRow) => number) | number, translation?: string) => {\n const count = typeof reduction === 'number' ? reduction : currentBasketRows.reduce((total, row) => total + reduction(row), 0);\n\n if (translation) {\n return StringHelper.pluralWithDictAndCount(count, translation, t);\n } else {\n return count;\n }\n };\n\n const getNextAvailableBasketRow = (exclude?: BasketRow): BasketRow | null => {\n const arrayLength = currentBasketRows.length;\n for (let i = 0; i < arrayLength; i++) {\n if ((!exclude || (exclude && exclude.getID() !== currentBasketRows[i].getID())) && !currentBasketRows[i].getRate()) {\n return currentBasketRows[i];\n }\n }\n\n return null;\n };\n\n const updateQueryParameters = (row: BasketRow | null) => {\n if (!row) return;\n const queryParameters: Record<string, string> = {};\n if (row.getEndDate()) {\n let startDate = selectedBasketRow?.getStartDate();\n if (!startDate) {\n startDate = row.getStartDate();\n }\n queryParameters[EAppQueryParameters.Arrive] = startDate.format(API_DATE_FORMAT);\n queryParameters[EAppQueryParameters.Depart] = row.getEndDate().format(API_DATE_FORMAT);\n }\n if (row.getPromoCode()) queryParameters[EAppQueryParameters.PromoCode] = row.getPromoCode();\n if (row.getChildren() !== undefined) queryParameters[EAppQueryParameters.Children] = row.getChildren().toString();\n if (row.getAdults() !== undefined) queryParameters[EAppQueryParameters.Adults] = row.getAdults().toString();\n updateQueryParams(queryParameters);\n };\n\n const updateBasketRow = (row: BasketRow, updateGlobalDates = true) => {\n updateQueryParameters(row);\n if (updateGlobalDates && row.getID() === selectedBasketRow?.getID()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n }\n basketRowReducer({ method: 'Update', row });\n };\n\n const syncSelectedDateRange = (row?: BasketRow) => {\n if (!row) return;\n if ((!row.getStartDate() || !row.getEndDate()) && startDate && endDate) {\n row.setStartDate(startDate);\n row.setEndDate(endDate);\n } else if (!startDate && !endDate && row.getStartDate() && row.getEndDate()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n }\n };\n\n const { loadedPromotion } = usePromotionContainer({ selectedBasketRow: selectedBasketRow as BasketRow, updateBasketRow });\n\n const genericRetryStrategy =\n ({\n maxRetryAttempts = 3,\n scalingDuration = 0,\n }: {\n maxRetryAttempts?: number;\n scalingDuration?: number;\n } = {}) =>\n (attempts: Observable<any>) => {\n return attempts.pipe(\n mergeMap((error, i) => {\n const retryAttempt = i + 1;\n if (retryAttempt > maxRetryAttempts) {\n return throwError(error);\n }\n console.log(`Attempt ${retryAttempt}: retrying in ${scalingDuration}ms`);\n return timer(scalingDuration);\n }),\n finalize(() => console.log('We are done!'))\n );\n };\n\n const workingContext: BasketContextType = {\n startDate: startDate as Dayjs,\n endDate: endDate as Dayjs,\n\n selectedBasketRow: selectedBasketRow as BasketRow,\n currentBasketRows,\n basketAddonRows,\n\n hasCheckedOut,\n reservationData: reservationData as ReservationsDTO,\n isLoadingPriceQuote,\n\n loadedPromotion,\n\n /**\n * When adding a basket row, will check if there is a `selectedBasketRow`\n * if one is already set, row will simply get added, otherwise selectedBasketRow\n * gets set\n */\n addBasketRow: (row: BasketRow, selectThisRate = false, neverSelectThisRate = false) => {\n syncSelectedDateRange(row);\n\n checkAndApplyMemberOnlyPromo(row);\n\n if (\n (!selectedBasketRow && (!row.isValid() || !currentBasketRows.length || currentBasketRows.length - workingContext.getAllValidRows().length === 0)) ||\n selectThisRate\n ) {\n if (!neverSelectThisRate) {\n setSelectedBasketRow(row);\n }\n }\n\n basketRowReducer({ method: 'Add', row });\n },\n\n initBasketRows: (rows: BasketRow[]) => {\n const firstRow = rows[0];\n syncSelectedDateRange(firstRow);\n setSelectedBasketRow(firstRow);\n basketRowReducer({\n method: 'Init',\n rows: rows,\n });\n },\n\n //TODO: This function needs to be refactored to simplify a lot of this logic, and move notification raising to use the Event Manager instead\n addRate: async (rate: RoomRate, notify = true) => {\n let basketRow: BasketRow | null = null;\n let translationString: string;\n\n let addons = [];\n\n if (selectedBasketRow) {\n selectedBasketRow.setPreGuestsState();\n basketRow = selectedBasketRow;\n if (selectedBasketRow.getRate()) {\n translationString = Translation.Misc.RoomUpdatedNotification;\n } else {\n if (!selectedBasketRow.getStartDate() && selectedBasketRow.getEndDate()) {\n selectedBasketRow.setStartDate(startDate as Dayjs);\n selectedBasketRow.setEndDate(endDate as Dayjs);\n }\n\n translationString = Translation.Misc.RoomAddedNotification;\n }\n } else {\n if (!startDate || !endDate) {\n console.error('room selected with no date values.');\n return;\n }\n\n basketRow = new BasketRow(rate);\n\n basketRow.setStartDate(startDate);\n basketRow.setEndDate(endDate);\n\n translationString = Translation.Misc.RoomAddedNotification;\n }\n\n if (InlineAddonStepFeature.isActive()) {\n basketRow.setRate(rate); // TODO: Fix quick hack to make the Addons load\n addons = await API.Addons.findAddons([basketRow], hotel?.hotelID as string);\n }\n\n basketRowReducer({ method: 'AddRate', rate, row: basketRow });\n\n try {\n DataLayer.instance.sendRoomRateAddToCart(rate, basketRow.getNumberOfDays(), startDate ?? basketRow.getStartDate(), endDate ?? basketRow.getEndDate());\n } catch (ex) {\n console.log('Failed recording basket Add event');\n }\n\n if (notify) {\n notifications.addNotification({\n icon: IconType.Bed,\n children: (\n <Text inline>\n {t(translationString)} <strong className=\"u-marg-left--light\">{rate.getRoom().name}</strong>\n </Text>\n ),\n });\n }\n\n const nextAvailable = getNextAvailableBasketRow(basketRow);\n\n if (nextAvailable) {\n setSelectedBasketRow(nextAvailable);\n } else {\n setSelectedBasketRow(null);\n const isNextStepAddon = StepManager.getNextStepUrl(getStepRoom()) === StepAddon.getStepUrl();\n\n if (isNextStepAddon) {\n if (addons.length) {\n historyConsistentPush(StepAddon.getStepUrl());\n } else {\n historyConsistentPush(StepManager.getNextStepUrl(StepAddon));\n }\n } else {\n historyConsistentPush(StepManager.getNextStepUrl(getStepRoom()));\n }\n }\n },\n\n getBasketQuoteDetails: () => {\n const maxRetryAttempts = 5;\n\n if (!hotel || !hotel?.requireDeposit) {\n return false;\n }\n setIsLoadingPriceQuote(true);\n\n const getData = () =>\n defer(() => API.Reservation.getPriceQuote(hotel.hotelID, currentBasketRows, isExternalMemberHotel ? memberNumber : undefined)).pipe(\n retryWhen(\n genericRetryStrategy({\n maxRetryAttempts: maxRetryAttempts,\n })\n )\n );\n\n const retryableObservable = getData();\n\n retryableObservable.subscribe(\n (quote) => {\n if (quote === null) return;\n\n for (const quoteRow of quote.rows) {\n const basketRow = currentBasketRows.find((row) => row.getID() === quoteRow.rowId);\n\n if (!basketRow) {\n console.warn('API Returned unfamiliar row ID', quoteRow.rowId);\n continue;\n }\n\n basketRow.quoteDetails = quoteRow;\n updateBasketRow(basketRow);\n }\n },\n (error: any) => {\n console.log(error);\n console.log(`Error!: Retried ${maxRetryAttempts} times then quit!`);\n },\n () => {\n setIsLoadingPriceQuote(false);\n }\n );\n },\n /**\n * Filter global list of rooms based on their validity.\n *\n * Useful for getting a complete summary of all the rooms.\n */\n getAllValidRows: () => {\n return currentBasketRows.filter((item) => item.isValid());\n },\n\n getAllDatelessRows: () => {\n return currentBasketRows.filter((item) => !item.getStartDate() || !item.getEndDate());\n },\n\n getNumberOfAdults: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getAdults(), withTranslation ? Translation.Step.Date.Adult : undefined);\n },\n\n getNumberOfChildren: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getChildren(), withTranslation ? Translation.Step.Date.Child : undefined);\n },\n\n getNumberOfInfants: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getInfants(), withTranslation ? Translation.Step.Date.Infant : undefined);\n },\n\n getNumberOfRooms: (withTranslation = false) => {\n return returnAggregationAndTranslation(currentBasketRows.length, withTranslation ? Translation.Step.Date.Room : undefined);\n },\n\n getTotalPrice: (getOriginal = false) => {\n let totalPrice = 0;\n\n if (getOriginal || !hotel?.requireDeposit) {\n totalPrice = returnAggregationAndTranslation((row) => (row.isValid() ? (row.getRate()?.getTotalPrice() as number) : 0)) as number;\n totalPrice += workingContext.getTotalFees();\n } else {\n totalPrice = workingContext.getTotalDeposit() + workingContext.getTotalFees();\n }\n\n basketAddonRows.forEach((row) => {\n totalPrice += row.getTotalPrice();\n });\n return totalPrice;\n },\n getTotalDeposit: () => {\n const totalDeposit = returnAggregationAndTranslation((row) => (row.quoteDetails ? (row.quoteDetails?.totalDeposit as number) : 0)) as number;\n return totalDeposit;\n },\n getTotalFees: () => {\n const totalFees = returnAggregationAndTranslation((row) => (row.quoteDetails ? (row.quoteDetails?.totalFees as number) : 0)) as number;\n return totalFees;\n },\n getTotalPayNow: () => {\n let depositNoFee = 0;\n if (hotel?.requireDeposit) {\n depositNoFee = workingContext.getTotalDeposit();\n } else {\n depositNoFee = workingContext.getTotalPrice();\n }\n return depositNoFee + workingContext.getTotalFees();\n },\n getTotalPayLater: () => {\n return workingContext.getTotalPrice(true) - workingContext.getTotalPayNow();\n },\n\n /**\n * Pops the provided row from the current basket array\n */\n removeBasketRow: (row: BasketRow) => {\n const rowsBeforeRemoval = currentBasketRows.length;\n\n basketRowReducer({ method: 'Remove', row });\n\n if (selectedBasketRow && row.getID() === selectedBasketRow.getID()) {\n setSelectedBasketRow(getNextAvailableBasketRow(row));\n }\n\n if (rowsBeforeRemoval === 1) {\n workingContext.addBasketRow(new BasketRow(), true);\n }\n },\n\n clearBasketRows: (confirm: boolean) => {\n if (confirm) {\n basketRowReducer({ method: 'Clear' });\n }\n },\n\n updateBasketRow,\n\n /**\n * Select passed basket row, and update all inputs (like start date)\n */\n selectBasketRow: async (row: BasketRow | null) => {\n if (row && row.isValid()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n\n setSelectedBasketRow(row);\n } else {\n setSelectedBasketRow(getNextAvailableBasketRow());\n }\n },\n\n setStartDate,\n setEndDate,\n\n booked: async (data: ReservationsDTO, requestData: RoomstaySession['reservationRequest']) => {\n const updateObject: Partial<RoomstaySession> = { reservation: data };\n\n if (requestData) {\n updateObject.reservationRequest = requestData;\n }\n\n await beContext.sessionProvider?.updateSessionAsync(updateObject);\n setReservationData(data);\n },\n\n rollback: () => {\n beContext.sessionProvider?.updateSession({\n reservation: undefined,\n });\n setReservationData(null);\n },\n\n checkedOut: (data: ReservationsDTO) => {\n setHasCheckedOut(true);\n setReservationData(data);\n setSelectedBasketRow(null);\n basketRowReducer({ method: 'Clear' });\n\n const row = new BasketRow();\n row.setStartDate(dayjs().add(1, 'day'));\n row.setEndDate(dayjs().add(2, 'day'));\n\n basketRowReducer({ method: 'Add', row });\n setBasketAddonRows([]);\n\n const sessionProvider = beContext?.engine?.getSessionProvider();\n sessionProvider.deleteSession();\n sessionProvider?.initialize(undefined, beContext?.engine?.getSource());\n const params = new URLSearchParams(window.location.search);\n params.delete('planpay_checkout_id');\n window.history.replaceState({}, '', `${window.location.pathname}?${params}`);\n history.push(StepThanks.getStepUrl());\n },\n\n finish: () => {\n setReservationData(null);\n setHasCheckedOut(false);\n },\n\n clearSelectedRates: () => {\n setSelectedBasketRow(null);\n },\n\n getRowForAddon: (selectedAddon) => {\n if (selectedAddon === undefined) {\n return;\n }\n return basketAddonRows.find((r) => r.getAddon()?.code === selectedAddon?.code);\n },\n\n setAddonQuantities: (addon: Addon, quantities: { quantity: number; adult: number; child: number }, selectedDate: string, selectedTime: string) => {\n let addonRow = basketAddonRows.find((r) => r.getAddon()?.code === addon.code);\n if (addonRow === undefined) {\n addonRow = new BasketAddonRow(addon);\n basketAddonRows.push(addonRow);\n }\n\n addonRow.setQuantity(quantities.quantity ?? 0);\n addonRow.setAdultQuantity(quantities.adult ?? 0);\n addonRow.setChildQuantity(quantities.child ?? 0);\n addonRow.setSelectedDate(selectedDate);\n addonRow.setSelectedTime(addon.availability[selectedDate].selectorTimes ? selectedTime : undefined);\n\n // TODO: Quick hack to fix Synxis Basic Addon quantities.\n if (addon.pricingType === AddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT) {\n // TODO: Because all addons only apply to first room, we can select the 0th from the list.\n const basketRow = currentBasketRows?.[0];\n if (basketRow) {\n addonRow.setAdultQuantity(basketRow.getAdults());\n }\n }\n\n if (addon.pricingType === AddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT) {\n // TODO: Because all addons only apply to first room, we can select the 0th from the list.\n const basketRow = currentBasketRows?.[0];\n if (basketRow) {\n addonRow.setChildQuantity(basketRow.getChildren());\n }\n }\n\n setBasketAddonRows([...basketAddonRows]);\n },\n\n removeBasketAddonRow: (row: BasketAddonRow) => {\n setBasketAddonRows((oldRows) => oldRows.filter((item) => item.getID() !== row.getID()));\n },\n\n attemptSelectUnfilledRow: () => {\n const row = getNextAvailableBasketRow();\n\n if (row) {\n setSelectedBasketRow(row);\n return row;\n }\n },\n };\n\n return (\n <BasketContext.Provider value={workingContext}>\n {props.children}\n <MemberSignInModal />\n {showPromoCodeAlert && <PromoCodeVerificationAlert selectedBasketRow={selectedBasketRow} />}\n </BasketContext.Provider>\n );\n}\n"]}
1
+ {"version":3,"file":"BasketContextWrapper.js","sourceRoot":"/","sources":["src/contexts/BasketContext/BasketContextWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BasketContextType, BookingEngineContext, CompanyContext, ErrorHandler, HotelOverridesContext, NotificationContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { API_DATE_FORMAT } from 'api/BaseAPI';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { BasketContextErrorHandler } from 'handlers/BasketContextErrorHandler';\nimport { useHistoryConsistentPush } from 'hooks/HistoryConsistentPush';\nimport { useUpdateQueryParameters } from 'hooks/UpdateQueryParameters';\nimport { EAppQueryParameters } from 'models/AppQueryParameters';\nimport React, { useCallback, useContext, useEffect, useReducer, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\nimport { BasketReducer } from 'reducers/BasketReducer';\nimport { defer, Observable, throwError, timer } from 'rxjs';\nimport { finalize, mergeMap, retryWhen } from 'rxjs/operators';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport Text from '@/components/generic/Text';\nimport { MemberSignInModal } from '@/components/members/SignInModal/MemberSignInModal';\nimport { PromoCodeVerificationAlert } from '@/components/steps/room/UserSearchSummary/PromoCodeVerificationAlert';\nimport { useExternalMember } from '@/hooks/useExternalMember';\nimport { Addon, AddonPricingType } from '@/models/Addon/Addon';\nimport ReservationsDTO from '@/models/Api/ReservationsDTO';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport BasketRow from '@/models/BasketRow';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport { RoomstaySession } from '@/models/RoomstaySession';\nimport StepAddon from '@/pages/steps/StepAddon/StepAddon';\nimport StepThanks from '@/pages/steps/StepThanks/StepThanks';\nimport InlineAddonStepFeature from '@/providers/feature/InlineAddonStepFeature';\nimport { usePromotionContainer } from '@/providers/PromotionProvider';\nimport DataLayer from '@/util/DataLayer';\nimport { debounce } from '@/util/Debounce';\nimport getStepRoom from '@/util/GetStepRoom';\nimport StepManager from '@/util/StepManager';\nimport StringHelper from '@/util/StringHelper';\nexport interface BasketContextWrapperProps {\n children: React.ReactNode;\n}\n\nexport function BasketContextWrapper(props: BasketContextWrapperProps) {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const updateQueryParams = useUpdateQueryParameters();\n const history = useHistory();\n const historyConsistentPush = useHistoryConsistentPush();\n const { isExternalMemberHotel, memberNumber } = useExternalMember();\n\n const notifications = useContext(NotificationContext);\n const beContext = useContext(BookingEngineContext);\n\n const { showPromoCodeAlert } = useContext(HotelOverridesContext);\n\n const initialSession = beContext?.engine?.getInitialSession();\n\n const [currentBasketRows, basketRowReducer] = useReducer(BasketReducer, initialSession?.basketRows ?? []);\n\n const [selectedBasketRow, setSelectedBasketRow] = useState<BasketRow | null>(null);\n const [basketAddonRows, setBasketAddonRows] = useState<BasketAddonRow[]>([]);\n const [isLoadingPriceQuote, setIsLoadingPriceQuote] = useState(false);\n\n let loadedStartDate: dayjs.Dayjs | null = null;\n let loadedEndDate: dayjs.Dayjs | null = null;\n\n if (initialSession?.basketRows?.length) {\n loadedStartDate = initialSession.basketRows[0].getStartDate();\n loadedEndDate = initialSession.basketRows[0].getEndDate();\n } else {\n if (initialSession?.startDate) {\n loadedStartDate = initialSession.startDate;\n }\n\n if (initialSession?.endDate) {\n loadedEndDate = initialSession.endDate;\n }\n }\n\n const [startDate, setStartDate] = useState<dayjs.Dayjs | null>(loadedStartDate ?? null);\n const [endDate, setEndDate] = useState<dayjs.Dayjs | null>(loadedEndDate ?? null);\n\n const [hasCheckedOut, setHasCheckedOut] = useState(false);\n const [reservationData, setReservationData] = useState<ReservationsDTO | null>(initialSession?.reservation || null);\n\n const [knownErrorPromoCodes, setKnownErrorPromoCodes] = useState<string[]>([]);\n\n BasketContextErrorHandler.handleAvailabilityWarnings = (warnings: string[]) => {\n warnings.map((warning) => {\n if (warning.toLowerCase().startsWith('invalid promo code')) {\n const promoCode = warning.substr(20);\n\n currentBasketRows.forEach((row) => {\n if (promoCode.toLowerCase() === row.getPromoCode().toLowerCase()) {\n row.setPromoCodeStatus('invalid');\n workingContext.updateBasketRow(row, false);\n }\n });\n\n if (!knownErrorPromoCodes.includes(promoCode.toUpperCase())) {\n setKnownErrorPromoCodes((oldCodes) => {\n return [...oldCodes, promoCode.toUpperCase()];\n });\n }\n } else {\n ErrorHandler.add({\n message: warning,\n });\n }\n });\n };\n\n BasketContextErrorHandler.handlePromoSuccess = (promo: string) => {\n currentBasketRows.forEach((row) => {\n if (row.getPromoCode() === promo && row.getPromoCode() && row.getPromoCodeStatus() !== 'valid') {\n row.setPromoCodeStatus('valid');\n workingContext.updateBasketRow(row, false);\n }\n });\n };\n\n const debounceUseEffect = useCallback(\n debounce(() => {\n if (!startDate || !endDate) {\n return;\n }\n\n DataLayer.instance.sendDateSelection({\n startDate,\n endDate,\n adult: selectedBasketRow?.getAdults(),\n children: selectedBasketRow?.getChildren(),\n infant: selectedBasketRow?.getInfants(),\n });\n\n beContext.sessionProvider?.updateSession({\n startDate,\n endDate,\n });\n\n // TODO re-visit this as we don't want to set dates for everything constantly\n workingContext.getAllDatelessRows().forEach((row: BasketRow) => {\n row.setStartDate(startDate);\n row.setEndDate(endDate);\n\n workingContext.updateBasketRow(row);\n });\n\n //When trying to call row.discardGuestsState() in somewhere, we got conflicted here with BasketRow.setStartDate& BasketRow.setEndDate, it set back to previous startDate/endDate\n //Use debounceUseEffect to fix it\n if (selectedBasketRow) {\n selectedBasketRow.setStartDate(startDate);\n selectedBasketRow.setEndDate(endDate);\n\n workingContext.updateBasketRow(selectedBasketRow, false);\n } else if (currentBasketRows.length === 1) {\n const onlyBasketRow = currentBasketRows[0];\n onlyBasketRow.setStartDate(startDate);\n onlyBasketRow.setEndDate(endDate);\n\n workingContext.updateBasketRow(onlyBasketRow, false);\n }\n }, 500),\n [startDate, endDate]\n );\n\n useEffect(() => {\n debounceUseEffect();\n }, [debounceUseEffect]);\n\n useEffect(() => {\n beContext.sessionProvider?.updateSession({ basketRows: currentBasketRows });\n }, [currentBasketRows, selectedBasketRow]);\n\n const checkAndApplyMemberOnlyPromo = (row: BasketRow) => {\n if (row && hotel?.memberOnlyPromoCode && initialSession?.user && !row.getPromoCode()) {\n row.setPromoCode(hotel.memberOnlyPromoCode);\n workingContext.updateBasketRow(row);\n }\n };\n\n /**\n * This is necessary as when we're adding our first row, hotel might not be set.\n */\n useEffect(() => {\n checkAndApplyMemberOnlyPromo(selectedBasketRow as BasketRow);\n }, [hotel]);\n\n const returnAggregationAndTranslation = (reduction: ((row: BasketRow) => number) | number, translation?: string) => {\n const count = typeof reduction === 'number' ? reduction : currentBasketRows.reduce((total, row) => total + reduction(row), 0);\n\n if (translation) {\n return StringHelper.pluralWithDictAndCount(count, translation, t);\n } else {\n return count;\n }\n };\n\n const getNextAvailableBasketRow = (exclude?: BasketRow): BasketRow | null => {\n const arrayLength = currentBasketRows.length;\n for (let i = 0; i < arrayLength; i++) {\n if ((!exclude || (exclude && exclude.getID() !== currentBasketRows[i].getID())) && !currentBasketRows[i].getRate()) {\n return currentBasketRows[i];\n }\n }\n\n return null;\n };\n\n const updateQueryParameters = (row: BasketRow | null) => {\n if (!row) return;\n const queryParameters: Record<string, string> = {};\n if (row.getEndDate()) {\n let startDate = selectedBasketRow?.getStartDate();\n if (!startDate) {\n startDate = row.getStartDate();\n }\n queryParameters[EAppQueryParameters.Arrive] = startDate.format(API_DATE_FORMAT);\n queryParameters[EAppQueryParameters.Depart] = row.getEndDate().format(API_DATE_FORMAT);\n }\n if (row.getPromoCode()) queryParameters[EAppQueryParameters.PromoCode] = row.getPromoCode();\n if (row.getChildren() !== undefined) queryParameters[EAppQueryParameters.Children] = row.getChildren().toString();\n if (row.getAdults() !== undefined) queryParameters[EAppQueryParameters.Adults] = row.getAdults().toString();\n updateQueryParams(queryParameters);\n };\n\n const updateBasketRow = (row: BasketRow, updateGlobalDates = true) => {\n updateQueryParameters(row);\n if (updateGlobalDates && row.getID() === selectedBasketRow?.getID()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n }\n basketRowReducer({ method: 'Update', row });\n };\n\n const syncSelectedDateRange = (row?: BasketRow) => {\n if (!row) return;\n if ((!row.getStartDate() || !row.getEndDate()) && startDate && endDate) {\n row.setStartDate(startDate);\n row.setEndDate(endDate);\n } else if (!startDate && !endDate && row.getStartDate() && row.getEndDate()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n }\n };\n\n const { loadedPromotion } = usePromotionContainer({ selectedBasketRow: selectedBasketRow as BasketRow, updateBasketRow });\n\n const genericRetryStrategy =\n ({\n maxRetryAttempts = 3,\n scalingDuration = 0,\n }: {\n maxRetryAttempts?: number;\n scalingDuration?: number;\n } = {}) =>\n (attempts: Observable<any>) => {\n return attempts.pipe(\n mergeMap((error, i) => {\n const retryAttempt = i + 1;\n if (retryAttempt > maxRetryAttempts) {\n return throwError(error);\n }\n console.log(`Attempt ${retryAttempt}: retrying in ${scalingDuration}ms`);\n return timer(scalingDuration);\n }),\n finalize(() => console.log('We are done!'))\n );\n };\n\n const workingContext: BasketContextType = {\n startDate: startDate as Dayjs,\n endDate: endDate as Dayjs,\n\n selectedBasketRow: selectedBasketRow as BasketRow,\n currentBasketRows,\n basketAddonRows,\n\n hasCheckedOut,\n reservationData: reservationData as ReservationsDTO,\n isLoadingPriceQuote,\n\n loadedPromotion,\n\n /**\n * When adding a basket row, will check if there is a `selectedBasketRow`\n * if one is already set, row will simply get added, otherwise selectedBasketRow\n * gets set\n */\n addBasketRow: (row: BasketRow, selectThisRate = false, neverSelectThisRate = false) => {\n syncSelectedDateRange(row);\n\n checkAndApplyMemberOnlyPromo(row);\n\n if (\n (!selectedBasketRow && (!row.isValid() || !currentBasketRows.length || currentBasketRows.length - workingContext.getAllValidRows().length === 0)) ||\n selectThisRate\n ) {\n if (!neverSelectThisRate) {\n setSelectedBasketRow(row);\n }\n }\n\n basketRowReducer({ method: 'Add', row });\n },\n\n initBasketRows: (rows: BasketRow[]) => {\n const firstRow = rows[0];\n syncSelectedDateRange(firstRow);\n setSelectedBasketRow(firstRow);\n basketRowReducer({\n method: 'Init',\n rows: rows,\n });\n },\n\n //TODO: This function needs to be refactored to simplify a lot of this logic, and move notification raising to use the Event Manager instead\n addRate: async (rate: RoomRate, notify = true) => {\n let basketRow: BasketRow | null = null;\n let translationString: string;\n\n let addons = [];\n\n if (selectedBasketRow) {\n selectedBasketRow.setPreGuestsState();\n basketRow = selectedBasketRow;\n if (selectedBasketRow.getRate()) {\n translationString = Translation.Misc.RoomUpdatedNotification;\n } else {\n if (!selectedBasketRow.getStartDate() && selectedBasketRow.getEndDate()) {\n selectedBasketRow.setStartDate(startDate as Dayjs);\n selectedBasketRow.setEndDate(endDate as Dayjs);\n }\n\n translationString = Translation.Misc.RoomAddedNotification;\n }\n } else {\n if (!startDate || !endDate) {\n console.error('room selected with no date values.');\n return;\n }\n\n basketRow = new BasketRow(rate);\n\n basketRow.setStartDate(startDate);\n basketRow.setEndDate(endDate);\n\n translationString = Translation.Misc.RoomAddedNotification;\n }\n\n if (InlineAddonStepFeature.isActive()) {\n basketRow.setRate(rate); // TODO: Fix quick hack to make the Addons load\n addons = await API.Addons.findAddons([basketRow], hotel?.hotelID as string);\n }\n\n basketRow.setAuxiliaryFilter(beContext.currentGroupedRoomFilters);\n beContext.setCurrentGroupedRoomFilters({});\n\n basketRowReducer({ method: 'AddRate', rate, row: basketRow });\n\n try {\n DataLayer.instance.sendRoomRateAddToCart(rate, basketRow.getNumberOfDays(), startDate ?? basketRow.getStartDate(), endDate ?? basketRow.getEndDate());\n } catch (ex) {\n console.log('Failed recording basket Add event');\n }\n\n if (notify) {\n notifications.addNotification({\n icon: IconType.Bed,\n children: (\n <Text inline>\n {t(translationString)} <strong className=\"u-marg-left--light\">{rate.getRoom().name}</strong>\n </Text>\n ),\n });\n }\n\n const nextAvailable = getNextAvailableBasketRow(basketRow);\n\n if (nextAvailable) {\n setSelectedBasketRow(nextAvailable);\n } else {\n setSelectedBasketRow(null);\n const isNextStepAddon = StepManager.getNextStepUrl(getStepRoom()) === StepAddon.getStepUrl();\n\n if (isNextStepAddon) {\n if (addons.length) {\n historyConsistentPush(StepAddon.getStepUrl());\n } else {\n historyConsistentPush(StepManager.getNextStepUrl(StepAddon));\n }\n } else {\n historyConsistentPush(StepManager.getNextStepUrl(getStepRoom()));\n }\n }\n },\n\n getBasketQuoteDetails: () => {\n const maxRetryAttempts = 5;\n\n if (!hotel || !hotel?.requireDeposit) {\n return false;\n }\n setIsLoadingPriceQuote(true);\n\n const getData = () =>\n defer(() => API.Reservation.getPriceQuote(hotel.hotelID, currentBasketRows, isExternalMemberHotel ? memberNumber : undefined)).pipe(\n retryWhen(\n genericRetryStrategy({\n maxRetryAttempts: maxRetryAttempts,\n })\n )\n );\n\n const retryableObservable = getData();\n\n retryableObservable.subscribe(\n (quote) => {\n if (quote === null) return;\n\n for (const quoteRow of quote.rows) {\n const basketRow = currentBasketRows.find((row) => row.getID() === quoteRow.rowId);\n\n if (!basketRow) {\n console.warn('API Returned unfamiliar row ID', quoteRow.rowId);\n continue;\n }\n\n basketRow.quoteDetails = quoteRow;\n updateBasketRow(basketRow);\n }\n },\n (error: any) => {\n console.log(error);\n console.log(`Error!: Retried ${maxRetryAttempts} times then quit!`);\n },\n () => {\n setIsLoadingPriceQuote(false);\n }\n );\n },\n /**\n * Filter global list of rooms based on their validity.\n *\n * Useful for getting a complete summary of all the rooms.\n */\n getAllValidRows: () => {\n return currentBasketRows.filter((item) => item.isValid());\n },\n\n getAllDatelessRows: () => {\n return currentBasketRows.filter((item) => !item.getStartDate() || !item.getEndDate());\n },\n\n getNumberOfAdults: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getAdults(), withTranslation ? Translation.Step.Date.Adult : undefined);\n },\n\n getNumberOfChildren: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getChildren(), withTranslation ? Translation.Step.Date.Child : undefined);\n },\n\n getNumberOfInfants: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getInfants(), withTranslation ? Translation.Step.Date.Infant : undefined);\n },\n\n getNumberOfRooms: (withTranslation = false) => {\n return returnAggregationAndTranslation(currentBasketRows.length, withTranslation ? Translation.Step.Date.Room : undefined);\n },\n\n getTotalPrice: (getOriginal = false) => {\n let totalPrice = 0;\n\n if (getOriginal || !hotel?.requireDeposit) {\n totalPrice = returnAggregationAndTranslation((row) => (row.isValid() ? (row.getRate()?.getTotalPrice() as number) : 0)) as number;\n totalPrice += workingContext.getTotalFees();\n } else {\n totalPrice = workingContext.getTotalDeposit() + workingContext.getTotalFees();\n }\n\n basketAddonRows.forEach((row) => {\n totalPrice += row.getTotalPrice();\n });\n return totalPrice;\n },\n getTotalDeposit: () => {\n const totalDeposit = returnAggregationAndTranslation((row) => (row.quoteDetails ? (row.quoteDetails?.totalDeposit as number) : 0)) as number;\n return totalDeposit;\n },\n getTotalFees: () => {\n const totalFees = returnAggregationAndTranslation((row) => (row.quoteDetails ? (row.quoteDetails?.totalFees as number) : 0)) as number;\n return totalFees;\n },\n getTotalPayNow: () => {\n let depositNoFee = 0;\n if (hotel?.requireDeposit) {\n depositNoFee = workingContext.getTotalDeposit();\n } else {\n depositNoFee = workingContext.getTotalPrice();\n }\n return depositNoFee + workingContext.getTotalFees();\n },\n getTotalPayLater: () => {\n return workingContext.getTotalPrice(true) - workingContext.getTotalPayNow();\n },\n\n /**\n * Pops the provided row from the current basket array\n */\n removeBasketRow: (row: BasketRow) => {\n const rowsBeforeRemoval = currentBasketRows.length;\n\n basketRowReducer({ method: 'Remove', row });\n\n if (selectedBasketRow && row.getID() === selectedBasketRow.getID()) {\n setSelectedBasketRow(getNextAvailableBasketRow(row));\n }\n\n if (rowsBeforeRemoval === 1) {\n workingContext.addBasketRow(new BasketRow(), true);\n }\n },\n\n clearBasketRows: (confirm: boolean) => {\n if (confirm) {\n basketRowReducer({ method: 'Clear' });\n }\n },\n\n updateBasketRow,\n\n /**\n * Select passed basket row, and update all inputs (like start date)\n */\n selectBasketRow: async (row: BasketRow | null) => {\n if (row && row.isValid()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n\n setSelectedBasketRow(row);\n } else {\n setSelectedBasketRow(getNextAvailableBasketRow());\n }\n },\n\n setStartDate,\n setEndDate,\n\n booked: async (data: ReservationsDTO, requestData: RoomstaySession['reservationRequest']) => {\n const updateObject: Partial<RoomstaySession> = { reservation: data };\n\n if (requestData) {\n updateObject.reservationRequest = requestData;\n }\n\n await beContext.sessionProvider?.updateSessionAsync(updateObject);\n setReservationData(data);\n },\n\n rollback: () => {\n beContext.sessionProvider?.updateSession({\n reservation: undefined,\n });\n setReservationData(null);\n },\n\n checkedOut: (data: ReservationsDTO) => {\n setHasCheckedOut(true);\n setReservationData(data);\n setSelectedBasketRow(null);\n basketRowReducer({ method: 'Clear' });\n\n const row = new BasketRow();\n row.setStartDate(dayjs().add(1, 'day'));\n row.setEndDate(dayjs().add(2, 'day'));\n\n basketRowReducer({ method: 'Add', row });\n setBasketAddonRows([]);\n\n const sessionProvider = beContext?.engine?.getSessionProvider();\n sessionProvider.deleteSession();\n sessionProvider?.initialize(undefined, beContext?.engine?.getSource());\n const params = new URLSearchParams(window.location.search);\n params.delete('planpay_checkout_id');\n window.history.replaceState({}, '', `${window.location.pathname}?${params}`);\n history.push(StepThanks.getStepUrl());\n },\n\n finish: () => {\n setReservationData(null);\n setHasCheckedOut(false);\n },\n\n clearSelectedRates: () => {\n setSelectedBasketRow(null);\n },\n\n getRowForAddon: (selectedAddon) => {\n if (selectedAddon === undefined) {\n return;\n }\n return basketAddonRows.find((r) => r.getAddon()?.code === selectedAddon?.code);\n },\n\n setAddonQuantities: (addon: Addon, quantities: { quantity: number; adult: number; child: number }, selectedDate: string, selectedTime: string) => {\n let addonRow = basketAddonRows.find((r) => r.getAddon()?.code === addon.code);\n if (addonRow === undefined) {\n addonRow = new BasketAddonRow(addon);\n basketAddonRows.push(addonRow);\n }\n\n addonRow.setQuantity(quantities.quantity ?? 0);\n addonRow.setAdultQuantity(quantities.adult ?? 0);\n addonRow.setChildQuantity(quantities.child ?? 0);\n addonRow.setSelectedDate(selectedDate);\n addonRow.setSelectedTime(addon.availability[selectedDate].selectorTimes ? selectedTime : undefined);\n\n // TODO: Quick hack to fix Synxis Basic Addon quantities.\n if (addon.pricingType === AddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT) {\n // TODO: Because all addons only apply to first room, we can select the 0th from the list.\n const basketRow = currentBasketRows?.[0];\n if (basketRow) {\n addonRow.setAdultQuantity(basketRow.getAdults());\n }\n }\n\n if (addon.pricingType === AddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT) {\n // TODO: Because all addons only apply to first room, we can select the 0th from the list.\n const basketRow = currentBasketRows?.[0];\n if (basketRow) {\n addonRow.setChildQuantity(basketRow.getChildren());\n }\n }\n\n setBasketAddonRows([...basketAddonRows]);\n },\n\n removeBasketAddonRow: (row: BasketAddonRow) => {\n setBasketAddonRows((oldRows) => oldRows.filter((item) => item.getID() !== row.getID()));\n },\n\n attemptSelectUnfilledRow: () => {\n const row = getNextAvailableBasketRow();\n\n if (row) {\n setSelectedBasketRow(row);\n return row;\n }\n },\n };\n\n return (\n <BasketContext.Provider value={workingContext}>\n {props.children}\n <MemberSignInModal />\n {showPromoCodeAlert && <PromoCodeVerificationAlert selectedBasketRow={selectedBasketRow} />}\n </BasketContext.Provider>\n );\n}\n"]}
@@ -1,17 +1,24 @@
1
1
  import type { BaseEngine, BaseEngineConfig } from '../../engines/BaseEngine';
2
2
  import type Filter from '../../models/Room/Filters/Filter';
3
3
  import type { RoomSort } from '../../providers/RoomSortProvider';
4
- import type SessionProvider from '../../providers/SessionProvider';
4
+ import type LocalStorageProvider from '../../providers/storage/LocalStorageProvider';
5
+ import type SessionProvider from '../../providers/storage/SessionProvider';
5
6
  import type ScreenSize from '../../util/ScreenSize';
6
7
  export type BookingEngineContextType = {
7
8
  currentRoomSort: RoomSort;
8
9
  currentFilters: EngineFilterType;
10
+ currentGroupedRoomFilters: EngineFilterType;
9
11
  screenSize: ScreenSize;
10
12
  engine: BaseEngine<BaseEngineConfig>;
11
13
  sessionProvider: SessionProvider;
14
+ storageProvider: LocalStorageProvider;
12
15
  setCurrentRoomSort: (sort: RoomSort) => void;
13
16
  setCurrentFilters: (filters: EngineFilterType) => void;
17
+ setCurrentGroupedRoomFilters: (filters: GroupedRoomFilters) => void;
14
18
  };
15
19
  export type EngineFilterType = {
16
20
  [code: string]: Filter | null;
17
21
  };
22
+ export type GroupedRoomFilters = {
23
+ [id: string]: any;
24
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"BookingEngineContextType.types.js","sourceRoot":"/","sources":["src/contexts/BookingEngineContext/BookingEngineContextType.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { BaseEngine, BaseEngineConfig } from '@/engines/BaseEngine';\nimport type Filter from '@/models/Room/Filters/Filter';\nimport type { RoomSort } from '@/providers/RoomSortProvider';\nimport type SessionProvider from '@/providers/SessionProvider';\nimport type ScreenSize from '@/util/ScreenSize';\n\n// TODO: Re-factor to a general Engine / UI Context, to leave the FullPageBookingEngine Logic separate i.e the filters & room sort values\nexport type BookingEngineContextType = {\n currentRoomSort: RoomSort;\n currentFilters: EngineFilterType;\n\n screenSize: ScreenSize;\n\n engine: BaseEngine<BaseEngineConfig>;\n sessionProvider: SessionProvider;\n\n setCurrentRoomSort: (sort: RoomSort) => void;\n setCurrentFilters: (filters: EngineFilterType) => void;\n};\n\nexport type EngineFilterType = { [code: string]: Filter | null };\n"]}
1
+ {"version":3,"file":"BookingEngineContextType.types.js","sourceRoot":"/","sources":["src/contexts/BookingEngineContext/BookingEngineContextType.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { BaseEngine, BaseEngineConfig } from '@/engines/BaseEngine';\nimport type Filter from '@/models/Room/Filters/Filter';\nimport type { RoomSort } from '@/providers/RoomSortProvider';\nimport type LocalStorageProvider from '@/providers/storage/LocalStorageProvider';\nimport type SessionProvider from '@/providers/storage/SessionProvider';\nimport type ScreenSize from '@/util/ScreenSize';\n\n// TODO: Re-factor to a general Engine / UI Context, to leave the FullPageBookingEngine Logic separate i.e the filters & room sort values\nexport type BookingEngineContextType = {\n currentRoomSort: RoomSort;\n currentFilters: EngineFilterType;\n currentGroupedRoomFilters: EngineFilterType;\n\n screenSize: ScreenSize;\n\n engine: BaseEngine<BaseEngineConfig>;\n sessionProvider: SessionProvider;\n storageProvider: LocalStorageProvider;\n\n setCurrentRoomSort: (sort: RoomSort) => void;\n setCurrentFilters: (filters: EngineFilterType) => void;\n setCurrentGroupedRoomFilters: (filters: GroupedRoomFilters) => void;\n};\n\nexport type EngineFilterType = { [code: string]: Filter | null };\nexport type GroupedRoomFilters = { [id: string]: any };\n"]}
@@ -33,9 +33,11 @@ const RoomSortProvider_1 = require("../../providers/RoomSortProvider");
33
33
  const ScreenSize_1 = __importDefault(require("../../util/ScreenSize"));
34
34
  function BookingEngineContextWrapper({ engine, children }) {
35
35
  const sessionProvider = engine.getSessionProvider();
36
+ const storageProvider = engine.getStorageProvider();
36
37
  const [screenSize, setScreenSize] = (0, react_1.useState)(null);
37
38
  const [currentRoomSort, setCurrentRoomSort] = (0, react_1.useState)(RoomSortProvider_1.RoomSort.PriceLow);
38
39
  const [currentFilters, setCurrentFilters] = (0, react_1.useState)({});
40
+ const [currentGroupedRoomFilters, setCurrentGroupedRoomFilters] = (0, react_1.useState)({});
39
41
  (0, react_1.useEffect)(() => {
40
42
  let isCancelled = false;
41
43
  const onResize = () => {
@@ -58,12 +60,15 @@ function BookingEngineContextWrapper({ engine, children }) {
58
60
  const bookingEngineContext = {
59
61
  currentRoomSort,
60
62
  currentFilters,
63
+ currentGroupedRoomFilters,
61
64
  screenSize: screenSize,
62
65
  // Setters
63
66
  setCurrentRoomSort,
64
67
  setCurrentFilters,
68
+ setCurrentGroupedRoomFilters,
65
69
  engine,
66
70
  sessionProvider,
71
+ storageProvider,
67
72
  };
68
73
  return react_1.default.createElement(contexts_1.BookingEngineContext.Provider, { value: bookingEngineContext }, children);
69
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BookingEngineContextWrapper.js","sourceRoot":"/","sources":["src/contexts/BookingEngineContext/BookingEngineContextWrapper.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAsG;AACtG,+CAAmD;AAGnD,mEAAwD;AACxD,mEAA2C;AAO3C,SAAgB,2BAA2B,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAoC;IAC9F,MAAM,eAAe,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;IAEpD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,EAAoB,IAAI,CAAC,CAAC;IAEtE,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAAW,2BAAQ,CAAC,QAAQ,CAAC,CAAC;IACpF,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,IAAA,gBAAQ,EAAmB,EAAE,CAAC,CAAC;IAE3E,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,MAAM,QAAQ,GAAG,GAAG,EAAE;YAClB,IAAI,CAAC,WAAW,EAAE;gBACd,KAAK,MAAM,IAAI,IAAI,oBAAU,EAAE;oBAC3B,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;wBACnC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;wBAC5B,MAAM;qBACT;iBACJ;aACJ;QACL,CAAC,CAAC;QAEF,QAAQ,EAAE,CAAC;QAEX,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE5C,OAAO,GAAG,EAAE;YACR,WAAW,GAAG,IAAI,CAAC;YAEnB,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnD,CAAC,CAAC;IACN,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,oBAAoB,GAA6B;QACnD,eAAe;QACf,cAAc;QAEd,UAAU,EAAE,UAAwB;QAEpC,UAAU;QACV,kBAAkB;QAClB,iBAAiB;QAEjB,MAAM;QACN,eAAe;KAClB,CAAC;IAEF,OAAO,8BAAC,+BAAoB,CAAC,QAAQ,IAAC,KAAK,EAAE,oBAAoB,IAAG,QAAQ,CAAiC,CAAC;AAClH,CAAC;AAhDD,kEAgDC","sourcesContent":["import { BookingEngineContext, BookingEngineContextType, EngineFilterType } from '@frontend/contexts';\nimport React, { useEffect, useState } from 'react';\n\nimport type { BaseEngine, BaseEngineConfig } from '@/engines/BaseEngine';\nimport { RoomSort } from '@/providers/RoomSortProvider';\nimport ScreenSize from '@/util/ScreenSize';\n\nexport interface BookingEngineContextWrapperProps {\n children: React.ReactNode;\n engine: BaseEngine<BaseEngineConfig>;\n}\n\nexport function BookingEngineContextWrapper({ engine, children }: BookingEngineContextWrapperProps) {\n const sessionProvider = engine.getSessionProvider();\n\n const [screenSize, setScreenSize] = useState<ScreenSize | null>(null);\n\n const [currentRoomSort, setCurrentRoomSort] = useState<RoomSort>(RoomSort.PriceLow);\n const [currentFilters, setCurrentFilters] = useState<EngineFilterType>({});\n\n useEffect(() => {\n let isCancelled = false;\n\n const onResize = () => {\n if (!isCancelled) {\n for (const size in ScreenSize) {\n if (window.innerWidth <= Number(size)) {\n setScreenSize(Number(size));\n break;\n }\n }\n }\n };\n\n onResize();\n\n window.addEventListener('resize', onResize);\n\n return () => {\n isCancelled = true;\n\n window.removeEventListener('resize', onResize);\n };\n }, []);\n\n const bookingEngineContext: BookingEngineContextType = {\n currentRoomSort,\n currentFilters,\n\n screenSize: screenSize as ScreenSize,\n\n // Setters\n setCurrentRoomSort,\n setCurrentFilters,\n\n engine,\n sessionProvider,\n };\n\n return <BookingEngineContext.Provider value={bookingEngineContext}>{children}</BookingEngineContext.Provider>;\n}\n"]}
1
+ {"version":3,"file":"BookingEngineContextWrapper.js","sourceRoot":"/","sources":["src/contexts/BookingEngineContext/BookingEngineContextWrapper.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA0H;AAC1H,+CAAmD;AAGnD,mEAAwD;AACxD,mEAA2C;AAO3C,SAAgB,2BAA2B,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAoC;IAC9F,MAAM,eAAe,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;IACpD,MAAM,eAAe,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;IAEpD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,EAAoB,IAAI,CAAC,CAAC;IAEtE,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAAW,2BAAQ,CAAC,QAAQ,CAAC,CAAC;IACpF,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,IAAA,gBAAQ,EAAmB,EAAE,CAAC,CAAC;IAC3E,MAAM,CAAC,yBAAyB,EAAE,4BAA4B,CAAC,GAAG,IAAA,gBAAQ,EAAqB,EAAE,CAAC,CAAC;IAEnG,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,MAAM,QAAQ,GAAG,GAAG,EAAE;YAClB,IAAI,CAAC,WAAW,EAAE;gBACd,KAAK,MAAM,IAAI,IAAI,oBAAU,EAAE;oBAC3B,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;wBACnC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;wBAC5B,MAAM;qBACT;iBACJ;aACJ;QACL,CAAC,CAAC;QAEF,QAAQ,EAAE,CAAC;QAEX,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE5C,OAAO,GAAG,EAAE;YACR,WAAW,GAAG,IAAI,CAAC;YAEnB,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnD,CAAC,CAAC;IACN,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,oBAAoB,GAA6B;QACnD,eAAe;QACf,cAAc;QACd,yBAAyB;QAEzB,UAAU,EAAE,UAAwB;QAEpC,UAAU;QACV,kBAAkB;QAClB,iBAAiB;QACjB,4BAA4B;QAE5B,MAAM;QACN,eAAe;QACf,eAAe;KAClB,CAAC;IAEF,OAAO,8BAAC,+BAAoB,CAAC,QAAQ,IAAC,KAAK,EAAE,oBAAoB,IAAG,QAAQ,CAAiC,CAAC;AAClH,CAAC;AArDD,kEAqDC","sourcesContent":["import { BookingEngineContext, BookingEngineContextType, EngineFilterType, GroupedRoomFilters } from '@frontend/contexts';\nimport React, { useEffect, useState } from 'react';\n\nimport type { BaseEngine, BaseEngineConfig } from '@/engines/BaseEngine';\nimport { RoomSort } from '@/providers/RoomSortProvider';\nimport ScreenSize from '@/util/ScreenSize';\n\nexport interface BookingEngineContextWrapperProps {\n children: React.ReactNode;\n engine: BaseEngine<BaseEngineConfig>;\n}\n\nexport function BookingEngineContextWrapper({ engine, children }: BookingEngineContextWrapperProps) {\n const sessionProvider = engine.getSessionProvider();\n const storageProvider = engine.getStorageProvider();\n\n const [screenSize, setScreenSize] = useState<ScreenSize | null>(null);\n\n const [currentRoomSort, setCurrentRoomSort] = useState<RoomSort>(RoomSort.PriceLow);\n const [currentFilters, setCurrentFilters] = useState<EngineFilterType>({});\n const [currentGroupedRoomFilters, setCurrentGroupedRoomFilters] = useState<GroupedRoomFilters>({});\n\n useEffect(() => {\n let isCancelled = false;\n\n const onResize = () => {\n if (!isCancelled) {\n for (const size in ScreenSize) {\n if (window.innerWidth <= Number(size)) {\n setScreenSize(Number(size));\n break;\n }\n }\n }\n };\n\n onResize();\n\n window.addEventListener('resize', onResize);\n\n return () => {\n isCancelled = true;\n\n window.removeEventListener('resize', onResize);\n };\n }, []);\n\n const bookingEngineContext: BookingEngineContextType = {\n currentRoomSort,\n currentFilters,\n currentGroupedRoomFilters,\n\n screenSize: screenSize as ScreenSize,\n\n // Setters\n setCurrentRoomSort,\n setCurrentFilters,\n setCurrentGroupedRoomFilters,\n\n engine,\n sessionProvider,\n storageProvider,\n };\n\n return <BookingEngineContext.Provider value={bookingEngineContext}>{children}</BookingEngineContext.Provider>;\n}\n"]}
@@ -5,6 +5,7 @@ import type { Hotel } from '../../models/Client/Hotel/Hotel';
5
5
  import { IPromotion } from '../../models/Promotion/IPromotion.type';
6
6
  import type { Language } from '../../providers/LanguageProvider';
7
7
  export type SignInUser = {
8
+ saveState?: boolean;
8
9
  memberNumber?: string;
9
10
  firstName?: string;
10
11
  lastName?: string;