@qite/tide-booking-component 1.4.45 → 1.4.46

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 (316) hide show
  1. package/README.md +11 -2
  2. package/build/build-cjs/index.js +2208 -1626
  3. package/build/build-cjs/{booking-wizard → src/booking-wizard}/api-settings-slice.d.ts +1 -1
  4. package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/booking/booking-slice.d.ts +2 -2
  5. package/build/build-cjs/src/booking-wizard/features/booking/selectors.d.ts +798 -0
  6. package/build/build-cjs/src/booking-wizard/features/price-details/price-details-slice.d.ts +304 -0
  7. package/build/{build-esm → build-cjs/src}/booking-wizard/features/summary/summary-slice.d.ts +1 -1
  8. package/build/build-cjs/src/booking-wizard/features/travelers-form/travelers-form-slice.d.ts +104 -0
  9. package/build/build-cjs/{booking-wizard → src/booking-wizard}/store.d.ts +22 -17
  10. package/build/build-cjs/src/booking-wizard/types.d.ts +0 -1
  11. package/build/build-cjs/{content → src/content}/footer/types.d.ts +0 -1
  12. package/build/{build-esm → build-cjs/src}/content/navbar/types.d.ts +0 -1
  13. package/build/build-cjs/{qsm → src/qsm}/store/qsm-slice.d.ts +1 -1
  14. package/build/build-cjs/src/qsm/store/qsm-store.d.ts +23 -0
  15. package/build/build-cjs/{search-results → src/search-results}/components/flight/flight-search-context/index.d.ts +7 -4
  16. package/build/build-cjs/src/search-results/components/flight/flight-selection/independent-flight-option.d.ts +11 -0
  17. package/build/build-cjs/src/search-results/components/flight/flight-selection/independent-flight-selection.d.ts +7 -0
  18. package/build/build-cjs/src/search-results/components/flight/flight-selection/index.d.ts +8 -0
  19. package/build/build-cjs/src/search-results/components/flight/flight-selection/paired-flight-option.d.ts +7 -0
  20. package/build/build-cjs/src/search-results/components/flight/flight-selection/paired-flight-selection.d.ts +7 -0
  21. package/build/build-cjs/{search-results → src/search-results}/store/search-results-slice.d.ts +12 -5
  22. package/build/build-cjs/src/search-results/store/search-results-store.d.ts +23 -0
  23. package/build/{build-esm → build-cjs/src}/search-results/types.d.ts +1 -0
  24. package/build/build-cjs/{shared → src/shared}/components/flyin.d.ts +2 -0
  25. package/build/{build-esm → build-cjs/src}/shared/utils/localization-util.d.ts +17 -17
  26. package/build/build-esm/index.js +2171 -1616
  27. package/build/build-esm/{booking-wizard → src/booking-wizard}/api-settings-slice.d.ts +1 -1
  28. package/build/build-esm/{booking-wizard → src/booking-wizard}/features/booking/booking-slice.d.ts +2 -2
  29. package/build/build-esm/src/booking-wizard/features/booking/selectors.d.ts +798 -0
  30. package/build/build-esm/src/booking-wizard/features/price-details/price-details-slice.d.ts +304 -0
  31. package/build/{build-cjs → build-esm/src}/booking-wizard/features/summary/summary-slice.d.ts +1 -1
  32. package/build/build-esm/src/booking-wizard/features/travelers-form/travelers-form-slice.d.ts +104 -0
  33. package/build/build-esm/{booking-wizard → src/booking-wizard}/store.d.ts +22 -17
  34. package/build/build-esm/src/booking-wizard/types.d.ts +0 -1
  35. package/build/build-esm/{content → src/content}/footer/types.d.ts +0 -1
  36. package/build/{build-cjs → build-esm/src}/content/navbar/types.d.ts +0 -1
  37. package/build/build-esm/{qsm → src/qsm}/store/qsm-slice.d.ts +1 -1
  38. package/build/build-esm/src/qsm/store/qsm-store.d.ts +23 -0
  39. package/build/build-esm/{search-results → src/search-results}/components/flight/flight-search-context/index.d.ts +7 -4
  40. package/build/build-esm/src/search-results/components/flight/flight-selection/independent-flight-option.d.ts +11 -0
  41. package/build/build-esm/src/search-results/components/flight/flight-selection/independent-flight-selection.d.ts +7 -0
  42. package/build/build-esm/src/search-results/components/flight/flight-selection/index.d.ts +8 -0
  43. package/build/build-esm/src/search-results/components/flight/flight-selection/paired-flight-option.d.ts +7 -0
  44. package/build/build-esm/src/search-results/components/flight/flight-selection/paired-flight-selection.d.ts +7 -0
  45. package/build/build-esm/{search-results → src/search-results}/store/search-results-slice.d.ts +12 -5
  46. package/build/build-esm/src/search-results/store/search-results-store.d.ts +23 -0
  47. package/build/{build-cjs → build-esm/src}/search-results/types.d.ts +1 -0
  48. package/build/build-esm/{shared → src/shared}/components/flyin.d.ts +2 -0
  49. package/build/{build-cjs → build-esm/src}/shared/utils/localization-util.d.ts +17 -17
  50. package/package.json +3 -3
  51. package/src/booking-product/components/product.tsx +11 -3
  52. package/src/search-results/components/filters/flight-filters.tsx +4 -4
  53. package/src/search-results/components/flight/flight-search-context/index.tsx +217 -98
  54. package/src/search-results/components/flight/flight-selection/independent-flight-option.tsx +147 -0
  55. package/src/search-results/components/flight/flight-selection/independent-flight-selection.tsx +172 -0
  56. package/src/search-results/components/flight/flight-selection/index.tsx +19 -0
  57. package/src/search-results/components/flight/{flight-option.tsx → flight-selection/paired-flight-option.tsx} +42 -30
  58. package/src/search-results/components/flight/{flight-accommodation-results.tsx → flight-selection/paired-flight-selection.tsx} +9 -11
  59. package/src/search-results/components/search-results-container/flight-search-results.tsx +84 -64
  60. package/src/search-results/components/search-results-container/search-results-container.tsx +18 -5
  61. package/src/search-results/store/search-results-slice.ts +19 -7
  62. package/src/search-results/types.ts +1 -0
  63. package/src/shared/components/flyin.tsx +449 -531
  64. package/styles/components/_flyin.scss +37 -10
  65. package/build/build-cjs/booking-wizard/features/booking/selectors.d.ts +0 -283
  66. package/build/build-cjs/booking-wizard/features/price-details/price-details-slice.d.ts +0 -105
  67. package/build/build-cjs/booking-wizard/features/travelers-form/travelers-form-slice.d.ts +0 -62
  68. package/build/build-cjs/qsm/store/qsm-store.d.ts +0 -18
  69. package/build/build-cjs/search-results/components/flight/flight-accommodation-results.d.ts +0 -7
  70. package/build/build-cjs/search-results/components/flight/flight-option.d.ts +0 -7
  71. package/build/build-cjs/search-results/store/search-results-store.d.ts +0 -18
  72. package/build/build-esm/booking-wizard/features/booking/selectors.d.ts +0 -283
  73. package/build/build-esm/booking-wizard/features/price-details/price-details-slice.d.ts +0 -105
  74. package/build/build-esm/booking-wizard/features/travelers-form/travelers-form-slice.d.ts +0 -62
  75. package/build/build-esm/qsm/store/qsm-store.d.ts +0 -18
  76. package/build/build-esm/search-results/components/flight/flight-accommodation-results.d.ts +0 -7
  77. package/build/build-esm/search-results/components/flight/flight-option.d.ts +0 -7
  78. package/build/build-esm/search-results/store/search-results-store.d.ts +0 -18
  79. /package/build/build-cjs/{booking-product → src/booking-product}/components/age-select.d.ts +0 -0
  80. /package/build/build-cjs/{booking-product → src/booking-product}/components/amount-input.d.ts +0 -0
  81. /package/build/build-cjs/{booking-product → src/booking-product}/components/date-range-picker/calendar-day.d.ts +0 -0
  82. /package/build/build-cjs/{booking-product → src/booking-product}/components/date-range-picker/calendar.d.ts +0 -0
  83. /package/build/build-cjs/{booking-product → src/booking-product}/components/dates.d.ts +0 -0
  84. /package/build/build-cjs/{booking-product → src/booking-product}/components/footer.d.ts +0 -0
  85. /package/build/build-cjs/{booking-product → src/booking-product}/components/header.d.ts +0 -0
  86. /package/build/build-cjs/{booking-product → src/booking-product}/components/icon.d.ts +0 -0
  87. /package/build/build-cjs/{booking-product → src/booking-product}/components/list-view.d.ts +0 -0
  88. /package/build/build-cjs/{booking-product → src/booking-product}/components/product.d.ts +0 -0
  89. /package/build/build-cjs/{booking-product → src/booking-product}/components/rating.d.ts +0 -0
  90. /package/build/build-cjs/{booking-product → src/booking-product}/components/rooms.d.ts +0 -0
  91. /package/build/build-cjs/{booking-product → src/booking-product}/constants.d.ts +0 -0
  92. /package/build/build-cjs/{booking-product → src/booking-product}/index.d.ts +0 -0
  93. /package/build/build-cjs/{booking-product → src/booking-product}/settings-context.d.ts +0 -0
  94. /package/build/build-cjs/{booking-product → src/booking-product}/types.d.ts +0 -0
  95. /package/build/build-cjs/{booking-product → src/booking-product}/utils/api.d.ts +0 -0
  96. /package/build/build-cjs/{booking-product → src/booking-product}/utils/price.d.ts +0 -0
  97. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/components/icon.d.ts +0 -0
  98. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/components/labeled-input.d.ts +0 -0
  99. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/components/labeled-select.d.ts +0 -0
  100. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/components/message.d.ts +0 -0
  101. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/components/multi-range-filter.d.ts +0 -0
  102. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/components/phone-input.d.ts +0 -0
  103. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/components/print-offer-button.d.ts +0 -0
  104. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/components/product-card.d.ts +0 -0
  105. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/components/step-indicator.d.ts +0 -0
  106. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/components/step-route.d.ts +0 -0
  107. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/booking/api.d.ts +0 -0
  108. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/booking/booking.d.ts +0 -0
  109. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/booking/constants.d.ts +0 -0
  110. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/flight-options/flight-filter.d.ts +0 -0
  111. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/flight-options/flight-option-flight.d.ts +0 -0
  112. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/flight-options/flight-option-modal.d.ts +0 -0
  113. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/flight-options/flight-option.d.ts +0 -0
  114. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/flight-options/flight-utils.d.ts +0 -0
  115. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/price-details/price-details-api.d.ts +0 -0
  116. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/price-details/util.d.ts +0 -0
  117. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/product-options/no-options.d.ts +0 -0
  118. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/product-options/none-option.d.ts +0 -0
  119. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/product-options/option-booking-airline-group.d.ts +0 -0
  120. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/product-options/option-booking-group.d.ts +0 -0
  121. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/product-options/option-item.d.ts +0 -0
  122. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/product-options/option-pax-card.d.ts +0 -0
  123. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/product-options/option-pax-group.d.ts +0 -0
  124. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/product-options/option-room.d.ts +0 -0
  125. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/product-options/option-unit-group.d.ts +0 -0
  126. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/product-options/option-units-card.d.ts +0 -0
  127. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/room-options/room-utils.d.ts +0 -0
  128. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/room-options/room.d.ts +0 -0
  129. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/room-options/traveler-rooms.d.ts +0 -0
  130. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/sidebar/index.d.ts +0 -0
  131. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/sidebar/sidebar-flight.d.ts +0 -0
  132. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/sidebar/sidebar-util.d.ts +0 -0
  133. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/sidebar/sidebar.d.ts +0 -0
  134. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/summary/summary-booking-option-pax.d.ts +0 -0
  135. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/summary/summary-booking-option-unit.d.ts +0 -0
  136. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/summary/summary-flight.d.ts +0 -0
  137. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/summary/summary-per-booking-option-group.d.ts +0 -0
  138. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/summary/summary-per-pax-option-group.d.ts +0 -0
  139. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/summary/summary-per-unit-option-group.d.ts +0 -0
  140. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/travelers-form/controls/gender-control.d.ts +0 -0
  141. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/travelers-form/travelers-form-util.d.ts +0 -0
  142. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/travelers-form/type-ahead-input.d.ts +0 -0
  143. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/features/travelers-form/validate-form.d.ts +0 -0
  144. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/index.d.ts +0 -0
  145. /package/build/build-cjs/{booking-wizard → src/booking-wizard}/use-offer-printer.d.ts +0 -0
  146. /package/build/build-cjs/{content → src/content}/components/LanguageSwitcher.d.ts +0 -0
  147. /package/build/build-cjs/{content → src/content}/components/icon.d.ts +0 -0
  148. /package/build/build-cjs/{content → src/content}/components/slider.d.ts +0 -0
  149. /package/build/build-cjs/{content → src/content}/footer/index.d.ts +0 -0
  150. /package/build/build-cjs/{content → src/content}/header/index.d.ts +0 -0
  151. /package/build/build-cjs/{content → src/content}/header/types.d.ts +0 -0
  152. /package/build/build-cjs/{content → src/content}/image-card-grid/index.d.ts +0 -0
  153. /package/build/build-cjs/{content → src/content}/image-card-grid/types.d.ts +0 -0
  154. /package/build/build-cjs/{content → src/content}/navbar/index.d.ts +0 -0
  155. /package/build/build-cjs/{index.d.ts → src/index.d.ts} +0 -0
  156. /package/build/build-cjs/{qsm → src/qsm}/components/QSMContainer/qsm-container.d.ts +0 -0
  157. /package/build/build-cjs/{qsm → src/qsm}/components/date-range-picker/calendar-day.d.ts +0 -0
  158. /package/build/build-cjs/{qsm → src/qsm}/components/date-range-picker/calendar.d.ts +0 -0
  159. /package/build/build-cjs/{qsm → src/qsm}/components/date-range-picker/index.d.ts +0 -0
  160. /package/build/build-cjs/{qsm → src/qsm}/components/double-search-input-group/index.d.ts +0 -0
  161. /package/build/build-cjs/{qsm → src/qsm}/components/icon.d.ts +0 -0
  162. /package/build/build-cjs/{qsm → src/qsm}/components/item-picker/index.d.ts +0 -0
  163. /package/build/build-cjs/{qsm → src/qsm}/components/mobile-filter-modal/index.d.ts +0 -0
  164. /package/build/build-cjs/{qsm → src/qsm}/components/search-input/index.d.ts +0 -0
  165. /package/build/build-cjs/{qsm → src/qsm}/components/search-input-group/index.d.ts +0 -0
  166. /package/build/build-cjs/{qsm → src/qsm}/components/travel-class-picker/index.d.ts +0 -0
  167. /package/build/build-cjs/{qsm → src/qsm}/components/travel-input/index.d.ts +0 -0
  168. /package/build/build-cjs/{qsm → src/qsm}/components/travel-input-group/index.d.ts +0 -0
  169. /package/build/build-cjs/{qsm → src/qsm}/components/travel-nationality-picker/index.d.ts +0 -0
  170. /package/build/build-cjs/{qsm → src/qsm}/components/travel-type-picker/index.d.ts +0 -0
  171. /package/build/build-cjs/{qsm → src/qsm}/index.d.ts +0 -0
  172. /package/build/build-cjs/{qsm → src/qsm}/qsm-configuration-context.d.ts +0 -0
  173. /package/build/build-cjs/{qsm → src/qsm}/types.d.ts +0 -0
  174. /package/build/build-cjs/{search-results → src/search-results}/components/filters/flight-filters.d.ts +0 -0
  175. /package/build/build-cjs/{search-results → src/search-results}/components/filters/utility.d.ts +0 -0
  176. /package/build/build-cjs/{search-results → src/search-results}/components/flight/flight-results.d.ts +0 -0
  177. /package/build/build-cjs/{search-results → src/search-results}/components/hotel/hotel-accommodation-results.d.ts +0 -0
  178. /package/build/build-cjs/{search-results → src/search-results}/components/hotel/hotel-card.d.ts +0 -0
  179. /package/build/build-cjs/{search-results → src/search-results}/components/icon.d.ts +0 -0
  180. /package/build/build-cjs/{search-results → src/search-results}/components/item-picker/index.d.ts +0 -0
  181. /package/build/build-cjs/{search-results → src/search-results}/components/itinerary/index.d.ts +0 -0
  182. /package/build/build-cjs/{search-results → src/search-results}/components/multi-range-filter.d.ts +0 -0
  183. /package/build/build-cjs/{search-results → src/search-results}/components/round-trip/round-trip-results.d.ts +0 -0
  184. /package/build/build-cjs/{search-results → src/search-results}/components/search-results-container/flight-search-results.d.ts +0 -0
  185. /package/build/build-cjs/{search-results → src/search-results}/components/search-results-container/search-results-container.d.ts +0 -0
  186. /package/build/build-cjs/{search-results → src/search-results}/components/spinner/spinner.d.ts +0 -0
  187. /package/build/build-cjs/{search-results → src/search-results}/components/tab-views/index.d.ts +0 -0
  188. /package/build/build-cjs/{search-results → src/search-results}/index.d.ts +0 -0
  189. /package/build/build-cjs/{search-results → src/search-results}/search-results-configuration-context.d.ts +0 -0
  190. /package/build/build-cjs/{search-results → src/search-results}/utils/flight-utils.d.ts +0 -0
  191. /package/build/build-cjs/{shared → src/shared}/components/icon.d.ts +0 -0
  192. /package/build/build-cjs/{shared → src/shared}/components/loader.d.ts +0 -0
  193. /package/build/build-cjs/{shared → src/shared}/types.d.ts +0 -0
  194. /package/build/build-cjs/{shared → src/shared}/utils/class-util.d.ts +0 -0
  195. /package/build/build-cjs/{shared → src/shared}/utils/query-string-util.d.ts +0 -0
  196. /package/build/build-cjs/{shared → src/shared}/utils/tide-api-utils.d.ts +0 -0
  197. /package/build/build-cjs/{shared → src/shared}/utils/use-media-query-util.d.ts +0 -0
  198. /package/build/build-esm/{booking-product → src/booking-product}/components/age-select.d.ts +0 -0
  199. /package/build/build-esm/{booking-product → src/booking-product}/components/amount-input.d.ts +0 -0
  200. /package/build/build-esm/{booking-product → src/booking-product}/components/date-range-picker/calendar-day.d.ts +0 -0
  201. /package/build/build-esm/{booking-product → src/booking-product}/components/date-range-picker/calendar.d.ts +0 -0
  202. /package/build/build-esm/{booking-product → src/booking-product}/components/dates.d.ts +0 -0
  203. /package/build/build-esm/{booking-product → src/booking-product}/components/footer.d.ts +0 -0
  204. /package/build/build-esm/{booking-product → src/booking-product}/components/header.d.ts +0 -0
  205. /package/build/build-esm/{booking-product → src/booking-product}/components/icon.d.ts +0 -0
  206. /package/build/build-esm/{booking-product → src/booking-product}/components/list-view.d.ts +0 -0
  207. /package/build/build-esm/{booking-product → src/booking-product}/components/product.d.ts +0 -0
  208. /package/build/build-esm/{booking-product → src/booking-product}/components/rating.d.ts +0 -0
  209. /package/build/build-esm/{booking-product → src/booking-product}/components/rooms.d.ts +0 -0
  210. /package/build/build-esm/{booking-product → src/booking-product}/constants.d.ts +0 -0
  211. /package/build/build-esm/{booking-product → src/booking-product}/index.d.ts +0 -0
  212. /package/build/build-esm/{booking-product → src/booking-product}/settings-context.d.ts +0 -0
  213. /package/build/build-esm/{booking-product → src/booking-product}/types.d.ts +0 -0
  214. /package/build/build-esm/{booking-product → src/booking-product}/utils/api.d.ts +0 -0
  215. /package/build/build-esm/{booking-product → src/booking-product}/utils/price.d.ts +0 -0
  216. /package/build/build-esm/{booking-wizard → src/booking-wizard}/components/icon.d.ts +0 -0
  217. /package/build/build-esm/{booking-wizard → src/booking-wizard}/components/labeled-input.d.ts +0 -0
  218. /package/build/build-esm/{booking-wizard → src/booking-wizard}/components/labeled-select.d.ts +0 -0
  219. /package/build/build-esm/{booking-wizard → src/booking-wizard}/components/message.d.ts +0 -0
  220. /package/build/build-esm/{booking-wizard → src/booking-wizard}/components/multi-range-filter.d.ts +0 -0
  221. /package/build/build-esm/{booking-wizard → src/booking-wizard}/components/phone-input.d.ts +0 -0
  222. /package/build/build-esm/{booking-wizard → src/booking-wizard}/components/print-offer-button.d.ts +0 -0
  223. /package/build/build-esm/{booking-wizard → src/booking-wizard}/components/product-card.d.ts +0 -0
  224. /package/build/build-esm/{booking-wizard → src/booking-wizard}/components/step-indicator.d.ts +0 -0
  225. /package/build/build-esm/{booking-wizard → src/booking-wizard}/components/step-route.d.ts +0 -0
  226. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/booking/api.d.ts +0 -0
  227. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/booking/booking.d.ts +0 -0
  228. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/booking/constants.d.ts +0 -0
  229. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/flight-options/flight-filter.d.ts +0 -0
  230. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/flight-options/flight-option-flight.d.ts +0 -0
  231. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/flight-options/flight-option-modal.d.ts +0 -0
  232. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/flight-options/flight-option.d.ts +0 -0
  233. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/flight-options/flight-utils.d.ts +0 -0
  234. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/price-details/price-details-api.d.ts +0 -0
  235. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/price-details/util.d.ts +0 -0
  236. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/product-options/no-options.d.ts +0 -0
  237. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/product-options/none-option.d.ts +0 -0
  238. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/product-options/option-booking-airline-group.d.ts +0 -0
  239. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/product-options/option-booking-group.d.ts +0 -0
  240. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/product-options/option-item.d.ts +0 -0
  241. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/product-options/option-pax-card.d.ts +0 -0
  242. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/product-options/option-pax-group.d.ts +0 -0
  243. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/product-options/option-room.d.ts +0 -0
  244. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/product-options/option-unit-group.d.ts +0 -0
  245. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/product-options/option-units-card.d.ts +0 -0
  246. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/room-options/room-utils.d.ts +0 -0
  247. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/room-options/room.d.ts +0 -0
  248. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/room-options/traveler-rooms.d.ts +0 -0
  249. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/sidebar/index.d.ts +0 -0
  250. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/sidebar/sidebar-flight.d.ts +0 -0
  251. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/sidebar/sidebar-util.d.ts +0 -0
  252. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/sidebar/sidebar.d.ts +0 -0
  253. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/summary/summary-booking-option-pax.d.ts +0 -0
  254. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/summary/summary-booking-option-unit.d.ts +0 -0
  255. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/summary/summary-flight.d.ts +0 -0
  256. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/summary/summary-per-booking-option-group.d.ts +0 -0
  257. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/summary/summary-per-pax-option-group.d.ts +0 -0
  258. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/summary/summary-per-unit-option-group.d.ts +0 -0
  259. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/travelers-form/controls/gender-control.d.ts +0 -0
  260. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/travelers-form/travelers-form-util.d.ts +0 -0
  261. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/travelers-form/type-ahead-input.d.ts +0 -0
  262. /package/build/build-esm/{booking-wizard → src/booking-wizard}/features/travelers-form/validate-form.d.ts +0 -0
  263. /package/build/build-esm/{booking-wizard → src/booking-wizard}/index.d.ts +0 -0
  264. /package/build/build-esm/{booking-wizard → src/booking-wizard}/use-offer-printer.d.ts +0 -0
  265. /package/build/build-esm/{content → src/content}/components/LanguageSwitcher.d.ts +0 -0
  266. /package/build/build-esm/{content → src/content}/components/icon.d.ts +0 -0
  267. /package/build/build-esm/{content → src/content}/components/slider.d.ts +0 -0
  268. /package/build/build-esm/{content → src/content}/footer/index.d.ts +0 -0
  269. /package/build/build-esm/{content → src/content}/header/index.d.ts +0 -0
  270. /package/build/build-esm/{content → src/content}/header/types.d.ts +0 -0
  271. /package/build/build-esm/{content → src/content}/image-card-grid/index.d.ts +0 -0
  272. /package/build/build-esm/{content → src/content}/image-card-grid/types.d.ts +0 -0
  273. /package/build/build-esm/{content → src/content}/navbar/index.d.ts +0 -0
  274. /package/build/build-esm/{index.d.ts → src/index.d.ts} +0 -0
  275. /package/build/build-esm/{qsm → src/qsm}/components/QSMContainer/qsm-container.d.ts +0 -0
  276. /package/build/build-esm/{qsm → src/qsm}/components/date-range-picker/calendar-day.d.ts +0 -0
  277. /package/build/build-esm/{qsm → src/qsm}/components/date-range-picker/calendar.d.ts +0 -0
  278. /package/build/build-esm/{qsm → src/qsm}/components/date-range-picker/index.d.ts +0 -0
  279. /package/build/build-esm/{qsm → src/qsm}/components/double-search-input-group/index.d.ts +0 -0
  280. /package/build/build-esm/{qsm → src/qsm}/components/icon.d.ts +0 -0
  281. /package/build/build-esm/{qsm → src/qsm}/components/item-picker/index.d.ts +0 -0
  282. /package/build/build-esm/{qsm → src/qsm}/components/mobile-filter-modal/index.d.ts +0 -0
  283. /package/build/build-esm/{qsm → src/qsm}/components/search-input/index.d.ts +0 -0
  284. /package/build/build-esm/{qsm → src/qsm}/components/search-input-group/index.d.ts +0 -0
  285. /package/build/build-esm/{qsm → src/qsm}/components/travel-class-picker/index.d.ts +0 -0
  286. /package/build/build-esm/{qsm → src/qsm}/components/travel-input/index.d.ts +0 -0
  287. /package/build/build-esm/{qsm → src/qsm}/components/travel-input-group/index.d.ts +0 -0
  288. /package/build/build-esm/{qsm → src/qsm}/components/travel-nationality-picker/index.d.ts +0 -0
  289. /package/build/build-esm/{qsm → src/qsm}/components/travel-type-picker/index.d.ts +0 -0
  290. /package/build/build-esm/{qsm → src/qsm}/index.d.ts +0 -0
  291. /package/build/build-esm/{qsm → src/qsm}/qsm-configuration-context.d.ts +0 -0
  292. /package/build/build-esm/{qsm → src/qsm}/types.d.ts +0 -0
  293. /package/build/build-esm/{search-results → src/search-results}/components/filters/flight-filters.d.ts +0 -0
  294. /package/build/build-esm/{search-results → src/search-results}/components/filters/utility.d.ts +0 -0
  295. /package/build/build-esm/{search-results → src/search-results}/components/flight/flight-results.d.ts +0 -0
  296. /package/build/build-esm/{search-results → src/search-results}/components/hotel/hotel-accommodation-results.d.ts +0 -0
  297. /package/build/build-esm/{search-results → src/search-results}/components/hotel/hotel-card.d.ts +0 -0
  298. /package/build/build-esm/{search-results → src/search-results}/components/icon.d.ts +0 -0
  299. /package/build/build-esm/{search-results → src/search-results}/components/item-picker/index.d.ts +0 -0
  300. /package/build/build-esm/{search-results → src/search-results}/components/itinerary/index.d.ts +0 -0
  301. /package/build/build-esm/{search-results → src/search-results}/components/multi-range-filter.d.ts +0 -0
  302. /package/build/build-esm/{search-results → src/search-results}/components/round-trip/round-trip-results.d.ts +0 -0
  303. /package/build/build-esm/{search-results → src/search-results}/components/search-results-container/flight-search-results.d.ts +0 -0
  304. /package/build/build-esm/{search-results → src/search-results}/components/search-results-container/search-results-container.d.ts +0 -0
  305. /package/build/build-esm/{search-results → src/search-results}/components/spinner/spinner.d.ts +0 -0
  306. /package/build/build-esm/{search-results → src/search-results}/components/tab-views/index.d.ts +0 -0
  307. /package/build/build-esm/{search-results → src/search-results}/index.d.ts +0 -0
  308. /package/build/build-esm/{search-results → src/search-results}/search-results-configuration-context.d.ts +0 -0
  309. /package/build/build-esm/{search-results → src/search-results}/utils/flight-utils.d.ts +0 -0
  310. /package/build/build-esm/{shared → src/shared}/components/icon.d.ts +0 -0
  311. /package/build/build-esm/{shared → src/shared}/components/loader.d.ts +0 -0
  312. /package/build/build-esm/{shared → src/shared}/types.d.ts +0 -0
  313. /package/build/build-esm/{shared → src/shared}/utils/class-util.d.ts +0 -0
  314. /package/build/build-esm/{shared → src/shared}/utils/query-string-util.d.ts +0 -0
  315. /package/build/build-esm/{shared → src/shared}/utils/tide-api-utils.d.ts +0 -0
  316. /package/build/build-esm/{shared → src/shared}/utils/use-media-query-util.d.ts +0 -0
