@qite/tide-booking-component 1.4.124 → 1.4.126

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 (776) hide show
  1. package/README.md +26 -26
  2. package/build/build-cjs/index.js +40138 -0
  3. package/build/build-cjs/src/booking-product/components/age-select.d.ts +8 -0
  4. package/build/build-cjs/src/booking-product/components/amount-input.d.ts +10 -0
  5. package/build/build-cjs/src/booking-product/components/date-range-picker/calendar-day.d.ts +13 -0
  6. package/build/build-cjs/src/booking-product/components/date-range-picker/calendar.d.ts +19 -0
  7. package/build/build-cjs/src/booking-product/components/date-range-picker/index.d.ts +25 -0
  8. package/build/build-cjs/src/booking-product/components/dates.d.ts +14 -0
  9. package/build/build-cjs/src/booking-product/components/footer.d.ts +10 -0
  10. package/build/build-cjs/src/booking-product/components/header.d.ts +11 -0
  11. package/build/build-cjs/src/booking-product/components/list-view.d.ts +8 -0
  12. package/build/build-cjs/src/booking-product/components/product.d.ts +9 -0
  13. package/build/build-cjs/src/booking-product/components/rating.d.ts +6 -0
  14. package/build/build-cjs/src/booking-product/components/rooms.d.ts +10 -0
  15. package/build/build-cjs/src/booking-product/constants.d.ts +1 -0
  16. package/build/build-cjs/src/booking-product/index.d.ts +10 -0
  17. package/build/build-cjs/src/booking-product/settings-context.d.ts +6 -0
  18. package/build/build-cjs/src/booking-product/types.d.ts +61 -0
  19. package/build/build-cjs/src/booking-product/utils/api.d.ts +7 -0
  20. package/build/build-cjs/src/booking-product/utils/price.d.ts +1 -0
  21. package/build/build-cjs/src/booking-wizard/api-settings-slice.d.ts +4 -0
  22. package/build/build-cjs/src/booking-wizard/components/build-step-labels.d.ts +8 -0
  23. package/build/build-cjs/src/booking-wizard/components/labeled-input.d.ts +18 -0
  24. package/build/build-cjs/src/booking-wizard/components/labeled-select.d.ts +21 -0
  25. package/build/build-cjs/src/booking-wizard/components/message.d.ts +9 -0
  26. package/build/build-cjs/src/booking-wizard/components/multi-range-filter.d.ts +11 -0
  27. package/build/build-cjs/src/booking-wizard/components/phone-input.d.ts +17 -0
  28. package/build/build-cjs/src/booking-wizard/components/print-offer-button.d.ts +17 -0
  29. package/build/build-cjs/src/booking-wizard/components/step-indicator.d.ts +6 -0
  30. package/build/build-cjs/src/booking-wizard/components/step-route.d.ts +8 -0
  31. package/build/build-cjs/src/booking-wizard/features/booking/api.d.ts +11 -0
  32. package/build/build-cjs/src/booking-wizard/features/booking/booking-self-contained.d.ts +8 -0
  33. package/build/build-cjs/src/booking-wizard/features/booking/booking-slice.d.ts +61 -0
  34. package/build/build-cjs/src/booking-wizard/features/booking/booking.d.ts +8 -0
  35. package/build/build-cjs/src/booking-wizard/features/booking/constants.d.ts +8 -0
  36. package/build/build-cjs/src/booking-wizard/features/booking/selectors.d.ts +638 -0
  37. package/build/build-cjs/src/booking-wizard/features/confirmation/confirmation.d.ts +5 -0
  38. package/build/build-cjs/src/booking-wizard/features/error/error.d.ts +5 -0
  39. package/build/build-cjs/src/booking-wizard/features/flight-options/flight-filter.d.ts +9 -0
  40. package/build/build-cjs/src/booking-wizard/features/flight-options/flight-option-flight.d.ts +8 -0
  41. package/build/build-cjs/src/booking-wizard/features/flight-options/flight-option-modal.d.ts +3 -0
  42. package/build/build-cjs/src/booking-wizard/features/flight-options/flight-option.d.ts +10 -0
  43. package/build/build-cjs/src/booking-wizard/features/flight-options/flight-utils.d.ts +6 -0
  44. package/build/build-cjs/src/booking-wizard/features/flight-options/index.d.ts +5 -0
  45. package/build/build-cjs/src/booking-wizard/features/price-details/price-details-api.d.ts +6 -0
  46. package/build/build-cjs/src/booking-wizard/features/price-details/price-details-slice.d.ts +23 -0
  47. package/build/build-cjs/src/booking-wizard/features/price-details/selectors.d.ts +378 -0
  48. package/build/build-cjs/src/booking-wizard/features/price-details/util.d.ts +2 -0
  49. package/build/build-cjs/src/booking-wizard/features/product-options/no-options.d.ts +3 -0
  50. package/build/build-cjs/src/booking-wizard/features/product-options/none-option.d.ts +9 -0
  51. package/build/build-cjs/src/booking-wizard/features/product-options/option-booking-airline-group.d.ts +8 -0
  52. package/build/build-cjs/src/booking-wizard/features/product-options/option-booking-group.d.ts +12 -0
  53. package/build/build-cjs/src/booking-wizard/features/product-options/option-item.d.ts +11 -0
  54. package/build/build-cjs/src/booking-wizard/features/product-options/option-pax-card.d.ts +10 -0
  55. package/build/build-cjs/src/booking-wizard/features/product-options/option-pax-group.d.ts +13 -0
  56. package/build/build-cjs/src/booking-wizard/features/product-options/option-room.d.ts +11 -0
  57. package/build/build-cjs/src/booking-wizard/features/product-options/option-unit-group.d.ts +13 -0
  58. package/build/build-cjs/src/booking-wizard/features/product-options/option-units-card.d.ts +9 -0
  59. package/build/build-cjs/src/booking-wizard/features/product-options/option-utils.d.ts +9 -0
  60. package/build/build-cjs/src/booking-wizard/features/product-options/options-form.d.ts +5 -0
  61. package/build/build-cjs/src/booking-wizard/features/room-options/index.d.ts +5 -0
  62. package/build/build-cjs/src/booking-wizard/features/room-options/room-utils.d.ts +9 -0
  63. package/build/build-cjs/src/booking-wizard/features/room-options/room.d.ts +12 -0
  64. package/build/build-cjs/src/booking-wizard/features/room-options/traveler-rooms.d.ts +9 -0
  65. package/build/build-cjs/src/booking-wizard/features/sidebar/index.d.ts +7 -0
  66. package/build/build-cjs/src/booking-wizard/features/sidebar/sidebar-flight.d.ts +9 -0
  67. package/build/build-cjs/src/booking-wizard/features/sidebar/sidebar-util.d.ts +13 -0
  68. package/build/build-cjs/src/booking-wizard/features/sidebar/sidebar.d.ts +0 -0
  69. package/build/build-cjs/src/booking-wizard/features/summary/summary-booking-option-pax.d.ts +7 -0
  70. package/build/build-cjs/src/booking-wizard/features/summary/summary-booking-option-unit.d.ts +7 -0
  71. package/build/build-cjs/src/booking-wizard/features/summary/summary-flight.d.ts +8 -0
  72. package/build/build-cjs/src/booking-wizard/features/summary/summary-per-booking-option-group.d.ts +7 -0
  73. package/build/build-cjs/src/booking-wizard/features/summary/summary-per-pax-option-group.d.ts +7 -0
  74. package/build/build-cjs/src/booking-wizard/features/summary/summary-per-unit-option-group.d.ts +7 -0
  75. package/build/build-cjs/src/booking-wizard/features/summary/summary-slice.d.ts +8 -0
  76. package/build/build-cjs/src/booking-wizard/features/summary/summary.d.ts +5 -0
  77. package/build/build-cjs/src/booking-wizard/features/travelers-form/controls/gender-control.d.ts +5 -0
  78. package/build/build-cjs/src/booking-wizard/features/travelers-form/travelers-form-slice.d.ts +143 -0
  79. package/build/build-cjs/src/booking-wizard/features/travelers-form/travelers-form-util.d.ts +7 -0
  80. package/build/build-cjs/src/booking-wizard/features/travelers-form/travelers-form.d.ts +3 -0
  81. package/build/build-cjs/src/booking-wizard/features/travelers-form/type-ahead-input.d.ts +16 -0
  82. package/build/build-cjs/src/booking-wizard/features/travelers-form/validate-form.d.ts +4 -0
  83. package/build/build-cjs/src/booking-wizard/index.d.ts +12 -0
  84. package/build/build-cjs/src/booking-wizard/settings-context.d.ts +6 -0
  85. package/build/build-cjs/src/booking-wizard/store.d.ts +26 -0
  86. package/build/build-cjs/src/booking-wizard/types.d.ts +330 -0
  87. package/build/build-cjs/src/booking-wizard/use-offer-printer.d.ts +13 -0
  88. package/build/build-cjs/src/content/components/LanguageSwitcher.d.ts +12 -0
  89. package/build/build-cjs/src/content/components/accordion.d.ts +9 -0
  90. package/build/build-cjs/src/content/components/breadcrumb.d.ts +14 -0
  91. package/build/build-cjs/src/content/components/contact.d.ts +3 -0
  92. package/build/build-cjs/src/content/components/faq.d.ts +11 -0
  93. package/build/build-cjs/src/content/components/gallery.d.ts +13 -0
  94. package/build/build-cjs/src/content/components/image-with-text.d.ts +29 -0
  95. package/build/build-cjs/src/content/components/itinerary-map-view.d.ts +48 -0
  96. package/build/build-cjs/src/content/components/login.d.ts +3 -0
  97. package/build/build-cjs/src/content/components/personal-contact-form.d.ts +3 -0
  98. package/build/build-cjs/src/content/components/slider.d.ts +10 -0
  99. package/build/build-cjs/src/content/error/error.d.ts +6 -0
  100. package/build/build-cjs/src/content/featured-trips/featured-trip-card.d.ts +4 -0
  101. package/build/build-cjs/src/content/featured-trips/index.d.ts +4 -0
  102. package/build/build-cjs/src/content/featured-trips/types.d.ts +12 -0
  103. package/build/build-cjs/src/content/features/content-page/content-page-self-contained.d.ts +6 -0
  104. package/build/build-cjs/src/content/footer/index.d.ts +4 -0
  105. package/build/build-cjs/src/content/footer/types.d.ts +27 -0
  106. package/build/build-cjs/src/content/header/index.d.ts +4 -0
  107. package/build/build-cjs/src/content/header/types.d.ts +22 -0
  108. package/build/build-cjs/src/content/image-card-grid/index.d.ts +4 -0
  109. package/build/build-cjs/src/content/image-card-grid/types.d.ts +12 -0
  110. package/build/build-cjs/src/content/image-with-text-section/card.d.ts +4 -0
  111. package/build/build-cjs/src/content/image-with-text-section/index.d.ts +4 -0
  112. package/build/build-cjs/src/content/image-with-text-section/types.d.ts +19 -0
  113. package/build/build-cjs/src/content/login/confirm-component.d.ts +4 -0
  114. package/build/build-cjs/src/content/login/index.d.ts +4 -0
  115. package/build/build-cjs/src/content/login/login-component.d.ts +4 -0
  116. package/build/build-cjs/src/content/login/login-services.d.ts +6 -0
  117. package/build/build-cjs/src/content/login/reset-password-component.d.ts +4 -0
  118. package/build/build-cjs/src/content/login/types.d.ts +24 -0
  119. package/build/build-cjs/src/content/navbar/index.d.ts +4 -0
  120. package/build/build-cjs/src/content/navbar/placeholderData.d.ts +12 -0
  121. package/build/build-cjs/src/content/navbar/types.d.ts +32 -0
  122. package/build/build-cjs/src/form/components/fields/date-field.d.ts +4 -0
  123. package/build/build-cjs/src/form/components/fields/dropdown-field.d.ts +4 -0
  124. package/build/build-cjs/src/form/components/fields/field-label.d.ts +10 -0
  125. package/build/build-cjs/src/form/components/fields/form-field.d.ts +11 -0
  126. package/build/build-cjs/src/form/components/fields/info-text-field.d.ts +7 -0
  127. package/build/build-cjs/src/form/components/fields/multi-dropdown-field.d.ts +4 -0
  128. package/build/build-cjs/src/form/components/fields/multiline-field.d.ts +4 -0
  129. package/build/build-cjs/src/form/components/fields/number-field.d.ts +4 -0
  130. package/build/build-cjs/src/form/components/fields/optional-field.d.ts +4 -0
  131. package/build/build-cjs/src/form/components/fields/radio-checkbox-field.d.ts +4 -0
  132. package/build/build-cjs/src/form/components/fields/text-field.d.ts +4 -0
  133. package/build/build-cjs/src/form/components/fields/yes-no-field.d.ts +4 -0
  134. package/build/build-cjs/src/form/components/form-body.d.ts +9 -0
  135. package/build/build-cjs/src/form/components/form-container.d.ts +3 -0
  136. package/build/build-cjs/src/form/components/form-segment.d.ts +11 -0
  137. package/build/build-cjs/src/form/components/form-step.d.ts +9 -0
  138. package/build/build-cjs/src/form/form-configuration-context.d.ts +4 -0
  139. package/build/build-cjs/src/form/form-types.d.ts +7 -0
  140. package/build/build-cjs/src/form/hooks/use-form-state.d.ts +13 -0
  141. package/build/build-cjs/src/form/index.d.ts +7 -0
  142. package/build/build-cjs/src/form/types.d.ts +20 -0
  143. package/build/build-cjs/src/form/utils/captcha-util.d.ts +3 -0
  144. package/build/build-cjs/src/form/utils/form-initial-values-util.d.ts +3 -0
  145. package/build/build-cjs/src/form/utils/form-submit-util.d.ts +4 -0
  146. package/build/build-cjs/src/form/utils/form-validation-util.d.ts +8 -0
  147. package/build/build-cjs/src/form/utils/html-util.d.ts +16 -0
  148. package/build/build-cjs/src/form/utils/visibility-util.d.ts +4 -0
  149. package/{src/index.ts → build/build-cjs/src/index.d.ts} +29 -46
  150. package/build/build-cjs/src/qsm/components/QSMContainer/qsm-container.d.ts +3 -0
  151. package/build/build-cjs/src/qsm/components/date-picker/index.d.ts +3 -0
  152. package/build/build-cjs/src/qsm/components/date-range-picker/calendar-day.d.ts +12 -0
  153. package/build/build-cjs/src/qsm/components/date-range-picker/calendar.d.ts +24 -0
  154. package/build/build-cjs/src/qsm/components/date-range-picker/index.d.ts +10 -0
  155. package/build/build-cjs/src/qsm/components/double-search-input-group/index.d.ts +8 -0
  156. package/build/build-cjs/src/qsm/components/item-picker/index.d.ts +13 -0
  157. package/build/build-cjs/src/qsm/components/mobile-filter-modal/index.d.ts +3 -0
  158. package/build/build-cjs/src/qsm/components/search-input/index.d.ts +15 -0
  159. package/build/build-cjs/src/qsm/components/search-input-group/index.d.ts +13 -0
  160. package/build/build-cjs/src/qsm/components/travel-class-picker/index.d.ts +3 -0
  161. package/build/build-cjs/src/qsm/components/travel-input/index.d.ts +3 -0
  162. package/build/build-cjs/src/qsm/components/travel-input-group/index.d.ts +3 -0
  163. package/build/build-cjs/src/qsm/components/travel-nationality-picker/index.d.ts +3 -0
  164. package/build/build-cjs/src/qsm/components/travel-type-picker/index.d.ts +3 -0
  165. package/build/build-cjs/src/qsm/index.d.ts +7 -0
  166. package/build/build-cjs/src/qsm/qsm-configuration-context.d.ts +4 -0
  167. package/build/build-cjs/src/qsm/store/qsm-slice.d.ts +74 -0
  168. package/build/build-cjs/src/qsm/store/qsm-store.d.ts +10 -0
  169. package/build/build-cjs/src/qsm/types.d.ts +82 -0
  170. package/build/build-cjs/src/search-results/components/book-packaging-entry/index.d.ts +9 -0
  171. package/build/build-cjs/src/search-results/components/book-packaging-entry/wl-sidebar.d.ts +9 -0
  172. package/build/build-cjs/src/search-results/components/excursions/day-by-day-excursions.d.ts +5 -0
  173. package/build/build-cjs/src/search-results/components/excursions/excursion-details.d.ts +3 -0
  174. package/build/build-cjs/src/search-results/components/excursions/excursion-results.d.ts +8 -0
  175. package/build/build-cjs/src/search-results/components/filters/filters.d.ts +13 -0
  176. package/build/build-cjs/src/search-results/components/filters/flight-filters.d.ts +8 -0
  177. package/build/build-cjs/src/search-results/components/flight/flight-banner.d.ts +8 -0
  178. package/build/build-cjs/src/search-results/components/flight/flight-card.d.ts +7 -0
  179. package/build/build-cjs/src/search-results/components/flight/flight-leg.d.ts +7 -0
  180. package/build/build-cjs/src/search-results/components/flight/flight-path.d.ts +6 -0
  181. package/build/build-cjs/src/search-results/components/flight/flight-results.d.ts +8 -0
  182. package/build/build-cjs/src/search-results/components/flight/flight-search-context/index.d.ts +39 -0
  183. package/build/build-cjs/src/search-results/components/flight/flight-selection/independent-flight-option.d.ts +14 -0
  184. package/build/build-cjs/src/search-results/components/flight/flight-selection/independent-flight-selection.d.ts +7 -0
  185. package/build/build-cjs/src/search-results/components/flight/flight-selection/index.d.ts +8 -0
  186. package/build/build-cjs/src/search-results/components/flight/flight-selection/paired-flight-option.d.ts +7 -0
  187. package/build/build-cjs/src/search-results/components/flight/flight-selection/paired-flight-selection.d.ts +7 -0
  188. package/build/build-cjs/src/search-results/components/group-tour/group-tour-card.d.ts +9 -0
  189. package/build/build-cjs/src/search-results/components/group-tour/group-tour-results.d.ts +6 -0
  190. package/build/build-cjs/src/search-results/components/hotel/hotel-accommodation-results.d.ts +7 -0
  191. package/build/build-cjs/src/search-results/components/hotel/hotel-card.d.ts +8 -0
  192. package/build/build-cjs/src/search-results/components/item-picker/index.d.ts +15 -0
  193. package/build/build-cjs/src/search-results/components/itinerary/full-itinerary.d.ts +6 -0
  194. package/build/build-cjs/src/search-results/components/itinerary/index.d.ts +10 -0
  195. package/build/build-cjs/src/search-results/components/multi-range-filter.d.ts +11 -0
  196. package/build/build-cjs/src/search-results/components/round-trip/round-trip-results.d.ts +5 -0
  197. package/build/build-cjs/src/search-results/components/search-results-container/flight-search-results.d.ts +6 -0
  198. package/build/build-cjs/src/search-results/components/search-results-container/search-results-container.d.ts +6 -0
  199. package/build/build-cjs/src/search-results/components/spinner/spinner.d.ts +6 -0
  200. package/build/build-cjs/src/search-results/components/tab-views/index.d.ts +5 -0
  201. package/build/build-cjs/src/search-results/features/flights/flight-search-results-self-contained.d.ts +5 -0
  202. package/build/build-cjs/src/search-results/features/hotels/hotel-flight-search-results-self-contained.d.ts +5 -0
  203. package/build/build-cjs/src/search-results/features/hotels/hotel-search-results-self-contained.d.ts +5 -0
  204. package/build/build-cjs/src/search-results/features/roundtrips/roundtrip-search-results-self-contained.d.ts +5 -0
  205. package/build/build-cjs/src/search-results/index.d.ts +8 -0
  206. package/{src/search-results/search-results-configuration-context.ts → build/build-cjs/src/search-results/search-results-configuration-context.d.ts} +4 -6
  207. package/build/build-cjs/src/search-results/store/search-results-selectors.d.ts +542 -0
  208. package/build/build-cjs/src/search-results/store/search-results-slice.d.ts +57 -0
  209. package/build/build-cjs/src/search-results/store/search-results-store.d.ts +10 -0
  210. package/build/build-cjs/src/search-results/types.d.ts +185 -0
  211. package/build/build-cjs/src/search-results/utils/flight-utils.d.ts +11 -0
  212. package/build/build-cjs/src/search-results/utils/packaging-utils.d.ts +7 -0
  213. package/build/build-cjs/src/search-results/utils/query-utils.d.ts +12 -0
  214. package/build/build-cjs/src/search-results/utils/search-results-utils.d.ts +8 -0
  215. package/build/build-cjs/src/shared/booking/booking-panel.d.ts +13 -0
  216. package/build/build-cjs/src/shared/booking/product-card.d.ts +8 -0
  217. package/build/build-cjs/src/shared/booking/shared-confirmation.d.ts +25 -0
  218. package/build/build-cjs/src/shared/booking/shared-sidebar.d.ts +34 -0
  219. package/build/build-cjs/src/shared/booking/step-indicators.d.ts +7 -0
  220. package/build/build-cjs/src/shared/booking/summary.d.ts +44 -0
  221. package/build/build-cjs/src/shared/booking/travelers-form.d.ts +79 -0
  222. package/build/build-cjs/src/shared/components/flyin/accommodation-flyin.d.ts +7 -0
  223. package/build/build-cjs/src/shared/components/flyin/flights-flyin.d.ts +7 -0
  224. package/build/build-cjs/src/shared/components/flyin/flyin.d.ts +20 -0
  225. package/build/build-cjs/src/shared/components/flyin/group-tour-flyin.d.ts +8 -0
  226. package/build/build-cjs/src/shared/components/flyin/packaging-flights-flyin.d.ts +9 -0
  227. package/build/build-cjs/src/shared/components/icon.d.ts +11 -0
  228. package/build/build-cjs/src/shared/components/loader.d.ts +6 -0
  229. package/build/build-cjs/src/shared/types.d.ts +16 -0
  230. package/build/build-cjs/src/shared/utils/booking-summary.d.ts +2 -0
  231. package/build/build-cjs/src/shared/utils/class-util.d.ts +1 -0
  232. package/build/build-cjs/src/shared/utils/localization-util.d.ts +51 -0
  233. package/build/build-cjs/src/shared/utils/query-string-util.d.ts +8 -0
  234. package/build/build-cjs/src/shared/utils/tide-api-utils.d.ts +4 -0
  235. package/build/build-cjs/src/shared/utils/use-media-query-util.d.ts +2 -0
  236. package/build/build-esm/index.js +40092 -0
  237. package/build/build-esm/src/booking-product/components/age-select.d.ts +8 -0
  238. package/build/build-esm/src/booking-product/components/amount-input.d.ts +10 -0
  239. package/build/build-esm/src/booking-product/components/date-range-picker/calendar-day.d.ts +13 -0
  240. package/build/build-esm/src/booking-product/components/date-range-picker/calendar.d.ts +19 -0
  241. package/build/build-esm/src/booking-product/components/date-range-picker/index.d.ts +25 -0
  242. package/build/build-esm/src/booking-product/components/dates.d.ts +14 -0
  243. package/build/build-esm/src/booking-product/components/footer.d.ts +10 -0
  244. package/build/build-esm/src/booking-product/components/header.d.ts +11 -0
  245. package/build/build-esm/src/booking-product/components/list-view.d.ts +8 -0
  246. package/build/build-esm/src/booking-product/components/product.d.ts +9 -0
  247. package/build/build-esm/src/booking-product/components/rating.d.ts +6 -0
  248. package/build/build-esm/src/booking-product/components/rooms.d.ts +10 -0
  249. package/build/build-esm/src/booking-product/constants.d.ts +1 -0
  250. package/build/build-esm/src/booking-product/index.d.ts +10 -0
  251. package/build/build-esm/src/booking-product/settings-context.d.ts +6 -0
  252. package/build/build-esm/src/booking-product/types.d.ts +61 -0
  253. package/build/build-esm/src/booking-product/utils/api.d.ts +7 -0
  254. package/build/build-esm/src/booking-product/utils/price.d.ts +1 -0
  255. package/build/build-esm/src/booking-wizard/api-settings-slice.d.ts +4 -0
  256. package/build/build-esm/src/booking-wizard/components/build-step-labels.d.ts +8 -0
  257. package/build/build-esm/src/booking-wizard/components/labeled-input.d.ts +18 -0
  258. package/build/build-esm/src/booking-wizard/components/labeled-select.d.ts +21 -0
  259. package/build/build-esm/src/booking-wizard/components/message.d.ts +9 -0
  260. package/build/build-esm/src/booking-wizard/components/multi-range-filter.d.ts +11 -0
  261. package/build/build-esm/src/booking-wizard/components/phone-input.d.ts +17 -0
  262. package/build/build-esm/src/booking-wizard/components/print-offer-button.d.ts +17 -0
  263. package/build/build-esm/src/booking-wizard/components/step-indicator.d.ts +6 -0
  264. package/build/build-esm/src/booking-wizard/components/step-route.d.ts +8 -0
  265. package/build/build-esm/src/booking-wizard/features/booking/api.d.ts +11 -0
  266. package/build/build-esm/src/booking-wizard/features/booking/booking-self-contained.d.ts +8 -0
  267. package/build/build-esm/src/booking-wizard/features/booking/booking-slice.d.ts +61 -0
  268. package/build/build-esm/src/booking-wizard/features/booking/booking.d.ts +8 -0
  269. package/build/build-esm/src/booking-wizard/features/booking/constants.d.ts +8 -0
  270. package/build/build-esm/src/booking-wizard/features/booking/selectors.d.ts +638 -0
  271. package/build/build-esm/src/booking-wizard/features/confirmation/confirmation.d.ts +5 -0
  272. package/build/build-esm/src/booking-wizard/features/error/error.d.ts +5 -0
  273. package/build/build-esm/src/booking-wizard/features/flight-options/flight-filter.d.ts +9 -0
  274. package/build/build-esm/src/booking-wizard/features/flight-options/flight-option-flight.d.ts +8 -0
  275. package/build/build-esm/src/booking-wizard/features/flight-options/flight-option-modal.d.ts +3 -0
  276. package/build/build-esm/src/booking-wizard/features/flight-options/flight-option.d.ts +10 -0
  277. package/build/build-esm/src/booking-wizard/features/flight-options/flight-utils.d.ts +6 -0
  278. package/build/build-esm/src/booking-wizard/features/flight-options/index.d.ts +5 -0
  279. package/build/build-esm/src/booking-wizard/features/price-details/price-details-api.d.ts +6 -0
  280. package/build/build-esm/src/booking-wizard/features/price-details/price-details-slice.d.ts +23 -0
  281. package/build/build-esm/src/booking-wizard/features/price-details/selectors.d.ts +378 -0
  282. package/build/build-esm/src/booking-wizard/features/price-details/util.d.ts +2 -0
  283. package/build/build-esm/src/booking-wizard/features/product-options/no-options.d.ts +3 -0
  284. package/build/build-esm/src/booking-wizard/features/product-options/none-option.d.ts +9 -0
  285. package/build/build-esm/src/booking-wizard/features/product-options/option-booking-airline-group.d.ts +8 -0
  286. package/build/build-esm/src/booking-wizard/features/product-options/option-booking-group.d.ts +12 -0
  287. package/build/build-esm/src/booking-wizard/features/product-options/option-item.d.ts +11 -0
  288. package/build/build-esm/src/booking-wizard/features/product-options/option-pax-card.d.ts +10 -0
  289. package/build/build-esm/src/booking-wizard/features/product-options/option-pax-group.d.ts +13 -0
  290. package/build/build-esm/src/booking-wizard/features/product-options/option-room.d.ts +11 -0
  291. package/build/build-esm/src/booking-wizard/features/product-options/option-unit-group.d.ts +13 -0
  292. package/build/build-esm/src/booking-wizard/features/product-options/option-units-card.d.ts +9 -0
  293. package/build/build-esm/src/booking-wizard/features/product-options/option-utils.d.ts +9 -0
  294. package/build/build-esm/src/booking-wizard/features/product-options/options-form.d.ts +5 -0
  295. package/build/build-esm/src/booking-wizard/features/room-options/index.d.ts +5 -0
  296. package/build/build-esm/src/booking-wizard/features/room-options/room-utils.d.ts +9 -0
  297. package/build/build-esm/src/booking-wizard/features/room-options/room.d.ts +12 -0
  298. package/build/build-esm/src/booking-wizard/features/room-options/traveler-rooms.d.ts +9 -0
  299. package/build/build-esm/src/booking-wizard/features/sidebar/index.d.ts +7 -0
  300. package/build/build-esm/src/booking-wizard/features/sidebar/sidebar-flight.d.ts +9 -0
  301. package/build/build-esm/src/booking-wizard/features/sidebar/sidebar-util.d.ts +13 -0
  302. package/build/build-esm/src/booking-wizard/features/sidebar/sidebar.d.ts +0 -0
  303. package/build/build-esm/src/booking-wizard/features/summary/summary-booking-option-pax.d.ts +7 -0
  304. package/build/build-esm/src/booking-wizard/features/summary/summary-booking-option-unit.d.ts +7 -0
  305. package/build/build-esm/src/booking-wizard/features/summary/summary-flight.d.ts +8 -0
  306. package/build/build-esm/src/booking-wizard/features/summary/summary-per-booking-option-group.d.ts +7 -0
  307. package/build/build-esm/src/booking-wizard/features/summary/summary-per-pax-option-group.d.ts +7 -0
  308. package/build/build-esm/src/booking-wizard/features/summary/summary-per-unit-option-group.d.ts +7 -0
  309. package/build/build-esm/src/booking-wizard/features/summary/summary-slice.d.ts +8 -0
  310. package/build/build-esm/src/booking-wizard/features/summary/summary.d.ts +5 -0
  311. package/build/build-esm/src/booking-wizard/features/travelers-form/controls/gender-control.d.ts +5 -0
  312. package/build/build-esm/src/booking-wizard/features/travelers-form/travelers-form-slice.d.ts +143 -0
  313. package/build/build-esm/src/booking-wizard/features/travelers-form/travelers-form-util.d.ts +7 -0
  314. package/build/build-esm/src/booking-wizard/features/travelers-form/travelers-form.d.ts +3 -0
  315. package/build/build-esm/src/booking-wizard/features/travelers-form/type-ahead-input.d.ts +16 -0
  316. package/build/build-esm/src/booking-wizard/features/travelers-form/validate-form.d.ts +4 -0
  317. package/build/build-esm/src/booking-wizard/index.d.ts +12 -0
  318. package/build/build-esm/src/booking-wizard/settings-context.d.ts +6 -0
  319. package/build/build-esm/src/booking-wizard/store.d.ts +26 -0
  320. package/build/build-esm/src/booking-wizard/types.d.ts +330 -0
  321. package/build/build-esm/src/booking-wizard/use-offer-printer.d.ts +13 -0
  322. package/build/build-esm/src/content/components/LanguageSwitcher.d.ts +12 -0
  323. package/build/build-esm/src/content/components/accordion.d.ts +9 -0
  324. package/build/build-esm/src/content/components/breadcrumb.d.ts +14 -0
  325. package/build/build-esm/src/content/components/contact.d.ts +3 -0
  326. package/build/build-esm/src/content/components/faq.d.ts +11 -0
  327. package/build/build-esm/src/content/components/gallery.d.ts +13 -0
  328. package/build/build-esm/src/content/components/image-with-text.d.ts +29 -0
  329. package/build/build-esm/src/content/components/itinerary-map-view.d.ts +48 -0
  330. package/build/build-esm/src/content/components/login.d.ts +3 -0
  331. package/build/build-esm/src/content/components/personal-contact-form.d.ts +3 -0
  332. package/build/build-esm/src/content/components/slider.d.ts +10 -0
  333. package/build/build-esm/src/content/error/error.d.ts +6 -0
  334. package/build/build-esm/src/content/featured-trips/featured-trip-card.d.ts +4 -0
  335. package/build/build-esm/src/content/featured-trips/index.d.ts +4 -0
  336. package/build/build-esm/src/content/featured-trips/types.d.ts +12 -0
  337. package/build/build-esm/src/content/features/content-page/content-page-self-contained.d.ts +6 -0
  338. package/build/build-esm/src/content/footer/index.d.ts +4 -0
  339. package/build/build-esm/src/content/footer/types.d.ts +27 -0
  340. package/build/build-esm/src/content/header/index.d.ts +4 -0
  341. package/build/build-esm/src/content/header/types.d.ts +22 -0
  342. package/build/build-esm/src/content/image-card-grid/index.d.ts +4 -0
  343. package/build/build-esm/src/content/image-card-grid/types.d.ts +12 -0
  344. package/build/build-esm/src/content/image-with-text-section/card.d.ts +4 -0
  345. package/build/build-esm/src/content/image-with-text-section/index.d.ts +4 -0
  346. package/build/build-esm/src/content/image-with-text-section/types.d.ts +19 -0
  347. package/build/build-esm/src/content/login/confirm-component.d.ts +4 -0
  348. package/build/build-esm/src/content/login/index.d.ts +4 -0
  349. package/build/build-esm/src/content/login/login-component.d.ts +4 -0
  350. package/build/build-esm/src/content/login/login-services.d.ts +6 -0
  351. package/build/build-esm/src/content/login/reset-password-component.d.ts +4 -0
  352. package/build/build-esm/src/content/login/types.d.ts +24 -0
  353. package/build/build-esm/src/content/navbar/index.d.ts +4 -0
  354. package/build/build-esm/src/content/navbar/placeholderData.d.ts +12 -0
  355. package/build/build-esm/src/content/navbar/types.d.ts +32 -0
  356. package/build/build-esm/src/form/components/fields/date-field.d.ts +4 -0
  357. package/build/build-esm/src/form/components/fields/dropdown-field.d.ts +4 -0
  358. package/build/build-esm/src/form/components/fields/field-label.d.ts +10 -0
  359. package/build/build-esm/src/form/components/fields/form-field.d.ts +11 -0
  360. package/build/build-esm/src/form/components/fields/info-text-field.d.ts +7 -0
  361. package/build/build-esm/src/form/components/fields/multi-dropdown-field.d.ts +4 -0
  362. package/build/build-esm/src/form/components/fields/multiline-field.d.ts +4 -0
  363. package/build/build-esm/src/form/components/fields/number-field.d.ts +4 -0
  364. package/build/build-esm/src/form/components/fields/optional-field.d.ts +4 -0
  365. package/build/build-esm/src/form/components/fields/radio-checkbox-field.d.ts +4 -0
  366. package/build/build-esm/src/form/components/fields/text-field.d.ts +4 -0
  367. package/build/build-esm/src/form/components/fields/yes-no-field.d.ts +4 -0
  368. package/build/build-esm/src/form/components/form-body.d.ts +9 -0
  369. package/build/build-esm/src/form/components/form-container.d.ts +3 -0
  370. package/build/build-esm/src/form/components/form-segment.d.ts +11 -0
  371. package/build/build-esm/src/form/components/form-step.d.ts +9 -0
  372. package/build/build-esm/src/form/form-configuration-context.d.ts +4 -0
  373. package/build/build-esm/src/form/form-types.d.ts +7 -0
  374. package/build/build-esm/src/form/hooks/use-form-state.d.ts +13 -0
  375. package/build/build-esm/src/form/index.d.ts +7 -0
  376. package/build/build-esm/src/form/types.d.ts +20 -0
  377. package/build/build-esm/src/form/utils/captcha-util.d.ts +3 -0
  378. package/build/build-esm/src/form/utils/form-initial-values-util.d.ts +3 -0
  379. package/build/build-esm/src/form/utils/form-submit-util.d.ts +4 -0
  380. package/build/build-esm/src/form/utils/form-validation-util.d.ts +8 -0
  381. package/build/build-esm/src/form/utils/html-util.d.ts +16 -0
  382. package/build/build-esm/src/form/utils/visibility-util.d.ts +4 -0
  383. package/build/build-esm/src/index.d.ts +29 -0
  384. package/build/build-esm/src/qsm/components/QSMContainer/qsm-container.d.ts +3 -0
  385. package/build/build-esm/src/qsm/components/date-picker/index.d.ts +3 -0
  386. package/build/build-esm/src/qsm/components/date-range-picker/calendar-day.d.ts +12 -0
  387. package/build/build-esm/src/qsm/components/date-range-picker/calendar.d.ts +24 -0
  388. package/build/build-esm/src/qsm/components/date-range-picker/index.d.ts +10 -0
  389. package/build/build-esm/src/qsm/components/double-search-input-group/index.d.ts +8 -0
  390. package/build/build-esm/src/qsm/components/item-picker/index.d.ts +13 -0
  391. package/build/build-esm/src/qsm/components/mobile-filter-modal/index.d.ts +3 -0
  392. package/build/build-esm/src/qsm/components/search-input/index.d.ts +15 -0
  393. package/build/build-esm/src/qsm/components/search-input-group/index.d.ts +13 -0
  394. package/build/build-esm/src/qsm/components/travel-class-picker/index.d.ts +3 -0
  395. package/build/build-esm/src/qsm/components/travel-input/index.d.ts +3 -0
  396. package/build/build-esm/src/qsm/components/travel-input-group/index.d.ts +3 -0
  397. package/build/build-esm/src/qsm/components/travel-nationality-picker/index.d.ts +3 -0
  398. package/build/build-esm/src/qsm/components/travel-type-picker/index.d.ts +3 -0
  399. package/build/build-esm/src/qsm/index.d.ts +7 -0
  400. package/build/build-esm/src/qsm/qsm-configuration-context.d.ts +4 -0
  401. package/build/build-esm/src/qsm/store/qsm-slice.d.ts +74 -0
  402. package/build/build-esm/src/qsm/store/qsm-store.d.ts +10 -0
  403. package/build/build-esm/src/qsm/types.d.ts +82 -0
  404. package/build/build-esm/src/search-results/components/book-packaging-entry/index.d.ts +9 -0
  405. package/build/build-esm/src/search-results/components/book-packaging-entry/wl-sidebar.d.ts +9 -0
  406. package/build/build-esm/src/search-results/components/excursions/day-by-day-excursions.d.ts +5 -0
  407. package/build/build-esm/src/search-results/components/excursions/excursion-details.d.ts +3 -0
  408. package/build/build-esm/src/search-results/components/excursions/excursion-results.d.ts +8 -0
  409. package/build/build-esm/src/search-results/components/filters/filters.d.ts +13 -0
  410. package/build/build-esm/src/search-results/components/filters/flight-filters.d.ts +8 -0
  411. package/build/build-esm/src/search-results/components/flight/flight-banner.d.ts +8 -0
  412. package/build/build-esm/src/search-results/components/flight/flight-card.d.ts +7 -0
  413. package/build/build-esm/src/search-results/components/flight/flight-leg.d.ts +7 -0
  414. package/build/build-esm/src/search-results/components/flight/flight-path.d.ts +6 -0
  415. package/build/build-esm/src/search-results/components/flight/flight-results.d.ts +8 -0
  416. package/build/build-esm/src/search-results/components/flight/flight-search-context/index.d.ts +39 -0
  417. package/build/build-esm/src/search-results/components/flight/flight-selection/independent-flight-option.d.ts +14 -0
  418. package/build/build-esm/src/search-results/components/flight/flight-selection/independent-flight-selection.d.ts +7 -0
  419. package/build/build-esm/src/search-results/components/flight/flight-selection/index.d.ts +8 -0
  420. package/build/build-esm/src/search-results/components/flight/flight-selection/paired-flight-option.d.ts +7 -0
  421. package/build/build-esm/src/search-results/components/flight/flight-selection/paired-flight-selection.d.ts +7 -0
  422. package/build/build-esm/src/search-results/components/group-tour/group-tour-card.d.ts +9 -0
  423. package/build/build-esm/src/search-results/components/group-tour/group-tour-results.d.ts +6 -0
  424. package/build/build-esm/src/search-results/components/hotel/hotel-accommodation-results.d.ts +7 -0
  425. package/build/build-esm/src/search-results/components/hotel/hotel-card.d.ts +8 -0
  426. package/build/build-esm/src/search-results/components/item-picker/index.d.ts +15 -0
  427. package/build/build-esm/src/search-results/components/itinerary/full-itinerary.d.ts +6 -0
  428. package/build/build-esm/src/search-results/components/itinerary/index.d.ts +10 -0
  429. package/build/build-esm/src/search-results/components/multi-range-filter.d.ts +11 -0
  430. package/build/build-esm/src/search-results/components/round-trip/round-trip-results.d.ts +5 -0
  431. package/build/build-esm/src/search-results/components/search-results-container/flight-search-results.d.ts +6 -0
  432. package/build/build-esm/src/search-results/components/search-results-container/search-results-container.d.ts +6 -0
  433. package/build/build-esm/src/search-results/components/spinner/spinner.d.ts +6 -0
  434. package/build/build-esm/src/search-results/components/tab-views/index.d.ts +5 -0
  435. package/build/build-esm/src/search-results/features/flights/flight-search-results-self-contained.d.ts +5 -0
  436. package/build/build-esm/src/search-results/features/hotels/hotel-flight-search-results-self-contained.d.ts +5 -0
  437. package/build/build-esm/src/search-results/features/hotels/hotel-search-results-self-contained.d.ts +5 -0
  438. package/build/build-esm/src/search-results/features/roundtrips/roundtrip-search-results-self-contained.d.ts +5 -0
  439. package/build/build-esm/src/search-results/index.d.ts +8 -0
  440. package/build/build-esm/src/search-results/search-results-configuration-context.d.ts +4 -0
  441. package/build/build-esm/src/search-results/store/search-results-selectors.d.ts +542 -0
  442. package/build/build-esm/src/search-results/store/search-results-slice.d.ts +57 -0
  443. package/build/build-esm/src/search-results/store/search-results-store.d.ts +10 -0
  444. package/build/build-esm/src/search-results/types.d.ts +185 -0
  445. package/build/build-esm/src/search-results/utils/flight-utils.d.ts +11 -0
  446. package/build/build-esm/src/search-results/utils/packaging-utils.d.ts +7 -0
  447. package/build/build-esm/src/search-results/utils/query-utils.d.ts +12 -0
  448. package/build/build-esm/src/search-results/utils/search-results-utils.d.ts +8 -0
  449. package/build/build-esm/src/shared/booking/booking-panel.d.ts +13 -0
  450. package/build/build-esm/src/shared/booking/product-card.d.ts +8 -0
  451. package/build/build-esm/src/shared/booking/shared-confirmation.d.ts +25 -0
  452. package/build/build-esm/src/shared/booking/shared-sidebar.d.ts +34 -0
  453. package/build/build-esm/src/shared/booking/step-indicators.d.ts +7 -0
  454. package/build/build-esm/src/shared/booking/summary.d.ts +44 -0
  455. package/build/build-esm/src/shared/booking/travelers-form.d.ts +79 -0
  456. package/build/build-esm/src/shared/components/flyin/accommodation-flyin.d.ts +7 -0
  457. package/build/build-esm/src/shared/components/flyin/flights-flyin.d.ts +7 -0
  458. package/build/build-esm/src/shared/components/flyin/flyin.d.ts +20 -0
  459. package/build/build-esm/src/shared/components/flyin/group-tour-flyin.d.ts +8 -0
  460. package/build/build-esm/src/shared/components/flyin/packaging-flights-flyin.d.ts +9 -0
  461. package/build/build-esm/src/shared/components/icon.d.ts +11 -0
  462. package/build/build-esm/src/shared/components/loader.d.ts +6 -0
  463. package/build/build-esm/src/shared/types.d.ts +16 -0
  464. package/build/build-esm/src/shared/utils/booking-summary.d.ts +2 -0
  465. package/build/build-esm/src/shared/utils/class-util.d.ts +1 -0
  466. package/build/build-esm/src/shared/utils/localization-util.d.ts +51 -0
  467. package/build/build-esm/src/shared/utils/query-string-util.d.ts +8 -0
  468. package/build/build-esm/src/shared/utils/tide-api-utils.d.ts +4 -0
  469. package/build/build-esm/src/shared/utils/use-media-query-util.d.ts +2 -0
  470. package/package.json +6 -2
  471. package/styles/abstracts/_mixins.scss +74 -74
  472. package/styles/abstracts/_variables.scss +57 -57
  473. package/styles/base/_fonts.scss +2 -2
  474. package/styles/base/_normalize.scss +227 -227
  475. package/styles/base/_typography.scss +35 -35
  476. package/styles/booking-joker-variables.scss +596 -596
  477. package/styles/booking-product-variables.scss +330 -330
  478. package/styles/booking-product.scss +438 -438
  479. package/styles/booking-qsm-variables.scss +501 -501
  480. package/styles/booking-qsm.scss +52 -52
  481. package/styles/booking-search-results-variables.scss +728 -728
  482. package/styles/booking-search-results.scss +53 -53
  483. package/styles/booking-wizard-variables.scss +603 -603
  484. package/styles/booking-wizard.scss +61 -61
  485. package/styles/components/_accordion.scss +67 -67
  486. package/styles/components/_animations.scss +39 -39
  487. package/styles/components/_base.scss +107 -107
  488. package/styles/components/_booking.scss +906 -906
  489. package/styles/components/_breadcrumb.scss +92 -92
  490. package/styles/components/_button.scss +238 -238
  491. package/styles/components/_checkbox.scss +230 -230
  492. package/styles/components/_contact.scss +255 -255
  493. package/styles/components/_content.scss +336 -336
  494. package/styles/components/_cta.scss +238 -238
  495. package/styles/components/_date-list.scss +41 -41
  496. package/styles/components/_date-range-picker.scss +223 -223
  497. package/styles/components/_decrement-increment.scss +35 -35
  498. package/styles/components/_dropdown.scss +77 -77
  499. package/styles/components/_error.scss +50 -50
  500. package/styles/components/_faq.scss +30 -30
  501. package/styles/components/_flight-option.scss +1432 -1432
  502. package/styles/components/_flyin.scss +830 -830
  503. package/styles/components/_footer.scss +135 -135
  504. package/styles/components/_form.scss +1693 -1693
  505. package/styles/components/_gallery.scss +317 -317
  506. package/styles/components/_header.scss +113 -113
  507. package/styles/components/_image-with-text.scss +206 -206
  508. package/styles/components/_img-slider.scss +175 -175
  509. package/styles/components/_info-message.scss +75 -75
  510. package/styles/components/_input.scss +35 -35
  511. package/styles/components/_list.scss +185 -185
  512. package/styles/components/_loader.scss +152 -152
  513. package/styles/components/_login.scss +140 -140
  514. package/styles/components/_map-view.scss +1100 -0
  515. package/styles/components/_mixins.scss +579 -579
  516. package/styles/components/_navbar.scss +765 -765
  517. package/styles/components/_passenger-picker.scss +306 -306
  518. package/styles/components/_phone-input.scss +8 -8
  519. package/styles/components/_placeholders.scss +165 -165
  520. package/styles/components/_pricing-summary.scss +163 -163
  521. package/styles/components/_qsm.scss +17 -17
  522. package/styles/components/_radiobutton.scss +170 -170
  523. package/styles/components/_search.scss +2089 -2089
  524. package/styles/components/_select-wrapper.scss +81 -81
  525. package/styles/components/_slider.scss +128 -128
  526. package/styles/components/_spinner.scss +29 -29
  527. package/styles/components/_step-indicators.scss +187 -187
  528. package/styles/components/_table.scss +81 -81
  529. package/styles/components/_tide-form.scss +541 -0
  530. package/styles/components/_tree.scss +648 -648
  531. package/styles/components/_typeahead.scss +275 -275
  532. package/styles/components/_variables.scss +89 -89
  533. package/styles/content-blocks-variables.scss +543 -507
  534. package/styles/content-blocks.scss +66 -65
  535. package/styles/font.scss +2 -2
  536. package/styles/qsm/_calendar.scss +274 -274
  537. package/styles/qsm/_qsm.scss +1097 -1097
  538. package/styles/search.scss +1200 -1200
  539. package/styles/tide-form-variables.scss +275 -0
  540. package/styles/tide-form.scss +56 -0
  541. package/.claude/settings.local.json +0 -11
  542. package/.husky/pre-commit +0 -22
  543. package/.nvmrc +0 -1
  544. package/.prettierignore +0 -32
  545. package/.prettierrc +0 -9
  546. package/.vs/ProjectSettings.json +0 -3
  547. package/.vs/VSWorkspaceState.json +0 -5
  548. package/.vs/slnx.sqlite +0 -0
  549. package/.vs/tide-booking-component/FileContentIndex/5099fed1-8dd7-4fc6-b744-64dad71a8a83.vsidx +0 -0
  550. package/.vs/tide-booking-component/FileContentIndex/d4b119f1-fe2e-4d31-b8af-b66c5a71cfeb.vsidx +0 -0
  551. package/.vs/tide-booking-component/FileContentIndex/f9097dbd-6c75-40d4-82b3-c6dd4aa48f0c.vsidx +0 -0
  552. package/.vs/tide-booking-component/config/applicationhost.config +0 -1021
  553. package/.vs/tide-booking-component/v17/.wsuo +0 -0
  554. package/MEMORY.md +0 -97
  555. package/NEXTSTEPS.md +0 -94
  556. package/rollup.config.js +0 -16
  557. package/src/booking-product/components/age-select.tsx +0 -35
  558. package/src/booking-product/components/amount-input.tsx +0 -51
  559. package/src/booking-product/components/date-range-picker/calendar-day.tsx +0 -46
  560. package/src/booking-product/components/date-range-picker/calendar.tsx +0 -155
  561. package/src/booking-product/components/date-range-picker/index.tsx +0 -185
  562. package/src/booking-product/components/dates.tsx +0 -153
  563. package/src/booking-product/components/footer.tsx +0 -54
  564. package/src/booking-product/components/header.tsx +0 -58
  565. package/src/booking-product/components/list-view.tsx +0 -54
  566. package/src/booking-product/components/product.tsx +0 -447
  567. package/src/booking-product/components/rating.tsx +0 -21
  568. package/src/booking-product/components/rooms.tsx +0 -192
  569. package/src/booking-product/constants.ts +0 -1
  570. package/src/booking-product/index.tsx +0 -21
  571. package/src/booking-product/settings-context.ts +0 -16
  572. package/src/booking-product/types.ts +0 -68
  573. package/src/booking-product/utils/api.ts +0 -26
  574. package/src/booking-product/utils/price.ts +0 -28
  575. package/src/booking-wizard/api-settings-slice.ts +0 -24
  576. package/src/booking-wizard/components/labeled-input.tsx +0 -56
  577. package/src/booking-wizard/components/labeled-select.tsx +0 -54
  578. package/src/booking-wizard/components/message.tsx +0 -21
  579. package/src/booking-wizard/components/multi-range-filter.tsx +0 -99
  580. package/src/booking-wizard/components/phone-input.tsx +0 -146
  581. package/src/booking-wizard/components/print-offer-button.tsx +0 -53
  582. package/src/booking-wizard/components/step-indicator.tsx +0 -36
  583. package/src/booking-wizard/components/step-route.tsx +0 -51
  584. package/src/booking-wizard/declarations.d.ts +0 -4
  585. package/src/booking-wizard/features/booking/api.ts +0 -44
  586. package/src/booking-wizard/features/booking/booking-self-contained.tsx +0 -364
  587. package/src/booking-wizard/features/booking/booking-slice.ts +0 -634
  588. package/src/booking-wizard/features/booking/booking.tsx +0 -388
  589. package/src/booking-wizard/features/booking/constants.ts +0 -16
  590. package/src/booking-wizard/features/booking/selectors.ts +0 -411
  591. package/src/booking-wizard/features/confirmation/confirmation.tsx +0 -46
  592. package/src/booking-wizard/features/error/error.tsx +0 -71
  593. package/src/booking-wizard/features/flight-options/flight-filter.tsx +0 -371
  594. package/src/booking-wizard/features/flight-options/flight-option-flight.tsx +0 -354
  595. package/src/booking-wizard/features/flight-options/flight-option-modal.tsx +0 -211
  596. package/src/booking-wizard/features/flight-options/flight-option.tsx +0 -57
  597. package/src/booking-wizard/features/flight-options/flight-utils.ts +0 -423
  598. package/src/booking-wizard/features/flight-options/index.tsx +0 -170
  599. package/src/booking-wizard/features/price-details/price-details-api.ts +0 -20
  600. package/src/booking-wizard/features/price-details/price-details-slice.ts +0 -79
  601. package/src/booking-wizard/features/price-details/selectors.ts +0 -118
  602. package/src/booking-wizard/features/price-details/util.ts +0 -115
  603. package/src/booking-wizard/features/product-options/no-options.tsx +0 -18
  604. package/src/booking-wizard/features/product-options/none-option.tsx +0 -73
  605. package/src/booking-wizard/features/product-options/option-booking-airline-group.tsx +0 -53
  606. package/src/booking-wizard/features/product-options/option-booking-group.tsx +0 -152
  607. package/src/booking-wizard/features/product-options/option-item.tsx +0 -236
  608. package/src/booking-wizard/features/product-options/option-pax-card.tsx +0 -159
  609. package/src/booking-wizard/features/product-options/option-pax-group.tsx +0 -122
  610. package/src/booking-wizard/features/product-options/option-room.tsx +0 -226
  611. package/src/booking-wizard/features/product-options/option-unit-group.tsx +0 -138
  612. package/src/booking-wizard/features/product-options/option-units-card.tsx +0 -148
  613. package/src/booking-wizard/features/product-options/options-form.tsx +0 -382
  614. package/src/booking-wizard/features/room-options/index.tsx +0 -132
  615. package/src/booking-wizard/features/room-options/room-utils.ts +0 -154
  616. package/src/booking-wizard/features/room-options/room.tsx +0 -123
  617. package/src/booking-wizard/features/room-options/traveler-rooms.tsx +0 -64
  618. package/src/booking-wizard/features/sidebar/index.tsx +0 -89
  619. package/src/booking-wizard/features/sidebar/sidebar-flight.tsx +0 -66
  620. package/src/booking-wizard/features/sidebar/sidebar-util.ts +0 -143
  621. package/src/booking-wizard/features/sidebar/sidebar.tsx +0 -349
  622. package/src/booking-wizard/features/summary/summary-booking-option-pax.tsx +0 -23
  623. package/src/booking-wizard/features/summary/summary-booking-option-unit.tsx +0 -23
  624. package/src/booking-wizard/features/summary/summary-flight.tsx +0 -36
  625. package/src/booking-wizard/features/summary/summary-per-booking-option-group.tsx +0 -60
  626. package/src/booking-wizard/features/summary/summary-per-pax-option-group.tsx +0 -56
  627. package/src/booking-wizard/features/summary/summary-per-unit-option-group.tsx +0 -58
  628. package/src/booking-wizard/features/summary/summary-slice.ts +0 -27
  629. package/src/booking-wizard/features/summary/summary.tsx +0 -578
  630. package/src/booking-wizard/features/travelers-form/controls/gender-control.tsx +0 -60
  631. package/src/booking-wizard/features/travelers-form/travelers-form-slice.ts +0 -157
  632. package/src/booking-wizard/features/travelers-form/travelers-form-util.ts +0 -10
  633. package/src/booking-wizard/features/travelers-form/travelers-form.tsx +0 -181
  634. package/src/booking-wizard/features/travelers-form/type-ahead-input.tsx +0 -85
  635. package/src/booking-wizard/features/travelers-form/validate-form.ts +0 -178
  636. package/src/booking-wizard/index.tsx +0 -27
  637. package/src/booking-wizard/settings-context.ts +0 -64
  638. package/src/booking-wizard/store.ts +0 -26
  639. package/src/booking-wizard/types.ts +0 -350
  640. package/src/booking-wizard/use-offer-printer.ts +0 -108
  641. package/src/content/components/LanguageSwitcher.tsx +0 -158
  642. package/src/content/components/accordion.tsx +0 -30
  643. package/src/content/components/breadcrumb.tsx +0 -67
  644. package/src/content/components/contact.tsx +0 -210
  645. package/src/content/components/faq.tsx +0 -42
  646. package/src/content/components/gallery.tsx +0 -153
  647. package/src/content/components/image-with-text.tsx +0 -119
  648. package/src/content/components/login.tsx +0 -161
  649. package/src/content/components/personal-contact-form.tsx +0 -809
  650. package/src/content/components/slider.tsx +0 -237
  651. package/src/content/error/error.tsx +0 -27
  652. package/src/content/featured-trips/featured-trip-card.tsx +0 -48
  653. package/src/content/featured-trips/index.tsx +0 -19
  654. package/src/content/featured-trips/types.ts +0 -13
  655. package/src/content/features/content-page/content-page-self-contained.tsx +0 -895
  656. package/src/content/footer/index.tsx +0 -159
  657. package/src/content/footer/types.ts +0 -36
  658. package/src/content/header/index.tsx +0 -43
  659. package/src/content/header/types.ts +0 -26
  660. package/src/content/image-card-grid/index.tsx +0 -34
  661. package/src/content/image-card-grid/types.ts +0 -13
  662. package/src/content/image-with-text-section/card.tsx +0 -58
  663. package/src/content/image-with-text-section/index.tsx +0 -22
  664. package/src/content/image-with-text-section/types.ts +0 -20
  665. package/src/content/login/confirm-component.tsx +0 -149
  666. package/src/content/login/index.tsx +0 -70
  667. package/src/content/login/login-component.tsx +0 -159
  668. package/src/content/login/login-services.ts +0 -109
  669. package/src/content/login/reset-password-component.tsx +0 -191
  670. package/src/content/login/types.ts +0 -29
  671. package/src/content/navbar/index.tsx +0 -354
  672. package/src/content/navbar/placeholderData.tsx +0 -173
  673. package/src/content/navbar/types.ts +0 -43
  674. package/src/qsm/components/QSMContainer/qsm-container.tsx +0 -671
  675. package/src/qsm/components/date-picker/index.tsx +0 -152
  676. package/src/qsm/components/date-range-picker/calendar-day.tsx +0 -49
  677. package/src/qsm/components/date-range-picker/calendar.tsx +0 -211
  678. package/src/qsm/components/date-range-picker/index.tsx +0 -404
  679. package/src/qsm/components/double-search-input-group/index.tsx +0 -78
  680. package/src/qsm/components/item-picker/index.tsx +0 -65
  681. package/src/qsm/components/mobile-filter-modal/index.tsx +0 -321
  682. package/src/qsm/components/search-input/index.tsx +0 -91
  683. package/src/qsm/components/search-input-group/index.tsx +0 -209
  684. package/src/qsm/components/travel-class-picker/index.tsx +0 -28
  685. package/src/qsm/components/travel-input/index.tsx +0 -241
  686. package/src/qsm/components/travel-input-group/index.tsx +0 -114
  687. package/src/qsm/components/travel-nationality-picker/index.tsx +0 -28
  688. package/src/qsm/components/travel-type-picker/index.tsx +0 -28
  689. package/src/qsm/index.tsx +0 -26
  690. package/src/qsm/qsm-configuration-context.ts +0 -31
  691. package/src/qsm/store/qsm-slice.ts +0 -282
  692. package/src/qsm/store/qsm-store.ts +0 -13
  693. package/src/qsm/types.ts +0 -110
  694. package/src/search-results/components/book-packaging-entry/index.tsx +0 -266
  695. package/src/search-results/components/book-packaging-entry/wl-sidebar.tsx +0 -173
  696. package/src/search-results/components/excursions/day-by-day-excursions.tsx +0 -168
  697. package/src/search-results/components/excursions/excursion-details.tsx +0 -340
  698. package/src/search-results/components/excursions/excursion-results.tsx +0 -186
  699. package/src/search-results/components/filters/filters.tsx +0 -229
  700. package/src/search-results/components/filters/flight-filters.tsx +0 -671
  701. package/src/search-results/components/flight/flight-banner.tsx +0 -35
  702. package/src/search-results/components/flight/flight-card.tsx +0 -38
  703. package/src/search-results/components/flight/flight-leg.tsx +0 -61
  704. package/src/search-results/components/flight/flight-path.tsx +0 -23
  705. package/src/search-results/components/flight/flight-results.tsx +0 -208
  706. package/src/search-results/components/flight/flight-search-context/index.tsx +0 -628
  707. package/src/search-results/components/flight/flight-selection/independent-flight-option.tsx +0 -168
  708. package/src/search-results/components/flight/flight-selection/independent-flight-selection.tsx +0 -184
  709. package/src/search-results/components/flight/flight-selection/index.tsx +0 -19
  710. package/src/search-results/components/flight/flight-selection/paired-flight-option.tsx +0 -255
  711. package/src/search-results/components/flight/flight-selection/paired-flight-selection.tsx +0 -38
  712. package/src/search-results/components/group-tour/group-tour-card.tsx +0 -105
  713. package/src/search-results/components/group-tour/group-tour-results.tsx +0 -62
  714. package/src/search-results/components/hotel/hotel-accommodation-results.tsx +0 -244
  715. package/src/search-results/components/hotel/hotel-card.tsx +0 -110
  716. package/src/search-results/components/item-picker/index.tsx +0 -81
  717. package/src/search-results/components/itinerary/full-itinerary.tsx +0 -374
  718. package/src/search-results/components/itinerary/index.tsx +0 -437
  719. package/src/search-results/components/multi-range-filter.tsx +0 -104
  720. package/src/search-results/components/round-trip/round-trip-results.tsx +0 -199
  721. package/src/search-results/components/search-results-container/flight-search-results.tsx +0 -137
  722. package/src/search-results/components/search-results-container/search-results-container.tsx +0 -1764
  723. package/src/search-results/components/spinner/spinner.tsx +0 -24
  724. package/src/search-results/components/tab-views/index.tsx +0 -53
  725. package/src/search-results/features/flights/flight-search-results-self-contained.tsx +0 -294
  726. package/src/search-results/features/hotels/hotel-flight-search-results-self-contained.tsx +0 -143
  727. package/src/search-results/features/hotels/hotel-search-results-self-contained.tsx +0 -220
  728. package/src/search-results/features/roundtrips/roundtrip-search-results-self-contained.tsx +0 -65
  729. package/src/search-results/index.tsx +0 -25
  730. package/src/search-results/store/search-results-selectors.ts +0 -84
  731. package/src/search-results/store/search-results-slice.ts +0 -351
  732. package/src/search-results/store/search-results-store.ts +0 -13
  733. package/src/search-results/types.ts +0 -266
  734. package/src/search-results/utils/flight-utils.ts +0 -98
  735. package/src/search-results/utils/packaging-utils.ts +0 -75
  736. package/src/search-results/utils/query-utils.ts +0 -153
  737. package/src/search-results/utils/search-results-utils.ts +0 -538
  738. package/src/shared/booking/booking-panel.tsx +0 -25
  739. package/src/shared/booking/product-card.tsx +0 -23
  740. package/src/shared/booking/shared-confirmation.tsx +0 -105
  741. package/src/shared/booking/shared-sidebar.tsx +0 -432
  742. package/src/shared/booking/step-indicators.tsx +0 -30
  743. package/src/shared/booking/summary.tsx +0 -382
  744. package/src/shared/booking/travelers-form.tsx +0 -874
  745. package/src/shared/components/flyin/accommodation-flyin.tsx +0 -424
  746. package/src/shared/components/flyin/flights-flyin.tsx +0 -508
  747. package/src/shared/components/flyin/flyin.tsx +0 -241
  748. package/src/shared/components/flyin/group-tour-flyin.tsx +0 -294
  749. package/src/shared/components/flyin/packaging-flights-flyin.tsx +0 -171
  750. package/src/shared/components/icon.tsx +0 -1114
  751. package/src/shared/components/loader.tsx +0 -16
  752. package/src/shared/tide-sprites.svg +0 -117
  753. package/src/shared/translations/ar-SA.json +0 -398
  754. package/src/shared/translations/da-DK.json +0 -398
  755. package/src/shared/translations/de-DE.json +0 -398
  756. package/src/shared/translations/en-GB.json +0 -402
  757. package/src/shared/translations/es-ES.json +0 -398
  758. package/src/shared/translations/fr-BE.json +0 -402
  759. package/src/shared/translations/fr-FR.json +0 -398
  760. package/src/shared/translations/is-IS.json +0 -398
  761. package/src/shared/translations/it-IT.json +0 -398
  762. package/src/shared/translations/ja-JP.json +0 -398
  763. package/src/shared/translations/nl-BE.json +0 -402
  764. package/src/shared/translations/nl-NL.json +0 -398
  765. package/src/shared/translations/no-NO.json +0 -398
  766. package/src/shared/translations/pl-PL.json +0 -398
  767. package/src/shared/translations/pt-PT.json +0 -398
  768. package/src/shared/translations/sv-SE.json +0 -398
  769. package/src/shared/types.ts +0 -31
  770. package/src/shared/utils/booking-summary.tsx +0 -57
  771. package/src/shared/utils/class-util.ts +0 -7
  772. package/src/shared/utils/localization-util.ts +0 -316
  773. package/src/shared/utils/query-string-util.ts +0 -91
  774. package/src/shared/utils/tide-api-utils.ts +0 -42
  775. package/src/shared/utils/use-media-query-util.ts +0 -19
  776. package/tsconfig.json +0 -24
