@qite/tide-booking-component 1.4.95 → 1.4.97

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 (453) hide show
  1. package/README.md +24 -24
  2. package/build/build-cjs/index.js +48813 -29709
  3. package/build/build-cjs/src/booking-product/components/age-select.d.ts +3 -3
  4. package/build/build-cjs/src/booking-product/components/amount-input.d.ts +5 -5
  5. package/build/build-cjs/src/booking-product/components/date-range-picker/calendar-day.d.ts +8 -8
  6. package/build/build-cjs/src/booking-product/components/date-range-picker/calendar.d.ts +14 -14
  7. package/build/build-cjs/src/booking-product/components/date-range-picker/index.d.ts +16 -19
  8. package/build/build-cjs/src/booking-product/components/dates.d.ts +8 -8
  9. package/build/build-cjs/src/booking-product/components/footer.d.ts +5 -5
  10. package/build/build-cjs/src/booking-product/components/header.d.ts +6 -6
  11. package/build/build-cjs/src/booking-product/components/icon.d.ts +5 -5
  12. package/build/build-cjs/src/booking-product/components/list-view.d.ts +2 -2
  13. package/build/build-cjs/src/booking-product/components/product.d.ts +4 -4
  14. package/build/build-cjs/src/booking-product/components/rating.d.ts +1 -1
  15. package/build/build-cjs/src/booking-product/components/rooms.d.ts +4 -4
  16. package/build/build-cjs/src/booking-product/constants.d.ts +1 -1
  17. package/build/build-cjs/src/booking-product/index.d.ts +4 -4
  18. package/build/build-cjs/src/booking-product/settings-context.d.ts +1 -2
  19. package/build/build-cjs/src/booking-product/types.d.ts +21 -21
  20. package/build/build-cjs/src/booking-product/utils/api.d.ts +11 -2
  21. package/build/build-cjs/src/booking-product/utils/price.d.ts +10 -1
  22. package/build/build-cjs/src/booking-wizard/api-settings-slice.d.ts +3 -2
  23. package/build/build-cjs/src/booking-wizard/components/icon.d.ts +5 -5
  24. package/build/build-cjs/src/booking-wizard/components/labeled-input.d.ts +13 -13
  25. package/build/build-cjs/src/booking-wizard/components/labeled-select.d.ts +16 -16
  26. package/build/build-cjs/src/booking-wizard/components/message.d.ts +4 -4
  27. package/build/build-cjs/src/booking-wizard/components/multi-range-filter.d.ts +6 -6
  28. package/build/build-cjs/src/booking-wizard/components/phone-input.d.ts +11 -11
  29. package/build/build-cjs/src/booking-wizard/components/print-offer-button.d.ts +11 -11
  30. package/build/build-cjs/src/booking-wizard/components/product-card.d.ts +3 -3
  31. package/build/build-cjs/src/booking-wizard/components/step-indicator.d.ts +1 -1
  32. package/build/build-cjs/src/booking-wizard/components/step-route.d.ts +3 -3
  33. package/build/build-cjs/src/booking-wizard/features/booking/api.d.ts +26 -7
  34. package/build/build-cjs/src/booking-wizard/features/booking/booking-self-contained.d.ts +3 -3
  35. package/build/build-cjs/src/booking-wizard/features/booking/booking-slice.d.ts +102 -43
  36. package/build/build-cjs/src/booking-wizard/features/booking/booking.d.ts +3 -3
  37. package/build/build-cjs/src/booking-wizard/features/booking/constants.d.ts +8 -1
  38. package/build/build-cjs/src/booking-wizard/features/booking/selectors.d.ts +644 -479
  39. package/build/build-cjs/src/booking-wizard/features/confirmation/confirmation.d.ts +1 -2
  40. package/build/build-cjs/src/booking-wizard/features/error/error.d.ts +1 -2
  41. package/build/build-cjs/src/booking-wizard/features/flight-options/flight-filter.d.ts +3 -3
  42. package/build/build-cjs/src/booking-wizard/features/flight-options/flight-option-flight.d.ts +2 -2
  43. package/build/build-cjs/src/booking-wizard/features/flight-options/flight-option.d.ts +4 -4
  44. package/build/build-cjs/src/booking-wizard/features/flight-options/flight-utils.d.ts +9 -2
  45. package/build/build-cjs/src/booking-wizard/features/flight-options/index.d.ts +1 -2
  46. package/build/build-cjs/src/booking-wizard/features/price-details/price-details-api.d.ts +6 -1
  47. package/build/build-cjs/src/booking-wizard/features/price-details/price-details-slice.d.ts +15 -10
  48. package/build/build-cjs/src/booking-wizard/features/price-details/selectors.d.ts +302 -287
  49. package/build/build-cjs/src/booking-wizard/features/product-options/none-option.d.ts +3 -3
  50. package/build/build-cjs/src/booking-wizard/features/product-options/option-booking-airline-group.d.ts +2 -2
  51. package/build/build-cjs/src/booking-wizard/features/product-options/option-booking-group.d.ts +6 -6
  52. package/build/build-cjs/src/booking-wizard/features/product-options/option-item.d.ts +5 -5
  53. package/build/build-cjs/src/booking-wizard/features/product-options/option-pax-card.d.ts +4 -4
  54. package/build/build-cjs/src/booking-wizard/features/product-options/option-pax-group.d.ts +7 -7
  55. package/build/build-cjs/src/booking-wizard/features/product-options/option-room.d.ts +5 -5
  56. package/build/build-cjs/src/booking-wizard/features/product-options/option-unit-group.d.ts +7 -7
  57. package/build/build-cjs/src/booking-wizard/features/product-options/option-units-card.d.ts +3 -3
  58. package/build/build-cjs/src/booking-wizard/features/product-options/options-form.d.ts +1 -2
  59. package/build/build-cjs/src/booking-wizard/features/room-options/index.d.ts +1 -2
  60. package/build/build-cjs/src/booking-wizard/features/room-options/room-utils.d.ts +19 -6
  61. package/build/build-cjs/src/booking-wizard/features/room-options/room.d.ts +6 -6
  62. package/build/build-cjs/src/booking-wizard/features/room-options/traveler-rooms.d.ts +3 -3
  63. package/build/build-cjs/src/booking-wizard/features/sidebar/index.d.ts +2 -2
  64. package/build/build-cjs/src/booking-wizard/features/sidebar/sidebar-flight.d.ts +2 -2
  65. package/build/build-cjs/src/booking-wizard/features/sidebar/sidebar-util.d.ts +4 -2
  66. package/build/build-cjs/src/booking-wizard/features/sidebar/sidebar.d.ts +24 -24
  67. package/build/build-cjs/src/booking-wizard/features/summary/summary-booking-option-pax.d.ts +1 -1
  68. package/build/build-cjs/src/booking-wizard/features/summary/summary-booking-option-unit.d.ts +1 -1
  69. package/build/build-cjs/src/booking-wizard/features/summary/summary-flight.d.ts +2 -2
  70. package/build/build-cjs/src/booking-wizard/features/summary/summary-per-booking-option-group.d.ts +1 -1
  71. package/build/build-cjs/src/booking-wizard/features/summary/summary-per-pax-option-group.d.ts +1 -1
  72. package/build/build-cjs/src/booking-wizard/features/summary/summary-per-unit-option-group.d.ts +1 -1
  73. package/build/build-cjs/src/booking-wizard/features/summary/summary-slice.d.ts +3 -3
  74. package/build/build-cjs/src/booking-wizard/features/summary/summary.d.ts +1 -2
  75. package/build/build-cjs/src/booking-wizard/features/travelers-form/travelers-form-slice.d.ts +75 -75
  76. package/build/build-cjs/src/booking-wizard/features/travelers-form/travelers-form-util.d.ts +4 -4
  77. package/build/build-cjs/src/booking-wizard/features/travelers-form/travelers-form.d.ts +1 -2
  78. package/build/build-cjs/src/booking-wizard/features/travelers-form/type-ahead-input.d.ts +11 -11
  79. package/build/build-cjs/src/booking-wizard/features/travelers-form/validate-form.d.ts +8 -1
  80. package/build/build-cjs/src/booking-wizard/index.d.ts +6 -6
  81. package/build/build-cjs/src/booking-wizard/settings-context.d.ts +1 -2
  82. package/build/build-cjs/src/booking-wizard/store.d.ts +40 -22
  83. package/build/build-cjs/src/booking-wizard/types.d.ts +240 -240
  84. package/build/build-cjs/src/booking-wizard/use-offer-printer.d.ts +8 -8
  85. package/build/build-cjs/src/content/components/LanguageSwitcher.d.ts +5 -5
  86. package/build/build-cjs/src/content/components/accordion.d.ts +4 -4
  87. package/build/build-cjs/src/content/components/breadcrumb.d.ts +7 -7
  88. package/build/build-cjs/src/content/components/faq.d.ts +4 -4
  89. package/build/build-cjs/src/content/components/gallery.d.ts +6 -6
  90. package/build/build-cjs/src/content/components/icon.d.ts +5 -5
  91. package/build/build-cjs/src/content/components/image-with-text.d.ts +18 -18
  92. package/build/build-cjs/src/content/components/slider.d.ts +5 -5
  93. package/build/build-cjs/src/content/featured-trips/types.d.ts +8 -8
  94. package/build/build-cjs/src/content/features/content-page/content-page-self-contained.d.ts +1 -1
  95. package/build/build-cjs/src/content/footer/types.d.ts +17 -17
  96. package/build/build-cjs/src/content/header/types.d.ts +23 -20
  97. package/build/build-cjs/src/content/image-card-grid/types.d.ts +8 -8
  98. package/build/build-cjs/src/content/image-with-text-section/types.d.ts +15 -15
  99. package/build/build-cjs/src/content/login/login-services.d.ts +6 -1
  100. package/build/build-cjs/src/content/login/types.d.ts +19 -19
  101. package/build/build-cjs/src/content/navbar/placeholderData.d.ts +2 -2
  102. package/build/build-cjs/src/content/navbar/types.d.ts +22 -22
  103. package/build/build-cjs/src/index.d.ts +17 -1
  104. package/build/build-cjs/src/qsm/components/date-range-picker/calendar-day.d.ts +7 -7
  105. package/build/build-cjs/src/qsm/components/date-range-picker/calendar.d.ts +18 -18
  106. package/build/build-cjs/src/qsm/components/date-range-picker/index.d.ts +5 -5
  107. package/build/build-cjs/src/qsm/components/double-search-input-group/index.d.ts +2 -2
  108. package/build/build-cjs/src/qsm/components/icon.d.ts +5 -5
  109. package/build/build-cjs/src/qsm/components/item-picker/index.d.ts +7 -7
  110. package/build/build-cjs/src/qsm/components/search-input/index.d.ts +9 -9
  111. package/build/build-cjs/src/qsm/components/search-input-group/index.d.ts +7 -7
  112. package/build/build-cjs/src/qsm/index.d.ts +1 -1
  113. package/build/build-cjs/src/qsm/store/qsm-slice.d.ts +110 -58
  114. package/build/build-cjs/src/qsm/store/qsm-store.d.ts +20 -7
  115. package/build/build-cjs/src/qsm/types.d.ts +59 -59
  116. package/build/build-cjs/src/search-results/components/filters/filters.d.ts +5 -5
  117. package/build/build-cjs/src/search-results/components/filters/flight-filters.d.ts +3 -3
  118. package/build/build-cjs/src/search-results/components/flight/flight-banner.d.ts +2 -2
  119. package/build/build-cjs/src/search-results/components/flight/flight-card.d.ts +1 -1
  120. package/build/build-cjs/src/search-results/components/flight/flight-leg.d.ts +1 -1
  121. package/build/build-cjs/src/search-results/components/flight/flight-path.d.ts +1 -1
  122. package/build/build-cjs/src/search-results/components/flight/flight-results.d.ts +2 -2
  123. package/build/build-cjs/src/search-results/components/flight/flight-search-context/index.d.ts +29 -29
  124. package/build/build-cjs/src/search-results/components/flight/flight-selection/independent-flight-option.d.ts +5 -5
  125. package/build/build-cjs/src/search-results/components/flight/flight-selection/independent-flight-selection.d.ts +1 -1
  126. package/build/build-cjs/src/search-results/components/flight/flight-selection/index.d.ts +2 -2
  127. package/build/build-cjs/src/search-results/components/flight/flight-selection/paired-flight-option.d.ts +1 -1
  128. package/build/build-cjs/src/search-results/components/flight/flight-selection/paired-flight-selection.d.ts +1 -1
  129. package/build/build-cjs/src/search-results/components/group-tour/group-tour-card.d.ts +3 -3
  130. package/build/build-cjs/src/search-results/components/group-tour/group-tour-results.d.ts +1 -1
  131. package/build/build-cjs/src/search-results/components/hotel/hotel-accommodation-results.d.ts +1 -1
  132. package/build/build-cjs/src/search-results/components/hotel/hotel-card.d.ts +2 -2
  133. package/build/build-cjs/src/search-results/components/icon.d.ts +6 -6
  134. package/build/build-cjs/src/search-results/components/item-picker/index.d.ts +8 -8
  135. package/build/build-cjs/src/search-results/components/itinerary/index.d.ts +3 -3
  136. package/build/build-cjs/src/search-results/components/multi-range-filter.d.ts +6 -6
  137. package/build/build-cjs/src/search-results/components/round-trip/round-trip-results.d.ts +1 -2
  138. package/build/build-cjs/src/search-results/components/search-results-container/flight-search-results.d.ts +1 -1
  139. package/build/build-cjs/src/search-results/components/tab-views/index.d.ts +1 -2
  140. package/build/build-cjs/src/search-results/features/flights/flight-search-results-self-contained.d.ts +1 -2
  141. package/build/build-cjs/src/search-results/features/hotels/hotel-flight-search-results-self-contained.d.ts +1 -2
  142. package/build/build-cjs/src/search-results/features/hotels/hotel-search-results-self-contained.d.ts +1 -2
  143. package/build/build-cjs/src/search-results/features/roundtrips/roundtrip-search-results-self-contained.d.ts +1 -2
  144. package/build/build-cjs/src/search-results/index.d.ts +1 -1
  145. package/build/build-cjs/src/search-results/store/search-results-slice.d.ts +63 -26
  146. package/build/build-cjs/src/search-results/store/search-results-store.d.ts +20 -7
  147. package/build/build-cjs/src/search-results/types.d.ts +104 -104
  148. package/build/build-cjs/src/search-results/utils/flight-utils.d.ts +6 -1
  149. package/build/build-cjs/src/search-results/utils/search-results-utils.d.ts +10 -2
  150. package/build/build-cjs/src/shared/components/flyin/accommodation-flyin.d.ts +3 -3
  151. package/build/build-cjs/src/shared/components/flyin/flights-flyin.d.ts +2 -2
  152. package/build/build-cjs/src/shared/components/flyin/flyin.d.ts +7 -7
  153. package/build/build-cjs/src/shared/components/flyin/group-tour-flyin.d.ts +3 -3
  154. package/build/build-cjs/src/shared/components/icon.d.ts +5 -5
  155. package/build/build-cjs/src/shared/components/loader.d.ts +1 -1
  156. package/build/build-cjs/src/shared/types.d.ts +9 -9
  157. package/build/build-cjs/src/shared/utils/localization-util.d.ts +395 -396
  158. package/build/build-esm/index.js +48531 -29650
  159. package/build/build-esm/src/booking-product/components/age-select.d.ts +3 -3
  160. package/build/build-esm/src/booking-product/components/amount-input.d.ts +5 -5
  161. package/build/build-esm/src/booking-product/components/date-range-picker/calendar-day.d.ts +8 -8
  162. package/build/build-esm/src/booking-product/components/date-range-picker/calendar.d.ts +14 -14
  163. package/build/build-esm/src/booking-product/components/date-range-picker/index.d.ts +16 -19
  164. package/build/build-esm/src/booking-product/components/dates.d.ts +8 -8
  165. package/build/build-esm/src/booking-product/components/footer.d.ts +5 -5
  166. package/build/build-esm/src/booking-product/components/header.d.ts +6 -6
  167. package/build/build-esm/src/booking-product/components/icon.d.ts +5 -5
  168. package/build/build-esm/src/booking-product/components/list-view.d.ts +2 -2
  169. package/build/build-esm/src/booking-product/components/product.d.ts +4 -4
  170. package/build/build-esm/src/booking-product/components/rating.d.ts +1 -1
  171. package/build/build-esm/src/booking-product/components/rooms.d.ts +4 -4
  172. package/build/build-esm/src/booking-product/constants.d.ts +1 -1
  173. package/build/build-esm/src/booking-product/index.d.ts +4 -4
  174. package/build/build-esm/src/booking-product/settings-context.d.ts +1 -2
  175. package/build/build-esm/src/booking-product/types.d.ts +21 -21
  176. package/build/build-esm/src/booking-product/utils/api.d.ts +11 -2
  177. package/build/build-esm/src/booking-product/utils/price.d.ts +10 -1
  178. package/build/build-esm/src/booking-wizard/api-settings-slice.d.ts +3 -2
  179. package/build/build-esm/src/booking-wizard/components/icon.d.ts +5 -5
  180. package/build/build-esm/src/booking-wizard/components/labeled-input.d.ts +13 -13
  181. package/build/build-esm/src/booking-wizard/components/labeled-select.d.ts +16 -16
  182. package/build/build-esm/src/booking-wizard/components/message.d.ts +4 -4
  183. package/build/build-esm/src/booking-wizard/components/multi-range-filter.d.ts +6 -6
  184. package/build/build-esm/src/booking-wizard/components/phone-input.d.ts +11 -11
  185. package/build/build-esm/src/booking-wizard/components/print-offer-button.d.ts +11 -11
  186. package/build/build-esm/src/booking-wizard/components/product-card.d.ts +3 -3
  187. package/build/build-esm/src/booking-wizard/components/step-indicator.d.ts +1 -1
  188. package/build/build-esm/src/booking-wizard/components/step-route.d.ts +3 -3
  189. package/build/build-esm/src/booking-wizard/features/booking/api.d.ts +26 -7
  190. package/build/build-esm/src/booking-wizard/features/booking/booking-self-contained.d.ts +3 -3
  191. package/build/build-esm/src/booking-wizard/features/booking/booking-slice.d.ts +102 -43
  192. package/build/build-esm/src/booking-wizard/features/booking/booking.d.ts +3 -3
  193. package/build/build-esm/src/booking-wizard/features/booking/constants.d.ts +8 -1
  194. package/build/build-esm/src/booking-wizard/features/booking/selectors.d.ts +644 -479
  195. package/build/build-esm/src/booking-wizard/features/confirmation/confirmation.d.ts +1 -2
  196. package/build/build-esm/src/booking-wizard/features/error/error.d.ts +1 -2
  197. package/build/build-esm/src/booking-wizard/features/flight-options/flight-filter.d.ts +3 -3
  198. package/build/build-esm/src/booking-wizard/features/flight-options/flight-option-flight.d.ts +2 -2
  199. package/build/build-esm/src/booking-wizard/features/flight-options/flight-option.d.ts +4 -4
  200. package/build/build-esm/src/booking-wizard/features/flight-options/flight-utils.d.ts +9 -2
  201. package/build/build-esm/src/booking-wizard/features/flight-options/index.d.ts +1 -2
  202. package/build/build-esm/src/booking-wizard/features/price-details/price-details-api.d.ts +6 -1
  203. package/build/build-esm/src/booking-wizard/features/price-details/price-details-slice.d.ts +15 -10
  204. package/build/build-esm/src/booking-wizard/features/price-details/selectors.d.ts +302 -287
  205. package/build/build-esm/src/booking-wizard/features/product-options/none-option.d.ts +3 -3
  206. package/build/build-esm/src/booking-wizard/features/product-options/option-booking-airline-group.d.ts +2 -2
  207. package/build/build-esm/src/booking-wizard/features/product-options/option-booking-group.d.ts +6 -6
  208. package/build/build-esm/src/booking-wizard/features/product-options/option-item.d.ts +5 -5
  209. package/build/build-esm/src/booking-wizard/features/product-options/option-pax-card.d.ts +4 -4
  210. package/build/build-esm/src/booking-wizard/features/product-options/option-pax-group.d.ts +7 -7
  211. package/build/build-esm/src/booking-wizard/features/product-options/option-room.d.ts +5 -5
  212. package/build/build-esm/src/booking-wizard/features/product-options/option-unit-group.d.ts +7 -7
  213. package/build/build-esm/src/booking-wizard/features/product-options/option-units-card.d.ts +3 -3
  214. package/build/build-esm/src/booking-wizard/features/product-options/options-form.d.ts +1 -2
  215. package/build/build-esm/src/booking-wizard/features/room-options/index.d.ts +1 -2
  216. package/build/build-esm/src/booking-wizard/features/room-options/room-utils.d.ts +19 -6
  217. package/build/build-esm/src/booking-wizard/features/room-options/room.d.ts +6 -6
  218. package/build/build-esm/src/booking-wizard/features/room-options/traveler-rooms.d.ts +3 -3
  219. package/build/build-esm/src/booking-wizard/features/sidebar/index.d.ts +2 -2
  220. package/build/build-esm/src/booking-wizard/features/sidebar/sidebar-flight.d.ts +2 -2
  221. package/build/build-esm/src/booking-wizard/features/sidebar/sidebar-util.d.ts +4 -2
  222. package/build/build-esm/src/booking-wizard/features/sidebar/sidebar.d.ts +24 -24
  223. package/build/build-esm/src/booking-wizard/features/summary/summary-booking-option-pax.d.ts +1 -1
  224. package/build/build-esm/src/booking-wizard/features/summary/summary-booking-option-unit.d.ts +1 -1
  225. package/build/build-esm/src/booking-wizard/features/summary/summary-flight.d.ts +2 -2
  226. package/build/build-esm/src/booking-wizard/features/summary/summary-per-booking-option-group.d.ts +1 -1
  227. package/build/build-esm/src/booking-wizard/features/summary/summary-per-pax-option-group.d.ts +1 -1
  228. package/build/build-esm/src/booking-wizard/features/summary/summary-per-unit-option-group.d.ts +1 -1
  229. package/build/build-esm/src/booking-wizard/features/summary/summary-slice.d.ts +3 -3
  230. package/build/build-esm/src/booking-wizard/features/summary/summary.d.ts +1 -2
  231. package/build/build-esm/src/booking-wizard/features/travelers-form/travelers-form-slice.d.ts +75 -75
  232. package/build/build-esm/src/booking-wizard/features/travelers-form/travelers-form-util.d.ts +4 -4
  233. package/build/build-esm/src/booking-wizard/features/travelers-form/travelers-form.d.ts +1 -2
  234. package/build/build-esm/src/booking-wizard/features/travelers-form/type-ahead-input.d.ts +11 -11
  235. package/build/build-esm/src/booking-wizard/features/travelers-form/validate-form.d.ts +8 -1
  236. package/build/build-esm/src/booking-wizard/index.d.ts +6 -6
  237. package/build/build-esm/src/booking-wizard/settings-context.d.ts +1 -2
  238. package/build/build-esm/src/booking-wizard/store.d.ts +40 -22
  239. package/build/build-esm/src/booking-wizard/types.d.ts +240 -240
  240. package/build/build-esm/src/booking-wizard/use-offer-printer.d.ts +8 -8
  241. package/build/build-esm/src/content/components/LanguageSwitcher.d.ts +5 -5
  242. package/build/build-esm/src/content/components/accordion.d.ts +4 -4
  243. package/build/build-esm/src/content/components/breadcrumb.d.ts +7 -7
  244. package/build/build-esm/src/content/components/faq.d.ts +4 -4
  245. package/build/build-esm/src/content/components/gallery.d.ts +6 -6
  246. package/build/build-esm/src/content/components/icon.d.ts +5 -5
  247. package/build/build-esm/src/content/components/image-with-text.d.ts +18 -18
  248. package/build/build-esm/src/content/components/slider.d.ts +5 -5
  249. package/build/build-esm/src/content/featured-trips/types.d.ts +8 -8
  250. package/build/build-esm/src/content/features/content-page/content-page-self-contained.d.ts +1 -1
  251. package/build/build-esm/src/content/footer/types.d.ts +17 -17
  252. package/build/build-esm/src/content/header/types.d.ts +23 -20
  253. package/build/build-esm/src/content/image-card-grid/types.d.ts +8 -8
  254. package/build/build-esm/src/content/image-with-text-section/types.d.ts +15 -15
  255. package/build/build-esm/src/content/login/login-services.d.ts +6 -1
  256. package/build/build-esm/src/content/login/types.d.ts +19 -19
  257. package/build/build-esm/src/content/navbar/placeholderData.d.ts +2 -2
  258. package/build/build-esm/src/content/navbar/types.d.ts +22 -22
  259. package/build/build-esm/src/index.d.ts +17 -1
  260. package/build/build-esm/src/qsm/components/date-range-picker/calendar-day.d.ts +7 -7
  261. package/build/build-esm/src/qsm/components/date-range-picker/calendar.d.ts +18 -18
  262. package/build/build-esm/src/qsm/components/date-range-picker/index.d.ts +5 -5
  263. package/build/build-esm/src/qsm/components/double-search-input-group/index.d.ts +2 -2
  264. package/build/build-esm/src/qsm/components/icon.d.ts +5 -5
  265. package/build/build-esm/src/qsm/components/item-picker/index.d.ts +7 -7
  266. package/build/build-esm/src/qsm/components/search-input/index.d.ts +9 -9
  267. package/build/build-esm/src/qsm/components/search-input-group/index.d.ts +7 -7
  268. package/build/build-esm/src/qsm/index.d.ts +1 -1
  269. package/build/build-esm/src/qsm/store/qsm-slice.d.ts +110 -58
  270. package/build/build-esm/src/qsm/store/qsm-store.d.ts +20 -7
  271. package/build/build-esm/src/qsm/types.d.ts +59 -59
  272. package/build/build-esm/src/search-results/components/filters/filters.d.ts +5 -5
  273. package/build/build-esm/src/search-results/components/filters/flight-filters.d.ts +3 -3
  274. package/build/build-esm/src/search-results/components/flight/flight-banner.d.ts +2 -2
  275. package/build/build-esm/src/search-results/components/flight/flight-card.d.ts +1 -1
  276. package/build/build-esm/src/search-results/components/flight/flight-leg.d.ts +1 -1
  277. package/build/build-esm/src/search-results/components/flight/flight-path.d.ts +1 -1
  278. package/build/build-esm/src/search-results/components/flight/flight-results.d.ts +2 -2
  279. package/build/build-esm/src/search-results/components/flight/flight-search-context/index.d.ts +29 -29
  280. package/build/build-esm/src/search-results/components/flight/flight-selection/independent-flight-option.d.ts +5 -5
  281. package/build/build-esm/src/search-results/components/flight/flight-selection/independent-flight-selection.d.ts +1 -1
  282. package/build/build-esm/src/search-results/components/flight/flight-selection/index.d.ts +2 -2
  283. package/build/build-esm/src/search-results/components/flight/flight-selection/paired-flight-option.d.ts +1 -1
  284. package/build/build-esm/src/search-results/components/flight/flight-selection/paired-flight-selection.d.ts +1 -1
  285. package/build/build-esm/src/search-results/components/group-tour/group-tour-card.d.ts +3 -3
  286. package/build/build-esm/src/search-results/components/group-tour/group-tour-results.d.ts +1 -1
  287. package/build/build-esm/src/search-results/components/hotel/hotel-accommodation-results.d.ts +1 -1
  288. package/build/build-esm/src/search-results/components/hotel/hotel-card.d.ts +2 -2
  289. package/build/build-esm/src/search-results/components/icon.d.ts +6 -6
  290. package/build/build-esm/src/search-results/components/item-picker/index.d.ts +8 -8
  291. package/build/build-esm/src/search-results/components/itinerary/index.d.ts +3 -3
  292. package/build/build-esm/src/search-results/components/multi-range-filter.d.ts +6 -6
  293. package/build/build-esm/src/search-results/components/round-trip/round-trip-results.d.ts +1 -2
  294. package/build/build-esm/src/search-results/components/search-results-container/flight-search-results.d.ts +1 -1
  295. package/build/build-esm/src/search-results/components/tab-views/index.d.ts +1 -2
  296. package/build/build-esm/src/search-results/features/flights/flight-search-results-self-contained.d.ts +1 -2
  297. package/build/build-esm/src/search-results/features/hotels/hotel-flight-search-results-self-contained.d.ts +1 -2
  298. package/build/build-esm/src/search-results/features/hotels/hotel-search-results-self-contained.d.ts +1 -2
  299. package/build/build-esm/src/search-results/features/roundtrips/roundtrip-search-results-self-contained.d.ts +1 -2
  300. package/build/build-esm/src/search-results/index.d.ts +1 -1
  301. package/build/build-esm/src/search-results/store/search-results-slice.d.ts +63 -26
  302. package/build/build-esm/src/search-results/store/search-results-store.d.ts +20 -7
  303. package/build/build-esm/src/search-results/types.d.ts +104 -104
  304. package/build/build-esm/src/search-results/utils/flight-utils.d.ts +6 -1
  305. package/build/build-esm/src/search-results/utils/search-results-utils.d.ts +10 -2
  306. package/build/build-esm/src/shared/components/flyin/accommodation-flyin.d.ts +3 -3
  307. package/build/build-esm/src/shared/components/flyin/flights-flyin.d.ts +2 -2
  308. package/build/build-esm/src/shared/components/flyin/flyin.d.ts +7 -7
  309. package/build/build-esm/src/shared/components/flyin/group-tour-flyin.d.ts +3 -3
  310. package/build/build-esm/src/shared/components/icon.d.ts +5 -5
  311. package/build/build-esm/src/shared/components/loader.d.ts +1 -1
  312. package/build/build-esm/src/shared/types.d.ts +9 -9
  313. package/build/build-esm/src/shared/utils/localization-util.d.ts +395 -396
  314. package/package.json +83 -83
  315. package/rollup.config.js +16 -16
  316. package/src/booking-product/components/date-range-picker/calendar-day.tsx +46 -46
  317. package/src/booking-product/components/date-range-picker/index.tsx +185 -185
  318. package/src/booking-product/components/dates.tsx +153 -153
  319. package/src/booking-product/components/product.tsx +379 -379
  320. package/src/booking-wizard/components/step-indicator.tsx +57 -57
  321. package/src/booking-wizard/components/step-route.tsx +26 -26
  322. package/src/booking-wizard/features/booking/api.ts +44 -44
  323. package/src/booking-wizard/features/booking/booking-self-contained.tsx +318 -318
  324. package/src/booking-wizard/features/booking/booking-slice.ts +633 -633
  325. package/src/booking-wizard/features/booking/booking.tsx +342 -342
  326. package/src/booking-wizard/features/booking/constants.ts +16 -16
  327. package/src/booking-wizard/features/booking/selectors.ts +411 -411
  328. package/src/booking-wizard/features/confirmation/confirmation.tsx +90 -90
  329. package/src/booking-wizard/features/error/error.tsx +71 -71
  330. package/src/booking-wizard/features/flight-options/index.tsx +166 -166
  331. package/src/booking-wizard/features/price-details/price-details-slice.ts +79 -79
  332. package/src/booking-wizard/features/price-details/selectors.ts +118 -118
  333. package/src/booking-wizard/features/product-options/option-units-card.tsx +148 -148
  334. package/src/booking-wizard/features/product-options/options-form.tsx +382 -382
  335. package/src/booking-wizard/features/room-options/index.tsx +132 -132
  336. package/src/booking-wizard/features/sidebar/index.tsx +83 -83
  337. package/src/booking-wizard/features/sidebar/sidebar-util.ts +147 -147
  338. package/src/booking-wizard/features/sidebar/sidebar.tsx +344 -332
  339. package/src/booking-wizard/features/summary/summary.tsx +562 -562
  340. package/src/booking-wizard/features/travelers-form/controls/gender-control.tsx +60 -60
  341. package/src/booking-wizard/features/travelers-form/travelers-form.tsx +1101 -1101
  342. package/src/booking-wizard/settings-context.ts +64 -64
  343. package/src/booking-wizard/types.ts +332 -332
  344. package/src/content/components/breadcrumb.tsx +67 -67
  345. package/src/content/components/faq.tsx +42 -42
  346. package/src/content/components/gallery.tsx +153 -153
  347. package/src/content/components/icon.tsx +695 -695
  348. package/src/content/components/image-with-text.tsx +120 -120
  349. package/src/content/components/login.tsx +162 -162
  350. package/src/content/components/slider.tsx +237 -237
  351. package/src/content/featured-trips/featured-trip-card.tsx +48 -48
  352. package/src/content/featured-trips/index.tsx +19 -19
  353. package/src/content/featured-trips/types.ts +13 -13
  354. package/src/content/features/content-page/content-page-self-contained.tsx +895 -895
  355. package/src/content/footer/index.tsx +159 -159
  356. package/src/content/footer/types.ts +36 -36
  357. package/src/content/image-card-grid/index.tsx +34 -34
  358. package/src/content/image-card-grid/types.ts +13 -13
  359. package/src/content/image-with-text-section/card.tsx +58 -58
  360. package/src/content/image-with-text-section/index.tsx +22 -22
  361. package/src/content/image-with-text-section/types.ts +20 -20
  362. package/src/content/login/confirm-component.tsx +149 -149
  363. package/src/content/login/index.tsx +70 -70
  364. package/src/content/login/login-component.tsx +159 -159
  365. package/src/content/login/login-services.ts +109 -109
  366. package/src/content/login/reset-password-component.tsx +191 -191
  367. package/src/content/login/types.ts +29 -29
  368. package/src/content/navbar/index.tsx +354 -354
  369. package/src/content/navbar/placeholderData.tsx +173 -173
  370. package/src/content/navbar/types.ts +43 -43
  371. package/src/index.ts +44 -44
  372. package/src/qsm/components/QSMContainer/qsm-container.tsx +512 -512
  373. package/src/qsm/components/double-search-input-group/index.tsx +78 -78
  374. package/src/qsm/components/icon.tsx +354 -354
  375. package/src/qsm/components/item-picker/index.tsx +69 -69
  376. package/src/qsm/components/mobile-filter-modal/index.tsx +307 -307
  377. package/src/qsm/components/search-input/index.tsx +91 -91
  378. package/src/qsm/components/search-input-group/index.tsx +199 -199
  379. package/src/qsm/components/travel-class-picker/index.tsx +28 -28
  380. package/src/qsm/components/travel-input/index.tsx +243 -243
  381. package/src/qsm/components/travel-input-group/index.tsx +114 -114
  382. package/src/qsm/components/travel-nationality-picker/index.tsx +28 -28
  383. package/src/qsm/components/travel-type-picker/index.tsx +28 -28
  384. package/src/qsm/qsm-configuration-context.ts +31 -31
  385. package/src/qsm/store/qsm-slice.ts +275 -275
  386. package/src/qsm/types.ts +110 -110
  387. package/src/search-results/components/filters/filters.tsx +230 -230
  388. package/src/search-results/components/filters/flight-filters.tsx +671 -671
  389. package/src/search-results/components/flight/flight-banner.tsx +35 -35
  390. package/src/search-results/components/flight/flight-results.tsx +208 -208
  391. package/src/search-results/components/flight/flight-search-context/index.tsx +628 -628
  392. package/src/search-results/components/flight/flight-selection/independent-flight-option.tsx +147 -147
  393. package/src/search-results/components/flight/flight-selection/independent-flight-selection.tsx +172 -172
  394. package/src/search-results/components/flight/flight-selection/index.tsx +19 -19
  395. package/src/search-results/components/flight/flight-selection/paired-flight-option.tsx +255 -255
  396. package/src/search-results/components/flight/flight-selection/paired-flight-selection.tsx +38 -38
  397. package/src/search-results/components/group-tour/group-tour-card.tsx +105 -105
  398. package/src/search-results/components/group-tour/group-tour-results.tsx +62 -62
  399. package/src/search-results/components/hotel/hotel-accommodation-results.tsx +176 -176
  400. package/src/search-results/components/hotel/hotel-card.tsx +113 -113
  401. package/src/search-results/components/icon.tsx +680 -680
  402. package/src/search-results/components/item-picker/index.tsx +81 -81
  403. package/src/search-results/components/itinerary/index.tsx +310 -310
  404. package/src/search-results/components/round-trip/round-trip-results.tsx +199 -199
  405. package/src/search-results/components/search-results-container/flight-search-results.tsx +137 -137
  406. package/src/search-results/components/search-results-container/search-results-container.tsx +893 -893
  407. package/src/search-results/components/spinner/spinner.tsx +16 -16
  408. package/src/search-results/components/tab-views/index.tsx +53 -53
  409. package/src/search-results/features/flights/flight-search-results-self-contained.tsx +294 -294
  410. package/src/search-results/features/hotels/hotel-flight-search-results-self-contained.tsx +143 -143
  411. package/src/search-results/features/hotels/hotel-search-results-self-contained.tsx +220 -220
  412. package/src/search-results/features/roundtrips/roundtrip-search-results-self-contained.tsx +65 -65
  413. package/src/search-results/store/search-results-slice.ts +158 -158
  414. package/src/search-results/types.ts +181 -181
  415. package/src/search-results/utils/flight-utils.ts +93 -93
  416. package/src/search-results/utils/search-results-utils.ts +251 -251
  417. package/src/shared/components/flyin/accommodation-flyin.tsx +422 -422
  418. package/src/shared/components/flyin/flights-flyin.tsx +503 -503
  419. package/src/shared/components/flyin/flyin.tsx +82 -82
  420. package/src/shared/components/flyin/group-tour-flyin.tsx +293 -293
  421. package/src/shared/components/icon.tsx +826 -826
  422. package/src/shared/translations/ar-SA.json +382 -382
  423. package/src/shared/translations/da-DK.json +382 -382
  424. package/src/shared/translations/de-DE.json +382 -382
  425. package/src/shared/translations/en-GB.json +386 -386
  426. package/src/shared/translations/es-ES.json +382 -382
  427. package/src/shared/translations/fr-BE.json +386 -386
  428. package/src/shared/translations/fr-FR.json +382 -382
  429. package/src/shared/translations/is-IS.json +382 -382
  430. package/src/shared/translations/it-IT.json +382 -382
  431. package/src/shared/translations/ja-JP.json +382 -382
  432. package/src/shared/translations/nl-BE.json +386 -386
  433. package/src/shared/translations/nl-NL.json +382 -382
  434. package/src/shared/translations/no-NO.json +382 -382
  435. package/src/shared/translations/pl-PL.json +382 -382
  436. package/src/shared/translations/pt-PT.json +382 -382
  437. package/src/shared/translations/sv-SE.json +382 -382
  438. package/src/shared/types.ts +31 -31
  439. package/src/shared/utils/localization-util.ts +275 -275
  440. package/styles/booking-search-results-variables.scss +728 -728
  441. package/styles/booking-search-results.scss +53 -53
  442. package/styles/components/_booking.scss +872 -872
  443. package/styles/components/_content.scss +336 -336
  444. package/styles/components/_flyin.scss +727 -727
  445. package/styles/components/_footer.scss +141 -141
  446. package/styles/components/_form.scss +1634 -1634
  447. package/styles/components/_image-with-text.scss +206 -206
  448. package/styles/components/_login.scss +140 -140
  449. package/styles/components/_navbar.scss +765 -765
  450. package/styles/components/_pricing-summary.scss +163 -163
  451. package/styles/components/_search.scss +2009 -2009
  452. package/styles/components/_tree.scss +648 -648
  453. package/styles/content-blocks.scss +64 -64