@@ -0,0 +1,147 @@
1
+ import React, { useContext, useState } from 'react';
2
+ import { durationTicksInHoursString, formatPrice, getTranslations, longFormatDate, timeFromDateTime } from '../../../../shared/utils/localization-util';
3
+ import Icon from '../../icon';
4
+ import { ExtendedFlightSearchResponseItem } from '../../../types';
5
+ import SearchResultsConfigurationContext from '../../../search-results-configuration-context';
6
+ import { getArrivalSegment, getDepartureSegment, getFlightSegments, getNumberOfStopsLabel } from '../../../utils/flight-utils';
7
+ import { useDispatch, useSelector } from 'react-redux';
8
+ import { setFlyInIsOpen, setSelectedFlight } from '../../../store/search-results-slice';
9
+ import { SearchResultsRootState } from '../../../store/search-results-store';
10
+ import { useFlightSearch } from '../flight-search-context';
11
+ import { FlightSearchResponseFlight } from '@qite/tide-client';
12
+
13
+ interface IndependentFlightOptionProps {
14
+ item: FlightSearchResponseFlight;
15
+ onSelect?: () => void;
16
+ guid: string | null;
17
+ selectedGuid?: string | null;
18
+ isOutward: boolean;
19
+ }
20
+
21
+ const IndependentFlightOption: React.FC<IndependentFlightOptionProps> = ({ item, onSelect, guid, selectedGuid, isOutward }) => {
22
+ const dispatch = useDispatch();
23
+ const context = useContext(SearchResultsConfigurationContext);
24
+ const language = context?.languageCode ?? 'en-GB';
25
+ const translations = getTranslations(language);
26
+
27
+ const [detailsOpen, setDetailsOpen] = useState(false);
28
+
29
+ return (
30
+ <div className="search__result-card" key={`flight-${item.code}`}>
31
+ <div className="flight">
32
+ <div className="flight__option">
33
+ <div className="flight__content">
34
+ <div className="flight__flights">
35
+ <div className="flight__flight">
36
+ <div className="flight__flight__header">
37
+ <div className="flight__status__container"></div>
38
+ <div className="flight__price">
39
+ {/* <span className="price">{formatPrice(item.price, 'EUR', context?.languageCode ?? 'en-GB')}</span> */}
40
+ <button type="button" className={`cta ${selectedGuid === guid ? 'cta--selected' : 'cta--select'}`} onClick={() => onSelect?.()}>
41
+ {selectedGuid === guid ? 'Selected' : 'Select'}
42
+ </button>
43
+ </div>
44
+ </div>
45
+ </div>
46
+ <div className="flight__flight">
47
+ <div className="flight__flight__container">
48
+ <div className="flight__flight__wrapper">
49
+ <div className="flight__logo__wrapper">
50
+ <img
51
+ src={`https://media.tidesoftware.be/media/shared/Airlines/${getDepartureSegment(item)?.marketingAirlineCode}.png?height=256`}
52
+ alt=""
53
+ className="flight__logo"
54
+ />
55
+ <span>{getDepartureSegment(item)?.marketingAirlineName}</span>
56
+ </div>
57
+ <div className="flight__info">
58
+ <div className="flight__info__times">
59
+ <strong>
60
+ {timeFromDateTime(getDepartureSegment(item)?.departureDateTime)} {getDepartureSegment(item)?.departureAirportCode}
61
+ </strong>
62
+ <p>{longFormatDate(getDepartureSegment(item)?.departureDateTime, language)}</p>
63
+ </div>
64
+ <div className="flight__info__duration">
65
+ <p>{durationTicksInHoursString(item.durationInTicks)}</p>
66
+ <div className="flight__info__duration__stops">
67
+ <div className="flight__info__duration__stop" />
68
+ </div>
69
+ <span>{getNumberOfStopsLabel(item, translations.SRP.DIRECT, translations.SRP.STOPS, translations.SRP.STOP)}</span>
70
+ </div>
71
+ <div className="flight__info__times flight__info__times--arrival">
72
+ <strong>
73
+ {timeFromDateTime(getArrivalSegment(item)?.arrivalDateTime)} {getArrivalSegment(item)?.arrivalAirportCode}
74
+ </strong>
75
+ <p>{longFormatDate(getArrivalSegment(item)?.arrivalDateTime, language)}</p>
76
+ {/* <span className="flight__info__times__days">+1 day</span> */}
77
+ </div>
78
+ </div>
79
+ </div>
80
+
81
+ <div className="flight__detail__btn__wrapper">
82
+ <div className={`flight__detail__btn ${detailsOpen ? 'flight__detail__btn--active' : ''}`} onClick={() => setDetailsOpen((prev) => !prev)}>
83
+ <Icon name="ui-chevron" className="flight__detail__btn__arrow" width={16} height={16} />
84
+ </div>
85
+ </div>
86
+ </div>
87
+
88
+ <div className={`flight__detail ${detailsOpen ? 'flight__detail--active' : ''}`}>
89
+ {getFlightSegments(item)?.map((segment, index) => (
90
+ <React.Fragment key={`outward-segment-${index}-${segment.flightNumber}`}>
91
+ <div className="flight__info">
92
+ <div className="flight__info__times__wrapper">
93
+ <div className="flight__info__times">
94
+ <p>{timeFromDateTime(segment.departureDateTime)}</p>
95
+ <strong>{segment.departureAirportCode}</strong>
96
+ <p>{longFormatDate(segment.departureDateTime, language)}</p>
97
+ </div>
98
+ <div>
99
+ <Icon name="ui-plane-depart" width={30} height={20} />
100
+ </div>
101
+ </div>
102
+ <div className="flight__info__duration">
103
+ <p>{durationTicksInHoursString(segment.durationInTicks)}</p>
104
+ <div className="flight__info__duration__stops" />
105
+ <span>{segment.marketingAirlineName}</span>
106
+ <strong>{segment.operatingFlightNumber}</strong>
107
+ </div>
108
+ <div className="flight__info__times__wrapper flight__info__times__wrapper--arrival">
109
+ <div>
110
+ <Icon name="ui-plane-arrive" width={30} height={20} />
111
+ </div>
112
+ <div className="flight__info__times flight__info__times--arrival">
113
+ <p>{timeFromDateTime(segment.arrivalDateTime)}</p>
114
+ <strong>{segment.arrivalAirportCode}</strong>
115
+ <p>{longFormatDate(segment.arrivalDateTime, language)}</p>
116
+ </div>
117
+ </div>
118
+ </div>
119
+
120
+ {segment.transferTimeInTicks && (
121
+ <div className="flight__info">
122
+ <div className="flight__info__times" />
123
+ <div className="flight__info__duration flight__info__duration--waittime">
124
+ <div className="flight__info__duration__stops flight__info__duration__stops--stoptime">
125
+ <Icon name="ui-clock" width={24} height={24} />
126
+ </div>
127
+ <div className="flight__info__duration__stoptime">
128
+ <span>Stop time</span>
129
+ <strong>{durationTicksInHoursString(segment.transferTimeInTicks)}</strong>
130
+ </div>
131
+ </div>
132
+ <div className="flight__info__times flight__info__times--arrival" />
133
+ </div>
134
+ )}
135
+ </React.Fragment>
136
+ ))}
137
+ </div>
138
+ </div>
139
+ </div>
140
+ </div>
141
+ </div>
142
+ </div>
143
+ </div>
144
+ );
145
+ };
146
+
147
+ export default IndependentFlightOption;
@@ -0,0 +1,172 @@
1
+ import React, { useContext, useEffect, useState } from 'react';
2
+ import Icon from '../../icon';
3
+ import { ExtendedFlightSearchResponseItem } from '../../../types';
4
+ import SearchResultsConfigurationContext from '../../../search-results-configuration-context';
5
+ import { getTranslations } from '../../../../shared/utils/localization-util';
6
+ import { FlightSearchResponseFlightSegment } from '@qite/tide-client';
7
+ import IndependentFlightOption from './independent-flight-option';
8
+ import PairedFlightOption from './paired-flight-option';
9
+ import { useDispatch } from 'react-redux';
10
+ import { setFlyInIsOpen, setSelectedFlight } from '../../../store/search-results-slice';
11
+ import { useFlightSearch } from '../flight-search-context';
12
+
13
+ interface IndependentFlightSelectionProps {
14
+ searchResults: ExtendedFlightSearchResponseItem[];
15
+ }
16
+
17
+ const getFlightKey = (segments: FlightSearchResponseFlightSegment[]) => {
18
+ if (!segments || segments.length === 0) return '';
19
+ return segments.map((s) => `${s.marketingAirlineCode}${s.flightNumber}_${s.departureDateTime}`).join('_');
20
+ };
21
+
22
+ const IndependentFlightSelection: React.FC<IndependentFlightSelectionProps> = ({ searchResults }) => {
23
+ const dispatch = useDispatch();
24
+
25
+ const context = useContext(SearchResultsConfigurationContext);
26
+ const translations = getTranslations(context?.languageCode ?? 'en-GB');
27
+
28
+ const { onFlightSearch } = useFlightSearch();
29
+
30
+ const [selectedOutwardKey, setSelectedOutwardKey] = useState<string | null>(null);
31
+ const [selectedReturnKey, setSelectedReturnKey] = useState<string | null>(null);
32
+
33
+ const uniqueOutwardFlights: ExtendedFlightSearchResponseItem[] = React.useMemo(() => {
34
+ const map = new Map();
35
+
36
+ searchResults.forEach((flight) => {
37
+ const key = getFlightKey(flight.outward.segments);
38
+
39
+ if (!map.has(key)) {
40
+ map.set(key, flight);
41
+ }
42
+ });
43
+
44
+ return Array.from(map.values());
45
+ }, [searchResults]);
46
+
47
+ const [uniqueReturnFlights, setUniqueReturnFlights] = useState<ExtendedFlightSearchResponseItem[]>([]);
48
+
49
+ useEffect(() => {
50
+ if (!selectedOutwardKey) {
51
+ setUniqueReturnFlights([]);
52
+ setSelectedReturnKey(null);
53
+ return;
54
+ }
55
+
56
+ // Filter combinations that match selected outward fare
57
+ const matchingCombinations = searchResults.filter((flight) => getFlightKey(flight.outward.segments) === selectedOutwardKey);
58
+ const returnMap = new Map();
59
+
60
+ matchingCombinations.forEach((flight) => {
61
+ const key = getFlightKey(flight.return.segments);
62
+
63
+ if (!returnMap.has(key)) {
64
+ returnMap.set(key, flight);
65
+ }
66
+ });
67
+
68
+ const returns = Array.from(returnMap.values());
69
+
70
+ setUniqueReturnFlights(returns);
71
+ }, [selectedOutwardKey, searchResults]);
72
+
73
+ const selectedCombinationFlight = React.useMemo(() => {
74
+ if (!selectedOutwardKey || !selectedReturnKey) return undefined;
75
+
76
+ return searchResults.find(
77
+ (flight) => getFlightKey(flight.outward.segments) === selectedOutwardKey && getFlightKey(flight.return.segments) === selectedReturnKey
78
+ );
79
+ }, [searchResults, selectedOutwardKey, selectedReturnKey]);
80
+
81
+ useEffect(() => {
82
+ if (!selectedCombinationFlight) return;
83
+
84
+ dispatch(setSelectedFlight(selectedCombinationFlight));
85
+ onFlightSearch(selectedCombinationFlight); // Trigger search to update accommodation options based on selected flight
86
+ dispatch(setFlyInIsOpen(true));
87
+ }, [selectedCombinationFlight, dispatch]);
88
+
89
+ const selectedOutward = React.useMemo(() => {
90
+ if (!selectedOutwardKey) return null;
91
+
92
+ return searchResults.find((flight) => getFlightKey(flight.outward.segments) === selectedOutwardKey) || null;
93
+ }, [searchResults, selectedOutwardKey]);
94
+
95
+ const selectedReturn = React.useMemo(() => {
96
+ if (!selectedReturnKey) return null;
97
+
98
+ return searchResults.find((flight) => getFlightKey(flight.return.segments) === selectedReturnKey) || null;
99
+ }, [searchResults, selectedReturnKey]);
100
+
101
+ return (
102
+ <>
103
+ <div className="search__results__label search__results__label--secondary">
104
+ <div className="search__results__label__date">
105
+ <Icon name="ui-flight" height={16} fill="white" />
106
+ </div>
107
+ <div className="search__results__label__text">
108
+ <h3>
109
+ {translations.SRP.SELECT} <strong> {translations.SRP.DEPARTURE}</strong>
110
+ </h3>
111
+ </div>
112
+ </div>
113
+
114
+ <div className="search__results__cards search__results__cards--extended">
115
+ {selectedOutwardKey && selectedOutward ? (
116
+ <IndependentFlightOption
117
+ key={`flight-${selectedOutwardKey}`}
118
+ item={selectedOutward.outward}
119
+ guid={selectedOutward.guid}
120
+ onSelect={() => setSelectedOutwardKey(null)}
121
+ selectedGuid={selectedOutward.guid}
122
+ isOutward={true}
123
+ />
124
+ ) : (
125
+ uniqueOutwardFlights.map((result) => (
126
+ <IndependentFlightOption
127
+ key={`flight-${result.guid}`}
128
+ item={result.outward}
129
+ onSelect={() => setSelectedOutwardKey(getFlightKey(result.outward.segments))}
130
+ guid={result.guid}
131
+ isOutward={true}
132
+ />
133
+ ))
134
+ )}
135
+ </div>
136
+ <div className="search__results__label search__results__label--secondary">
137
+ <div className="search__results__label__date">
138
+ <Icon name="ui-flight" height={16} fill="white" />
139
+ </div>
140
+ <div className="search__results__label__text">
141
+ <h3>
142
+ {translations.SRP.SELECT} <strong> {translations.SRP.RETURN}</strong>
143
+ </h3>
144
+ </div>
145
+ </div>
146
+
147
+ <div className="search__results__cards search__results__cards--extended">
148
+ {selectedReturnKey && selectedReturn ? (
149
+ <IndependentFlightOption
150
+ key={`flight-${selectedReturnKey}`}
151
+ item={selectedReturn.return}
152
+ guid={selectedReturn.guid}
153
+ selectedGuid={selectedReturn.guid}
154
+ isOutward={false}
155
+ />
156
+ ) : (
157
+ uniqueReturnFlights.map((result) => (
158
+ <IndependentFlightOption
159
+ key={`flight-${result.guid}`}
160
+ item={result.return}
161
+ onSelect={() => setSelectedReturnKey(getFlightKey(result.return.segments))}
162
+ guid={result.guid}
163
+ isOutward={false}
164
+ />
165
+ ))
166
+ )}
167
+ </div>
168
+ </>
169
+ );
170
+ };
171
+
172
+ export default IndependentFlightSelection;
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import { ExtendedFlightSearchResponseItem, FlightSelectionMode } from '../../../types';
3
+ import PairedFlightSelection from './paired-flight-selection';
4
+ import IndependentFlightSelection from './independent-flight-selection';
5
+
6
+ interface FlightSelectionProps {
7
+ searchResults: ExtendedFlightSearchResponseItem[];
8
+ flightSelectionType: FlightSelectionMode;
9
+ }
10
+
11
+ const FlightSelection: React.FC<FlightSelectionProps> = ({ searchResults, flightSelectionType }) => {
12
+ return flightSelectionType === 'paired' ? (
13
+ <PairedFlightSelection searchResults={searchResults} />
14
+ ) : (
15
+ <IndependentFlightSelection searchResults={searchResults} />
16
+ );
17
+ };
18
+
19
+ export default FlightSelection;
@@ -1,33 +1,37 @@
1
1
  import React, { useContext, useState } from 'react';