@@ -1,1764 +0,0 @@
1
- import React, { useContext, useEffect, useRef, useState } from 'react';
2
- import { useDispatch, useSelector } from 'react-redux';
3
- import { SearchResultsRootState } from '../../store/search-results-store';
4
- import SearchResultsConfigurationContext from '../../search-results-configuration-context';
5
- import {
6
- resetFilters,
7
- setSortType,
8
- setResults,
9
- setIsLoading,
10
- setSelectedSearchResult,
11
- setBookingPackageDetails,
12
- setFlyInIsOpen,
13
- setFilteredResults,
14
- setPackagingAccoResults,
15
- setFilteredPackagingAccoResults,
16
- setPackagingAccoSearchDetails,
17
- setEditablePackagingEntry,
18
- setTransactionId,
19
- setFlyInType,
20
- setPriceDetails,
21
- setItinerary,
22
- setFlightsLoading,
23
- setPackagingFlightResults,
24
- setSelectedPackagingFlight,
25
- setSelectedPackagingAccoResult,
26
- setSelectedOutwardKey,
27
- setSelectedReturnKey,
28
- setFilteredPackagingFlightResults,
29
- setInitialFlightFilters,
30
- resetFlightFilters,
31
- setFilters,
32
- setInitialFilters,
33
- setBookPackagingEntry
34
- } from '../../store/search-results-slice';
35
- import { FlyInType, SearchSeed, SortByType } from '../../types';
36
- import useMediaQuery from '../../../shared/utils/use-media-query-util';
37
- import ItemPicker from '../item-picker';
38
- import {
39
- TideClientConfig,
40
- details,
41
- search,
42
- searchPackagingAccommodations,
43
- BookingPackageDestination,
44
- BookingPackageDetailsRequest,
45
- BookingPackagePax,
46
- BookingPackageRequest,
47
- BookingPackageRequestRoom,
48
- BookingPackageSearchRequest,
49
- PackagingAccommodationRequest,
50
- PackagingDestination,
51
- PortalQsmType,
52
- PackagingEntry,
53
- startTransaction,
54
- PackagingEntryLine,
55
- getPriceDetails,
56
- getItinerary,
57
- FlightSearchRequest,
58
- searchPackagingFlights,
59
- PackagingFlightResponse,
60
- PackagingAccommodationResponse,
61
- FlightSearchResponseFlightSegment,
62
- PackagingEntryLineFlightLine,
63
- PackagingEntryAddress,
64
- PackagingEntryPax,
65
- PackagingEntryRoom,
66
- PackagingRequestBase
67
- } from '@qite/tide-client';
68
- import { getDateFromParams, getNumberFromParams, getRoomsFromParams, getStringFromParams } from '../../../shared/utils/query-string-util';
69
- import { concat, first, isEmpty, last, range } from 'lodash';
70
- import { Room } from '../../../booking-wizard/types';
71
- import Icon from '../../../shared/components/icon';
72
- import Itinerary from '../itinerary';
73
- import TabViews from '../tab-views';
74
- import FlyIn from '../../../shared/components/flyin/flyin';
75
- import HotelAccommodationResults from '../hotel/hotel-accommodation-results';
76
- import RoundTripResults from '../round-trip/round-trip-results';
77
- import { dateToDateStruct, findSortByType, getSortingName, getTranslations } from '../../../shared/utils/localization-util';
78
- import { FlightSearchProvider } from '../flight/flight-search-context';
79
- import FlightResultsContainer from './flight-search-results';
80
- import Filters from '../filters/filters';
81
- import GroupTourResults from '../group-tour/group-tour-results';
82
- import {
83
- applyFilters,
84
- applyFiltersToPackageAccoResults,
85
- applyFiltersToPackageFlightResults,
86
- enrichFiltersWithPackageAccoResults,
87
- enrichFiltersWithPackageFlightResults,
88
- enrichFiltersWithResults
89
- } from '../../utils/search-results-utils';
90
- import {
91
- ACCOMMODATION_SERVICE_TYPE,
92
- EXCURSION_SERVICE_TYPE,
93
- FLIGHT_SERVICE_TYPE,
94
- getDepartureAirportFromEntry,
95
- getDestinationAirportFromEntry,
96
- getPackagingRequestRoomsFromBookingRooms,
97
- getRequestRoomsFromPackagingEntry,
98
- GROUP_TOUR_SERVICE_TYPE,
99
- parseHotelId,
100
- toDateOnlyString
101
- } from '../../utils/query-utils';
102
- import { getRequestRoomsFromPackagingSegments, getSelectedOptionsPerRoom } from '../../utils/packaging-utils';
103
- import FullItinerary from '../itinerary/full-itinerary';
104
- import { getFlightKey } from '../../utils/flight-utils';
105
- import IndependentFlightOption from '../flight/flight-selection/independent-flight-option';
106
- import { Spinner } from '../../..';
107
- import {
108
- selectSelectedCombinationFlight,
109
- selectSelectedOutward,
110
- selectSelectedOutwardKey,
111
- selectSelectedReturn,
112
- selectSelectedReturnKey,
113
- selectUniqueOutwardFlights,
114
- selectUniqueReturnFlights
115
- } from '../../store/search-results-selectors';
116
- import DayByDayExcursions from '../excursions/day-by-day-excursions';
117
- import BookPackagingEntry from '../book-packaging-entry';
118
- import { format } from 'date-fns';
119
-
120
- type BuildPackagingEntryPartialArgs = {
121
- sourceEntry: PackagingEntry | null | undefined;
122
- selectedHotelCode: string | null | undefined;
123
- accommodationResults: PackagingAccommodationResponse[];
124
- selectedFlight: PackagingFlightResponse | null;
125
- confirmedExcursionsByDay: Record<string, PackagingAccommodationResponse[]>;
126
- seed: SearchSeed;
127
- transactionId: string;
128
- language: string;
129
- };
130
-
131
- interface SearchResultsContainerProps {
132
- onBookingStarted?: () => void;
133
- }
134
-
135
- const SearchResultsContainer: React.FC<SearchResultsContainerProps> = ({ onBookingStarted }) => {
136
- const currentSearch = typeof window !== 'undefined' ? window.location.search : '';
137
-
138
- const dispatch = useDispatch();
139
-
140
- const context = useContext(SearchResultsConfigurationContext);
141
- const translations = getTranslations(context?.languageCode ?? 'en-GB');
142
-
143
- const {
144
- results,
145
- filteredResults,
146
- packagingAccoResults,
147
- filteredPackagingAccoResults,
148
- isLoading,
149
- flightsLoading,
150
- initialFilters,
151
- filters,
152
- flightFilters,
153
- selectedSortType,
154
- selectedFlightSortType,
155
- selectedSearchResult,
156
- selectedPackagingAccoResultCode,
157
- flyInIsOpen,
158
- packagingAccoSearchDetails,
159
- editablePackagingEntry,
160
- transactionId,
161
- flyInType,
162
- packagingFlightResults,
163
- confirmedExcursionsByDay,
164
- bookPackagingEntry
165
- } = useSelector((state: SearchResultsRootState) => state.searchResults);
166
-
167
- const isMobile = useMediaQuery('(max-width: 1200px)');
168
-
169
- const [initialFiltersSet, setInitialFiltersSet] = useState(false);
170
- const [initialFlightFiltersSet, setInitialFlightFiltersSet] = useState(false);
171
- const [filtersOpen, setFiltersOpen] = useState(false);
172
-
173
- const [detailsIsLoading, setDetailsIsLoading] = useState(false);
174
- const [pricesAreLoading, setPricesAreLoading] = useState(false);
175
- const [itineraryIsLoading, setItineraryIsLoading] = useState(false);
176
-
177
- const [itineraryOpen, setItineraryOpen] = useState(false);
178
- const [isBookingConfirmation, setIsBookingConfirmation] = useState(false);
179
-
180
- const [selectedAccommodationSeed, setSelectedAccommodationSeed] = useState<SearchSeed | null>(null);
181
-
182
- const skipInitialPackagingAccoDetailsRef = useRef(false);
183
-
184
- const panelRef = useRef<HTMLDivElement | null>(null);
185
-
186
- const sortByTypes: SortByType[] = [
187
- { direction: 'asc', label: 'default' } as SortByType,
188
- { direction: 'asc', label: 'price' } as SortByType,
189
- { direction: 'desc', label: 'price' } as SortByType
190
- ];
191
-
192
- const handleFlyInToggle = (isOpen: boolean) => {
193
- dispatch(setFlyInIsOpen(isOpen));
194
- };
195
-
196
- const handleSortChange = (newSortKey: string, direction?: string) => {
197
- const newSortByType = findSortByType(sortByTypes, newSortKey, direction ?? 'asc');
198
- if (newSortByType) {
199
- dispatch(setSortType(newSortByType));
200
- }
201
- };
202
-
203
- const getRequestRooms = (rooms: Room[] | null) => {
204
- if (!rooms) {
205
- // Fall back to 2 adults
206
- var room = { index: 0, pax: [] } as BookingPackageRequestRoom;
207
- range(0, 2).forEach(() => {
208
- room.pax.push({
209
- age: 30
210
- } as BookingPackagePax);
211
- });
212
- return [room];
213
- }
214
-
215
- const requestRooms = rooms?.map((x, i) => {
216
- var room = { index: i, pax: [] } as BookingPackageRequestRoom;
217
- range(0, x.adults).forEach(() => {
218
- room.pax.push({
219
- age: 30
220
- } as BookingPackagePax);
221
- });
222
- x.childAges.forEach((x) => {
223
- room.pax.push({
224
- age: x
225
- } as BookingPackagePax);
226
- });
227
- return room;
228
- });
229
-
230
- return requestRooms;
231
- };
232
-
233
- const buildSearchFromSeed = (seed: SearchSeed): BookingPackageRequest<BookingPackageSearchRequest> => {
234
- const country = seed.country;
235
- const region = seed.region;
236
- const oord = seed.oord;
237
- const city = seed.location;
238
- const hotel = seed.hotel;
239
- const tagId = seed.tagId;
240
-
241
- if (typeof window !== 'undefined') {
242
- window.scrollTo(0, 0);
243
- }
244
-
245
- let destinationId: number | null = null;
246
- let destinationIsCountry = false;
247
- let destinationIsRegion = false;
248
- let destinationIsOord = false;
249
- let destinationIsLocation = false;
250
-
251
- if (country) {
252
- destinationId = country;
253
- destinationIsCountry = true;
254
- } else if (region) {
255
- destinationId = region;
256
- destinationIsRegion = true;
257
- } else if (oord) {
258
- destinationId = oord;
259
- destinationIsOord = true;
260
- } else if (city) {
261
- destinationId = city;
262
- destinationIsLocation = true;
263
- }
264
-
265
- return {
266
- officeId: 1,
267
- agentId: context?.agentId,
268
- payload: {
269
- catalogueIds: context!.searchConfiguration.defaultCatalogueId
270
- ? [context!.searchConfiguration.defaultCatalogueId]
271
- : context?.tideConnection?.catalogueIds ?? [1],
272
- serviceType:
273
- context!.searchConfiguration.qsmType === PortalQsmType.Accommodation || context!.searchConfiguration.qsmType === PortalQsmType.AccommodationAndFlight
274
- ? ACCOMMODATION_SERVICE_TYPE
275
- : context!.searchConfiguration.qsmType === PortalQsmType.Flight
276
- ? FLIGHT_SERVICE_TYPE
277
- : context!.searchConfiguration.qsmType === PortalQsmType.RoundTrip
278
- ? GROUP_TOUR_SERVICE_TYPE
279
- : undefined,
280
- searchType: context!.searchConfiguration.qsmType === PortalQsmType.GroupTour ? 1 : 0,
281
- destination: {
282
- id: Number(destinationId),
283
- isCountry: destinationIsCountry,
284
- isRegion: destinationIsRegion,
285
- isOord: destinationIsOord,
286
- isLocation: destinationIsLocation
287
- } as BookingPackageDestination,
288
- rooms: seed.rooms,
289
- fromDate: seed.fromDate,
290
- toDate: seed.toDate,
291
- earliestFromOffset: 0,
292
- latestToOffset: 0,
293
- includeFlights: context!.searchConfiguration.qsmType === PortalQsmType.AccommodationAndFlight,
294
- useExactDates: context?.searchConfiguration.qsmType === PortalQsmType.GroupTour ? false : true,
295
- onlyCachedResults: false,
296
- includeAllAllotments: true,
297
- productIds: hotel ? [hotel] : [],
298
- productTagIds: tagId ? [tagId] : []
299
- }
300
- };
301
- };
302
-
303
- const buildPackagingAccommodationRequestFromSeed = (seed: SearchSeed, currentTransactionId: string): PackagingAccommodationRequest => {
304
- const country = seed.country;
305
- const region = seed.region;
306
- const oord = seed.oord;
307
- const city = seed.location;
308
- const hotelCode = seed.hotelCode ?? (seed.hotel ? seed.hotel.toString() : '');
309
- const tagId = seed.tagId;
310
- const destinationAirport = seed.destinationAirport;
311
-
312
- if (typeof window !== 'undefined') {
313
- window.scrollTo(0, 0);
314
- }
315
-
316
- let destinationId: number | null = null;
317
- let destinationIsCountry = false;
318
- let destinationIsRegion = false;
319
- let destinationIsOord = false;
320
- let destinationIsLocation = false;
321
- let destinationCode: string | null = null;
322
- let destinationIsAirport = false;
323
-
324
- if (city) {
325
- destinationId = city;
326
- destinationIsLocation = true;
327
- } else if (oord) {
328
- destinationId = oord;
329
- destinationIsOord = true;
330
- } else if (region) {
331
- destinationId = region;
332
- destinationIsRegion = true;
333
- } else if (country) {
334
- destinationId = country;
335
- destinationIsCountry = true;
336
- } else if (destinationAirport) {
337
- destinationCode = destinationAirport;
338
- destinationIsAirport = true;
339
- }
340
-
341
- return {
342
- transactionId: currentTransactionId,
343
- officeId: context?.tideConnection?.officeId ?? 1,
344
- agentId: context?.agentId ?? null,
345
- catalogueId: context!.searchConfiguration.defaultCatalogueId ?? first(context?.tideConnection?.catalogueIds) ?? 1,
346
- searchConfigurationId: context!.searchConfiguration.id,
347
- language: context!.languageCode ?? 'en-GB',
348
- serviceType: ACCOMMODATION_SERVICE_TYPE,
349
- fromDate: seed.fromDate,
350
- toDate: seed.toDate,
351
- destination: {
352
- id: Number(destinationId),
353
- isCountry: destinationIsCountry,
354
- isRegion: destinationIsRegion,
355
- isOord: destinationIsOord,
356
- isLocation: destinationIsLocation,
357
- isAirport: destinationIsAirport,
358
- code: destinationCode
359
- } as PackagingDestination,
360
- productCode: '',
361
- rooms: getPackagingRequestRoomsFromBookingRooms(seed.rooms),
362
- tagIds: tagId ? [tagId] : []
363
- };
364
- };
365
-
366
- const buildPackagingFlightRequestFromSeed = (seed: SearchSeed, currentTransactionId: string): FlightSearchRequest => {
367
- if (typeof window !== 'undefined') {
368
- window.scrollTo(0, 0);
369
- }
370
- var adults = seed.rooms.flatMap((x) => x.pax).filter((x) => x.age! >= 12).length;
371
- var kids = seed.rooms.flatMap((x) => x.pax).filter((x) => x.age! >= 2 && x.age! < 12).length;
372
- var babies = seed.rooms.flatMap((x) => x.pax).filter((x) => x.age! < 2).length;
373
-
374
- return {
375
- transactionId: currentTransactionId,
376
- officeId: context?.tideConnection?.officeId ?? 1,
377
- catalogueId: context!.searchConfiguration.defaultCatalogueId ?? first(context?.tideConnection?.catalogueIds) ?? 1,
378
- departureAirportCode: seed.departureAirport,
379
- arrivalAirportCode: seed.destinationAirport,
380
- returnAirportCode: seed.returnAirport,
381
- luggageIncluded: null,
382
- maxStops: null,
383
- travelClass: seed.travelClass,
384
- pax: concat(
385
- Array.from({ length: adults ?? 0 }, (_, index) => ({
386
- id: index,
387
- age: 31
388
- })),
389
- Array.from({ length: kids ?? 0 }, (_, index) => ({
390
- id: index + (adults ?? 0),
391
- age: 8
392
- })),
393
- Array.from({ length: babies ?? 0 }, (_, index) => ({
394
- id: index + (adults ?? 0) + (kids ?? 0),
395
- age: 1
396
- }))
397
- ),
398
- outward: seed.fromDate ? { date: dateToDateStruct(new Date(seed.fromDate)) } : null,
399
- return: seed.toDate ? { date: dateToDateStruct(new Date(seed.toDate)) } : null
400
- } as FlightSearchRequest;
401
- };
402
-
403
- const buildSearchSeedFromQueryParams = (params: URLSearchParams): SearchSeed | null => {
404
- const from = getDateFromParams(params, 'fromDate');
405
- const to = getDateFromParams(params, 'toDate');
406
- const rooms = getRoomsFromParams(params, 'rooms');
407
- const country = getNumberFromParams(params, 'country');
408
- const region = getNumberFromParams(params, 'region');
409
- const oord = getNumberFromParams(params, 'oord');
410
- const city = getNumberFromParams(params, 'location');
411
- const hotel = getNumberFromParams(params, 'hotel');
412
- const tagId = getNumberFromParams(params, 'tagId');
413
- const destinationAirport = getStringFromParams(params, 'destinationAirport');
414
- const departureAirport = getStringFromParams(params, 'departureAirport');
415
- const travelClass = getStringFromParams(params, 'travelClass');
416
- const nationality = getStringFromParams(params, 'nationality');
417
-
418
- if (!from || !to) {
419
- return null;
420
- }
421
-
422
- return {
423
- fromDate: from,
424
- toDate: to,
425
- country,
426
- region,
427
- oord,
428
- location: city,
429
- hotel,
430
- hotelCode: hotel ? hotel.toString() : null,
431
- tagId,
432
- destinationAirport,
433
- departureAirport,
434
- travelClass,
435
- nationality,
436
- rooms: getRequestRooms(rooms)
437
- };
438
- };
439
-
440
- const buildSearchSeedFromAccommodationSegments = (entry: PackagingEntry, segments: PackagingEntryLine[]): SearchSeed | null => {
441
- if (!segments?.length) return null;
442
-
443
- const sortedSegments = [...segments].sort((a, b) => new Date(a.from).getTime() - new Date(b.from).getTime());
444
-
445
- const firstSegment = first(sortedSegments);
446
- const lastSegment = last(sortedSegments);
447
-
448
- if (!firstSegment || !lastSegment) return null;
449
-
450
- return {
451
- fromDate: toDateOnlyString(firstSegment.from),
452
- toDate: toDateOnlyString(lastSegment.to),
453
- country: firstSegment.country?.id ?? null,
454
- region: firstSegment.region?.id ?? null,
455
- oord: firstSegment.oord?.id ?? null,
456
- location: firstSegment.location?.id ?? null,
457
- hotel: parseHotelId(firstSegment),
458
- hotelCode: firstSegment.productCode ?? null,
459
- tagId: null,
460
- destinationAirport: getDestinationAirportFromEntry(entry.lines ?? []),
461
- departureAirport: getDepartureAirportFromEntry(entry.lines ?? []),
462
- rooms: getRequestRoomsFromPackagingSegments(entry, sortedSegments)
463
- };
464
- };
465
-
466
- const handleEditAccommodation = async (segments: PackagingEntryLine[]) => {
467
- const sourceEntry = editablePackagingEntry ?? context?.packagingEntry;
468
- if (!sourceEntry) return;
469
-
470
- const seed = buildSearchSeedFromAccommodationSegments(sourceEntry, segments);
471
- if (!seed) return;
472
-
473
- setDetailsIsLoading(true);
474
-
475
- setSelectedAccommodationSeed(seed);
476
- dispatch(setFlyInType('acco-results'));
477
- handleFlyInToggle(true);
478
- const currentTransactionId = await getOrCreateTransactionId();
479
- await runAccommodationFlow(seed, currentTransactionId ?? '');
480
- setDetailsIsLoading(false);
481
- };
482
-
483
- const handleConfirmHotelSwap = () => {
484
- const updatedEntry = swapHotelInPackagingEntry();
485
- if (!updatedEntry) return;
486
- dispatch(setEditablePackagingEntry(updatedEntry));
487
- handleFlyInToggle(false);
488
- };
489
-
490
- const swapHotelInPackagingEntry = (): PackagingEntry | null => {
491
- const sourceEntry = editablePackagingEntry ?? context?.packagingEntry;
492
- const details = packagingAccoSearchDetails;
493
-
494
- if (!sourceEntry || !details?.length) return null;
495
-
496
- const selectedOptionsPerRoom = getSelectedOptionsPerRoom(details);
497
- if (!selectedOptionsPerRoom.length) return null;
498
-
499
- const selectedHotel = details[0];
500
-
501
- let roomIndex = 0;
502
- const updatedLines = sourceEntry.lines.map((line) => {
503
- if (line.serviceType !== ACCOMMODATION_SERVICE_TYPE) {
504
- return line;
505
- }
506
-
507
- const selectedRoom = selectedOptionsPerRoom.find((x) => x.roomIndex === roomIndex);
508
- const selectedOption = selectedRoom?.option;
509
- roomIndex++;
510
-
511
- if (!selectedOption) {
512
- return line;
513
- }
514
-
515
- return {
516
- ...line,
517
- guid: selectedOption.guid,
518
- productName: selectedHotel.name,
519
- productCode: selectedHotel.code,
520
- accommodationName: selectedOption.accommodationName,
521
- accommodationCode: selectedOption.accommodationCode,
522
- regimeName: selectedOption.regimeName,
523
- regimeCode: selectedOption.regimeCode,
524
-
525
- country: line.country
526
- ? { ...line.country, id: selectedHotel.countryId ?? line.country.id, name: selectedHotel.countryName ?? line.country.name }
527
- : selectedHotel.countryId
528
- ? { id: selectedHotel.countryId, name: selectedHotel.countryName, localizations: [] }
529
- : line.country,
530
-
531
- region: line.region
532
- ? { ...line.region, id: selectedHotel.regionId ?? line.region.id, name: selectedHotel.regionName ?? line.region.name }
533
- : selectedHotel.regionId
534
- ? { id: selectedHotel.regionId, name: selectedHotel.regionName, localizations: [] }
535
- : line.region,
536
-
537
- oord: line.oord
538
- ? { ...line.oord, id: selectedHotel.oordId ?? line.oord.id, name: selectedHotel.oordName ?? line.oord.name }
539
- : selectedHotel.oordId
540
- ? { id: selectedHotel.oordId, name: selectedHotel.oordName, localizations: [] }
541
- : line.oord,
542
-
543
- location: line.location
544
- ? { ...line.location, id: selectedHotel.locationId ?? line.location.id, name: selectedHotel.locationName ?? line.location.name }
545
- : selectedHotel.locationId
546
- ? { id: selectedHotel.locationId, name: selectedHotel.locationName, localizations: [] }
547
- : line.location,
548
-
549
- latitude: selectedHotel.latitude ?? line.latitude,
550
- longitude: selectedHotel.longitude ?? line.longitude,
551
-
552
- from: selectedHotel.fromDate ?? line.from,
553
- to: selectedHotel.toDate ?? line.to,
554
- isChanged: true
555
- };
556
- });
557
-
558
- return {
559
- ...sourceEntry,
560
- lines: updatedLines
561
- };
562
- };
563
-
564
- const activeSearchSeed = React.useMemo(() => {
565
- if (selectedAccommodationSeed) {
566
- return selectedAccommodationSeed;
567
- }
568
-
569
- if (typeof window === 'undefined') return null;
570
-
571
- const params = new URLSearchParams(window.location.search);
572
- return buildSearchSeedFromQueryParams(params);
573
- }, [selectedAccommodationSeed, currentSearch]);
574
-
575
- useEffect(() => {
576
- if (typeof document !== 'undefined') {
577
- document.body.classList.toggle('has-overlay', filtersOpen);
578
- }
579
- }, [filtersOpen]);
580
-
581
- const getOrCreateTransactionId = async (): Promise<string | null> => {
582
- if (context?.packagingEntry?.transactionId) {
583
- return context.packagingEntry.transactionId;
584
- }
585
-
586
- if (transactionId) {
587
- return transactionId;
588
- }
589
-
590
- return await runStartTransaction();
591
- };
592
-
593
- const runSearch = async () => {
594
- try {
595
- if (!context) return;
596
- dispatch(setIsLoading(true));
597
-
598
- const config: TideClientConfig = {
599
- host: context.tideConnection.host,
600
- apiKey: context.tideConnection.apiKey
601
- };
602
-
603
- const seed = activeSearchSeed;
604
- if (!seed) {
605
- throw new Error('Invalid search parameters');
606
- }
607
-
608
- const searchRequest = buildSearchFromSeed(seed);
609
- const packageSearchResults = await search(config, searchRequest);
610
-
611
- const enrichedFilters = enrichFiltersWithResults(packageSearchResults, context.filters, context.tags ?? []);
612
- if (!initialFiltersSet) {
613
- dispatch(resetFilters(enrichedFilters));
614
- dispatch(setInitialFilters(enrichedFilters));
615
- setInitialFiltersSet(true);
616
- }
617
-
618
- dispatch(setResults(packageSearchResults));
619
- const initialFilteredResults = applyFilters(packageSearchResults, filters, null);
620
- dispatch(setFilteredResults(initialFilteredResults));
621
-
622
- if (packageSearchResults?.length > 0) {
623
- if (context.searchConfiguration.qsmType === PortalQsmType.AccommodationAndFlight) {
624
- dispatch(setSelectedSearchResult(packageSearchResults[0]));
625
- }
626
- }
627
- } catch (err) {
628
- console.error('Search failed', err);
629
- } finally {
630
- dispatch(setIsLoading(false));
631
- }
632
- };
633
-
634
- const runStartTransaction = async (): Promise<string | null> => {
635
- try {
636
- if (!context) return null;
637
-
638
- dispatch(setIsLoading(true));
639
-
640
- const config: TideClientConfig = {
641
- host: context.tideConnection.host,
642
- apiKey: context.tideConnection.apiKey
643
- };
644
-
645
- const transaction = await startTransaction(config);
646
-
647
- dispatch(setTransactionId(transaction.transactionId));
648
- dispatch(setIsLoading(false));
649
- return transaction.transactionId;
650
- } catch (err) {
651
- console.error('Transaction failed', err);
652
- dispatch(setIsLoading(false));
653
- return null;
654
- }
655
- };
656
-
657
- const runHotelSearch = async (currentTransactionId: string, seed: SearchSeed) => {
658
- try {
659
- if (!context) return;
660
- dispatch(setIsLoading(true));
661
-
662
- const config: TideClientConfig = {
663
- host: context.tideConnection.host,
664
- apiKey: context.tideConnection.apiKey
665
- };
666
-
667
- let searchRequest: PackagingAccommodationRequest = buildPackagingAccommodationRequestFromSeed(seed, currentTransactionId);
668
- searchRequest.portalId = context.portalId;
669
- searchRequest.agentId = context.agentId;
670
-
671
- const packageAccoSearchResults = await searchPackagingAccommodations(config, searchRequest);
672
-
673
- const enrichedFilters = enrichFiltersWithPackageAccoResults(packageAccoSearchResults, context.tags ?? []);
674
- if (!initialFiltersSet) {
675
- dispatch(resetFilters(enrichedFilters));
676
- setInitialFilters(enrichedFilters);
677
- setInitialFiltersSet(true);
678
- }
679
-
680
- dispatch(setPackagingAccoResults(packageAccoSearchResults));
681
- const initialFilteredResults = applyFiltersToPackageAccoResults(packageAccoSearchResults, filters, null);
682
- dispatch(setFilteredPackagingAccoResults(initialFilteredResults));
683
-
684
- if (initialFilteredResults.length > 0) {
685
- skipInitialPackagingAccoDetailsRef.current = true;
686
- dispatch(setSelectedPackagingAccoResult(first(initialFilteredResults)?.code ?? null));
687
- }
688
-
689
- dispatch(setIsLoading(false));
690
- } catch (err) {
691
- console.error('HotelSearch failed', err);
692
- dispatch(setIsLoading(false));
693
- }
694
- };
695
-
696
- const runAccommodationFlow = async (seed: SearchSeed, currentTransactionId: string) => {
697
- if (!context || context.showMockup) return;
698
- await runHotelSearch(currentTransactionId, seed);
699
- };
700
-
701
- const runFlightSearch = async (currentTransactionId: string, seed: SearchSeed) => {
702
- try {
703
- if (!context) return;
704
- dispatch(setFlightsLoading(true));
705
-
706
- const config: TideClientConfig = {
707
- host: context.tideConnection.host,
708
- apiKey: context.tideConnection.apiKey
709
- };
710
-
711
- let searchRequest: FlightSearchRequest = buildPackagingFlightRequestFromSeed(seed, currentTransactionId);
712
- searchRequest.agentId = context.agentId;
713
-
714
- const packageFlightSearchResults = await searchPackagingFlights(config, searchRequest);
715
-
716
- const enrichedFilters = enrichFiltersWithPackageFlightResults(packageFlightSearchResults, context.tags ?? [], translations);
717
- if (!initialFlightFiltersSet) {
718
- dispatch(resetFlightFilters(enrichedFilters));
719
- dispatch(setInitialFlightFilters(enrichedFilters));
720
- setInitialFlightFiltersSet(true);
721
- }
722
-
723
- dispatch(setPackagingFlightResults(packageFlightSearchResults));
724
-
725
- const initialFilteredResults = applyFiltersToPackageFlightResults(packageFlightSearchResults, filters, null);
726
- dispatch(setFilteredPackagingFlightResults(initialFilteredResults));
727
-
728
- if (initialFilteredResults.length > 0) {
729
- const firstResult = first(packageFlightSearchResults);
730
- if (firstResult) {
731
- dispatch(setSelectedOutwardKey(getFlightKey(firstResult.outward.segments)));
732
- dispatch(setSelectedReturnKey(getFlightKey(firstResult.return.segments)));
733
- }
734
- }
735
-
736
- dispatch(setFlightsLoading(false));
737
- } catch (err) {
738
- console.error('FlightSearch failed', err);
739
- dispatch(setFlightsLoading(false));
740
- }
741
- };
742
-
743
- const runFlightFlow = async (seed: SearchSeed, currentTransactionId: string) => {
744
- if (!context || context.showMockup) return;
745
- await runFlightSearch(currentTransactionId, seed);
746
- };
747
-
748
- // separate Search
749
- useEffect(() => {
750
- if (
751
- context?.searchConfiguration.qsmType === PortalQsmType.GroupTour ||
752
- (context?.searchConfiguration.qsmType === PortalQsmType.AccommodationAndFlight && !context.searchConfiguration.enableManualPackaging)
753
- ) {
754
- runSearch();
755
- }
756
-
757
- if (context?.searchConfiguration.qsmType === PortalQsmType.Accommodation) {
758
- const seed = activeSearchSeed;
759
-
760
- if (seed) {
761
- (async () => {
762
- const transactionId = await getOrCreateTransactionId();
763
- if (!transactionId) return;
764
-
765
- await runAccommodationFlow(seed, transactionId);
766
- })();
767
- }
768
- }
769
-
770
- if (
771
- context?.searchConfiguration.qsmType === PortalQsmType.AccommodationAndFlight &&
772
- context.searchConfiguration.enableManualPackaging &&
773
- !context?.packagingEntry
774
- ) {
775
- const seed = activeSearchSeed;
776
-
777
- if (seed) {
778
- (async () => {
779
- const sharedTransactionId = await getOrCreateTransactionId();
780
- if (!sharedTransactionId) return;
781
-
782
- const tasks: Promise<void>[] = [];
783
-
784
- if (context.searchConfiguration.allowAccommodations) {
785
- tasks.push(runAccommodationFlow(seed, sharedTransactionId));
786
- }
787
-
788
- if (context.searchConfiguration.allowFlights) {
789
- tasks.push(runFlightFlow(seed, sharedTransactionId));
790
- }
791
-
792
- await Promise.all(tasks);
793
- })();
794
- }
795
- }
796
- }, [
797
- location.search,
798
- context?.showMockup,
799
- context?.searchConfiguration.qsmType,
800
- context?.searchConfiguration.enableManualPackaging,
801
- context?.searchConfiguration.allowAccommodations,
802
- context?.packagingEntry?.transactionId,
803
- activeSearchSeed
804
- ]);
805
-
806
- useEffect(() => {
807
- if (context?.packagingEntry) {
808
- dispatch(setEditablePackagingEntry(structuredClone(context.packagingEntry)));
809
- dispatch(setTransactionId(context.packagingEntry.transactionId));
810
-
811
- const params = new URLSearchParams(location.search);
812
- const bookingConfirmation = getStringFromParams(params, 'bookingConfirmation');
813
- console.log('bookingConfirmation', bookingConfirmation);
814
- if (bookingConfirmation == 'true') {
815
- setIsBookingConfirmation(true);
816
- dispatch(setBookPackagingEntry(true));
817
- }
818
- }
819
- }, [context?.packagingEntry]);
820
-
821
- useEffect(() => {
822
- if (bookPackagingEntry && onBookingStarted) {
823
- onBookingStarted();
824
- }
825
- }, [bookPackagingEntry, onBookingStarted]);
826
-
827
- // separate detailsCall
828
- useEffect(() => {
829
- const fetchDetails = async () => {
830
- if (!selectedSearchResult || !context) return;
831
- setDetailsIsLoading(true);
832
- if (context?.searchConfiguration.qsmType === PortalQsmType.Accommodation || context?.searchConfiguration.qsmType === PortalQsmType.GroupTour) {
833
- handleFlyInToggle(true);
834
- }
835
-
836
- try {
837
- const config: TideClientConfig = {
838
- host: context.tideConnection.host,
839
- apiKey: context.tideConnection.apiKey
840
- };
841
-
842
- const selectedItem = results.find((r) => r.productId === selectedSearchResult.productId);
843
- if (!selectedItem) {
844
- // TODO: handle this case better, show an error message to the user
845
- return;
846
- }
847
-
848
- let requestRooms: BookingPackageRequestRoom[];
849
-
850
- if (context?.packagingEntry) {
851
- requestRooms = getRequestRoomsFromPackagingEntry(context.packagingEntry);
852
- } else {
853
- const seed = activeSearchSeed;
854
- requestRooms = seed?.rooms?.length ? seed.rooms : getRequestRooms(null);
855
- }
856
-
857
- const detailsRequest: BookingPackageRequest<BookingPackageDetailsRequest> = {
858
- officeId: 1,
859
- payload: {
860
- catalogueId: selectedItem.catalogueId,
861
- rooms: requestRooms,
862
- searchType: 0, // same as search
863
- productCode: selectedItem.code,
864
- fromDate: selectedItem.fromDate,
865
- toDate: selectedItem.toDate,
866
- includeFlights: context!.searchConfiguration.qsmType === PortalQsmType.AccommodationAndFlight ? true : false,
867
- includeHotels: true,
868
- includePaxTypes: true,
869
- checkExternalAvailability: true,
870
- expectedPrice: selectedItem.price,
871
- duration: null,
872
- preNights: null,
873
- postNights: null
874
- },
875
- agentId: context.agentId
876
- };
877
-
878
- const detailsResponse = await details(config, detailsRequest);
879
- dispatch(setBookingPackageDetails({ details: detailsResponse?.payload }));
880
- setDetailsIsLoading(false);
881
- } catch (err) {
882
- console.error('Failed to fetch package details', err);
883
- setDetailsIsLoading(false);
884
- }
885
- };
886
-
887
- const fetchPackagingAccoSearchDetails = async () => {
888
- if (!selectedPackagingAccoResultCode || !context) return;
889
-
890
- if (skipInitialPackagingAccoDetailsRef.current) {
891
- skipInitialPackagingAccoDetailsRef.current = false;
892
- return;
893
- }
894
-
895
- setDetailsIsLoading(true);
896
- if (
897
- context?.searchConfiguration.qsmType === PortalQsmType.Accommodation ||
898
- context?.searchConfiguration.qsmType === PortalQsmType.AccommodationAndFlight ||
899
- context?.searchConfiguration.qsmType === PortalQsmType.GroupTour
900
- ) {
901
- handleFlyInToggle(true);
902
- dispatch(setFlyInType('acco-details'));
903
- }
904
-
905
- try {
906
- const config: TideClientConfig = {
907
- host: context.tideConnection.host,
908
- apiKey: context.tideConnection.apiKey
909
- };
910
-
911
- const selectedItem = packagingAccoResults.find((r) => r.code === selectedPackagingAccoResultCode);
912
- if (!selectedItem) {
913
- // TODO: handle this case better, show an error message to the user
914
- return;
915
- }
916
-
917
- const seed = activeSearchSeed;
918
- const tagId = seed?.tagId ?? null;
919
- const destinationAirport = seed?.destinationAirport ?? null;
920
-
921
- let destinationId: number | null = null;
922
- let destinationIsCountry = false;
923
- let destinationIsRegion = false;
924
- let destinationIsOord = false;
925
- let destinationIsLocation = false;
926
- let destinationCode: string | null = null;
927
- let destinationIsAirport = false;
928
-
929
- if (selectedItem.countryId) {
930
- destinationId = selectedItem.countryId;
931
- destinationIsCountry = true;
932
- } else if (selectedItem.regionId) {
933
- destinationId = selectedItem.regionId;
934
- destinationIsRegion = true;
935
- } else if (selectedItem.oordId) {
936
- destinationId = selectedItem.oordId;
937
- destinationIsOord = true;
938
- } else if (selectedItem.locationId) {
939
- destinationId = selectedItem.locationId;
940
- destinationIsLocation = true;
941
- } else if (destinationAirport) {
942
- destinationCode = destinationAirport;
943
- destinationIsAirport = true;
944
- }
945
-
946
- const detailSearchRequest: PackagingAccommodationRequest = {
947
- transactionId: transactionId ?? '',
948
- officeId: 1,
949
- portalId: context.portalId,
950
- agentId: context.agentId,
951
- catalogueId: context!.searchConfiguration.defaultCatalogueId ?? first(context?.tideConnection?.catalogueIds) ?? 1,
952
- searchConfigurationId: context!.searchConfiguration.id,
953
- vendorConfigurationId: selectedItem.vendorId,
954
- language: context!.languageCode ?? 'en-GB',
955
- serviceType: ACCOMMODATION_SERVICE_TYPE,
956
- fromDate: selectedItem.fromDate,
957
- toDate: selectedItem.toDate,
958
- destination: {
959
- id: Number(destinationId),
960
- isCountry: destinationIsCountry,
961
- isRegion: destinationIsRegion,
962
- isOord: destinationIsOord,
963
- isLocation: destinationIsLocation,
964
- isAirport: destinationIsAirport,
965
- code: destinationCode
966
- } as PackagingDestination,
967
- productCode: selectedItem.code ? selectedItem.code : '',
968
- rooms: getPackagingRequestRoomsFromBookingRooms(seed?.rooms ?? null),
969
- tagIds: tagId ? [tagId] : []
970
- };
971
-
972
- const packageAccoSearchDetails = await searchPackagingAccommodations(config, detailSearchRequest);
973
- dispatch(setPackagingAccoSearchDetails(packageAccoSearchDetails));
974
- setDetailsIsLoading(false);
975
- } catch (err) {
976
- console.error('Failed to fetch package details', err);
977
- setDetailsIsLoading(false);
978
- }
979
- };
980
-
981
- if (selectedSearchResult) {
982
- fetchDetails();
983
- }
984
- if (selectedPackagingAccoResultCode) {
985
- fetchPackagingAccoSearchDetails();
986
- }
987
- }, [selectedSearchResult, selectedPackagingAccoResultCode]);
988
-
989
- useEffect(() => {
990
- if (context?.searchConfiguration.qsmType === PortalQsmType.Accommodation || context?.searchConfiguration.qsmType === PortalQsmType.AccommodationAndFlight) {
991
- const filteredPackageAccoResults = applyFiltersToPackageAccoResults(packagingAccoResults, filters, selectedSortType);
992
- dispatch(setFilteredPackagingAccoResults(filteredPackageAccoResults));
993
- } else {
994
- const filteredResults = applyFilters(results, filters, selectedSortType);
995
- dispatch(setFilteredResults(filteredResults));
996
- }
997
- }, [filters, results, packagingAccoResults, selectedSortType]);
998
-
999
- useEffect(() => {
1000
- if (context?.searchConfiguration.qsmType === PortalQsmType.AccommodationAndFlight) {
1001
- const filteredPackageFlightResults = applyFiltersToPackageFlightResults(packagingFlightResults, flightFilters, selectedFlightSortType);
1002
- dispatch(setFilteredPackagingFlightResults(filteredPackageFlightResults));
1003
- }
1004
- }, [flightFilters, packagingFlightResults, selectedFlightSortType]);
1005
-
1006
- useEffect(() => {
1007
- setInitialFiltersSet(false);
1008
- }, [activeSearchSeed]);
1009
-
1010
- useEffect(() => {
1011
- const fetchPriceDetails = async () => {
1012
- if (!context || !editablePackagingEntry || isEmpty(editablePackagingEntry.lines)) return;
1013
- setPricesAreLoading(true);
1014
- try {
1015
- const config: TideClientConfig = {
1016
- host: context.tideConnection.host,
1017
- apiKey: context.tideConnection.apiKey
1018
- };
1019
-
1020
- const request = {
1021
- language: context.languageCode ?? 'en-GB',
1022
- officeId: context.tideConnection.officeId,
1023
- catalogueId: context!.searchConfiguration.defaultCatalogueId ?? first(context?.tideConnection?.catalogueIds) ?? 1,
1024
- agentId: context.agentId,
1025
- payload: editablePackagingEntry
1026
- } as PackagingRequestBase<PackagingEntry>;
1027
-
1028
- const priceDetails = await getPriceDetails(config, request);
1029
- dispatch(setPriceDetails(priceDetails));
1030
- setPricesAreLoading(false);
1031
- } catch (err) {
1032
- console.error('Error fetching price details', err);
1033
- setPricesAreLoading(false);
1034
- }
1035
- };
1036
-
1037
- const fetchItinerary = async () => {
1038
- if (!context || !context.packagingEntry || !editablePackagingEntry || isEmpty(editablePackagingEntry.lines)) return;
1039
- setItineraryIsLoading(true);
1040
- try {
1041
- const config: TideClientConfig = {
1042
- host: context.tideConnection.host,
1043
- apiKey: context.tideConnection.apiKey
1044
- };
1045
-
1046
- const request = {
1047
- language: context.languageCode ?? 'en-GB',
1048
- officeId: context.tideConnection.officeId,
1049
- catalogueId: context!.searchConfiguration.defaultCatalogueId ?? first(context?.tideConnection?.catalogueIds) ?? 1,
1050
- agentId: context.agentId,
1051
- payload: editablePackagingEntry
1052
- } as PackagingRequestBase<PackagingEntry>;
1053
-
1054
- const itinerary = await getItinerary(config, request);
1055
- dispatch(setItinerary(itinerary));
1056
- setItineraryIsLoading(false);
1057
- } catch (err) {
1058
- console.error('Error fetching itinerary', err);
1059
- setItineraryIsLoading(false);
1060
- }
1061
- };
1062
-
1063
- fetchPriceDetails();
1064
- fetchItinerary();
1065
- }, [editablePackagingEntry]);
1066
-
1067
- // Flight selection
1068
- // const [selectedOutwardKey, setSelectedOutwardKey] = useState<string | null>(null);
1069
- // const [selectedReturnKey, setSelectedReturnKey] = useState<string | null>(null);
1070
- const selectedOutwardKey = useSelector(selectSelectedOutwardKey);
1071
- const selectedReturnKey = useSelector(selectSelectedReturnKey);
1072
- const uniqueOutwardFlights = useSelector(selectUniqueOutwardFlights);
1073
- const uniqueReturnFlights = useSelector(selectUniqueReturnFlights);
1074
- const selectedOutward = useSelector(selectSelectedOutward);
1075
- const selectedReturn = useSelector(selectSelectedReturn);
1076
- const selectedCombinationFlight = useSelector(selectSelectedCombinationFlight);
1077
-
1078
- useEffect(() => {
1079
- if (!selectedOutwardKey) {
1080
- dispatch(setSelectedReturnKey(null));
1081
- return;
1082
- }
1083
-
1084
- const matchingCombinations = packagingFlightResults.filter((flight) => getFlightKey(flight.outward.segments) === selectedOutwardKey);
1085
-
1086
- const returnMap = new Map<string, PackagingFlightResponse>();
1087
-
1088
- matchingCombinations.forEach((flight) => {
1089
- const key = getFlightKey(flight.return.segments);
1090
-
1091
- if (!returnMap.has(key)) {
1092
- returnMap.set(key, flight);
1093
- }
1094
- });
1095
-
1096
- const returns = Array.from(returnMap.values());
1097
- const segments = first(returns)?.return.segments;
1098
- const firstReturnKey = returns.length > 0 && segments ? getFlightKey(segments) : null;
1099
-
1100
- if (!returns.some((x) => getFlightKey(x.return.segments) === selectedReturnKey)) {
1101
- dispatch(setSelectedReturnKey(firstReturnKey));
1102
- }
1103
- }, [selectedOutwardKey, packagingFlightResults, selectedReturnKey, dispatch]);
1104
-
1105
- const visibleOutwardFlights = React.useMemo(() => {
1106
- const withoutSelected = uniqueOutwardFlights.filter((x) => getFlightKey(x.outward.segments) !== selectedOutwardKey);
1107
- return withoutSelected.slice(0, 3);
1108
- }, [uniqueOutwardFlights, selectedOutwardKey]);
1109
-
1110
- // TODO: get details for selected combination flight and show in fly-in
1111
- // useEffect(() => {
1112
- // if (!selectedCombinationFlight) return;
1113
-
1114
- // dispatch(setSelectedPackagingFlight(selectedCombinationFlight));
1115
- // // onFlightSearch(selectedCombinationFlight); // Trigger search to update accommodation options based on selected flight
1116
- // dispatch(setFlyInIsOpen(true));
1117
- // }, [selectedCombinationFlight, dispatch]);
1118
-
1119
- // Build packagingEntry
1120
- useEffect(() => {
1121
- if (!context) return;
1122
-
1123
- const seed = activeSearchSeed;
1124
- if (!seed) return;
1125
-
1126
- const nextEntry = buildOrUpdatePackagingEntryPartial({
1127
- sourceEntry: editablePackagingEntry ?? context.packagingEntry ?? null,
1128
- selectedHotelCode: selectedPackagingAccoResultCode,
1129
- accommodationResults: packagingAccoResults,
1130
- selectedFlight: selectedCombinationFlight ?? null,
1131
- confirmedExcursionsByDay,
1132
- seed,
1133
- transactionId: transactionId ?? context.packagingEntry?.transactionId ?? '',
1134
- language: context.languageCode ?? 'en-GB'
1135
- });
1136
-
1137
- if (!nextEntry) return;
1138
- dispatch(setEditablePackagingEntry(nextEntry));
1139
-
1140
- if (selectedCombinationFlight) {
1141
- dispatch(setSelectedPackagingFlight(selectedCombinationFlight));
1142
- }
1143
- }, [
1144
- context,
1145
- activeSearchSeed,
1146
- selectedPackagingAccoResultCode,
1147
- packagingAccoResults,
1148
- packagingAccoSearchDetails,
1149
- selectedCombinationFlight,
1150
- confirmedExcursionsByDay,
1151
- transactionId,
1152
- dispatch
1153
- ]);
1154
-
1155
- const removeAccommodationLines = (lines: PackagingEntryLine[]) => lines.filter((line) => line.serviceType !== ACCOMMODATION_SERVICE_TYPE);
1156
-
1157
- const removeFlightLines = (lines: PackagingEntryLine[]) => lines.filter((line) => line.serviceType !== FLIGHT_SERVICE_TYPE);
1158
-
1159
- const removeExcursionLines = (lines: PackagingEntryLine[]) => lines.filter((line) => line.serviceType !== EXCURSION_SERVICE_TYPE);
1160
-
1161
- const buildAccommodationLinesFromSelection = (selectedHotel: PackagingAccommodationResponse, seed: SearchSeed): PackagingEntryLine[] => {
1162
- return buildPackagingAccommodationLines(selectedHotel, seed, ACCOMMODATION_SERVICE_TYPE);
1163
- };
1164
-
1165
- const buildExcursionLinesFromConfirmedDays = (confirmedExcursionsByDay: Record<string, PackagingAccommodationResponse[]>): PackagingEntryLine[] => {
1166
- return Object.values(confirmedExcursionsByDay)
1167
- .flat()
1168
- .flatMap((excursion) => {
1169
- const selectedOptions = excursion.rooms.flatMap((room) => room.options.filter((option) => option.isSelected));
1170
-
1171
- const parentGuid = crypto.randomUUID();
1172
-
1173
- return selectedOptions.map(
1174
- (option, index) =>
1175
- ({
1176
- guid: option.guid ?? crypto.randomUUID(),
1177
- moment: '',
1178
- parentGuid: index === 0 ? null : parentGuid,
1179
- order: index,
1180
- isChanged: true,
1181
- from: excursion.fromDate,
1182
- to: excursion.toDate,
1183
- serviceType: EXCURSION_SERVICE_TYPE,
1184
- productName: excursion.name,
1185
- productCode: excursion.code,
1186
- accommodationName: option.accommodationName,
1187
- accommodationCode: option.accommodationCode,
1188
- regimeName: option.regimeName,
1189
- regimeCode: option.regimeCode,
1190
- country: excursion.countryId ? { id: excursion.countryId, name: excursion.countryName, localizations: [] } : null,
1191
- region: excursion.regionId ? { id: excursion.regionId, name: excursion.regionName, localizations: [] } : null,
1192
- oord: excursion.oordId ? { id: excursion.oordId, name: excursion.oordName, localizations: [] } : null,
1193
- location: excursion.locationId ? { id: excursion.locationId, name: excursion.locationName, localizations: [] } : null,
1194
- longitude: excursion.longitude ?? null,
1195
- latitude: excursion.latitude ?? null,
1196
- pax: Array.isArray(option.paxIds)
1197
- ? option.paxIds.map((paxId, paxIndex) => ({
1198
- paxId: paxId,
1199
- room: 0,
1200
- order: paxIndex
1201
- }))
1202
- : [],
1203
- flightInformation: null
1204
- } satisfies PackagingEntryLine)
1205
- );
1206
- });
1207
- };
1208
-
1209
- const buildPackagingAccommodationLines = (selectedItem: PackagingAccommodationResponse, seed: SearchSeed, serviceType: number): PackagingEntryLine[] => {
1210
- if (!selectedItem) return [];
1211
- const parentGuid = crypto.randomUUID();
1212
-
1213
- return selectedItem.rooms
1214
- .filter((room) => room.options.some((o) => o.isSelected))
1215
- .map((room, index) => {
1216
- const option = room.options.find((o) => o.isSelected)!;
1217
-
1218
- const pax = option.paxIds.map((p, paxIndex) => ({
1219
- paxId: p,
1220
- room: index,
1221
- order: paxIndex
1222
- }));
1223
-
1224
- return {
1225
- guid: option.guid ?? crypto.randomUUID(),
1226
- moment: '',
1227
- parentGuid: index === 0 ? null : parentGuid,
1228
- order: index,
1229
- isChanged: true,
1230
- from: selectedItem.fromDate,
1231
- to: selectedItem.toDate,
1232
- serviceType: serviceType,
1233
- productName: selectedItem.name,
1234
- productCode: selectedItem.code,
1235
- accommodationName: option.accommodationName,
1236
- accommodationCode: option.accommodationCode,
1237
- regimeName: option.regimeName,
1238
- regimeCode: option.regimeCode,
1239
- country: selectedItem.countryId ? { id: selectedItem.countryId, name: selectedItem.countryName, localizations: [] } : null,
1240
- region: selectedItem.regionId ? { id: selectedItem.regionId, name: selectedItem.regionName, localizations: [] } : null,
1241
- oord: selectedItem.oordId ? { id: selectedItem.oordId, name: selectedItem.oordName, localizations: [] } : null,
1242
- location: selectedItem.locationId ? { id: selectedItem.locationId, name: selectedItem.locationName, localizations: [] } : null,
1243
- longitude: selectedItem.longitude ?? null,
1244
- latitude: selectedItem.latitude ?? null,
1245
- pax,
1246
- flightInformation: null
1247
- } satisfies PackagingEntryLine;
1248
- });
1249
- };
1250
-
1251
- const toDateOnlyUtcString = (value: string | Date): string => {
1252
- const date = new Date(value);
1253
-
1254
- return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate())).toISOString();
1255
- };
1256
-
1257
- const toTimeOnlyString = (value: string | Date): string => {
1258
- const date = new Date(value);
1259
-
1260
- const hh = String(date.getUTCHours()).padStart(2, '0');
1261
- const mm = String(date.getUTCMinutes()).padStart(2, '0');
1262
- const ss = String(date.getUTCSeconds()).padStart(2, '0');
1263
-
1264
- return `${hh}:${mm}:${ss}`;
1265
- };
1266
-
1267
- const mapFlightSegmentsToFlightLines = (segments: FlightSearchResponseFlightSegment[]): PackagingEntryLineFlightLine[] =>
1268
- segments.map((segment) => ({
1269
- airlineCode: segment.marketingAirlineCode,
1270
- airlineDescription: segment.marketingAirlineName,
1271
- operatingAirlineCode: segment.operatingAirlineCode,
1272
- operatingAirlineDescription: segment.operatingAirlineName,
1273
- flightNumber: segment.flightNumber,
1274
- operatingFlightNumber: segment.operatingFlightNumber ?? null,
1275
- departureDate: toDateOnlyUtcString(segment.departureDateTime),
1276
- departureTime: toTimeOnlyString(segment.departureDateTime),
1277
- departureAirportCode: segment.departureAirportCode,
1278
- departureAirportDescription: segment.departureAirportName,
1279
- arrivalDate: toDateOnlyUtcString(segment.arrivalDateTime),
1280
- arrivalTime: toTimeOnlyString(segment.arrivalDateTime),
1281
- arrivalAirportCode: segment.arrivalAirportCode,
1282
- arrivalAirportDescription: segment.arrivalAirportName,
1283
- durationInTicks: segment.durationInTicks
1284
- }));
1285
-
1286
- const buildFlightLabel = (segments: FlightSearchResponseFlightSegment[]) => {
1287
- const firstSegment = first(segments);
1288
- const lastSegment = last(segments);
1289
-
1290
- if (!firstSegment || !lastSegment) {
1291
- return { productName: 'Flight', productCode: 'FLIGHT' };
1292
- }
1293
-
1294
- return {
1295
- productName: `${firstSegment.departureAirportName} - ${lastSegment.arrivalAirportName} (${firstSegment.marketingAirlineName})`,
1296
- productCode: `${firstSegment.departureAirportCode} ${lastSegment.arrivalAirportCode}/${firstSegment.marketingAirlineCode}`
1297
- };
1298
- };
1299
-
1300
- const buildFlightLinesFromSelection = (selectedFlight: PackagingFlightResponse): PackagingEntryLine[] => {
1301
- if (!selectedFlight) return [];
1302
-
1303
- const outwardSegments = selectedFlight.outward?.segments ?? [];
1304
- const returnSegments = selectedFlight.return?.segments ?? [];
1305
-
1306
- if (!outwardSegments.length || !returnSegments.length) return [];
1307
-
1308
- const outwardLabel = buildFlightLabel(outwardSegments);
1309
- const returnLabel = buildFlightLabel(returnSegments);
1310
-
1311
- const outwardFirst = first(outwardSegments);
1312
- const outwardLast = last(outwardSegments);
1313
- const returnFirst = first(returnSegments);
1314
- const returnLast = last(returnSegments);
1315
-
1316
- const outwardLine = {
1317
- guid: selectedFlight.outwardGuid,
1318
- parentGuid: null,
1319
- order: 0,
1320
- isChanged: true,
1321
- from: outwardFirst?.departureDateTime.toString() ?? '',
1322
- to: outwardLast?.arrivalDateTime.toString() ?? '',
1323
- serviceType: FLIGHT_SERVICE_TYPE,
1324
- productName: outwardLabel.productName,
1325
- productCode: outwardLabel.productCode,
1326
- accommodationName: outwardFirst?.metaData?.farePriceClassName,
1327
- accommodationCode: outwardFirst?.metaData?.fareCode,
1328
- regimeName: null,
1329
- regimeCode: null,
1330
- country: null,
1331
- region: null,
1332
- oord: null,
1333
- location: null,
1334
- longitude: null,
1335
- latitude: null,
1336
- // pax: allPaxAssignments,
1337
- flightInformation: {
1338
- pnr: '',
1339
- flightLines: mapFlightSegmentsToFlightLines(outwardSegments)
1340
- }
1341
- } as PackagingEntryLine;
1342
-
1343
- const returnLine = {
1344
- guid: selectedFlight.returnGuid,
1345
- parentGuid: selectedFlight.outwardGuid,
1346
- order: 1,
1347
- isChanged: true,
1348
- from: returnFirst?.departureDateTime.toString() ?? '',
1349
- to: returnLast?.departureDateTime.toString() ?? '',
1350
- serviceType: FLIGHT_SERVICE_TYPE,
1351
- productName: returnLabel.productName,
1352
- productCode: returnLabel.productCode,
1353
- accommodationName: returnFirst?.metaData?.farePriceClassName,
1354
- accommodationCode: returnFirst?.metaData?.fareCode,
1355
- regimeName: null,
1356
- regimeCode: null,
1357
- country: null,
1358
- region: null,
1359
- oord: null,
1360
- location: null,
1361
- longitude: null,
1362
- latitude: null,
1363
- // pax: allPaxAssignments,
1364
- flightInformation: {
1365
- pnr: '',
1366
- flightLines: mapFlightSegmentsToFlightLines(returnSegments)
1367
- }
1368
- } as PackagingEntryLine;
1369
-
1370
- return [outwardLine, returnLine];
1371
- };
1372
-
1373
- const buildOrUpdatePackagingEntryPartial = ({
1374
- sourceEntry,
1375
- selectedHotelCode,
1376
- accommodationResults,
1377
- selectedFlight,
1378
- confirmedExcursionsByDay,
1379
- seed,
1380
- transactionId,
1381
- language
1382
- }: BuildPackagingEntryPartialArgs): PackagingEntry | null => {
1383
- if (!seed?.rooms?.length) return null;
1384
-
1385
- const entry = buildBasePackagingEntry(sourceEntry, seed, transactionId, language);
1386
-
1387
- let nextLines = [...(entry.lines ?? [])];
1388
-
1389
- const selectedHotel = selectedHotelCode ? accommodationResults.find((r) => r.code === selectedHotelCode) : null;
1390
-
1391
- // Update accommodation only when enough data exists
1392
- if (selectedHotel) {
1393
- const accommodationLines = buildAccommodationLinesFromSelection(selectedHotel, seed);
1394
-
1395
- if (accommodationLines.length) {
1396
- nextLines = removeAccommodationLines(nextLines);
1397
- nextLines = [...nextLines, ...accommodationLines];
1398
- }
1399
- }
1400
-
1401
- // Update flights only when full selected combination exists
1402
- if (selectedFlight) {
1403
- const flightLines = buildFlightLinesFromSelection(selectedFlight);
1404
- if (flightLines.length) {
1405
- nextLines = removeFlightLines(nextLines);
1406
- nextLines = [...nextLines, ...flightLines];
1407
- }
1408
- }
1409
-
1410
- // excursions
1411
- const excursionLines = buildExcursionLinesFromConfirmedDays(confirmedExcursionsByDay);
1412
-
1413
- nextLines = removeExcursionLines(nextLines);
1414
-
1415
- if (excursionLines.length) {
1416
- nextLines = [...nextLines, ...excursionLines];
1417
- }
1418
-
1419
- nextLines = nextLines.map((line, index) => ({
1420
- ...line,
1421
- order: index
1422
- }));
1423
-
1424
- return {
1425
- ...entry,
1426
- language,
1427
- transactionId,
1428
- pax: entry.pax,
1429
- lines: nextLines
1430
- };
1431
- };
1432
-
1433
- const buildBasePackagingEntry = (
1434
- sourceEntry: PackagingEntry | null | undefined,
1435
- seed: SearchSeed,
1436
- transactionId: string,
1437
- language: string
1438
- ): PackagingEntry => {
1439
- if (sourceEntry) {
1440
- return structuredClone(sourceEntry);
1441
- }
1442
-
1443
- let paxId = 0;
1444
- const pax: PackagingEntryPax[] = [];
1445
- const rooms: PackagingEntryRoom[] = [];
1446
-
1447
- seed.rooms?.forEach((room, roomIndex) => {
1448
- const paxIds = room.pax.map((_, paxIndex) => {
1449
- const id = paxId++;
1450
- pax.push({
1451
- id,
1452
- firstName: _.firstName || '',
1453
- lastName: _.lastName || '',
1454
- dateOfBirth: _.dateOfBirth || null,
1455
- age: _.age || null,
1456
- isMainBooker: roomIndex === 0 && paxIndex === 0
1457
- });
1458
-
1459
- return id;
1460
- });
1461
-
1462
- rooms.push({
1463
- id: roomIndex,
1464
- paxIds
1465
- });
1466
- });
1467
-
1468
- return {
1469
- language,
1470
- transactionId,
1471
- dossierNumber: '',
1472
- status: context?.entryStatus,
1473
- customStatusId: context?.customEntryStatusId,
1474
- bookingDate: null,
1475
- price: 0,
1476
- depositAmount: 0,
1477
- pax,
1478
- rooms,
1479
- lines: [],
1480
- address: {} as PackagingEntryAddress
1481
- } as PackagingEntry;
1482
- };
1483
-
1484
- const handleShowMoreFlights = (flyInType: FlyInType) => {
1485
- dispatch(setFlyInType(flyInType));
1486
- dispatch(setFlyInIsOpen(true));
1487
- };
1488
-
1489
- return (
1490
- <div id="tide-booking" className="search__bg">
1491
- {context && (
1492
- <div className="search">
1493
- {bookPackagingEntry ? (
1494
- <BookPackagingEntry
1495
- activeSearchSeed={activeSearchSeed}
1496
- isLoading={itineraryIsLoading || pricesAreLoading}
1497
- isConfirmationPage={isBookingConfirmation}
1498
- />
1499
- ) : (
1500
- <div className="search__container">
1501
- {context.searchConfiguration.qsmType === PortalQsmType.Flight && (
1502
- <FlightSearchProvider tideConnection={context.tideConnection}>
1503
- <FlightResultsContainer isMobile={isMobile} />
1504
- <FlyIn
1505
- srpType={context.searchConfiguration.qsmType}
1506
- isOpen={flyInIsOpen}
1507
- setIsOpen={handleFlyInToggle}
1508
- onPanelRef={(el) => (panelRef.current = el)}
1509
- detailsLoading={detailsIsLoading}
1510
- filtersOpen={filtersOpen}
1511
- />
1512
- </FlightSearchProvider>
1513
- )}
1514
- {(context.searchConfiguration.qsmType === PortalQsmType.AccommodationAndFlight ||
1515
- context.searchConfiguration.qsmType === PortalQsmType.Accommodation ||
1516
- context.searchConfiguration.qsmType === PortalQsmType.GroupTour ||
1517
- context.searchConfiguration.qsmType === PortalQsmType.RoundTrip) && (
1518
- <>
1519
- {context.searchConfiguration.qsmType != PortalQsmType.AccommodationAndFlight && context.showFilters && (
1520
- <Filters
1521
- initialFilters={initialFilters}
1522
- filters={filters}
1523
- isOpen={filtersOpen}
1524
- handleSetIsOpen={() => setFiltersOpen(!filtersOpen)}
1525
- // handleApplyFilters={() => setSearchTrigger((prev) => prev + 1)}
1526
- isLoading={isLoading}
1527
- setFilters={(filters) => dispatch(setFilters(filters))}
1528
- resetFilters={(filters) => dispatch(resetFilters(filters))}
1529
- />
1530
- )}
1531
- {context.searchConfiguration.qsmType === PortalQsmType.AccommodationAndFlight && (
1532
- <Itinerary
1533
- isOpen={itineraryOpen}
1534
- handleSetIsOpen={() => setItineraryOpen(!itineraryOpen)}
1535
- isLoading={isLoading || pricesAreLoading || flightsLoading || itineraryIsLoading}
1536
- onEditAccommodation={handleEditAccommodation}
1537
- />
1538
- )}
1539
- {/* ---------------- Results ---------------- */}
1540
- <div className="search__results">
1541
- {isMobile && (
1542
- <div className="search__result-row">
1543
- <div className="search__results__actions">
1544
- {context.searchConfiguration.qsmType != PortalQsmType.AccommodationAndFlight && context.showFilters && (
1545
- <div className="cta cta--filter" onClick={() => setFiltersOpen(true)}>
1546
- <Icon name="ui-filter" className="mobile-filters-button__icon" height={16} />
1547
- {translations.SRP.FILTERS}
1548
- </div>
1549
- )}
1550
- {context.searchConfiguration.qsmType === PortalQsmType.AccommodationAndFlight && (
1551
- <div className="cta cta--filter" onClick={() => setItineraryOpen(true)}>
1552
- <Icon name="ui-shopping-cart" className="mobile-filters-button__icon" height={16} />
1553
- {translations.SRP.VIEW_BOOKING}
1554
- </div>
1555
- )}
1556
- </div>
1557
- {context.searchConfiguration.qsmType !== PortalQsmType.AccommodationAndFlight && sortByTypes && sortByTypes.length > 0 && (
1558
- <ItemPicker
1559
- items={sortByTypes}
1560
- selection={selectedSortType?.label || undefined}
1561
- selectedSortByType={selectedSortType}
1562
- label={translations.SRP.SORTBY}
1563
- placeholder={translations.SRP.SORTBY}
1564
- classModifier="travel-class-picker__items"
1565
- valueFormatter={(value, direction) => getSortingName(translations, findSortByType(sortByTypes, value, direction ?? 'asc'))}
1566
- onPick={(newSortKey, direction) => handleSortChange(newSortKey, direction)}
1567
- />
1568
- )}
1569
- </div>
1570
- )}
1571
- {context.searchConfiguration.qsmType !== PortalQsmType.AccommodationAndFlight && (
1572
- <div className="search__result-row">
1573
- <span className="search__result-row-text">
1574
- {!isLoading && (
1575
- <>
1576
- {context.searchConfiguration.qsmType === PortalQsmType.Accommodation &&
1577
- filteredPackagingAccoResults?.length &&
1578
- filteredPackagingAccoResults?.length}
1579
- {context.searchConfiguration.qsmType !== PortalQsmType.Accommodation && filteredResults?.length && filteredResults.length}
1580
- &nbsp;{translations.SRP.TOTAL_RESULTS_LABEL}
1581
- </>
1582
- )}
1583
- </span>
1584
- {!context.packagingEntry && !isMobile && sortByTypes && sortByTypes.length > 0 && (
1585
- <div className="search__result-row-filter">
1586
- <ItemPicker
1587
- items={sortByTypes}
1588
- selection={selectedSortType?.label || undefined}
1589
- selectedSortByType={selectedSortType}
1590
- label={translations.SRP.SORTBY}
1591
- placeholder={translations.SRP.SORTBY}
1592
- classModifier="travel-class-picker__items"
1593
- valueFormatter={(value, direction) => getSortingName(translations, findSortByType(sortByTypes, value, direction ?? 'asc'))}
1594
- onPick={(newSortKey, direction) => handleSortChange(newSortKey, direction)}
1595
- />
1596
- </div>
1597
- )}
1598
- </div>
1599
- )}
1600
-
1601
- <div className="search__results__wrapper">
1602
- {context.showTabViews &&
1603
- (context.searchConfiguration.qsmType === PortalQsmType.GroupTour ||
1604
- context.searchConfiguration.qsmType === PortalQsmType.Accommodation) && <TabViews />}
1605
-
1606
- {context.showRoundTripResults && context.showMockup && <RoundTripResults />}
1607
-
1608
- {context.searchConfiguration.qsmType === PortalQsmType.GroupTour && <GroupTourResults isLoading={isLoading} />}
1609
-
1610
- {context.searchConfiguration.qsmType === PortalQsmType.AccommodationAndFlight && !context.packagingEntry && context.showFlightResults && (
1611
- <>
1612
- <div className="search__results__label search__results__label--secondary">
1613
- <div className="search__results__label__date">
1614
- {(() => {
1615
- const firstResultDate = uniqueOutwardFlights.length > 0 ? uniqueOutwardFlights[0].outward.segments[0].departureDateTime : null;
1616
-
1617
- const firstResultDay = firstResultDate ? format(firstResultDate, 'd') : null;
1618
- const firstResultMonth = firstResultDate ? format(firstResultDate, 'MMM') : null;
1619
-
1620
- return (
1621
- <>
1622
- <p className="search__results__label__date-date">{firstResultDay}</p>
1623
- <p>{firstResultMonth}</p>
1624
- </>
1625
- );
1626
- })()}
1627
- </div>
1628
- <div className="search__results__label__text">
1629
- <Icon name="ui-flight" height={16} />
1630
- <h3>
1631
- {translations.SRP.SELECT} <strong> {translations.SRP.DEPARTURE}</strong>
1632
- </h3>
1633
- </div>
1634
- </div>
1635
-
1636
- {flightsLoading ? (
1637
- <Spinner label={translations.SRP.LOADING_FLIGHTS} />
1638
- ) : (
1639
- <>
1640
- <div className="search__results__cards search__results__cards--extended">
1641
- {selectedOutwardKey && selectedOutward && (
1642
- <IndependentFlightOption
1643
- key={`flight-${selectedOutwardKey}`}
1644
- item={selectedOutward.outward}
1645
- guid={selectedOutward.outwardGuid}
1646
- onSelect={() => dispatch(setSelectedOutwardKey(null))}
1647
- selectedGuid={selectedOutward.outwardGuid}
1648
- isOutward={true}
1649
- showSelectedState={true}
1650
- price={selectedOutward.price}
1651
- />
1652
- )}
1653
- {visibleOutwardFlights.map((result) => (
1654
- <IndependentFlightOption
1655
- key={`flight-${result.outwardGuid}`}
1656
- item={result.outward}
1657
- onSelect={() => dispatch(setSelectedOutwardKey(getFlightKey(result.outward.segments)))}
1658
- guid={result.outwardGuid}
1659
- isOutward={true}
1660
- price={result.price}
1661
- currentSelectedPrice={selectedOutward?.price}
1662
- />
1663
- ))}
1664
- </div>
1665
- {uniqueOutwardFlights && uniqueOutwardFlights.length > 3 && (
1666
- <div className="search__results__cards__actions">
1667
- <button className="cta cta--secondary" onClick={() => handleShowMoreFlights('flight-outward-results')}>
1668
- {translations.SRP.SHOW_MORE}
1669
- </button>
1670
- </div>
1671
- )}
1672
- </>
1673
- )}
1674
- </>
1675
- )}
1676
-
1677
- {context.showHotelAccommodationResults && !context.packagingEntry && <HotelAccommodationResults isLoading={isLoading} />}
1678
-
1679
- {context.searchConfiguration.qsmType === PortalQsmType.AccommodationAndFlight && !context.packagingEntry && <DayByDayExcursions />}
1680
-
1681
- {context.searchConfiguration.qsmType === PortalQsmType.AccommodationAndFlight && !context.packagingEntry && context.showFlightResults && (
1682
- <>
1683
- <div className="search__results__label search__results__label--secondary">
1684
- <div className="search__results__label__date">
1685
- {(() => {
1686
- const firstResultDate = uniqueReturnFlights.length > 0 ? uniqueReturnFlights[0].return.segments[0].departureDateTime : null;
1687
-
1688
- const firstResultDay = firstResultDate ? format(firstResultDate, 'd') : null;
1689
- const firstResultMonth = firstResultDate ? format(firstResultDate, 'MMM') : null;
1690
-
1691
- return (
1692
- <>
1693
- <p className="search__results__label__date-date">{firstResultDay}</p>
1694
- <p>{firstResultMonth}</p>
1695
- </>
1696
- );
1697
- })()}
1698
- </div>
1699
- <div className="search__results__label__text">
1700
- <Icon name="ui-flight" height={16} />
1701
- <h3>
1702
- {translations.SRP.SELECT} <strong> {translations.SRP.RETURN}</strong>
1703
- </h3>
1704
- </div>
1705
- </div>
1706
-
1707
- <div className="search__results__cards search__results__cards--extended">
1708
- {selectedReturnKey && selectedReturn && (
1709
- <IndependentFlightOption
1710
- key={`flight-${selectedReturnKey}`}
1711
- item={selectedReturn.return}
1712
- guid={selectedReturn.outwardGuid}
1713
- selectedGuid={selectedReturn.outwardGuid}
1714
- isOutward={false}
1715
- showSelectedState={true}
1716
- price={selectedReturn.price}
1717
- />
1718
- )}
1719
- {uniqueReturnFlights.map((result) => (
1720
- <IndependentFlightOption
1721
- key={`flight-${result.outwardGuid}`}
1722
- item={result.return}
1723
- onSelect={() => dispatch(setSelectedReturnKey(getFlightKey(result.return.segments)))}
1724
- guid={result.outwardGuid}
1725
- isOutward={false}
1726
- currentSelectedPrice={selectedReturn?.price}
1727
- price={result.price}
1728
- />
1729
- ))}
1730
- </div>
1731
- </>
1732
- )}
1733
-
1734
- {context.searchConfiguration.qsmType === PortalQsmType.AccommodationAndFlight && context.packagingEntry && (
1735
- <FullItinerary isLoading={itineraryIsLoading} />
1736
- )}
1737
- </div>
1738
- </div>
1739
- {/* <button onClick={() => handleFlyInToggle(!flyInIsOpen)}>Toggle FlyIn</button> */}
1740
- <FlyIn
1741
- srpType={context.searchConfiguration.qsmType}
1742
- isOpen={flyInIsOpen}
1743
- setIsOpen={handleFlyInToggle}
1744
- handleConfirm={() => handleConfirmHotelSwap()}
1745
- onPanelRef={(el) => (panelRef.current = el)}
1746
- detailsLoading={detailsIsLoading}
1747
- flyInType={flyInType}
1748
- isPackageEditFlow={!!context.packagingEntry}
1749
- sortByTypes={sortByTypes}
1750
- activeSearchSeed={activeSearchSeed}
1751
- toggleFilters={() => setFiltersOpen(!filtersOpen)}
1752
- filtersOpen={filtersOpen}
1753
- />
1754
- </>
1755
- )}
1756
- </div>
1757
- )}
1758
- </div>
1759
- )}
1760
- </div>
1761
- );
1762
- };
1763
-
1764
- export default SearchResultsContainer;