@@ -1,633 +1,633 @@
1
- import { PayloadAction, createAsyncThunk, createSlice } from '@reduxjs/toolkit';
2
- import { BookingAttributes, BookingOptions, GroupedFlights, ProductAttributes } from '../../types';
3
-
4
- import {
5
- AirlineBookingPackageOption,
6
- AirportBookingPackageOption,
7
- BookingAirlineGroup,
8
- BookingAirportGroup,
9
- BookingOptionGroup,
10
- BookingOptionPax,
11
- BookingOptionUnit,
12
- BookingPackage,
13
- BookingPackageDetailsRequest,
14
- BookingPackageFlight,
15
- BookingPackagePax,
16
- BookingPackageRequest,
17
- BookingPackageRequestRoom,
18
- BookingPackageRoom,
19
- BookingTravelAgent,
20
- CountryItem,
21
- GenerateBookingAccommodationRequest,
22
- PerBookingPackageOption,
23
- SelectedFlight
24
- } from '@qite/tide-client/build/types';
25
- import { first, isEmpty, isNil, range } from 'lodash';
26
- import { RootState } from '../../store';
27
- import { selectAgentId } from '../travelers-form/travelers-form-slice';
28
- import packageApi from './api';
29
- import { BookingStep, OPTIONS_FORM_STEP } from './constants';
30
- import {
31
- selectAccommodationCodes,
32
- selectAgentAdressId,
33
- selectBookingAttributes,
34
- selectBookingRooms,
35
- selectLanguageCode,
36
- selectOfficeId,
37
- selectProductAttributes,
38
- selectProductCode
39
- } from './selectors';
40
-
41
- export interface BookingState {
42
- officeId: number;
43
- languageCode: string;
44
- productAttributes?: ProductAttributes;
45
- bookingAttributes?: BookingAttributes;
46
- calculateDeposit: boolean;
47
- showCommission?: boolean;
48
- bookingNumber?: string;
49
- isRetry: boolean;
50
- package?: BookingPackage;
51
- agents?: BookingTravelAgent[];
52
- isBusy: boolean;
53
- skipPaymentWithAgent: boolean;
54
- generatePaymentUrl: boolean;
55
- isUnavailable?: boolean;
56
- tagIds?: number[];
57
- agentAdressId?: number;
58
- remarks?: string;
59
- voucherCodes?: string[];
60
- bookingOptions: BookingOptions;
61
- bookingType: string;
62
- currentStep: BookingStep;
63
- translations?: {
64
- language: string;
65
- value: any;
66
- }[];
67
- accommodationViewId?: number;
68
- accommodationViews?: { [key: string]: string };
69
- isOption?: boolean;
70
- travelersFirstStep: boolean;
71
- isFetching?: boolean;
72
- hasMounted: boolean;
73
- countries?: CountryItem[];
74
- }
75
-
76
- const initialState: BookingState = {
77
- officeId: 1,
78
- languageCode: 'nl-BE',
79
- bookingOptions: {
80
- b2b: {
81
- tagIds: [],
82
- entryStatus: 2,
83
- customEntryStatusId: undefined
84
- },
85
- b2b2c: {
86
- tagIds: [],
87
- entryStatus: 2,
88
- customEntryStatusId: undefined
89
- },
90
- b2c: {
91
- tagIds: [],
92
- entryStatus: 0,
93
- customEntryStatusId: undefined
94
- }
95
- },
96
- bookingType: 'b2c',
97
- productAttributes: undefined,
98
- bookingAttributes: undefined,
99
- calculateDeposit: false,
100
- showCommission: false,
101
- bookingNumber: undefined,
102
- isRetry: false,
103
- package: undefined,
104
- isBusy: false,
105
- skipPaymentWithAgent: false,
106
- generatePaymentUrl: false,
107
- tagIds: [],
108
- agentAdressId: undefined,
109
- currentStep: OPTIONS_FORM_STEP,
110
- translations: undefined,
111
- travelersFirstStep: false,
112
- isFetching: false,
113
- hasMounted: false,
114
- countries: undefined
115
- };
116
-
117
- export const fetchPackage = createAsyncThunk('booking/fetchPackage', async (_, { dispatch }) => {
118
- dispatch(setFetchingPackage(true));
119
- await dispatch(fetchAgents());
120
- await dispatch(fetchCountries());
121
- await dispatch(fetchPackageDetails());
122
- await dispatch(fetchAccommodationViews());
123
- dispatch(setFetchingPackage(false));
124
- });
125
-
126
- export const fetchCountries = createAsyncThunk('booking/countries', async (_, { dispatch, getState, signal }) => {
127
- const settings = getState() as RootState;
128
- return await packageApi.fetchCountries(signal, settings.apiSettings);
129
- });
130
-
131
- const fetchAgents = createAsyncThunk('booking/agents', async (_, { dispatch, getState, signal }) => {
132
- const settings = getState() as RootState;
133
- return await packageApi.fetchAgents(signal, settings.apiSettings);
134
- });
135
-
136
- const fetchPackageDetails = createAsyncThunk('booking/details', async (_, { dispatch, getState, signal }) => {
137
- const state = getState() as RootState;
138
-
139
- const officeId = selectOfficeId(state);
140
- const productAttributes = selectProductAttributes(state);
141
- const bookingAttributes = selectBookingAttributes(state);
142
- const agentId = selectAgentId(state);
143
- const agentAdressId = selectAgentAdressId(state);
144
- const rooms = selectBookingRooms(state);
145
- const languageCode = selectLanguageCode(state);
146
-
147
- if (isNil(productAttributes)) {
148
- throw Error('productAttributes could not be found');
149
- }
150
-
151
- if (isNil(bookingAttributes)) {
152
- throw Error('bookingAttributes could not be found');
153
- }
154
-
155
- if (!rooms?.length) {
156
- throw Error('rooms could not be found');
157
- }
158
-
159
- var requestRooms = rooms?.map((x, i) => {
160
- var room = { index: i, pax: [] } as BookingPackageRequestRoom;
161
- range(0, x.adults).forEach(() => {
162
- room.pax.push({
163
- age: 30
164
- } as BookingPackagePax);
165
- });
166
- x.childAges.forEach((x) => {
167
- room.pax.push({
168
- age: x
169
- } as BookingPackagePax);
170
- });
171
- return room;
172
- });
173
-
174
- const isAllotment =
175
- bookingAttributes.tourCode || bookingAttributes.allotmentName || (bookingAttributes.allotmentIds && bookingAttributes.allotmentIds.length);
176
-
177
- let searchType = isAllotment
178
- ? 1 // ALLOTMENT
179
- : 0; // DEFAULT;
180
-
181
- let outwardFlight: SelectedFlight | undefined;
182
- let returnFlight: SelectedFlight | undefined;
183
- if (bookingAttributes.flightRouteId && bookingAttributes.flight) {
184
- searchType = 3; // FLIGHT;
185
-
186
- outwardFlight = {
187
- flightCode: bookingAttributes.flight.outwardCode,
188
- startDateTime: bookingAttributes.flight.outwardDepartureDate,
189
- endDateTime: bookingAttributes.flight.outwardArrivalDate,
190
- airlines: bookingAttributes.flight.outwardAirlines,
191
- flightNumbers: bookingAttributes.flight.outwardNumbers,
192
- fareCode: bookingAttributes.flight.outwardFareCode,
193
- marketingName: bookingAttributes.flight.outwardMarketingName,
194
- luggageIncluded: bookingAttributes.flight.luggageIncluded
195
- } as SelectedFlight;
196
-
197
- if (bookingAttributes.flight.returnCode) {
198
- returnFlight = {
199
- flightCode: bookingAttributes.flight.returnCode,
200
- startDateTime: bookingAttributes.flight.returnDepartureDate,
201
- endDateTime: bookingAttributes.flight.returnArrivalDate,
202
- airlines: bookingAttributes.flight.returnAirlines,
203
- flightNumbers: bookingAttributes.flight.returnNumbers,
204
- fareCode: bookingAttributes.flight.returnFareCode,
205
- marketingName: bookingAttributes.flight.returnMarketingName,
206
- luggageIncluded: bookingAttributes.flight.luggageIncluded
207
- } as SelectedFlight;
208
- }
209
- }
210
-
211
- const request = {
212
- officeId: officeId,
213
- agentId: agentId ?? agentAdressId,
214
- payload: {
215
- searchType: searchType,
216
- catalogueId: bookingAttributes.catalogueId,
217
- productCode: productAttributes.productCode,
218
- fromDate: bookingAttributes.startDate,
219
- toDate: bookingAttributes.endDate,
220
- includeFlights: bookingAttributes.includeFlights,
221
- allotmentName: bookingAttributes.allotmentName,
222
- allotmentIds: bookingAttributes.allotmentIds ?? [],
223
- tourCode: bookingAttributes.tourCode,
224
- rooms: requestRooms,
225
- routeId: bookingAttributes.flightRouteId,
226
- outwardFlight: outwardFlight,
227
- returnFlight: returnFlight,
228
- vendorConfigurationId: bookingAttributes.vendorConfigurationId
229
- } as BookingPackageDetailsRequest
230
- } as BookingPackageRequest<BookingPackageDetailsRequest>;
231
-
232
- return await packageApi.fetchDetails(request, signal, languageCode, state.apiSettings);
233
- });
234
-
235
- const fetchAccommodationViews = createAsyncThunk('booking/accommodationViews', async (_, { dispatch, getState, signal }) => {
236
- const state = getState() as RootState;
237
- if (!state.booking.accommodationViewId) return Promise.resolve();
238
-
239
- const languageCode = selectLanguageCode(state);
240
- const accommodationCodes = selectAccommodationCodes(state);
241
- const productCode = selectProductCode(state);
242
-
243
- if (!productCode) {
244
- throw Error('No product selected');
245
- }
246
-
247
- const request = {
248
- languageCode: languageCode,
249
- productCode: productCode,
250
- accommodationCodes: accommodationCodes,
251
- contentViewId: state.booking.accommodationViewId
252
- } as GenerateBookingAccommodationRequest;
253
-
254
- return await packageApi.fetchAccommodationViews(request, signal, state.apiSettings);
255
- });
256
-
257
- const getActiveOption = (state: BookingState) => {
258
- if (state.package) return state.package.options.find((x) => x.isSelected);
259
- return null;
260
- };
261
-
262
- const changeOutwardFlight = (state: BookingPackage, flight: BookingPackageFlight) => {
263
- const currentOutwardFlight = state.outwardFlights.find((x) => x.isSelected)!;
264
- const currentReturnFlight = state.returnFlights.find((x) => x.isSelected)!;
265
-
266
- if (currentOutwardFlight?.entryLineGuid == flight.entryLineGuid) return;
267
-
268
- const newFlight = state.outwardFlights.find((x) => x.entryLineGuid == flight.entryLineGuid);
269
- if (newFlight) {
270
- newFlight.isSelected = true;
271
- currentOutwardFlight.isSelected = false;
272
-
273
- if (newFlight.externalGuid) {
274
- if (currentOutwardFlight.externalGuid !== newFlight.externalGuid) {
275
- const newReturnFlight = state.returnFlights.find((x) => x.externalGuid === newFlight.externalGuid)!;
276
-
277
- currentReturnFlight.isSelected = false;
278
- newReturnFlight.isSelected = true;
279
- }
280
- } else if (currentReturnFlight.externalGuid) {
281
- const firstInternal = state.returnFlights.find((x) => !x.externalGuid);
282
-
283
- if (firstInternal) {
284
- currentReturnFlight.isSelected = false;
285
- firstInternal.isSelected = true;
286
- }
287
- }
288
- }
289
- };
290
-
291
- const changeReturnFlight = (state: BookingPackage, flight: BookingPackageFlight) => {
292
- const currentReturnFlight = state.returnFlights.find((x) => x.isSelected)!;
293
-
294
- if (currentReturnFlight?.entryLineGuid == flight.entryLineGuid) return;
295
-
296
- const newFlight = state.outwardFlights.find((x) => x.entryLineGuid == flight.entryLineGuid);
297
- if (newFlight) {
298
- newFlight.isSelected = true;
299
- currentReturnFlight.isSelected = false;
300
- }
301
- };
302
-
303
- const changePackageOption = (state: BookingPackage) => {
304
- const selectedOutward = state.outwardFlights.find((x) => x.isSelected)!;
305
- const selectedReturn = state.returnFlights.find((x) => x.isSelected)!;
306
- const validOptions = selectedOutward.validOptions.filter((x) => selectedReturn.validOptions.some((y) => x === y));
307
-
308
- const currentOption = state.options.find((x) => x.isSelected)!;
309
- if (validOptions.some((x) => x === currentOption.id)) return;
310
-
311
- const firstOption = state.options.find((x) => validOptions.some((y) => y === x.id))!;
312
- currentOption.isSelected = false;
313
- firstOption.isSelected = true;
314
-
315
- const currentRooms = currentOption.rooms.map((r) => {
316
- const selectedOption = r.options.find((o) => o.isSelected)!;
317
-
318
- return {
319
- accommodation: selectedOption?.accommodationCode,
320
- regime: selectedOption?.regimeCode
321
- };
322
- });
323
-
324
- firstOption.rooms.forEach((r, i) => {
325
- const currentRoom = currentRooms[i];
326
-
327
- const selectedOption = r.options.find((o) => o.isSelected);
328
- const selection = r.options.find((x) => x.accommodationCode === currentRoom.accommodation && x.regimeCode === currentRoom.regime);
329
-
330
- if (selection) {
331
- if (selection.entryLineGuid !== selectedOption?.entryLineGuid) {
332
- if (selectedOption) selectedOption.isSelected = false;
333
- selection.isSelected = true;
334
- }
335
- } else {
336
- const accommodationSelection = r.options.find((x) => x.accommodationCode === currentRoom.accommodation);
337
- if (accommodationSelection) {
338
- if (accommodationSelection.entryLineGuid !== selectedOption?.entryLineGuid) {
339
- if (selectedOption) selectedOption.isSelected = false;
340
- accommodationSelection.isSelected = true;
341
- }
342
- } else {
343
- const firstOption = r.options[0];
344
- if (firstOption.entryLineGuid !== selectedOption?.entryLineGuid) {
345
- if (selectedOption) selectedOption.isSelected = false;
346
- firstOption.isSelected = true;
347
- }
348
- }
349
- }
350
- });
351
- };
352
-
353
- const bookingSlice = createSlice({
354
- name: 'booking',
355
- initialState,
356
- reducers: {
357
- setHasMounted(state, action: PayloadAction<boolean>) {
358
- state.hasMounted = action.payload;
359
- },
360
- setIsFetching(state, action: PayloadAction<boolean>) {
361
- state.isFetching = action.payload;
362
- },
363
- setOfficeId(state, action: PayloadAction<number>) {
364
- state.officeId = action.payload;
365
- },
366
- setLanguageCode(state, action: PayloadAction<string>) {
367
- state.languageCode = action.payload;
368
- },
369
- setTranslations(state, action: PayloadAction<any>) {
370
- state.translations = action.payload;
371
- },
372
- setBookingOptions(state, action: PayloadAction<BookingOptions>) {
373
- state.bookingOptions = action.payload;
374
- },
375
- setBookingType(state, action: PayloadAction<string>) {
376
- state.bookingType = action.payload;
377
- },
378
- setProductAttributes(state, action: PayloadAction<ProductAttributes | undefined>) {
379
- state.productAttributes = action.payload;
380
- },
381
- setBookingAttributes(state, action: PayloadAction<BookingAttributes | undefined>) {
382
- state.bookingAttributes = action.payload;
383
- },
384
- setCalculateDeposit(state, action: PayloadAction<boolean>) {
385
- state.calculateDeposit = action.payload;
386
- },
387
- setShowCommission(state, action: PayloadAction<boolean | undefined>) {
388
- state.showCommission = action.payload;
389
- },
390
- setBookingNumber(state, action: PayloadAction<string>) {
391
- state.bookingNumber = action.payload;
392
- },
393
- setIsRetry(state, action: PayloadAction<boolean>) {
394
- state.isRetry = action.payload;
395
- },
396
- setFetchingPackage(state, action: PayloadAction<boolean>) {
397
- state.isBusy = action.payload;
398
- },
399
- setPackage(state, action: PayloadAction<BookingPackage | undefined>) {
400
- state.package = action.payload;
401
- },
402
- setPackageRooms(state, action: PayloadAction<BookingPackageRoom[]>) {
403
- const option = getActiveOption(state);
404
- if (option) option.rooms = action.payload;
405
- },
406
- setPackageOptionPax(state, action: PayloadAction<BookingOptionPax[]>) {
407
- const option = getActiveOption(state);
408
- if (option) option.optionPax = action.payload;
409
- },
410
- setPackageOptionUnits(state, action: PayloadAction<BookingOptionUnit[]>) {
411
- const option = getActiveOption(state);
412
- if (option) option.optionUnits = action.payload;
413
- },
414
- setSkipPayment(state, action: PayloadAction<boolean>) {
415
- state.skipPaymentWithAgent = action.payload;
416
- },
417
- setGeneratePaymentUrl(state, action: PayloadAction<boolean>) {
418
- state.generatePaymentUrl = action.payload;
419
- },
420
- setPackageGroups(state, action: PayloadAction<BookingOptionGroup<PerBookingPackageOption>[]>) {
421
- const option = getActiveOption(state);
422
- if (option) option.groups = action.payload;
423
- },
424
- setPackageAirlineGroups(state, action: PayloadAction<BookingAirlineGroup<AirlineBookingPackageOption>[]>) {
425
- const option = getActiveOption(state);
426
- if (option) option.airlineGroups = action.payload;
427
- },
428
- setPackageAirportGroups(state, action: PayloadAction<BookingAirportGroup<AirportBookingPackageOption>[]>) {
429
- const option = getActiveOption(state);
430
- if (option) option.airportGroups = action.payload;
431
- },
432
- setTagIds(state, action: PayloadAction<number[] | undefined>) {
433
- state.tagIds = action.payload;
434
- },
435
- setAgentAdressId(state, action: PayloadAction<number | undefined>) {
436
- state.agentAdressId = action.payload;
437
- },
438
- setBookingRemarks(state, action: PayloadAction<string>) {
439
- state.remarks = action.payload;
440
- },
441
- setVoucherCodes(state, action: PayloadAction<string[]>) {
442
- state.voucherCodes = action.payload;
443
- },
444
- setCurrentStep(state, action: PayloadAction<BookingStep>) {
445
- document.body.scrollTop = 0; // For Safari
446
- document.documentElement.scrollTop = 0; // For Chrome, Firefox, IE and Opera
447
-
448
- state.currentStep = action.payload;
449
- },
450
- setFlights(state, action: PayloadAction<GroupedFlights>) {
451
- if (!state.package) return;
452
-
453
- changeOutwardFlight(state.package, action.payload.selectedOutward);
454
- changeReturnFlight(state.package, action.payload.selectedReturn);
455
- changePackageOption(state.package);
456
- },
457
- setAccommodationViewId(state, action: PayloadAction<number>) {
458
- state.accommodationViewId = action.payload;
459
- },
460
- setIsOption(state, action: PayloadAction<boolean>) {
461
- state.isOption = action.payload;
462
- },
463
- setTravelersFirstStep(state, action: PayloadAction<boolean>) {
464
- state.travelersFirstStep = action.payload;
465
- },
466
- setIsUnavailable(state, action: PayloadAction<boolean>) {
467
- state.isUnavailable = action.payload;
468
- }
469
- },
470
- extraReducers: (builder) => {
471
- builder.addCase(fetchPackageDetails.fulfilled, (state, action) => {
472
- if (action.payload) {
473
- if (action.payload.errorCode) {
474
- console.error(action.payload.errorCode, action.payload.errorMessage, action.payload.errorDetails);
475
-
476
- state.isUnavailable = true;
477
- return;
478
- }
479
-
480
- if (!action.payload.payload) {
481
- state.isUnavailable = true;
482
- /* state.package = undefined; */
483
- return;
484
- }
485
-
486
- state.isUnavailable = false;
487
-
488
- const bookingRooms = state.bookingAttributes?.rooms;
489
- const flight = state.bookingAttributes?.flight;
490
- const packageDetails = action.payload.payload;
491
-
492
- let activeOption = packageDetails.options.find((x) => x.isSelected)!;
493
-
494
- if (flight) {
495
- const selectedOutward = packageDetails.outwardFlights.find((x) => x.isSelected);
496
- const outwardFlights = packageDetails.outwardFlights.filter(
497
- (x) =>
498
- x.code === flight.outwardCode &&
499
- x.flightMetaData.flightLines[0]!.flightClass === flight.outwardClass &&
500
- x.flightMetaData.flightLines.map((y) => y.number).join(',') === flight.outwardNumbers.join(',')
501
- );
502
-
503
- // ook bij identieke vertrekvluchten eerst kijken als de returnflight kan gekoppeld worden.
504
- // op die manier moet het juiste koppel selected worden.
505
- // Enkel werkend met externe vluchten
506
- let outwardFlight: BookingPackageFlight | undefined = undefined;
507
- if (!isEmpty(outwardFlights)) {
508
- const returnExternalGuids = packageDetails.returnFlights
509
- .filter(
510
- (x) =>
511
- x.code === flight.returnCode &&
512
- x.flightMetaData.flightLines[0]!.flightClass === flight.returnClass &&
513
- x.flightMetaData.flightLines.map((y) => y.number).join(',') === flight.returnNumbers.join(',')
514
- )
515
- .map((f) => f.externalGuid)
516
- .filter((e) => e);
517
- outwardFlight = outwardFlights.find((o) => returnExternalGuids.includes(o.externalGuid));
518
- if (!outwardFlight) {
519
- outwardFlight = first(outwardFlights);
520
- }
521
- }
522
-
523
- if (selectedOutward && outwardFlight) {
524
- selectedOutward.isSelected = false;
525
- outwardFlight.isSelected = true;
526
- }
527
-
528
- const selectedReturn = packageDetails.returnFlights.find((x) => x.isSelected);
529
- const returnFlight = outwardFlight?.externalGuid
530
- ? packageDetails.returnFlights.find((x) => x.externalGuid === outwardFlight?.externalGuid)
531
- : packageDetails.returnFlights.find(
532
- (x) =>
533
- x.code === flight.returnCode &&
534
- x.flightMetaData.flightLines[0]!.flightClass === flight.returnClass &&
535
- x.flightMetaData.flightLines.map((y) => y.number).join(',') === flight.returnNumbers.join(',')
536
- );
537
-
538
- if (selectedReturn && returnFlight) {
539
- selectedReturn.isSelected = false;
540
- returnFlight.isSelected = true;
541
- }
542
-
543
- if (outwardFlight && returnFlight) {
544
- if (!outwardFlight.validOptions.some((x) => x == activeOption.id)) {
545
- activeOption.isSelected = false;
546
-
547
- activeOption = packageDetails.options.find((x) => outwardFlight?.validOptions.some((y) => y === x.id))!;
548
- activeOption.isSelected = true;
549
- }
550
- }
551
- }
552
-
553
- if (activeOption && bookingRooms?.some((x) => x.accommodationCode || x.regimeCode)) {
554
- bookingRooms.forEach((room, i) => {
555
- if (room.accommodationCode || room.regimeCode) {
556
- activeOption.rooms[i].options = activeOption.rooms[i].options.map((ro) => ({
557
- ...ro,
558
- isSelected: ro.accommodationCode == room.accommodationCode && ro.regimeCode == room.regimeCode
559
- }));
560
- }
561
-
562
- // Fallback to an option that has the requested accommodation OR regime if the requested option is not available. If no fallback is available, select the first option.
563
- if (!activeOption.rooms[i].options.some((x) => x.isSelected)) {
564
- const fallbackOption = activeOption.rooms[i].options.find(
565
- (x) => x.accommodationCode == room.accommodationCode || x.regimeCode == room.regimeCode
566
- );
567
- if (fallbackOption) {
568
- fallbackOption.isSelected = true;
569
- } else {
570
- activeOption.rooms[i].options[0].isSelected = true;
571
- }
572
- }
573
- });
574
- }
575
-
576
- state.package = packageDetails;
577
- }
578
- });
579
- builder.addCase(fetchAgents.fulfilled, (state, action) => {
580
- if (action.payload) {
581
- state.agents = action.payload;
582
- }
583
- });
584
- builder.addCase(fetchAccommodationViews.fulfilled, (state, action) => {
585
- if (action.payload) {
586
- state.accommodationViews = action.payload;
587
- }
588
- });
589
- builder.addCase(fetchCountries.fulfilled, (state, action) => {
590
- if (action.payload.items) {
591
- state.countries = action.payload.items;
592
- }
593
- });
594
- }
595
- });
596
-
597
- export const {
598
- setOfficeId,
599
- setLanguageCode,
600
- setTranslations,
601
- setBookingOptions,
602
- setBookingType,
603
- setProductAttributes,
604
- setBookingAttributes,
605
- setCalculateDeposit,
606
- setShowCommission,
607
- setBookingNumber,
608
- setIsRetry,
609
- setFetchingPackage,
610
- setIsFetching,
611
- setHasMounted,
612
- setPackage,
613
- setPackageRooms,
614
- setPackageOptionPax,
615
- setPackageOptionUnits,
616
- setPackageGroups,
617
- setSkipPayment,
618
- setGeneratePaymentUrl,
619
- setTagIds,
620
- setAgentAdressId,
621
- setBookingRemarks,
622
- setVoucherCodes,
623
- setCurrentStep,
624
- setPackageAirlineGroups,
625
- setPackageAirportGroups,
626
- setFlights,
627
- setAccommodationViewId,
628
- setIsOption,
629
- setTravelersFirstStep,
630
- setIsUnavailable
631
- } = bookingSlice.actions;
632
-
633
- export default bookingSlice.reducer;
1
+ import { PayloadAction, createAsyncThunk, createSlice } from '@reduxjs/toolkit';
2
+ import { BookingAttributes, BookingOptions, GroupedFlights, ProductAttributes } from '../../types';
3
+
4
+ import {
5
+ AirlineBookingPackageOption,
6
+ AirportBookingPackageOption,
7
+ BookingAirlineGroup,
8
+ BookingAirportGroup,
9
+ BookingOptionGroup,
10
+ BookingOptionPax,
11
+ BookingOptionUnit,
12
+ BookingPackage,
13
+ BookingPackageDetailsRequest,
14
+ BookingPackageFlight,
15
+ BookingPackagePax,
16
+ BookingPackageRequest,
17
+ BookingPackageRequestRoom,
18
+ BookingPackageRoom,
19
+ BookingTravelAgent,
20
+ CountryItem,
21
+ GenerateBookingAccommodationRequest,
22
+ PerBookingPackageOption,
23
+ SelectedFlight
24
+ } from '@qite/tide-client/build/types';
25
+ import { first, isEmpty, isNil, range } from 'lodash';
26
+ import { RootState } from '../../store';
27
+ import { selectAgentId } from '../travelers-form/travelers-form-slice';
28
+ import packageApi from './api';
29
+ import { BookingStep, OPTIONS_FORM_STEP } from './constants';
30
+ import {
31
+ selectAccommodationCodes,
32
+ selectAgentAdressId,
33
+ selectBookingAttributes,
34
+ selectBookingRooms,
35
+ selectLanguageCode,
36
+ selectOfficeId,
37
+ selectProductAttributes,
38
+ selectProductCode
39
+ } from './selectors';
40
+
41
+ export interface BookingState {
42
+ officeId: number;
43
+ languageCode: string;
44
+ productAttributes?: ProductAttributes;
45
+ bookingAttributes?: BookingAttributes;
46
+ calculateDeposit: boolean;
47
+ showCommission?: boolean;
48
+ bookingNumber?: string;
49
+ isRetry: boolean;
50
+ package?: BookingPackage;
51
+ agents?: BookingTravelAgent[];
52
+ isBusy: boolean;
53
+ skipPaymentWithAgent: boolean;
54
+ generatePaymentUrl: boolean;
55
+ isUnavailable?: boolean;
56
+ tagIds?: number[];
57
+ agentAdressId?: number;
58
+ remarks?: string;
59
+ voucherCodes?: string[];
60
+ bookingOptions: BookingOptions;
61
+ bookingType: string;
62
+ currentStep: BookingStep;
63
+ translations?: {
64
+ language: string;
65
+ value: any;
66
+ }[];
67
+ accommodationViewId?: number;
68
+ accommodationViews?: { [key: string]: string };
69
+ isOption?: boolean;
70
+ travelersFirstStep: boolean;
71
+ isFetching?: boolean;
72
+ hasMounted: boolean;
73
+ countries?: CountryItem[];
74
+ }
75
+
76
+ const initialState: BookingState = {
77
+ officeId: 1,
78
+ languageCode: 'nl-BE',
79
+ bookingOptions: {
80
+ b2b: {
81
+ tagIds: [],
82
+ entryStatus: 2,
83
+ customEntryStatusId: undefined
84
+ },
85
+ b2b2c: {
86
+ tagIds: [],
87
+ entryStatus: 2,
88
+ customEntryStatusId: undefined
89
+ },
90
+ b2c: {
91
+ tagIds: [],
92
+ entryStatus: 0,
93
+ customEntryStatusId: undefined
94
+ }
95
+ },
96
+ bookingType: 'b2c',
97
+ productAttributes: undefined,
98
+ bookingAttributes: undefined,
99
+ calculateDeposit: false,
100
+ showCommission: false,
101
+ bookingNumber: undefined,
102
+ isRetry: false,
103
+ package: undefined,
104
+ isBusy: false,
105
+ skipPaymentWithAgent: false,
106
+ generatePaymentUrl: false,
107
+ tagIds: [],
108
+ agentAdressId: undefined,
109
+ currentStep: OPTIONS_FORM_STEP,
110
+ translations: undefined,
111
+ travelersFirstStep: false,
112
+ isFetching: false,
113
+ hasMounted: false,
114
+ countries: undefined
115
+ };
116
+
117
+ export const fetchPackage = createAsyncThunk('booking/fetchPackage', async (_, { dispatch }) => {
118
+ dispatch(setFetchingPackage(true));
119
+ await dispatch(fetchAgents());
120
+ await dispatch(fetchCountries());
121
+ await dispatch(fetchPackageDetails());
122
+ await dispatch(fetchAccommodationViews());
123
+ dispatch(setFetchingPackage(false));
124
+ });
125
+
126
+ export const fetchCountries = createAsyncThunk('booking/countries', async (_, { dispatch, getState, signal }) => {
127
+ const settings = getState() as RootState;
128
+ return await packageApi.fetchCountries(signal, settings.apiSettings);
129
+ });
130
+
131
+ const fetchAgents = createAsyncThunk('booking/agents', async (_, { dispatch, getState, signal }) => {
132
+ const settings = getState() as RootState;
133
+ return await packageApi.fetchAgents(signal, settings.apiSettings);
134
+ });
135
+
136
+ const fetchPackageDetails = createAsyncThunk('booking/details', async (_, { dispatch, getState, signal }) => {
137
+ const state = getState() as RootState;
138
+
139
+ const officeId = selectOfficeId(state);
140
+ const productAttributes = selectProductAttributes(state);
141
+ const bookingAttributes = selectBookingAttributes(state);
142
+ const agentId = selectAgentId(state);
143
+ const agentAdressId = selectAgentAdressId(state);
144
+ const rooms = selectBookingRooms(state);
145
+ const languageCode = selectLanguageCode(state);
146
+
147
+ if (isNil(productAttributes)) {
148
+ throw Error('productAttributes could not be found');
149
+ }
150
+
151
+ if (isNil(bookingAttributes)) {
152
+ throw Error('bookingAttributes could not be found');
153
+ }
154
+
155
+ if (!rooms?.length) {
156
+ throw Error('rooms could not be found');
157
+ }
158
+
159
+ var requestRooms = rooms?.map((x, i) => {
160
+ var room = { index: i, pax: [] } as BookingPackageRequestRoom;
161
+ range(0, x.adults).forEach(() => {
162
+ room.pax.push({
163
+ age: 30
164
+ } as BookingPackagePax);
165
+ });
166
+ x.childAges.forEach((x) => {
167
+ room.pax.push({
168
+ age: x
169
+ } as BookingPackagePax);
170
+ });
171
+ return room;
172
+ });
173
+
174
+ const isAllotment =
175
+ bookingAttributes.tourCode || bookingAttributes.allotmentName || (bookingAttributes.allotmentIds && bookingAttributes.allotmentIds.length);
176
+
177
+ let searchType = isAllotment
178
+ ? 1 // ALLOTMENT
179
+ : 0; // DEFAULT;
180
+
181
+ let outwardFlight: SelectedFlight | undefined;
182
+ let returnFlight: SelectedFlight | undefined;
183
+ if (bookingAttributes.flightRouteId && bookingAttributes.flight) {
184
+ searchType = 3; // FLIGHT;
185
+
186
+ outwardFlight = {
187
+ flightCode: bookingAttributes.flight.outwardCode,
188
+ startDateTime: bookingAttributes.flight.outwardDepartureDate,
189
+ endDateTime: bookingAttributes.flight.outwardArrivalDate,
190
+ airlines: bookingAttributes.flight.outwardAirlines,
191
+ flightNumbers: bookingAttributes.flight.outwardNumbers,
192
+ fareCode: bookingAttributes.flight.outwardFareCode,
193
+ marketingName: bookingAttributes.flight.outwardMarketingName,
194
+ luggageIncluded: bookingAttributes.flight.luggageIncluded
195
+ } as SelectedFlight;
196
+
197
+ if (bookingAttributes.flight.returnCode) {
198
+ returnFlight = {
199
+ flightCode: bookingAttributes.flight.returnCode,
200
+ startDateTime: bookingAttributes.flight.returnDepartureDate,
201
+ endDateTime: bookingAttributes.flight.returnArrivalDate,
202
+ airlines: bookingAttributes.flight.returnAirlines,
203
+ flightNumbers: bookingAttributes.flight.returnNumbers,
204
+ fareCode: bookingAttributes.flight.returnFareCode,
205
+ marketingName: bookingAttributes.flight.returnMarketingName,
206
+ luggageIncluded: bookingAttributes.flight.luggageIncluded
207
+ } as SelectedFlight;
208
+ }
209
+ }
210
+
211
+ const request = {
212
+ officeId: officeId,
213
+ agentId: agentId ?? agentAdressId,
214
+ payload: {
215
+ searchType: searchType,
216
+ catalogueId: bookingAttributes.catalogueId,
217
+ productCode: productAttributes.productCode,
218
+ fromDate: bookingAttributes.startDate,
219
+ toDate: bookingAttributes.endDate,
220
+ includeFlights: bookingAttributes.includeFlights,
221
+ allotmentName: bookingAttributes.allotmentName,
222
+ allotmentIds: bookingAttributes.allotmentIds ?? [],
223
+ tourCode: bookingAttributes.tourCode,
224
+ rooms: requestRooms,
225
+ routeId: bookingAttributes.flightRouteId,
226
+ outwardFlight: outwardFlight,
227
+ returnFlight: returnFlight,
228
+ vendorConfigurationId: bookingAttributes.vendorConfigurationId
229
+ } as BookingPackageDetailsRequest
230
+ } as BookingPackageRequest<BookingPackageDetailsRequest>;
231
+
232
+ return await packageApi.fetchDetails(request, signal, languageCode, state.apiSettings);
233
+ });
234
+
235
+ const fetchAccommodationViews = createAsyncThunk('booking/accommodationViews', async (_, { dispatch, getState, signal }) => {
236
+ const state = getState() as RootState;
237
+ if (!state.booking.accommodationViewId) return Promise.resolve();
238
+
239
+ const languageCode = selectLanguageCode(state);
240
+ const accommodationCodes = selectAccommodationCodes(state);
241
+ const productCode = selectProductCode(state);
242
+
243
+ if (!productCode) {
244
+ throw Error('No product selected');
245
+ }
246
+
247
+ const request = {
248
+ languageCode: languageCode,
249
+ productCode: productCode,
250
+ accommodationCodes: accommodationCodes,
251
+ contentViewId: state.booking.accommodationViewId
252
+ } as GenerateBookingAccommodationRequest;
253
+
254
+ return await packageApi.fetchAccommodationViews(request, signal, state.apiSettings);
255
+ });
256
+
257
+ const getActiveOption = (state: BookingState) => {
258
+ if (state.package) return state.package.options.find((x) => x.isSelected);
259
+ return null;
260
+ };
261
+
262
+ const changeOutwardFlight = (state: BookingPackage, flight: BookingPackageFlight) => {
263
+ const currentOutwardFlight = state.outwardFlights.find((x) => x.isSelected)!;
264
+ const currentReturnFlight = state.returnFlights.find((x) => x.isSelected)!;
265
+
266
+ if (currentOutwardFlight?.entryLineGuid == flight.entryLineGuid) return;
267
+
268
+ const newFlight = state.outwardFlights.find((x) => x.entryLineGuid == flight.entryLineGuid);
269
+ if (newFlight) {
270
+ newFlight.isSelected = true;
271
+ currentOutwardFlight.isSelected = false;
272
+
273
+ if (newFlight.externalGuid) {
274
+ if (currentOutwardFlight.externalGuid !== newFlight.externalGuid) {
275
+ const newReturnFlight = state.returnFlights.find((x) => x.externalGuid === newFlight.externalGuid)!;
276
+
277
+ currentReturnFlight.isSelected = false;
278
+ newReturnFlight.isSelected = true;
279
+ }
280
+ } else if (currentReturnFlight.externalGuid) {
281
+ const firstInternal = state.returnFlights.find((x) => !x.externalGuid);
282
+
283
+ if (firstInternal) {
284
+ currentReturnFlight.isSelected = false;
285
+ firstInternal.isSelected = true;
286
+ }
287
+ }
288
+ }
289
+ };
290
+
291
+ const changeReturnFlight = (state: BookingPackage, flight: BookingPackageFlight) => {
292
+ const currentReturnFlight = state.returnFlights.find((x) => x.isSelected)!;
293
+
294
+ if (currentReturnFlight?.entryLineGuid == flight.entryLineGuid) return;
295
+
296
+ const newFlight = state.outwardFlights.find((x) => x.entryLineGuid == flight.entryLineGuid);
297
+ if (newFlight) {
298
+ newFlight.isSelected = true;
299
+ currentReturnFlight.isSelected = false;
300
+ }
301
+ };
302
+
303
+ const changePackageOption = (state: BookingPackage) => {
304
+ const selectedOutward = state.outwardFlights.find((x) => x.isSelected)!;
305
+ const selectedReturn = state.returnFlights.find((x) => x.isSelected)!;
306
+ const validOptions = selectedOutward.validOptions.filter((x) => selectedReturn.validOptions.some((y) => x === y));
307
+
308
+ const currentOption = state.options.find((x) => x.isSelected)!;
309
+ if (validOptions.some((x) => x === currentOption.id)) return;
310
+
311
+ const firstOption = state.options.find((x) => validOptions.some((y) => y === x.id))!;
312
+ currentOption.isSelected = false;
313
+ firstOption.isSelected = true;
314
+
315
+ const currentRooms = currentOption.rooms.map((r) => {
316
+ const selectedOption = r.options.find((o) => o.isSelected)!;
317
+
318
+ return {
319
+ accommodation: selectedOption?.accommodationCode,
320
+ regime: selectedOption?.regimeCode
321
+ };
322
+ });
323
+
324
+ firstOption.rooms.forEach((r, i) => {
325
+ const currentRoom = currentRooms[i];
326
+
327
+ const selectedOption = r.options.find((o) => o.isSelected);
328
+ const selection = r.options.find((x) => x.accommodationCode === currentRoom.accommodation && x.regimeCode === currentRoom.regime);
329
+
330
+ if (selection) {
331
+ if (selection.entryLineGuid !== selectedOption?.entryLineGuid) {
332
+ if (selectedOption) selectedOption.isSelected = false;
333
+ selection.isSelected = true;
334
+ }
335
+ } else {
336
+ const accommodationSelection = r.options.find((x) => x.accommodationCode === currentRoom.accommodation);
337
+ if (accommodationSelection) {
338
+ if (accommodationSelection.entryLineGuid !== selectedOption?.entryLineGuid) {
339
+ if (selectedOption) selectedOption.isSelected = false;
340
+ accommodationSelection.isSelected = true;
341
+ }
342
+ } else {
343
+ const firstOption = r.options[0];
344
+ if (firstOption.entryLineGuid !== selectedOption?.entryLineGuid) {
345
+ if (selectedOption) selectedOption.isSelected = false;
346
+ firstOption.isSelected = true;
347
+ }
348
+ }
349
+ }
350
+ });
351
+ };
352
+
353
+ const bookingSlice = createSlice({
354
+ name: 'booking',
355
+ initialState,
356
+ reducers: {
357
+ setHasMounted(state, action: PayloadAction<boolean>) {
358
+ state.hasMounted = action.payload;
359
+ },
360
+ setIsFetching(state, action: PayloadAction<boolean>) {
361
+ state.isFetching = action.payload;
362
+ },
363
+ setOfficeId(state, action: PayloadAction<number>) {
364
+ state.officeId = action.payload;
365
+ },
366
+ setLanguageCode(state, action: PayloadAction<string>) {
367
+ state.languageCode = action.payload;
368
+ },
369
+ setTranslations(state, action: PayloadAction<any>) {
370
+ state.translations = action.payload;
371
+ },
372
+ setBookingOptions(state, action: PayloadAction<BookingOptions>) {
373
+ state.bookingOptions = action.payload;
374
+ },
375
+ setBookingType(state, action: PayloadAction<string>) {
376
+ state.bookingType = action.payload;
377
+ },
378
+ setProductAttributes(state, action: PayloadAction<ProductAttributes | undefined>) {
379
+ state.productAttributes = action.payload;
380
+ },
381
+ setBookingAttributes(state, action: PayloadAction<BookingAttributes | undefined>) {
382
+ state.bookingAttributes = action.payload;
383
+ },
384
+ setCalculateDeposit(state, action: PayloadAction<boolean>) {
385
+ state.calculateDeposit = action.payload;
386
+ },
387
+ setShowCommission(state, action: PayloadAction<boolean | undefined>) {
388
+ state.showCommission = action.payload;
389
+ },
390
+ setBookingNumber(state, action: PayloadAction<string>) {
391
+ state.bookingNumber = action.payload;
392
+ },
393
+ setIsRetry(state, action: PayloadAction<boolean>) {
394
+ state.isRetry = action.payload;
395
+ },
396
+ setFetchingPackage(state, action: PayloadAction<boolean>) {
397
+ state.isBusy = action.payload;
398
+ },
399
+ setPackage(state, action: PayloadAction<BookingPackage | undefined>) {
400
+ state.package = action.payload;
401
+ },
402
+ setPackageRooms(state, action: PayloadAction<BookingPackageRoom[]>) {
403
+ const option = getActiveOption(state);
404
+ if (option) option.rooms = action.payload;
405
+ },
406
+ setPackageOptionPax(state, action: PayloadAction<BookingOptionPax[]>) {
407
+ const option = getActiveOption(state);
408
+ if (option) option.optionPax = action.payload;
409
+ },
410
+ setPackageOptionUnits(state, action: PayloadAction<BookingOptionUnit[]>) {
411
+ const option = getActiveOption(state);
412
+ if (option) option.optionUnits = action.payload;
413
+ },
414
+ setSkipPayment(state, action: PayloadAction<boolean>) {
415
+ state.skipPaymentWithAgent = action.payload;
416
+ },
417
+ setGeneratePaymentUrl(state, action: PayloadAction<boolean>) {
418
+ state.generatePaymentUrl = action.payload;
419
+ },
420
+ setPackageGroups(state, action: PayloadAction<BookingOptionGroup<PerBookingPackageOption>[]>) {
421
+ const option = getActiveOption(state);
422
+ if (option) option.groups = action.payload;
423
+ },
424
+ setPackageAirlineGroups(state, action: PayloadAction<BookingAirlineGroup<AirlineBookingPackageOption>[]>) {
425
+ const option = getActiveOption(state);
426
+ if (option) option.airlineGroups = action.payload;
427
+ },
428
+ setPackageAirportGroups(state, action: PayloadAction<BookingAirportGroup<AirportBookingPackageOption>[]>) {
429
+ const option = getActiveOption(state);
430
+ if (option) option.airportGroups = action.payload;
431
+ },
432
+ setTagIds(state, action: PayloadAction<number[] | undefined>) {
433
+ state.tagIds = action.payload;
434
+ },
435
+ setAgentAdressId(state, action: PayloadAction<number | undefined>) {
436
+ state.agentAdressId = action.payload;
437
+ },
438
+ setBookingRemarks(state, action: PayloadAction<string>) {
439
+ state.remarks = action.payload;
440
+ },
441
+ setVoucherCodes(state, action: PayloadAction<string[]>) {
442
+ state.voucherCodes = action.payload;
443
+ },
444
+ setCurrentStep(state, action: PayloadAction<BookingStep>) {
445
+ document.body.scrollTop = 0; // For Safari
446
+ document.documentElement.scrollTop = 0; // For Chrome, Firefox, IE and Opera
447
+
448
+ state.currentStep = action.payload;
449
+ },
450
+ setFlights(state, action: PayloadAction<GroupedFlights>) {
451
+ if (!state.package) return;
452
+
453
+ changeOutwardFlight(state.package, action.payload.selectedOutward);
454
+ changeReturnFlight(state.package, action.payload.selectedReturn);
455
+ changePackageOption(state.package);
456
+ },
457
+ setAccommodationViewId(state, action: PayloadAction<number>) {
458
+ state.accommodationViewId = action.payload;
459
+ },
460
+ setIsOption(state, action: PayloadAction<boolean>) {
461
+ state.isOption = action.payload;
462
+ },
463
+ setTravelersFirstStep(state, action: PayloadAction<boolean>) {
464
+ state.travelersFirstStep = action.payload;
465
+ },
466
+ setIsUnavailable(state, action: PayloadAction<boolean>) {
467
+ state.isUnavailable = action.payload;
468
+ }
469
+ },
470
+ extraReducers: (builder) => {
471
+ builder.addCase(fetchPackageDetails.fulfilled, (state, action) => {
472
+ if (action.payload) {
473
+ if (action.payload.errorCode) {
474
+ console.error(action.payload.errorCode, action.payload.errorMessage, action.payload.errorDetails);
475
+
476
+ state.isUnavailable = true;
477
+ return;
478
+ }
479
+
480
+ if (!action.payload.payload) {
481
+ state.isUnavailable = true;
482
+ /* state.package = undefined; */
483
+ return;
484
+ }
485
+
486
+ state.isUnavailable = false;
487
+
488
+ const bookingRooms = state.bookingAttributes?.rooms;
489
+ const flight = state.bookingAttributes?.flight;
490
+ const packageDetails = action.payload.payload;
491
+
492
+ let activeOption = packageDetails.options.find((x) => x.isSelected)!;
493
+
494
+ if (flight) {
495
+ const selectedOutward = packageDetails.outwardFlights.find((x) => x.isSelected);
496
+ const outwardFlights = packageDetails.outwardFlights.filter(
497
+ (x) =>
498
+ x.code === flight.outwardCode &&
499
+ x.flightMetaData.flightLines[0]!.flightClass === flight.outwardClass &&
500
+ x.flightMetaData.flightLines.map((y) => y.number).join(',') === flight.outwardNumbers.join(',')
501
+ );
502
+
503
+ // ook bij identieke vertrekvluchten eerst kijken als de returnflight kan gekoppeld worden.
504
+ // op die manier moet het juiste koppel selected worden.
505
+ // Enkel werkend met externe vluchten
506
+ let outwardFlight: BookingPackageFlight | undefined = undefined;
507
+ if (!isEmpty(outwardFlights)) {
508
+ const returnExternalGuids = packageDetails.returnFlights
509
+ .filter(
510
+ (x) =>
511
+ x.code === flight.returnCode &&
512
+ x.flightMetaData.flightLines[0]!.flightClass === flight.returnClass &&
513
+ x.flightMetaData.flightLines.map((y) => y.number).join(',') === flight.returnNumbers.join(',')
514
+ )
515
+ .map((f) => f.externalGuid)
516
+ .filter((e) => e);
517
+ outwardFlight = outwardFlights.find((o) => returnExternalGuids.includes(o.externalGuid));
518
+ if (!outwardFlight) {
519
+ outwardFlight = first(outwardFlights);
520
+ }
521
+ }
522
+
523
+ if (selectedOutward && outwardFlight) {
524
+ selectedOutward.isSelected = false;
525
+ outwardFlight.isSelected = true;
526
+ }
527
+
528
+ const selectedReturn = packageDetails.returnFlights.find((x) => x.isSelected);
529
+ const returnFlight = outwardFlight?.externalGuid
530
+ ? packageDetails.returnFlights.find((x) => x.externalGuid === outwardFlight?.externalGuid)
531
+ : packageDetails.returnFlights.find(
532
+ (x) =>
533
+ x.code === flight.returnCode &&
534
+ x.flightMetaData.flightLines[0]!.flightClass === flight.returnClass &&
535
+ x.flightMetaData.flightLines.map((y) => y.number).join(',') === flight.returnNumbers.join(',')
536
+ );
537
+
538
+ if (selectedReturn && returnFlight) {
539
+ selectedReturn.isSelected = false;
540
+ returnFlight.isSelected = true;
541
+ }
542
+
543
+ if (outwardFlight && returnFlight) {
544
+ if (!outwardFlight.validOptions.some((x) => x == activeOption.id)) {
545
+ activeOption.isSelected = false;
546
+
547
+ activeOption = packageDetails.options.find((x) => outwardFlight?.validOptions.some((y) => y === x.id))!;
548
+ activeOption.isSelected = true;
549
+ }
550
+ }
551
+ }
552
+
553
+ if (activeOption && bookingRooms?.some((x) => x.accommodationCode || x.regimeCode)) {
554
+ bookingRooms.forEach((room, i) => {
555
+ if (room.accommodationCode || room.regimeCode) {
556
+ activeOption.rooms[i].options = activeOption.rooms[i].options.map((ro) => ({
557
+ ...ro,
558
+ isSelected: ro.accommodationCode == room.accommodationCode && ro.regimeCode == room.regimeCode
559
+ }));
560
+ }
561
+
562
+ // Fallback to an option that has the requested accommodation OR regime if the requested option is not available. If no fallback is available, select the first option.
563
+ if (!activeOption.rooms[i].options.some((x) => x.isSelected)) {
564
+ const fallbackOption = activeOption.rooms[i].options.find(
565
+ (x) => x.accommodationCode == room.accommodationCode || x.regimeCode == room.regimeCode
566
+ );
567
+ if (fallbackOption) {
568
+ fallbackOption.isSelected = true;
569
+ } else {
570
+ activeOption.rooms[i].options[0].isSelected = true;
571
+ }
572
+ }
573
+ });
574
+ }
575
+
576
+ state.package = packageDetails;
577
+ }
578
+ });
579
+ builder.addCase(fetchAgents.fulfilled, (state, action) => {
580
+ if (action.payload) {
581
+ state.agents = action.payload;
582
+ }
583
+ });
584
+ builder.addCase(fetchAccommodationViews.fulfilled, (state, action) => {
585
+ if (action.payload) {
586
+ state.accommodationViews = action.payload;
587
+ }
588
+ });
589
+ builder.addCase(fetchCountries.fulfilled, (state, action) => {
590
+ if (action.payload.items) {
591
+ state.countries = action.payload.items;
592
+ }
593
+ });
594
+ }
595
+ });
596
+
597
+ export const {
598
+ setOfficeId,
599
+ setLanguageCode,
600
+ setTranslations,
601
+ setBookingOptions,
602
+ setBookingType,
603
+ setProductAttributes,
604
+ setBookingAttributes,
605
+ setCalculateDeposit,
606
+ setShowCommission,
607
+ setBookingNumber,
608
+ setIsRetry,
609
+ setFetchingPackage,
610
+ setIsFetching,
611
+ setHasMounted,
612
+ setPackage,
613
+ setPackageRooms,
614
+ setPackageOptionPax,
615
+ setPackageOptionUnits,
616
+ setPackageGroups,
617
+ setSkipPayment,
618
+ setGeneratePaymentUrl,
619
+ setTagIds,
620
+ setAgentAdressId,
621
+ setBookingRemarks,
622
+ setVoucherCodes,
623
+ setCurrentStep,
624
+ setPackageAirlineGroups,
625
+ setPackageAirportGroups,
626
+ setFlights,
627
+ setAccommodationViewId,
628
+ setIsOption,
629
+ setTravelersFirstStep,
630
+ setIsUnavailable
631
+ } = bookingSlice.actions;
632
+
633
+ export default bookingSlice.reducer;