2
- import { durationTicksInHoursString, formatPrice, getTranslations, longFormatDate, timeFromDateTime } from '../../../shared/utils/localization-util';
3
- import Icon from '../icon';
4
- import { ExtendedFlightSearchResponseItem } from '../../types';
5
- import SearchResultsConfigurationContext from '../../search-results-configuration-context';
6
- import { getArrivalSegment, getDepartureSegment, getFlightSegments, getNumberOfStopsLabel } from '../../utils/flight-utils';
2
+ import { durationTicksInHoursString, formatPrice, getTranslations, longFormatDate, timeFromDateTime } from '../../../../shared/utils/localization-util';
3
+ import Icon from '../../icon';
4
+ import { ExtendedFlightSearchResponseItem } from '../../../types';
5
+ import SearchResultsConfigurationContext from '../../../search-results-configuration-context';
6
+ import { getArrivalSegment, getDepartureSegment, getFlightSegments, getNumberOfStopsLabel } from '../../../utils/flight-utils';
7
7
  import { useDispatch, useSelector } from 'react-redux';
8
- import { setSelectedFlight } from '../../store/search-results-slice';
9
- import { SearchResultsRootState } from '../../store/search-results-store';
8
+ import { setFlyInIsOpen, setSelectedFlight } from '../../../store/search-results-slice';
9
+ import { SearchResultsRootState } from '../../../store/search-results-store';
10
+ import { useFlightSearch } from '../flight-search-context';
10
11
 
11
- interface FlightOptionProps {
12
+ interface PairedFlightOptionProps {
12
13
  item: ExtendedFlightSearchResponseItem;
13
14
  }
14
15
 
15
- const FlightOption: React.FC<FlightOptionProps> = ({ item }) => {
16
+ const PairedFlightOption: React.FC<PairedFlightOptionProps> = ({ item }) => {
16
17
  const dispatch = useDispatch();
17
- const { selectedFlightId } = useSelector((state: SearchResultsRootState) => state.searchResults);
18
+ const { selectedFlight } = useSelector((state: SearchResultsRootState) => state.searchResults);
18
19
  const context = useContext(SearchResultsConfigurationContext);
20
+ const { onFlightSearch } = useFlightSearch();
19
21
  const language = context?.languageCode ?? 'en-GB';
20
- const translations = getTranslations(context?.languageCode ?? 'en-GB');
22
+ const translations = getTranslations(language);
21
23
 
22
24
  const [isOutwardOpen, setIsOutwardOpen] = useState(false);
23
25
  const [isReturnOpen, setIsReturnOpen] = useState(false);
24
26
 
25
- const handleSelect = (flightGuid: string) => {
26
- dispatch(setSelectedFlight(flightGuid));
27
+ const handleSelect = (flight: ExtendedFlightSearchResponseItem) => {
28
+ dispatch(setSelectedFlight(flight));
29
+ onFlightSearch(flight); // Trigger search to update accommodation options based on selected flight
30
+ dispatch(setFlyInIsOpen(true));
27
31
  };
28
32
 
29
33
  return (
30
- <div className="search__result-card">
34
+ <div className="search__result-card" key={`flight-${item.guid}`}>
31
35
  <div className="flight">
32
36
  <div className="flight__option">
33
37
  <div className="flight__content">
@@ -39,9 +43,9 @@ const FlightOption: React.FC<FlightOptionProps> = ({ item }) => {
39
43
  <span className="price">{formatPrice(item.price, 'EUR', context?.languageCode ?? 'en-GB')}</span>
40
44
  <button
41
45
  type="button"
42
- className={`cta ${selectedFlightId === item.guid ? 'cta--selected' : 'cta--select'}`}
43
- onClick={() => handleSelect(item.guid)}>
44
- {selectedFlightId === item.guid ? 'Selected' : 'Select'}
46
+ className={`cta ${selectedFlight?.guid === item.guid ? 'cta--selected' : 'cta--select'}`}
47
+ onClick={() => handleSelect(item)}>
48
+ {selectedFlight?.guid === item.guid ? 'Selected' : 'Select'}
45
49
  </button>
46
50
  </div>
47
51
  </div>
@@ -51,8 +55,12 @@ const FlightOption: React.FC<FlightOptionProps> = ({ item }) => {
51
55
  <div className="flight__flight__container">
52
56
  <div className="flight__flight__wrapper">
53
57
  <div className="flight__logo__wrapper">
54
- <img src={`https://media.tidesoftware.be/media/shared/Airlines/${item.airlineCode}.png?height=256`} alt="" className="flight__logo" />
55
- <span>{item.airlineName}</span>
58
+ <img
59
+ src={`https://media.tidesoftware.be/media/shared/Airlines/${getDepartureSegment(item.outward)?.marketingAirlineCode}.png?height=256`}
60
+ alt=""
61
+ className="flight__logo"
62
+ />
63
+ <span>{getDepartureSegment(item.outward)?.marketingAirlineName}</span>
56
64
  </div>
57
65
  <div className="flight__info">
58
66
  <div className="flight__info__times">
@@ -88,9 +96,9 @@ const FlightOption: React.FC<FlightOptionProps> = ({ item }) => {
88
96
  </div>
89
97
 
90
98
  <div className={`flight__detail ${isOutwardOpen ? 'flight__detail--active' : ''}`}>
91
- {getFlightSegments(item.outward).map((segment) => (
92
- <>
93
- <div key={segment.flightNumber} className="flight__info">
99
+ {getFlightSegments(item.outward).map((segment, index) => (
100
+ <React.Fragment key={`outward-segment-${index}-${segment.flightNumber}`}>
101
+ <div className="flight__info">
94
102
  <div className="flight__info__times__wrapper">
95
103
  <div className="flight__info__times">
96
104
  <p>{timeFromDateTime(segment.departureDateTime)}</p>
@@ -134,7 +142,7 @@ const FlightOption: React.FC<FlightOptionProps> = ({ item }) => {
134
142
  <div className="flight__info__times flight__info__times--arrival" />
135
143
  </div>
136
144
  )}
137
- </>
145
+ </React.Fragment>
138
146
  ))}
139
147
  </div>
140
148
  </div>
@@ -144,8 +152,12 @@ const FlightOption: React.FC<FlightOptionProps> = ({ item }) => {
144
152
  <div className="flight__flight__container">
145
153
  <div className="flight__flight__wrapper">
146
154
  <div className="flight__logo__wrapper">
147
- <img src={`https://media.tidesoftware.be/media/shared/Airlines/${item.airlineCode}.png?height=256`} alt="" className="flight__logo" />
148
- <span>{item.airlineName}</span>
155
+ <img
156
+ src={`https://media.tidesoftware.be/media/shared/Airlines/${getDepartureSegment(item.return)?.marketingAirlineCode}.png?height=256`}
157
+ alt=""
158
+ className="flight__logo"
159
+ />
160
+ <span>{getDepartureSegment(item.return)?.marketingAirlineName}</span>
149
161
  </div>
150
162
  <div className="flight__info">
151
163
  <div className="flight__info__times">
@@ -181,9 +193,9 @@ const FlightOption: React.FC<FlightOptionProps> = ({ item }) => {
181
193
  </div>
182
194
 
183
195
  <div className={`flight__detail ${isReturnOpen ? 'flight__detail--active' : ''}`}>
184
- {getFlightSegments(item.return).map((segment) => (
185
- <>
186
- <div key={segment.flightNumber} className="flight__info">
196
+ {getFlightSegments(item.return).map((segment, index) => (
197
+ <React.Fragment key={`return-segment-${index}-${segment.flightNumber}`}>
198
+ <div className="flight__info">
187
199
  <div className="flight__info__times__wrapper">
188
200
  <div className="flight__info__times">
189
201
  <p>{timeFromDateTime(segment.departureDateTime)}</p>
@@ -227,7 +239,7 @@ const FlightOption: React.FC<FlightOptionProps> = ({ item }) => {
227
239
  <div className="flight__info__times flight__info__times--arrival" />
228
240
  </div>
229
241
  )}
230
- </>
242
+ </React.Fragment>
231
243
  ))}
232
244
  </div>
233
245
  </div>
@@ -240,4 +252,4 @@ const FlightOption: React.FC<FlightOptionProps> = ({ item }) => {
240
252
  );
241
253
  };
242
254
 
243
- export default FlightOption;
255
+ export default PairedFlightOption;
@@ -1,17 +1,15 @@
1
1
  import React, { useContext } from 'react';
2
- import Icon from '../icon';
3
- import { ExtendedFlightSearchResponseItem } from '../../types';
4
- import SearchResultsConfigurationContext from '../../search-results-configuration-context';
5
- import { getTranslations } from '../../../shared/utils/localization-util';
6
- import FlightOption from './flight-option';
7
- import { groupBy } from 'lodash';
2
+ import Icon from '../../icon';
3
+ import { ExtendedFlightSearchResponseItem } from '../../../types';
4
+ import SearchResultsConfigurationContext from '../../../search-results-configuration-context';
5
+ import { getTranslations } from '../../../../shared/utils/localization-util';
6
+ import PairedFlightOption from './paired-flight-option';
8
7
 
9
- interface FlightAccommodationResultsProps {
8
+ interface PairedFlightSelectionProps {
10
9
  searchResults: ExtendedFlightSearchResponseItem[];
11
10
  }
12
11
 
13
- const FlightAccommodationResults: React.FC<FlightAccommodationResultsProps> = ({ searchResults }) => {
14
- const groupedSearchResults = groupBy(searchResults, (result) => result.flightRouteId);
12
+ const PairedFlightSelection: React.FC<PairedFlightSelectionProps> = ({ searchResults }) => {
15
13
  const context = useContext(SearchResultsConfigurationContext);
16
14
  const translations = getTranslations(context?.languageCode ?? 'en-GB');
17
15
 
@@ -30,11 +28,11 @@ const FlightAccommodationResults: React.FC<FlightAccommodationResultsProps> = ({
30
28
 
31
29
  <div className="search__results__cards search__results__cards--extended">
32
30
  {searchResults.map((result) => (
33
- <FlightOption key={`flight-${result.guid}`} item={result} />
31
+ <PairedFlightOption key={`flight-${result.guid}`} item={result} />
34
32
  ))}
35
33
  </div>
36
34
  </>
37
35
  );
38
36
  };
39
37
 
40
- export default FlightAccommodationResults;
38
+ export default PairedFlightSelection;