@sabstravtech/obtservices 0.0.0 → 0.0.1

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 (895) hide show
  1. package/dist/obtservices/angular/components/basket-panel.d.ts +34 -0
  2. package/dist/obtservices/angular/components/with-component.d.ts +12 -0
  3. package/dist/obtservices/angular/data.d.ts +5530 -0
  4. package/dist/obtservices/angular/fetchers.d.ts +32 -0
  5. package/dist/obtservices/angular/lib/vendor/classes/environment.d.ts +3 -0
  6. package/dist/obtservices/angular/lib/vendor/classes/event-messenager.d.ts +4 -0
  7. package/dist/obtservices/angular/lib/vendor/classes/helpers.d.ts +15 -0
  8. package/dist/obtservices/angular/lib/vendor/fetchers/basket-fetcher.d.ts +6 -0
  9. package/dist/obtservices/angular/lib/vendor/fetchers/cabhire-quote-fetcher.d.ts +7 -0
  10. package/dist/obtservices/angular/lib/vendor/fetchers/carhire-availability-detail.fetcher.d.ts +7 -0
  11. package/dist/obtservices/angular/lib/vendor/fetchers/carhire-quote-fetcher.d.ts +7 -0
  12. package/dist/obtservices/angular/lib/vendor/fetchers/conferma-office-names.fetcher.d.ts +7 -0
  13. package/dist/obtservices/angular/lib/vendor/fetchers/conferma-quicklist.fetcher.d.ts +7 -0
  14. package/dist/obtservices/angular/lib/vendor/fetchers/eurostar-quote.fetcher.d.ts +7 -0
  15. package/dist/obtservices/angular/lib/vendor/fetchers/flight-quote.fetcher.d.ts +7 -0
  16. package/dist/obtservices/angular/lib/vendor/fetchers/get-rail-cards.fetcher.d.ts +7 -0
  17. package/dist/obtservices/angular/lib/vendor/fetchers/get-rail-station.fetcher.d.ts +7 -0
  18. package/dist/obtservices/angular/lib/vendor/fetchers/get-risk-alerts.fetcher.d.ts +7 -0
  19. package/dist/obtservices/angular/lib/vendor/fetchers/get-user-company-offices.fetcher.d.ts +7 -0
  20. package/dist/obtservices/angular/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.d.ts +7 -0
  21. package/dist/obtservices/angular/lib/vendor/fetchers/get-user-recent-searches.fetcher.d.ts +7 -0
  22. package/dist/obtservices/angular/lib/vendor/fetchers/get-users-baskets-fetcher.d.ts +7 -0
  23. package/dist/obtservices/angular/lib/vendor/fetchers/getMiAutoSugestions.fetcher.d.ts +7 -0
  24. package/dist/obtservices/angular/lib/vendor/fetchers/hotel-avaliability-fetcher.d.ts +7 -0
  25. package/dist/obtservices/angular/lib/vendor/fetchers/hotel-quote-fetcher.d.ts +7 -0
  26. package/dist/obtservices/angular/lib/vendor/fetchers/irl-quote-fetcher.d.ts +7 -0
  27. package/dist/obtservices/angular/lib/vendor/fetchers/lounge-quote.fetcher.d.ts +7 -0
  28. package/dist/obtservices/angular/lib/vendor/fetchers/parking-quote-fetcher.d.ts +7 -0
  29. package/dist/obtservices/angular/lib/vendor/fetchers/rail-quote-fetcher.d.ts +7 -0
  30. package/dist/obtservices/angular/lib/vendor/fetchers/search-airlines-fetcher.d.ts +6 -0
  31. package/dist/obtservices/angular/lib/vendor/fetchers/search-airports-fetcher.d.ts +6 -0
  32. package/dist/obtservices/angular/lib/vendor/fetchers/search-cities.fetcher.d.ts +7 -0
  33. package/dist/obtservices/angular/lib/vendor/fetchers/search-conferma-cities.fetcher.d.ts +6 -0
  34. package/dist/obtservices/angular/lib/vendor/fetchers/search-depots.fetcher.d.ts +7 -0
  35. package/dist/obtservices/angular/lib/vendor/fetchers/search-hotel-chains.fetcher.d.ts +7 -0
  36. package/dist/obtservices/angular/lib/vendor/fetchers/search-postcodes.fetcher.d.ts +7 -0
  37. package/dist/obtservices/angular/lib/vendor/fetchers/search-rail-stations.fetcher.d.ts +7 -0
  38. package/dist/obtservices/angular/lib/vendor/fetchers/search-users-can-book-for-fetcher.d.ts +7 -0
  39. package/dist/obtservices/angular/lib/vendor/fetchers/user-addresses.fetcher.d.ts +7 -0
  40. package/dist/obtservices/angular/lib/vendor/fetchers/user-fetcher.d.ts +6 -0
  41. package/dist/obtservices/angular/lib/vendor/fetchers/user-message.fetcher.d.ts +7 -0
  42. package/dist/obtservices/angular/lib/vendor/fetchers/user-products-fetcher.d.ts +7 -0
  43. package/dist/obtservices/angular/lib/vendor/fetchers/user-ui-configs-fetcher.d.ts +7 -0
  44. package/dist/obtservices/angular/lib/vendor/services/enterprise-basket.service.d.ts +29 -0
  45. package/dist/obtservices/angular/lib/vendor/services/hotel-avallibility.service.d.ts +9 -0
  46. package/dist/obtservices/angular/lib/vendor/services/http-call.service.d.ts +48 -0
  47. package/dist/obtservices/angular/lib/vendor/services/logon.service.d.ts +18 -0
  48. package/dist/obtservices/angular/lib/vendor/services/modal-opener.service.d.ts +4 -0
  49. package/dist/obtservices/angular/lib/vendor/services/my-bookings.service.d.ts +7 -0
  50. package/dist/obtservices/angular/lib/vendor/services/route-happy.service.d.ts +6 -0
  51. package/dist/obtservices/angular/lib/vendor/services/search.service.d.ts +47 -0
  52. package/dist/obtservices/angular/lib/vendor/services/storage.service.d.ts +18 -0
  53. package/dist/obtservices/angular/lib/vendor/services/user.service.d.ts +10 -0
  54. package/dist/obtservices/angular/lib/vendor/services/webtoken.service.d.ts +7 -0
  55. package/dist/obtservices/angular/lib/vendor/testers/postcode-validate.tester.d.ts +6 -0
  56. package/dist/obtservices/angular/lib/vendor/testers/validate-mi-free-value.tester.d.ts +6 -0
  57. package/dist/obtservices/angular/lib/vendor/types/graphql.angular.types.d.ts +5915 -0
  58. package/dist/obtservices/angular/lib/vendor/updaters/accept-new-price.updater.d.ts +6 -0
  59. package/dist/obtservices/angular/lib/vendor/updaters/add-item-to-basket.updater.d.ts +6 -0
  60. package/dist/obtservices/angular/lib/vendor/updaters/addUserToBasketItem.d.ts +6 -0
  61. package/dist/obtservices/angular/lib/vendor/updaters/book-basket-updater.d.ts +6 -0
  62. package/dist/obtservices/angular/lib/vendor/updaters/create-basket-updater.d.ts +6 -0
  63. package/dist/obtservices/angular/lib/vendor/updaters/move-basket-item-to-basket.d.ts +6 -0
  64. package/dist/obtservices/angular/lib/vendor/updaters/remove-basket-updater.d.ts +6 -0
  65. package/dist/obtservices/angular/lib/vendor/updaters/remove-item-from-basket.updater.d.ts +6 -0
  66. package/dist/obtservices/angular/lib/vendor/updaters/remove-recent-search.updater.d.ts +6 -0
  67. package/dist/obtservices/angular/lib/vendor/updaters/remove-user-address.updater.d.ts +6 -0
  68. package/dist/obtservices/angular/lib/vendor/updaters/revalidate-basket-updater.d.ts +6 -0
  69. package/dist/obtservices/angular/lib/vendor/updaters/save-recent-search.updater.d.ts +6 -0
  70. package/dist/obtservices/angular/lib/vendor/updaters/save-user-address.updater.d.ts +6 -0
  71. package/dist/obtservices/angular/lib/vendor/updaters/send-basket-for-approval.updater.d.ts +6 -0
  72. package/dist/obtservices/angular/lib/vendor/updaters/set-basket-item-lead-passenger.updater.d.ts +6 -0
  73. package/dist/obtservices/angular/lib/vendor/updaters/set-basket-item-mi-group.d.ts +6 -0
  74. package/dist/obtservices/angular/lib/vendor/updaters/set-basket-item-mi-value-updater.d.ts +6 -0
  75. package/dist/obtservices/angular/lib/vendor/updaters/set-payment-option.updater.d.ts +6 -0
  76. package/dist/obtservices/angular/lib/vendor/updaters/update-basket-notes-updater.d.ts +6 -0
  77. package/dist/obtservices/angular/lib/vendor/updaters/update-basket-title-updater.d.ts +6 -0
  78. package/dist/obtservices/angular/obtservices-angular.d.ts +17 -0
  79. package/dist/obtservices/angular/obtservices-angular.metadata.json +1 -0
  80. package/dist/obtservices/angular/obtservices.module.d.ts +7 -0
  81. package/dist/obtservices/angular/package.json +11 -0
  82. package/dist/obtservices/base/fetchers.d.ts +36 -0
  83. package/dist/obtservices/base/lib/vendor/classes/base-enterprise.d.ts +39 -0
  84. package/dist/obtservices/base/lib/vendor/classes/base-network-call.d.ts +10 -0
  85. package/dist/obtservices/base/lib/vendor/classes/basket-info-mi-details.impl.d.ts +20 -0
  86. package/dist/obtservices/base/lib/vendor/classes/bookable-basket.d.ts +40 -0
  87. package/dist/obtservices/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +138 -0
  88. package/dist/obtservices/base/lib/vendor/classes/carhire-enterprise-search.d.ts +203 -0
  89. package/dist/obtservices/base/lib/vendor/classes/enviroment.d.ts +24 -0
  90. package/dist/obtservices/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +268 -0
  91. package/dist/obtservices/base/lib/vendor/classes/eurostar-search-type.enum.d.ts +4 -0
  92. package/dist/obtservices/base/lib/vendor/classes/event-messenager.d.ts +12 -0
  93. package/dist/obtservices/base/lib/vendor/classes/flight-enterprise-search.d.ts +251 -0
  94. package/dist/obtservices/base/lib/vendor/classes/flight-search-type.enum.d.ts +5 -0
  95. package/dist/obtservices/base/lib/vendor/classes/helpers.d.ts +173 -0
  96. package/dist/obtservices/base/lib/vendor/classes/hotel-enterprise-search.d.ts +176 -0
  97. package/dist/obtservices/base/lib/vendor/classes/irl-enterprise-search.d.ts +139 -0
  98. package/dist/obtservices/base/lib/vendor/classes/limited-cache.class.d.ts +21 -0
  99. package/dist/obtservices/base/lib/vendor/classes/lounges-enterprise-search.d.ts +68 -0
  100. package/dist/obtservices/base/lib/vendor/classes/management-info-and-valid.d.ts +41 -0
  101. package/dist/obtservices/base/lib/vendor/classes/modal-types.enum.d.ts +12 -0
  102. package/dist/obtservices/base/lib/vendor/classes/parking-enterprise-search.d.ts +103 -0
  103. package/dist/obtservices/base/lib/vendor/classes/rail-direction.enum.d.ts +4 -0
  104. package/dist/obtservices/base/lib/vendor/classes/rail-enterprise-search.d.ts +193 -0
  105. package/dist/obtservices/base/lib/vendor/classes/routehappy-request.d.ts +126 -0
  106. package/dist/obtservices/base/lib/vendor/classes/routehappy-response.d.ts +107 -0
  107. package/dist/obtservices/base/lib/vendor/classes/supplementary-booking-info-impl.d.ts +62 -0
  108. package/dist/obtservices/base/lib/vendor/classes/user-favourite.enum.d.ts +12 -0
  109. package/dist/obtservices/base/lib/vendor/classes/validator.checker.d.ts +6 -0
  110. package/dist/obtservices/base/lib/vendor/fetchers/basket-fetcher.d.ts +20 -0
  111. package/dist/obtservices/base/lib/vendor/fetchers/cabhire-quote-fetcher.d.ts +23 -0
  112. package/dist/obtservices/base/lib/vendor/fetchers/carhire-availability-detail.fetcher.d.ts +20 -0
  113. package/dist/obtservices/base/lib/vendor/fetchers/carhire-quote-fetcher.d.ts +23 -0
  114. package/dist/obtservices/base/lib/vendor/fetchers/conferma-office-names.fetcher.d.ts +21 -0
  115. package/dist/obtservices/base/lib/vendor/fetchers/conferma-quicklist.fetcher.d.ts +23 -0
  116. package/dist/obtservices/base/lib/vendor/fetchers/eurostar-quote.fetcher.d.ts +23 -0
  117. package/dist/obtservices/base/lib/vendor/fetchers/flight-quote.fetcher.d.ts +23 -0
  118. package/dist/obtservices/base/lib/vendor/fetchers/get-rail-cards.fetcher.d.ts +21 -0
  119. package/dist/obtservices/base/lib/vendor/fetchers/get-rail-station.fetcher.d.ts +21 -0
  120. package/dist/obtservices/base/lib/vendor/fetchers/get-risk-alerts.fetcher.d.ts +21 -0
  121. package/dist/obtservices/base/lib/vendor/fetchers/get-user-company-offices.fetcher.d.ts +21 -0
  122. package/dist/obtservices/base/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.d.ts +20 -0
  123. package/dist/obtservices/base/lib/vendor/fetchers/get-user-recent-searches.fetcher.d.ts +21 -0
  124. package/dist/obtservices/base/lib/vendor/fetchers/get-users-baskets-fetcher.d.ts +21 -0
  125. package/dist/obtservices/base/lib/vendor/fetchers/getMiAutoSugestions.fetcher.d.ts +21 -0
  126. package/dist/obtservices/base/lib/vendor/fetchers/hotel-avaliability-fetcher.d.ts +24 -0
  127. package/dist/obtservices/base/lib/vendor/fetchers/hotel-quote-fetcher.d.ts +23 -0
  128. package/dist/obtservices/base/lib/vendor/fetchers/irl-quote-fetcher.d.ts +23 -0
  129. package/dist/obtservices/base/lib/vendor/fetchers/list-fetchable-enterprise.d.ts +20 -0
  130. package/dist/obtservices/base/lib/vendor/fetchers/lounge-quote.fetcher.d.ts +23 -0
  131. package/dist/obtservices/base/lib/vendor/fetchers/object-fetchable-enterprise.d.ts +11 -0
  132. package/dist/obtservices/base/lib/vendor/fetchers/parking-quote-fetcher.d.ts +23 -0
  133. package/dist/obtservices/base/lib/vendor/fetchers/rail-quote-fetcher.d.ts +23 -0
  134. package/dist/obtservices/base/lib/vendor/fetchers/search-airlines.fetcher.d.ts +20 -0
  135. package/dist/obtservices/base/lib/vendor/fetchers/search-airports-fetcher.d.ts +20 -0
  136. package/dist/obtservices/base/lib/vendor/fetchers/search-cities.fetcher.d.ts +21 -0
  137. package/dist/obtservices/base/lib/vendor/fetchers/search-conferma-cities.fetcher.d.ts +20 -0
  138. package/dist/obtservices/base/lib/vendor/fetchers/search-depots.fetcher.d.ts +20 -0
  139. package/dist/obtservices/base/lib/vendor/fetchers/search-hotel-chains.fetcher.d.ts +21 -0
  140. package/dist/obtservices/base/lib/vendor/fetchers/search-postcodes.fetcher.d.ts +21 -0
  141. package/dist/obtservices/base/lib/vendor/fetchers/search-rail-stations.fetcher.d.ts +21 -0
  142. package/dist/obtservices/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.d.ts +21 -0
  143. package/dist/obtservices/base/lib/vendor/fetchers/user-addresses.fetcher.d.ts +21 -0
  144. package/dist/obtservices/base/lib/vendor/fetchers/user-fetcher.d.ts +20 -0
  145. package/dist/obtservices/base/lib/vendor/fetchers/user-message.fetcher.d.ts +21 -0
  146. package/dist/obtservices/base/lib/vendor/fetchers/user-products-fetcher.d.ts +21 -0
  147. package/dist/obtservices/base/lib/vendor/fetchers/user-ui-configs-fetcher.d.ts +23 -0
  148. package/dist/obtservices/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +133 -0
  149. package/dist/obtservices/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +99 -0
  150. package/dist/obtservices/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +64 -0
  151. package/dist/obtservices/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +124 -0
  152. package/dist/obtservices/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +123 -0
  153. package/dist/obtservices/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +192 -0
  154. package/dist/obtservices/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +45 -0
  155. package/dist/obtservices/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +36 -0
  156. package/dist/obtservices/base/lib/vendor/interfaces/Imybookings.service.d.ts +24 -0
  157. package/dist/obtservices/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +58 -0
  158. package/dist/obtservices/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +110 -0
  159. package/dist/obtservices/base/lib/vendor/interfaces/Isearch.service.d.ts +101 -0
  160. package/dist/obtservices/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.d.ts +42 -0
  161. package/dist/obtservices/base/lib/vendor/interfaces/Iuser.service.d.ts +59 -0
  162. package/dist/obtservices/base/lib/vendor/interfaces/car-hire-classes.interface.d.ts +7 -0
  163. package/dist/obtservices/base/lib/vendor/interfaces/car-hire-filters.interface.d.ts +10 -0
  164. package/dist/obtservices/base/lib/vendor/interfaces/car-hire-sort.interface.d.ts +4 -0
  165. package/dist/obtservices/base/lib/vendor/interfaces/cheapest-price.d.ts +4 -0
  166. package/dist/obtservices/base/lib/vendor/interfaces/code-name.d.ts +4 -0
  167. package/dist/obtservices/base/lib/vendor/interfaces/flight-filters.interface.d.ts +29 -0
  168. package/dist/obtservices/base/lib/vendor/interfaces/flight-multi-destination.interface.d.ts +7 -0
  169. package/dist/obtservices/base/lib/vendor/interfaces/rail-airport-express-stations.interface.d.ts +4 -0
  170. package/dist/obtservices/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +69 -0
  171. package/dist/obtservices/base/lib/vendor/interfaces/rail-journey-leg.interface.d.ts +6 -0
  172. package/dist/obtservices/base/lib/vendor/interfaces/rail-recent-search-args.interface.d.ts +19 -0
  173. package/dist/obtservices/base/lib/vendor/interfaces/rail-selected-ticket.interface.d.ts +10 -0
  174. package/dist/obtservices/base/lib/vendor/interfaces/rail-ticket-group.interface.d.ts +26 -0
  175. package/dist/obtservices/base/lib/vendor/interfaces/rail-ticket-groups.interface.d.ts +4 -0
  176. package/dist/obtservices/base/lib/vendor/interfaces/search-objects.interface.d.ts +16 -0
  177. package/dist/obtservices/base/lib/vendor/interfaces/select-filter.interface.d.ts +5 -0
  178. package/dist/obtservices/base/lib/vendor/interfaces/user.data.d.ts +21 -0
  179. package/dist/obtservices/base/lib/vendor/interfaces/value-display.d.ts +4 -0
  180. package/dist/obtservices/base/lib/vendor/models/login.model.d.ts +52 -0
  181. package/dist/obtservices/base/lib/vendor/models/regexp.model.d.ts +10 -0
  182. package/dist/obtservices/base/lib/vendor/models/traveller.object.d.ts +22 -0
  183. package/dist/obtservices/base/lib/vendor/services/enterprise-basket.service.d.ts +177 -0
  184. package/dist/obtservices/base/lib/vendor/services/hotel-avallibility.service.d.ts +31 -0
  185. package/dist/obtservices/base/lib/vendor/services/http-call.service.d.ts +17 -0
  186. package/dist/obtservices/base/lib/vendor/services/logon.service.d.ts +39 -0
  187. package/dist/obtservices/base/lib/vendor/services/modal-opener.service.d.ts +13 -0
  188. package/dist/obtservices/base/lib/vendor/services/my-bookings.service.d.ts +31 -0
  189. package/dist/obtservices/base/lib/vendor/services/routehappy.service.d.ts +47 -0
  190. package/dist/obtservices/base/lib/vendor/services/search.service.d.ts +236 -0
  191. package/dist/obtservices/base/lib/vendor/services/storage.service.d.ts +9 -0
  192. package/dist/obtservices/base/lib/vendor/services/url.service.d.ts +10 -0
  193. package/dist/obtservices/base/lib/vendor/services/user.service.d.ts +62 -0
  194. package/dist/obtservices/base/lib/vendor/services/webtoken.service.d.ts +20 -0
  195. package/dist/obtservices/base/lib/vendor/testers/base.tester.d.ts +11 -0
  196. package/dist/obtservices/base/lib/vendor/testers/postcode-validate.tester.d.ts +17 -0
  197. package/dist/obtservices/base/lib/vendor/testers/validate-mi-free-value.tester.d.ts +17 -0
  198. package/dist/obtservices/base/lib/vendor/types/graphql.types.d.ts +5597 -0
  199. package/dist/obtservices/base/lib/vendor/types/types.d.ts +444 -0
  200. package/dist/obtservices/base/lib/vendor/updaters/accept-new-price.updater.d.ts +20 -0
  201. package/dist/obtservices/base/lib/vendor/updaters/add-item-to-basket.updater.d.ts +20 -0
  202. package/dist/obtservices/base/lib/vendor/updaters/addUserToBasketItem.d.ts +20 -0
  203. package/dist/obtservices/base/lib/vendor/updaters/book-basket-updater.d.ts +20 -0
  204. package/dist/obtservices/base/lib/vendor/updaters/create-basket-updater.d.ts +20 -0
  205. package/dist/obtservices/base/lib/vendor/updaters/move-basket-item-to-basket.d.ts +20 -0
  206. package/dist/obtservices/base/lib/vendor/updaters/object-updater-enterprise.d.ts +11 -0
  207. package/dist/obtservices/base/lib/vendor/updaters/remove-basket-updater.d.ts +19 -0
  208. package/dist/obtservices/base/lib/vendor/updaters/remove-item-from-basket.updater.d.ts +20 -0
  209. package/dist/obtservices/base/lib/vendor/updaters/remove-recent-search-updater.d.ts +19 -0
  210. package/dist/obtservices/base/lib/vendor/updaters/remove-user-address-updater.d.ts +19 -0
  211. package/dist/obtservices/base/lib/vendor/updaters/revalidate-basket-updater.d.ts +20 -0
  212. package/dist/obtservices/base/lib/vendor/updaters/save-recent-search-updater.d.ts +20 -0
  213. package/dist/obtservices/base/lib/vendor/updaters/save-user-address.updater.d.ts +20 -0
  214. package/dist/obtservices/base/lib/vendor/updaters/send-basket-for-approval.updater.d.ts +20 -0
  215. package/dist/obtservices/base/lib/vendor/updaters/set-basket-item-lead-passenger.updater.d.ts +20 -0
  216. package/dist/obtservices/base/lib/vendor/updaters/set-basket-item-mi-group.d.ts +20 -0
  217. package/dist/obtservices/base/lib/vendor/updaters/set-basket-item-mi-value-updater.d.ts +20 -0
  218. package/dist/obtservices/base/lib/vendor/updaters/set-basket-item-paymenr-option.updater.d.ts +20 -0
  219. package/dist/obtservices/base/lib/vendor/updaters/update-basket-notes-updater.d.ts +20 -0
  220. package/dist/obtservices/base/lib/vendor/updaters/update-basket-title-updater.d.ts +20 -0
  221. package/dist/obtservices/base/obtservices-base.d.ts +9 -0
  222. package/dist/obtservices/base/obtservices-base.metadata.json +1 -0
  223. package/dist/obtservices/base/package.json +11 -0
  224. package/dist/obtservices/bundles/obtservices-angular.umd.js +32033 -0
  225. package/dist/obtservices/bundles/obtservices-angular.umd.js.map +1 -0
  226. package/dist/obtservices/bundles/obtservices-angular.umd.min.js +2 -0
  227. package/dist/obtservices/bundles/obtservices-angular.umd.min.js.map +1 -0
  228. package/dist/obtservices/bundles/obtservices-base.umd.js +18609 -0
  229. package/dist/obtservices/bundles/obtservices-base.umd.js.map +1 -0
  230. package/dist/obtservices/bundles/obtservices-base.umd.min.js +16 -0
  231. package/dist/obtservices/bundles/obtservices-base.umd.min.js.map +1 -0
  232. package/dist/obtservices/bundles/obtservices.umd.js +18 -0
  233. package/dist/obtservices/bundles/obtservices.umd.js.map +1 -0
  234. package/dist/obtservices/bundles/obtservices.umd.min.js +2 -0
  235. package/dist/obtservices/bundles/obtservices.umd.min.js.map +1 -0
  236. package/dist/obtservices/esm2015/angular/classes.js +4 -0
  237. package/dist/obtservices/esm2015/angular/components/basket-panel.js +113 -0
  238. package/dist/obtservices/esm2015/angular/components/with-component.js +26 -0
  239. package/dist/obtservices/esm2015/angular/components.js +3 -0
  240. package/dist/obtservices/esm2015/angular/data.js +5 -0
  241. package/dist/obtservices/esm2015/angular/fetchers.js +33 -0
  242. package/dist/obtservices/esm2015/angular/lib/vendor/classes/environment.js +10 -0
  243. package/dist/obtservices/esm2015/angular/lib/vendor/classes/event-messenager.js +16 -0
  244. package/dist/obtservices/esm2015/angular/lib/vendor/classes/helpers.js +81 -0
  245. package/dist/obtservices/esm2015/angular/lib/vendor/data/airports.data.json +5508 -0
  246. package/dist/obtservices/esm2015/angular/lib/vendor/data/flight-booking.data.json +136 -0
  247. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/basket-fetcher.js +22 -0
  248. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/cabhire-quote-fetcher.js +25 -0
  249. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/carhire-availability-detail.fetcher.js +25 -0
  250. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/carhire-quote-fetcher.js +25 -0
  251. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/conferma-office-names.fetcher.js +25 -0
  252. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/conferma-quicklist.fetcher.js +25 -0
  253. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/eurostar-quote.fetcher.js +25 -0
  254. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/flight-quote.fetcher.js +25 -0
  255. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/get-rail-cards.fetcher.js +25 -0
  256. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/get-rail-station.fetcher.js +25 -0
  257. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/get-risk-alerts.fetcher.js +25 -0
  258. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/get-user-company-offices.fetcher.js +25 -0
  259. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.js +25 -0
  260. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/get-user-recent-searches.fetcher.js +25 -0
  261. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/get-users-baskets-fetcher.js +25 -0
  262. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/getMiAutoSugestions.fetcher.js +25 -0
  263. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/hotel-avaliability-fetcher.js +25 -0
  264. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/hotel-quote-fetcher.js +25 -0
  265. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/irl-quote-fetcher.js +25 -0
  266. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/lounge-quote.fetcher.js +25 -0
  267. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/parking-quote-fetcher.js +25 -0
  268. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/rail-quote-fetcher.js +25 -0
  269. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-airlines-fetcher.js +22 -0
  270. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-airports-fetcher.js +22 -0
  271. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-cities.fetcher.js +25 -0
  272. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-conferma-cities.fetcher.js +22 -0
  273. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-depots.fetcher.js +25 -0
  274. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-hotel-chains.fetcher.js +25 -0
  275. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-postcodes.fetcher.js +25 -0
  276. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-rail-stations.fetcher.js +25 -0
  277. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/search-users-can-book-for-fetcher.js +25 -0
  278. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/user-addresses.fetcher.js +25 -0
  279. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/user-fetcher.js +22 -0
  280. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/user-message.fetcher.js +25 -0
  281. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/user-products-fetcher.js +25 -0
  282. package/dist/obtservices/esm2015/angular/lib/vendor/fetchers/user-ui-configs-fetcher.js +25 -0
  283. package/dist/obtservices/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +91 -0
  284. package/dist/obtservices/esm2015/angular/lib/vendor/services/hotel-avallibility.service.js +28 -0
  285. package/dist/obtservices/esm2015/angular/lib/vendor/services/http-call.service.js +220 -0
  286. package/dist/obtservices/esm2015/angular/lib/vendor/services/logon.service.js +41 -0
  287. package/dist/obtservices/esm2015/angular/lib/vendor/services/modal-opener.service.js +15 -0
  288. package/dist/obtservices/esm2015/angular/lib/vendor/services/my-bookings.service.js +22 -0
  289. package/dist/obtservices/esm2015/angular/lib/vendor/services/route-happy.service.js +22 -0
  290. package/dist/obtservices/esm2015/angular/lib/vendor/services/search.service.js +142 -0
  291. package/dist/obtservices/esm2015/angular/lib/vendor/services/storage.service.js +79 -0
  292. package/dist/obtservices/esm2015/angular/lib/vendor/services/user.service.js +31 -0
  293. package/dist/obtservices/esm2015/angular/lib/vendor/services/webtoken.service.js +59 -0
  294. package/dist/obtservices/esm2015/angular/lib/vendor/testers/postcode-validate.tester.js +22 -0
  295. package/dist/obtservices/esm2015/angular/lib/vendor/testers/validate-mi-free-value.tester.js +22 -0
  296. package/dist/obtservices/esm2015/angular/lib/vendor/types/graphql.angular.types.js +5662 -0
  297. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/accept-new-price.updater.js +22 -0
  298. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/add-item-to-basket.updater.js +22 -0
  299. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/addUserToBasketItem.js +22 -0
  300. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/book-basket-updater.js +22 -0
  301. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/create-basket-updater.js +22 -0
  302. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/move-basket-item-to-basket.js +22 -0
  303. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/remove-basket-updater.js +22 -0
  304. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/remove-item-from-basket.updater.js +22 -0
  305. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/remove-recent-search.updater.js +22 -0
  306. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/remove-user-address.updater.js +22 -0
  307. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/revalidate-basket-updater.js +22 -0
  308. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/save-recent-search.updater.js +22 -0
  309. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/save-user-address.updater.js +22 -0
  310. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/send-basket-for-approval.updater.js +22 -0
  311. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/set-basket-item-lead-passenger.updater.js +22 -0
  312. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/set-basket-item-mi-group.js +22 -0
  313. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/set-basket-item-mi-value-updater.js +22 -0
  314. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/set-payment-option.updater.js +22 -0
  315. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/update-basket-notes-updater.js +22 -0
  316. package/dist/obtservices/esm2015/angular/lib/vendor/updaters/update-basket-title-updater.js +22 -0
  317. package/dist/obtservices/esm2015/angular/obtservices-angular.js +18 -0
  318. package/dist/obtservices/esm2015/angular/obtservices.module.js +128 -0
  319. package/dist/obtservices/esm2015/angular/public_api.js +9 -0
  320. package/dist/obtservices/esm2015/angular/services.js +12 -0
  321. package/dist/obtservices/esm2015/angular/types.js +2 -0
  322. package/dist/obtservices/esm2015/angular/updaters.js +14 -0
  323. package/dist/obtservices/esm2015/base/classes.js +28 -0
  324. package/dist/obtservices/esm2015/base/fetchers.js +37 -0
  325. package/dist/obtservices/esm2015/base/interfaces.js +30 -0
  326. package/dist/obtservices/esm2015/base/lib/vendor/classes/base-enterprise.js +78 -0
  327. package/dist/obtservices/esm2015/base/lib/vendor/classes/base-network-call.js +24 -0
  328. package/dist/obtservices/esm2015/base/lib/vendor/classes/basket-info-mi-details.impl.js +35 -0
  329. package/dist/obtservices/esm2015/base/lib/vendor/classes/bookable-basket.js +237 -0
  330. package/dist/obtservices/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +696 -0
  331. package/dist/obtservices/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +1204 -0
  332. package/dist/obtservices/esm2015/base/lib/vendor/classes/enviroment.js +12 -0
  333. package/dist/obtservices/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +1462 -0
  334. package/dist/obtservices/esm2015/base/lib/vendor/classes/eurostar-search-type.enum.js +6 -0
  335. package/dist/obtservices/esm2015/base/lib/vendor/classes/event-messenager.js +17 -0
  336. package/dist/obtservices/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +1640 -0
  337. package/dist/obtservices/esm2015/base/lib/vendor/classes/flight-search-type.enum.js +7 -0
  338. package/dist/obtservices/esm2015/base/lib/vendor/classes/helpers.js +978 -0
  339. package/dist/obtservices/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +1022 -0
  340. package/dist/obtservices/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +1117 -0
  341. package/dist/obtservices/esm2015/base/lib/vendor/classes/limited-cache.class.js +64 -0
  342. package/dist/obtservices/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +323 -0
  343. package/dist/obtservices/esm2015/base/lib/vendor/classes/management-info-and-valid.js +174 -0
  344. package/dist/obtservices/esm2015/base/lib/vendor/classes/modal-types.enum.js +22 -0
  345. package/dist/obtservices/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +397 -0
  346. package/dist/obtservices/esm2015/base/lib/vendor/classes/rail-direction.enum.js +6 -0
  347. package/dist/obtservices/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +1324 -0
  348. package/dist/obtservices/esm2015/base/lib/vendor/classes/routehappy-request.js +2 -0
  349. package/dist/obtservices/esm2015/base/lib/vendor/classes/routehappy-response.js +8 -0
  350. package/dist/obtservices/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +250 -0
  351. package/dist/obtservices/esm2015/base/lib/vendor/classes/user-favourite.enum.js +15 -0
  352. package/dist/obtservices/esm2015/base/lib/vendor/classes/validator.checker.js +4 -0
  353. package/dist/obtservices/esm2015/base/lib/vendor/data/countries.json +1212 -0
  354. package/dist/obtservices/esm2015/base/lib/vendor/data/euro-stations.json +30 -0
  355. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/basket-fetcher.js +11 -0
  356. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/cabhire-quote-fetcher.js +11 -0
  357. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/carhire-availability-detail.fetcher.js +10 -0
  358. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/carhire-quote-fetcher.js +11 -0
  359. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/conferma-office-names.fetcher.js +11 -0
  360. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/conferma-quicklist.fetcher.js +11 -0
  361. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/eurostar-quote.fetcher.js +11 -0
  362. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/flight-quote.fetcher.js +11 -0
  363. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/get-rail-cards.fetcher.js +11 -0
  364. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/get-rail-station.fetcher.js +11 -0
  365. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/get-risk-alerts.fetcher.js +11 -0
  366. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/get-user-company-offices.fetcher.js +11 -0
  367. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.js +10 -0
  368. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/get-user-recent-searches.fetcher.js +10 -0
  369. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/get-users-baskets-fetcher.js +10 -0
  370. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/getMiAutoSugestions.fetcher.js +10 -0
  371. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/hotel-avaliability-fetcher.js +22 -0
  372. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/hotel-quote-fetcher.js +11 -0
  373. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/irl-quote-fetcher.js +11 -0
  374. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/list-fetchable-enterprise.js +27 -0
  375. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/lounge-quote.fetcher.js +11 -0
  376. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/object-fetchable-enterprise.js +11 -0
  377. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/parking-quote-fetcher.js +11 -0
  378. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/rail-quote-fetcher.js +11 -0
  379. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-airlines.fetcher.js +11 -0
  380. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-airports-fetcher.js +10 -0
  381. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-cities.fetcher.js +11 -0
  382. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-conferma-cities.fetcher.js +11 -0
  383. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-depots.fetcher.js +10 -0
  384. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-hotel-chains.fetcher.js +11 -0
  385. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-postcodes.fetcher.js +11 -0
  386. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-rail-stations.fetcher.js +11 -0
  387. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.js +11 -0
  388. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/user-addresses.fetcher.js +11 -0
  389. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/user-fetcher.js +10 -0
  390. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/user-message.fetcher.js +11 -0
  391. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/user-products-fetcher.js +11 -0
  392. package/dist/obtservices/esm2015/base/lib/vendor/fetchers/user-ui-configs-fetcher.js +11 -0
  393. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +17 -0
  394. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +2 -0
  395. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +2 -0
  396. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +2 -0
  397. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +2 -0
  398. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +18 -0
  399. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +2 -0
  400. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Ilounges-enterprise-search.js +2 -0
  401. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Imybookings.service.js +2 -0
  402. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Iparking-enterprise-search.js +2 -0
  403. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Irail-enterprise-search.js +2 -0
  404. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Isearch.service.js +2 -0
  405. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.js +2 -0
  406. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/Iuser.service.js +2 -0
  407. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/car-hire-classes.interface.js +2 -0
  408. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/car-hire-filters.interface.js +2 -0
  409. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/car-hire-sort.interface.js +2 -0
  410. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/cheapest-price.js +2 -0
  411. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/code-name.js +2 -0
  412. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/flight-filters.interface.js +2 -0
  413. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/flight-multi-destination.interface.js +2 -0
  414. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/rail-airport-express-stations.interface.js +2 -0
  415. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/rail-basket-item.interface.js +2 -0
  416. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/rail-journey-leg.interface.js +2 -0
  417. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/rail-recent-search-args.interface.js +2 -0
  418. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/rail-selected-ticket.interface.js +2 -0
  419. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/rail-ticket-group.interface.js +2 -0
  420. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/rail-ticket-groups.interface.js +2 -0
  421. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/search-objects.interface.js +2 -0
  422. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/select-filter.interface.js +2 -0
  423. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/user.data.js +2 -0
  424. package/dist/obtservices/esm2015/base/lib/vendor/interfaces/value-display.js +2 -0
  425. package/dist/obtservices/esm2015/base/lib/vendor/models/login.model.js +71 -0
  426. package/dist/obtservices/esm2015/base/lib/vendor/models/regexp.model.js +13 -0
  427. package/dist/obtservices/esm2015/base/lib/vendor/models/traveller.object.js +38 -0
  428. package/dist/obtservices/esm2015/base/lib/vendor/services/enterprise-basket.service.js +669 -0
  429. package/dist/obtservices/esm2015/base/lib/vendor/services/hotel-avallibility.service.js +165 -0
  430. package/dist/obtservices/esm2015/base/lib/vendor/services/http-call.service.js +16 -0
  431. package/dist/obtservices/esm2015/base/lib/vendor/services/logon.service.js +177 -0
  432. package/dist/obtservices/esm2015/base/lib/vendor/services/modal-opener.service.js +20 -0
  433. package/dist/obtservices/esm2015/base/lib/vendor/services/my-bookings.service.js +124 -0
  434. package/dist/obtservices/esm2015/base/lib/vendor/services/routehappy.service.js +196 -0
  435. package/dist/obtservices/esm2015/base/lib/vendor/services/search.service.js +1281 -0
  436. package/dist/obtservices/esm2015/base/lib/vendor/services/storage.service.js +3 -0
  437. package/dist/obtservices/esm2015/base/lib/vendor/services/url.service.js +12 -0
  438. package/dist/obtservices/esm2015/base/lib/vendor/services/user.service.js +223 -0
  439. package/dist/obtservices/esm2015/base/lib/vendor/services/webtoken.service.js +56 -0
  440. package/dist/obtservices/esm2015/base/lib/vendor/testers/base.tester.js +11 -0
  441. package/dist/obtservices/esm2015/base/lib/vendor/testers/postcode-validate.tester.js +10 -0
  442. package/dist/obtservices/esm2015/base/lib/vendor/testers/validate-mi-free-value.tester.js +10 -0
  443. package/dist/obtservices/esm2015/base/lib/vendor/types/graphql.types.js +456 -0
  444. package/dist/obtservices/esm2015/base/lib/vendor/types/types.js +161 -0
  445. package/dist/obtservices/esm2015/base/lib/vendor/updaters/accept-new-price.updater.js +10 -0
  446. package/dist/obtservices/esm2015/base/lib/vendor/updaters/add-item-to-basket.updater.js +10 -0
  447. package/dist/obtservices/esm2015/base/lib/vendor/updaters/addUserToBasketItem.js +10 -0
  448. package/dist/obtservices/esm2015/base/lib/vendor/updaters/book-basket-updater.js +11 -0
  449. package/dist/obtservices/esm2015/base/lib/vendor/updaters/create-basket-updater.js +11 -0
  450. package/dist/obtservices/esm2015/base/lib/vendor/updaters/move-basket-item-to-basket.js +10 -0
  451. package/dist/obtservices/esm2015/base/lib/vendor/updaters/object-updater-enterprise.js +11 -0
  452. package/dist/obtservices/esm2015/base/lib/vendor/updaters/remove-basket-updater.js +11 -0
  453. package/dist/obtservices/esm2015/base/lib/vendor/updaters/remove-item-from-basket.updater.js +10 -0
  454. package/dist/obtservices/esm2015/base/lib/vendor/updaters/remove-recent-search-updater.js +11 -0
  455. package/dist/obtservices/esm2015/base/lib/vendor/updaters/remove-user-address-updater.js +11 -0
  456. package/dist/obtservices/esm2015/base/lib/vendor/updaters/revalidate-basket-updater.js +10 -0
  457. package/dist/obtservices/esm2015/base/lib/vendor/updaters/save-recent-search-updater.js +11 -0
  458. package/dist/obtservices/esm2015/base/lib/vendor/updaters/save-user-address.updater.js +10 -0
  459. package/dist/obtservices/esm2015/base/lib/vendor/updaters/send-basket-for-approval.updater.js +10 -0
  460. package/dist/obtservices/esm2015/base/lib/vendor/updaters/set-basket-item-lead-passenger.updater.js +10 -0
  461. package/dist/obtservices/esm2015/base/lib/vendor/updaters/set-basket-item-mi-group.js +10 -0
  462. package/dist/obtservices/esm2015/base/lib/vendor/updaters/set-basket-item-mi-value-updater.js +10 -0
  463. package/dist/obtservices/esm2015/base/lib/vendor/updaters/set-basket-item-paymenr-option.updater.js +10 -0
  464. package/dist/obtservices/esm2015/base/lib/vendor/updaters/update-basket-notes-updater.js +10 -0
  465. package/dist/obtservices/esm2015/base/lib/vendor/updaters/update-basket-title-updater.js +10 -0
  466. package/dist/obtservices/esm2015/base/models.js +4 -0
  467. package/dist/obtservices/esm2015/base/obtservices-base.js +9 -0
  468. package/dist/obtservices/esm2015/base/public_api.js +9 -0
  469. package/dist/obtservices/esm2015/base/services.js +13 -0
  470. package/dist/obtservices/esm2015/base/testers.js +3 -0
  471. package/dist/obtservices/esm2015/base/types.js +2 -0
  472. package/dist/obtservices/esm2015/base/updaters.js +21 -0
  473. package/dist/obtservices/esm2015/obtservices.js +5 -0
  474. package/dist/obtservices/esm2015/public_api.js +2 -0
  475. package/dist/obtservices/fesm2015/obtservices-angular.js +35267 -0
  476. package/dist/obtservices/fesm2015/obtservices-angular.js.map +1 -0
  477. package/dist/obtservices/fesm2015/obtservices-base.js +16573 -0
  478. package/dist/obtservices/fesm2015/obtservices-base.js.map +1 -0
  479. package/dist/obtservices/fesm2015/obtservices.js +8 -0
  480. package/dist/obtservices/fesm2015/obtservices.js.map +1 -0
  481. package/dist/obtservices/obtservices.d.ts +4 -0
  482. package/dist/obtservices/obtservices.metadata.json +1 -0
  483. package/dist/obtservices/package.json +23 -0
  484. package/dist/obtservices/public_api.d.ts +1 -0
  485. package/dist/obtservices/tsconfig.lib.tsbuildinfo +3 -0
  486. package/package.json +1 -1
  487. package/projects/obtservices/angular/package.json +0 -3
  488. package/projects/obtservices/angular/src/components/basket-panel.ts +0 -139
  489. package/projects/obtservices/angular/src/components/with-component.ts +0 -40
  490. package/projects/obtservices/angular/src/data.ts +0 -5
  491. package/projects/obtservices/angular/src/fetchers.ts +0 -32
  492. package/projects/obtservices/angular/src/lib/vendor/classes/environment.ts +0 -5
  493. package/projects/obtservices/angular/src/lib/vendor/classes/event-messenager.ts +0 -11
  494. package/projects/obtservices/angular/src/lib/vendor/classes/helpers.ts +0 -87
  495. package/projects/obtservices/angular/src/lib/vendor/data/airports.data.json +0 -5508
  496. package/projects/obtservices/angular/src/lib/vendor/data/animations.ts +0 -38
  497. package/projects/obtservices/angular/src/lib/vendor/data/booking-expected-responses.json +0 -100
  498. package/projects/obtservices/angular/src/lib/vendor/data/cities.data.json +0 -31499
  499. package/projects/obtservices/angular/src/lib/vendor/data/countries.json +0 -1212
  500. package/projects/obtservices/angular/src/lib/vendor/data/flight-booking.data.json +0 -136
  501. package/projects/obtservices/angular/src/lib/vendor/data/postcodes1.json +0 -194
  502. package/projects/obtservices/angular/src/lib/vendor/data/rail_addresses.json +0 -2524
  503. package/projects/obtservices/angular/src/lib/vendor/fetchers/basket-fetcher.ts +0 -14
  504. package/projects/obtservices/angular/src/lib/vendor/fetchers/cabhire-quote-fetcher.ts +0 -15
  505. package/projects/obtservices/angular/src/lib/vendor/fetchers/carhire-availability-detail.fetcher.ts +0 -17
  506. package/projects/obtservices/angular/src/lib/vendor/fetchers/carhire-quote-fetcher.ts +0 -16
  507. package/projects/obtservices/angular/src/lib/vendor/fetchers/conferma-office-names.fetcher.ts +0 -16
  508. package/projects/obtservices/angular/src/lib/vendor/fetchers/conferma-quicklist.fetcher.ts +0 -16
  509. package/projects/obtservices/angular/src/lib/vendor/fetchers/eurostar-quote.fetcher.ts +0 -16
  510. package/projects/obtservices/angular/src/lib/vendor/fetchers/flight-quote.fetcher.ts +0 -16
  511. package/projects/obtservices/angular/src/lib/vendor/fetchers/get-rail-cards.fetcher.ts +0 -16
  512. package/projects/obtservices/angular/src/lib/vendor/fetchers/get-rail-station.fetcher.ts +0 -16
  513. package/projects/obtservices/angular/src/lib/vendor/fetchers/get-risk-alerts.fetcher.ts +0 -18
  514. package/projects/obtservices/angular/src/lib/vendor/fetchers/get-user-company-offices.fetcher.ts +0 -16
  515. package/projects/obtservices/angular/src/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.ts +0 -16
  516. package/projects/obtservices/angular/src/lib/vendor/fetchers/get-user-recent-searches.fetcher.ts +0 -16
  517. package/projects/obtservices/angular/src/lib/vendor/fetchers/get-users-baskets-fetcher.ts +0 -16
  518. package/projects/obtservices/angular/src/lib/vendor/fetchers/getMiAutoSugestions.fetcher.ts +0 -16
  519. package/projects/obtservices/angular/src/lib/vendor/fetchers/hotel-avaliability-fetcher.ts +0 -17
  520. package/projects/obtservices/angular/src/lib/vendor/fetchers/hotel-quote-fetcher.ts +0 -16
  521. package/projects/obtservices/angular/src/lib/vendor/fetchers/irl-quote-fetcher.ts +0 -16
  522. package/projects/obtservices/angular/src/lib/vendor/fetchers/lounge-quote.fetcher.ts +0 -16
  523. package/projects/obtservices/angular/src/lib/vendor/fetchers/parking-quote-fetcher.ts +0 -16
  524. package/projects/obtservices/angular/src/lib/vendor/fetchers/rail-quote-fetcher.ts +0 -16
  525. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-airlines-fetcher.ts +0 -14
  526. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-airports-fetcher.ts +0 -14
  527. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-cities.fetcher.ts +0 -16
  528. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-conferma-cities.fetcher.ts +0 -14
  529. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-depots.fetcher.ts +0 -18
  530. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-hotel-chains.fetcher.ts +0 -16
  531. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-postcodes.fetcher.ts +0 -16
  532. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-rail-stations.fetcher.ts +0 -16
  533. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-users-can-book-for-fetcher.ts +0 -16
  534. package/projects/obtservices/angular/src/lib/vendor/fetchers/user-addresses.fetcher.ts +0 -16
  535. package/projects/obtservices/angular/src/lib/vendor/fetchers/user-fetcher.ts +0 -14
  536. package/projects/obtservices/angular/src/lib/vendor/fetchers/user-message.fetcher.ts +0 -16
  537. package/projects/obtservices/angular/src/lib/vendor/fetchers/user-products-fetcher.ts +0 -16
  538. package/projects/obtservices/angular/src/lib/vendor/fetchers/user-ui-configs-fetcher.ts +0 -16
  539. package/projects/obtservices/angular/src/lib/vendor/services/enterprise-basket.service.ts +0 -133
  540. package/projects/obtservices/angular/src/lib/vendor/services/hotel-avallibility.service.ts +0 -19
  541. package/projects/obtservices/angular/src/lib/vendor/services/http-call.service.ts +0 -252
  542. package/projects/obtservices/angular/src/lib/vendor/services/logon.service.ts +0 -40
  543. package/projects/obtservices/angular/src/lib/vendor/services/modal-opener.service.ts +0 -9
  544. package/projects/obtservices/angular/src/lib/vendor/services/my-bookings.service.ts +0 -21
  545. package/projects/obtservices/angular/src/lib/vendor/services/route-happy.service.ts +0 -11
  546. package/projects/obtservices/angular/src/lib/vendor/services/search.service.ts +0 -213
  547. package/projects/obtservices/angular/src/lib/vendor/services/storage.service.ts +0 -82
  548. package/projects/obtservices/angular/src/lib/vendor/services/user.service.ts +0 -36
  549. package/projects/obtservices/angular/src/lib/vendor/services/webtoken.service.ts +0 -62
  550. package/projects/obtservices/angular/src/lib/vendor/testers/postcode-validate.tester.ts +0 -14
  551. package/projects/obtservices/angular/src/lib/vendor/testers/validate-mi-free-value.tester.ts +0 -14
  552. package/projects/obtservices/angular/src/lib/vendor/types/graphql.angular.types.ts +0 -11081
  553. package/projects/obtservices/angular/src/lib/vendor/updaters/accept-new-price.updater.ts +0 -14
  554. package/projects/obtservices/angular/src/lib/vendor/updaters/add-item-to-basket.updater.ts +0 -14
  555. package/projects/obtservices/angular/src/lib/vendor/updaters/addUserToBasketItem.ts +0 -14
  556. package/projects/obtservices/angular/src/lib/vendor/updaters/book-basket-updater.ts +0 -14
  557. package/projects/obtservices/angular/src/lib/vendor/updaters/create-basket-updater.ts +0 -14
  558. package/projects/obtservices/angular/src/lib/vendor/updaters/move-basket-item-to-basket.ts +0 -14
  559. package/projects/obtservices/angular/src/lib/vendor/updaters/remove-basket-updater.ts +0 -14
  560. package/projects/obtservices/angular/src/lib/vendor/updaters/remove-item-from-basket.updater.ts +0 -14
  561. package/projects/obtservices/angular/src/lib/vendor/updaters/remove-recent-search.updater.ts +0 -14
  562. package/projects/obtservices/angular/src/lib/vendor/updaters/remove-user-address.updater.ts +0 -14
  563. package/projects/obtservices/angular/src/lib/vendor/updaters/revalidate-basket-updater.ts +0 -14
  564. package/projects/obtservices/angular/src/lib/vendor/updaters/save-recent-search.updater.ts +0 -14
  565. package/projects/obtservices/angular/src/lib/vendor/updaters/save-user-address.updater.ts +0 -11
  566. package/projects/obtservices/angular/src/lib/vendor/updaters/send-basket-for-approval.updater.ts +0 -14
  567. package/projects/obtservices/angular/src/lib/vendor/updaters/set-basket-item-lead-passenger.updater.ts +0 -14
  568. package/projects/obtservices/angular/src/lib/vendor/updaters/set-basket-item-mi-group.ts +0 -14
  569. package/projects/obtservices/angular/src/lib/vendor/updaters/set-basket-item-mi-value-updater.ts +0 -15
  570. package/projects/obtservices/angular/src/lib/vendor/updaters/set-payment-option.updater.ts +0 -15
  571. package/projects/obtservices/angular/src/lib/vendor/updaters/update-basket-notes-updater.ts +0 -14
  572. package/projects/obtservices/angular/src/lib/vendor/updaters/update-basket-title-updater.ts +0 -14
  573. package/projects/obtservices/angular/src/obtservices.module.ts +0 -131
  574. package/projects/obtservices/base/package.json +0 -3
  575. package/projects/obtservices/base/src/custom.d.ts +0 -3
  576. package/projects/obtservices/base/src/fetchers.ts +0 -36
  577. package/projects/obtservices/base/src/lib/vendor/classes/base-enterprise.ts +0 -126
  578. package/projects/obtservices/base/src/lib/vendor/classes/base-network-call.ts +0 -40
  579. package/projects/obtservices/base/src/lib/vendor/classes/basket-info-mi-details.impl.ts +0 -68
  580. package/projects/obtservices/base/src/lib/vendor/classes/bookable-basket.ts +0 -343
  581. package/projects/obtservices/base/src/lib/vendor/classes/cabhire-enterprise-search.ts +0 -907
  582. package/projects/obtservices/base/src/lib/vendor/classes/carhire-enterprise-search.ts +0 -1597
  583. package/projects/obtservices/base/src/lib/vendor/classes/empty-enterprise-search.ts +0 -75
  584. package/projects/obtservices/base/src/lib/vendor/classes/enviroment.ts +0 -25
  585. package/projects/obtservices/base/src/lib/vendor/classes/eurostar-enterprise-search.ts +0 -2126
  586. package/projects/obtservices/base/src/lib/vendor/classes/eurostar-search-type.enum.ts +0 -4
  587. package/projects/obtservices/base/src/lib/vendor/classes/event-messenager.ts +0 -23
  588. package/projects/obtservices/base/src/lib/vendor/classes/flight-enterprise-search.ts +0 -2399
  589. package/projects/obtservices/base/src/lib/vendor/classes/flight-search-type.enum.ts +0 -5
  590. package/projects/obtservices/base/src/lib/vendor/classes/helpers.ts +0 -1233
  591. package/projects/obtservices/base/src/lib/vendor/classes/hotel-enterprise-search.ts +0 -1370
  592. package/projects/obtservices/base/src/lib/vendor/classes/irl-enterprise-search.ts +0 -1380
  593. package/projects/obtservices/base/src/lib/vendor/classes/limited-cache.class.ts +0 -70
  594. package/projects/obtservices/base/src/lib/vendor/classes/lounges-enterprise-search.ts +0 -444
  595. package/projects/obtservices/base/src/lib/vendor/classes/management-info-and-valid.ts +0 -268
  596. package/projects/obtservices/base/src/lib/vendor/classes/modal-types.enum.ts +0 -28
  597. package/projects/obtservices/base/src/lib/vendor/classes/parking-enterprise-search.ts +0 -541
  598. package/projects/obtservices/base/src/lib/vendor/classes/rail-direction.enum.ts +0 -4
  599. package/projects/obtservices/base/src/lib/vendor/classes/rail-enterprise-search.ts +0 -1751
  600. package/projects/obtservices/base/src/lib/vendor/classes/routehappy-request.ts +0 -146
  601. package/projects/obtservices/base/src/lib/vendor/classes/routehappy-response.ts +0 -128
  602. package/projects/obtservices/base/src/lib/vendor/classes/supplementary-booking-info-impl.ts +0 -375
  603. package/projects/obtservices/base/src/lib/vendor/classes/user-favourite.enum.ts +0 -12
  604. package/projects/obtservices/base/src/lib/vendor/classes/validator.checker.ts +0 -7
  605. package/projects/obtservices/base/src/lib/vendor/data/airports.data.json +0 -5508
  606. package/projects/obtservices/base/src/lib/vendor/data/booking-expected-responses.json +0 -100
  607. package/projects/obtservices/base/src/lib/vendor/data/cities.data.json +0 -31499
  608. package/projects/obtservices/base/src/lib/vendor/data/countries.json +0 -1212
  609. package/projects/obtservices/base/src/lib/vendor/data/euro-stations.json +0 -30
  610. package/projects/obtservices/base/src/lib/vendor/data/flight-booking.data.json +0 -136
  611. package/projects/obtservices/base/src/lib/vendor/data/postcodes1.json +0 -194
  612. package/projects/obtservices/base/src/lib/vendor/data/rail_addresses.json +0 -2524
  613. package/projects/obtservices/base/src/lib/vendor/fetchers/basket-fetcher.ts +0 -29
  614. package/projects/obtservices/base/src/lib/vendor/fetchers/cabhire-quote-fetcher.ts +0 -34
  615. package/projects/obtservices/base/src/lib/vendor/fetchers/carhire-availability-detail.fetcher.ts +0 -35
  616. package/projects/obtservices/base/src/lib/vendor/fetchers/carhire-quote-fetcher.ts +0 -34
  617. package/projects/obtservices/base/src/lib/vendor/fetchers/conferma-office-names.fetcher.ts +0 -34
  618. package/projects/obtservices/base/src/lib/vendor/fetchers/conferma-quicklist.fetcher.ts +0 -35
  619. package/projects/obtservices/base/src/lib/vendor/fetchers/eurostar-quote.fetcher.ts +0 -35
  620. package/projects/obtservices/base/src/lib/vendor/fetchers/flight-quote.fetcher.ts +0 -35
  621. package/projects/obtservices/base/src/lib/vendor/fetchers/get-rail-cards.fetcher.ts +0 -35
  622. package/projects/obtservices/base/src/lib/vendor/fetchers/get-rail-station.fetcher.ts +0 -35
  623. package/projects/obtservices/base/src/lib/vendor/fetchers/get-risk-alerts.fetcher.ts +0 -35
  624. package/projects/obtservices/base/src/lib/vendor/fetchers/get-user-company-offices.fetcher.ts +0 -34
  625. package/projects/obtservices/base/src/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.ts +0 -35
  626. package/projects/obtservices/base/src/lib/vendor/fetchers/get-user-recent-searches.fetcher.ts +0 -36
  627. package/projects/obtservices/base/src/lib/vendor/fetchers/get-users-baskets-fetcher.ts +0 -33
  628. package/projects/obtservices/base/src/lib/vendor/fetchers/getMiAutoSugestions.fetcher.ts +0 -35
  629. package/projects/obtservices/base/src/lib/vendor/fetchers/hotel-avaliability-fetcher.ts +0 -53
  630. package/projects/obtservices/base/src/lib/vendor/fetchers/hotel-quote-fetcher.ts +0 -35
  631. package/projects/obtservices/base/src/lib/vendor/fetchers/irl-quote-fetcher.ts +0 -34
  632. package/projects/obtservices/base/src/lib/vendor/fetchers/list-fetchable-enterprise.ts +0 -59
  633. package/projects/obtservices/base/src/lib/vendor/fetchers/lounge-quote.fetcher.ts +0 -34
  634. package/projects/obtservices/base/src/lib/vendor/fetchers/object-fetchable-enterprise.ts +0 -20
  635. package/projects/obtservices/base/src/lib/vendor/fetchers/parking-quote-fetcher.ts +0 -34
  636. package/projects/obtservices/base/src/lib/vendor/fetchers/rail-quote-fetcher.ts +0 -34
  637. package/projects/obtservices/base/src/lib/vendor/fetchers/search-airlines.fetcher.ts +0 -30
  638. package/projects/obtservices/base/src/lib/vendor/fetchers/search-airports-fetcher.ts +0 -29
  639. package/projects/obtservices/base/src/lib/vendor/fetchers/search-cities.fetcher.ts +0 -34
  640. package/projects/obtservices/base/src/lib/vendor/fetchers/search-conferma-cities.fetcher.ts +0 -32
  641. package/projects/obtservices/base/src/lib/vendor/fetchers/search-depots.fetcher.ts +0 -34
  642. package/projects/obtservices/base/src/lib/vendor/fetchers/search-hotel-chains.fetcher.ts +0 -34
  643. package/projects/obtservices/base/src/lib/vendor/fetchers/search-postcodes.fetcher.ts +0 -37
  644. package/projects/obtservices/base/src/lib/vendor/fetchers/search-rail-stations.fetcher.ts +0 -35
  645. package/projects/obtservices/base/src/lib/vendor/fetchers/search-users-can-book-for-fetcher.ts +0 -35
  646. package/projects/obtservices/base/src/lib/vendor/fetchers/user-addresses.fetcher.ts +0 -34
  647. package/projects/obtservices/base/src/lib/vendor/fetchers/user-fetcher.ts +0 -27
  648. package/projects/obtservices/base/src/lib/vendor/fetchers/user-message.fetcher.ts +0 -34
  649. package/projects/obtservices/base/src/lib/vendor/fetchers/user-products-fetcher.ts +0 -35
  650. package/projects/obtservices/base/src/lib/vendor/fetchers/user-ui-configs-fetcher.ts +0 -35
  651. package/projects/obtservices/base/src/lib/vendor/interfaces/Icabhire-enterprise-search.ts +0 -174
  652. package/projects/obtservices/base/src/lib/vendor/interfaces/Icarhire-enterprise-search.ts +0 -143
  653. package/projects/obtservices/base/src/lib/vendor/interfaces/Ienterprise-basket.service.ts +0 -127
  654. package/projects/obtservices/base/src/lib/vendor/interfaces/Ieurostar-enterprise-search.ts +0 -197
  655. package/projects/obtservices/base/src/lib/vendor/interfaces/Iflight-enterprise-search.ts +0 -196
  656. package/projects/obtservices/base/src/lib/vendor/interfaces/Ihotel-enterprise-search.ts +0 -219
  657. package/projects/obtservices/base/src/lib/vendor/interfaces/Iirl-enterprise-search.ts +0 -135
  658. package/projects/obtservices/base/src/lib/vendor/interfaces/Ilounges-enterprise-search.ts +0 -58
  659. package/projects/obtservices/base/src/lib/vendor/interfaces/Imybookings.service.ts +0 -27
  660. package/projects/obtservices/base/src/lib/vendor/interfaces/Iparking-enterprise-search.ts +0 -72
  661. package/projects/obtservices/base/src/lib/vendor/interfaces/Irail-enterprise-search.ts +0 -161
  662. package/projects/obtservices/base/src/lib/vendor/interfaces/Isearch.service.ts +0 -178
  663. package/projects/obtservices/base/src/lib/vendor/interfaces/Isupplementary-booking-info-impl.ts +0 -63
  664. package/projects/obtservices/base/src/lib/vendor/interfaces/Iuser.service.ts +0 -87
  665. package/projects/obtservices/base/src/lib/vendor/interfaces/car-hire-classes.interface.ts +0 -8
  666. package/projects/obtservices/base/src/lib/vendor/interfaces/car-hire-filters.interface.ts +0 -11
  667. package/projects/obtservices/base/src/lib/vendor/interfaces/car-hire-sort.interface.ts +0 -4
  668. package/projects/obtservices/base/src/lib/vendor/interfaces/cheapest-price.ts +0 -4
  669. package/projects/obtservices/base/src/lib/vendor/interfaces/code-name.ts +0 -4
  670. package/projects/obtservices/base/src/lib/vendor/interfaces/flight-filters.interface.ts +0 -41
  671. package/projects/obtservices/base/src/lib/vendor/interfaces/flight-multi-destination.interface.ts +0 -8
  672. package/projects/obtservices/base/src/lib/vendor/interfaces/rail-airport-express-stations.interface.ts +0 -4
  673. package/projects/obtservices/base/src/lib/vendor/interfaces/rail-basket-item.interface.ts +0 -79
  674. package/projects/obtservices/base/src/lib/vendor/interfaces/rail-journey-leg.interface.ts +0 -6
  675. package/projects/obtservices/base/src/lib/vendor/interfaces/rail-recent-search-args.interface.ts +0 -20
  676. package/projects/obtservices/base/src/lib/vendor/interfaces/rail-selected-ticket.interface.ts +0 -11
  677. package/projects/obtservices/base/src/lib/vendor/interfaces/rail-ticket-group.interface.ts +0 -29
  678. package/projects/obtservices/base/src/lib/vendor/interfaces/rail-ticket-groups.interface.ts +0 -5
  679. package/projects/obtservices/base/src/lib/vendor/interfaces/search-objects.interface.ts +0 -17
  680. package/projects/obtservices/base/src/lib/vendor/interfaces/select-filter.interface.ts +0 -5
  681. package/projects/obtservices/base/src/lib/vendor/interfaces/user.data.ts +0 -22
  682. package/projects/obtservices/base/src/lib/vendor/interfaces/value-display.ts +0 -4
  683. package/projects/obtservices/base/src/lib/vendor/models/login.model.ts +0 -97
  684. package/projects/obtservices/base/src/lib/vendor/models/regexp.model.ts +0 -13
  685. package/projects/obtservices/base/src/lib/vendor/models/traveller.object.ts +0 -61
  686. package/projects/obtservices/base/src/lib/vendor/services/enterprise-basket.service.ts +0 -1150
  687. package/projects/obtservices/base/src/lib/vendor/services/hotel-avallibility.service.ts +0 -251
  688. package/projects/obtservices/base/src/lib/vendor/services/http-call.service.ts +0 -57
  689. package/projects/obtservices/base/src/lib/vendor/services/logon.service.ts +0 -245
  690. package/projects/obtservices/base/src/lib/vendor/services/modal-opener.service.ts +0 -30
  691. package/projects/obtservices/base/src/lib/vendor/services/my-bookings.service.ts +0 -184
  692. package/projects/obtservices/base/src/lib/vendor/services/routehappy.service.ts +0 -275
  693. package/projects/obtservices/base/src/lib/vendor/services/search.service.ts +0 -2026
  694. package/projects/obtservices/base/src/lib/vendor/services/storage.service.ts +0 -15
  695. package/projects/obtservices/base/src/lib/vendor/services/url.service.ts +0 -12
  696. package/projects/obtservices/base/src/lib/vendor/services/user.service.ts +0 -354
  697. package/projects/obtservices/base/src/lib/vendor/services/webtoken.service.ts +0 -66
  698. package/projects/obtservices/base/src/lib/vendor/testers/base.tester.ts +0 -18
  699. package/projects/obtservices/base/src/lib/vendor/testers/postcode-validate.tester.ts +0 -24
  700. package/projects/obtservices/base/src/lib/vendor/testers/validate-mi-free-value.tester.ts +0 -23
  701. package/projects/obtservices/base/src/lib/vendor/types/graphql.types.ts +0 -6184
  702. package/projects/obtservices/base/src/lib/vendor/types/types.ts +0 -630
  703. package/projects/obtservices/base/src/lib/vendor/updaters/accept-new-price.updater.ts +0 -31
  704. package/projects/obtservices/base/src/lib/vendor/updaters/add-item-to-basket.updater.ts +0 -29
  705. package/projects/obtservices/base/src/lib/vendor/updaters/addUserToBasketItem.ts +0 -30
  706. package/projects/obtservices/base/src/lib/vendor/updaters/book-basket-updater.ts +0 -28
  707. package/projects/obtservices/base/src/lib/vendor/updaters/create-basket-updater.ts +0 -29
  708. package/projects/obtservices/base/src/lib/vendor/updaters/move-basket-item-to-basket.ts +0 -30
  709. package/projects/obtservices/base/src/lib/vendor/updaters/object-updater-enterprise.ts +0 -20
  710. package/projects/obtservices/base/src/lib/vendor/updaters/remove-basket-updater.ts +0 -29
  711. package/projects/obtservices/base/src/lib/vendor/updaters/remove-item-from-basket.updater.ts +0 -28
  712. package/projects/obtservices/base/src/lib/vendor/updaters/remove-recent-search-updater.ts +0 -29
  713. package/projects/obtservices/base/src/lib/vendor/updaters/remove-user-address-updater.ts +0 -29
  714. package/projects/obtservices/base/src/lib/vendor/updaters/revalidate-basket-updater.ts +0 -29
  715. package/projects/obtservices/base/src/lib/vendor/updaters/save-recent-search-updater.ts +0 -30
  716. package/projects/obtservices/base/src/lib/vendor/updaters/save-user-address.updater.ts +0 -30
  717. package/projects/obtservices/base/src/lib/vendor/updaters/send-basket-for-approval.updater.ts +0 -31
  718. package/projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-lead-passenger.updater.ts +0 -30
  719. package/projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-mi-group.ts +0 -32
  720. package/projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-mi-value-updater.ts +0 -30
  721. package/projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-paymenr-option.updater.ts +0 -28
  722. package/projects/obtservices/base/src/lib/vendor/updaters/update-basket-notes-updater.ts +0 -30
  723. package/projects/obtservices/base/src/lib/vendor/updaters/update-basket-title-updater.ts +0 -30
  724. package/projects/obtservices/base/src/testers.ts +0 -2
  725. package/projects/obtservices/graphQL/autogenerated/index.js +0 -2
  726. package/projects/obtservices/graphQL/autogenerated/mutations/acceptNewPrice.gql +0 -1580
  727. package/projects/obtservices/graphQL/autogenerated/mutations/addItemToBasket.gql +0 -1580
  728. package/projects/obtservices/graphQL/autogenerated/mutations/addUsersToBasketItem.gql +0 -1580
  729. package/projects/obtservices/graphQL/autogenerated/mutations/bookBasket.gql +0 -1580
  730. package/projects/obtservices/graphQL/autogenerated/mutations/cancelBooking.gql +0 -6
  731. package/projects/obtservices/graphQL/autogenerated/mutations/confermaCreateCard.gql +0 -23
  732. package/projects/obtservices/graphQL/autogenerated/mutations/confermaDeleteCard.gql +0 -3
  733. package/projects/obtservices/graphQL/autogenerated/mutations/createBasket.gql +0 -1580
  734. package/projects/obtservices/graphQL/autogenerated/mutations/deleteBasket.gql +0 -3
  735. package/projects/obtservices/graphQL/autogenerated/mutations/deleteFavouriteSearch.gql +0 -3
  736. package/projects/obtservices/graphQL/autogenerated/mutations/deleteRecentSearch.gql +0 -3
  737. package/projects/obtservices/graphQL/autogenerated/mutations/deleteUserAddress.gql +0 -3
  738. package/projects/obtservices/graphQL/autogenerated/mutations/index.js +0 -36
  739. package/projects/obtservices/graphQL/autogenerated/mutations/moveItemToADifferentBasket.gql +0 -1580
  740. package/projects/obtservices/graphQL/autogenerated/mutations/removeItemFromBasket.gql +0 -1580
  741. package/projects/obtservices/graphQL/autogenerated/mutations/removeItemsFromBasket.gql +0 -1580
  742. package/projects/obtservices/graphQL/autogenerated/mutations/removeUserFromBasketItem.gql +0 -1580
  743. package/projects/obtservices/graphQL/autogenerated/mutations/reopenBasket.gql +0 -1580
  744. package/projects/obtservices/graphQL/autogenerated/mutations/revalidateBasket.gql +0 -1580
  745. package/projects/obtservices/graphQL/autogenerated/mutations/revalidateBasketItem.gql +0 -1580
  746. package/projects/obtservices/graphQL/autogenerated/mutations/saveFavouriteSearch.gql +0 -348
  747. package/projects/obtservices/graphQL/autogenerated/mutations/saveRecentSearch.gql +0 -348
  748. package/projects/obtservices/graphQL/autogenerated/mutations/saveUserAddress.gql +0 -14
  749. package/projects/obtservices/graphQL/autogenerated/mutations/sendBasketForApproval.gql +0 -1580
  750. package/projects/obtservices/graphQL/autogenerated/mutations/setAddressAsUserPrimary.gql +0 -14
  751. package/projects/obtservices/graphQL/autogenerated/mutations/setBasketItemLeadPassenger.gql +0 -1580
  752. package/projects/obtservices/graphQL/autogenerated/mutations/setBasketItemMIGroup.gql +0 -1580
  753. package/projects/obtservices/graphQL/autogenerated/mutations/setBasketItemMIValue.gql +0 -1580
  754. package/projects/obtservices/graphQL/autogenerated/mutations/setBasketItemPaymentMethod.gql +0 -1580
  755. package/projects/obtservices/graphQL/autogenerated/mutations/setMIDefaultValue.gql +0 -3
  756. package/projects/obtservices/graphQL/autogenerated/mutations/setUserLanguage.gql +0 -339
  757. package/projects/obtservices/graphQL/autogenerated/mutations/updateBasketNotes.gql +0 -1580
  758. package/projects/obtservices/graphQL/autogenerated/mutations/updateBasketTitle.gql +0 -1580
  759. package/projects/obtservices/graphQL/autogenerated/queries/alive.gql +0 -3
  760. package/projects/obtservices/graphQL/autogenerated/queries/carHireAvailabilityDetailRequest.gql +0 -42
  761. package/projects/obtservices/graphQL/autogenerated/queries/confermaBlockClientHotels.gql +0 -23
  762. package/projects/obtservices/graphQL/autogenerated/queries/confermaBlockConsumerHotels.gql +0 -23
  763. package/projects/obtservices/graphQL/autogenerated/queries/confermaListCards.gql +0 -11
  764. package/projects/obtservices/graphQL/autogenerated/queries/confermaUnblockClientHotels.gql +0 -23
  765. package/projects/obtservices/graphQL/autogenerated/queries/confermaUnblockConsumerHotels.gql +0 -23
  766. package/projects/obtservices/graphQL/autogenerated/queries/getCOVIDMicrositeToken.gql +0 -3
  767. package/projects/obtservices/graphQL/autogenerated/queries/getCancellationInfo.gql +0 -7
  768. package/projects/obtservices/graphQL/autogenerated/queries/getCarHireDepots.gql +0 -13
  769. package/projects/obtservices/graphQL/autogenerated/queries/getConfermaOffice.gql +0 -50
  770. package/projects/obtservices/graphQL/autogenerated/queries/getConfermaOfficeNames.gql +0 -26
  771. package/projects/obtservices/graphQL/autogenerated/queries/getConfermaQuicklist.gql +0 -131
  772. package/projects/obtservices/graphQL/autogenerated/queries/getCountries.gql +0 -8
  773. package/projects/obtservices/graphQL/autogenerated/queries/getHotelAvailability.gql +0 -78
  774. package/projects/obtservices/graphQL/autogenerated/queries/getHotelChains.gql +0 -3
  775. package/projects/obtservices/graphQL/autogenerated/queries/getIRLSupplierStation.gql +0 -28
  776. package/projects/obtservices/graphQL/autogenerated/queries/getMultipleHotelsAvailability.gql +0 -78
  777. package/projects/obtservices/graphQL/autogenerated/queries/getPostcodeDetails.gql +0 -25
  778. package/projects/obtservices/graphQL/autogenerated/queries/getRailStation.gql +0 -27
  779. package/projects/obtservices/graphQL/autogenerated/queries/getRailcards.gql +0 -6
  780. package/projects/obtservices/graphQL/autogenerated/queries/getRiskAlerts.gql +0 -17
  781. package/projects/obtservices/graphQL/autogenerated/queries/getUser.gql +0 -339
  782. package/projects/obtservices/graphQL/autogenerated/queries/getUserAddresses.gql +0 -14
  783. package/projects/obtservices/graphQL/autogenerated/queries/getUserBasket.gql +0 -1580
  784. package/projects/obtservices/graphQL/autogenerated/queries/getUserBaskets.gql +0 -1580
  785. package/projects/obtservices/graphQL/autogenerated/queries/getUserCompanyOffices.gql +0 -88
  786. package/projects/obtservices/graphQL/autogenerated/queries/getUserCurrentCarbonAllowance.gql +0 -524
  787. package/projects/obtservices/graphQL/autogenerated/queries/getUserFavouriteSearches.gql +0 -348
  788. package/projects/obtservices/graphQL/autogenerated/queries/getUserMIAutoSuggestValues.gql +0 -10
  789. package/projects/obtservices/graphQL/autogenerated/queries/getUserMessages.gql +0 -10
  790. package/projects/obtservices/graphQL/autogenerated/queries/getUserPhoneNumbers.gql +0 -13
  791. package/projects/obtservices/graphQL/autogenerated/queries/getUserRecentSearches.gql +0 -348
  792. package/projects/obtservices/graphQL/autogenerated/queries/getUserServices.gql +0 -16
  793. package/projects/obtservices/graphQL/autogenerated/queries/getUserTravelRules.gql +0 -111
  794. package/projects/obtservices/graphQL/autogenerated/queries/getUserUIConfigs.gql +0 -52
  795. package/projects/obtservices/graphQL/autogenerated/queries/index.js +0 -64
  796. package/projects/obtservices/graphQL/autogenerated/queries/isPostcodeValid.gql +0 -3
  797. package/projects/obtservices/graphQL/autogenerated/queries/postcodeAutoSuggest.gql +0 -3
  798. package/projects/obtservices/graphQL/autogenerated/queries/searchAirlines.gql +0 -32
  799. package/projects/obtservices/graphQL/autogenerated/queries/searchAirports.gql +0 -60
  800. package/projects/obtservices/graphQL/autogenerated/queries/searchCabHire.gql +0 -63
  801. package/projects/obtservices/graphQL/autogenerated/queries/searchCarHire.gql +0 -104
  802. package/projects/obtservices/graphQL/autogenerated/queries/searchCities.gql +0 -14
  803. package/projects/obtservices/graphQL/autogenerated/queries/searchConfermaCities.gql +0 -11
  804. package/projects/obtservices/graphQL/autogenerated/queries/searchEurostar.gql +0 -833
  805. package/projects/obtservices/graphQL/autogenerated/queries/searchFastTrack.gql +0 -46
  806. package/projects/obtservices/graphQL/autogenerated/queries/searchFlights.gql +0 -23
  807. package/projects/obtservices/graphQL/autogenerated/queries/searchFlightsV2.gql +0 -833
  808. package/projects/obtservices/graphQL/autogenerated/queries/searchHotelChains.gql +0 -3
  809. package/projects/obtservices/graphQL/autogenerated/queries/searchHotels.gql +0 -131
  810. package/projects/obtservices/graphQL/autogenerated/queries/searchIRL.gql +0 -514
  811. package/projects/obtservices/graphQL/autogenerated/queries/searchIRLSupplierStations.gql +0 -28
  812. package/projects/obtservices/graphQL/autogenerated/queries/searchLounges.gql +0 -89
  813. package/projects/obtservices/graphQL/autogenerated/queries/searchParking.gql +0 -70
  814. package/projects/obtservices/graphQL/autogenerated/queries/searchPostcodes.gql +0 -25
  815. package/projects/obtservices/graphQL/autogenerated/queries/searchRail.gql +0 -840
  816. package/projects/obtservices/graphQL/autogenerated/queries/searchRailStations.gql +0 -27
  817. package/projects/obtservices/graphQL/autogenerated/queries/searchUserCanBookFor.gql +0 -339
  818. package/projects/obtservices/graphQL/autogenerated/queries/validateBasketItemMI.gql +0 -3
  819. package/projects/obtservices/graphQL/autogenerated/queries/validateUserMIFreeValue.gql +0 -3
  820. package/projects/obtservices/graphQL/documents/acceptNewPrice.graphql +0 -5
  821. package/projects/obtservices/graphQL/documents/addUserToBasketItem.graphql +0 -9
  822. package/projects/obtservices/graphQL/documents/basket.fragments.graphql +0 -171
  823. package/projects/obtservices/graphQL/documents/baskets.graphql +0 -111
  824. package/projects/obtservices/graphQL/documents/bookBasket.graphql +0 -9
  825. package/projects/obtservices/graphQL/documents/cabhire.graphql +0 -66
  826. package/projects/obtservices/graphQL/documents/carHireAvailabilityDetailRequest.graphql +0 -44
  827. package/projects/obtservices/graphQL/documents/carhire.graphql +0 -117
  828. package/projects/obtservices/graphQL/documents/deleteRecentSearch.graphql +0 -3
  829. package/projects/obtservices/graphQL/documents/deleteUserAddress.graphql +0 -3
  830. package/projects/obtservices/graphQL/documents/error.fragments.graphql +0 -10
  831. package/projects/obtservices/graphQL/documents/flights.graphql +0 -830
  832. package/projects/obtservices/graphQL/documents/getCarHireDepots.graphql +0 -13
  833. package/projects/obtservices/graphQL/documents/getConfermaOfficeNames.graphql +0 -11
  834. package/projects/obtservices/graphQL/documents/getConfermaQuicklist.graphql +0 -108
  835. package/projects/obtservices/graphQL/documents/getRailStation.graphql +0 -31
  836. package/projects/obtservices/graphQL/documents/getRailcards.graphql +0 -6
  837. package/projects/obtservices/graphQL/documents/getRiskAlerts.graphql +0 -24
  838. package/projects/obtservices/graphQL/documents/getUserAddresses.graphql +0 -14
  839. package/projects/obtservices/graphQL/documents/getUserCompanyOffices.graphql +0 -18
  840. package/projects/obtservices/graphQL/documents/getUserCurrentCarbonAllowance.graphql +0 -29
  841. package/projects/obtservices/graphQL/documents/getUserMIAutoSuggestValues.graphql +0 -10
  842. package/projects/obtservices/graphQL/documents/getUserPhoneNumbers.graphql +0 -13
  843. package/projects/obtservices/graphQL/documents/getUserRecentSearches.graphql +0 -20
  844. package/projects/obtservices/graphQL/documents/hotels.graphql +0 -242
  845. package/projects/obtservices/graphQL/documents/isPostcodeValid.graphql +0 -3
  846. package/projects/obtservices/graphQL/documents/lookups.graphql +0 -54
  847. package/projects/obtservices/graphQL/documents/lounges.graphql +0 -88
  848. package/projects/obtservices/graphQL/documents/moveItemToADifferentBasket.graphql +0 -9
  849. package/projects/obtservices/graphQL/documents/parking.graphql +0 -79
  850. package/projects/obtservices/graphQL/documents/rail.graphql +0 -645
  851. package/projects/obtservices/graphQL/documents/saveRecentSearch.graphql +0 -5
  852. package/projects/obtservices/graphQL/documents/saveUserAddress.graphql +0 -14
  853. package/projects/obtservices/graphQL/documents/searchAirlines.graphql +0 -32
  854. package/projects/obtservices/graphQL/documents/searchCities.graphql +0 -14
  855. package/projects/obtservices/graphQL/documents/searchConfermaCities.graphql +0 -11
  856. package/projects/obtservices/graphQL/documents/searchEurostar.graphql +0 -810
  857. package/projects/obtservices/graphQL/documents/searchHotelChains.graphql +0 -3
  858. package/projects/obtservices/graphQL/documents/searchIRL.graphql +0 -521
  859. package/projects/obtservices/graphQL/documents/searchPostcodes.graphql +0 -7
  860. package/projects/obtservices/graphQL/documents/searchRailStations.graphql +0 -27
  861. package/projects/obtservices/graphQL/documents/searchUserAddresses.graphql +0 -14
  862. package/projects/obtservices/graphQL/documents/set-basker-item-mi-group.graphql +0 -9
  863. package/projects/obtservices/graphQL/documents/setBasketItemLeadPassenger.graphql +0 -5
  864. package/projects/obtservices/graphQL/documents/setBasketItemMIValue.graphql +0 -16
  865. package/projects/obtservices/graphQL/documents/setBasketItemPaymentMethod.graphql +0 -12
  866. package/projects/obtservices/graphQL/documents/updateBasketNotes.graphql +0 -10
  867. package/projects/obtservices/graphQL/documents/updateBasketTitle.graphql +0 -10
  868. package/projects/obtservices/graphQL/documents/user.fragments.graphql +0 -65
  869. package/projects/obtservices/graphQL/documents/user.graphql +0 -95
  870. package/projects/obtservices/graphQL/documents/validateUserMIFreeValue.graphql +0 -3
  871. package/projects/obtservices/graphQL/schema/schema.graphql +0 -2635
  872. package/projects/obtservices/karma.conf.js +0 -32
  873. package/projects/obtservices/ng-package.json +0 -7
  874. package/projects/obtservices/package-lock.json +0 -5
  875. package/projects/obtservices/package.json +0 -12
  876. package/projects/obtservices/src/obtservices.ts +0 -0
  877. package/projects/obtservices/src/public_api.ts +0 -1
  878. package/projects/obtservices/tsconfig.lib.json +0 -30
  879. package/projects/obtservices/tsconfig.spec.json +0 -17
  880. package/projects/obtservices/tslint.json +0 -17
  881. /package/{projects → dist}/obtservices/README.md +0 -0
  882. /package/{projects/obtservices/angular/src/classes.ts → dist/obtservices/angular/classes.d.ts} +0 -0
  883. /package/{projects/obtservices/angular/src/components.ts → dist/obtservices/angular/components.d.ts} +0 -0
  884. /package/{projects/obtservices/angular/src/public_api.ts → dist/obtservices/angular/public_api.d.ts} +0 -0
  885. /package/{projects/obtservices/angular/src/services.ts → dist/obtservices/angular/services.d.ts} +0 -0
  886. /package/{projects/obtservices/angular/src/types.ts → dist/obtservices/angular/types.d.ts} +0 -0
  887. /package/{projects/obtservices/angular/src/updaters.ts → dist/obtservices/angular/updaters.d.ts} +0 -0
  888. /package/{projects/obtservices/base/src/classes.ts → dist/obtservices/base/classes.d.ts} +0 -0
  889. /package/{projects/obtservices/base/src/interfaces.ts → dist/obtservices/base/interfaces.d.ts} +0 -0
  890. /package/{projects/obtservices/base/src/models.ts → dist/obtservices/base/models.d.ts} +0 -0
  891. /package/{projects/obtservices/base/src/public_api.ts → dist/obtservices/base/public_api.d.ts} +0 -0
  892. /package/{projects/obtservices/base/src/services.ts → dist/obtservices/base/services.d.ts} +0 -0
  893. /package/{projects/obtservices/angular/src/testers.ts → dist/obtservices/base/testers.d.ts} +0 -0
  894. /package/{projects/obtservices/base/src/types.ts → dist/obtservices/base/types.d.ts} +0 -0
  895. /package/{projects/obtservices/base/src/updaters.ts → dist/obtservices/base/updaters.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../projects/obtservices/base/src/lib/vendor/classes/base-enterprise.ts","../../../projects/obtservices/base/src/lib/vendor/classes/modal-types.enum.ts","../../../projects/obtservices/base/src/lib/vendor/classes/base-network-call.ts","../../../node_modules/tslib/tslib.es6.js","../../../projects/obtservices/base/src/lib/vendor/types/graphql.types.ts","../../../projects/obtservices/base/src/lib/vendor/classes/validator.checker.ts","../../../projects/obtservices/base/src/lib/vendor/types/types.ts","../../../projects/obtservices/base/src/lib/vendor/classes/management-info-and-valid.ts","../../../projects/obtservices/base/src/lib/vendor/classes/basket-info-mi-details.impl.ts","../../../projects/obtservices/base/src/lib/vendor/interfaces/Icabhire-enterprise-search.ts","../../../projects/obtservices/base/src/lib/vendor/classes/bookable-basket.ts","../../../projects/obtservices/base/src/lib/vendor/classes/carhire-enterprise-search.ts","../../../projects/obtservices/base/src/lib/vendor/classes/cabhire-enterprise-search.ts","../../../projects/obtservices/base/src/lib/vendor/classes/flight-search-type.enum.ts","../../../projects/obtservices/base/src/lib/vendor/classes/flight-enterprise-search.ts","../../../projects/obtservices/base/src/lib/vendor/classes/enviroment.ts","../../../projects/obtservices/base/src/lib/vendor/classes/event-messenager.ts","../../../projects/obtservices/base/src/lib/vendor/classes/limited-cache.class.ts","../../../projects/obtservices/base/src/lib/vendor/classes/helpers.ts","../../../projects/obtservices/base/src/lib/vendor/services/url.service.ts","../../../projects/obtservices/base/src/lib/vendor/interfaces/Ihotel-enterprise-search.ts","../../../projects/obtservices/base/src/lib/vendor/classes/hotel-enterprise-search.ts","../../../projects/obtservices/base/src/lib/vendor/classes/lounges-enterprise-search.ts","../../../projects/obtservices/base/src/lib/vendor/classes/rail-direction.enum.ts","../../../projects/obtservices/base/src/lib/vendor/classes/eurostar-search-type.enum.ts","../../../projects/obtservices/base/src/lib/vendor/classes/eurostar-enterprise-search.ts","../../../projects/obtservices/base/src/lib/vendor/classes/parking-enterprise-search.ts","../../../projects/obtservices/base/src/lib/vendor/classes/rail-enterprise-search.ts","../../../projects/obtservices/base/src/lib/vendor/classes/irl-enterprise-search.ts","../../../projects/obtservices/base/src/lib/vendor/classes/supplementary-booking-info-impl.ts","../../../projects/obtservices/base/src/lib/vendor/classes/user-favourite.enum.ts","../../../projects/obtservices/base/src/lib/vendor/classes/routehappy-response.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/object-fetchable-enterprise.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/basket-fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/list-fetchable-enterprise.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/cabhire-quote-fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/carhire-quote-fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/carhire-availability-detail.fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/flight-quote.fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/get-rail-station.fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/get-users-baskets-fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/get-user-recent-searches.fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/getMiAutoSugestions.fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/hotel-avaliability-fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/hotel-quote-fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/lounge-quote.fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/parking-quote-fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/rail-quote-fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/irl-quote-fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/search-airlines.fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/search-airports-fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/search-cities.fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/search-conferma-cities.fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/search-postcodes.fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/search-rail-stations.fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/search-users-can-book-for-fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/user-fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/user-message.fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/user-products-fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/user-ui-configs-fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/user-addresses.fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/search-depots.fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/get-user-company-offices.fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/search-hotel-chains.fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/conferma-office-names.fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/get-risk-alerts.fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/conferma-quicklist.fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/get-rail-cards.fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/fetchers/eurostar-quote.fetcher.ts","../../../projects/obtservices/base/src/lib/vendor/models/regexp.model.ts","../../../projects/obtservices/base/src/lib/vendor/models/login.model.ts","../../../projects/obtservices/base/src/lib/vendor/services/search.service.ts","../../../projects/obtservices/base/src/lib/vendor/models/traveller.object.ts","../../../projects/obtservices/base/src/lib/vendor/services/enterprise-basket.service.ts","../../../projects/obtservices/base/src/lib/vendor/services/hotel-avallibility.service.ts","../../../projects/obtservices/base/src/lib/vendor/services/http-call.service.ts","../../../projects/obtservices/base/src/lib/vendor/services/user.service.ts","../../../projects/obtservices/base/src/lib/vendor/services/logon.service.ts","../../../projects/obtservices/base/src/lib/vendor/services/modal-opener.service.ts","../../../projects/obtservices/base/src/lib/vendor/services/my-bookings.service.ts","../../../projects/obtservices/base/src/lib/vendor/services/storage.service.ts","../../../projects/obtservices/base/src/lib/vendor/services/webtoken.service.ts","../../../projects/obtservices/base/src/lib/vendor/services/routehappy.service.ts","../../../projects/obtservices/base/src/lib/vendor/testers/base.tester.ts","../../../projects/obtservices/base/src/lib/vendor/testers/validate-mi-free-value.tester.ts","../../../projects/obtservices/base/src/lib/vendor/testers/postcode-validate.tester.ts","../../../projects/obtservices/base/src/lib/vendor/updaters/object-updater-enterprise.ts","../../../projects/obtservices/base/src/lib/vendor/updaters/accept-new-price.updater.ts","../../../projects/obtservices/base/src/lib/vendor/updaters/add-item-to-basket.updater.ts","../../../projects/obtservices/base/src/lib/vendor/updaters/addUserToBasketItem.ts","../../../projects/obtservices/base/src/lib/vendor/updaters/book-basket-updater.ts","../../../projects/obtservices/base/src/lib/vendor/updaters/create-basket-updater.ts","../../../projects/obtservices/base/src/lib/vendor/updaters/move-basket-item-to-basket.ts","../../../projects/obtservices/base/src/lib/vendor/updaters/remove-basket-updater.ts","../../../projects/obtservices/base/src/lib/vendor/updaters/remove-item-from-basket.updater.ts","../../../projects/obtservices/base/src/lib/vendor/updaters/remove-user-address-updater.ts","../../../projects/obtservices/base/src/lib/vendor/updaters/remove-recent-search-updater.ts","../../../projects/obtservices/base/src/lib/vendor/updaters/revalidate-basket-updater.ts","../../../projects/obtservices/base/src/lib/vendor/updaters/save-user-address.updater.ts","../../../projects/obtservices/base/src/lib/vendor/updaters/send-basket-for-approval.updater.ts","../../../projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-lead-passenger.updater.ts","../../../projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-mi-group.ts","../../../projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-mi-value-updater.ts","../../../projects/obtservices/base/src/lib/vendor/updaters/update-basket-title-updater.ts","../../../projects/obtservices/base/src/lib/vendor/updaters/update-basket-notes-updater.ts","../../../projects/obtservices/base/src/lib/vendor/updaters/save-recent-search-updater.ts","../../../projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-paymenr-option.updater.ts"],"names":["BaseEnterpriseSearch","storageService","mapper","this","_cheapestResultPrice","amount","currencyCode","isValid","BehaviorSubject","results","messages","messagesInfo","validationMessages","infoMessages","isLoading","tempParams","doChecks","fullResults","Object","defineProperty","prototype","_originalUserSearch","updateTempParams","assign","_startSearch","_this","next","Promise","resolve","reject","pipe","take","subscribe","results1","console","log","_.cloneDeep","updateLowestPrice","setSessionItem","resultsSessionName","makeSessionResults","length","error","err","reset","removeSessionItem","resetQuery","data","ModalTypes","value","_component","warn","ModalErrorComponent","ModalNetWorkErrorComponent","BaseModalComponent","AutoLogout","RiskAlertDetail","BaseNetworkCall","modelService","checkError","open","processCall","stream","map","getDataFromResult","catchError","of","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","call","__extends","TypeError","String","__","constructor","create","__decorate","decorators","target","key","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","i","__metadata","metadataKey","metadataValue","metadata","__awaiter","thisArg","_arguments","P","generator","fulfilled","step","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","pop","push","__values","o","s","m","__read","ar","__spread","concat","ApplicationStage","BaggageType","BasketItemStatus","BasketStatus","BookerType","CabHireVehicleType","CarHireClass","CarHireTransmission","CarHireType","CarbonPolicySource","ConfermaCardStatus","CurrencyCode","DistanceTypes","FareRuleType","FareType","FlightCabinClass","FlightPassengerType","IrlClass","IrlJourneyType","IrlSupplier","IrlTravellerStatus","PassengerType","PassportSex","PhoneType","RailClass","RailJourneyType","RailStationClassification","RailStoppingPattern","RailTravellerStatus","RiskLevel","ServiceType","UiConfigTarget","UiPresentation","LogoutEnum","LocationTypes","BreatfastTypes","HotelPolicyEnum","BookingStatus","SchemaFormat","FlightDirectionEnum","EurostarClassEnum","ManagementInfoAndIsValid","managementInfo","_super","search","terms","_selectedValues","values","is","getValue","val","setValue","mandatory","selectedValues","hasErrors","ValidatorChecker","FreeTextManagementInfo","basketService","tempValue","_a","freeValue","basketLevelValue","perBooking","userLevelValue","perPassenger","save","basketid","userId","setMiFreeValue","valueMask","validateFreeValeMi","find","miv","AutoSugestManagementInfo","debounceTime","distinctUntilChanged","switchMap","term","getMiAutoSugestions","id","avaliableItems","tap","sugestions","value1","default","fixed","agentOnly","userid","setMiSelectedValue","HiddenManagementInfo","makeManagamentInfo","uiPresentation","FreeText","AutoSuggest","Hidden","item","helpers","isValidObservers","basketItem","reduce","miAccum","miItem","miItemObj","perItem","perUser","miPerItem","miPerUser","users","userAccum","user","clone","keys","Widgets","SearchHandler","MenuSlideEnum","RiskLevelRanking","excludedPattern","join","includedPattern","includedExpression","RegExp","excludedExpression","ServiceProvider","TaxiFormMode","AirportSearchMode","ActionType","BookableBasket","status","Loading","basket","needsToViewMi","isUpdating","loadBasket","_loadBasket","subsribeToBasket","updateBasket","complete","Open","workoutOpenState","AwaitingApproval","workoutState","Approved","workoutApprovedState","Booked","Complete","BookingFailed","Failed","Disapproved","PartiallyBooked","tmp","sendBasketForApproval","ApprovedBook","basketItems","availablePaymentMethods","selectedPaymentMethod","ApprovedPaymentOption","suppInfo","haveSuppDetails","supp","hasDetails","ApprovedSupplemtal","defaultState","validated","_hasInvalidPrice","Revalidate","_needsCorrectTravellers","AddingTravellers","_needLeadPassengers","_needsMiGroups","ChooseMIGroup","needsMi","ProvideMi","SendForApproval","AddingLeadPassenger","AddingItems","revalidate","addTravellers","travellers","index","setLeadPassenger","setBasketItemMiGroup","basketId","groupDetail","saveMiGroup","miGroupDetailsResult","forEach","groupDetails","saveMi","saveMiData","removeExpiredItems","setBasketItemPaymentOption","paymentMethod","bookBasket","miGroupsAvailable","miGroupSelected","_splitTravellers","adults","children","infants","latestValidationPriceDifference","expired","leadPassenger","userPassengerTypes","accum","passengerType","Adult","_findUser","Number","Child","Infant","getId","SortTypesCar","CabHireEnterpriseSearch","cabfetcher","searchService","type","Cab","airportChange","Subject","transTypes","Any","StandardCar","BlackCab","DdaCar","MediumMpv","ExecutiveCar","attributes","enabled","searchTypes","airportSearchTypes","criteria","mode","ADDRESS","minSelectDate","moment","_date","selectedPlaces","_vias","_searchType","_airportSearchType","DROPOFF","_searchCriteria","_outboundDateTime","round","duration","_returnDateTime","_flightNumber","_terminal","_time","STORAGE_SESSION_RESULTS","getPassengers","passengers","getSessionItem","STORAGE_SESSION_PARAMS","makeCabHireQuery","fromAddress","toAddress","shouldAddTravellerSubscription","travellerInformation","splitTravellers","selectedTravellers","_isValid","getSessionItemAsList","outboundVisibility","inboundVisibility","_fromLocation","_toLocation","_updateDateTime","switchFromAndToLocation","fromLocationType","toLocationType","airport","departs","momentToNgDate","formatTimeColon","countryCode","viasFrom","createCabHireLocation","viasTo","vehicleType","fromStation","address","destination","postcode","toStation","resetParams","unix","ngDateToMoment","startSearch","query","getSearchQuery","saveRecentSearch","getRecentSearchQuery","fetchList","removeNulls","serviceType","searchArgs","travelDate","format","getTravellersId","startRecentSearch","recentSearch","combineLatest","getStationOrAirport","fromLocation","toLocation","_b","_c","fromStationOrAirport","toStationOrAirport","getStationOrAirportAdress","convertStationOrAirportLocation","convertAddressLocation","vias","viaFromStationOrAirport","startSearches","viaToStationOrAirport","updateOutboundAddress","location","placeDescription","getAddressFormat","updateInboundAddress","Terminal","House","Street","Town","Country","filter","PostCode","matchAddresses","sortBy","asc","sort","a","price","getAddressFromPlaceDetails","placeDetails","types","addressProp","isArray","prop","pd","includes","long_name","types_1","types_1_1","getAddressFromAirportDetails","airportDetails","airportName","country","road","city","setLocationFromAirport","STATION","airportSearchType","PICKUP","addToSelectedPlaces","setOutboundFormVisibility","showForm","setInboundFormVisibility","getOutboundFormVisibility","getInboundFormVisibility","updateFromPreviousSearches","previousItems","Flight","searchQuery","getTransType","transTypeIndex","x","text","getStationsAndAirportsList","res","stationOrAirport","Airport","TrainStation","name","locationArray","split","street","town","slice","addCabHireToBasket","cabHireQuote","cabHireQuery","unavailable","getDefaultBasket","intBasket","subject","addToBasket","service","sourceId","toString","detail","supplierName","estimatedCO2","currency","co2PerItem","co2PerPassenger","outboundDate","newFromAddress","newToAddress","cheapestPrice","MAX_SAFE_INTEGER","CarhireEnterpriseSearch","carhirefetcher","carHireAvailabilityDetailFetcher","_carTypeCodes","TwoToThreeDoor","TwoOrFourDoor","FourToFiveDoor","WagonOrEstate","PassengerVan","Limousine","Sport","Convertible","Suv","OpenAirAllTerrain","Special","PickUpRegularCab","PickUpExtendedCab","SpecialOfferCar","Coupe","MonospaceEuropeanUse","MotorHome","TwoWheelVehicle","Roadster","_carAirConditionTypes","_carTransmissionCodes","Manual","Auto","_vendors","code","_car_classes","Mini","MiniElite","Economy","EconomyElite","Compact","CompactElite","Intermediate","IntermediateElite","Standard","StandardElite","Fullsize","FullsizeElite","Premium","PremiumElite","Luxury","LuxuryElite","Oversize","_location_types","City","Postcode","carClassMap","mini","mini elite","economy","economy elite","compact","compact special","compact elite","intermediate","intermediate elite","standard","standard elite","full size","full size elite","premium","premium elite","luxury","luxury elite","oversize","special","Car","_sorting_options","display","_minDate","day","date","month","year","_minInDate","_pickup_date","_pickup_time","_dropoff_date","_dropoff_time","makeCarHireQuery","estimatedMileage","milage","_pickupTime","newtime","_updateNgbPickupDateTime","_dropoffTime","_updateNgbDropoffDateTime","postcodePickupRaw","newPickupCountry","postcodeDropoffRaw","cityPickupDepot","cityDropoffDepot","newPostCodeDropoff","postcodePickup","locationType","postcodeDropoff","cityPickup","newPickup","cityDropoff","newDropoff","pickup_country","dropoff_country","newDropoffCountry","pickup_location","pickupLocation","return_to_pickup","dropoff_location","dropOffLocation","_ngbPickupDate","_ngbDropoffDate","pickup_datetime","isSameOrAfter","dropoff_datetime","set","_updatePickupDateTime","_updateDropoffDateTime","newVal","chosenVendor","newVendor","carClass","carType","transmission","trans","airCon","newCon","_timeArray","fill","Math","floor","padStart","isSameOrBefore","isBefore","recentSearchQuery","pickupName","pickupCountryCode","pickupCity","pickupLatitude","latitude","pickupLongitude","longitude","dropOffName","dropoffCountryCode","dropoffCity","dropOffLatitude","dropOffLongitude","pickupAddressLines","addressLines","pickupCityName","cityName","pickupExtendedLocationCode","extendedLocationCode","pickupLocationCode","locationCode","pickupVendor","vendor","pickupVendorCode","vendorCode","dropOffAddressLines","dropOffCityName","dropOffExtendedLocationCode","dropOffLocationCode","dropOffVendor","dropOffVendorCode","depot","dropoffAddressLines","dropoffCityName","dropoffVendor","pickupPostCode","dropoffPostCode","dropoffLatitude","dropoffLongitude","class","aircon","estimatedDailyDistance","dropoffDateTime","pickupDateTime","getParamsForCarbyCity","getParamsForCarbyAirport","getParamsForCarbyPostCode","getAirportByCode","pickupCode","dropoffCode","_o","_p","departLocation","arriveLocation","iataMatch","gateway","iata","terminals","processTerminals","locationDetails","_d","_f","_e","_h","_g","_k","_j","_m","_l","estimatedDailyDistanceUnits","M","getCarClasses","getLocationTypes","filterResults","appliedFilters","selectedSort","getPrice","minPrice","maxPrice","filterByTransmissionType","transmissions","filterByAirconType","airConditioning","filterByCarType","filterByCompany","companies","sortResults","cars","selected","company","car","selc","toLowerCase","identifiers","displayRecord","vehicle","tranmissions","selectedTransmission","vehType","aircons","selectedAircon","ac","sortByBrand","sortBySize","sortExpensive","sortedResults","sortCheapest","aVal","bVal","brandA","brandB","charges","getMinPrice","min","getMaxPrice","max","MIN_SAFE_INTEGER","time","isOverNight","outwardDay","getCarHireAvailabilityDetail","addCarHireToBasket","carHireVehicleAvailibility","carHireQuery","parseFloat","pickUpDatetime","Date","pickup","toISOString","dropOffDatetime","dropoff","pickUpLocation","topLine","postCode","returnLocation","manualTransmission","vendorName","locationName","FlightSearchType","TimeWindow","SortTypes","numberHotelToPreload","numberOfHotelsToFetch","autoFetchHotelTimeout","autoLogoutTime","hotelAvalibilityTimeout","maxBasketNumber","nullEmitter","ɵ0","BaseEventMessenager","events","getEmmitter","eventType","emit","FlightEnterpriseSearch","flightfetcher","userService","flightsToGroup","grouped","resultQuery","withGrouped","isFlightsGrouped","groupedObject","multi","nextItem","journeys","flight","seleced","canSelect","returnData","acc","groupNumber","isOutBound","boundIndicator","Outbound","returnObject","direction","classes","EconomyNoBags","EconomyRestricted","Business","First","PremiumEconomy","originAirport","originAirportName","destinationAirport","destinationAirportName","departDateTime","arrivalDateTime","outboundTotalDuration","inboundTotalDuration","outlegs","inlegs","outlegsCount","inlegsCount","dataSource","preferred","outboundFlightNumber","operator","operatorFull","inboundFlightNumber","isReturn","brands","flights","brand","correctBrand","matchingBrandFlights","acc1","flightNum","createGroupedItem","source","outboundFlights","inboundFlights","LiteEconomy","PremiumBusiness","PremiumFirst","minprice","getMinFlightPriceForBrand","maxprice","getMaxFlightPriceForBrand","total","avaliableClasses","timeCriteriaOptions","flightOperators","_negotiated","_nearby_airports","_sortArray","CheapestFirst","MostExpensiveFirst","FastestFirst","PreferredFirst","LowestEmissions","_fareTypeArray","Flexible","Leisure","Lowest","Negotiated","NonNegotiated","RequestFareRules","SelectAndPro","minimumOutBoundDate","minimumInBoundDate","_showHotelForm","_hotelSearchRequested","_multiDestination","originalUserSearch","makeFlightQuery","updateTravellers","changeUser","Anytime","Arrive","Depart","updateAvaliableClasses","groupData","negotiated","fareType","preferredCarriers","_originAirport","_destinationAirport","_outDate","outBoundDate","_outTime","inboundDate","isAfter","add","_inDate","_inTime","cabinClass","returnCabinClass","chosenSearchType","outTimeCriteria","inTimeCriteria","maxConnections","multiDestination","valueArray","setMultiDestinationQuery","destinationArray","destinationObject","orig","dest","formatIsoDate","includeNearbyAirports","first","last","dateTimeDeparting","dateTimeArriving","marketingCarrier","marketingCarrierName","joinFromAttribute","checkIsValid","multiCity","multiCityValidation","isemptyValue","isemptyLanding","isSameValue","element","freeze","convertRecentSearchDateTime","outboundDepartureTimeWindow","returnDate","returnDepartureTimeWindow","outboundCabinClass","returnTrip","oneWay","outboundArrivalTimeWindow","returnArrivalTimeWindow","preferredCarriers_1","preferredCarry","getAirlinesList","items","makeDepartureTimeWindow","dateTime","window","makeTimeWindow","makeArrivalTimeWindow","timeWindow","flightTime","hhmmToTime","isMultiCityActive","_passengers","requireFreeBag","carrier","loop","sortMethodValue","givenResults","getTotalBaggage","parsedAdditional","JSON","parse","additional","baggage","bag","allowance","baggageAllowance","baggageAllow","qty","filters","sortValue","filterResultsByStops","stops","filterResultsByAirline","airlines","filterResultsByClass","filterByDepartureAirport","depatureAirport","filterByDepartureReturnAirport","depatureReturnAirport","filterByArrivalAirport","arrivalAirport","filterByArrivalReturnAirport","arrivalReturnAirport","filterByPrice","filterByFlightNumber","flightNumber","filterByBaggage","filterByDepartureTime","minDepartureTime","maxDepartureTime","filterByReturnDepartureTime","minReturnDepartureTime","maxReturnDepartureTime","filterByArrivalTime","minArrivalTime","maxArrivalTime","filterByReturnArrivalTime","minReturnArrivalTime","maxReturnArrivalTime","filterByDuration","minDuration","maxDuration","minReturnDuration","maxReturnDuration","transformMin","num","ceil","dur","out","totalDuration","inb","minDep","maxDep","departureTime","newNumString1","newNumString2","minArr","maxArr","arrivalTime","baggageFilters","totalBags_1","stopFilters","totalStops","selected1","airlineFilters","operatingCarrier","classFilters","departureAirports","arrivalAirports","inInbound","inOutbound","operatingFlightNumber","toUpperCase","inB","createFilters","getAllStops","mustInclude","getAllClasses","getAllAirlines","travelPolicy","getAllDepartureAirports","getAllArrivalAirports","getBaggage","fareTypes","getMinDuration","getMaxDuration","getMinDepartureTime","getMaxDepartureTime","getMinArrivalTime","getMaxArrivalTime","getMinReturnDepartureTime","getMaxReturnDepartureTime","getMaxReturnArrivalTime","getMinReturnArrivalTime","minDepTime","maxDepTime","allStops","allClasses","outFlight","inFlight","inbound","allAirports","allAirlines","operatingCarrierName","selectGroupedFlight","selectedFlight","doBooking","segmentIndex","makeSchemaFlights","journeyType","selectedGroupFlight","groupsToShow_1","uid","groupIndex","Inbound","dateTimeDepartingUTC","schemaDetails","booking","flightGroup","dateTimeArrivingUTC","journeyInfo","marketingFlightNumber","addFlightJourneysToBasket","flightQuote","Node","pre","LimitedCache","size","cache","count","head","tail","get","deleteItem","addToHead","hasKey","node","Memorise","propertyKey","descriptor","targetMethod","args","_i","stringify","URLS","BaseHelperRoutines","minToHour","makeColonTime","substring","nonNullMin","current","joinByComma","attr","isEmpty","mutuallyInclude","findByKey","array","dateToNgDate","getFullYear","getMonth","getDate","convertToYYMMDD","formatDate","yyyymmddTimeToMoment","formatDateToMMDDYYY","MMDDYY_DATE","DATE_FORMAT","formatTime","TIME_FORMAT","TIME_FORMAT_COLON","ISO_DATA_FORMAT","formatIsoDateTime","ISO_DATA_FORMAT_TIME","formatIsoDateNoHyphans","ISO_DATA_FORMAT_NO_HYPHANS","generateTimesList","from","to","dateTimeArray","hour","minute","toDate","ngDateToDate","mom","times","substr","todayToNgbDateStruct","today","objectToArray","object","yyyymmddToDate","yyyymmddToMoment","yymmddToMoment","yymmddToNgbDate","yymmdd_hhmmToMoment","yyyymmdd_hhmmToMoment","yyyymmddToNgDate","yyyymmddTimeToNgDate","dt","dateStringToyyyymmdd","exec","timeStringTohh_mm","stringToBool","toClone","cloneDeep","replaceKeysInText","replacements","replace","getNextMinuets","minutesToRound","getNumberOnceValue","token","random_value","guid","hex_hmac_md5","random_hex","s4","random","capitaliseFirstLetter","word","fromObject","shift","momentRoundMinutes","diff","startOf","minutes","icsFold","line","trim","splitAddressLine","len","residue","lastIndexOf","daysBetween","start","end","mapPromise","it","buffer","nextf","all","mapSeriesPromise","obj2queryString","obj","k","encodeURIComponent","stripPunctuation","replaceAll","haystack","needle","replacement","sabsDate","sabsTime","tempDate","match","tempTime","alternateJSONStringify","jsonObject","jsonString","ConvertObjectToArray","flatten","addDay","dateStruct","hashCode","toCode","hash","charCodeAt","MMddyyToNgb","selectedChildrenTravellers","Hotel","traveller","isChild","isInfant","selectedAdultTravellers","_isChild","maxAge","isChildFlight","isChildRail","isChildEurostar","uniqBy","travelType","Rail","Coach","Lounge","getAgeType","getMaxChildAge","getDefaultAdultAge","transform","callback","arrayToObject","field","configs","configItem","arrayToObjectArray","getTerminals","fieldFromObject","field1","mapFieldFromObject","previousValue","currentValue","idx","sanitizeMomentDates","debug","sanitizedQuery","entries","isMoment","toStrings","toFormat","schema","properties","newValue","_formatValue","required","isRequired","parseInt","isNaN","tmp1","startTime","endTime","inRange","tocheck","range","makeUsers","makeMomentDayTime","hh","undefined","sanatizeReturns","defaults","suppliedData","momentFields","combined","miIsValid","toCheck","isMiValid","userMis","userMis1","basketInfoMiDetails","miDetail","findService","services","service1","service2","allTrue","joinCharacter","attribute","splitUpArray","includeRemainder","arrayCopy","newArray","splice","getTimeDifference","depDateTime","arrDateTime","dayDifference","dept","arr","makeFareRules","rules","cancellation","fareConditions","change","noShow","upgrade","other","generateIcsFileContents","generateIcsFileBodyContent","bodyContent","dStart","dEnd","locationFrom","locationTo","description","summary","bookingThirdPartyReference","arrivalDatetime","FastTrack","InternationalRail","Parking","downloadIcs","filename","document","createElement","setAttribute","style","click","splitStringOnCapitals","rawString","splitString","READ_DATE_FORMAT","READ_TIME_FORMAT","HotelView","SortTypesHotel","priceRange","distanceRange","chain","amenitytype","extra","hotelName","breakfastType","HotelEnterpriseSearch","hotelFetcher","environment","avaliabilityService","httpCallService","quickListFetcher","getRailStationFetcher","resultsToMap","results_details","maxDistance","chains","Set","hotelResult","distance","group","getAvailabilityForId","makeHotelAvalilityObject","sortedTags","sortTags","tags","Details","distance_airport","distance_metro","distance_rail","airport_details","metro_details","rail_details","location_types","offices","lastActivePage","galleries","occupied","amenities","filterChange","selectItemMapView","NEGATIVE_INFINITY","POSITIVE_INFINITY","min_date","min_return_date","localFilters","HotelFilters","currentView","LIST","_max_no_of_rooms","_max_rooms_array","_max_no_of_occupants","_max_occupant_array","_distance_list","_default_currency","hotel","inPriceRange","inDistanceRange","containsHotelname","hasChain","breakfastTypeFilter","filterLighteningResults","inLighteningPriceRange","hasPreferred","getExtraFilter","getAmenitiesFilter","default_currency","makeHotelQuery","no_of_occupants","Office","Shortlist","shouldFetchAllOffices","fetching","isFetching","maxNumber","maxPriceForCurrency","_checkin_date_ngb","checkin_date","_checkout_date_ngb","checkout_date","newDate","checkout_date_ngb","no_of_rooms","newRooms","newOcc","newLoc","newDist","prefered_hotels_only","newPref","newCont","trainsStation","station","office","hotel_name","newName","hotel_chain","newChain","location_type_select","makeLocations","tag","icon","tagMap","railstation","stationCode","occupancy","buildQuery","cCode","rooms","startDate","endDate","groupName","postOrZipCode","cName","officeId","getOfficeNames","trainStationCode","getRailStationByCode","distanceType","maxResults","getRoomNumber","occupants","availability","getAvailabilityValue","maxRange","findMax","minRange","prpn","hotelObject","hotelObjectValue","isBreakfastIncluded","BREAKFAST_INCLUDED","isBreakfastExcluded","BREAKFAST_NOT_INCLUDED","rateDescription","byMostExpensive","sortByPrice","hotels","hotelsWithPrices","hotelsWithoutPrices","second","firstPrice","secondPrice","sortedHotels","sortByName","fst","snd","localeCompare","sortByDistance","byPreferred","preferredToInt","client","consumer","intToPreferred","addFilter","removeFilter","filt","resetFilters","preferredFilters","ANY","AGENCY","CLIENT","getmaxPriceForCurrency","AVAILABILITY","FEMALE_FRIENDLY","convertToOneString","isTrue","filteredResults","getImages","HolidayCode","url","hostBaseUrl","CONFIRMA_PHOTO_URL","responseType","imagesHTML","Error","temp","innerHTML","images","getElementsByTagName","img","src","addPaginationPage","currentPage","toggleView","MAP","calcDayDiff","checkout","checkin","currenciesKey","currencies","currencie","roomsOccupancy","newRoomOccupancy","Adults","calcRoomOccupancy","Children","Infants","j","roomOccupancy","addHotelRoomToBasket","hotelRoom","hotelQuery","hotelAaddress","roomDescription","roomId","roomType","checkIn","checkOut","hotelAddress","streetName","addressLine1","addressLine2","county","addressLine3","hotelDescription","numberOfRooms","MAX_HOTEL_ROOMS","LoungesEnterpriseSearch","loungefetcher","_selectedTerminal","makeLoungesQuery","terminalsType","_locationCode","terminal","selectedTerminal","input","found","resultArray","sortResultsPrice","sortByTerminal","addLoungeToBasket","loungeQuote","loungeQuery","airportIata","RailDirection","EurostarSearchType","SortTypesEurostar","SortMethod","defaultValidations","AirportFirst","InvardJourney","OutwardJourney","DateOverlapped","ParkingEnterpriseSearch","parkingfetcher","listViewToggle","parkingFiltersText","onAirport","meetAndGreet","parkAndRide","parkAndStroll","carParkedForYou","_outdate","_outtime","_indate","_intime","makeParkingQuery","departDatetime","dayAfterArrivalDateTime","outFlightNumber","recommended","addParkingToBasket","parkingQuote","parkingQuery","carPark","requiredInfo","RailSearchCriteria","RailTicketOptionType","EurostarEnterpriseSearch","eurostarFetcher","euroResult_1","formatEurostarResults","outbound","dateDeparture","euroResult_2","Eurostar","title","method","dir","sortByDate","EarliestFirst","_displayAddHotel","makeEurostarQuery","dateArrival","timeArrival","timeDeparture","businessPremierFare","fare","isDisabled","NaN","standardFare","standardPremierFare","fareInfo","STANDARD","STANDARD_PREMIER","BUSINESS_PREMIER","byDate","byPrice","aPrice","bPrice","total_1","selectGroupedEurostar","selectedEurostar","selectedGroupEurostar","selectedEurostarFare","index_1","addEurostarJourneysToBasket","eurostarQuote","IrlSearchCriteria","RailEnterpriseSearch","Railfetcher","ReturnJourney","SingleJourney","classTypes","All","airportExpressStations","airportExpressStationsCodes","HP1-3","dep","PH1-3","HP4","PH4","HP5","PH5","GV","VG","SL","LS","railCriteria","travelCards","removePassingPointsFromResults","minOutboundDate","minInboundDate","maxDate","_outbound_date","_outbound_time","_return_date","_return_time","_cheapestStandard","_cheapestFirst","makeRailQuery","noOfAdults","noOfChildren","_chosenTicketGroup","_chosenOutboundTicket","_chosenInboundTicket","singleOrReturn","Return","_chosenOutboundJourney","_chosenInboundJourney","openReturn","OpenReturnJourney","newType","travellingTo","tt","_travellingTo","travellingFrom","_travellingFrom","chosenSearchClass","newClass","classR","extraTime","via","viaLocation","_viaLocation","outBoundDateTime","newDateTime","inBoundDateTime","outboundCriteria","newCrit","_updateOutboundDateTime","_updateReturnDateTime","returnCriteria","carnetTicket","newCarnet","disableAutoDiscounts","newDis","prioritiseByPrice","newPriority","applyRailcards","apCards","railCards","getAirportExpressStations","airportExpressStation","_setAirportExpressStations","isAirportExpress","setAirportExpressStationIds","stationIds","departureLocationId","arrivalLocationId","parsedStation","now","DualSingleJourney","_removeCallingPoints","extraTimeToChange","outboundDepartureDateTime","outboundArrivalDateTime","getCriteria","returnDepartureDateTime","returnArrivalDateTime","railCardQualifiers","getRailStationById","departureStation","arrivalStation","nlcCode","trainlineCode","trainlineUniqueCode","viaLocationId","segments","segment","callingPoints","callingPoint","stoppingPattern","PASSING_POINT","railCard","departureDateTime","createTicketGroups","tickets","ticketId","_canCombine","ticketGroupsOutbound","setTicketsGroups","ticketGroupsReturn","sortTicketPrices","tkt","identifier","journeyIdentifier","identifierObj","fareIdentifier","availableSeats","updateCanCombine","header","resultIndifiers","resultIndifiersPrices","childTicket","child","selectedIndicies","disabledIndicies","showLimitedSeats","combineTickets","combineChildTickets","childObject","sortTicketChildrenPrices","ticketGroups","providers","prov","ticketOptions","allowedWith","allowed","toggleTicketSelect","ticket","way","timeSlotId","ticketsGroups","selectedTicket","departsTicket","returnTicket","isUnselected","Indicies","clearUnneededTickets","inT","canCombine","indicie","getRailStation","getSelectedRailTicketOption","railJourneyOption","railTicketGroup","providerIndex","ticketOption","getLegsFromRailJourneyOption","legs","departureStationName","depart","arriveDateTime","arrivalStationName","arrive","addSingleJourneyToBasket","serviceId","railQuery","ticketExtras","outTicketExtras","createTicketExtrasObject","unsellable","selectedRailTicketOption","ticketQueueList","ticketQueueList1","accountsList","account","outwardDetail","supplierTickets","ticketDescription","transactionIdentifier","fareIdentifiers","addReturnJourneyToBasket","inTicketExtras","selectedInboundRailTicketOption","outboundLegs","inboundLegs","inwardDetail","railTicketExtra","priceA","priceB","findCheapestTicket","cheapestArr","cheapestTicket","tktOption","tktPrice","tktClass","calculateTimeDifferenceInMins","railJourney","ticketIsAnETicket","queueListItem","clearChosenTickets","IRLEnterpriseSearch","Irlfetcher","ageRanges","_supplier","_countryCode","_class","_outboundDepartureDateTime","_departureLocationId","_arrivalLocationId","_adults","_children","_returnDepartureDateTime","_ageRange","_irlClass","_journeytype","makeIrlQuery","supplier","irlClass","SchemaString","PhoneNumberSchema","areaCode","number","extension","AddressSchema","numberOrName","AddressImpl","details","bookingAddress","updateDetails","PhoneNumberImpl","bookingPhoneNUmber","UserInfoImpl","getUserFetcher","perPassengerPhoneNumber","perPassengerAddress","perPassengerSupplementaryBookingInfoSchema","userDetails","userInfo","phoneNumber","supplementaryInfo","setUpUserInfo","fetchOne","addresses","phoneNumbers","SupplementaryBookingInfoImpl","processSchema","perItemSupplementaryBookingInfoSchema","perItemAddress","perItemPhoneNumber","schemaWidgetToFormat","widget","schemaTypeToFormat","oneOf","select","COUNTRY_CODE","string","integer","boolean","createSupplemtalBookingInformation","paymentMethodDetails","perItemSupplementarySchema","userValue","thisUserSupplemental","UserFavorurite","MaxFlightClass","SSO_no_password","IncludedType","Suppliers","non","EVI","FetchableObject","modalService","queryArgs","fetch","BaseGetBasketFetcher","getBasketGQL","getUserBasket","FetchableList","fetchKeyedObject","fieldToIndexOn","toCreate","fetchKeyedObjectArray","BaseCabhireQuoteFetcher","gql","searchCabHire","BaseCarhireQuoteFetcher","searchCarHire","BaseCarHireAvailabilityDetailFetcher","carHireAvailabilityDetailRequest","BaseFlightQuoteFetcher","searchFlightsV2","BaseGetRailStationFetcher","BaseGetUserBasketsFetcher","getUserBasketsGQL","getUserBaskets","BaseGetUserRecentSearchesFetcher","getUserRecentSearchesGQL","getUserRecentSearches","BaseGetMiAutoSugestionFetcher","getUserMIAutoSuggestValues","BaseHotelAvalibilityQuoteFetcher","getMultipleHotelsAvailability","errors","BaseHotelQuoteFetcher","searchHotels","BaseLoungeQuoteFetcher","searchLounges","BaseParkingQuoteFetcher","searchParking","BaseRailQuoteFetcher","searchRail","BaseIrlQuoteFetcher","searchIrl","BaseSearchAirlinesFetcher","searchAirlines","BaseSearchAirportsFetcher","searchAirports","BaseSearchCityFetcher","queryGQL","searchCities","BaseSearchConfermaCityFetcher","searchConfermaCities","BaseSearchPostcodeFetcher","getPostcodeDetails","BaseSearchRailStationsFetcher","searchRailStations","BaseSearchUsersCanBookForFetcher","searchUserCanBookFor","BaseGetUserFetcher","getUserGQL","getUser","BaseUserMessagesFetcher","getUserMessagesGQL","getUserMessages","BaseUserProductsFetcher","getUserServicesGQL","getUserServices","BaseUserUiConfigsFetcher","getUserUiConfigsGQL","getUserUIConfigs","BaseUserAddressesFetcher","getUserAddressGQL","getUserAddresses","BaseSearchDepotFetcher","getCarHireDepots","BaseGetUserCompanyOfficesFetcher","getUserCompanyOffices","BaseSearchHotelChainsFetcher","searchHotelChains","BaseConfermaOfficeNamesFetcher","getConfermaOfficeNames","BaseGetUserCurrentCarbonAllowanceFetcher","getUserCurrentCarbonAllowance","BaseGetRiskAlertsFetcher","getRiskAlerts","BaseSearchConfermaQuicklistFetcher","getConfermaQuicklist","BaseGetRailcardsFetcher","getRailcards","BaseEurostarQuoteFetcher","searchEurostar","RegExps","WHITE_CHARS","CAPS","EMAIL_VALIDATOR","UK_POSTCODE","EMAIL_REGEX","LoginErrorReason","LoginError","reason","statusText","message","TravellerSearchTypes","AuthInfo","username","password","overwrite","getAgent","getPasswd","getToken","getTokenStr","getChangePassTokenStr","oldPassword","confirmPassword","getResetPassTokenStr","TravellerObject","hasItem","fullname","forename","surname","makeTravellerObjectFromUser","user_id","email","childDOB","guest","equals","compare","name1","name2","InternalBasket","prices","mixedCurrency","miGroups","tempid","destructor","toSend","options","BasketInfoMiDetailsImpl","getBasket","withSupplemental","newBasket","BaseEnterpriseBasketService","acceptNewPriceUpdater","addItemToBasketUpdater","addUserToBasketItem","basketCreator","basketFetcher","bookBasketUpdater","deleteBasketUpdater","getMiAutoSugestionFetcher","removeItemFromBasketUpdater","revalidateBasketUpdater","setBasketItemMiGroupUpdater","setBasketItemMiValueUpdater","validateMiFreeValue","sendBasketForApprovalUpdater","getUserBasketsFetcher","SetBasketItemLeadPassenger","moveItemToADifferentBasket","updateBasketNotesUpdater","updateBasketTitleUpdater","setPaymentMethodUpdater","currentBaskets","highlightBasketItemsEmitter","basketChangeEmitter","baskets","basketList","basketPrices","list","menuState","OUT","currentBasketID","getfullUserDetails","userData","basketStatus","findBasket","unsubscribe","getAllOpenBaskets","toPromise","checkDetails","updateOne","search_objects","booking_chosen","chosen","bi","observer","removeBasketItem","getBookedBasket","findOrCreateBasket","allOpenBaskets","createBasket","owner","reference","notes","createdAt","updatedAt","createBasketOnDB","toReturn","toggleMenu","IN","FLAT","closeMenu","getLatestBasketItemForTypes","latestItems","serviceToCheck","ajv","Ajv","validateDetailSchema","compile","detailSchema","validateSearchSchema","searchQuerySchema","getNumberItemsForBasket","removeBasket","intBa","continueSearchAndBook","itiniaryUrl","latestBasketItems","nextSearch","getHighestSearchPriorityObject","searches","searchUrl","basket1","obs","basketItemid","acceptNewPrice","test","mi","miFreeValue","selectedValue","miValue","miId","partialLabel","bmiArray","bmi","moveBasketItem","originalBasketId","basketIdToMoveTo","updateBasketNotes","updateBasketTitle","newTitle","atLeastOneSearchChosen","getBasketStats","basketPricesObj","basketPricesKey","sum","SESSION_NAME","BaseHotelAvalibilityService","avalibilityFethcer","sessionStorage","behaviours","toFetch","readFromSession","hotelId","_getAvailabilityForId","timeout","clearTimeout","setTimeout","fetchAvalilbility","bind","room","LocalPrice","currencyConversion","localTotal","LocalCurrency","localCode","convertedCode","MIN_VALUE","MAX_VALUE","convertedTotal","roomPrices","numberOfHotelsWithPrice","AbstractHttpCallService","serialize","USER_SIGNEDOUT","BaseUserService","userUiConfigsFetcher","userProductsFetcher","userMessagesFetcher","fullUserDetails","bookingAllowedFor","travllerObject","userConfigs","userServices","setUser","user_data","userdata","result1","checkEmitUser","result2","result3","admin","_getFullUserDetails","getUserDropdownInfo","dropdown_info","account_type","getUsersFullname","getUserEmail","getUserBookingType","getUserTitle","booker_type","getUsersTitleAndFullName","getUserFavoriteValue","uf","ufValue","getUserFavoriteNumber","isUserFavoriteSet","createSelfTraveller","travellerIsUser","emptyUserData","createGuestUser","guestMobileCountryNo","guestMobileNumber","guest_nationality","gender","userIsClient","hasIgnorePolicy","useAgentCanBookFor","canBook","isTraveller","Traveller","userIsAgent","Company","userIsAdmin","userIsCompanyAdmin","company_admin","isSelfBook","SelfBook","isBooker","Booker","getUserId","userHasServiceProvider","provider","BaseLogonService","http","router","eventMessenager","loading","isLoggedIn","redirectUrl","refreshPromise","checkLogin","refreshToken","clearRefresh","formEncodedPostNoErrorHandling","Refresh","handleResponse","buttonCancel","buttonOk","buttonOkText","logout","setRefresh","catch","timeoutSubscription","authRefreshTimeout","login","again","clearSessionData","AccessToken","jwt","jwtObject","cookieLogin","post","LOGOUT_URL","LogoutSuccess","navigate","changePassword","authInfo","resetPassword","passwordResetToken","newPassword","formEncodedPost","RESET_PASSWORD","recoverPassword","RECOVER_PASSWORD_URL","handleError","modalValues","BaseModalOpenerService","openModalEvent","BaseEnterpriseMyBookingsService","_basketStatusIconClasses","_serviceTypeIconClasses","getSearchUserCanBookFor","getServiceTypeFilters","serviceTypeFilters","getBasketStatusFilters","basketStatusFilters","getServiceTypeFilterVanityName","getBasketStatusIconClass","getServiceTypeIconClass","getTotalPriceForBasketItems","getTravellerNamesFromBasketItems","travellerNames","allBasketItemsMatchStatus","basketItemStatus","every","getHotelAddress","hotelAddressArr","getHotelLocation","BaseEnterpriseSearchService","searchAirportsFetcher","searchAirlinesFetcher","hotelAvalibilityService","citiesFetcher","confermaCitiesFetcher","postcodeFetcher","railStationFetcher","saveUserAddressUpdater","userAddressesFetcher","getUserCompanyOfficesFetcher","searchHotelChainsFetcher","baseValidateIsPostcodeValidTester","depotFetcher","confermaOfficeNamesFetcher","baseDeleteUserAddressUpdater","baseDeleteRecentSearchUpdater","baseSaveRecentSearchUpdater","getUserCurrentCarbonAllowanceFetcher","loungeFetcher","parkingFetcher","flightFetcher","carhireFetcher","cabhireFetcher","railFetcher","irlFetcher","baseWebTokenService","riskAlertsFetcher","quicklistFetcher","getUserRecentSearchesFetcher","getRailCardsFetcher","searchUsersCanBookForFetcher","traveller_error","searchLoadingDone","searchTimedOut","newSearchStarted","firstLoad","highest_search_priority","show_errors","travellerValidationMessages","search_loading","search_airport_loading","countries","Countries","eurostations","toArray","EuroStations","init_search_objects","SESSION_TRAVELLER","objects","autoLogoutConfig","getAutoLogoutConfig","removeAllTravellers","minLevel","maxLevel","countryIsoCode","railStation","getAirportsList","hasLounge","hasParking","hasFastTrack","generalMatches","getAirportLocations","getCityLocations","isConfirma","getConfermaCityLocations","_getCityLocations","coordinates","suggestions","getPostcodeList","getSelectedPlaceById","placeId","place","place_id","getOfficeLocations","getStationLocations","getHotelLocationsList","forkJoin","removeTraveller","_removeTraveller","updateTravellerInformation","travellerToTest","addTraveller","travellerAlreadyAdded","currentNoOfTravellersGreaterOrEqualToMax","maxTravellers","canUseTravellerProfile","getCurrentNoOfTravellers","determineHighestSearchPriority","_getHighestSearchPriorityObject","highest","currentItem","priority","getSelectedOptions","cv","itemIndex","hasSimpleGuests","setGetMeThereSearchObjects","getMeThereSearchObjects","resetSearchParams","productSearchService","canSearch","hasHighestSearchPriority","priorityVal","getAllErrorMessages","concattedErrors","travellersContainUser","validateTravellers","BookerWithSelf","CompanyGroup","Tmc","Root","findPaxInTravellers","validateForms","searchObject","_findSearchObtect","resultUrl","context","finally","getTaxiStationLocations","isairport","supplier_code","getAddresses","ID","deleteUserAddressByID","getHotelChain","getRailCards","getSelectedtravellers","resetSearchObjects","tempTerminal","saveUserAddress","isPostcodeVaild","defaultVal","tomorrow","momentOutDateTime","momentInDateTime","hotel_availability","getCountryFullNameFromCountryCode","deleteRecentSearchByID","lookupEurostarStations","indexOf","searchTravellers","searchTravellersBy","inputWords","userName","employeeNumber","employeeId","BaseWebTokenService","modalOpenerService","_jwtToken","timer","timeoutDuration","timeOutDuration","jwtToken","_updateTimer","checkToLogout","lastUpdated","LOGOUT","BaseRouteHappyService","httpService","getAmenitiesForFlight","parseAmenities","response","linked","findId","datum","currentSegment","links","seat","seats","wifi","wifis","power","entertainments","entertainment","fresh_food","fresh_foods","beverage","beverages","layout","layouts","aircraft","aircrafts","convertClassString","seatClass","getUpasForFlight","LegDetails","leg","depPoint","arrPoint","touropID","flt_no","transNo","dep_date","dateDep","cabin_id","convertClass","seatClassBasic","parseResponse","makeKey","getAttributes","relationships","included","getRelationship","makeKeyFromData","legFares","leg_fares","legFare","upas","leg_fare_segments","legFareSegment","upa","BaseTester","BaseValidateMiFreeValueTester","validateMiFreeValueGQL","validateUserMIFreeValue","BaseValidateIsPostcodeValidTester","isPostcodeValidGQL","isPostcodeValid","UpdateableObject","mutate","BaseAcceptNewPriceUpdater","updater","BaseAddItemToBasketUpdater","addItemToBasket","BaseAddUserToBasketItemUpdater","BaseBookBasketUpdater","createBasketGQL","BaseCreateBasketUpdater","BasemoveBasketItemToBasket","BaseDeleteBasketUpdater","deleteBasket","BaseRemoveItemFromBasketUpdater","removeItemFromBasket","BaseDeleteUserAddressUpdater","deleteUserAddressGQL","deleteUserAddress","BaseDeleteRecentSearchUpdater","deleteRecentSearchGQL","deleteRecentSearch","BaseRevalidateBasketUpdater","revalidateBasketGQL","revalidateBasket","BaseSaveUserAddressUpdater","BaseSendBasketForApprovalUpdater","SendBasketForApprovalMutationGQL","BaseSetBasketItemLeadPassengerUpdater","setBasketItemLeadPassenger","BaseSetBasketItemMiGroupUpdater","setBasketItemMiGroupMutationGQL","setBasketItemMIGroup","BaseSetBasketItemMiValueUpdater","setBasketItemMIValue","BaseUpdateBasketTitleUpdater","BaseUpdateBasketNoteUpdater","baseUpdateBasketNotes","BaseSaveRecentSearchUpdater","SaveRecentSearchGQL","BaseSetPaymentOptionUpdater","setBasketItemPaymentMethod"],"mappings":"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A,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAAA,IAAA,MACAA,EAA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","sourcesContent":["import { BehaviorSubject, Observable, of } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\n\r\nimport { BaseStorageService } from '../services/storage.service';\r\nimport * as _ from 'lodash';\r\nimport { BasketItem, ServiceType } from '../types/graphql.types';\r\nimport { ICheapestPrice } from '../interfaces/cheapest-price';\r\nimport { RecentSearch } from '../../../types';\r\n\r\nexport abstract class BaseEnterpriseSearch<P, R, O extends Array<any>> {\r\n protected _cheapestResultPrice: ICheapestPrice = {\r\n amount: null,\r\n currencyCode: null\r\n };\r\n protected _originalUserSearch: P;\r\n public isValid = new BehaviorSubject<boolean>(false);\r\n public results: BehaviorSubject<O> = new BehaviorSubject<O>([] as O);\r\n public messages: BehaviorSubject<string[]> = new BehaviorSubject<string[]>(\r\n []\r\n );\r\n public messagesInfo: BehaviorSubject<string[]> = new BehaviorSubject<\r\n string[]\r\n >([]);\r\n public validationMessages: string[] = [];\r\n public infoMessages: string[] = [];\r\n public isLoading: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(\r\n false\r\n );\r\n\r\n protected abstract resultsSessionName: string;\r\n protected tempParams: P = {} as P;\r\n protected doChecks: boolean = true;\r\n public abstract type: ServiceType;\r\n public fullResults: O = [] as O; // should be an array of type specified by O\r\n\r\n private mapper = (results: R): O => {\r\n return results as unknown as O;\r\n };\r\n\r\n get cheapestPrice(): ICheapestPrice {\r\n return this._cheapestResultPrice;\r\n }\r\n\r\n get originalUserSearch(): P {\r\n return this._originalUserSearch;\r\n }\r\n\r\n constructor(\r\n protected storageService: BaseStorageService,\r\n mapper: (r: R) => O = null\r\n ) {\r\n if (mapper) {\r\n this.mapper = mapper;\r\n }\r\n }\r\n\r\n protected updateTempParams(tempParams: P): void {\r\n this.doChecks = false;\r\n Object.assign(this, tempParams);\r\n this._cheapestResultPrice = null;\r\n this.doChecks = true;\r\n }\r\n\r\n protected _startSearch(results: Observable<R>): Promise<boolean> {\r\n this.isLoading.next(true);\r\n this.fullResults = [] as O;\r\n return new Promise((resolve, reject) => {\r\n try {\r\n results.pipe(take(1)).subscribe(\r\n (results1: R) => {\r\n console.log('Got results', _.cloneDeep(results1));\r\n\r\n this.fullResults = this.mapper(results1);\r\n this._cheapestResultPrice = this.updateLowestPrice(\r\n this.fullResults\r\n );\r\n this.storageService.setSessionItem(\r\n this.resultsSessionName,\r\n this.makeSessionResults(this.fullResults)\r\n );\r\n this.results.next(this.fullResults);\r\n resolve(this.fullResults.length !== 0);\r\n },\r\n (error) => {\r\n this.results.next([] as O);\r\n resolve(false);\r\n this.isLoading.next(false);\r\n },\r\n () => {\r\n this.isLoading.next(false);\r\n }\r\n );\r\n } catch (err) {\r\n this.storageService.setSessionItem(this.resultsSessionName, []);\r\n this.isLoading.next(false);\r\n this.results.next([] as O);\r\n reject(err);\r\n }\r\n });\r\n }\r\n reset(): void {\r\n this.storageService.removeSessionItem(this.resultsSessionName);\r\n this.fullResults = [] as O;\r\n this.results.next([] as O);\r\n this.resetQuery();\r\n }\r\n\r\n protected makeSessionResults(data: O): any {\r\n return data;\r\n }\r\n\r\n protected abstract resetQuery(): void;\r\n\r\n abstract startSearch(): Promise<boolean>;\r\n\r\n abstract startRecentSearch(recentSearch: RecentSearch): void;\r\n\r\n abstract updateLowestPrice(results: O): ICheapestPrice;\r\n /**\r\n *\r\n * @param previousItems basketitems that already been added. This can be used to set up the defaults for the search.\r\n */\r\n abstract updateFromPreviousSearches(\r\n previousItems: Record<ServiceType, BasketItem>\r\n ): void;\r\n}\r\n","export class ModalTypes {\r\n static readonly ModalErrorComponent = new ModalTypes('ModalErrorComponent');\r\n static readonly ModalNetWorkErrorComponent = new ModalTypes(\r\n 'ModalNetworkErrorComponent'\r\n );\r\n static readonly BaseModalComponent = new ModalTypes('BaseModalComponent');\r\n static readonly AutoLogout = new ModalTypes('AutoLogout');\r\n static readonly RiskAlertDetail = new ModalTypes('RiskAlertDetailModalComponent');\r\n\r\n private _component: any = null;\r\n get component(): any {\r\n return this._component;\r\n }\r\n\r\n set component(value: any) {\r\n if (this._component) {\r\n console.warn(\r\n 'Compnent already set for ' + this.value,\r\n this._component,\r\n value\r\n );\r\n }\r\n this._component = value;\r\n }\r\n protected constructor(public value: string) {\r\n (ModalTypes as Record<string, any>)[value] = this;\r\n }\r\n}\r\n","import * as Apollo from 'apollo-angular';\r\nimport { ApolloQueryResult, FetchResult } from '@apollo/client/core';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { ModalTypes } from '../classes/modal-types.enum';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map, take, catchError } from 'rxjs/operators';\r\n\r\nexport abstract class BaseNetworkCall<Q, A, R, P> {\r\n constructor(private modelService: BaseModalOpenerService) {}\r\n\r\n checkError(error: any) {\r\n if (error) {\r\n this.modelService.open(\r\n ModalTypes.ModalNetWorkErrorComponent,\r\n {},\r\n { error }\r\n );\r\n throw error;\r\n }\r\n }\r\n\r\n processCall(\r\n stream: Observable<\r\n FetchResult<{}, Record<string, any>, Record<string, any>>\r\n >\r\n ): Observable<P> {\r\n return stream.pipe(\r\n take(1),\r\n map((results: ApolloQueryResult<R>) => {\r\n this.checkError(results.error);\r\n return this.getDataFromResult(results);\r\n }),\r\n catchError((error: any) => {\r\n this.checkError(error);\r\n return of({} as P);\r\n })\r\n );\r\n }\r\n protected abstract getDataFromResult(results: ApolloQueryResult<R>): P;\r\n}\r\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || from);\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","export type Maybe<T> = T | null;\nexport type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };\nexport type FieldWrapper<T> = T;\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: string;\n String: string;\n Boolean: boolean;\n Int: number;\n Float: number;\n Date: any;\n DateTime: any;\n JSON: any;\n};\n\nexport type Address = {\n __typename?: 'Address';\n id: FieldWrapper<Scalars['ID']>;\n description?: Maybe<FieldWrapper<Scalars['String']>>;\n numberOrName?: Maybe<FieldWrapper<Scalars['String']>>;\n street?: Maybe<FieldWrapper<Scalars['String']>>;\n town?: Maybe<FieldWrapper<Scalars['String']>>;\n county?: Maybe<FieldWrapper<Scalars['String']>>;\n postcode?: Maybe<FieldWrapper<Scalars['String']>>;\n countryCode?: Maybe<FieldWrapper<Scalars['String']>>;\n userPrimary?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n officePrimary?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n};\n\nexport type AfterCancellationInfo = {\n __typename?: 'AfterCancellationInfo';\n cancelled: FieldWrapper<Scalars['Boolean']>;\n cancellationFee: FieldWrapper<Scalars['Float']>;\n};\n\nexport type AirlineResult = {\n __typename?: 'AirlineResult';\n id: FieldWrapper<Scalars['ID']>;\n name?: Maybe<FieldWrapper<Scalars['String']>>;\n iata?: Maybe<FieldWrapper<Scalars['String']>>;\n icao?: Maybe<FieldWrapper<Scalars['String']>>;\n alias?: Maybe<FieldWrapper<Scalars['String']>>;\n callsign?: Maybe<FieldWrapper<Scalars['String']>>;\n active?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n continent?: Maybe<FieldWrapper<Scalars['String']>>;\n country?: Maybe<FieldWrapper<Scalars['String']>>;\n countryCode?: Maybe<FieldWrapper<Scalars['String']>>;\n bannerImage?: Maybe<FieldWrapper<Scalars['String']>>;\n logoImage?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type AirlineResults = {\n __typename?: 'AirlineResults';\n iataMatch?: Maybe<FieldWrapper<AirlineResult>>;\n generalMatches: Array<FieldWrapper<AirlineResult>>;\n};\n\nexport type Airport = {\n __typename?: 'Airport';\n id: FieldWrapper<Scalars['ID']>;\n name: FieldWrapper<Scalars['String']>;\n iata?: Maybe<FieldWrapper<Scalars['String']>>;\n icao?: Maybe<FieldWrapper<Scalars['String']>>;\n terminals: Array<FieldWrapper<Scalars['String']>>;\n hasLounge?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n hasParking?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n hasFastTrack?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n hasPublicTravel?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n locationDetails?: Maybe<FieldWrapper<LocationDetail>>;\n};\n\nexport type AirportDetail = {\n __typename?: 'AirportDetail';\n iata?: Maybe<FieldWrapper<Scalars['String']>>;\n icao?: Maybe<FieldWrapper<Scalars['String']>>;\n latitude?: Maybe<FieldWrapper<Scalars['Float']>>;\n longitude?: Maybe<FieldWrapper<Scalars['Float']>>;\n altitude?: Maybe<FieldWrapper<Scalars['Float']>>;\n state?: Maybe<FieldWrapper<Scalars['String']>>;\n city?: Maybe<FieldWrapper<Scalars['String']>>;\n road?: Maybe<FieldWrapper<Scalars['String']>>;\n popularity?: Maybe<FieldWrapper<Scalars['Int']>>;\n area?: Maybe<FieldWrapper<Scalars['String']>>;\n location?: Maybe<FieldWrapper<Scalars['String']>>;\n offset?: Maybe<FieldWrapper<Scalars['String']>>;\n airportName?: Maybe<FieldWrapper<Scalars['String']>>;\n countryName?: Maybe<FieldWrapper<Scalars['String']>>;\n countryCode?: Maybe<FieldWrapper<Scalars['String']>>;\n postcode?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type AirportResults = {\n __typename?: 'AirportResults';\n iataMatch?: Maybe<FieldWrapper<Airport>>;\n generalMatches: Array<FieldWrapper<Airport>>;\n};\n\nexport enum ApplicationStage {\n BeforeSearch = 'BEFORE_SEARCH',\n AfterSearch = 'AFTER_SEARCH'\n}\n\nexport type Approvee = {\n __typename?: 'Approvee';\n approvee: FieldWrapper<User>;\n active: FieldWrapper<Scalars['Boolean']>;\n priority: FieldWrapper<Scalars['Int']>;\n};\n\nexport type Approver = {\n __typename?: 'Approver';\n approver: FieldWrapper<User>;\n active: FieldWrapper<Scalars['Boolean']>;\n priority: FieldWrapper<Scalars['Int']>;\n};\n\nexport type BaggageAllowance = {\n __typename?: 'BaggageAllowance';\n type: FieldWrapper<BaggageType>;\n qty: FieldWrapper<Scalars['Int']>;\n maxKG?: Maybe<FieldWrapper<Scalars['Float']>>;\n maxLBS?: Maybe<FieldWrapper<Scalars['Float']>>;\n};\n\nexport enum BaggageType {\n CheckIn = 'CheckIn',\n HandCarry = 'HandCarry'\n}\n\nexport type Basket = {\n __typename?: 'Basket';\n id: FieldWrapper<Scalars['ID']>;\n owner: FieldWrapper<User>;\n reference: FieldWrapper<Scalars['String']>;\n title: FieldWrapper<Scalars['String']>;\n notes?: Maybe<FieldWrapper<Scalars['String']>>;\n createdAt: FieldWrapper<Scalars['DateTime']>;\n updatedAt: FieldWrapper<Scalars['DateTime']>;\n basketItems: Array<FieldWrapper<BasketItem>>;\n status: FieldWrapper<BasketStatus>;\n companyGroup?: Maybe<FieldWrapper<CompanyGroup>>;\n validated: FieldWrapper<Scalars['Boolean']>;\n bookedAt?: Maybe<FieldWrapper<Scalars['DateTime']>>;\n};\n\nexport type BasketItem = {\n __typename?: 'BasketItem';\n id: FieldWrapper<Scalars['ID']>;\n basket: FieldWrapper<Basket>;\n adults: FieldWrapper<Scalars['Int']>;\n children: FieldWrapper<Scalars['Int']>;\n infants: FieldWrapper<Scalars['Int']>;\n detail: FieldWrapper<Scalars['JSON']>;\n detailHash: FieldWrapper<Scalars['String']>;\n createdAt: FieldWrapper<Scalars['DateTime']>;\n updatedAt: FieldWrapper<Scalars['DateTime']>;\n expiry: FieldWrapper<Scalars['DateTime']>;\n expired: FieldWrapper<Scalars['Boolean']>;\n users: Array<FieldWrapper<User>>;\n userPassengerTypes: Array<FieldWrapper<UserPassengerType>>;\n leadPassenger?: Maybe<FieldWrapper<User>>;\n service: FieldWrapper<Service>;\n searchQuery: FieldWrapper<Scalars['JSON']>;\n price: FieldWrapper<Scalars['Float']>;\n currency: FieldWrapper<CurrencyCode>;\n miGroupsAvailable: Array<FieldWrapper<Scalars['String']>>;\n miGroupSelected?: Maybe<FieldWrapper<Scalars['String']>>;\n managementInfo: Array<FieldWrapper<ManagementInfo>>;\n validated: FieldWrapper<Scalars['Boolean']>;\n latestValidation?: Maybe<FieldWrapper<Scalars['DateTime']>>;\n latestValidationPrice?: Maybe<FieldWrapper<Scalars['Int']>>;\n latestValidationPriceDifference?: Maybe<FieldWrapper<Scalars['Int']>>;\n latestValidationAvailable?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n bookingThirdPartyReference?: Maybe<FieldWrapper<Scalars['String']>>;\n pnrLocator?: Maybe<FieldWrapper<Scalars['String']>>;\n status: FieldWrapper<BasketItemStatus>;\n availablePaymentMethods: Array<FieldWrapper<PaymentMethod>>;\n selectedPaymentMethod?: Maybe<FieldWrapper<PaymentMethod>>;\n perItemSupplementaryBookingInfoSchema: FieldWrapper<Scalars['JSON']>;\n perPassengerSupplementaryBookingInfoSchema: FieldWrapper<Scalars['JSON']>;\n perItemAddress: FieldWrapper<Scalars['Boolean']>;\n perItemPhoneNumber: FieldWrapper<Scalars['Boolean']>;\n perPassengerAddress: FieldWrapper<Scalars['Boolean']>;\n perPassengerPhoneNumber: FieldWrapper<Scalars['Boolean']>;\n cancellable: FieldWrapper<Scalars['Boolean']>;\n amendable: FieldWrapper<Scalars['Boolean']>;\n co2PerPassenger: FieldWrapper<Scalars['Float']>;\n co2PerItem: FieldWrapper<Scalars['Float']>;\n outboundDate: FieldWrapper<Scalars['DateTime']>;\n inboundDate?: Maybe<FieldWrapper<Scalars['DateTime']>>;\n};\n\nexport enum BasketItemStatus {\n Open = 'OPEN',\n Booked = 'BOOKED',\n BookingFailed = 'BOOKING_FAILED'\n}\n\nexport enum BasketStatus {\n Open = 'OPEN',\n Booked = 'BOOKED',\n AwaitingApproval = 'AWAITING_APPROVAL',\n Approved = 'APPROVED',\n Disapproved = 'DISAPPROVED',\n PartiallyBooked = 'PARTIALLY_BOOKED',\n BookingFailed = 'BOOKING_FAILED'\n}\n\nexport type BeforeCancellationInfo = {\n __typename?: 'BeforeCancellationInfo';\n cancellable: FieldWrapper<Scalars['Boolean']>;\n info?: Maybe<FieldWrapper<Scalars['String']>>;\n cancellationFee?: Maybe<FieldWrapper<Scalars['Float']>>;\n};\n\nexport enum BookerType {\n Root = 'ROOT',\n Tmc = 'TMC',\n Company = 'COMPANY',\n Office = 'OFFICE',\n CompanyGroup = 'COMPANY_GROUP',\n SelfBook = 'SELF_BOOK',\n Booker = 'BOOKER',\n Traveller = 'TRAVELLER',\n BookerWithSelf = 'BOOKER_WITH_SELF'\n}\n\nexport type BookingAddress = {\n numberOrName: Scalars['String'];\n street: Scalars['String'];\n town: Scalars['String'];\n county: Scalars['String'];\n postcode: Scalars['String'];\n countryCode: Scalars['String'];\n};\n\nexport type BookingPhoneNumber = {\n countryCode: Scalars['String'];\n areaCode: Scalars['String'];\n number: Scalars['String'];\n extension?: Maybe<Scalars['String']>;\n};\n\nexport type CabHireLocation = {\n __typename?: 'CabHireLocation';\n address: FieldWrapper<Scalars['String']>;\n postcode: FieldWrapper<Scalars['String']>;\n latitude?: Maybe<FieldWrapper<Scalars['Float']>>;\n longitude?: Maybe<FieldWrapper<Scalars['Float']>>;\n};\n\nexport type CabHireLocationInput = {\n address: Scalars['String'];\n postcode: Scalars['String'];\n};\n\nexport type CabHireQuote = {\n __typename?: 'CabHireQuote';\n id: FieldWrapper<Scalars['ID']>;\n source: FieldWrapper<Scalars['String']>;\n sourceId: FieldWrapper<Scalars['Int']>;\n supplierName: FieldWrapper<Scalars['String']>;\n estimatedCO2: FieldWrapper<Scalars['Float']>;\n co2PerPassenger: FieldWrapper<Scalars['Float']>;\n co2PerItem: FieldWrapper<Scalars['Float']>;\n price: FieldWrapper<Scalars['Float']>;\n currency: FieldWrapper<CurrencyCode>;\n vehicleType: FieldWrapper<CabHireVehicleType>;\n tripDistanceMetres?: Maybe<FieldWrapper<Scalars['Int']>>;\n tripDurationSeconds?: Maybe<FieldWrapper<Scalars['Int']>>;\n departs: FieldWrapper<Scalars['DateTime']>;\n tmcPreferred: FieldWrapper<Scalars['Boolean']>;\n companyPreferred: FieldWrapper<Scalars['Boolean']>;\n officePreferred: FieldWrapper<Scalars['Boolean']>;\n tmcPreferredMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n companyPreferredMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n officePreferredMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n unavailable: FieldWrapper<Scalars['Boolean']>;\n unavailableMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n fromLocation: FieldWrapper<CabHireLocation>;\n toLocation: FieldWrapper<CabHireLocation>;\n vias: Array<FieldWrapper<CabHireLocation>>;\n};\n\nexport type CabHireResult = {\n __typename?: 'CabHireResult';\n results: Array<FieldWrapper<CabHireQuote>>;\n errors: Array<FieldWrapper<SearchError>>;\n};\n\nexport enum CabHireVehicleType {\n Any = 'Any',\n DdaCar = 'DDACar',\n CoachLarge = 'CoachLarge',\n CoachSmall = 'CoachSmall',\n Economy = 'Economy',\n EconomyCoach = 'EconomyCoach',\n EconomyMpvSmall = 'EconomyMPVSmall',\n EconomyMpvLarge = 'EconomyMPVLarge',\n EconomySuv = 'EconomySUV',\n ExecutiveCar = 'ExecutiveCar',\n ExecutiveSuv = 'ExecutiveSUV',\n GreenCar = 'GreenCar',\n GreenExecutive = 'GreenExecutive',\n GreenSuv = 'GreenSUV',\n SmallMpv = 'SmallMPV',\n MediumMpv = 'MediumMPV',\n LargeMpv = 'LargeMPV',\n StandardCar = 'StandardCar',\n Suv = 'SUV',\n BlackCab = 'BlackCab',\n TaxiSuv = 'TaxiSUV'\n}\n\nexport type CarHireAdditionalInfoItem = {\n __typename?: 'CarHireAdditionalInfoItem';\n name?: Maybe<FieldWrapper<Scalars['String']>>;\n text?: Maybe<Array<Maybe<FieldWrapper<Scalars['String']>>>>;\n json?: Maybe<FieldWrapper<Scalars['String']>>;\n custom?: Maybe<Array<Maybe<FieldWrapper<CarHireCustom>>>>;\n};\n\nexport type CarHireAddress = {\n __typename?: 'CarHireAddress';\n name?: Maybe<FieldWrapper<Scalars['String']>>;\n topLine?: Maybe<FieldWrapper<Scalars['String']>>;\n city?: Maybe<FieldWrapper<Scalars['String']>>;\n region?: Maybe<FieldWrapper<Scalars['String']>>;\n postCode?: Maybe<FieldWrapper<Scalars['String']>>;\n country?: Maybe<FieldWrapper<Scalars['String']>>;\n countryCode?: Maybe<FieldWrapper<Scalars['String']>>;\n stateCode?: Maybe<FieldWrapper<Scalars['String']>>;\n latitude?: Maybe<FieldWrapper<Scalars['Float']>>;\n longitude?: Maybe<FieldWrapper<Scalars['Float']>>;\n};\n\nexport type CarHireAirportInput = {\n pickupCode?: Maybe<Scalars['String']>;\n dropoffCode?: Maybe<Scalars['String']>;\n};\n\nexport type CarHireCharge = {\n __typename?: 'CarHireCharge';\n label?: Maybe<FieldWrapper<Scalars['String']>>;\n amount?: Maybe<FieldWrapper<Scalars['String']>>;\n currencyCode?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type CarHireCityInput = {\n pickupCountryCode?: Maybe<Scalars['String']>;\n pickupCity?: Maybe<Scalars['String']>;\n dropoffCountryCode?: Maybe<Scalars['String']>;\n dropoffCity?: Maybe<Scalars['String']>;\n};\n\nexport enum CarHireClass {\n Mini = 'Mini',\n MiniElite = 'MiniElite',\n Economy = 'Economy',\n EconomyElite = 'EconomyElite',\n Compact = 'Compact',\n CompactElite = 'CompactElite',\n Intermediate = 'Intermediate',\n IntermediateElite = 'IntermediateElite',\n Standard = 'Standard',\n StandardElite = 'StandardElite',\n Fullsize = 'Fullsize',\n FullsizeElite = 'FullsizeElite',\n Premium = 'Premium',\n PremiumElite = 'PremiumElite',\n Luxury = 'Luxury',\n LuxuryElite = 'LuxuryElite',\n Oversize = 'Oversize',\n Special = 'Special'\n}\n\nexport type CarHireCustom = {\n __typename?: 'CarHireCustom';\n name?: Maybe<FieldWrapper<Scalars['String']>>;\n text?: Maybe<Array<Maybe<FieldWrapper<Scalars['String']>>>>;\n};\n\nexport type CarHireDepot = {\n __typename?: 'CarHireDepot';\n countryCode?: Maybe<FieldWrapper<Scalars['String']>>;\n locationCode?: Maybe<FieldWrapper<Scalars['String']>>;\n extendedLocationCode?: Maybe<FieldWrapper<Scalars['String']>>;\n vendorCode?: Maybe<FieldWrapper<Scalars['String']>>;\n latitude?: Maybe<FieldWrapper<Scalars['Float']>>;\n longitude?: Maybe<FieldWrapper<Scalars['Float']>>;\n vendor?: Maybe<FieldWrapper<Scalars['String']>>;\n addressLines?: Maybe<Array<Maybe<FieldWrapper<Scalars['String']>>>>;\n cityName?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type CarHireDepotResult = {\n __typename?: 'CarHireDepotResult';\n results: Array<FieldWrapper<CarHireDepot>>;\n errors: Array<FieldWrapper<SearchError>>;\n};\n\nexport type CarHireDetailRequestResponse = {\n __typename?: 'CarHireDetailRequestResponse';\n identifiers?: Maybe<FieldWrapper<CarHireIdentifiers>>;\n vendor?: Maybe<FieldWrapper<CarHireVendor>>;\n address?: Maybe<FieldWrapper<CarHireAddress>>;\n additionalInfo?: Maybe<Array<FieldWrapper<CarHireAdditionalInfoItem>>>;\n};\n\nexport type CarHireDisplayRecord = {\n __typename?: 'CarHireDisplayRecord';\n status?: Maybe<FieldWrapper<Scalars['String']>>;\n pickup?: Maybe<FieldWrapper<Scalars['String']>>;\n dropoff?: Maybe<FieldWrapper<Scalars['String']>>;\n vendor?: Maybe<FieldWrapper<CarHireVendor>>;\n vehicle?: Maybe<FieldWrapper<CarHireVehicle>>;\n charges?: Maybe<Array<Maybe<FieldWrapper<CarHireCharge>>>>;\n pickupLocation?: Maybe<FieldWrapper<CarHireAddress>>;\n returnLocation?: Maybe<FieldWrapper<CarHireAddress>>;\n additionalInfo?: Maybe<Array<Maybe<FieldWrapper<CarHireAdditionalInfoItem>>>>;\n};\n\nexport type CarHireIdentifiers = {\n __typename?: 'CarHireIdentifiers';\n locator?: Maybe<FieldWrapper<Scalars['String']>>;\n rph?: Maybe<FieldWrapper<Scalars['String']>>;\n status?: Maybe<FieldWrapper<Scalars['String']>>;\n vehType?: Maybe<FieldWrapper<Scalars['String']>>;\n locationCode?: Maybe<FieldWrapper<Scalars['String']>>;\n extendedLocationCode?: Maybe<FieldWrapper<Scalars['String']>>;\n locationName?: Maybe<FieldWrapper<Scalars['String']>>;\n dropOffLocation?: Maybe<FieldWrapper<Scalars['String']>>;\n pickupDateTime?: Maybe<FieldWrapper<Scalars['DateTime']>>;\n dropoffDateTime?: Maybe<FieldWrapper<Scalars['DateTime']>>;\n vendor?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type CarHireInputIdentifiers = {\n locator?: Maybe<Scalars['String']>;\n rph?: Maybe<Scalars['String']>;\n status?: Maybe<Scalars['String']>;\n vehType?: Maybe<Scalars['String']>;\n locationCode?: Maybe<Scalars['String']>;\n extendedLocationCode?: Maybe<Scalars['String']>;\n locationName?: Maybe<Scalars['String']>;\n dropOffLocation?: Maybe<Scalars['String']>;\n pickupDateTime?: Maybe<Scalars['DateTime']>;\n dropoffDateTime?: Maybe<Scalars['DateTime']>;\n vendor?: Maybe<Scalars['String']>;\n};\n\nexport type CarHireLocationInput = {\n pickupCountryCode?: Maybe<Scalars['String']>;\n pickupPostalCode?: Maybe<Scalars['String']>;\n dropoffCountryCode?: Maybe<Scalars['String']>;\n dropoffPostalCode?: Maybe<Scalars['String']>;\n};\n\nexport type CarHireResult = {\n __typename?: 'CarHireResult';\n results: Array<FieldWrapper<CarHireVehicleAvailibility>>;\n errors: Array<FieldWrapper<SearchError>>;\n};\n\nexport enum CarHireTransmission {\n Manual = 'Manual',\n Auto = 'Auto'\n}\n\nexport enum CarHireType {\n TwoToThreeDoor = 'TwoToThreeDoor',\n TwoOrFourDoor = 'TwoOrFourDoor',\n FourToFiveDoor = 'FourToFiveDoor',\n WagonOrEstate = 'WagonOrEstate',\n PassengerVan = 'PassengerVan',\n Limousine = 'Limousine',\n Sport = 'Sport',\n Convertible = 'Convertible',\n Suv = 'SUV',\n OpenAirAllTerrain = 'OpenAirAllTerrain',\n Special = 'Special',\n PickUpRegularCab = 'PickUpRegularCab',\n PickUpExtendedCab = 'PickUpExtendedCab',\n SpecialOfferCar = 'SpecialOfferCar',\n Coupe = 'Coupe',\n MonospaceEuropeanUse = 'MonospaceEuropeanUse',\n MotorHome = 'MotorHome',\n TwoWheelVehicle = 'TwoWheelVehicle',\n Roadster = 'Roadster'\n}\n\nexport type CarHireVehicle = {\n __typename?: 'CarHireVehicle';\n class?: Maybe<FieldWrapper<Scalars['String']>>;\n type?: Maybe<FieldWrapper<Scalars['String']>>;\n transmission?: Maybe<FieldWrapper<Scalars['String']>>;\n aircon?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n description?: Maybe<FieldWrapper<Scalars['String']>>;\n images?: Maybe<Array<Maybe<FieldWrapper<Scalars['String']>>>>;\n};\n\nexport type CarHireVehicleAvailibility = {\n __typename?: 'CarHireVehicleAvailibility';\n source: FieldWrapper<Scalars['String']>;\n sourceId: FieldWrapper<Scalars['Int']>;\n identifiers?: Maybe<FieldWrapper<CarHireIdentifiers>>;\n displayRecord?: Maybe<FieldWrapper<CarHireDisplayRecord>>;\n tmcPreferred: FieldWrapper<Scalars['Boolean']>;\n companyPreferred: FieldWrapper<Scalars['Boolean']>;\n officePreferred: FieldWrapper<Scalars['Boolean']>;\n tmcPreferredMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n companyPreferredMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n officePreferredMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n unavailable: FieldWrapper<Scalars['Boolean']>;\n unavailableMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n co2PerPassenger: FieldWrapper<Scalars['Float']>;\n co2PerItem: FieldWrapper<Scalars['Float']>;\n};\n\nexport type CarHireVendor = {\n __typename?: 'CarHireVendor';\n name?: Maybe<FieldWrapper<Scalars['String']>>;\n logo?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type CarbonAllowance = {\n __typename?: 'CarbonAllowance';\n id: FieldWrapper<Scalars['ID']>;\n startOfPeriod: FieldWrapper<Scalars['DateTime']>;\n endOfPeriod: FieldWrapper<Scalars['DateTime']>;\n remainingCo2: FieldWrapper<Scalars['Float']>;\n totalCo2: FieldWrapper<Scalars['Float']>;\n carbonPolicySource: FieldWrapper<CarbonPolicySource>;\n periodConsumption: Array<FieldWrapper<CarbonConsumption>>;\n company?: Maybe<FieldWrapper<Company>>;\n office?: Maybe<FieldWrapper<Office>>;\n user: FieldWrapper<User>;\n};\n\nexport type CarbonConsumption = {\n __typename?: 'CarbonConsumption';\n id: FieldWrapper<Scalars['ID']>;\n consumed: FieldWrapper<Scalars['Float']>;\n datetime: FieldWrapper<Scalars['DateTime']>;\n};\n\nexport enum CarbonPolicySource {\n Company = 'COMPANY',\n Office = 'OFFICE',\n User = 'USER'\n}\n\nexport type City = {\n __typename?: 'City';\n id: FieldWrapper<Scalars['ID']>;\n name: FieldWrapper<Scalars['String']>;\n country: FieldWrapper<Scalars['String']>;\n countryCode: FieldWrapper<Scalars['String']>;\n coordinates: FieldWrapper<GeoCoordinates>;\n continentName: FieldWrapper<Scalars['String']>;\n};\n\nexport type Company = {\n __typename?: 'Company';\n id: FieldWrapper<Scalars['ID']>;\n name: FieldWrapper<Scalars['String']>;\n tmc: FieldWrapper<Tmc>;\n offices: Array<FieldWrapper<Office>>;\n companyGroups: Array<FieldWrapper<CompanyGroup>>;\n addresses: Array<FieldWrapper<Address>>;\n phoneNumbers: Array<FieldWrapper<PhoneNumber>>;\n supportPhoneNumber?: Maybe<FieldWrapper<PhoneNumber>>;\n createdAt: FieldWrapper<Scalars['DateTime']>;\n updatedAt: FieldWrapper<Scalars['DateTime']>;\n supportEmail: FieldWrapper<Scalars['String']>;\n co2ConsumptionPolicy?: Maybe<FieldWrapper<Scalars['String']>>;\n co2AllowancePeriod?: Maybe<FieldWrapper<Scalars['String']>>;\n co2AllowancePerPeriod?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type CompanyGroup = {\n __typename?: 'CompanyGroup';\n id: FieldWrapper<Scalars['ID']>;\n name: FieldWrapper<Scalars['String']>;\n description: FieldWrapper<Scalars['String']>;\n company: FieldWrapper<Company>;\n createdAt: FieldWrapper<Scalars['DateTime']>;\n updatedAt: FieldWrapper<Scalars['DateTime']>;\n};\n\nexport type ConfermaBlockedHotelsResult = {\n __typename?: 'ConfermaBlockedHotelsResult';\n results: FieldWrapper<Scalars['Boolean']>;\n errors: Array<FieldWrapper<SearchError>>;\n};\n\nexport type ConfermaCard = {\n __typename?: 'ConfermaCard';\n id: FieldWrapper<Scalars['ID']>;\n label?: Maybe<FieldWrapper<Scalars['String']>>;\n token?: Maybe<FieldWrapper<Scalars['String']>>;\n webInstanceId?: Maybe<FieldWrapper<Scalars['String']>>;\n company?: Maybe<FieldWrapper<Scalars['ID']>>;\n office?: Maybe<FieldWrapper<Scalars['ID']>>;\n user?: Maybe<FieldWrapper<Scalars['ID']>>;\n status: FieldWrapper<ConfermaCardStatus>;\n expires?: Maybe<FieldWrapper<Scalars['String']>>;\n cardHolderName?: Maybe<FieldWrapper<Scalars['String']>>;\n cardType?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type ConfermaCardResults = {\n __typename?: 'ConfermaCardResults';\n id: FieldWrapper<Scalars['ID']>;\n label?: Maybe<FieldWrapper<Scalars['String']>>;\n token?: Maybe<FieldWrapper<Scalars['String']>>;\n cardHolderName?: Maybe<FieldWrapper<Scalars['String']>>;\n cardType?: Maybe<FieldWrapper<Scalars['String']>>;\n expires?: Maybe<FieldWrapper<Scalars['Date']>>;\n status: FieldWrapper<ConfermaCardStatus>;\n};\n\nexport enum ConfermaCardStatus {\n Pending = 'Pending',\n Enabled = 'Enabled',\n Disabled = 'Disabled'\n}\n\nexport type ConfermaCityLocation = {\n __typename?: 'ConfermaCityLocation';\n foundExact: FieldWrapper<Scalars['Boolean']>;\n suggestions?: Maybe<Array<Maybe<FieldWrapper<ConfermaCityLocationOptions>>>>;\n};\n\nexport type ConfermaCityLocationOptions = {\n __typename?: 'ConfermaCityLocationOptions';\n name: FieldWrapper<Scalars['String']>;\n countryCode: FieldWrapper<Scalars['String']>;\n latitude?: Maybe<FieldWrapper<Scalars['Float']>>;\n longitude?: Maybe<FieldWrapper<Scalars['Float']>>;\n};\n\nexport type ConfermaCreateCardResult = {\n __typename?: 'ConfermaCreateCardResult';\n results?: Maybe<FieldWrapper<Scalars['String']>>;\n errors: Array<FieldWrapper<SearchError>>;\n};\n\nexport type ConfermaOfficeAddress = {\n __typename?: 'ConfermaOfficeAddress';\n addressName?: Maybe<FieldWrapper<Scalars['String']>>;\n addressLine1?: Maybe<FieldWrapper<Scalars['String']>>;\n addressLine2?: Maybe<FieldWrapper<Scalars['String']>>;\n addressLine3?: Maybe<FieldWrapper<Scalars['String']>>;\n postalCode?: Maybe<FieldWrapper<Scalars['String']>>;\n city?: Maybe<FieldWrapper<Scalars['String']>>;\n countryCode?: Maybe<FieldWrapper<Scalars['String']>>;\n countryName?: Maybe<FieldWrapper<Scalars['String']>>;\n telephoneNumber?: Maybe<FieldWrapper<Scalars['String']>>;\n facsimileNumber?: Maybe<FieldWrapper<Scalars['String']>>;\n emailAddress?: Maybe<FieldWrapper<Scalars['String']>>;\n stateProvince?: Maybe<FieldWrapper<Scalars['String']>>;\n mobileNumber?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type ConfermaOfficeHotels = {\n __typename?: 'ConfermaOfficeHotels';\n hotelId?: Maybe<FieldWrapper<Scalars['Int']>>;\n hotelName?: Maybe<FieldWrapper<Scalars['String']>>;\n isPreferred?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n};\n\nexport type ConfermaOfficeInfo = {\n __typename?: 'ConfermaOfficeInfo';\n id: FieldWrapper<Scalars['Int']>;\n name?: Maybe<FieldWrapper<Scalars['String']>>;\n address?: Maybe<FieldWrapper<ConfermaOfficeAddress>>;\n closestAirport?: Maybe<FieldWrapper<Scalars['String']>>;\n closestTrainStation?: Maybe<FieldWrapper<Scalars['String']>>;\n longitude?: Maybe<FieldWrapper<Scalars['String']>>;\n latitude?: Maybe<FieldWrapper<Scalars['String']>>;\n closestHotels?: Maybe<Array<Maybe<FieldWrapper<ConfermaOfficeHotels>>>>;\n};\n\nexport type ConfermaOfficeNames = {\n __typename?: 'ConfermaOfficeNames';\n id: FieldWrapper<Scalars['Int']>;\n name: FieldWrapper<Scalars['String']>;\n};\n\nexport type ConfermaOfficeNamesResult = {\n __typename?: 'ConfermaOfficeNamesResult';\n results?: Maybe<Array<Maybe<FieldWrapper<ConfermaOfficeNames>>>>;\n errors: Array<FieldWrapper<SearchError>>;\n};\n\nexport type ConfermaOfficeResult = {\n __typename?: 'ConfermaOfficeResult';\n results?: Maybe<FieldWrapper<ConfermaOfficeInfo>>;\n errors: Array<FieldWrapper<SearchError>>;\n};\n\nexport type Country = {\n __typename?: 'Country';\n id: FieldWrapper<Scalars['ID']>;\n name: FieldWrapper<Scalars['String']>;\n code: FieldWrapper<Scalars['String']>;\n dialCode?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport enum CurrencyCode {\n Aed = 'AED',\n Afn = 'AFN',\n All = 'ALL',\n Amd = 'AMD',\n Ang = 'ANG',\n Aoa = 'AOA',\n Ars = 'ARS',\n Aud = 'AUD',\n Awg = 'AWG',\n Azn = 'AZN',\n Bam = 'BAM',\n Bbd = 'BBD',\n Bdt = 'BDT',\n Bgn = 'BGN',\n Bhd = 'BHD',\n Bif = 'BIF',\n Bmd = 'BMD',\n Bnd = 'BND',\n Bob = 'BOB',\n Bov = 'BOV',\n Brl = 'BRL',\n Bsd = 'BSD',\n Btn = 'BTN',\n Bwp = 'BWP',\n Byn = 'BYN',\n Bzd = 'BZD',\n Cad = 'CAD',\n Cdf = 'CDF',\n Che = 'CHE',\n Chf = 'CHF',\n Chw = 'CHW',\n Clf = 'CLF',\n Clp = 'CLP',\n Cny = 'CNY',\n Cop = 'COP',\n Cou = 'COU',\n Crc = 'CRC',\n Cuc = 'CUC',\n Cup = 'CUP',\n Cve = 'CVE',\n Czk = 'CZK',\n Djf = 'DJF',\n Dkk = 'DKK',\n Dop = 'DOP',\n Dzd = 'DZD',\n Egp = 'EGP',\n Ern = 'ERN',\n Etb = 'ETB',\n Eur = 'EUR',\n Fjd = 'FJD',\n Fkp = 'FKP',\n Gbp = 'GBP',\n Gel = 'GEL',\n Ghs = 'GHS',\n Gip = 'GIP',\n Gmd = 'GMD',\n Gnf = 'GNF',\n Gtq = 'GTQ',\n Gyd = 'GYD',\n Hkd = 'HKD',\n Hnl = 'HNL',\n Hrk = 'HRK',\n Htg = 'HTG',\n Huf = 'HUF',\n Idr = 'IDR',\n Ils = 'ILS',\n Inr = 'INR',\n Iqd = 'IQD',\n Irr = 'IRR',\n Isk = 'ISK',\n Jmd = 'JMD',\n Jod = 'JOD',\n Jpy = 'JPY',\n Kes = 'KES',\n Kgs = 'KGS',\n Khr = 'KHR',\n Kmf = 'KMF',\n Kpw = 'KPW',\n Krw = 'KRW',\n Kwd = 'KWD',\n Kyd = 'KYD',\n Kzt = 'KZT',\n Lak = 'LAK',\n Lbp = 'LBP',\n Lkr = 'LKR',\n Lrd = 'LRD',\n Lsl = 'LSL',\n Lyd = 'LYD',\n Mad = 'MAD',\n Mdl = 'MDL',\n Mga = 'MGA',\n Mkd = 'MKD',\n Mmk = 'MMK',\n Mnt = 'MNT',\n Mop = 'MOP',\n Mru = 'MRU',\n Mur = 'MUR',\n Mvr = 'MVR',\n Mwk = 'MWK',\n Mxn = 'MXN',\n Mxv = 'MXV',\n Myr = 'MYR',\n Mzn = 'MZN',\n Nad = 'NAD',\n Ngn = 'NGN',\n Nio = 'NIO',\n Nok = 'NOK',\n Npr = 'NPR',\n Nzd = 'NZD',\n Omr = 'OMR',\n Pab = 'PAB',\n Pen = 'PEN',\n Pgk = 'PGK',\n Php = 'PHP',\n Pkr = 'PKR',\n Pln = 'PLN',\n Pyg = 'PYG',\n Qar = 'QAR',\n Ron = 'RON',\n Rsd = 'RSD',\n Rub = 'RUB',\n Rwf = 'RWF',\n Sar = 'SAR',\n Sbd = 'SBD',\n Scr = 'SCR',\n Sdg = 'SDG',\n Sek = 'SEK',\n Sgd = 'SGD',\n Shp = 'SHP',\n Sll = 'SLL',\n Sos = 'SOS',\n Srd = 'SRD',\n Ssp = 'SSP',\n Stn = 'STN',\n Svc = 'SVC',\n Syp = 'SYP',\n Szl = 'SZL',\n Thb = 'THB',\n Tjs = 'TJS',\n Tmt = 'TMT',\n Tnd = 'TND',\n Top = 'TOP',\n Try = 'TRY',\n Ttd = 'TTD',\n Twd = 'TWD',\n Tzs = 'TZS',\n Uah = 'UAH',\n Ugx = 'UGX',\n Usd = 'USD',\n Usn = 'USN',\n Uyi = 'UYI',\n Uyu = 'UYU',\n Uzs = 'UZS',\n Vef = 'VEF',\n Vnd = 'VND',\n Vuv = 'VUV',\n Wst = 'WST',\n Xaf = 'XAF',\n Xag = 'XAG',\n Xau = 'XAU',\n Xba = 'XBA',\n Xbb = 'XBB',\n Xbc = 'XBC',\n Xbd = 'XBD',\n Xcd = 'XCD',\n Xdr = 'XDR',\n Xof = 'XOF',\n Xpd = 'XPD',\n Xpf = 'XPF',\n Xpt = 'XPT',\n Xsu = 'XSU',\n Xts = 'XTS',\n Xua = 'XUA',\n Xxx = 'XXX',\n Yer = 'YER',\n Zar = 'ZAR',\n Zmw = 'ZMW',\n Zwl = 'ZWL'\n}\n\n\n\nexport type DestinationEntry = {\n orig: Scalars['String'];\n dest: Scalars['String'];\n date: Scalars['Date'];\n};\n\nexport enum DistanceTypes {\n K = 'K',\n M = 'M'\n}\n\nexport type DynamicCondition = {\n __typename?: 'DynamicCondition';\n name?: Maybe<FieldWrapper<Scalars['String']>>;\n description?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type FeFlightSearchResults = {\n __typename?: 'FEFlightSearchResults';\n journeys: Array<FieldWrapper<FlightItinerary>>;\n multi: Array<FieldWrapper<ItinerarySummary>>;\n grouped?: Maybe<Array<FieldWrapper<GroupFlights>>>;\n};\n\nexport type FareConditionEntry = {\n __typename?: 'FareConditionEntry';\n name: FieldWrapper<Scalars['String']>;\n type: FieldWrapper<FareRuleType>;\n currency: FieldWrapper<Scalars['String']>;\n amount: FieldWrapper<Scalars['Float']>;\n remark?: Maybe<FieldWrapper<Scalars['String']>>;\n changeFeeInd: FieldWrapper<Scalars['Boolean']>;\n cancelFeeInd: FieldWrapper<Scalars['Boolean']>;\n refundableInd: FieldWrapper<Scalars['Boolean']>;\n};\n\nexport type FareConditions = {\n __typename?: 'FareConditions';\n cancellation?: Maybe<Array<Maybe<FieldWrapper<FareConditionEntry>>>>;\n change?: Maybe<Array<Maybe<FieldWrapper<FareConditionEntry>>>>;\n noShow?: Maybe<Array<Maybe<FieldWrapper<FareConditionEntry>>>>;\n upgrade?: Maybe<Array<Maybe<FieldWrapper<FareConditionEntry>>>>;\n other?: Maybe<Array<Maybe<FieldWrapper<FareConditionEntry>>>>;\n};\n\nexport enum FareRuleType {\n Cancellation = 'Cancellation',\n Change = 'Change',\n NoShow = 'NoShow',\n Upgrade = 'Upgrade',\n Other = 'Other'\n}\n\nexport enum FareType {\n Flexible = 'Flexible',\n Lowest = 'Lowest',\n Negotiated = 'Negotiated',\n NonNegotiated = 'NonNegotiated',\n Leisure = 'Leisure',\n RequestFareRules = 'RequestFareRules',\n SelectAndPro = 'SelectAndPro'\n}\n\nexport type FastTrackQuote = {\n __typename?: 'FastTrackQuote';\n source: FieldWrapper<Scalars['String']>;\n sourceId: FieldWrapper<Scalars['Int']>;\n name: FieldWrapper<Scalars['String']>;\n code: FieldWrapper<Scalars['String']>;\n price: FieldWrapper<Scalars['Float']>;\n currency: FieldWrapper<Scalars['String']>;\n refundable: FieldWrapper<Scalars['Boolean']>;\n terminal?: Maybe<FieldWrapper<Scalars['Int']>>;\n images: Array<FieldWrapper<Scalars['String']>>;\n logo?: Maybe<FieldWrapper<Scalars['String']>>;\n description?: Maybe<FieldWrapper<Scalars['String']>>;\n importantInfo?: Maybe<FieldWrapper<Scalars['String']>>;\n tmcPreferred: FieldWrapper<Scalars['Boolean']>;\n companyPreferred: FieldWrapper<Scalars['Boolean']>;\n officePreferred: FieldWrapper<Scalars['Boolean']>;\n tmcPreferredMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n companyPreferredMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n officePreferredMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n unavailable: FieldWrapper<Scalars['Boolean']>;\n unavailableMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n co2PerPassenger: FieldWrapper<Scalars['Float']>;\n co2PerItem: FieldWrapper<Scalars['Float']>;\n};\n\nexport type FastTrackResult = {\n __typename?: 'FastTrackResult';\n results: Array<FieldWrapper<FastTrackQuote>>;\n errors: Array<FieldWrapper<SearchError>>;\n};\n\nexport type FlightAmount = {\n __typename?: 'FlightAmount';\n description: FieldWrapper<Scalars['String']>;\n amount: FieldWrapper<Scalars['Float']>;\n currency: FieldWrapper<Scalars['String']>;\n};\n\nexport enum FlightCabinClass {\n Any = 'Any',\n LiteEconomy = 'LiteEconomy',\n EconomyRestricted = 'EconomyRestricted',\n EconomyNoBags = 'EconomyNoBags',\n Economy = 'Economy',\n PremiumEconomy = 'PremiumEconomy',\n Business = 'Business',\n PremiumBusiness = 'PremiumBusiness',\n First = 'First',\n PremiumFirst = 'PremiumFirst'\n}\n\nexport type FlightCarbonEmissions = {\n __typename?: 'FlightCarbonEmissions';\n amount?: Maybe<FieldWrapper<Scalars['Float']>>;\n unit: FieldWrapper<Scalars['String']>;\n};\n\nexport type FlightCarrierDetail = {\n __typename?: 'FlightCarrierDetail';\n name?: Maybe<FieldWrapper<Scalars['String']>>;\n alias?: Maybe<FieldWrapper<Scalars['String']>>;\n callsign?: Maybe<FieldWrapper<Scalars['String']>>;\n iata?: Maybe<FieldWrapper<Scalars['String']>>;\n icao?: Maybe<FieldWrapper<Scalars['String']>>;\n logo?: Maybe<FieldWrapper<Scalars['String']>>;\n banner?: Maybe<FieldWrapper<Scalars['String']>>;\n popularity?: Maybe<FieldWrapper<Scalars['Int']>>;\n};\n\nexport type FlightFareTotal = {\n __typename?: 'FlightFareTotal';\n price: FieldWrapper<Scalars['Float']>;\n tax?: Maybe<FieldWrapper<Scalars['Float']>>;\n discount?: Maybe<FieldWrapper<Scalars['Float']>>;\n currency: FieldWrapper<CurrencyCode>;\n};\n\nexport type FlightItinerary = {\n __typename?: 'FlightItinerary';\n uid: FieldWrapper<Scalars['Int']>;\n passengerCount: FieldWrapper<Scalars['Int']>;\n outboundFlights: Array<FieldWrapper<FlightJourney>>;\n inboundFlights?: Maybe<Array<Maybe<FieldWrapper<FlightJourney>>>>;\n outboundTotalDuration: FieldWrapper<Scalars['Int']>;\n outboundCarbonEmissions?: Maybe<FieldWrapper<FlightCarbonEmissions>>;\n inboundTotalDuration?: Maybe<FieldWrapper<Scalars['Int']>>;\n inboundCarbonEmissions?: Maybe<FieldWrapper<FlightCarbonEmissions>>;\n taxes?: Maybe<Array<Maybe<FieldWrapper<FlightAmount>>>>;\n discounts?: Maybe<Array<Maybe<FieldWrapper<FlightAmount>>>>;\n total: FieldWrapper<FlightFareTotal>;\n fareConditions?: Maybe<FieldWrapper<FareConditions>>;\n baggageAllowance?: Maybe<Array<Maybe<FieldWrapper<BaggageAllowance>>>>;\n additional?: Maybe<FieldWrapper<Scalars['JSON']>>;\n source: FieldWrapper<Scalars['String']>;\n sourceId: FieldWrapper<Scalars['Int']>;\n version: FieldWrapper<Scalars['String']>;\n tmcPreferred: FieldWrapper<Scalars['Boolean']>;\n companyPreferred: FieldWrapper<Scalars['Boolean']>;\n officePreferred: FieldWrapper<Scalars['Boolean']>;\n tmcPreferredMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n companyPreferredMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n officePreferredMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n unavailable: FieldWrapper<Scalars['Boolean']>;\n unavailableMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n co2PerItem: FieldWrapper<Scalars['Float']>;\n co2PerPassenger: FieldWrapper<Scalars['Float']>;\n};\n\nexport type FlightJourney = {\n __typename?: 'FlightJourney';\n fareInfo?: Maybe<FieldWrapper<FlightSpecialFareInfo>>;\n originAirport: FieldWrapper<Scalars['String']>;\n originTerminal?: Maybe<FieldWrapper<Scalars['String']>>;\n originAirportName?: Maybe<FieldWrapper<Scalars['String']>>;\n originAirportDetail: FieldWrapper<AirportDetail>;\n destinationAirport: FieldWrapper<Scalars['String']>;\n destinationTerminal?: Maybe<FieldWrapper<Scalars['String']>>;\n destinationAirportName?: Maybe<FieldWrapper<Scalars['String']>>;\n destinationAirportDetail: FieldWrapper<AirportDetail>;\n dateTimeDeparting: FieldWrapper<Scalars['String']>;\n dateTimeDepartingUTC: FieldWrapper<Scalars['String']>;\n dateTimeArriving: FieldWrapper<Scalars['String']>;\n dateTimeArrivingUTC: FieldWrapper<Scalars['String']>;\n marketingCarrier: FieldWrapper<Scalars['String']>;\n marketingCarrierName?: Maybe<FieldWrapper<Scalars['String']>>;\n marketingCarrierDetail: FieldWrapper<FlightCarrierDetail>;\n marketingFlightNumber: FieldWrapper<Scalars['String']>;\n operatingCarrier: FieldWrapper<Scalars['String']>;\n operatingCarrierName?: Maybe<FieldWrapper<Scalars['String']>>;\n operatingCarrierDetail: FieldWrapper<FlightCarrierDetail>;\n operatingFlightNumber: FieldWrapper<Scalars['String']>;\n equipmentCode: FieldWrapper<Scalars['String']>;\n equipmentName: FieldWrapper<Scalars['String']>;\n totalDuration: FieldWrapper<Scalars['Int']>;\n seatsAvailable?: Maybe<FieldWrapper<Scalars['Int']>>;\n cabinCode?: Maybe<FieldWrapper<Scalars['String']>>;\n cabinClass?: Maybe<FieldWrapper<Scalars['String']>>;\n marketingNames?: Maybe<Array<Maybe<FieldWrapper<Scalars['String']>>>>;\n fareConditions: FieldWrapper<FareConditions>;\n vendorCode?: Maybe<FieldWrapper<Scalars['String']>>;\n stops?: Maybe<FieldWrapper<Scalars['String']>>;\n bookingCode?: Maybe<FieldWrapper<Scalars['String']>>;\n marriageGroup?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n fareBasisCode?: Maybe<FieldWrapper<Scalars['String']>>;\n additional?: Maybe<FieldWrapper<Scalars['JSON']>>;\n};\n\nexport type FlightPassengerObject = {\n type: FlightPassengerType;\n firstName?: Maybe<Scalars['String']>;\n middleName?: Maybe<Scalars['String']>;\n surname?: Maybe<Scalars['String']>;\n dob?: Maybe<Scalars['Date']>;\n};\n\nexport enum FlightPassengerType {\n Infant = 'Infant',\n Child = 'Child',\n Adult = 'Adult',\n Senior = 'Senior'\n}\n\nexport type FlightRevalidateResponse = {\n __typename?: 'FlightRevalidateResponse';\n valid: FieldWrapper<Scalars['Boolean']>;\n available: FieldWrapper<Scalars['Boolean']>;\n price?: Maybe<FieldWrapper<Scalars['Float']>>;\n priceDifference?: Maybe<FieldWrapper<Scalars['Float']>>;\n currency?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type FlightSearchResult = {\n __typename?: 'FlightSearchResult';\n results: Array<FieldWrapper<SearchResult>>;\n errors: Array<FieldWrapper<SearchError>>;\n};\n\nexport type FlightSearchResultV2 = {\n __typename?: 'FlightSearchResultV2';\n results: FieldWrapper<FeFlightSearchResults>;\n errors: Array<FieldWrapper<SearchError>>;\n};\n\nexport type FlightSpecialFareInfo = {\n __typename?: 'FlightSpecialFareInfo';\n title: FieldWrapper<Scalars['String']>;\n type: FieldWrapper<Scalars['String']>;\n code?: Maybe<FieldWrapper<Scalars['String']>>;\n supplierCode?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type GeoCoordinates = {\n __typename?: 'GeoCoordinates';\n latitude?: Maybe<FieldWrapper<Scalars['Float']>>;\n longitude?: Maybe<FieldWrapper<Scalars['Float']>>;\n altitude?: Maybe<FieldWrapper<Scalars['Float']>>;\n};\n\nexport type GroupFlights = {\n __typename?: 'GroupFlights';\n referenceID: FieldWrapper<Scalars['Int']>;\n flightID: FieldWrapper<Scalars['String']>;\n boundIndicator: FieldWrapper<Scalars['Int']>;\n minPrice: FieldWrapper<Scalars['Float']>;\n maxPrice: FieldWrapper<Scalars['Float']>;\n flights: FieldWrapper<MatchingFlights>;\n};\n\nexport type HotelAddress = {\n __typename?: 'HotelAddress';\n addressLine1?: Maybe<FieldWrapper<Scalars['String']>>;\n addressLine2?: Maybe<FieldWrapper<Scalars['String']>>;\n addressLine3?: Maybe<FieldWrapper<Scalars['String']>>;\n postOrZipCode?: Maybe<FieldWrapper<Scalars['String']>>;\n countryCode?: Maybe<FieldWrapper<Scalars['String']>>;\n telephone?: Maybe<FieldWrapper<Scalars['String']>>;\n facsimile?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type HotelAvailability = {\n __typename?: 'HotelAvailability';\n hotelId: FieldWrapper<Scalars['String']>;\n imageUrl: FieldWrapper<Scalars['String']>;\n rooms?: Maybe<Array<Maybe<FieldWrapper<HotelRoom>>>>;\n prpn?: Maybe<FieldWrapper<Scalars['Float']>>;\n currencyCode?: Maybe<FieldWrapper<Scalars['String']>>;\n isBusy?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n source: FieldWrapper<Scalars['String']>;\n version: FieldWrapper<Scalars['String']>;\n};\n\nexport type HotelAvailabilityResult = {\n __typename?: 'HotelAvailabilityResult';\n results?: Maybe<FieldWrapper<HotelAvailability>>;\n errors: Array<FieldWrapper<SearchError>>;\n};\n\nexport type HotelCard = {\n __typename?: 'HotelCard';\n id: FieldWrapper<Scalars['String']>;\n name: FieldWrapper<Scalars['String']>;\n};\n\nexport type HotelConversion = {\n __typename?: 'HotelConversion';\n rate: FieldWrapper<Scalars['Float']>;\n localCode: FieldWrapper<Scalars['String']>;\n localTotal: FieldWrapper<Scalars['Float']>;\n convertedCode: FieldWrapper<Scalars['String']>;\n convertedTotal: FieldWrapper<Scalars['Float']>;\n};\n\nexport type HotelDeposit = {\n __typename?: 'HotelDeposit';\n amount: FieldWrapper<Scalars['Float']>;\n policy?: Maybe<FieldWrapper<Scalars['String']>>;\n required: FieldWrapper<Scalars['Boolean']>;\n};\n\nexport type HotelItinerary = {\n __typename?: 'HotelItinerary';\n id: FieldWrapper<Scalars['String']>;\n name: FieldWrapper<Scalars['String']>;\n imageUrl: FieldWrapper<Scalars['String']>;\n group: FieldWrapper<Scalars['String']>;\n location: FieldWrapper<HotelLocation>;\n address: FieldWrapper<HotelAddress>;\n transports?: Maybe<Array<Maybe<FieldWrapper<HotelTransport>>>>;\n preferred: FieldWrapper<HotelPreferred>;\n tags?: Maybe<Array<Maybe<FieldWrapper<HotelTag>>>>;\n availableRates?: Maybe<FieldWrapper<HotelAvailability>>;\n co2PerPassenger: FieldWrapper<Scalars['Float']>;\n co2PerItem: FieldWrapper<Scalars['Float']>;\n source: FieldWrapper<Scalars['String']>;\n sourceId: FieldWrapper<Scalars['Int']>;\n version: FieldWrapper<Scalars['String']>;\n tmcPreferred: FieldWrapper<Scalars['Boolean']>;\n companyPreferred: FieldWrapper<Scalars['Boolean']>;\n officePreferred: FieldWrapper<Scalars['Boolean']>;\n tmcPreferredMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n companyPreferredMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n officePreferredMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n unavailable: FieldWrapper<Scalars['Boolean']>;\n unavailableMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type HotelLocation = {\n __typename?: 'HotelLocation';\n distance: FieldWrapper<Scalars['Float']>;\n distanceType: FieldWrapper<Scalars['String']>;\n longitude: FieldWrapper<Scalars['Float']>;\n latitude: FieldWrapper<Scalars['Float']>;\n};\n\nexport type HotelMultiAvailabilityResult = {\n __typename?: 'HotelMultiAvailabilityResult';\n results?: Maybe<Array<Maybe<FieldWrapper<HotelAvailability>>>>;\n errors: Array<FieldWrapper<SearchError>>;\n};\n\nexport type HotelNight = {\n __typename?: 'HotelNight';\n night: FieldWrapper<Scalars['Int']>;\n rate: FieldWrapper<Scalars['Float']>;\n info?: Maybe<FieldWrapper<Scalars['String']>>;\n date: FieldWrapper<Scalars['Date']>;\n};\n\nexport type HotelPaymentType = {\n __typename?: 'HotelPaymentType';\n type: FieldWrapper<Scalars['String']>;\n name?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type HotelPolicy = {\n __typename?: 'HotelPolicy';\n cancellation?: Maybe<FieldWrapper<Scalars['String']>>;\n deposit?: Maybe<FieldWrapper<Scalars['String']>>;\n disabledAccess?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n general?: Maybe<FieldWrapper<Scalars['String']>>;\n guarantee?: Maybe<FieldWrapper<Scalars['String']>>;\n refundAvailable?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n};\n\nexport type HotelPreferred = {\n __typename?: 'HotelPreferred';\n client: FieldWrapper<Scalars['Boolean']>;\n consumer: FieldWrapper<Scalars['Boolean']>;\n};\n\nexport type HotelRoom = {\n __typename?: 'HotelRoom';\n roomId: FieldWrapper<Scalars['String']>;\n roomType?: Maybe<FieldWrapper<Scalars['String']>>;\n roomDescription?: Maybe<FieldWrapper<Scalars['String']>>;\n rateCode?: Maybe<FieldWrapper<Scalars['String']>>;\n rateDescription?: Maybe<FieldWrapper<Scalars['String']>>;\n total: FieldWrapper<Scalars['Float']>;\n currencyCode: FieldWrapper<Scalars['String']>;\n currencyConversion?: Maybe<FieldWrapper<HotelConversion>>;\n deposit?: Maybe<FieldWrapper<HotelDeposit>>;\n nights: Array<FieldWrapper<HotelNight>>;\n policies: FieldWrapper<HotelPolicy>;\n tax: FieldWrapper<HotelTax>;\n acceptedCards?: Maybe<Array<Maybe<FieldWrapper<HotelCard>>>>;\n paymentTypes?: Maybe<Array<Maybe<FieldWrapper<HotelPaymentType>>>>;\n};\n\nexport type HotelSearchResult = {\n __typename?: 'HotelSearchResult';\n results?: Maybe<Array<Maybe<FieldWrapper<HotelItinerary>>>>;\n errors: Array<FieldWrapper<SearchError>>;\n};\n\nexport type HotelTag = {\n __typename?: 'HotelTag';\n name: FieldWrapper<Scalars['String']>;\n display?: Maybe<FieldWrapper<Scalars['String']>>;\n type: FieldWrapper<Scalars['String']>;\n icon: FieldWrapper<Scalars['String']>;\n};\n\nexport type HotelTax = {\n __typename?: 'HotelTax';\n included: FieldWrapper<Scalars['Boolean']>;\n rate: FieldWrapper<Scalars['Float']>;\n};\n\nexport type HotelTransport = {\n __typename?: 'HotelTransport';\n type: FieldWrapper<Scalars['String']>;\n name: FieldWrapper<Scalars['String']>;\n code?: Maybe<FieldWrapper<Scalars['String']>>;\n distance: FieldWrapper<Scalars['Float']>;\n distanceType: FieldWrapper<Scalars['String']>;\n longitude?: Maybe<FieldWrapper<Scalars['Float']>>;\n latitude?: Maybe<FieldWrapper<Scalars['Float']>>;\n};\n\nexport enum IrlClass {\n All = 'All',\n First = 'First',\n Standard = 'Standard'\n}\n\nexport type IrlDynamicCondition = {\n __typename?: 'IRLDynamicCondition';\n name?: Maybe<FieldWrapper<Scalars['String']>>;\n description?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type IrlIdentifiers = {\n __typename?: 'IRLIdentifiers';\n transactionIdentifier?: Maybe<FieldWrapper<Scalars['String']>>;\n signature?: Maybe<FieldWrapper<Scalars['String']>>;\n journeyIdentifier?: Maybe<FieldWrapper<Scalars['String']>>;\n provider?: Maybe<FieldWrapper<Scalars['String']>>;\n fareIdentifier?: Maybe<FieldWrapper<Scalars['String']>>;\n direction?: Maybe<FieldWrapper<Scalars['String']>>;\n allowedWith: Array<FieldWrapper<IrlIdentifiers>>;\n singleOrReturn?: Maybe<FieldWrapper<Scalars['String']>>;\n bookingRef?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type IrlJourneyOption = {\n __typename?: 'IRLJourneyOption';\n identifiers?: Maybe<FieldWrapper<IrlIdentifiers>>;\n travellers?: Maybe<Array<FieldWrapper<IrlTraveller>>>;\n from?: Maybe<FieldWrapper<Scalars['String']>>;\n fromCode?: Maybe<FieldWrapper<Scalars['String']>>;\n to?: Maybe<FieldWrapper<Scalars['String']>>;\n toCode?: Maybe<FieldWrapper<Scalars['String']>>;\n departDateTime?: Maybe<FieldWrapper<Scalars['DateTime']>>;\n arriveDateTime?: Maybe<FieldWrapper<Scalars['DateTime']>>;\n changes?: Maybe<FieldWrapper<Scalars['String']>>;\n segments?: Maybe<Array<FieldWrapper<IrlSegment>>>;\n providers?: Maybe<Array<FieldWrapper<IrlProvider>>>;\n unsellable?: Maybe<FieldWrapper<Scalars['String']>>;\n ticketExtras?: Maybe<Array<FieldWrapper<IrlTicketExtra>>>;\n plusBus?: Maybe<FieldWrapper<IrlPlusBus>>;\n};\n\nexport type IrlJourneyOptions = {\n __typename?: 'IRLJourneyOptions';\n source: FieldWrapper<Scalars['String']>;\n sourceId: FieldWrapper<Scalars['Int']>;\n outbound?: Maybe<Array<FieldWrapper<IrlJourneyOption>>>;\n return?: Maybe<Array<FieldWrapper<IrlJourneyOption>>>;\n};\n\nexport enum IrlJourneyType {\n ReturnJourney = 'ReturnJourney',\n SingleJourney = 'SingleJourney'\n}\n\nexport type IrlPlusBus = {\n __typename?: 'IRLPlusBus';\n originPlusBusNLC?: Maybe<FieldWrapper<Scalars['String']>>;\n originStationNLC?: Maybe<FieldWrapper<Scalars['String']>>;\n destinationPlusBusNLC?: Maybe<FieldWrapper<Scalars['String']>>;\n destinationStationNLC?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type IrlProvider = {\n __typename?: 'IRLProvider';\n providerId?: Maybe<FieldWrapper<Scalars['String']>>;\n name?: Maybe<FieldWrapper<Scalars['String']>>;\n cheapestTicket?: Maybe<FieldWrapper<IrlTicketOption>>;\n ticketOptions?: Maybe<Array<Maybe<FieldWrapper<IrlTicketOption>>>>;\n bookedTicket?: Maybe<FieldWrapper<IrlTicketOption>>;\n};\n\nexport type IrlSearchResult = {\n __typename?: 'IRLSearchResult';\n results: Array<FieldWrapper<IrlJourneyOptions>>;\n errors: Array<FieldWrapper<SearchError>>;\n};\n\nexport type IrlSeat = {\n __typename?: 'IRLSeat';\n location?: Maybe<FieldWrapper<Scalars['String']>>;\n coach?: Maybe<FieldWrapper<Scalars['String']>>;\n number?: Maybe<FieldWrapper<Scalars['String']>>;\n direction?: Maybe<FieldWrapper<Scalars['String']>>;\n position?: Maybe<FieldWrapper<Scalars['String']>>;\n deck?: Maybe<FieldWrapper<Scalars['String']>>;\n seatType?: Maybe<FieldWrapper<Scalars['String']>>;\n seatSelection?: Maybe<FieldWrapper<Scalars['String']>>;\n facilities?: Maybe<Array<Maybe<FieldWrapper<Scalars['String']>>>>;\n note: FieldWrapper<Scalars['String']>;\n};\n\nexport type IrlSeatPreferenceType = {\n __typename?: 'IRLSeatPreferenceType';\n name?: Maybe<FieldWrapper<Scalars['String']>>;\n allowedValues?: Maybe<Array<Maybe<FieldWrapper<Scalars['String']>>>>;\n};\n\nexport type IrlSegment = {\n __typename?: 'IRLSegment';\n id?: Maybe<FieldWrapper<Scalars['String']>>;\n operator?: Maybe<FieldWrapper<Scalars['String']>>;\n depart?: Maybe<FieldWrapper<Scalars['String']>>;\n departDateTime?: Maybe<FieldWrapper<Scalars['DateTime']>>;\n arrive?: Maybe<FieldWrapper<Scalars['String']>>;\n arriveDateTime?: Maybe<FieldWrapper<Scalars['DateTime']>>;\n reservableStatus?: Maybe<FieldWrapper<Scalars['String']>>;\n seatPreferenceTypes?: Maybe<Array<FieldWrapper<IrlSeatPreferenceType>>>;\n seatPreferenceGroup?: Maybe<FieldWrapper<Scalars['String']>>;\n seats?: Maybe<Array<FieldWrapper<IrlSeat>>>;\n};\n\nexport enum IrlSupplier {\n Renfe = 'Renfe',\n BeNe = 'BeNe',\n Ntv = 'Ntv'\n}\n\nexport type IrlSupplierStation = {\n __typename?: 'IRLSupplierStation';\n id: FieldWrapper<Scalars['ID']>;\n name: FieldWrapper<Scalars['String']>;\n supplier: FieldWrapper<Scalars['String']>;\n stationCode: FieldWrapper<Scalars['String']>;\n nlcCode?: Maybe<FieldWrapper<Scalars['Int']>>;\n trainlineCode?: Maybe<FieldWrapper<Scalars['String']>>;\n trainlineUniqueCode?: Maybe<FieldWrapper<Scalars['String']>>;\n locationDetails?: Maybe<FieldWrapper<LocationDetail>>;\n};\n\nexport type IrlTextValuePair = {\n __typename?: 'IRLTextValuePair';\n text: FieldWrapper<Scalars['String']>;\n value?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type IrlTicket = {\n __typename?: 'IRLTicket';\n price?: Maybe<FieldWrapper<Scalars['Float']>>;\n type?: Maybe<FieldWrapper<Scalars['String']>>;\n route?: Maybe<FieldWrapper<Scalars['String']>>;\n segments?: Maybe<Array<FieldWrapper<IrlSegment>>>;\n numChildren?: Maybe<FieldWrapper<Scalars['Int']>>;\n numAdults?: Maybe<FieldWrapper<Scalars['Int']>>;\n};\n\nexport type IrlTicketExtra = {\n __typename?: 'IRLTicketExtra';\n identifiers?: Maybe<FieldWrapper<IrlTicketExtraIdentifiers>>;\n type?: Maybe<FieldWrapper<Scalars['String']>>;\n location?: Maybe<FieldWrapper<Scalars['String']>>;\n date?: Maybe<FieldWrapper<Scalars['Date']>>;\n description?: Maybe<FieldWrapper<Scalars['String']>>;\n amount?: Maybe<FieldWrapper<Scalars['Float']>>;\n adultAmount?: Maybe<FieldWrapper<Scalars['Float']>>;\n childAmount?: Maybe<FieldWrapper<Scalars['Float']>>;\n currency?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type IrlTicketExtraIdentifiers = {\n __typename?: 'IRLTicketExtraIdentifiers';\n type?: Maybe<FieldWrapper<Scalars['String']>>;\n location?: Maybe<FieldWrapper<Scalars['String']>>;\n date?: Maybe<FieldWrapper<Scalars['Date']>>;\n journeyId?: Maybe<FieldWrapper<Scalars['String']>>;\n isOrigin?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n};\n\nexport type IrlTicketOption = {\n __typename?: 'IRLTicketOption';\n identifiers?: Maybe<FieldWrapper<IrlIdentifiers>>;\n type?: Maybe<FieldWrapper<Scalars['String']>>;\n class?: Maybe<FieldWrapper<Scalars['String']>>;\n singleOrReturn?: Maybe<FieldWrapper<Scalars['String']>>;\n price?: Maybe<FieldWrapper<Scalars['Float']>>;\n reservableStatus?: Maybe<FieldWrapper<Scalars['String']>>;\n currency?: Maybe<FieldWrapper<Scalars['String']>>;\n route?: Maybe<FieldWrapper<Scalars['String']>>;\n routeCode?: Maybe<FieldWrapper<Scalars['String']>>;\n tickets?: Maybe<Array<Maybe<FieldWrapper<IrlTicket>>>>;\n};\n\nexport type IrlTraveller = {\n __typename?: 'IRLTraveller';\n status?: Maybe<FieldWrapper<IrlTravellerStatus>>;\n id?: Maybe<FieldWrapper<Scalars['String']>>;\n dob?: Maybe<FieldWrapper<Scalars['Date']>>;\n railcard?: Maybe<FieldWrapper<Scalars['String']>>;\n givenName?: Maybe<FieldWrapper<Scalars['String']>>;\n surname?: Maybe<FieldWrapper<Scalars['String']>>;\n nameTitle?: Maybe<FieldWrapper<Scalars['String']>>;\n contactInfo?: Maybe<FieldWrapper<Scalars['String']>>;\n deliveryEmailAddress?: Maybe<FieldWrapper<Scalars['String']>>;\n fare?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport enum IrlTravellerStatus {\n Placeholder = 'placeholder',\n Complete = 'complete'\n}\n\nexport type InputCarHireDepot = {\n vendorCode?: Maybe<Scalars['String']>;\n pickupLocationCode?: Maybe<Scalars['String']>;\n pickupExtendedLocationCode?: Maybe<Scalars['String']>;\n dropOffLocationCode?: Maybe<Scalars['String']>;\n dropOffExtendedLocationCode?: Maybe<Scalars['String']>;\n};\n\nexport type ItinerarySummary = {\n __typename?: 'ItinerarySummary';\n order: FieldWrapper<Scalars['Int']>;\n origin: FieldWrapper<Scalars['String']>;\n destination: FieldWrapper<Scalars['String']>;\n results: Array<FieldWrapper<FlightItinerary>>;\n minPrice: FieldWrapper<Scalars['Float']>;\n maxPrice: FieldWrapper<Scalars['Float']>;\n};\n\n\nexport type Language = {\n __typename?: 'Language';\n id: FieldWrapper<Scalars['ID']>;\n name: FieldWrapper<Scalars['String']>;\n isoCode: FieldWrapper<Scalars['String']>;\n};\n\nexport type LocationDetail = {\n __typename?: 'LocationDetail';\n continent?: Maybe<FieldWrapper<Scalars['String']>>;\n country?: Maybe<FieldWrapper<Scalars['String']>>;\n countryCode?: Maybe<FieldWrapper<Scalars['String']>>;\n state?: Maybe<FieldWrapper<Scalars['String']>>;\n city?: Maybe<FieldWrapper<Scalars['String']>>;\n coordinates?: Maybe<FieldWrapper<GeoCoordinates>>;\n postcode?: Maybe<FieldWrapper<Scalars['String']>>;\n road?: Maybe<FieldWrapper<Scalars['String']>>;\n gridReference?: Maybe<FieldWrapper<Scalars['String']>>;\n northing?: Maybe<FieldWrapper<Scalars['String']>>;\n easting?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type LoungeLocation = {\n __typename?: 'LoungeLocation';\n code: FieldWrapper<Scalars['String']>;\n name: FieldWrapper<Scalars['String']>;\n airport: FieldWrapper<Scalars['String']>;\n terminal?: Maybe<FieldWrapper<Scalars['Int']>>;\n address?: Maybe<FieldWrapper<Scalars['String']>>;\n telephone?: Maybe<FieldWrapper<Scalars['String']>>;\n fax?: Maybe<FieldWrapper<Scalars['String']>>;\n directions?: Maybe<FieldWrapper<Scalars['String']>>;\n introduction?: Maybe<FieldWrapper<Scalars['String']>>;\n logo?: Maybe<FieldWrapper<Scalars['String']>>;\n mobileImage?: Maybe<FieldWrapper<Scalars['String']>>;\n furtherImages?: Maybe<Array<Maybe<FieldWrapper<Scalars['String']>>>>;\n adultAge?: Maybe<FieldWrapper<Scalars['Int']>>;\n childAge?: Maybe<FieldWrapper<Scalars['Int']>>;\n infantAge?: Maybe<FieldWrapper<Scalars['Int']>>;\n landside: FieldWrapper<Scalars['Boolean']>;\n airside: FieldWrapper<Scalars['Boolean']>;\n facilities?: Maybe<Array<Maybe<FieldWrapper<Scalars['String']>>>>;\n openTime?: Maybe<FieldWrapper<Scalars['String']>>;\n closeTime?: Maybe<FieldWrapper<Scalars['String']>>;\n wifi?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n tv?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n snacks?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n phone?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n internet?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n childrenAllowed?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n disabledAccess?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n drinks?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n freeDrinks?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n freeFood?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n smokingPermitted?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n magazines?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n includedDrinks?: Maybe<Array<Maybe<FieldWrapper<Scalars['String']>>>>;\n menuFood?: Maybe<FieldWrapper<Scalars['String']>>;\n menuDrinks?: Maybe<FieldWrapper<Scalars['String']>>;\n menuExtras?: Maybe<FieldWrapper<Scalars['String']>>;\n whatsIncludedDrinks?: Maybe<FieldWrapper<Scalars['String']>>;\n whatsIncludedExtras?: Maybe<FieldWrapper<Scalars['String']>>;\n whatsIncludedFood?: Maybe<FieldWrapper<Scalars['String']>>;\n groupInfo?: Maybe<FieldWrapper<Scalars['String']>>;\n checkInInfo?: Maybe<FieldWrapper<Scalars['String']>>;\n dressCode?: Maybe<FieldWrapper<Scalars['String']>>;\n facilitiesInfo?: Maybe<FieldWrapper<Scalars['String']>>;\n foodAndBeverage?: Maybe<FieldWrapper<Scalars['String']>>;\n cancellationInfo?: Maybe<FieldWrapper<Scalars['String']>>;\n amendmentsInfo?: Maybe<FieldWrapper<Scalars['String']>>;\n misc?: Maybe<FieldWrapper<Scalars['JSON']>>;\n};\n\nexport type LoungeQuote = {\n __typename?: 'LoungeQuote';\n source: FieldWrapper<Scalars['String']>;\n sourceId: FieldWrapper<Scalars['Int']>;\n name: FieldWrapper<Scalars['String']>;\n code: FieldWrapper<Scalars['String']>;\n price: FieldWrapper<Scalars['Float']>;\n currency: FieldWrapper<CurrencyCode>;\n lounge: FieldWrapper<LoungeLocation>;\n tmcPreferred: FieldWrapper<Scalars['Boolean']>;\n companyPreferred: FieldWrapper<Scalars['Boolean']>;\n officePreferred: FieldWrapper<Scalars['Boolean']>;\n tmcPreferredMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n companyPreferredMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n officePreferredMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n unavailable: FieldWrapper<Scalars['Boolean']>;\n unavailableMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n co2PerPassenger: FieldWrapper<Scalars['Float']>;\n co2PerItem: FieldWrapper<Scalars['Float']>;\n};\n\nexport type LoungeSearchResult = {\n __typename?: 'LoungeSearchResult';\n results: Array<FieldWrapper<LoungeQuote>>;\n errors: Array<FieldWrapper<SearchError>>;\n};\n\nexport type ManagementInfo = {\n __typename?: 'ManagementInfo';\n id: FieldWrapper<Scalars['ID']>;\n dbId: FieldWrapper<Scalars['Int']>;\n name: FieldWrapper<Scalars['String']>;\n description?: Maybe<FieldWrapper<Scalars['String']>>;\n handoff: FieldWrapper<Scalars['String']>;\n valueMask?: Maybe<FieldWrapper<Scalars['String']>>;\n service: FieldWrapper<Service>;\n uiPresentation: FieldWrapper<UiPresentation>;\n mandatory: FieldWrapper<Scalars['Boolean']>;\n perPassenger: FieldWrapper<Scalars['Boolean']>;\n perBooking: FieldWrapper<Scalars['Boolean']>;\n agentOnly: FieldWrapper<Scalars['Boolean']>;\n createdAt: FieldWrapper<Scalars['DateTime']>;\n updatedAt: FieldWrapper<Scalars['DateTime']>;\n fixed: FieldWrapper<Scalars['Boolean']>;\n fixedValue?: Maybe<FieldWrapper<ManagementInfoValue>>;\n defaultValue?: Maybe<FieldWrapper<ManagementInfoValue>>;\n values: Array<FieldWrapper<ManagementInfoValue>>;\n group?: Maybe<Array<Maybe<FieldWrapper<Scalars['String']>>>>;\n selectedValues: Array<FieldWrapper<SelectedManagementInfoValue>>;\n};\n\nexport type ManagementInfoValue = {\n __typename?: 'ManagementInfoValue';\n id: FieldWrapper<Scalars['ID']>;\n label: FieldWrapper<Scalars['String']>;\n value: FieldWrapper<Scalars['String']>;\n default: FieldWrapper<Scalars['Boolean']>;\n fixed: FieldWrapper<Scalars['Boolean']>;\n agentOnly: FieldWrapper<Scalars['Boolean']>;\n};\n\nexport type MatchingFlights = {\n __typename?: 'MatchingFlights';\n LiteEconomy?: Maybe<Array<Maybe<FieldWrapper<Scalars['Int']>>>>;\n EconomyRestricted?: Maybe<Array<Maybe<FieldWrapper<Scalars['Int']>>>>;\n EconomyNoBags?: Maybe<Array<Maybe<FieldWrapper<Scalars['Int']>>>>;\n Economy?: Maybe<Array<Maybe<FieldWrapper<Scalars['Int']>>>>;\n PremiumEconomy?: Maybe<Array<Maybe<FieldWrapper<Scalars['Int']>>>>;\n Business?: Maybe<Array<Maybe<FieldWrapper<Scalars['Int']>>>>;\n PremiumBusiness?: Maybe<Array<Maybe<FieldWrapper<Scalars['Int']>>>>;\n First?: Maybe<Array<Maybe<FieldWrapper<Scalars['Int']>>>>;\n PremiumFirst?: Maybe<Array<Maybe<FieldWrapper<Scalars['Int']>>>>;\n};\n\nexport type Message = {\n __typename?: 'Message';\n id: FieldWrapper<Scalars['ID']>;\n name: FieldWrapper<Scalars['String']>;\n description?: Maybe<FieldWrapper<Scalars['String']>>;\n config: FieldWrapper<Scalars['JSON']>;\n target: FieldWrapper<Scalars['String']>;\n key: FieldWrapper<Scalars['String']>;\n};\n\nexport type Mutation = {\n __typename?: 'Mutation';\n saveUserAddress: FieldWrapper<Address>;\n deleteUserAddress: FieldWrapper<Scalars['Boolean']>;\n setAddressAsUserPrimary: FieldWrapper<Address>;\n sendBasketForApproval: FieldWrapper<Basket>;\n createBasket: FieldWrapper<Basket>;\n deleteBasket: FieldWrapper<Scalars['Boolean']>;\n updateBasketTitle: FieldWrapper<Basket>;\n updateBasketNotes: FieldWrapper<Basket>;\n addItemToBasket: FieldWrapper<Basket>;\n removeItemFromBasket: FieldWrapper<Basket>;\n removeItemsFromBasket: FieldWrapper<Basket>;\n moveItemToADifferentBasket: FieldWrapper<Basket>;\n addUsersToBasketItem: FieldWrapper<Basket>;\n removeUserFromBasketItem: FieldWrapper<Basket>;\n reopenBasket: FieldWrapper<Basket>;\n setBasketItemLeadPassenger: FieldWrapper<Basket>;\n bookBasket: FieldWrapper<Basket>;\n cancelBooking: FieldWrapper<AfterCancellationInfo>;\n confermaCreateCard: FieldWrapper<ConfermaCreateCardResult>;\n confermaDeleteCard: FieldWrapper<Scalars['Boolean']>;\n setBasketItemMIGroup: FieldWrapper<Basket>;\n setMIDefaultValue: FieldWrapper<Scalars['Boolean']>;\n setBasketItemMIValue: FieldWrapper<Basket>;\n setBasketItemPaymentMethod: FieldWrapper<Basket>;\n revalidateBasket: FieldWrapper<Basket>;\n revalidateBasketItem: FieldWrapper<Basket>;\n acceptNewPrice: FieldWrapper<Basket>;\n saveFavouriteSearch: Array<FieldWrapper<Search>>;\n saveRecentSearch: Array<FieldWrapper<Search>>;\n deleteFavouriteSearch: FieldWrapper<Scalars['Boolean']>;\n deleteRecentSearch: FieldWrapper<Scalars['Boolean']>;\n setUserLanguage: FieldWrapper<User>;\n};\n\n\nexport type MutationSaveUserAddressArgs = {\n description: Scalars['String'];\n numberOrName?: Maybe<Scalars['String']>;\n street?: Maybe<Scalars['String']>;\n town?: Maybe<Scalars['String']>;\n county?: Maybe<Scalars['String']>;\n postcode?: Maybe<Scalars['String']>;\n countryCode?: Maybe<Scalars['String']>;\n userPrimary?: Maybe<Scalars['Boolean']>;\n};\n\n\nexport type MutationDeleteUserAddressArgs = {\n id: Scalars['ID'];\n};\n\n\nexport type MutationSetAddressAsUserPrimaryArgs = {\n id: Scalars['ID'];\n};\n\n\nexport type MutationSendBasketForApprovalArgs = {\n basket: Scalars['ID'];\n};\n\n\nexport type MutationCreateBasketArgs = {\n title?: Maybe<Scalars['String']>;\n};\n\n\nexport type MutationDeleteBasketArgs = {\n id?: Maybe<Scalars['ID']>;\n reference?: Maybe<Scalars['String']>;\n};\n\n\nexport type MutationUpdateBasketTitleArgs = {\n id?: Maybe<Scalars['ID']>;\n reference?: Maybe<Scalars['String']>;\n newTitle: Scalars['String'];\n};\n\n\nexport type MutationUpdateBasketNotesArgs = {\n id?: Maybe<Scalars['ID']>;\n reference?: Maybe<Scalars['String']>;\n notes: Scalars['String'];\n};\n\n\nexport type MutationAddItemToBasketArgs = {\n basket?: Maybe<Scalars['ID']>;\n service: Scalars['ID'];\n detail: Scalars['JSON'];\n adults: Scalars['Int'];\n children?: Maybe<Scalars['Int']>;\n infants?: Maybe<Scalars['Int']>;\n price: Scalars['Float'];\n currency: CurrencyCode;\n searchQuery: Scalars['JSON'];\n quickAdd?: Maybe<Scalars['Boolean']>;\n users?: Maybe<Array<Maybe<UserPassengerTypeInput>>>;\n leadPassenger?: Maybe<Scalars['ID']>;\n co2PerItem?: Maybe<Scalars['Float']>;\n co2PerPassenger?: Maybe<Scalars['Float']>;\n outboundDate: Scalars['DateTime'];\n inboundDate?: Maybe<Scalars['DateTime']>;\n};\n\n\nexport type MutationRemoveItemFromBasketArgs = {\n basketItem: Scalars['ID'];\n};\n\n\nexport type MutationRemoveItemsFromBasketArgs = {\n basketId: Scalars['ID'];\n basketItems: Array<Scalars['ID']>;\n};\n\n\nexport type MutationMoveItemToADifferentBasketArgs = {\n basketItem: Scalars['ID'];\n newBasket: Scalars['ID'];\n};\n\n\nexport type MutationAddUsersToBasketItemArgs = {\n basketItem: Scalars['ID'];\n users: Array<UserPassengerTypeInput>;\n};\n\n\nexport type MutationRemoveUserFromBasketItemArgs = {\n basketItem: Scalars['ID'];\n user: Scalars['ID'];\n};\n\n\nexport type MutationReopenBasketArgs = {\n id: Scalars['ID'];\n};\n\n\nexport type MutationSetBasketItemLeadPassengerArgs = {\n id: Scalars['ID'];\n user: Scalars['ID'];\n};\n\n\nexport type MutationBookBasketArgs = {\n id: Scalars['ID'];\n supplementaryInfo: Array<SupplementaryBookingInfo>;\n};\n\n\nexport type MutationCancelBookingArgs = {\n basketItem: Scalars['ID'];\n};\n\n\nexport type MutationConfermaCreateCardArgs = {\n label: Scalars['String'];\n};\n\n\nexport type MutationConfermaDeleteCardArgs = {\n id: Scalars['ID'];\n};\n\n\nexport type MutationSetBasketItemMiGroupArgs = {\n basketItem: Scalars['ID'];\n group?: Maybe<Scalars['String']>;\n};\n\n\nexport type MutationSetMiDefaultValueArgs = {\n mi: Scalars['ID'];\n value: Scalars['ID'];\n};\n\n\nexport type MutationSetBasketItemMiValueArgs = {\n mi: Scalars['ID'];\n miValue?: Maybe<Scalars['ID']>;\n miFreeValue?: Maybe<Scalars['String']>;\n user?: Maybe<Scalars['ID']>;\n};\n\n\nexport type MutationSetBasketItemPaymentMethodArgs = {\n basketItem: Scalars['ID'];\n paymentMethod: Scalars['ID'];\n};\n\n\nexport type MutationRevalidateBasketArgs = {\n id: Scalars['ID'];\n};\n\n\nexport type MutationRevalidateBasketItemArgs = {\n id: Scalars['ID'];\n};\n\n\nexport type MutationAcceptNewPriceArgs = {\n id: Scalars['ID'];\n};\n\n\nexport type MutationSaveFavouriteSearchArgs = {\n name: Scalars['String'];\n serviceType: ServiceType;\n searchArgs: Scalars['JSON'];\n};\n\n\nexport type MutationSaveRecentSearchArgs = {\n serviceType: ServiceType;\n searchArgs: Scalars['JSON'];\n travelDate: Scalars['DateTime'];\n travellers?: Maybe<Array<Maybe<Scalars['ID']>>>;\n};\n\n\nexport type MutationDeleteFavouriteSearchArgs = {\n id: Scalars['ID'];\n};\n\n\nexport type MutationDeleteRecentSearchArgs = {\n id: Scalars['ID'];\n};\n\n\nexport type MutationSetUserLanguageArgs = {\n language?: Maybe<Scalars['ID']>;\n};\n\nexport type Office = {\n __typename?: 'Office';\n id: FieldWrapper<Scalars['ID']>;\n name: FieldWrapper<Scalars['String']>;\n createdAt: FieldWrapper<Scalars['DateTime']>;\n updatedAt: FieldWrapper<Scalars['DateTime']>;\n company: FieldWrapper<Company>;\n addresses: Array<FieldWrapper<Address>>;\n phoneNumbers: Array<FieldWrapper<PhoneNumber>>;\n co2AllowancePeriod?: Maybe<FieldWrapper<Scalars['String']>>;\n co2AllowancePerPeriod?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type ParkingLocation = {\n __typename?: 'ParkingLocation';\n code: FieldWrapper<Scalars['String']>;\n name: FieldWrapper<Scalars['String']>;\n airport: FieldWrapper<Scalars['String']>;\n terminal?: Maybe<FieldWrapper<Scalars['Int']>>;\n latitude?: Maybe<FieldWrapper<Scalars['Float']>>;\n longitude?: Maybe<FieldWrapper<Scalars['Float']>>;\n address?: Maybe<FieldWrapper<Scalars['String']>>;\n distanceToAirport?: Maybe<FieldWrapper<Scalars['Float']>>;\n onAirport?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n carParkedForYou?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n meetAndGreet?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n telephone?: Maybe<FieldWrapper<Scalars['String']>>;\n fax?: Maybe<FieldWrapper<Scalars['String']>>;\n directions?: Maybe<FieldWrapper<Scalars['String']>>;\n arrivalProcedure?: Maybe<FieldWrapper<Scalars['String']>>;\n departureProcedure?: Maybe<FieldWrapper<Scalars['String']>>;\n maximumCarSize?: Maybe<FieldWrapper<Scalars['String']>>;\n introduction?: Maybe<FieldWrapper<Scalars['String']>>;\n information?: Maybe<FieldWrapper<Scalars['String']>>;\n transferInformation?: Maybe<FieldWrapper<Scalars['String']>>;\n transferOperatingTimes?: Maybe<FieldWrapper<Scalars['String']>>;\n transferTime?: Maybe<FieldWrapper<Scalars['Float']>>;\n logo?: Maybe<FieldWrapper<Scalars['String']>>;\n defaultImage?: Maybe<FieldWrapper<Scalars['String']>>;\n brandImage?: Maybe<FieldWrapper<Scalars['String']>>;\n mobileImage?: Maybe<FieldWrapper<Scalars['String']>>;\n furtherImages?: Maybe<Array<Maybe<FieldWrapper<Scalars['String']>>>>;\n misc?: Maybe<FieldWrapper<Scalars['JSON']>>;\n};\n\nexport type ParkingQuote = {\n __typename?: 'ParkingQuote';\n source: FieldWrapper<Scalars['String']>;\n sourceId: FieldWrapper<Scalars['Int']>;\n carPark: FieldWrapper<ParkingLocation>;\n requiredInfo: Array<FieldWrapper<Scalars['String']>>;\n price: FieldWrapper<Scalars['Float']>;\n currency: FieldWrapper<CurrencyCode>;\n misc?: Maybe<FieldWrapper<Scalars['JSON']>>;\n tmcPreferred: FieldWrapper<Scalars['Boolean']>;\n companyPreferred: FieldWrapper<Scalars['Boolean']>;\n officePreferred: FieldWrapper<Scalars['Boolean']>;\n tmcPreferredMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n companyPreferredMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n officePreferredMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n unavailable: FieldWrapper<Scalars['Boolean']>;\n unavailableMessage?: Maybe<FieldWrapper<Scalars['String']>>;\n co2PerPassenger: FieldWrapper<Scalars['Float']>;\n co2PerItem: FieldWrapper<Scalars['Float']>;\n};\n\nexport type ParkingSearchResult = {\n __typename?: 'ParkingSearchResult';\n results: Array<FieldWrapper<ParkingQuote>>;\n errors: Array<FieldWrapper<SearchError>>;\n};\n\nexport enum PassengerType {\n Adult = 'ADULT',\n Child = 'CHILD',\n Infant = 'INFANT'\n}\n\nexport type Passport = {\n __typename?: 'Passport';\n id: FieldWrapper<Scalars['ID']>;\n number: FieldWrapper<Scalars['String']>;\n codeOfIssuingState: FieldWrapper<Scalars['String']>;\n nationality: FieldWrapper<Scalars['String']>;\n sex: FieldWrapper<PassportSex>;\n dob: FieldWrapper<Scalars['DateTime']>;\n surname: FieldWrapper<Scalars['String']>;\n givenNames: FieldWrapper<Scalars['String']>;\n dateOfIssue: FieldWrapper<Scalars['DateTime']>;\n user: FieldWrapper<User>;\n createdAt: FieldWrapper<Scalars['DateTime']>;\n updatedAt: FieldWrapper<Scalars['DateTime']>;\n};\n\nexport enum PassportSex {\n M = 'M',\n F = 'F'\n}\n\nexport type PaymentConfig = {\n cspUrl?: Maybe<Scalars['String']>;\n agentId?: Maybe<Scalars['String']>;\n bookerId?: Maybe<Scalars['String']>;\n apiKey?: Maybe<Scalars['String']>;\n password?: Maybe<Scalars['String']>;\n server?: Maybe<Scalars['String']>;\n consumer?: Maybe<Scalars['String']>;\n clientId?: Maybe<Scalars['String']>;\n accountType?: Maybe<Scalars['String']>;\n accountValue?: Maybe<Scalars['String']>;\n tokenUrl?: Maybe<Scalars['String']>;\n tokenId?: Maybe<Scalars['String']>;\n consumerId?: Maybe<Scalars['String']>;\n tokenUsername?: Maybe<Scalars['String']>;\n tokenPassword?: Maybe<Scalars['String']>;\n};\n\nexport type PaymentMethod = {\n __typename?: 'PaymentMethod';\n id: FieldWrapper<Scalars['ID']>;\n name: FieldWrapper<Scalars['String']>;\n description?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type PaymentMethodInput = {\n config?: Maybe<PaymentConfig>;\n};\n\nexport type PhoneNumber = {\n __typename?: 'PhoneNumber';\n id: FieldWrapper<Scalars['ID']>;\n description?: Maybe<FieldWrapper<Scalars['String']>>;\n countryCode?: Maybe<FieldWrapper<Scalars['String']>>;\n areaCode?: Maybe<FieldWrapper<Scalars['String']>>;\n number?: Maybe<FieldWrapper<Scalars['String']>>;\n extension?: Maybe<FieldWrapper<Scalars['String']>>;\n type?: Maybe<FieldWrapper<PhoneType>>;\n officePrimary?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n userPrimary?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n};\n\nexport enum PhoneType {\n Mobile = 'MOBILE',\n Landline = 'LANDLINE',\n Fax = 'FAX',\n Other = 'OTHER'\n}\n\nexport type PostcodeDetails = {\n __typename?: 'PostcodeDetails';\n postcode: FieldWrapper<Scalars['String']>;\n latitude?: Maybe<FieldWrapper<Scalars['Float']>>;\n longitude?: Maybe<FieldWrapper<Scalars['Float']>>;\n eastings?: Maybe<FieldWrapper<Scalars['Int']>>;\n northings?: Maybe<FieldWrapper<Scalars['Int']>>;\n country?: Maybe<FieldWrapper<Scalars['String']>>;\n europeanElectoralRegion?: Maybe<FieldWrapper<Scalars['String']>>;\n primaryCareTrust?: Maybe<FieldWrapper<Scalars['String']>>;\n region?: Maybe<FieldWrapper<Scalars['String']>>;\n lsoa?: Maybe<FieldWrapper<Scalars['String']>>;\n msoa?: Maybe<FieldWrapper<Scalars['String']>>;\n incode?: Maybe<FieldWrapper<Scalars['String']>>;\n outcode?: Maybe<FieldWrapper<Scalars['String']>>;\n parliamentaryConstituency?: Maybe<FieldWrapper<Scalars['String']>>;\n adminDistrict?: Maybe<FieldWrapper<Scalars['String']>>;\n parish?: Maybe<FieldWrapper<Scalars['String']>>;\n adminCounty?: Maybe<FieldWrapper<Scalars['String']>>;\n adminWard?: Maybe<FieldWrapper<Scalars['String']>>;\n ced?: Maybe<FieldWrapper<Scalars['String']>>;\n ccg?: Maybe<FieldWrapper<Scalars['String']>>;\n nuts?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type Query = {\n __typename?: 'Query';\n getUserAddresses: Array<FieldWrapper<Address>>;\n searchAirlines: FieldWrapper<AirlineResults>;\n searchAirports: FieldWrapper<AirportResults>;\n getUserBasket: FieldWrapper<Basket>;\n getUserBaskets: Array<FieldWrapper<Basket>>;\n searchCabHire: FieldWrapper<CabHireResult>;\n searchUserCanBookFor: Array<FieldWrapper<User>>;\n getCancellationInfo: FieldWrapper<BeforeCancellationInfo>;\n searchCarHire: FieldWrapper<CarHireResult>;\n getCarHireDepots: Array<FieldWrapper<CarHireDepot>>;\n carHireAvailabilityDetailRequest: FieldWrapper<CarHireDetailRequestResponse>;\n getUserCurrentCarbonAllowance?: Maybe<FieldWrapper<CarbonAllowance>>;\n searchCities: Array<FieldWrapper<City>>;\n confermaBlockClientHotels: FieldWrapper<ConfermaBlockedHotelsResult>;\n confermaUnblockClientHotels: FieldWrapper<ConfermaBlockedHotelsResult>;\n confermaBlockConsumerHotels: FieldWrapper<ConfermaBlockedHotelsResult>;\n confermaUnblockConsumerHotels: FieldWrapper<ConfermaBlockedHotelsResult>;\n confermaListCards: Array<FieldWrapper<ConfermaCardResults>>;\n searchConfermaCities: FieldWrapper<ConfermaCityLocation>;\n getConfermaOffice: FieldWrapper<ConfermaOfficeResult>;\n getConfermaOfficeNames: FieldWrapper<ConfermaOfficeNamesResult>;\n getConfermaQuicklist: FieldWrapper<HotelSearchResult>;\n getCountries: Array<FieldWrapper<Country>>;\n getCOVIDMicrositeToken: FieldWrapper<Scalars['String']>;\n searchFastTrack: FieldWrapper<FastTrackResult>;\n searchFlights: FieldWrapper<FlightSearchResult>;\n searchFlightsV2: FieldWrapper<FlightSearchResultV2>;\n searchEurostar: FieldWrapper<FlightSearchResultV2>;\n alive: FieldWrapper<Scalars['Boolean']>;\n getHotelChains: Array<FieldWrapper<Scalars['String']>>;\n searchHotelChains: Array<FieldWrapper<Scalars['String']>>;\n searchHotels: FieldWrapper<HotelSearchResult>;\n getHotelAvailability: FieldWrapper<HotelAvailabilityResult>;\n getMultipleHotelsAvailability: FieldWrapper<HotelMultiAvailabilityResult>;\n getIRLSupplierStation?: Maybe<FieldWrapper<IrlSupplierStation>>;\n searchIRLSupplierStations: Array<FieldWrapper<IrlSupplierStation>>;\n searchIRL: FieldWrapper<IrlSearchResult>;\n searchLounges: FieldWrapper<LoungeSearchResult>;\n getUserMIAutoSuggestValues: Array<FieldWrapper<ManagementInfoValue>>;\n validateUserMIFreeValue: FieldWrapper<Scalars['Boolean']>;\n validateBasketItemMI: FieldWrapper<Scalars['Boolean']>;\n getUserMessages: Array<FieldWrapper<Message>>;\n getUserCompanyOffices: Array<FieldWrapper<Office>>;\n searchParking: FieldWrapper<ParkingSearchResult>;\n getUserPhoneNumbers: Array<FieldWrapper<PhoneNumber>>;\n getPostcodeDetails: FieldWrapper<PostcodeDetails>;\n postcodeAutoSuggest: Array<FieldWrapper<Scalars['String']>>;\n searchPostcodes: Array<FieldWrapper<PostcodeDetails>>;\n isPostcodeValid: FieldWrapper<Scalars['Boolean']>;\n getRailStation: FieldWrapper<RailStation>;\n searchRailStations: Array<FieldWrapper<RailStation>>;\n searchRail: FieldWrapper<RailSearchResult>;\n getRailcards: Array<FieldWrapper<ReferenceRailCardQualifier>>;\n getRiskAlerts: Array<FieldWrapper<RiskAlert>>;\n getUserTravelRules: FieldWrapper<TravelRulesCollection>;\n getUserRecentSearches: Array<FieldWrapper<Search>>;\n getUserFavouriteSearches: Array<FieldWrapper<Search>>;\n getUserServices: Array<FieldWrapper<Service>>;\n getUserUIConfigs: FieldWrapper<UiConfigCollection>;\n getUser: FieldWrapper<User>;\n};\n\n\nexport type QuerySearchAirlinesArgs = {\n query: Scalars['String'];\n};\n\n\nexport type QuerySearchAirportsArgs = {\n query: Scalars['String'];\n countryCode?: Maybe<Scalars['String']>;\n hasLounge?: Maybe<Scalars['Boolean']>;\n hasParking?: Maybe<Scalars['Boolean']>;\n hasFastTrack?: Maybe<Scalars['Boolean']>;\n excludeNonPublic?: Maybe<Scalars['Boolean']>;\n};\n\n\nexport type QueryGetUserBasketArgs = {\n id: Scalars['ID'];\n};\n\n\nexport type QueryGetUserBasketsArgs = {\n user?: Maybe<Scalars['ID']>;\n traveller?: Maybe<Scalars['ID']>;\n basketStatus?: Maybe<BasketStatus>;\n createdAfter?: Maybe<Scalars['DateTime']>;\n createdBefore?: Maybe<Scalars['DateTime']>;\n bookedAfter?: Maybe<Scalars['DateTime']>;\n bookedBefore?: Maybe<Scalars['DateTime']>;\n dateOfTravelBefore?: Maybe<Scalars['DateTime']>;\n dateOfTravelAfter?: Maybe<Scalars['DateTime']>;\n basketItemBookingReference?: Maybe<Scalars['String']>;\n basketReference?: Maybe<Scalars['String']>;\n basketTitle?: Maybe<Scalars['String']>;\n};\n\n\nexport type QuerySearchCabHireArgs = {\n departs: Scalars['DateTime'];\n fromLocation: CabHireLocationInput;\n toLocation: CabHireLocationInput;\n adults: Scalars['Int'];\n children?: Maybe<Scalars['Int']>;\n infants?: Maybe<Scalars['Int']>;\n vias?: Maybe<Array<Maybe<CabHireLocationInput>>>;\n vehicleType?: Maybe<CabHireVehicleType>;\n};\n\n\nexport type QuerySearchUserCanBookForArgs = {\n email?: Maybe<Scalars['String']>;\n userName?: Maybe<Scalars['String']>;\n employeeId?: Maybe<Scalars['String']>;\n};\n\n\nexport type QueryGetCancellationInfoArgs = {\n basketItem: Scalars['ID'];\n};\n\n\nexport type QuerySearchCarHireArgs = {\n airport?: Maybe<CarHireAirportInput>;\n city?: Maybe<CarHireCityInput>;\n location?: Maybe<CarHireLocationInput>;\n depot?: Maybe<InputCarHireDepot>;\n pickupDateTime: Scalars['DateTime'];\n dropoffDateTime: Scalars['DateTime'];\n vendor?: Maybe<Scalars['String']>;\n class?: Maybe<CarHireClass>;\n type?: Maybe<CarHireType>;\n transmission?: Maybe<CarHireTransmission>;\n aircon?: Maybe<Scalars['Boolean']>;\n estimatedDailyDistance?: Maybe<Scalars['Float']>;\n estimatedDailyDistanceUnits?: Maybe<DistanceTypes>;\n};\n\n\nexport type QueryGetCarHireDepotsArgs = {\n latitude: Scalars['Float'];\n longitude: Scalars['Float'];\n vendorCode?: Maybe<Scalars['String']>;\n};\n\n\nexport type QueryCarHireAvailabilityDetailRequestArgs = {\n locationDetails: CarHireInputIdentifiers;\n};\n\n\nexport type QueryGetUserCurrentCarbonAllowanceArgs = {\n user?: Maybe<Scalars['ID']>;\n};\n\n\nexport type QuerySearchCitiesArgs = {\n query: Scalars['String'];\n countryCode?: Maybe<Scalars['String']>;\n};\n\n\nexport type QueryConfermaBlockClientHotelsArgs = {\n hotelIds: Array<Scalars['String']>;\n groupIds: Array<Scalars['String']>;\n};\n\n\nexport type QueryConfermaUnblockClientHotelsArgs = {\n hotelIds: Array<Scalars['String']>;\n groupIds: Array<Scalars['String']>;\n};\n\n\nexport type QueryConfermaBlockConsumerHotelsArgs = {\n hotelIds: Array<Scalars['String']>;\n groupIds: Array<Scalars['String']>;\n};\n\n\nexport type QueryConfermaUnblockConsumerHotelsArgs = {\n hotelIds: Array<Scalars['String']>;\n groupIds: Array<Scalars['String']>;\n};\n\n\nexport type QueryConfermaListCardsArgs = {\n companyId?: Maybe<Scalars['ID']>;\n officeId?: Maybe<Scalars['ID']>;\n};\n\n\nexport type QuerySearchConfermaCitiesArgs = {\n cityName: Scalars['String'];\n countryCode: Scalars['String'];\n};\n\n\nexport type QueryGetConfermaOfficeArgs = {\n officeId: Scalars['Int'];\n};\n\n\nexport type QueryGetConfermaQuicklistArgs = {\n countryCode: Scalars['String'];\n};\n\n\nexport type QuerySearchFastTrackArgs = {\n arrivalDatetime: Scalars['DateTime'];\n locationCode: Scalars['String'];\n adults: Scalars['Int'];\n children?: Maybe<Scalars['Int']>;\n};\n\n\nexport type QuerySearchFlightsArgs = {\n passengers: Array<FlightPassengerObject>;\n originAirport?: Maybe<Scalars['String']>;\n destinationAirport?: Maybe<Scalars['String']>;\n multiDestination?: Maybe<Array<Maybe<DestinationEntry>>>;\n outboundDate?: Maybe<Scalars['Date']>;\n outboundDepartureTimeWindow?: Maybe<Scalars['String']>;\n outboundArrivalTimeWindow?: Maybe<Scalars['String']>;\n outboundCabinClass?: Maybe<Array<Maybe<FlightCabinClass>>>;\n returnTrip: Scalars['Boolean'];\n returnDate?: Maybe<Scalars['Date']>;\n returnDepartureTimeWindow?: Maybe<Scalars['String']>;\n returnArrivalTimeWindow?: Maybe<Scalars['String']>;\n returnCabinClass?: Maybe<Array<Maybe<FlightCabinClass>>>;\n fareType: FareType;\n requireFreeBag?: Maybe<Scalars['Boolean']>;\n maxConnections?: Maybe<Scalars['Int']>;\n preferredCarriers?: Maybe<Array<Maybe<Scalars['String']>>>;\n includeNearbyAirports?: Maybe<Scalars['Boolean']>;\n asSingles?: Maybe<Scalars['Boolean']>;\n};\n\n\nexport type QuerySearchFlightsV2Args = {\n passengers: Array<FlightPassengerObject>;\n originAirport?: Maybe<Scalars['String']>;\n destinationAirport?: Maybe<Scalars['String']>;\n multiDestination?: Maybe<Array<Maybe<DestinationEntry>>>;\n outboundDate?: Maybe<Scalars['Date']>;\n outboundDepartureTimeWindow?: Maybe<Scalars['String']>;\n outboundArrivalTimeWindow?: Maybe<Scalars['String']>;\n outboundCabinClass?: Maybe<Array<Maybe<FlightCabinClass>>>;\n returnTrip: Scalars['Boolean'];\n returnDate?: Maybe<Scalars['Date']>;\n returnDepartureTimeWindow?: Maybe<Scalars['String']>;\n returnArrivalTimeWindow?: Maybe<Scalars['String']>;\n returnCabinClass?: Maybe<Array<Maybe<FlightCabinClass>>>;\n fareType: FareType;\n requireFreeBag?: Maybe<Scalars['Boolean']>;\n maxConnections?: Maybe<Scalars['Int']>;\n preferredCarriers?: Maybe<Array<Maybe<Scalars['String']>>>;\n includeNearbyAirports?: Maybe<Scalars['Boolean']>;\n asSingles?: Maybe<Scalars['Boolean']>;\n};\n\n\nexport type QuerySearchEurostarArgs = {\n passengers: Array<FlightPassengerObject>;\n originAirport?: Maybe<Scalars['String']>;\n destinationAirport?: Maybe<Scalars['String']>;\n multiDestination?: Maybe<Array<Maybe<DestinationEntry>>>;\n outboundDate?: Maybe<Scalars['Date']>;\n outboundDepartureTimeWindow?: Maybe<Scalars['String']>;\n outboundArrivalTimeWindow?: Maybe<Scalars['String']>;\n outboundCabinClass?: Maybe<Array<Maybe<FlightCabinClass>>>;\n returnTrip: Scalars['Boolean'];\n returnDate?: Maybe<Scalars['Date']>;\n returnDepartureTimeWindow?: Maybe<Scalars['String']>;\n returnArrivalTimeWindow?: Maybe<Scalars['String']>;\n returnCabinClass?: Maybe<Array<Maybe<FlightCabinClass>>>;\n fareType: FareType;\n requireFreeBag?: Maybe<Scalars['Boolean']>;\n maxConnections?: Maybe<Scalars['Int']>;\n preferredCarriers?: Maybe<Array<Maybe<Scalars['String']>>>;\n includeNearbyAirports?: Maybe<Scalars['Boolean']>;\n asSingles?: Maybe<Scalars['Boolean']>;\n};\n\n\nexport type QuerySearchHotelChainsArgs = {\n query: Scalars['String'];\n};\n\n\nexport type QuerySearchHotelsArgs = {\n startDate: Scalars['Date'];\n endDate: Scalars['Date'];\n cityName?: Maybe<Scalars['String']>;\n postOrZipCode?: Maybe<Scalars['String']>;\n countryCode?: Maybe<Scalars['String']>;\n latitude?: Maybe<Scalars['Float']>;\n longitude?: Maybe<Scalars['Float']>;\n trainStationCode?: Maybe<Scalars['String']>;\n iata?: Maybe<Scalars['String']>;\n officeId?: Maybe<Scalars['Int']>;\n rooms: Scalars['Int'];\n adults: Scalars['Int'];\n children?: Maybe<Scalars['Int']>;\n currency: Scalars['String'];\n distanceType: DistanceTypes;\n distance: Scalars['Int'];\n maxResults?: Maybe<Scalars['Int']>;\n hotelName?: Maybe<Scalars['String']>;\n groupName?: Maybe<Scalars['String']>;\n};\n\n\nexport type QueryGetHotelAvailabilityArgs = {\n hotel: Scalars['String'];\n startDate: Scalars['Date'];\n endDate: Scalars['Date'];\n currency: Scalars['String'];\n occupants: Scalars['Int'];\n rooms?: Maybe<Scalars['Int']>;\n};\n\n\nexport type QueryGetMultipleHotelsAvailabilityArgs = {\n hotel: Array<Scalars['String']>;\n startDate: Scalars['Date'];\n endDate: Scalars['Date'];\n currency: Scalars['String'];\n occupants: Scalars['Int'];\n rooms?: Maybe<Scalars['Int']>;\n};\n\n\nexport type QueryGetIrlSupplierStationArgs = {\n id?: Maybe<Scalars['ID']>;\n supplier?: Maybe<IrlSupplier>;\n code?: Maybe<Scalars['String']>;\n};\n\n\nexport type QuerySearchIrlSupplierStationsArgs = {\n query: Scalars['String'];\n supplier: IrlSupplier;\n};\n\n\nexport type QuerySearchIrlArgs = {\n supplier: IrlSupplier;\n countryCode: Scalars['String'];\n journeyType: IrlJourneyType;\n class?: Maybe<IrlClass>;\n outboundDepartureDateTime: Scalars['DateTime'];\n departureLocationId: Scalars['ID'];\n arrivalLocationId: Scalars['ID'];\n adults: Scalars['Int'];\n children?: Maybe<Scalars['Int']>;\n returnDepartureDateTime?: Maybe<Scalars['DateTime']>;\n};\n\n\nexport type QuerySearchLoungesArgs = {\n locationCode: Scalars['String'];\n arrivalDatetime: Scalars['DateTime'];\n adults: Scalars['Int'];\n children?: Maybe<Scalars['Int']>;\n infants?: Maybe<Scalars['Int']>;\n terminal?: Maybe<Scalars['String']>;\n};\n\n\nexport type QueryGetUserMiAutoSuggestValuesArgs = {\n mi: Scalars['ID'];\n partialLabel: Scalars['String'];\n};\n\n\nexport type QueryValidateUserMiFreeValueArgs = {\n mi: Scalars['ID'];\n freeValue: Scalars['String'];\n};\n\n\nexport type QueryValidateBasketItemMiArgs = {\n basketItem: Scalars['ID'];\n};\n\n\nexport type QueryGetUserMessagesArgs = {\n target?: Maybe<Scalars['String']>;\n};\n\n\nexport type QuerySearchParkingArgs = {\n arrivalDatetime: Scalars['DateTime'];\n departDatetime: Scalars['DateTime'];\n locationCode: Scalars['String'];\n outFlightNumber?: Maybe<Scalars['String']>;\n recommended?: Maybe<Scalars['Boolean']>;\n onAirport?: Maybe<Scalars['Boolean']>;\n meetAndGreet?: Maybe<Scalars['Boolean']>;\n parkAndRide?: Maybe<Scalars['Boolean']>;\n parkAndStroll?: Maybe<Scalars['Boolean']>;\n carParkedForYou?: Maybe<Scalars['Boolean']>;\n terminal?: Maybe<Scalars['String']>;\n};\n\n\nexport type QueryGetPostcodeDetailsArgs = {\n postcode: Scalars['String'];\n};\n\n\nexport type QueryPostcodeAutoSuggestArgs = {\n postcode: Scalars['String'];\n};\n\n\nexport type QuerySearchPostcodesArgs = {\n query: Scalars['String'];\n};\n\n\nexport type QueryIsPostcodeValidArgs = {\n postcode: Scalars['String'];\n};\n\n\nexport type QueryGetRailStationArgs = {\n id?: Maybe<Scalars['ID']>;\n code?: Maybe<Scalars['String']>;\n};\n\n\nexport type QuerySearchRailStationsArgs = {\n query: Scalars['String'];\n countryCode?: Maybe<Scalars['String']>;\n};\n\n\nexport type QuerySearchRailArgs = {\n countryCode: Scalars['String'];\n journeyType: RailJourneyType;\n class?: Maybe<RailClass>;\n outboundArrivalDateTime?: Maybe<Scalars['DateTime']>;\n outboundDepartureDateTime?: Maybe<Scalars['DateTime']>;\n departureLocationId: Scalars['ID'];\n arrivalLocationId: Scalars['ID'];\n adults: Scalars['Int'];\n children?: Maybe<Scalars['Int']>;\n returnArrivalDateTime?: Maybe<Scalars['DateTime']>;\n returnDepartureDateTime?: Maybe<Scalars['DateTime']>;\n railCardQualifiers?: Maybe<Array<Scalars['String']>>;\n viaLocationId?: Maybe<Scalars['ID']>;\n extraTimeToChange?: Maybe<Scalars['Boolean']>;\n plusBusOut?: Maybe<RailPlusBusAvail>;\n plusBusReturn?: Maybe<RailPlusBusAvail>;\n};\n\n\nexport type QueryGetRiskAlertsArgs = {\n minLevel?: Maybe<RiskLevel>;\n maxLevel?: Maybe<RiskLevel>;\n countryIsoCode?: Maybe<Scalars['String']>;\n airport?: Maybe<Scalars['ID']>;\n railStation?: Maybe<Scalars['ID']>;\n airportIata?: Maybe<Scalars['String']>;\n};\n\n\nexport type QueryGetUserRecentSearchesArgs = {\n serviceType?: Maybe<ServiceType>;\n};\n\n\nexport type QueryGetUserFavouriteSearchesArgs = {\n serviceType?: Maybe<ServiceType>;\n};\n\n\nexport type QueryGetUserUiConfigsArgs = {\n target?: Maybe<Scalars['String']>;\n};\n\n\nexport type QueryGetUserArgs = {\n id?: Maybe<Scalars['ID']>;\n};\n\nexport type RailAccount = {\n __typename?: 'RailAccount';\n id?: Maybe<FieldWrapper<Scalars['String']>>;\n reference?: Maybe<FieldWrapper<Scalars['String']>>;\n description?: Maybe<FieldWrapper<Scalars['String']>>;\n isDefault?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n type?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type RailCallingPoint = {\n __typename?: 'RailCallingPoint';\n stationName?: Maybe<FieldWrapper<Scalars['String']>>;\n stationCode?: Maybe<FieldWrapper<Scalars['String']>>;\n arrivalDateTime?: Maybe<FieldWrapper<Scalars['DateTime']>>;\n departureDateTime?: Maybe<FieldWrapper<Scalars['DateTime']>>;\n scheduledPlatform?: Maybe<FieldWrapper<Scalars['String']>>;\n stationClassification?: Maybe<FieldWrapper<RailStationClassification>>;\n stoppingPattern?: Maybe<FieldWrapper<RailStoppingPattern>>;\n};\n\nexport enum RailClass {\n All = 'All',\n First = 'First',\n Standard = 'Standard'\n}\n\nexport type RailIdentifiers = {\n __typename?: 'RailIdentifiers';\n transactionIdentifier?: Maybe<FieldWrapper<Scalars['String']>>;\n journeyIdentifier?: Maybe<FieldWrapper<Scalars['String']>>;\n provider?: Maybe<FieldWrapper<Scalars['String']>>;\n fareIdentifier?: Maybe<FieldWrapper<Scalars['String']>>;\n direction?: Maybe<FieldWrapper<Scalars['String']>>;\n allowedWith: Array<FieldWrapper<RailIdentifiers>>;\n singleOrReturn?: Maybe<FieldWrapper<Scalars['String']>>;\n bookingRef?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type RailJourneyOption = {\n __typename?: 'RailJourneyOption';\n identifiers?: Maybe<FieldWrapper<RailIdentifiers>>;\n travellers?: Maybe<Array<FieldWrapper<RailTraveller>>>;\n co2PerItem?: Maybe<FieldWrapper<Scalars['Float']>>;\n co2PerPassenger?: Maybe<FieldWrapper<Scalars['Float']>>;\n from?: Maybe<FieldWrapper<Scalars['String']>>;\n fromCode?: Maybe<FieldWrapper<Scalars['String']>>;\n to?: Maybe<FieldWrapper<Scalars['String']>>;\n toCode?: Maybe<FieldWrapper<Scalars['String']>>;\n departDateTime?: Maybe<FieldWrapper<Scalars['DateTime']>>;\n arriveDateTime?: Maybe<FieldWrapper<Scalars['DateTime']>>;\n changes?: Maybe<FieldWrapper<Scalars['String']>>;\n segments?: Maybe<Array<FieldWrapper<RailSegment>>>;\n providers?: Maybe<Array<FieldWrapper<RailProvider>>>;\n unsellable?: Maybe<FieldWrapper<Scalars['String']>>;\n ticketExtras?: Maybe<Array<FieldWrapper<RailTicketExtra>>>;\n plusBus?: Maybe<FieldWrapper<RailPlusBus>>;\n};\n\nexport type RailJourneyOptions = {\n __typename?: 'RailJourneyOptions';\n source: FieldWrapper<Scalars['String']>;\n sourceId: FieldWrapper<Scalars['Int']>;\n outbound?: Maybe<Array<FieldWrapper<RailJourneyOption>>>;\n return?: Maybe<Array<FieldWrapper<RailJourneyOption>>>;\n};\n\nexport enum RailJourneyType {\n ReturnJourney = 'ReturnJourney',\n SingleJourney = 'SingleJourney',\n DualSingleJourney = 'DualSingleJourney',\n OpenReturnJourney = 'OpenReturnJourney'\n}\n\nexport type RailPlusBus = {\n __typename?: 'RailPlusBus';\n originPlusBusNLC?: Maybe<FieldWrapper<Scalars['String']>>;\n originStationNLC?: Maybe<FieldWrapper<Scalars['String']>>;\n destinationPlusBusNLC?: Maybe<FieldWrapper<Scalars['String']>>;\n destinationStationNLC?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type RailPlusBusAvail = {\n origin?: Maybe<Scalars['Boolean']>;\n destination?: Maybe<Scalars['Boolean']>;\n};\n\nexport type RailProvider = {\n __typename?: 'RailProvider';\n providerId?: Maybe<FieldWrapper<Scalars['String']>>;\n name?: Maybe<FieldWrapper<Scalars['String']>>;\n cheapestTicket?: Maybe<FieldWrapper<RailTicketOption>>;\n ticketOptions?: Maybe<Array<Maybe<FieldWrapper<RailTicketOption>>>>;\n bookedTicket?: Maybe<FieldWrapper<RailTicketOption>>;\n};\n\nexport type RailSearchResult = {\n __typename?: 'RailSearchResult';\n results: Array<FieldWrapper<RailJourneyOptions>>;\n errors: Array<FieldWrapper<SearchError>>;\n};\n\nexport type RailSeat = {\n __typename?: 'RailSeat';\n location?: Maybe<FieldWrapper<Scalars['String']>>;\n coach?: Maybe<FieldWrapper<Scalars['String']>>;\n number?: Maybe<FieldWrapper<Scalars['String']>>;\n direction?: Maybe<FieldWrapper<Scalars['String']>>;\n position?: Maybe<FieldWrapper<Scalars['String']>>;\n deck?: Maybe<FieldWrapper<Scalars['String']>>;\n seatType?: Maybe<FieldWrapper<Scalars['String']>>;\n seatSelection?: Maybe<FieldWrapper<Scalars['String']>>;\n facilities?: Maybe<Array<Maybe<FieldWrapper<Scalars['String']>>>>;\n note: FieldWrapper<Scalars['String']>;\n};\n\nexport type RailSeatPreferenceType = {\n __typename?: 'RailSeatPreferenceType';\n name?: Maybe<FieldWrapper<Scalars['String']>>;\n allowedValues?: Maybe<Array<Maybe<FieldWrapper<Scalars['String']>>>>;\n};\n\nexport type RailSegment = {\n __typename?: 'RailSegment';\n id?: Maybe<FieldWrapper<Scalars['String']>>;\n operator?: Maybe<FieldWrapper<Scalars['String']>>;\n depart?: Maybe<FieldWrapper<Scalars['String']>>;\n departDateTime?: Maybe<FieldWrapper<Scalars['DateTime']>>;\n arrive?: Maybe<FieldWrapper<Scalars['String']>>;\n arriveDateTime?: Maybe<FieldWrapper<Scalars['DateTime']>>;\n reservableStatus?: Maybe<FieldWrapper<Scalars['String']>>;\n seatPreferenceTypes?: Maybe<Array<FieldWrapper<RailSeatPreferenceType>>>;\n seatPreferenceGroup?: Maybe<FieldWrapper<Scalars['String']>>;\n seats?: Maybe<Array<FieldWrapper<RailSeat>>>;\n callingPoints?: Maybe<Array<FieldWrapper<RailCallingPoint>>>;\n};\n\nexport type RailStation = {\n __typename?: 'RailStation';\n id: FieldWrapper<Scalars['ID']>;\n name: FieldWrapper<Scalars['String']>;\n stationCode: FieldWrapper<Scalars['String']>;\n nlcCode?: Maybe<FieldWrapper<Scalars['Int']>>;\n trainlineCode?: Maybe<FieldWrapper<Scalars['String']>>;\n trainlineUniqueCode?: Maybe<FieldWrapper<Scalars['String']>>;\n locationDetails?: Maybe<FieldWrapper<LocationDetail>>;\n};\n\nexport enum RailStationClassification {\n Origin = 'Origin',\n Intermediate = 'Intermediate',\n Destination = 'Destination',\n Unknown = 'Unknown'\n}\n\nexport enum RailStoppingPattern {\n RequestStop = 'RequestStop',\n PickUpOnly = 'PickUpOnly',\n SetDownOnly = 'SetDownOnly',\n Normal = 'Normal',\n Passing = 'Passing',\n Unknown = 'Unknown'\n}\n\nexport type RailTextValuePair = {\n __typename?: 'RailTextValuePair';\n text: FieldWrapper<Scalars['String']>;\n value?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type RailTicket = {\n __typename?: 'RailTicket';\n price?: Maybe<FieldWrapper<Scalars['Float']>>;\n type?: Maybe<FieldWrapper<Scalars['String']>>;\n route?: Maybe<FieldWrapper<Scalars['String']>>;\n segments?: Maybe<Array<FieldWrapper<RailSegment>>>;\n numChildren?: Maybe<FieldWrapper<Scalars['Int']>>;\n numAdults?: Maybe<FieldWrapper<Scalars['Int']>>;\n};\n\nexport type RailTicketExtra = {\n __typename?: 'RailTicketExtra';\n identifiers?: Maybe<FieldWrapper<RailTicketExtraIdentifiers>>;\n type?: Maybe<FieldWrapper<Scalars['String']>>;\n location?: Maybe<FieldWrapper<Scalars['String']>>;\n date?: Maybe<FieldWrapper<Scalars['Date']>>;\n description?: Maybe<FieldWrapper<Scalars['String']>>;\n amount?: Maybe<FieldWrapper<Scalars['Float']>>;\n adultAmount?: Maybe<FieldWrapper<Scalars['Float']>>;\n childAmount?: Maybe<FieldWrapper<Scalars['Float']>>;\n currency?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type RailTicketExtraIdentifiers = {\n __typename?: 'RailTicketExtraIdentifiers';\n type?: Maybe<FieldWrapper<Scalars['String']>>;\n location?: Maybe<FieldWrapper<Scalars['String']>>;\n date?: Maybe<FieldWrapper<Scalars['Date']>>;\n journeyId?: Maybe<FieldWrapper<Scalars['String']>>;\n isOrigin?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n};\n\nexport type RailTicketOption = {\n __typename?: 'RailTicketOption';\n identifiers?: Maybe<FieldWrapper<RailIdentifiers>>;\n type?: Maybe<FieldWrapper<Scalars['String']>>;\n terms?: Maybe<FieldWrapper<RailTicketTerms>>;\n class?: Maybe<FieldWrapper<Scalars['String']>>;\n singleOrReturn?: Maybe<FieldWrapper<Scalars['String']>>;\n price?: Maybe<FieldWrapper<Scalars['Float']>>;\n reservableStatus?: Maybe<FieldWrapper<Scalars['String']>>;\n currency?: Maybe<FieldWrapper<Scalars['String']>>;\n route?: Maybe<FieldWrapper<Scalars['String']>>;\n routeCode?: Maybe<FieldWrapper<Scalars['String']>>;\n availableSeats?: Maybe<FieldWrapper<Scalars['Int']>>;\n tickets?: Maybe<Array<Maybe<FieldWrapper<RailTicket>>>>;\n ticketQueueList?: Maybe<Array<Maybe<FieldWrapper<RailTicketQueue>>>>;\n accountsList?: Maybe<Array<Maybe<FieldWrapper<RailAccount>>>>;\n};\n\nexport type RailTicketQueue = {\n __typename?: 'RailTicketQueue';\n id?: Maybe<FieldWrapper<Scalars['String']>>;\n name?: Maybe<FieldWrapper<Scalars['String']>>;\n type?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type RailTicketTerms = {\n __typename?: 'RailTicketTerms';\n error?: Maybe<FieldWrapper<Scalars['String']>>;\n ticketTypeCode?: Maybe<FieldWrapper<Scalars['String']>>;\n trainOperatingCompanyCode?: Maybe<FieldWrapper<Scalars['String']>>;\n ticketTypeName?: Maybe<FieldWrapper<Scalars['String']>>;\n ticketTypeAltName?: Maybe<FieldWrapper<Scalars['String']>>;\n ticketTypeClass?: Maybe<FieldWrapper<Scalars['String']>>;\n reservationRule?: Maybe<FieldWrapper<Scalars['String']>>;\n journeyType?: Maybe<FieldWrapper<Scalars['String']>>;\n preBookingRequirement?: Maybe<FieldWrapper<Scalars['String']>>;\n generalValidity?: Maybe<FieldWrapper<Scalars['String']>>;\n validOutRule?: Maybe<FieldWrapper<Scalars['String']>>;\n validReturnRule?: Maybe<FieldWrapper<Scalars['String']>>;\n generalDiscount?: Maybe<FieldWrapper<Scalars['String']>>;\n childDiscount?: Maybe<FieldWrapper<Scalars['String']>>;\n railcardDiscount?: Maybe<FieldWrapper<Scalars['String']>>;\n refundCancellationRule?: Maybe<FieldWrapper<Scalars['String']>>;\n changeRule?: Maybe<FieldWrapper<Scalars['String']>>;\n ticketTypeConditionsDescription?: Maybe<FieldWrapper<Scalars['String']>>;\n journeyBreakRule?: Maybe<FieldWrapper<Scalars['String']>>;\n availabilityRule?: Maybe<FieldWrapper<Scalars['String']>>;\n todAvailable?: Maybe<FieldWrapper<Scalars['String']>>;\n kioskAvailable?: Maybe<FieldWrapper<Scalars['String']>>;\n startDate?: Maybe<FieldWrapper<Scalars['String']>>;\n endDate?: Maybe<FieldWrapper<Scalars['String']>>;\n dynamicConditions?: Maybe<Array<Maybe<FieldWrapper<DynamicCondition>>>>;\n};\n\nexport type RailTraveller = {\n __typename?: 'RailTraveller';\n status?: Maybe<FieldWrapper<RailTravellerStatus>>;\n id?: Maybe<FieldWrapper<Scalars['String']>>;\n dob?: Maybe<FieldWrapper<Scalars['Date']>>;\n railcard?: Maybe<FieldWrapper<Scalars['String']>>;\n givenName?: Maybe<FieldWrapper<Scalars['String']>>;\n surname?: Maybe<FieldWrapper<Scalars['String']>>;\n nameTitle?: Maybe<FieldWrapper<Scalars['String']>>;\n contactInfo?: Maybe<FieldWrapper<Scalars['String']>>;\n deliveryEmailAddress?: Maybe<FieldWrapper<Scalars['String']>>;\n fare?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport enum RailTravellerStatus {\n Placeholder = 'placeholder',\n Complete = 'complete'\n}\n\nexport type ReferenceRailCardQualifier = {\n __typename?: 'ReferenceRailCardQualifier';\n name: FieldWrapper<Scalars['String']>;\n code: FieldWrapper<Scalars['String']>;\n};\n\nexport type RiskAlert = {\n __typename?: 'RiskAlert';\n id: FieldWrapper<Scalars['ID']>;\n title: FieldWrapper<Scalars['String']>;\n description: FieldWrapper<Scalars['String']>;\n breaking: FieldWrapper<Scalars['Boolean']>;\n risk: FieldWrapper<RiskLevel>;\n category: FieldWrapper<Scalars['String']>;\n country: FieldWrapper<Scalars['String']>;\n location?: Maybe<FieldWrapper<Scalars['String']>>;\n latitude?: Maybe<FieldWrapper<Scalars['Float']>>;\n longitude?: Maybe<FieldWrapper<Scalars['Float']>>;\n startDate: FieldWrapper<Scalars['DateTime']>;\n endDate: FieldWrapper<Scalars['DateTime']>;\n receivedDate: FieldWrapper<Scalars['DateTime']>;\n};\n\nexport enum RiskLevel {\n Low = 'Low',\n Moderate = 'Moderate',\n Medium = 'Medium',\n High = 'High',\n Extreme = 'Extreme'\n}\n\nexport type Search = {\n __typename?: 'Search';\n id: FieldWrapper<Scalars['ID']>;\n name?: Maybe<FieldWrapper<Scalars['String']>>;\n serviceType: FieldWrapper<ServiceType>;\n searchArgs: FieldWrapper<Scalars['JSON']>;\n createdAt: FieldWrapper<Scalars['DateTime']>;\n updatedAt: FieldWrapper<Scalars['DateTime']>;\n travelDate?: Maybe<FieldWrapper<Scalars['DateTime']>>;\n travellers?: Maybe<Array<FieldWrapper<User>>>;\n};\n\nexport type SearchError = {\n __typename?: 'SearchError';\n service: FieldWrapper<Service>;\n errorMessage: FieldWrapper<Scalars['String']>;\n errorCode: FieldWrapper<Scalars['String']>;\n};\n\nexport type SearchResult = FlightItinerary | ItinerarySummary;\n\nexport type SelectedManagementInfoValue = {\n __typename?: 'SelectedManagementInfoValue';\n value?: Maybe<FieldWrapper<ManagementInfoValue>>;\n freeValue?: Maybe<FieldWrapper<Scalars['String']>>;\n basketLevelValue: FieldWrapper<Scalars['Boolean']>;\n userLevelValue: FieldWrapper<Scalars['Boolean']>;\n user?: Maybe<FieldWrapper<User>>;\n};\n\nexport type Service = {\n __typename?: 'Service';\n id: FieldWrapper<Scalars['ID']>;\n type: FieldWrapper<ServiceType>;\n name: FieldWrapper<Scalars['String']>;\n description: FieldWrapper<Scalars['String']>;\n supplierUrl: FieldWrapper<Scalars['String']>;\n active: FieldWrapper<Scalars['Boolean']>;\n apiEndpointUrl: FieldWrapper<Scalars['String']>;\n basketItemTtl: FieldWrapper<Scalars['Float']>;\n cancellable: FieldWrapper<Scalars['Boolean']>;\n amendable: FieldWrapper<Scalars['Boolean']>;\n detailSchema: FieldWrapper<Scalars['JSON']>;\n searchQuerySchema: FieldWrapper<Scalars['JSON']>;\n};\n\nexport enum ServiceType {\n Flight = 'FLIGHT',\n Eurostar = 'EUROSTAR',\n InternationalRail = 'INTERNATIONAL_RAIL',\n Rail = 'RAIL',\n Hotel = 'HOTEL',\n Car = 'CAR',\n Lounge = 'LOUNGE',\n FastTrack = 'FAST_TRACK',\n Parking = 'PARKING',\n Cab = 'CAB',\n Coach = 'COACH'\n}\n\nexport type StationSearchRequestResponse = {\n __typename?: 'StationSearchRequestResponse';\n text: FieldWrapper<Scalars['String']>;\n value: FieldWrapper<Scalars['String']>;\n};\n\nexport type SupplementaryBookingInfo = {\n basketItem: Scalars['ID'];\n userInfo: Array<UserInfo>;\n address?: Maybe<BookingAddress>;\n phoneNumber?: Maybe<BookingPhoneNumber>;\n supplementaryInfo: Scalars['JSON'];\n paymentMethodDetails: Scalars['JSON'];\n};\n\nexport type Tmc = {\n __typename?: 'TMC';\n id: FieldWrapper<Scalars['ID']>;\n name: FieldWrapper<Scalars['String']>;\n};\n\nexport type TravelRule = {\n __typename?: 'TravelRule';\n id: FieldWrapper<Scalars['ID']>;\n name: FieldWrapper<Scalars['String']>;\n description: FieldWrapper<Scalars['String']>;\n appliesTo: FieldWrapper<ServiceType>;\n applicationStage: FieldWrapper<ApplicationStage>;\n};\n\nexport type TravelRuleAppliesTo = {\n __typename?: 'TravelRuleAppliesTo';\n flight?: Maybe<Array<Maybe<FieldWrapper<TravelRule>>>>;\n rail?: Maybe<Array<Maybe<FieldWrapper<TravelRule>>>>;\n hotel?: Maybe<Array<Maybe<FieldWrapper<TravelRule>>>>;\n car?: Maybe<Array<Maybe<FieldWrapper<TravelRule>>>>;\n lounge?: Maybe<Array<Maybe<FieldWrapper<TravelRule>>>>;\n fastTrack?: Maybe<Array<Maybe<FieldWrapper<TravelRule>>>>;\n parking?: Maybe<Array<Maybe<FieldWrapper<TravelRule>>>>;\n cab?: Maybe<Array<Maybe<FieldWrapper<TravelRule>>>>;\n coach?: Maybe<Array<Maybe<FieldWrapper<TravelRule>>>>;\n};\n\nexport type TravelRulesCollection = {\n __typename?: 'TravelRulesCollection';\n tmc: Array<FieldWrapper<TravelRule>>;\n company: Array<FieldWrapper<TravelRule>>;\n offices: Array<FieldWrapper<TravelRule>>;\n companyGroups: Array<FieldWrapper<TravelRule>>;\n user: Array<FieldWrapper<TravelRule>>;\n all: Array<FieldWrapper<TravelRule>>;\n appliesTo?: Maybe<FieldWrapper<TravelRuleAppliesTo>>;\n};\n\nexport type UiConfig = {\n __typename?: 'UIConfig';\n id: FieldWrapper<Scalars['ID']>;\n name: FieldWrapper<Scalars['String']>;\n target: FieldWrapper<UiConfigTarget>;\n description?: Maybe<FieldWrapper<Scalars['String']>>;\n config?: Maybe<FieldWrapper<Scalars['JSON']>>;\n key: FieldWrapper<Scalars['String']>;\n};\n\nexport type UiConfigCollection = {\n __typename?: 'UIConfigCollection';\n tmc: Array<FieldWrapper<UiConfig>>;\n company: Array<FieldWrapper<UiConfig>>;\n office: Array<FieldWrapper<UiConfig>>;\n companyGroup: Array<FieldWrapper<UiConfig>>;\n user: Array<FieldWrapper<UiConfig>>;\n all: Array<FieldWrapper<UiConfig>>;\n};\n\nexport enum UiConfigTarget {\n All = 'ALL',\n Mock = 'MOCK',\n Lightning = 'LIGHTNING',\n App = 'APP'\n}\n\nexport enum UiPresentation {\n FreeText = 'FREE_TEXT',\n AutoSuggest = 'AUTO_SUGGEST',\n Hidden = 'HIDDEN'\n}\n\nexport type User = {\n __typename?: 'User';\n id: FieldWrapper<Scalars['ID']>;\n title: FieldWrapper<Scalars['String']>;\n forename: FieldWrapper<Scalars['String']>;\n surname: FieldWrapper<Scalars['String']>;\n email: FieldWrapper<Scalars['String']>;\n username: FieldWrapper<Scalars['String']>;\n employeeId?: Maybe<FieldWrapper<Scalars['String']>>;\n createdAt: FieldWrapper<Scalars['DateTime']>;\n updatedAt: FieldWrapper<Scalars['DateTime']>;\n dob: FieldWrapper<Scalars['Date']>;\n admin?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n tmcAdmin?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n companyAdmin?: Maybe<FieldWrapper<Scalars['Boolean']>>;\n bookerType: FieldWrapper<BookerType>;\n authMethods: Array<FieldWrapper<Scalars['String']>>;\n active: FieldWrapper<Scalars['Boolean']>;\n passwordLastUpdated?: Maybe<FieldWrapper<Scalars['DateTime']>>;\n selectedLanguage: FieldWrapper<Language>;\n availableLanguages: Array<FieldWrapper<Language>>;\n passports: Array<FieldWrapper<Passport>>;\n tmc: FieldWrapper<Tmc>;\n company: FieldWrapper<Company>;\n office: FieldWrapper<Office>;\n companyGroups: Array<FieldWrapper<CompanyGroup>>;\n addresses: Array<FieldWrapper<Address>>;\n phoneNumbers: Array<FieldWrapper<PhoneNumber>>;\n approvers: Array<FieldWrapper<Approver>>;\n approverFor: Array<FieldWrapper<Approvee>>;\n bookers: Array<FieldWrapper<User>>;\n canBookFor: Array<FieldWrapper<User>>;\n co2AllowancePeriod?: Maybe<FieldWrapper<Scalars['String']>>;\n co2AllowancePerPeriod?: Maybe<FieldWrapper<Scalars['String']>>;\n};\n\nexport type UserInfo = {\n id: Scalars['ID'];\n address?: Maybe<BookingAddress>;\n phoneNumber?: Maybe<BookingPhoneNumber>;\n supplementaryInfo: Scalars['JSON'];\n};\n\nexport type UserPassengerType = {\n __typename?: 'UserPassengerType';\n id: FieldWrapper<Scalars['ID']>;\n passengerType: FieldWrapper<PassengerType>;\n};\n\nexport type UserPassengerTypeInput = {\n id: Scalars['ID'];\n passengerType: PassengerType;\n};\n\nexport type AcceptNewPriceMutationVariables = Exact<{\n id: Scalars['ID'];\n withSupplemental?: Maybe<Scalars['Boolean']>;\n}>;\n\n\nexport type AcceptNewPriceMutation = (\n { __typename?: 'Mutation' }\n & { acceptNewPrice: (\n { __typename?: 'Basket' }\n & BasketFieldsFragment\n ) }\n);\n\nexport type AddUsersToBasketItemMutationVariables = Exact<{\n basketItem: Scalars['ID'];\n users: Array<UserPassengerTypeInput> | UserPassengerTypeInput;\n withSupplemental: Scalars['Boolean'];\n}>;\n\n\nexport type AddUsersToBasketItemMutation = (\n { __typename?: 'Mutation' }\n & { addUsersToBasketItem: (\n { __typename?: 'Basket' }\n & BasketFieldsFragment\n ) }\n);\n\nexport type TravellerFieldsFragment = (\n { __typename?: 'User' }\n & Pick<User, 'id' | 'title' | 'forename' | 'surname' | 'email' | 'username' | 'employeeId'>\n);\n\nexport type OwnerFieldsFragment = (\n { __typename?: 'User' }\n & Pick<User, 'id' | 'title' | 'forename' | 'surname' | 'email'>\n);\n\nexport type BasketFieldsFragment = (\n { __typename?: 'Basket' }\n & Pick<Basket, 'id' | 'reference' | 'title' | 'notes' | 'createdAt' | 'updatedAt' | 'bookedAt' | 'status' | 'validated'>\n & { owner: (\n { __typename?: 'User' }\n & OwnerFieldsFragment\n ), basketItems: Array<(\n { __typename?: 'BasketItem' }\n & MakeOptional<Pick<BasketItem, 'id' | 'adults' | 'children' | 'infants' | 'detail' | 'detailHash' | 'createdAt' | 'updatedAt' | 'expiry' | 'expired' | 'searchQuery' | 'price' | 'currency' | 'miGroupsAvailable' | 'miGroupSelected' | 'validated' | 'latestValidation' | 'latestValidationPrice' | 'latestValidationPriceDifference' | 'latestValidationAvailable' | 'bookingThirdPartyReference' | 'pnrLocator' | 'status' | 'perItemSupplementaryBookingInfoSchema' | 'perPassengerSupplementaryBookingInfoSchema' | 'perItemAddress' | 'perItemPhoneNumber' | 'perPassengerAddress' | 'perPassengerPhoneNumber' | 'cancellable' | 'amendable' | 'co2PerItem' | 'co2PerPassenger' | 'outboundDate' | 'inboundDate'>, 'perItemSupplementaryBookingInfoSchema' | 'perPassengerSupplementaryBookingInfoSchema' | 'perItemAddress' | 'perItemPhoneNumber' | 'perPassengerAddress' | 'perPassengerPhoneNumber'>\n & { availablePaymentMethods: Array<(\n { __typename?: 'PaymentMethod' }\n & Pick<PaymentMethod, 'id' | 'name' | 'description'>\n )>, selectedPaymentMethod?: Maybe<(\n { __typename?: 'PaymentMethod' }\n & Pick<PaymentMethod, 'id' | 'name' | 'description'>\n )>, service: (\n { __typename?: 'Service' }\n & Pick<Service, 'id' | 'type'>\n ), users: Array<(\n { __typename?: 'User' }\n & TravellerFieldsFragment\n )>, userPassengerTypes: Array<(\n { __typename?: 'UserPassengerType' }\n & Pick<UserPassengerType, 'id' | 'passengerType'>\n )>, leadPassenger?: Maybe<(\n { __typename?: 'User' }\n & TravellerFieldsFragment\n )>, managementInfo: Array<(\n { __typename?: 'ManagementInfo' }\n & Pick<ManagementInfo, 'id' | 'dbId' | 'name' | 'description' | 'handoff' | 'valueMask' | 'uiPresentation' | 'mandatory' | 'perPassenger' | 'perBooking' | 'agentOnly' | 'createdAt' | 'updatedAt' | 'fixed' | 'group'>\n & { fixedValue?: Maybe<(\n { __typename?: 'ManagementInfoValue' }\n & Pick<ManagementInfoValue, 'id' | 'label' | 'value' | 'default' | 'fixed' | 'agentOnly'>\n )>, defaultValue?: Maybe<(\n { __typename?: 'ManagementInfoValue' }\n & Pick<ManagementInfoValue, 'id' | 'label' | 'value' | 'default' | 'fixed' | 'agentOnly'>\n )>, values: Array<(\n { __typename?: 'ManagementInfoValue' }\n & Pick<ManagementInfoValue, 'id' | 'label' | 'value' | 'default' | 'fixed' | 'agentOnly'>\n )>, selectedValues: Array<(\n { __typename?: 'SelectedManagementInfoValue' }\n & Pick<SelectedManagementInfoValue, 'freeValue' | 'basketLevelValue' | 'userLevelValue'>\n & { value?: Maybe<(\n { __typename?: 'ManagementInfoValue' }\n & Pick<ManagementInfoValue, 'id' | 'label' | 'value' | 'default' | 'fixed' | 'agentOnly'>\n )>, user?: Maybe<(\n { __typename?: 'User' }\n & Pick<User, 'id' | 'title' | 'forename' | 'surname' | 'email' | 'username' | 'employeeId' | 'createdAt' | 'updatedAt' | 'dob' | 'admin' | 'companyAdmin' | 'bookerType' | 'authMethods' | 'active' | 'passwordLastUpdated'>\n )> }\n )> }\n )> }\n )>, companyGroup?: Maybe<(\n { __typename?: 'CompanyGroup' }\n & Pick<CompanyGroup, 'id' | 'name' | 'description' | 'createdAt' | 'updatedAt'>\n )> }\n);\n\nexport type GetUserBasketsQueryVariables = Exact<{\n user?: Maybe<Scalars['ID']>;\n traveller?: Maybe<Scalars['ID']>;\n basketStatus?: Maybe<BasketStatus>;\n createdAfter?: Maybe<Scalars['DateTime']>;\n createdBefore?: Maybe<Scalars['DateTime']>;\n bookedAfter?: Maybe<Scalars['DateTime']>;\n bookedBefore?: Maybe<Scalars['DateTime']>;\n dateOfTravelBefore?: Maybe<Scalars['DateTime']>;\n dateOfTravelAfter?: Maybe<Scalars['DateTime']>;\n basketItemBookingReference?: Maybe<Scalars['String']>;\n basketReference?: Maybe<Scalars['String']>;\n basketTitle?: Maybe<Scalars['String']>;\n withSupplemental?: Maybe<Scalars['Boolean']>;\n}>;\n\n\nexport type GetUserBasketsQuery = (\n { __typename?: 'Query' }\n & { getUserBaskets: Array<(\n { __typename?: 'Basket' }\n & BasketFieldsFragment\n )> }\n);\n\nexport type DeleteBasketMutationVariables = Exact<{\n id?: Maybe<Scalars['ID']>;\n reference?: Maybe<Scalars['String']>;\n}>;\n\n\nexport type DeleteBasketMutation = (\n { __typename?: 'Mutation' }\n & Pick<Mutation, 'deleteBasket'>\n);\n\nexport type CreateBasketMutationVariables = Exact<{\n title?: Maybe<Scalars['String']>;\n withSupplemental?: Maybe<Scalars['Boolean']>;\n}>;\n\n\nexport type CreateBasketMutation = (\n { __typename?: 'Mutation' }\n & { createBasket: (\n { __typename?: 'Basket' }\n & BasketFieldsFragment\n ) }\n);\n\nexport type RemoveItemFromBasketMutationVariables = Exact<{\n basketItem: Scalars['ID'];\n withSupplemental?: Maybe<Scalars['Boolean']>;\n}>;\n\n\nexport type RemoveItemFromBasketMutation = (\n { __typename?: 'Mutation' }\n & { removeItemFromBasket: (\n { __typename?: 'Basket' }\n & BasketFieldsFragment\n ) }\n);\n\nexport type SendBasketForApprovalMutationVariables = Exact<{\n basket: Scalars['ID'];\n withSupplemental?: Maybe<Scalars['Boolean']>;\n}>;\n\n\nexport type SendBasketForApprovalMutation = (\n { __typename?: 'Mutation' }\n & { sendBasketForApproval: (\n { __typename?: 'Basket' }\n & BasketFieldsFragment\n ) }\n);\n\nexport type AddItemToBasketMutationVariables = Exact<{\n basket?: Maybe<Scalars['ID']>;\n service: Scalars['ID'];\n detail: Scalars['JSON'];\n adults: Scalars['Int'];\n children?: Maybe<Scalars['Int']>;\n infants?: Maybe<Scalars['Int']>;\n price: Scalars['Float'];\n currency: CurrencyCode;\n searchQuery: Scalars['JSON'];\n quickAdd?: Maybe<Scalars['Boolean']>;\n users?: Maybe<Array<Maybe<UserPassengerTypeInput>> | Maybe<UserPassengerTypeInput>>;\n leadPassenger?: Maybe<Scalars['ID']>;\n co2PerItem?: Maybe<Scalars['Float']>;\n co2PerPassenger?: Maybe<Scalars['Float']>;\n outboundDate: Scalars['DateTime'];\n inboundDate?: Maybe<Scalars['DateTime']>;\n withSupplemental?: Maybe<Scalars['Boolean']>;\n}>;\n\n\nexport type AddItemToBasketMutation = (\n { __typename?: 'Mutation' }\n & { addItemToBasket: (\n { __typename?: 'Basket' }\n & BasketFieldsFragment\n ) }\n);\n\nexport type GetUserBasketQueryVariables = Exact<{\n id: Scalars['ID'];\n withSupplemental?: Maybe<Scalars['Boolean']>;\n}>;\n\n\nexport type GetUserBasketQuery = (\n { __typename?: 'Query' }\n & { getUserBasket: (\n { __typename?: 'Basket' }\n & BasketFieldsFragment\n ) }\n);\n\nexport type RevalidateBasketMutationVariables = Exact<{\n id: Scalars['ID'];\n withSupplemental?: Maybe<Scalars['Boolean']>;\n}>;\n\n\nexport type RevalidateBasketMutation = (\n { __typename?: 'Mutation' }\n & { revalidateBasket: (\n { __typename?: 'Basket' }\n & BasketFieldsFragment\n ) }\n);\n\nexport type BookBasketMutationVariables = Exact<{\n id: Scalars['ID'];\n supplementaryInfo: Array<SupplementaryBookingInfo> | SupplementaryBookingInfo;\n withSupplemental?: Maybe<Scalars['Boolean']>;\n}>;\n\n\nexport type BookBasketMutation = (\n { __typename?: 'Mutation' }\n & { bookBasket: (\n { __typename?: 'Basket' }\n & BasketFieldsFragment\n ) }\n);\n\nexport type SearchCabHireQueryVariables = Exact<{\n departs: Scalars['DateTime'];\n fromLocation: CabHireLocationInput;\n toLocation: CabHireLocationInput;\n adults: Scalars['Int'];\n children?: Maybe<Scalars['Int']>;\n infants?: Maybe<Scalars['Int']>;\n vias?: Maybe<Array<Maybe<CabHireLocationInput>> | Maybe<CabHireLocationInput>>;\n vehicleType?: Maybe<CabHireVehicleType>;\n}>;\n\n\nexport type SearchCabHireQuery = (\n { __typename?: 'Query' }\n & { searchCabHire: (\n { __typename?: 'CabHireResult' }\n & { results: Array<(\n { __typename?: 'CabHireQuote' }\n & Pick<CabHireQuote, 'id' | 'source' | 'sourceId' | 'supplierName' | 'estimatedCO2' | 'co2PerItem' | 'co2PerPassenger' | 'price' | 'currency' | 'vehicleType' | 'tripDistanceMetres' | 'tripDurationSeconds' | 'departs' | 'tmcPreferred' | 'companyPreferred' | 'officePreferred' | 'tmcPreferredMessage' | 'companyPreferredMessage' | 'officePreferredMessage' | 'unavailable' | 'unavailableMessage'>\n & { fromLocation: (\n { __typename?: 'CabHireLocation' }\n & Pick<CabHireLocation, 'address' | 'postcode' | 'latitude' | 'longitude'>\n ), toLocation: (\n { __typename?: 'CabHireLocation' }\n & Pick<CabHireLocation, 'address' | 'postcode' | 'latitude' | 'longitude'>\n ), vias: Array<(\n { __typename?: 'CabHireLocation' }\n & Pick<CabHireLocation, 'address' | 'postcode' | 'latitude' | 'longitude'>\n )> }\n )>, errors: Array<(\n { __typename?: 'SearchError' }\n & ErrorsFragment\n )> }\n ) }\n);\n\nexport type CarHireAvailabilityDetailRequestQueryVariables = Exact<{\n locationDetails: CarHireInputIdentifiers;\n}>;\n\n\nexport type CarHireAvailabilityDetailRequestQuery = (\n { __typename?: 'Query' }\n & { carHireAvailabilityDetailRequest: (\n { __typename?: 'CarHireDetailRequestResponse' }\n & { identifiers?: Maybe<(\n { __typename?: 'CarHireIdentifiers' }\n & Pick<CarHireIdentifiers, 'locator' | 'rph' | 'status' | 'vehType' | 'locationCode' | 'extendedLocationCode' | 'locationName' | 'dropOffLocation' | 'pickupDateTime' | 'dropoffDateTime' | 'vendor'>\n )>, vendor?: Maybe<(\n { __typename?: 'CarHireVendor' }\n & Pick<CarHireVendor, 'name' | 'logo'>\n )>, address?: Maybe<(\n { __typename?: 'CarHireAddress' }\n & Pick<CarHireAddress, 'name' | 'topLine' | 'city' | 'region' | 'postCode' | 'country' | 'countryCode' | 'stateCode' | 'latitude' | 'longitude'>\n )>, additionalInfo?: Maybe<Array<(\n { __typename?: 'CarHireAdditionalInfoItem' }\n & Pick<CarHireAdditionalInfoItem, 'name' | 'text' | 'json'>\n & { custom?: Maybe<Array<Maybe<(\n { __typename?: 'CarHireCustom' }\n & Pick<CarHireCustom, 'name' | 'text'>\n )>>> }\n )>> }\n ) }\n);\n\nexport type SearchCarHireQueryVariables = Exact<{\n airport?: Maybe<CarHireAirportInput>;\n city?: Maybe<CarHireCityInput>;\n location?: Maybe<CarHireLocationInput>;\n depot?: Maybe<InputCarHireDepot>;\n pickupDateTime: Scalars['DateTime'];\n dropoffDateTime: Scalars['DateTime'];\n vendor?: Maybe<Scalars['String']>;\n class?: Maybe<CarHireClass>;\n type?: Maybe<CarHireType>;\n transmission?: Maybe<CarHireTransmission>;\n aircon?: Maybe<Scalars['Boolean']>;\n estimatedDailyDistance?: Maybe<Scalars['Float']>;\n estimatedDailyDistanceUnits?: Maybe<DistanceTypes>;\n}>;\n\n\nexport type SearchCarHireQuery = (\n { __typename?: 'Query' }\n & { searchCarHire: (\n { __typename?: 'CarHireResult' }\n & { results: Array<(\n { __typename?: 'CarHireVehicleAvailibility' }\n & Pick<CarHireVehicleAvailibility, 'source' | 'sourceId' | 'tmcPreferred' | 'companyPreferred' | 'officePreferred' | 'tmcPreferredMessage' | 'companyPreferredMessage' | 'officePreferredMessage' | 'unavailable' | 'unavailableMessage' | 'co2PerPassenger' | 'co2PerItem'>\n & { identifiers?: Maybe<(\n { __typename?: 'CarHireIdentifiers' }\n & Pick<CarHireIdentifiers, 'locator' | 'rph' | 'status' | 'vehType' | 'locationCode' | 'extendedLocationCode' | 'locationName' | 'dropOffLocation' | 'pickupDateTime' | 'dropoffDateTime' | 'vendor'>\n )>, displayRecord?: Maybe<(\n { __typename?: 'CarHireDisplayRecord' }\n & Pick<CarHireDisplayRecord, 'status' | 'pickup' | 'dropoff'>\n & { vendor?: Maybe<(\n { __typename?: 'CarHireVendor' }\n & Pick<CarHireVendor, 'name' | 'logo'>\n )>, vehicle?: Maybe<(\n { __typename?: 'CarHireVehicle' }\n & Pick<CarHireVehicle, 'class' | 'type' | 'transmission' | 'aircon' | 'description' | 'images'>\n )>, charges?: Maybe<Array<Maybe<(\n { __typename?: 'CarHireCharge' }\n & Pick<CarHireCharge, 'label' | 'amount' | 'currencyCode'>\n )>>>, pickupLocation?: Maybe<(\n { __typename?: 'CarHireAddress' }\n & Pick<CarHireAddress, 'name' | 'topLine' | 'city' | 'region' | 'postCode' | 'country' | 'countryCode' | 'stateCode' | 'latitude' | 'longitude'>\n )>, returnLocation?: Maybe<(\n { __typename?: 'CarHireAddress' }\n & Pick<CarHireAddress, 'name' | 'topLine' | 'city' | 'region' | 'postCode' | 'country' | 'countryCode' | 'stateCode' | 'latitude' | 'longitude'>\n )>, additionalInfo?: Maybe<Array<Maybe<(\n { __typename?: 'CarHireAdditionalInfoItem' }\n & Pick<CarHireAdditionalInfoItem, 'name' | 'text' | 'json'>\n & { custom?: Maybe<Array<Maybe<(\n { __typename?: 'CarHireCustom' }\n & Pick<CarHireCustom, 'name' | 'text'>\n )>>> }\n )>>> }\n )> }\n )>, errors: Array<(\n { __typename?: 'SearchError' }\n & ErrorsFragment\n )> }\n ) }\n);\n\nexport type DeleteRecentSearchMutationVariables = Exact<{\n id: Scalars['ID'];\n}>;\n\n\nexport type DeleteRecentSearchMutation = (\n { __typename?: 'Mutation' }\n & Pick<Mutation, 'deleteRecentSearch'>\n);\n\nexport type DeleteUserAddressMutationVariables = Exact<{\n id: Scalars['ID'];\n}>;\n\n\nexport type DeleteUserAddressMutation = (\n { __typename?: 'Mutation' }\n & Pick<Mutation, 'deleteUserAddress'>\n);\n\nexport type ErrorsFragment = (\n { __typename?: 'SearchError' }\n & Pick<SearchError, 'errorMessage' | 'errorCode'>\n & { service: (\n { __typename?: 'Service' }\n & Pick<Service, 'id' | 'type' | 'name' | 'description'>\n ) }\n);\n\nexport type GroupedFieldsFragment = (\n { __typename?: 'GroupFlights' }\n & Pick<GroupFlights, 'referenceID' | 'flightID' | 'boundIndicator' | 'minPrice' | 'maxPrice'>\n & { flights: (\n { __typename?: 'MatchingFlights' }\n & Pick<MatchingFlights, 'LiteEconomy' | 'EconomyRestricted' | 'EconomyNoBags' | 'Economy' | 'PremiumEconomy' | 'Business' | 'PremiumBusiness' | 'First' | 'PremiumFirst'>\n ) }\n);\n\nexport type SearchFlightsV2QueryVariables = Exact<{\n passengers: Array<FlightPassengerObject> | FlightPassengerObject;\n originAirport?: Maybe<Scalars['String']>;\n destinationAirport?: Maybe<Scalars['String']>;\n multiDestination?: Maybe<Array<Maybe<DestinationEntry>> | Maybe<DestinationEntry>>;\n outboundDate?: Maybe<Scalars['Date']>;\n outboundDepartureTimeWindow?: Maybe<Scalars['String']>;\n outboundArrivalTimeWindow?: Maybe<Scalars['String']>;\n outboundCabinClass?: Maybe<Array<Maybe<FlightCabinClass>> | Maybe<FlightCabinClass>>;\n returnTrip: Scalars['Boolean'];\n returnDate?: Maybe<Scalars['Date']>;\n returnDepartureTimeWindow?: Maybe<Scalars['String']>;\n returnArrivalTimeWindow?: Maybe<Scalars['String']>;\n returnCabinClass?: Maybe<Array<Maybe<FlightCabinClass>> | Maybe<FlightCabinClass>>;\n fareType: FareType;\n requireFreeBag?: Maybe<Scalars['Boolean']>;\n maxConnections?: Maybe<Scalars['Int']>;\n preferredCarriers?: Maybe<Array<Maybe<Scalars['String']>> | Maybe<Scalars['String']>>;\n includeNearbyAirports?: Maybe<Scalars['Boolean']>;\n asSingles?: Maybe<Scalars['Boolean']>;\n withGrouped: Scalars['Boolean'];\n}>;\n\n\nexport type SearchFlightsV2Query = (\n { __typename?: 'Query' }\n & { searchFlightsV2: (\n { __typename?: 'FlightSearchResultV2' }\n & { results: (\n { __typename?: 'FEFlightSearchResults' }\n & { journeys: Array<(\n { __typename?: 'FlightItinerary' }\n & Pick<FlightItinerary, 'uid' | 'passengerCount' | 'outboundTotalDuration' | 'inboundTotalDuration' | 'additional' | 'source' | 'sourceId' | 'version' | 'tmcPreferred' | 'companyPreferred' | 'officePreferred' | 'tmcPreferredMessage' | 'companyPreferredMessage' | 'officePreferredMessage' | 'unavailable' | 'unavailableMessage' | 'co2PerItem' | 'co2PerPassenger'>\n & { outboundFlights: Array<(\n { __typename?: 'FlightJourney' }\n & Pick<FlightJourney, 'originAirport' | 'originTerminal' | 'originAirportName' | 'destinationAirport' | 'destinationTerminal' | 'destinationAirportName' | 'dateTimeDeparting' | 'dateTimeDepartingUTC' | 'dateTimeArriving' | 'dateTimeArrivingUTC' | 'marketingCarrier' | 'marketingCarrierName' | 'marketingFlightNumber' | 'operatingCarrier' | 'operatingCarrierName' | 'operatingFlightNumber' | 'equipmentCode' | 'equipmentName' | 'totalDuration' | 'cabinClass' | 'marketingNames' | 'vendorCode' | 'stops' | 'bookingCode' | 'marriageGroup' | 'fareBasisCode' | 'additional'>\n & { originAirportDetail: (\n { __typename?: 'AirportDetail' }\n & Pick<AirportDetail, 'iata' | 'icao' | 'latitude' | 'longitude' | 'altitude' | 'state' | 'city' | 'road' | 'popularity' | 'area' | 'location' | 'offset' | 'airportName' | 'countryName' | 'countryCode' | 'postcode'>\n ), destinationAirportDetail: (\n { __typename?: 'AirportDetail' }\n & Pick<AirportDetail, 'iata' | 'icao' | 'latitude' | 'longitude' | 'altitude' | 'state' | 'city' | 'road' | 'popularity' | 'area' | 'location' | 'offset' | 'airportName' | 'countryName' | 'countryCode' | 'postcode'>\n ), marketingCarrierDetail: (\n { __typename?: 'FlightCarrierDetail' }\n & Pick<FlightCarrierDetail, 'name' | 'alias' | 'callsign' | 'iata' | 'icao' | 'logo' | 'banner' | 'popularity'>\n ), operatingCarrierDetail: (\n { __typename?: 'FlightCarrierDetail' }\n & Pick<FlightCarrierDetail, 'name' | 'alias' | 'callsign' | 'iata' | 'icao' | 'logo' | 'banner' | 'popularity'>\n ), fareConditions: (\n { __typename?: 'FareConditions' }\n & { cancellation?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, change?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, noShow?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, upgrade?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, other?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>> }\n ) }\n )>, inboundFlights?: Maybe<Array<Maybe<(\n { __typename?: 'FlightJourney' }\n & Pick<FlightJourney, 'originAirport' | 'originTerminal' | 'originAirportName' | 'destinationAirport' | 'destinationTerminal' | 'destinationAirportName' | 'dateTimeDeparting' | 'dateTimeDepartingUTC' | 'dateTimeArriving' | 'dateTimeArrivingUTC' | 'marketingCarrier' | 'marketingCarrierName' | 'marketingFlightNumber' | 'operatingCarrier' | 'operatingCarrierName' | 'operatingFlightNumber' | 'equipmentCode' | 'equipmentName' | 'totalDuration' | 'cabinClass' | 'marketingNames' | 'vendorCode' | 'stops' | 'bookingCode' | 'marriageGroup' | 'fareBasisCode' | 'additional'>\n & { originAirportDetail: (\n { __typename?: 'AirportDetail' }\n & Pick<AirportDetail, 'iata' | 'icao' | 'latitude' | 'longitude' | 'altitude' | 'state' | 'city' | 'road' | 'popularity' | 'area' | 'location' | 'offset' | 'airportName' | 'countryName' | 'countryCode' | 'postcode'>\n ), destinationAirportDetail: (\n { __typename?: 'AirportDetail' }\n & Pick<AirportDetail, 'iata' | 'icao' | 'latitude' | 'longitude' | 'altitude' | 'state' | 'city' | 'road' | 'popularity' | 'area' | 'location' | 'offset' | 'airportName' | 'countryName' | 'countryCode' | 'postcode'>\n ), marketingCarrierDetail: (\n { __typename?: 'FlightCarrierDetail' }\n & Pick<FlightCarrierDetail, 'name' | 'alias' | 'callsign' | 'iata' | 'icao' | 'logo' | 'banner' | 'popularity'>\n ), operatingCarrierDetail: (\n { __typename?: 'FlightCarrierDetail' }\n & Pick<FlightCarrierDetail, 'name' | 'alias' | 'callsign' | 'iata' | 'icao' | 'logo' | 'banner' | 'popularity'>\n ), fareConditions: (\n { __typename?: 'FareConditions' }\n & { cancellation?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, change?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, noShow?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, upgrade?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, other?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>> }\n ) }\n )>>>, outboundCarbonEmissions?: Maybe<(\n { __typename?: 'FlightCarbonEmissions' }\n & Pick<FlightCarbonEmissions, 'amount' | 'unit'>\n )>, inboundCarbonEmissions?: Maybe<(\n { __typename?: 'FlightCarbonEmissions' }\n & Pick<FlightCarbonEmissions, 'amount' | 'unit'>\n )>, taxes?: Maybe<Array<Maybe<(\n { __typename?: 'FlightAmount' }\n & Pick<FlightAmount, 'description' | 'amount' | 'currency'>\n )>>>, discounts?: Maybe<Array<Maybe<(\n { __typename?: 'FlightAmount' }\n & Pick<FlightAmount, 'description' | 'amount' | 'currency'>\n )>>>, total: (\n { __typename?: 'FlightFareTotal' }\n & Pick<FlightFareTotal, 'price' | 'tax' | 'discount' | 'currency'>\n ), fareConditions?: Maybe<(\n { __typename?: 'FareConditions' }\n & { cancellation?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, change?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, noShow?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, upgrade?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, other?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>> }\n )>, baggageAllowance?: Maybe<Array<Maybe<(\n { __typename?: 'BaggageAllowance' }\n & Pick<BaggageAllowance, 'type' | 'qty' | 'maxKG' | 'maxLBS'>\n )>>> }\n )>, multi: Array<(\n { __typename?: 'ItinerarySummary' }\n & Pick<ItinerarySummary, 'order' | 'origin' | 'destination' | 'minPrice' | 'maxPrice'>\n & { results: Array<(\n { __typename?: 'FlightItinerary' }\n & Pick<FlightItinerary, 'uid' | 'passengerCount' | 'outboundTotalDuration' | 'inboundTotalDuration' | 'additional' | 'source' | 'sourceId' | 'version' | 'tmcPreferred' | 'companyPreferred' | 'officePreferred' | 'tmcPreferredMessage' | 'companyPreferredMessage' | 'officePreferredMessage' | 'unavailable' | 'unavailableMessage' | 'co2PerItem' | 'co2PerPassenger'>\n & { outboundFlights: Array<(\n { __typename?: 'FlightJourney' }\n & Pick<FlightJourney, 'originAirport' | 'originTerminal' | 'originAirportName' | 'destinationAirport' | 'destinationTerminal' | 'destinationAirportName' | 'dateTimeDeparting' | 'dateTimeDepartingUTC' | 'dateTimeArriving' | 'dateTimeArrivingUTC' | 'marketingCarrier' | 'marketingCarrierName' | 'marketingFlightNumber' | 'operatingCarrier' | 'operatingCarrierName' | 'operatingFlightNumber' | 'equipmentCode' | 'equipmentName' | 'totalDuration' | 'cabinClass' | 'marketingNames' | 'vendorCode' | 'stops' | 'bookingCode' | 'marriageGroup' | 'fareBasisCode' | 'additional'>\n & { originAirportDetail: (\n { __typename?: 'AirportDetail' }\n & Pick<AirportDetail, 'iata' | 'icao' | 'latitude' | 'longitude' | 'altitude' | 'state' | 'city' | 'road' | 'popularity' | 'area' | 'location' | 'offset' | 'airportName' | 'countryName' | 'countryCode' | 'postcode'>\n ), destinationAirportDetail: (\n { __typename?: 'AirportDetail' }\n & Pick<AirportDetail, 'iata' | 'icao' | 'latitude' | 'longitude' | 'altitude' | 'state' | 'city' | 'road' | 'popularity' | 'area' | 'location' | 'offset' | 'airportName' | 'countryName' | 'countryCode' | 'postcode'>\n ), marketingCarrierDetail: (\n { __typename?: 'FlightCarrierDetail' }\n & Pick<FlightCarrierDetail, 'name' | 'alias' | 'callsign' | 'iata' | 'icao' | 'logo' | 'banner' | 'popularity'>\n ), operatingCarrierDetail: (\n { __typename?: 'FlightCarrierDetail' }\n & Pick<FlightCarrierDetail, 'name' | 'alias' | 'callsign' | 'iata' | 'icao' | 'logo' | 'banner' | 'popularity'>\n ), fareConditions: (\n { __typename?: 'FareConditions' }\n & { cancellation?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, change?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, noShow?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, upgrade?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, other?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>> }\n ) }\n )>, inboundFlights?: Maybe<Array<Maybe<(\n { __typename?: 'FlightJourney' }\n & Pick<FlightJourney, 'originAirport' | 'originTerminal' | 'originAirportName' | 'destinationAirport' | 'destinationTerminal' | 'destinationAirportName' | 'dateTimeDeparting' | 'dateTimeDepartingUTC' | 'dateTimeArriving' | 'dateTimeArrivingUTC' | 'marketingCarrier' | 'marketingCarrierName' | 'marketingFlightNumber' | 'operatingCarrier' | 'operatingCarrierName' | 'operatingFlightNumber' | 'equipmentCode' | 'equipmentName' | 'totalDuration' | 'cabinClass' | 'marketingNames' | 'vendorCode' | 'stops' | 'bookingCode' | 'marriageGroup' | 'fareBasisCode' | 'additional'>\n & { originAirportDetail: (\n { __typename?: 'AirportDetail' }\n & Pick<AirportDetail, 'iata' | 'icao' | 'latitude' | 'longitude' | 'altitude' | 'state' | 'city' | 'road' | 'popularity' | 'area' | 'location' | 'offset' | 'airportName' | 'countryName' | 'countryCode' | 'postcode'>\n ), destinationAirportDetail: (\n { __typename?: 'AirportDetail' }\n & Pick<AirportDetail, 'iata' | 'icao' | 'latitude' | 'longitude' | 'altitude' | 'state' | 'city' | 'road' | 'popularity' | 'area' | 'location' | 'offset' | 'airportName' | 'countryName' | 'countryCode' | 'postcode'>\n ), marketingCarrierDetail: (\n { __typename?: 'FlightCarrierDetail' }\n & Pick<FlightCarrierDetail, 'name' | 'alias' | 'callsign' | 'iata' | 'icao' | 'logo' | 'banner' | 'popularity'>\n ), operatingCarrierDetail: (\n { __typename?: 'FlightCarrierDetail' }\n & Pick<FlightCarrierDetail, 'name' | 'alias' | 'callsign' | 'iata' | 'icao' | 'logo' | 'banner' | 'popularity'>\n ), fareConditions: (\n { __typename?: 'FareConditions' }\n & { cancellation?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, change?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, noShow?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, upgrade?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, other?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>> }\n ) }\n )>>>, outboundCarbonEmissions?: Maybe<(\n { __typename?: 'FlightCarbonEmissions' }\n & Pick<FlightCarbonEmissions, 'amount' | 'unit'>\n )>, inboundCarbonEmissions?: Maybe<(\n { __typename?: 'FlightCarbonEmissions' }\n & Pick<FlightCarbonEmissions, 'amount' | 'unit'>\n )>, taxes?: Maybe<Array<Maybe<(\n { __typename?: 'FlightAmount' }\n & Pick<FlightAmount, 'description' | 'amount' | 'currency'>\n )>>>, discounts?: Maybe<Array<Maybe<(\n { __typename?: 'FlightAmount' }\n & Pick<FlightAmount, 'description' | 'amount' | 'currency'>\n )>>>, total: (\n { __typename?: 'FlightFareTotal' }\n & Pick<FlightFareTotal, 'price' | 'tax' | 'discount' | 'currency'>\n ), fareConditions?: Maybe<(\n { __typename?: 'FareConditions' }\n & { cancellation?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, change?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, noShow?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, upgrade?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, other?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>> }\n )>, baggageAllowance?: Maybe<Array<Maybe<(\n { __typename?: 'BaggageAllowance' }\n & Pick<BaggageAllowance, 'type' | 'qty' | 'maxKG' | 'maxLBS'>\n )>>> }\n )> }\n )>, grouped?: Maybe<Array<(\n { __typename?: 'GroupFlights' }\n & GroupedFieldsFragment\n )>> }\n ), errors: Array<(\n { __typename?: 'SearchError' }\n & ErrorsFragment\n )> }\n ) }\n);\n\nexport type GetCarHireDepotsQueryVariables = Exact<{\n latitude: Scalars['Float'];\n longitude: Scalars['Float'];\n vendorCode?: Maybe<Scalars['String']>;\n}>;\n\n\nexport type GetCarHireDepotsQuery = (\n { __typename?: 'Query' }\n & { getCarHireDepots: Array<(\n { __typename?: 'CarHireDepot' }\n & Pick<CarHireDepot, 'countryCode' | 'locationCode' | 'extendedLocationCode' | 'vendorCode' | 'latitude' | 'longitude' | 'vendor' | 'addressLines' | 'cityName'>\n )> }\n);\n\nexport type GetConfermaOfficeNamesQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GetConfermaOfficeNamesQuery = (\n { __typename?: 'Query' }\n & { getConfermaOfficeNames: (\n { __typename?: 'ConfermaOfficeNamesResult' }\n & { results?: Maybe<Array<Maybe<(\n { __typename?: 'ConfermaOfficeNames' }\n & Pick<ConfermaOfficeNames, 'id' | 'name'>\n )>>>, errors: Array<(\n { __typename?: 'SearchError' }\n & ErrorsFragment\n )> }\n ) }\n);\n\nexport type GetConfermaQuicklistQueryVariables = Exact<{\n countryCode: Scalars['String'];\n}>;\n\n\nexport type GetConfermaQuicklistQuery = (\n { __typename?: 'Query' }\n & { getConfermaQuicklist: (\n { __typename?: 'HotelSearchResult' }\n & { results?: Maybe<Array<Maybe<(\n { __typename?: 'HotelItinerary' }\n & Pick<HotelItinerary, 'id' | 'name' | 'imageUrl' | 'group' | 'version' | 'tmcPreferredMessage' | 'companyPreferredMessage' | 'officePreferredMessage' | 'unavailableMessage'>\n & { location: (\n { __typename?: 'HotelLocation' }\n & Pick<HotelLocation, 'distance' | 'distanceType' | 'longitude' | 'latitude'>\n ), address: (\n { __typename?: 'HotelAddress' }\n & Pick<HotelAddress, 'addressLine1' | 'addressLine2' | 'addressLine3' | 'postOrZipCode' | 'countryCode' | 'telephone' | 'facsimile'>\n ), transports?: Maybe<Array<Maybe<(\n { __typename?: 'HotelTransport' }\n & Pick<HotelTransport, 'type' | 'name' | 'code' | 'distance' | 'distanceType' | 'longitude' | 'latitude'>\n )>>>, preferred: (\n { __typename?: 'HotelPreferred' }\n & Pick<HotelPreferred, 'client' | 'consumer'>\n ), tags?: Maybe<Array<Maybe<(\n { __typename?: 'HotelTag' }\n & Pick<HotelTag, 'name' | 'display' | 'type' | 'icon'>\n )>>>, availableRates?: Maybe<(\n { __typename?: 'HotelAvailability' }\n & Pick<HotelAvailability, 'hotelId' | 'imageUrl' | 'prpn' | 'currencyCode' | 'isBusy' | 'source' | 'version'>\n & { rooms?: Maybe<Array<Maybe<(\n { __typename?: 'HotelRoom' }\n & Pick<HotelRoom, 'roomId' | 'roomType' | 'roomDescription' | 'rateCode' | 'rateDescription' | 'total' | 'currencyCode'>\n & { currencyConversion?: Maybe<(\n { __typename?: 'HotelConversion' }\n & Pick<HotelConversion, 'rate' | 'localCode' | 'localTotal' | 'convertedCode' | 'convertedTotal'>\n )>, deposit?: Maybe<(\n { __typename?: 'HotelDeposit' }\n & Pick<HotelDeposit, 'amount' | 'policy' | 'required'>\n )>, nights: Array<(\n { __typename?: 'HotelNight' }\n & Pick<HotelNight, 'night' | 'rate' | 'info' | 'date'>\n )>, policies: (\n { __typename?: 'HotelPolicy' }\n & Pick<HotelPolicy, 'cancellation' | 'deposit' | 'disabledAccess' | 'general' | 'guarantee' | 'refundAvailable'>\n ), tax: (\n { __typename?: 'HotelTax' }\n & Pick<HotelTax, 'included' | 'rate'>\n ), acceptedCards?: Maybe<Array<Maybe<(\n { __typename?: 'HotelCard' }\n & Pick<HotelCard, 'id' | 'name'>\n )>>>, paymentTypes?: Maybe<Array<Maybe<(\n { __typename?: 'HotelPaymentType' }\n & Pick<HotelPaymentType, 'type' | 'name'>\n )>>> }\n )>>> }\n )> }\n )>>>, errors: Array<(\n { __typename?: 'SearchError' }\n & ErrorsFragment\n )> }\n ) }\n);\n\nexport type GetRailStationQueryVariables = Exact<{\n id?: Maybe<Scalars['ID']>;\n code?: Maybe<Scalars['String']>;\n}>;\n\n\nexport type GetRailStationQuery = (\n { __typename?: 'Query' }\n & { getRailStation: (\n { __typename?: 'RailStation' }\n & Pick<RailStation, 'id' | 'name' | 'stationCode' | 'nlcCode' | 'trainlineCode' | 'trainlineUniqueCode'>\n & { locationDetails?: Maybe<(\n { __typename?: 'LocationDetail' }\n & Pick<LocationDetail, 'continent' | 'country' | 'countryCode' | 'state' | 'city' | 'postcode' | 'road' | 'gridReference' | 'northing' | 'easting'>\n & { coordinates?: Maybe<(\n { __typename?: 'GeoCoordinates' }\n & Pick<GeoCoordinates, 'latitude' | 'longitude' | 'altitude'>\n )> }\n )> }\n ) }\n);\n\nexport type GetRailcardsQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GetRailcardsQuery = (\n { __typename?: 'Query' }\n & { getRailcards: Array<(\n { __typename?: 'ReferenceRailCardQualifier' }\n & Pick<ReferenceRailCardQualifier, 'name' | 'code'>\n )> }\n);\n\nexport type GetRiskAlertsQueryVariables = Exact<{\n minLevel: RiskLevel;\n maxLevel: RiskLevel;\n countryIsoCode?: Maybe<Scalars['String']>;\n airport?: Maybe<Scalars['ID']>;\n railStation?: Maybe<Scalars['ID']>;\n airportIata?: Maybe<Scalars['String']>;\n}>;\n\n\nexport type GetRiskAlertsQuery = (\n { __typename?: 'Query' }\n & { getRiskAlerts: Array<(\n { __typename?: 'RiskAlert' }\n & Pick<RiskAlert, 'id' | 'title' | 'description' | 'breaking' | 'risk' | 'category' | 'country' | 'location' | 'latitude' | 'longitude' | 'startDate' | 'endDate' | 'receivedDate'>\n )> }\n);\n\nexport type GetUserAddressesQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GetUserAddressesQuery = (\n { __typename?: 'Query' }\n & { getUserAddresses: Array<(\n { __typename?: 'Address' }\n & Pick<Address, 'id' | 'description' | 'numberOrName' | 'street' | 'town' | 'county' | 'postcode' | 'countryCode' | 'userPrimary' | 'officePrimary'>\n )> }\n);\n\nexport type GetUserCompanyOfficesQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GetUserCompanyOfficesQuery = (\n { __typename?: 'Query' }\n & { getUserCompanyOffices: Array<(\n { __typename?: 'Office' }\n & Pick<Office, 'id' | 'name'>\n & { addresses: Array<(\n { __typename?: 'Address' }\n & Pick<Address, 'id' | 'description' | 'numberOrName' | 'street' | 'town' | 'county' | 'postcode' | 'countryCode' | 'userPrimary' | 'officePrimary'>\n )> }\n )> }\n);\n\nexport type GetUserCurrentCarbonAllowanceQueryVariables = Exact<{\n user?: Maybe<Scalars['ID']>;\n}>;\n\n\nexport type GetUserCurrentCarbonAllowanceQuery = (\n { __typename?: 'Query' }\n & { getUserCurrentCarbonAllowance?: Maybe<(\n { __typename?: 'CarbonAllowance' }\n & Pick<CarbonAllowance, 'id' | 'startOfPeriod' | 'endOfPeriod' | 'remainingCo2' | 'totalCo2' | 'carbonPolicySource'>\n & { company?: Maybe<(\n { __typename?: 'Company' }\n & Pick<Company, 'id' | 'name'>\n )>, office?: Maybe<(\n { __typename?: 'Office' }\n & Pick<Office, 'id' | 'name'>\n )>, user: (\n { __typename?: 'User' }\n & Pick<User, 'id' | 'forename' | 'surname' | 'email'>\n ), periodConsumption: Array<(\n { __typename?: 'CarbonConsumption' }\n & Pick<CarbonConsumption, 'id' | 'consumed' | 'datetime'>\n )> }\n )> }\n);\n\nexport type GetUserMiAutoSuggestValuesQueryVariables = Exact<{\n mi: Scalars['ID'];\n partialLabel: Scalars['String'];\n}>;\n\n\nexport type GetUserMiAutoSuggestValuesQuery = (\n { __typename?: 'Query' }\n & { getUserMIAutoSuggestValues: Array<(\n { __typename?: 'ManagementInfoValue' }\n & Pick<ManagementInfoValue, 'id' | 'label' | 'value' | 'default' | 'fixed' | 'agentOnly'>\n )> }\n);\n\nexport type GetUserPhoneQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GetUserPhoneQuery = (\n { __typename?: 'Query' }\n & { getUserPhoneNumbers: Array<(\n { __typename?: 'PhoneNumber' }\n & Pick<PhoneNumber, 'id' | 'description' | 'countryCode' | 'areaCode' | 'number' | 'extension' | 'type' | 'officePrimary' | 'userPrimary'>\n )> }\n);\n\nexport type GetUserRecentSearchesQueryVariables = Exact<{\n serviceType?: Maybe<ServiceType>;\n}>;\n\n\nexport type GetUserRecentSearchesQuery = (\n { __typename?: 'Query' }\n & { getUserRecentSearches: Array<(\n { __typename?: 'Search' }\n & Pick<Search, 'id' | 'name' | 'serviceType' | 'searchArgs' | 'createdAt' | 'updatedAt' | 'travelDate'>\n & { travellers?: Maybe<Array<(\n { __typename?: 'User' }\n & Pick<User, 'id' | 'title' | 'forename' | 'surname' | 'email' | 'username' | 'dob'>\n )>> }\n )> }\n);\n\nexport type SearchHotelsQueryVariables = Exact<{\n startDate: Scalars['Date'];\n endDate: Scalars['Date'];\n cityName?: Maybe<Scalars['String']>;\n postOrZipCode?: Maybe<Scalars['String']>;\n countryCode?: Maybe<Scalars['String']>;\n latitude?: Maybe<Scalars['Float']>;\n longitude?: Maybe<Scalars['Float']>;\n trainStationCode?: Maybe<Scalars['String']>;\n iata?: Maybe<Scalars['String']>;\n officeId?: Maybe<Scalars['Int']>;\n rooms: Scalars['Int'];\n adults: Scalars['Int'];\n children?: Maybe<Scalars['Int']>;\n currency: Scalars['String'];\n distanceType: DistanceTypes;\n distance: Scalars['Int'];\n maxResults?: Maybe<Scalars['Int']>;\n hotelName?: Maybe<Scalars['String']>;\n groupName?: Maybe<Scalars['String']>;\n}>;\n\n\nexport type SearchHotelsQuery = (\n { __typename?: 'Query' }\n & { searchHotels: (\n { __typename?: 'HotelSearchResult' }\n & { results?: Maybe<Array<Maybe<(\n { __typename?: 'HotelItinerary' }\n & Pick<HotelItinerary, 'id' | 'name' | 'imageUrl' | 'group' | 'co2PerPassenger' | 'co2PerItem' | 'source' | 'sourceId' | 'version' | 'tmcPreferred' | 'companyPreferred' | 'officePreferred' | 'tmcPreferredMessage' | 'companyPreferredMessage' | 'officePreferredMessage' | 'unavailable' | 'unavailableMessage'>\n & { location: (\n { __typename?: 'HotelLocation' }\n & Pick<HotelLocation, 'distance' | 'distanceType' | 'longitude' | 'latitude'>\n ), address: (\n { __typename?: 'HotelAddress' }\n & Pick<HotelAddress, 'addressLine1' | 'addressLine2' | 'addressLine3' | 'postOrZipCode' | 'countryCode' | 'telephone' | 'facsimile'>\n ), transports?: Maybe<Array<Maybe<(\n { __typename?: 'HotelTransport' }\n & Pick<HotelTransport, 'type' | 'name' | 'code' | 'distance' | 'distanceType' | 'longitude' | 'latitude'>\n )>>>, preferred: (\n { __typename?: 'HotelPreferred' }\n & Pick<HotelPreferred, 'client' | 'consumer'>\n ), tags?: Maybe<Array<Maybe<(\n { __typename?: 'HotelTag' }\n & Pick<HotelTag, 'name' | 'display' | 'type' | 'icon'>\n )>>>, availableRates?: Maybe<(\n { __typename?: 'HotelAvailability' }\n & Pick<HotelAvailability, 'hotelId' | 'imageUrl' | 'prpn' | 'currencyCode' | 'isBusy' | 'source' | 'version'>\n & { rooms?: Maybe<Array<Maybe<(\n { __typename?: 'HotelRoom' }\n & Pick<HotelRoom, 'roomId' | 'roomType' | 'roomDescription' | 'rateCode' | 'rateDescription' | 'total' | 'currencyCode'>\n & { currencyConversion?: Maybe<(\n { __typename?: 'HotelConversion' }\n & Pick<HotelConversion, 'rate' | 'localCode' | 'localTotal' | 'convertedCode' | 'convertedTotal'>\n )>, deposit?: Maybe<(\n { __typename?: 'HotelDeposit' }\n & Pick<HotelDeposit, 'amount' | 'policy' | 'required'>\n )>, nights: Array<(\n { __typename?: 'HotelNight' }\n & Pick<HotelNight, 'night' | 'rate' | 'info' | 'date'>\n )>, policies: (\n { __typename?: 'HotelPolicy' }\n & Pick<HotelPolicy, 'cancellation' | 'deposit' | 'disabledAccess' | 'general' | 'guarantee' | 'refundAvailable'>\n ), tax: (\n { __typename?: 'HotelTax' }\n & Pick<HotelTax, 'included' | 'rate'>\n ), acceptedCards?: Maybe<Array<Maybe<(\n { __typename?: 'HotelCard' }\n & Pick<HotelCard, 'id' | 'name'>\n )>>>, paymentTypes?: Maybe<Array<Maybe<(\n { __typename?: 'HotelPaymentType' }\n & Pick<HotelPaymentType, 'type' | 'name'>\n )>>> }\n )>>> }\n )> }\n )>>>, errors: Array<(\n { __typename?: 'SearchError' }\n & Pick<SearchError, 'errorMessage' | 'errorCode'>\n & { service: (\n { __typename?: 'Service' }\n & Pick<Service, 'id' | 'type' | 'name' | 'description' | 'detailSchema' | 'searchQuerySchema'>\n ) }\n )> }\n ) }\n);\n\nexport type GetMultipleHotelsAvailabilityQueryVariables = Exact<{\n hotel: Array<Scalars['String']> | Scalars['String'];\n startDate: Scalars['Date'];\n endDate: Scalars['Date'];\n currency: Scalars['String'];\n occupants: Scalars['Int'];\n rooms?: Maybe<Scalars['Int']>;\n}>;\n\n\nexport type GetMultipleHotelsAvailabilityQuery = (\n { __typename?: 'Query' }\n & { getMultipleHotelsAvailability: (\n { __typename?: 'HotelMultiAvailabilityResult' }\n & { results?: Maybe<Array<Maybe<(\n { __typename?: 'HotelAvailability' }\n & Pick<HotelAvailability, 'hotelId' | 'prpn' | 'currencyCode' | 'isBusy' | 'source' | 'version'>\n & { rooms?: Maybe<Array<Maybe<(\n { __typename?: 'HotelRoom' }\n & Pick<HotelRoom, 'roomId' | 'roomType' | 'roomDescription' | 'rateCode' | 'rateDescription' | 'total' | 'currencyCode'>\n & { currencyConversion?: Maybe<(\n { __typename?: 'HotelConversion' }\n & Pick<HotelConversion, 'rate' | 'localCode' | 'localTotal' | 'convertedCode' | 'convertedTotal'>\n )>, deposit?: Maybe<(\n { __typename?: 'HotelDeposit' }\n & Pick<HotelDeposit, 'amount' | 'policy' | 'required'>\n )>, nights: Array<(\n { __typename?: 'HotelNight' }\n & Pick<HotelNight, 'night' | 'rate' | 'info' | 'date'>\n )>, policies: (\n { __typename?: 'HotelPolicy' }\n & Pick<HotelPolicy, 'cancellation' | 'deposit' | 'disabledAccess' | 'general' | 'guarantee' | 'refundAvailable'>\n ), tax: (\n { __typename?: 'HotelTax' }\n & Pick<HotelTax, 'included' | 'rate'>\n ), acceptedCards?: Maybe<Array<Maybe<(\n { __typename?: 'HotelCard' }\n & Pick<HotelCard, 'id' | 'name'>\n )>>>, paymentTypes?: Maybe<Array<Maybe<(\n { __typename?: 'HotelPaymentType' }\n & Pick<HotelPaymentType, 'type' | 'name'>\n )>>> }\n )>>> }\n )>>>, errors: Array<(\n { __typename?: 'SearchError' }\n & ErrorsFragment\n )> }\n ) }\n);\n\nexport type IsPostcodeValidQueryVariables = Exact<{\n postcode: Scalars['String'];\n}>;\n\n\nexport type IsPostcodeValidQuery = (\n { __typename?: 'Query' }\n & Pick<Query, 'isPostcodeValid'>\n);\n\nexport type Location_DetailFragment = (\n { __typename?: 'LocationDetail' }\n & Pick<LocationDetail, 'continent' | 'country' | 'countryCode' | 'state' | 'city' | 'postcode' | 'road' | 'gridReference' | 'northing' | 'easting'>\n & { coordinates?: Maybe<(\n { __typename?: 'GeoCoordinates' }\n & Pick<GeoCoordinates, 'latitude' | 'longitude' | 'altitude'>\n )> }\n);\n\nexport type SearchAirportsQueryVariables = Exact<{\n query: Scalars['String'];\n countryCode?: Maybe<Scalars['String']>;\n hasLounge?: Maybe<Scalars['Boolean']>;\n hasParking?: Maybe<Scalars['Boolean']>;\n hasFastTrack?: Maybe<Scalars['Boolean']>;\n}>;\n\n\nexport type SearchAirportsQuery = (\n { __typename?: 'Query' }\n & { searchAirports: (\n { __typename?: 'AirportResults' }\n & { iataMatch?: Maybe<(\n { __typename?: 'Airport' }\n & Pick<Airport, 'id' | 'name' | 'iata' | 'icao' | 'terminals'>\n & { locationDetails?: Maybe<(\n { __typename?: 'LocationDetail' }\n & Location_DetailFragment\n )> }\n )>, generalMatches: Array<(\n { __typename?: 'Airport' }\n & Pick<Airport, 'id' | 'name' | 'iata' | 'icao' | 'terminals'>\n & { locationDetails?: Maybe<(\n { __typename?: 'LocationDetail' }\n & Location_DetailFragment\n )> }\n )> }\n ) }\n);\n\nexport type SearchLoungesQueryVariables = Exact<{\n locationCode: Scalars['String'];\n arrivalDatetime: Scalars['DateTime'];\n adults: Scalars['Int'];\n children?: Maybe<Scalars['Int']>;\n infants?: Maybe<Scalars['Int']>;\n terminal?: Maybe<Scalars['String']>;\n}>;\n\n\nexport type SearchLoungesQuery = (\n { __typename?: 'Query' }\n & { searchLounges: (\n { __typename?: 'LoungeSearchResult' }\n & { results: Array<(\n { __typename?: 'LoungeQuote' }\n & Pick<LoungeQuote, 'source' | 'sourceId' | 'name' | 'code' | 'price' | 'currency' | 'tmcPreferred' | 'companyPreferred' | 'officePreferred' | 'tmcPreferredMessage' | 'companyPreferredMessage' | 'officePreferredMessage' | 'unavailable' | 'unavailableMessage' | 'co2PerPassenger' | 'co2PerItem'>\n & { lounge: (\n { __typename?: 'LoungeLocation' }\n & Pick<LoungeLocation, 'code' | 'name' | 'airport' | 'terminal' | 'address' | 'telephone' | 'fax' | 'directions' | 'introduction' | 'logo' | 'mobileImage' | 'furtherImages' | 'adultAge' | 'childAge' | 'infantAge' | 'landside' | 'airside' | 'facilities' | 'openTime' | 'closeTime' | 'wifi' | 'tv' | 'snacks' | 'phone' | 'internet' | 'childrenAllowed' | 'disabledAccess' | 'drinks' | 'freeDrinks' | 'freeFood' | 'smokingPermitted' | 'magazines' | 'includedDrinks' | 'menuFood' | 'menuDrinks' | 'menuExtras' | 'whatsIncludedDrinks' | 'whatsIncludedExtras' | 'whatsIncludedFood' | 'groupInfo' | 'checkInInfo' | 'dressCode' | 'facilitiesInfo' | 'foodAndBeverage' | 'cancellationInfo' | 'amendmentsInfo' | 'misc'>\n ) }\n )>, errors: Array<(\n { __typename?: 'SearchError' }\n & ErrorsFragment\n )> }\n ) }\n);\n\nexport type MoveItemToADifferentBasketMutationVariables = Exact<{\n basketItem: Scalars['ID'];\n newBasket: Scalars['ID'];\n withSupplemental?: Maybe<Scalars['Boolean']>;\n}>;\n\n\nexport type MoveItemToADifferentBasketMutation = (\n { __typename?: 'Mutation' }\n & { moveItemToADifferentBasket: (\n { __typename?: 'Basket' }\n & BasketFieldsFragment\n ) }\n);\n\nexport type SearchParkingQueryVariables = Exact<{\n arrivalDatetime: Scalars['DateTime'];\n departDatetime: Scalars['DateTime'];\n locationCode: Scalars['String'];\n outFlightNumber?: Maybe<Scalars['String']>;\n recommended?: Maybe<Scalars['Boolean']>;\n onAirport?: Maybe<Scalars['Boolean']>;\n meetAndGreet?: Maybe<Scalars['Boolean']>;\n parkAndRide?: Maybe<Scalars['Boolean']>;\n parkAndStroll?: Maybe<Scalars['Boolean']>;\n carParkedForYou?: Maybe<Scalars['Boolean']>;\n terminal?: Maybe<Scalars['String']>;\n}>;\n\n\nexport type SearchParkingQuery = (\n { __typename?: 'Query' }\n & { searchParking: (\n { __typename?: 'ParkingSearchResult' }\n & { results: Array<(\n { __typename?: 'ParkingQuote' }\n & Pick<ParkingQuote, 'source' | 'sourceId' | 'requiredInfo' | 'price' | 'currency' | 'misc' | 'tmcPreferred' | 'companyPreferred' | 'officePreferred' | 'tmcPreferredMessage' | 'companyPreferredMessage' | 'officePreferredMessage' | 'unavailable' | 'unavailableMessage' | 'co2PerPassenger' | 'co2PerItem'>\n & { carPark: (\n { __typename?: 'ParkingLocation' }\n & Pick<ParkingLocation, 'code' | 'name' | 'airport' | 'terminal' | 'latitude' | 'longitude' | 'address' | 'distanceToAirport' | 'onAirport' | 'carParkedForYou' | 'meetAndGreet' | 'telephone' | 'fax' | 'directions' | 'arrivalProcedure' | 'departureProcedure' | 'maximumCarSize' | 'introduction' | 'information' | 'transferInformation' | 'transferOperatingTimes' | 'transferTime' | 'logo' | 'defaultImage' | 'brandImage' | 'mobileImage' | 'furtherImages' | 'misc'>\n ) }\n )>, errors: Array<(\n { __typename?: 'SearchError' }\n & ErrorsFragment\n )> }\n ) }\n);\n\nexport type SearchRailQueryVariables = Exact<{\n countryCode: Scalars['String'];\n journeyType: RailJourneyType;\n class?: Maybe<RailClass>;\n outboundArrivalDateTime?: Maybe<Scalars['DateTime']>;\n outboundDepartureDateTime?: Maybe<Scalars['DateTime']>;\n departureLocationId: Scalars['ID'];\n arrivalLocationId: Scalars['ID'];\n adults: Scalars['Int'];\n children?: Maybe<Scalars['Int']>;\n returnArrivalDateTime?: Maybe<Scalars['DateTime']>;\n returnDepartureDateTime?: Maybe<Scalars['DateTime']>;\n railCardQualifiers?: Maybe<Array<Scalars['String']> | Scalars['String']>;\n viaLocationId?: Maybe<Scalars['ID']>;\n extraTimeToChange?: Maybe<Scalars['Boolean']>;\n plusBusOut?: Maybe<RailPlusBusAvail>;\n plusBusReturn?: Maybe<RailPlusBusAvail>;\n}>;\n\n\nexport type SearchRailQuery = (\n { __typename?: 'Query' }\n & { searchRail: (\n { __typename?: 'RailSearchResult' }\n & { results: Array<(\n { __typename?: 'RailJourneyOptions' }\n & Pick<RailJourneyOptions, 'source' | 'sourceId'>\n & { outbound?: Maybe<Array<(\n { __typename?: 'RailJourneyOption' }\n & Pick<RailJourneyOption, 'co2PerItem' | 'from' | 'fromCode' | 'to' | 'toCode' | 'co2PerPassenger' | 'departDateTime' | 'arriveDateTime' | 'changes' | 'unsellable'>\n & { identifiers?: Maybe<(\n { __typename?: 'RailIdentifiers' }\n & Pick<RailIdentifiers, 'transactionIdentifier' | 'journeyIdentifier' | 'provider' | 'fareIdentifier' | 'direction' | 'singleOrReturn' | 'bookingRef'>\n )>, travellers?: Maybe<Array<(\n { __typename?: 'RailTraveller' }\n & Pick<RailTraveller, 'status' | 'id' | 'dob' | 'railcard' | 'givenName' | 'surname' | 'nameTitle' | 'contactInfo' | 'deliveryEmailAddress' | 'fare'>\n )>>, segments?: Maybe<Array<(\n { __typename?: 'RailSegment' }\n & Pick<RailSegment, 'id' | 'operator' | 'depart' | 'departDateTime' | 'arrive' | 'arriveDateTime' | 'reservableStatus' | 'seatPreferenceGroup'>\n & { seatPreferenceTypes?: Maybe<Array<(\n { __typename?: 'RailSeatPreferenceType' }\n & Pick<RailSeatPreferenceType, 'name' | 'allowedValues'>\n )>>, seats?: Maybe<Array<(\n { __typename?: 'RailSeat' }\n & Pick<RailSeat, 'location' | 'coach' | 'number' | 'direction' | 'position' | 'deck' | 'seatType' | 'seatSelection' | 'facilities' | 'note'>\n )>>, callingPoints?: Maybe<Array<(\n { __typename?: 'RailCallingPoint' }\n & Pick<RailCallingPoint, 'stationName' | 'stationCode' | 'arrivalDateTime' | 'departureDateTime' | 'scheduledPlatform' | 'stationClassification' | 'stoppingPattern'>\n )>> }\n )>>, providers?: Maybe<Array<(\n { __typename?: 'RailProvider' }\n & Pick<RailProvider, 'providerId' | 'name'>\n & { cheapestTicket?: Maybe<(\n { __typename?: 'RailTicketOption' }\n & Pick<RailTicketOption, 'type' | 'class' | 'singleOrReturn' | 'price' | 'reservableStatus' | 'currency' | 'route' | 'routeCode' | 'availableSeats'>\n & { identifiers?: Maybe<(\n { __typename?: 'RailIdentifiers' }\n & Pick<RailIdentifiers, 'transactionIdentifier' | 'journeyIdentifier' | 'provider' | 'fareIdentifier' | 'direction' | 'singleOrReturn' | 'bookingRef'>\n )>, terms?: Maybe<(\n { __typename?: 'RailTicketTerms' }\n & Pick<RailTicketTerms, 'error' | 'ticketTypeCode' | 'trainOperatingCompanyCode' | 'ticketTypeName' | 'ticketTypeAltName' | 'ticketTypeClass' | 'reservationRule' | 'journeyType' | 'preBookingRequirement' | 'generalValidity' | 'validOutRule' | 'validReturnRule' | 'generalDiscount' | 'childDiscount' | 'railcardDiscount' | 'refundCancellationRule' | 'changeRule' | 'ticketTypeConditionsDescription' | 'journeyBreakRule' | 'availabilityRule' | 'todAvailable' | 'kioskAvailable' | 'startDate' | 'endDate'>\n & { dynamicConditions?: Maybe<Array<Maybe<(\n { __typename?: 'DynamicCondition' }\n & Pick<DynamicCondition, 'name' | 'description'>\n )>>> }\n )>, tickets?: Maybe<Array<Maybe<(\n { __typename?: 'RailTicket' }\n & Pick<RailTicket, 'price' | 'type' | 'route' | 'numChildren' | 'numAdults'>\n & { segments?: Maybe<Array<(\n { __typename?: 'RailSegment' }\n & Pick<RailSegment, 'id' | 'operator' | 'depart' | 'departDateTime' | 'arrive' | 'arriveDateTime' | 'reservableStatus' | 'seatPreferenceGroup'>\n )>> }\n )>>>, ticketQueueList?: Maybe<Array<Maybe<(\n { __typename?: 'RailTicketQueue' }\n & Pick<RailTicketQueue, 'id' | 'name' | 'type'>\n )>>>, accountsList?: Maybe<Array<Maybe<(\n { __typename?: 'RailAccount' }\n & Pick<RailAccount, 'id' | 'reference' | 'description' | 'isDefault' | 'type'>\n )>>> }\n )>, ticketOptions?: Maybe<Array<Maybe<(\n { __typename?: 'RailTicketOption' }\n & Pick<RailTicketOption, 'type' | 'class' | 'singleOrReturn' | 'price' | 'reservableStatus' | 'currency' | 'route' | 'routeCode' | 'availableSeats'>\n & { identifiers?: Maybe<(\n { __typename?: 'RailIdentifiers' }\n & Pick<RailIdentifiers, 'transactionIdentifier' | 'journeyIdentifier' | 'provider' | 'fareIdentifier' | 'direction' | 'singleOrReturn' | 'bookingRef'>\n & { allowedWith: Array<(\n { __typename?: 'RailIdentifiers' }\n & Pick<RailIdentifiers, 'transactionIdentifier' | 'journeyIdentifier' | 'provider' | 'fareIdentifier' | 'direction' | 'singleOrReturn' | 'bookingRef'>\n )> }\n )>, terms?: Maybe<(\n { __typename?: 'RailTicketTerms' }\n & Pick<RailTicketTerms, 'error' | 'ticketTypeCode' | 'trainOperatingCompanyCode' | 'ticketTypeName' | 'ticketTypeAltName' | 'ticketTypeClass' | 'reservationRule' | 'journeyType' | 'preBookingRequirement' | 'generalValidity' | 'validOutRule' | 'validReturnRule' | 'generalDiscount' | 'childDiscount' | 'railcardDiscount' | 'refundCancellationRule' | 'changeRule' | 'ticketTypeConditionsDescription' | 'journeyBreakRule' | 'availabilityRule' | 'todAvailable' | 'kioskAvailable' | 'startDate' | 'endDate'>\n )>, tickets?: Maybe<Array<Maybe<(\n { __typename?: 'RailTicket' }\n & Pick<RailTicket, 'price' | 'type' | 'route' | 'numChildren' | 'numAdults'>\n )>>>, ticketQueueList?: Maybe<Array<Maybe<(\n { __typename?: 'RailTicketQueue' }\n & Pick<RailTicketQueue, 'id' | 'name' | 'type'>\n )>>>, accountsList?: Maybe<Array<Maybe<(\n { __typename?: 'RailAccount' }\n & Pick<RailAccount, 'id' | 'reference' | 'description' | 'isDefault' | 'type'>\n )>>> }\n )>>>, bookedTicket?: Maybe<(\n { __typename?: 'RailTicketOption' }\n & Pick<RailTicketOption, 'type' | 'class' | 'singleOrReturn' | 'price' | 'reservableStatus' | 'currency' | 'route' | 'routeCode'>\n & { identifiers?: Maybe<(\n { __typename?: 'RailIdentifiers' }\n & Pick<RailIdentifiers, 'transactionIdentifier' | 'journeyIdentifier' | 'provider' | 'fareIdentifier' | 'direction' | 'singleOrReturn' | 'bookingRef'>\n )>, terms?: Maybe<(\n { __typename?: 'RailTicketTerms' }\n & Pick<RailTicketTerms, 'error' | 'ticketTypeCode' | 'trainOperatingCompanyCode' | 'ticketTypeName' | 'ticketTypeAltName' | 'ticketTypeClass' | 'reservationRule' | 'journeyType' | 'preBookingRequirement' | 'generalValidity' | 'validOutRule' | 'validReturnRule' | 'generalDiscount' | 'childDiscount' | 'railcardDiscount' | 'refundCancellationRule' | 'changeRule' | 'ticketTypeConditionsDescription' | 'journeyBreakRule' | 'availabilityRule' | 'todAvailable' | 'kioskAvailable' | 'startDate' | 'endDate'>\n )>, tickets?: Maybe<Array<Maybe<(\n { __typename?: 'RailTicket' }\n & Pick<RailTicket, 'price' | 'type' | 'route' | 'numChildren' | 'numAdults'>\n )>>>, ticketQueueList?: Maybe<Array<Maybe<(\n { __typename?: 'RailTicketQueue' }\n & Pick<RailTicketQueue, 'id' | 'name' | 'type'>\n )>>>, accountsList?: Maybe<Array<Maybe<(\n { __typename?: 'RailAccount' }\n & Pick<RailAccount, 'id' | 'reference' | 'description' | 'isDefault' | 'type'>\n )>>> }\n )> }\n )>>, ticketExtras?: Maybe<Array<(\n { __typename?: 'RailTicketExtra' }\n & Pick<RailTicketExtra, 'type' | 'location' | 'date' | 'description' | 'amount' | 'adultAmount' | 'childAmount' | 'currency'>\n & { identifiers?: Maybe<(\n { __typename?: 'RailTicketExtraIdentifiers' }\n & Pick<RailTicketExtraIdentifiers, 'type' | 'location' | 'date' | 'journeyId' | 'isOrigin'>\n )> }\n )>>, plusBus?: Maybe<(\n { __typename?: 'RailPlusBus' }\n & Pick<RailPlusBus, 'originPlusBusNLC' | 'originStationNLC' | 'destinationPlusBusNLC' | 'destinationStationNLC'>\n )> }\n )>>, return?: Maybe<Array<(\n { __typename?: 'RailJourneyOption' }\n & Pick<RailJourneyOption, 'co2PerItem' | 'from' | 'fromCode' | 'to' | 'toCode' | 'departDateTime' | 'arriveDateTime' | 'changes' | 'unsellable'>\n & { identifiers?: Maybe<(\n { __typename?: 'RailIdentifiers' }\n & Pick<RailIdentifiers, 'transactionIdentifier' | 'journeyIdentifier' | 'provider' | 'fareIdentifier' | 'direction' | 'singleOrReturn' | 'bookingRef'>\n )>, travellers?: Maybe<Array<(\n { __typename?: 'RailTraveller' }\n & Pick<RailTraveller, 'status' | 'id' | 'dob' | 'railcard' | 'givenName' | 'surname' | 'nameTitle' | 'contactInfo' | 'deliveryEmailAddress' | 'fare'>\n )>>, segments?: Maybe<Array<(\n { __typename?: 'RailSegment' }\n & Pick<RailSegment, 'id' | 'operator' | 'depart' | 'departDateTime' | 'arrive' | 'arriveDateTime' | 'reservableStatus' | 'seatPreferenceGroup'>\n & { callingPoints?: Maybe<Array<(\n { __typename?: 'RailCallingPoint' }\n & Pick<RailCallingPoint, 'stationName' | 'stationCode' | 'arrivalDateTime' | 'departureDateTime' | 'scheduledPlatform' | 'stationClassification' | 'stoppingPattern'>\n )>> }\n )>>, providers?: Maybe<Array<(\n { __typename?: 'RailProvider' }\n & Pick<RailProvider, 'providerId' | 'name'>\n & { cheapestTicket?: Maybe<(\n { __typename?: 'RailTicketOption' }\n & Pick<RailTicketOption, 'type' | 'class' | 'singleOrReturn' | 'price' | 'reservableStatus' | 'currency' | 'route' | 'routeCode' | 'availableSeats'>\n & { identifiers?: Maybe<(\n { __typename?: 'RailIdentifiers' }\n & Pick<RailIdentifiers, 'transactionIdentifier' | 'journeyIdentifier' | 'provider' | 'fareIdentifier' | 'direction' | 'singleOrReturn' | 'bookingRef'>\n )>, terms?: Maybe<(\n { __typename?: 'RailTicketTerms' }\n & Pick<RailTicketTerms, 'error' | 'ticketTypeCode' | 'trainOperatingCompanyCode' | 'ticketTypeName' | 'ticketTypeAltName' | 'ticketTypeClass' | 'reservationRule' | 'journeyType' | 'preBookingRequirement' | 'generalValidity' | 'validOutRule' | 'validReturnRule' | 'generalDiscount' | 'childDiscount' | 'railcardDiscount' | 'refundCancellationRule' | 'changeRule' | 'ticketTypeConditionsDescription' | 'journeyBreakRule' | 'availabilityRule' | 'todAvailable' | 'kioskAvailable' | 'startDate' | 'endDate'>\n & { dynamicConditions?: Maybe<Array<Maybe<(\n { __typename?: 'DynamicCondition' }\n & Pick<DynamicCondition, 'name' | 'description'>\n )>>> }\n )>, tickets?: Maybe<Array<Maybe<(\n { __typename?: 'RailTicket' }\n & Pick<RailTicket, 'price' | 'type' | 'route' | 'numChildren' | 'numAdults'>\n & { segments?: Maybe<Array<(\n { __typename?: 'RailSegment' }\n & Pick<RailSegment, 'id' | 'operator' | 'depart' | 'departDateTime' | 'arrive' | 'arriveDateTime' | 'reservableStatus' | 'seatPreferenceGroup'>\n )>> }\n )>>>, ticketQueueList?: Maybe<Array<Maybe<(\n { __typename?: 'RailTicketQueue' }\n & Pick<RailTicketQueue, 'id' | 'name' | 'type'>\n )>>>, accountsList?: Maybe<Array<Maybe<(\n { __typename?: 'RailAccount' }\n & Pick<RailAccount, 'id' | 'reference' | 'description' | 'isDefault' | 'type'>\n )>>> }\n )>, ticketOptions?: Maybe<Array<Maybe<(\n { __typename?: 'RailTicketOption' }\n & Pick<RailTicketOption, 'type' | 'class' | 'singleOrReturn' | 'price' | 'reservableStatus' | 'currency' | 'route' | 'routeCode' | 'availableSeats'>\n & { identifiers?: Maybe<(\n { __typename?: 'RailIdentifiers' }\n & Pick<RailIdentifiers, 'transactionIdentifier' | 'journeyIdentifier' | 'provider' | 'fareIdentifier' | 'direction' | 'singleOrReturn' | 'bookingRef'>\n & { allowedWith: Array<(\n { __typename?: 'RailIdentifiers' }\n & Pick<RailIdentifiers, 'transactionIdentifier' | 'journeyIdentifier' | 'provider' | 'fareIdentifier' | 'direction' | 'singleOrReturn' | 'bookingRef'>\n )> }\n )>, terms?: Maybe<(\n { __typename?: 'RailTicketTerms' }\n & Pick<RailTicketTerms, 'error' | 'ticketTypeCode' | 'trainOperatingCompanyCode' | 'ticketTypeName' | 'ticketTypeAltName' | 'ticketTypeClass' | 'reservationRule' | 'journeyType' | 'preBookingRequirement' | 'generalValidity' | 'validOutRule' | 'validReturnRule' | 'generalDiscount' | 'childDiscount' | 'railcardDiscount' | 'refundCancellationRule' | 'changeRule' | 'ticketTypeConditionsDescription' | 'journeyBreakRule' | 'availabilityRule' | 'todAvailable' | 'kioskAvailable' | 'startDate' | 'endDate'>\n )>, tickets?: Maybe<Array<Maybe<(\n { __typename?: 'RailTicket' }\n & Pick<RailTicket, 'price' | 'type' | 'route' | 'numChildren' | 'numAdults'>\n )>>>, ticketQueueList?: Maybe<Array<Maybe<(\n { __typename?: 'RailTicketQueue' }\n & Pick<RailTicketQueue, 'id' | 'name' | 'type'>\n )>>>, accountsList?: Maybe<Array<Maybe<(\n { __typename?: 'RailAccount' }\n & Pick<RailAccount, 'id' | 'reference' | 'description' | 'isDefault' | 'type'>\n )>>> }\n )>>>, bookedTicket?: Maybe<(\n { __typename?: 'RailTicketOption' }\n & Pick<RailTicketOption, 'type' | 'class' | 'singleOrReturn' | 'price' | 'reservableStatus' | 'currency' | 'route' | 'routeCode'>\n & { identifiers?: Maybe<(\n { __typename?: 'RailIdentifiers' }\n & Pick<RailIdentifiers, 'transactionIdentifier' | 'journeyIdentifier' | 'provider' | 'fareIdentifier' | 'direction' | 'singleOrReturn' | 'bookingRef'>\n )>, terms?: Maybe<(\n { __typename?: 'RailTicketTerms' }\n & Pick<RailTicketTerms, 'error' | 'ticketTypeCode' | 'trainOperatingCompanyCode' | 'ticketTypeName' | 'ticketTypeAltName' | 'ticketTypeClass' | 'reservationRule' | 'journeyType' | 'preBookingRequirement' | 'generalValidity' | 'validOutRule' | 'validReturnRule' | 'generalDiscount' | 'childDiscount' | 'railcardDiscount' | 'refundCancellationRule' | 'changeRule' | 'ticketTypeConditionsDescription' | 'journeyBreakRule' | 'availabilityRule' | 'todAvailable' | 'kioskAvailable' | 'startDate' | 'endDate'>\n )>, tickets?: Maybe<Array<Maybe<(\n { __typename?: 'RailTicket' }\n & Pick<RailTicket, 'price' | 'type' | 'route' | 'numChildren' | 'numAdults'>\n )>>>, ticketQueueList?: Maybe<Array<Maybe<(\n { __typename?: 'RailTicketQueue' }\n & Pick<RailTicketQueue, 'id' | 'name' | 'type'>\n )>>>, accountsList?: Maybe<Array<Maybe<(\n { __typename?: 'RailAccount' }\n & Pick<RailAccount, 'id' | 'reference' | 'description' | 'isDefault' | 'type'>\n )>>> }\n )> }\n )>>, ticketExtras?: Maybe<Array<(\n { __typename?: 'RailTicketExtra' }\n & Pick<RailTicketExtra, 'type' | 'location' | 'date' | 'description' | 'amount' | 'adultAmount' | 'childAmount' | 'currency'>\n )>>, plusBus?: Maybe<(\n { __typename?: 'RailPlusBus' }\n & Pick<RailPlusBus, 'originPlusBusNLC' | 'originStationNLC' | 'destinationPlusBusNLC' | 'destinationStationNLC'>\n )> }\n )>> }\n )>, errors: Array<(\n { __typename?: 'SearchError' }\n & ErrorsFragment\n )> }\n ) }\n);\n\nexport type SaveRecentSearchMutationVariables = Exact<{\n serviceType: ServiceType;\n searchArgs: Scalars['JSON'];\n travelDate: Scalars['DateTime'];\n travellers?: Maybe<Array<Maybe<Scalars['ID']>> | Maybe<Scalars['ID']>>;\n}>;\n\n\nexport type SaveRecentSearchMutation = (\n { __typename?: 'Mutation' }\n & { saveRecentSearch: Array<(\n { __typename?: 'Search' }\n & Pick<Search, 'id'>\n )> }\n);\n\nexport type SaveUserAddressMutationVariables = Exact<{\n description: Scalars['String'];\n numberOrName?: Maybe<Scalars['String']>;\n street?: Maybe<Scalars['String']>;\n town?: Maybe<Scalars['String']>;\n county?: Maybe<Scalars['String']>;\n postcode?: Maybe<Scalars['String']>;\n countryCode?: Maybe<Scalars['String']>;\n userPrimary?: Maybe<Scalars['Boolean']>;\n}>;\n\n\nexport type SaveUserAddressMutation = (\n { __typename?: 'Mutation' }\n & { saveUserAddress: (\n { __typename?: 'Address' }\n & Pick<Address, 'id' | 'description' | 'numberOrName' | 'street' | 'town' | 'county' | 'postcode' | 'countryCode' | 'userPrimary' | 'officePrimary'>\n ) }\n);\n\nexport type SearchAirlinesQueryVariables = Exact<{\n query: Scalars['String'];\n}>;\n\n\nexport type SearchAirlinesQuery = (\n { __typename?: 'Query' }\n & { searchAirlines: (\n { __typename?: 'AirlineResults' }\n & { iataMatch?: Maybe<(\n { __typename?: 'AirlineResult' }\n & Pick<AirlineResult, 'id' | 'name' | 'iata' | 'icao' | 'alias' | 'callsign' | 'active' | 'continent' | 'country' | 'countryCode' | 'bannerImage' | 'logoImage'>\n )>, generalMatches: Array<(\n { __typename?: 'AirlineResult' }\n & Pick<AirlineResult, 'id' | 'name' | 'iata' | 'icao' | 'alias' | 'callsign' | 'active' | 'continent' | 'country' | 'countryCode' | 'bannerImage' | 'logoImage'>\n )> }\n ) }\n);\n\nexport type SearchCitiesQueryVariables = Exact<{\n query: Scalars['String'];\n countryCode?: Maybe<Scalars['String']>;\n}>;\n\n\nexport type SearchCitiesQuery = (\n { __typename?: 'Query' }\n & { searchCities: Array<(\n { __typename?: 'City' }\n & Pick<City, 'id' | 'name' | 'country' | 'countryCode' | 'continentName'>\n & { coordinates: (\n { __typename?: 'GeoCoordinates' }\n & Pick<GeoCoordinates, 'latitude' | 'longitude' | 'altitude'>\n ) }\n )> }\n);\n\nexport type SearchConfermaCitiesQueryVariables = Exact<{\n cityName: Scalars['String'];\n countryCode: Scalars['String'];\n}>;\n\n\nexport type SearchConfermaCitiesQuery = (\n { __typename?: 'Query' }\n & { searchConfermaCities: (\n { __typename?: 'ConfermaCityLocation' }\n & Pick<ConfermaCityLocation, 'foundExact'>\n & { suggestions?: Maybe<Array<Maybe<(\n { __typename?: 'ConfermaCityLocationOptions' }\n & Pick<ConfermaCityLocationOptions, 'name' | 'countryCode' | 'latitude' | 'longitude'>\n )>>> }\n ) }\n);\n\nexport type SearchEurostarQueryVariables = Exact<{\n passengers: Array<FlightPassengerObject> | FlightPassengerObject;\n originAirport?: Maybe<Scalars['String']>;\n destinationAirport?: Maybe<Scalars['String']>;\n multiDestination?: Maybe<Array<Maybe<DestinationEntry>> | Maybe<DestinationEntry>>;\n outboundDate?: Maybe<Scalars['Date']>;\n outboundDepartureTimeWindow?: Maybe<Scalars['String']>;\n outboundArrivalTimeWindow?: Maybe<Scalars['String']>;\n outboundCabinClass?: Maybe<Array<Maybe<FlightCabinClass>> | Maybe<FlightCabinClass>>;\n returnTrip: Scalars['Boolean'];\n returnDate?: Maybe<Scalars['Date']>;\n returnDepartureTimeWindow?: Maybe<Scalars['String']>;\n returnArrivalTimeWindow?: Maybe<Scalars['String']>;\n returnCabinClass?: Maybe<Array<Maybe<FlightCabinClass>> | Maybe<FlightCabinClass>>;\n fareType: FareType;\n requireFreeBag?: Maybe<Scalars['Boolean']>;\n maxConnections?: Maybe<Scalars['Int']>;\n preferredCarriers?: Maybe<Array<Maybe<Scalars['String']>> | Maybe<Scalars['String']>>;\n includeNearbyAirports?: Maybe<Scalars['Boolean']>;\n asSingles?: Maybe<Scalars['Boolean']>;\n}>;\n\n\nexport type SearchEurostarQuery = (\n { __typename?: 'Query' }\n & { searchEurostar: (\n { __typename?: 'FlightSearchResultV2' }\n & { results: (\n { __typename?: 'FEFlightSearchResults' }\n & { journeys: Array<(\n { __typename?: 'FlightItinerary' }\n & Pick<FlightItinerary, 'uid' | 'passengerCount' | 'outboundTotalDuration' | 'inboundTotalDuration' | 'additional' | 'source' | 'sourceId' | 'version' | 'tmcPreferred' | 'companyPreferred' | 'officePreferred' | 'tmcPreferredMessage' | 'companyPreferredMessage' | 'officePreferredMessage' | 'unavailable' | 'unavailableMessage' | 'co2PerItem' | 'co2PerPassenger'>\n & { outboundFlights: Array<(\n { __typename?: 'FlightJourney' }\n & Pick<FlightJourney, 'originAirport' | 'originTerminal' | 'originAirportName' | 'destinationAirport' | 'destinationTerminal' | 'destinationAirportName' | 'dateTimeDeparting' | 'dateTimeDepartingUTC' | 'dateTimeArriving' | 'dateTimeArrivingUTC' | 'marketingCarrier' | 'marketingCarrierName' | 'marketingFlightNumber' | 'operatingCarrier' | 'operatingCarrierName' | 'operatingFlightNumber' | 'equipmentCode' | 'equipmentName' | 'totalDuration' | 'cabinClass' | 'marketingNames' | 'vendorCode' | 'stops' | 'bookingCode' | 'marriageGroup' | 'fareBasisCode' | 'additional'>\n & { fareInfo?: Maybe<(\n { __typename?: 'FlightSpecialFareInfo' }\n & Pick<FlightSpecialFareInfo, 'title' | 'type' | 'code' | 'supplierCode'>\n )>, originAirportDetail: (\n { __typename?: 'AirportDetail' }\n & Pick<AirportDetail, 'iata' | 'icao' | 'latitude' | 'longitude' | 'altitude' | 'state' | 'city' | 'road' | 'popularity' | 'area' | 'location' | 'offset' | 'airportName' | 'countryName' | 'countryCode' | 'postcode'>\n ), destinationAirportDetail: (\n { __typename?: 'AirportDetail' }\n & Pick<AirportDetail, 'iata' | 'icao' | 'latitude' | 'longitude' | 'altitude' | 'state' | 'city' | 'road' | 'popularity' | 'area' | 'location' | 'offset' | 'airportName' | 'countryName' | 'countryCode' | 'postcode'>\n ), marketingCarrierDetail: (\n { __typename?: 'FlightCarrierDetail' }\n & Pick<FlightCarrierDetail, 'name' | 'alias' | 'callsign' | 'iata' | 'icao' | 'logo' | 'banner' | 'popularity'>\n ), operatingCarrierDetail: (\n { __typename?: 'FlightCarrierDetail' }\n & Pick<FlightCarrierDetail, 'name' | 'alias' | 'callsign' | 'iata' | 'icao' | 'logo' | 'banner' | 'popularity'>\n ), fareConditions: (\n { __typename?: 'FareConditions' }\n & { cancellation?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, change?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, noShow?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, upgrade?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, other?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>> }\n ) }\n )>, inboundFlights?: Maybe<Array<Maybe<(\n { __typename?: 'FlightJourney' }\n & Pick<FlightJourney, 'originAirport' | 'originTerminal' | 'originAirportName' | 'destinationAirport' | 'destinationTerminal' | 'destinationAirportName' | 'dateTimeDeparting' | 'dateTimeDepartingUTC' | 'dateTimeArriving' | 'dateTimeArrivingUTC' | 'marketingCarrier' | 'marketingCarrierName' | 'marketingFlightNumber' | 'operatingCarrier' | 'operatingCarrierName' | 'operatingFlightNumber' | 'equipmentCode' | 'equipmentName' | 'totalDuration' | 'cabinClass' | 'marketingNames' | 'vendorCode' | 'stops' | 'bookingCode' | 'marriageGroup' | 'fareBasisCode' | 'additional'>\n & { fareInfo?: Maybe<(\n { __typename?: 'FlightSpecialFareInfo' }\n & Pick<FlightSpecialFareInfo, 'title' | 'type' | 'code' | 'supplierCode'>\n )>, originAirportDetail: (\n { __typename?: 'AirportDetail' }\n & Pick<AirportDetail, 'iata' | 'icao' | 'latitude' | 'longitude' | 'altitude' | 'state' | 'city' | 'road' | 'popularity' | 'area' | 'location' | 'offset' | 'airportName' | 'countryName' | 'countryCode' | 'postcode'>\n ), destinationAirportDetail: (\n { __typename?: 'AirportDetail' }\n & Pick<AirportDetail, 'iata' | 'icao' | 'latitude' | 'longitude' | 'altitude' | 'state' | 'city' | 'road' | 'popularity' | 'area' | 'location' | 'offset' | 'airportName' | 'countryName' | 'countryCode' | 'postcode'>\n ), marketingCarrierDetail: (\n { __typename?: 'FlightCarrierDetail' }\n & Pick<FlightCarrierDetail, 'name' | 'alias' | 'callsign' | 'iata' | 'icao' | 'logo' | 'banner' | 'popularity'>\n ), operatingCarrierDetail: (\n { __typename?: 'FlightCarrierDetail' }\n & Pick<FlightCarrierDetail, 'name' | 'alias' | 'callsign' | 'iata' | 'icao' | 'logo' | 'banner' | 'popularity'>\n ), fareConditions: (\n { __typename?: 'FareConditions' }\n & { cancellation?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, change?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, noShow?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, upgrade?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, other?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>> }\n ) }\n )>>>, outboundCarbonEmissions?: Maybe<(\n { __typename?: 'FlightCarbonEmissions' }\n & Pick<FlightCarbonEmissions, 'amount' | 'unit'>\n )>, inboundCarbonEmissions?: Maybe<(\n { __typename?: 'FlightCarbonEmissions' }\n & Pick<FlightCarbonEmissions, 'amount' | 'unit'>\n )>, taxes?: Maybe<Array<Maybe<(\n { __typename?: 'FlightAmount' }\n & Pick<FlightAmount, 'description' | 'amount' | 'currency'>\n )>>>, discounts?: Maybe<Array<Maybe<(\n { __typename?: 'FlightAmount' }\n & Pick<FlightAmount, 'description' | 'amount' | 'currency'>\n )>>>, total: (\n { __typename?: 'FlightFareTotal' }\n & Pick<FlightFareTotal, 'price' | 'tax' | 'discount' | 'currency'>\n ), fareConditions?: Maybe<(\n { __typename?: 'FareConditions' }\n & { cancellation?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, change?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, noShow?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, upgrade?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, other?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>> }\n )>, baggageAllowance?: Maybe<Array<Maybe<(\n { __typename?: 'BaggageAllowance' }\n & Pick<BaggageAllowance, 'type' | 'qty' | 'maxKG' | 'maxLBS'>\n )>>> }\n )>, multi: Array<(\n { __typename?: 'ItinerarySummary' }\n & Pick<ItinerarySummary, 'order' | 'origin' | 'destination' | 'minPrice' | 'maxPrice'>\n & { results: Array<(\n { __typename?: 'FlightItinerary' }\n & Pick<FlightItinerary, 'uid' | 'passengerCount' | 'outboundTotalDuration' | 'inboundTotalDuration' | 'additional' | 'source' | 'sourceId' | 'version' | 'tmcPreferred' | 'companyPreferred' | 'officePreferred' | 'tmcPreferredMessage' | 'companyPreferredMessage' | 'officePreferredMessage' | 'unavailable' | 'unavailableMessage' | 'co2PerItem' | 'co2PerPassenger'>\n & { outboundFlights: Array<(\n { __typename?: 'FlightJourney' }\n & Pick<FlightJourney, 'originAirport' | 'originTerminal' | 'originAirportName' | 'destinationAirport' | 'destinationTerminal' | 'destinationAirportName' | 'dateTimeDeparting' | 'dateTimeDepartingUTC' | 'dateTimeArriving' | 'dateTimeArrivingUTC' | 'marketingCarrier' | 'marketingCarrierName' | 'marketingFlightNumber' | 'operatingCarrier' | 'operatingCarrierName' | 'operatingFlightNumber' | 'equipmentCode' | 'equipmentName' | 'totalDuration' | 'cabinClass' | 'marketingNames' | 'vendorCode' | 'stops' | 'bookingCode' | 'marriageGroup' | 'fareBasisCode' | 'additional'>\n & { fareInfo?: Maybe<(\n { __typename?: 'FlightSpecialFareInfo' }\n & Pick<FlightSpecialFareInfo, 'title' | 'type' | 'code' | 'supplierCode'>\n )>, originAirportDetail: (\n { __typename?: 'AirportDetail' }\n & Pick<AirportDetail, 'iata' | 'icao' | 'latitude' | 'longitude' | 'altitude' | 'state' | 'city' | 'road' | 'popularity' | 'area' | 'location' | 'offset' | 'airportName' | 'countryName' | 'countryCode' | 'postcode'>\n ), destinationAirportDetail: (\n { __typename?: 'AirportDetail' }\n & Pick<AirportDetail, 'iata' | 'icao' | 'latitude' | 'longitude' | 'altitude' | 'state' | 'city' | 'road' | 'popularity' | 'area' | 'location' | 'offset' | 'airportName' | 'countryName' | 'countryCode' | 'postcode'>\n ), marketingCarrierDetail: (\n { __typename?: 'FlightCarrierDetail' }\n & Pick<FlightCarrierDetail, 'name' | 'alias' | 'callsign' | 'iata' | 'icao' | 'logo' | 'banner' | 'popularity'>\n ), operatingCarrierDetail: (\n { __typename?: 'FlightCarrierDetail' }\n & Pick<FlightCarrierDetail, 'name' | 'alias' | 'callsign' | 'iata' | 'icao' | 'logo' | 'banner' | 'popularity'>\n ), fareConditions: (\n { __typename?: 'FareConditions' }\n & { cancellation?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, change?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, noShow?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, upgrade?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, other?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>> }\n ) }\n )>, inboundFlights?: Maybe<Array<Maybe<(\n { __typename?: 'FlightJourney' }\n & Pick<FlightJourney, 'originAirport' | 'originTerminal' | 'originAirportName' | 'destinationAirport' | 'destinationTerminal' | 'destinationAirportName' | 'dateTimeDeparting' | 'dateTimeDepartingUTC' | 'dateTimeArriving' | 'dateTimeArrivingUTC' | 'marketingCarrier' | 'marketingCarrierName' | 'marketingFlightNumber' | 'operatingCarrier' | 'operatingCarrierName' | 'operatingFlightNumber' | 'equipmentCode' | 'equipmentName' | 'totalDuration' | 'cabinClass' | 'marketingNames' | 'vendorCode' | 'stops' | 'bookingCode' | 'marriageGroup' | 'fareBasisCode' | 'additional'>\n & { fareInfo?: Maybe<(\n { __typename?: 'FlightSpecialFareInfo' }\n & Pick<FlightSpecialFareInfo, 'title' | 'type' | 'code' | 'supplierCode'>\n )>, originAirportDetail: (\n { __typename?: 'AirportDetail' }\n & Pick<AirportDetail, 'iata' | 'icao' | 'latitude' | 'longitude' | 'altitude' | 'state' | 'city' | 'road' | 'popularity' | 'area' | 'location' | 'offset' | 'airportName' | 'countryName' | 'countryCode' | 'postcode'>\n ), destinationAirportDetail: (\n { __typename?: 'AirportDetail' }\n & Pick<AirportDetail, 'iata' | 'icao' | 'latitude' | 'longitude' | 'altitude' | 'state' | 'city' | 'road' | 'popularity' | 'area' | 'location' | 'offset' | 'airportName' | 'countryName' | 'countryCode' | 'postcode'>\n ), marketingCarrierDetail: (\n { __typename?: 'FlightCarrierDetail' }\n & Pick<FlightCarrierDetail, 'name' | 'alias' | 'callsign' | 'iata' | 'icao' | 'logo' | 'banner' | 'popularity'>\n ), operatingCarrierDetail: (\n { __typename?: 'FlightCarrierDetail' }\n & Pick<FlightCarrierDetail, 'name' | 'alias' | 'callsign' | 'iata' | 'icao' | 'logo' | 'banner' | 'popularity'>\n ), fareConditions: (\n { __typename?: 'FareConditions' }\n & { cancellation?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, change?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, noShow?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, upgrade?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, other?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>> }\n ) }\n )>>>, outboundCarbonEmissions?: Maybe<(\n { __typename?: 'FlightCarbonEmissions' }\n & Pick<FlightCarbonEmissions, 'amount' | 'unit'>\n )>, inboundCarbonEmissions?: Maybe<(\n { __typename?: 'FlightCarbonEmissions' }\n & Pick<FlightCarbonEmissions, 'amount' | 'unit'>\n )>, taxes?: Maybe<Array<Maybe<(\n { __typename?: 'FlightAmount' }\n & Pick<FlightAmount, 'description' | 'amount' | 'currency'>\n )>>>, discounts?: Maybe<Array<Maybe<(\n { __typename?: 'FlightAmount' }\n & Pick<FlightAmount, 'description' | 'amount' | 'currency'>\n )>>>, total: (\n { __typename?: 'FlightFareTotal' }\n & Pick<FlightFareTotal, 'price' | 'tax' | 'discount' | 'currency'>\n ), fareConditions?: Maybe<(\n { __typename?: 'FareConditions' }\n & { cancellation?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, change?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, noShow?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, upgrade?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>>, other?: Maybe<Array<Maybe<(\n { __typename?: 'FareConditionEntry' }\n & Pick<FareConditionEntry, 'name' | 'type' | 'currency' | 'amount' | 'remark' | 'changeFeeInd' | 'cancelFeeInd' | 'refundableInd'>\n )>>> }\n )>, baggageAllowance?: Maybe<Array<Maybe<(\n { __typename?: 'BaggageAllowance' }\n & Pick<BaggageAllowance, 'type' | 'qty' | 'maxKG' | 'maxLBS'>\n )>>> }\n )> }\n )>, grouped?: Maybe<Array<(\n { __typename?: 'GroupFlights' }\n & Pick<GroupFlights, 'referenceID' | 'flightID' | 'boundIndicator' | 'minPrice' | 'maxPrice'>\n & { flights: (\n { __typename?: 'MatchingFlights' }\n & Pick<MatchingFlights, 'LiteEconomy' | 'EconomyRestricted' | 'EconomyNoBags' | 'Economy' | 'PremiumEconomy' | 'Business' | 'PremiumBusiness' | 'First' | 'PremiumFirst'>\n ) }\n )>> }\n ), errors: Array<(\n { __typename?: 'SearchError' }\n & ErrorsFragment\n )> }\n ) }\n);\n\nexport type SearchHotelChainsQueryVariables = Exact<{\n query: Scalars['String'];\n}>;\n\n\nexport type SearchHotelChainsQuery = (\n { __typename?: 'Query' }\n & Pick<Query, 'searchHotelChains'>\n);\n\nexport type SearchIrlQueryVariables = Exact<{\n supplier: IrlSupplier;\n countryCode: Scalars['String'];\n journeyType: IrlJourneyType;\n class?: Maybe<IrlClass>;\n outboundDepartureDateTime: Scalars['DateTime'];\n departureLocationId: Scalars['ID'];\n arrivalLocationId: Scalars['ID'];\n adults: Scalars['Int'];\n children?: Maybe<Scalars['Int']>;\n returnDepartureDateTime?: Maybe<Scalars['DateTime']>;\n}>;\n\n\nexport type SearchIrlQuery = (\n { __typename?: 'Query' }\n & { searchIRL: (\n { __typename?: 'IRLSearchResult' }\n & { results: Array<(\n { __typename?: 'IRLJourneyOptions' }\n & Pick<IrlJourneyOptions, 'source' | 'sourceId'>\n & { outbound?: Maybe<Array<(\n { __typename?: 'IRLJourneyOption' }\n & Pick<IrlJourneyOption, 'from' | 'fromCode' | 'to' | 'toCode' | 'departDateTime' | 'arriveDateTime' | 'changes' | 'unsellable'>\n & { identifiers?: Maybe<(\n { __typename?: 'IRLIdentifiers' }\n & Pick<IrlIdentifiers, 'transactionIdentifier' | 'signature' | 'journeyIdentifier' | 'provider' | 'fareIdentifier' | 'direction' | 'singleOrReturn' | 'bookingRef'>\n )>, travellers?: Maybe<Array<(\n { __typename?: 'IRLTraveller' }\n & Pick<IrlTraveller, 'status' | 'id' | 'dob' | 'railcard' | 'givenName' | 'surname' | 'nameTitle' | 'contactInfo' | 'deliveryEmailAddress' | 'fare'>\n )>>, segments?: Maybe<Array<(\n { __typename?: 'IRLSegment' }\n & Pick<IrlSegment, 'id' | 'operator' | 'depart' | 'departDateTime' | 'arrive' | 'arriveDateTime' | 'reservableStatus' | 'seatPreferenceGroup'>\n & { seatPreferenceTypes?: Maybe<Array<(\n { __typename?: 'IRLSeatPreferenceType' }\n & Pick<IrlSeatPreferenceType, 'name' | 'allowedValues'>\n )>>, seats?: Maybe<Array<(\n { __typename?: 'IRLSeat' }\n & Pick<IrlSeat, 'location' | 'coach' | 'number' | 'direction' | 'position' | 'deck' | 'seatType' | 'seatSelection' | 'facilities' | 'note'>\n )>> }\n )>>, providers?: Maybe<Array<(\n { __typename?: 'IRLProvider' }\n & Pick<IrlProvider, 'providerId' | 'name'>\n & { cheapestTicket?: Maybe<(\n { __typename?: 'IRLTicketOption' }\n & Pick<IrlTicketOption, 'type' | 'class' | 'singleOrReturn' | 'price' | 'reservableStatus' | 'currency' | 'route' | 'routeCode'>\n & { identifiers?: Maybe<(\n { __typename?: 'IRLIdentifiers' }\n & Pick<IrlIdentifiers, 'transactionIdentifier' | 'signature' | 'journeyIdentifier' | 'provider' | 'fareIdentifier' | 'direction' | 'singleOrReturn' | 'bookingRef'>\n )>, tickets?: Maybe<Array<Maybe<(\n { __typename?: 'IRLTicket' }\n & Pick<IrlTicket, 'price' | 'type' | 'route' | 'numChildren' | 'numAdults'>\n & { segments?: Maybe<Array<(\n { __typename?: 'IRLSegment' }\n & Pick<IrlSegment, 'id' | 'operator' | 'depart' | 'departDateTime' | 'arrive' | 'arriveDateTime' | 'reservableStatus' | 'seatPreferenceGroup'>\n & { seatPreferenceTypes?: Maybe<Array<(\n { __typename?: 'IRLSeatPreferenceType' }\n & Pick<IrlSeatPreferenceType, 'name' | 'allowedValues'>\n )>>, seats?: Maybe<Array<(\n { __typename?: 'IRLSeat' }\n & Pick<IrlSeat, 'location' | 'coach' | 'number' | 'direction' | 'position' | 'deck' | 'seatType' | 'seatSelection' | 'facilities' | 'note'>\n )>> }\n )>> }\n )>>> }\n )>, ticketOptions?: Maybe<Array<Maybe<(\n { __typename?: 'IRLTicketOption' }\n & Pick<IrlTicketOption, 'type' | 'class' | 'singleOrReturn' | 'price' | 'reservableStatus' | 'currency' | 'route' | 'routeCode'>\n & { identifiers?: Maybe<(\n { __typename?: 'IRLIdentifiers' }\n & Pick<IrlIdentifiers, 'transactionIdentifier' | 'signature' | 'journeyIdentifier' | 'provider' | 'fareIdentifier' | 'direction' | 'singleOrReturn' | 'bookingRef'>\n )>, tickets?: Maybe<Array<Maybe<(\n { __typename?: 'IRLTicket' }\n & Pick<IrlTicket, 'price' | 'type' | 'route' | 'numChildren' | 'numAdults'>\n & { segments?: Maybe<Array<(\n { __typename?: 'IRLSegment' }\n & Pick<IrlSegment, 'id' | 'operator' | 'depart' | 'departDateTime' | 'arrive' | 'arriveDateTime' | 'reservableStatus' | 'seatPreferenceGroup'>\n & { seatPreferenceTypes?: Maybe<Array<(\n { __typename?: 'IRLSeatPreferenceType' }\n & Pick<IrlSeatPreferenceType, 'name' | 'allowedValues'>\n )>>, seats?: Maybe<Array<(\n { __typename?: 'IRLSeat' }\n & Pick<IrlSeat, 'location' | 'coach' | 'number' | 'direction' | 'position' | 'deck' | 'seatType' | 'seatSelection' | 'facilities' | 'note'>\n )>> }\n )>> }\n )>>> }\n )>>>, bookedTicket?: Maybe<(\n { __typename?: 'IRLTicketOption' }\n & Pick<IrlTicketOption, 'type' | 'class' | 'singleOrReturn' | 'price' | 'reservableStatus' | 'currency' | 'route' | 'routeCode'>\n & { identifiers?: Maybe<(\n { __typename?: 'IRLIdentifiers' }\n & Pick<IrlIdentifiers, 'transactionIdentifier' | 'signature' | 'journeyIdentifier' | 'provider' | 'fareIdentifier' | 'direction' | 'singleOrReturn' | 'bookingRef'>\n )>, tickets?: Maybe<Array<Maybe<(\n { __typename?: 'IRLTicket' }\n & Pick<IrlTicket, 'price' | 'type' | 'route' | 'numChildren' | 'numAdults'>\n & { segments?: Maybe<Array<(\n { __typename?: 'IRLSegment' }\n & Pick<IrlSegment, 'id' | 'operator' | 'depart' | 'departDateTime' | 'arrive' | 'arriveDateTime' | 'reservableStatus' | 'seatPreferenceGroup'>\n & { seatPreferenceTypes?: Maybe<Array<(\n { __typename?: 'IRLSeatPreferenceType' }\n & Pick<IrlSeatPreferenceType, 'name' | 'allowedValues'>\n )>>, seats?: Maybe<Array<(\n { __typename?: 'IRLSeat' }\n & Pick<IrlSeat, 'location' | 'coach' | 'number' | 'direction' | 'position' | 'deck' | 'seatType' | 'seatSelection' | 'facilities' | 'note'>\n )>> }\n )>> }\n )>>> }\n )> }\n )>>, ticketExtras?: Maybe<Array<(\n { __typename?: 'IRLTicketExtra' }\n & Pick<IrlTicketExtra, 'type' | 'location' | 'date' | 'description' | 'amount' | 'adultAmount' | 'childAmount' | 'currency'>\n & { identifiers?: Maybe<(\n { __typename?: 'IRLTicketExtraIdentifiers' }\n & Pick<IrlTicketExtraIdentifiers, 'type' | 'location' | 'date' | 'journeyId' | 'isOrigin'>\n )> }\n )>>, plusBus?: Maybe<(\n { __typename?: 'IRLPlusBus' }\n & Pick<IrlPlusBus, 'originPlusBusNLC' | 'originStationNLC' | 'destinationPlusBusNLC' | 'destinationStationNLC'>\n )> }\n )>>, return?: Maybe<Array<(\n { __typename?: 'IRLJourneyOption' }\n & Pick<IrlJourneyOption, 'from' | 'fromCode' | 'to' | 'toCode' | 'departDateTime' | 'arriveDateTime' | 'changes' | 'unsellable'>\n & { identifiers?: Maybe<(\n { __typename?: 'IRLIdentifiers' }\n & Pick<IrlIdentifiers, 'transactionIdentifier' | 'signature' | 'journeyIdentifier' | 'provider' | 'fareIdentifier' | 'direction' | 'singleOrReturn' | 'bookingRef'>\n )>, travellers?: Maybe<Array<(\n { __typename?: 'IRLTraveller' }\n & Pick<IrlTraveller, 'status' | 'id' | 'dob' | 'railcard' | 'givenName' | 'surname' | 'nameTitle' | 'contactInfo' | 'deliveryEmailAddress' | 'fare'>\n )>>, segments?: Maybe<Array<(\n { __typename?: 'IRLSegment' }\n & Pick<IrlSegment, 'id' | 'operator' | 'depart' | 'departDateTime' | 'arrive' | 'arriveDateTime' | 'reservableStatus' | 'seatPreferenceGroup'>\n & { seatPreferenceTypes?: Maybe<Array<(\n { __typename?: 'IRLSeatPreferenceType' }\n & Pick<IrlSeatPreferenceType, 'name' | 'allowedValues'>\n )>>, seats?: Maybe<Array<(\n { __typename?: 'IRLSeat' }\n & Pick<IrlSeat, 'location' | 'coach' | 'number' | 'direction' | 'position' | 'deck' | 'seatType' | 'seatSelection' | 'facilities' | 'note'>\n )>> }\n )>>, providers?: Maybe<Array<(\n { __typename?: 'IRLProvider' }\n & Pick<IrlProvider, 'providerId' | 'name'>\n & { cheapestTicket?: Maybe<(\n { __typename?: 'IRLTicketOption' }\n & Pick<IrlTicketOption, 'type' | 'class' | 'singleOrReturn' | 'price' | 'reservableStatus' | 'currency' | 'route' | 'routeCode'>\n & { identifiers?: Maybe<(\n { __typename?: 'IRLIdentifiers' }\n & Pick<IrlIdentifiers, 'transactionIdentifier' | 'signature' | 'journeyIdentifier' | 'provider' | 'fareIdentifier' | 'direction' | 'singleOrReturn' | 'bookingRef'>\n )>, tickets?: Maybe<Array<Maybe<(\n { __typename?: 'IRLTicket' }\n & Pick<IrlTicket, 'price' | 'type' | 'route' | 'numChildren' | 'numAdults'>\n & { segments?: Maybe<Array<(\n { __typename?: 'IRLSegment' }\n & Pick<IrlSegment, 'id' | 'operator' | 'depart' | 'departDateTime' | 'arrive' | 'arriveDateTime' | 'reservableStatus' | 'seatPreferenceGroup'>\n & { seatPreferenceTypes?: Maybe<Array<(\n { __typename?: 'IRLSeatPreferenceType' }\n & Pick<IrlSeatPreferenceType, 'name' | 'allowedValues'>\n )>>, seats?: Maybe<Array<(\n { __typename?: 'IRLSeat' }\n & Pick<IrlSeat, 'location' | 'coach' | 'number' | 'direction' | 'position' | 'deck' | 'seatType' | 'seatSelection' | 'facilities' | 'note'>\n )>> }\n )>> }\n )>>> }\n )>, ticketOptions?: Maybe<Array<Maybe<(\n { __typename?: 'IRLTicketOption' }\n & Pick<IrlTicketOption, 'type' | 'class' | 'singleOrReturn' | 'price' | 'reservableStatus' | 'currency' | 'route' | 'routeCode'>\n & { identifiers?: Maybe<(\n { __typename?: 'IRLIdentifiers' }\n & Pick<IrlIdentifiers, 'transactionIdentifier' | 'signature' | 'journeyIdentifier' | 'provider' | 'fareIdentifier' | 'direction' | 'singleOrReturn' | 'bookingRef'>\n )>, tickets?: Maybe<Array<Maybe<(\n { __typename?: 'IRLTicket' }\n & Pick<IrlTicket, 'price' | 'type' | 'route' | 'numChildren' | 'numAdults'>\n & { segments?: Maybe<Array<(\n { __typename?: 'IRLSegment' }\n & Pick<IrlSegment, 'id' | 'operator' | 'depart' | 'departDateTime' | 'arrive' | 'arriveDateTime' | 'reservableStatus' | 'seatPreferenceGroup'>\n & { seatPreferenceTypes?: Maybe<Array<(\n { __typename?: 'IRLSeatPreferenceType' }\n & Pick<IrlSeatPreferenceType, 'name' | 'allowedValues'>\n )>>, seats?: Maybe<Array<(\n { __typename?: 'IRLSeat' }\n & Pick<IrlSeat, 'location' | 'coach' | 'number' | 'direction' | 'position' | 'deck' | 'seatType' | 'seatSelection' | 'facilities' | 'note'>\n )>> }\n )>> }\n )>>> }\n )>>>, bookedTicket?: Maybe<(\n { __typename?: 'IRLTicketOption' }\n & Pick<IrlTicketOption, 'type' | 'class' | 'singleOrReturn' | 'price' | 'reservableStatus' | 'currency' | 'route' | 'routeCode'>\n & { identifiers?: Maybe<(\n { __typename?: 'IRLIdentifiers' }\n & Pick<IrlIdentifiers, 'transactionIdentifier' | 'signature' | 'journeyIdentifier' | 'provider' | 'fareIdentifier' | 'direction' | 'singleOrReturn' | 'bookingRef'>\n )>, tickets?: Maybe<Array<Maybe<(\n { __typename?: 'IRLTicket' }\n & Pick<IrlTicket, 'price' | 'type' | 'route' | 'numChildren' | 'numAdults'>\n & { segments?: Maybe<Array<(\n { __typename?: 'IRLSegment' }\n & Pick<IrlSegment, 'id' | 'operator' | 'depart' | 'departDateTime' | 'arrive' | 'arriveDateTime' | 'reservableStatus' | 'seatPreferenceGroup'>\n & { seatPreferenceTypes?: Maybe<Array<(\n { __typename?: 'IRLSeatPreferenceType' }\n & Pick<IrlSeatPreferenceType, 'name' | 'allowedValues'>\n )>>, seats?: Maybe<Array<(\n { __typename?: 'IRLSeat' }\n & Pick<IrlSeat, 'location' | 'coach' | 'number' | 'direction' | 'position' | 'deck' | 'seatType' | 'seatSelection' | 'facilities' | 'note'>\n )>> }\n )>> }\n )>>> }\n )> }\n )>>, ticketExtras?: Maybe<Array<(\n { __typename?: 'IRLTicketExtra' }\n & Pick<IrlTicketExtra, 'type' | 'location' | 'date' | 'description' | 'amount' | 'adultAmount' | 'childAmount' | 'currency'>\n & { identifiers?: Maybe<(\n { __typename?: 'IRLTicketExtraIdentifiers' }\n & Pick<IrlTicketExtraIdentifiers, 'type' | 'location' | 'date' | 'journeyId' | 'isOrigin'>\n )> }\n )>>, plusBus?: Maybe<(\n { __typename?: 'IRLPlusBus' }\n & Pick<IrlPlusBus, 'originPlusBusNLC' | 'originStationNLC' | 'destinationPlusBusNLC' | 'destinationStationNLC'>\n )> }\n )>> }\n )>, errors: Array<(\n { __typename?: 'SearchError' }\n & ErrorsFragment\n )> }\n ) }\n);\n\nexport type SearchPostcodesQueryVariables = Exact<{\n postcode: Scalars['String'];\n}>;\n\n\nexport type SearchPostcodesQuery = (\n { __typename?: 'Query' }\n & { getPostcodeDetails: (\n { __typename?: 'PostcodeDetails' }\n & Pick<PostcodeDetails, 'postcode' | 'latitude' | 'longitude'>\n ) }\n);\n\nexport type SearchRailStationsQueryVariables = Exact<{\n query: Scalars['String'];\n countryCode?: Maybe<Scalars['String']>;\n}>;\n\n\nexport type SearchRailStationsQuery = (\n { __typename?: 'Query' }\n & { searchRailStations: Array<(\n { __typename?: 'RailStation' }\n & Pick<RailStation, 'id' | 'name' | 'stationCode' | 'nlcCode' | 'trainlineCode' | 'trainlineUniqueCode'>\n & { locationDetails?: Maybe<(\n { __typename?: 'LocationDetail' }\n & Pick<LocationDetail, 'continent' | 'country' | 'countryCode' | 'state' | 'city' | 'postcode' | 'road' | 'gridReference' | 'northing' | 'easting'>\n & { coordinates?: Maybe<(\n { __typename?: 'GeoCoordinates' }\n & Pick<GeoCoordinates, 'latitude' | 'longitude' | 'altitude'>\n )> }\n )> }\n )> }\n);\n\nexport type SearchUserAddressQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type SearchUserAddressQuery = (\n { __typename?: 'Query' }\n & { getUserAddresses: Array<(\n { __typename?: 'Address' }\n & Pick<Address, 'id' | 'description' | 'numberOrName' | 'street' | 'town' | 'county' | 'postcode' | 'countryCode' | 'userPrimary' | 'officePrimary'>\n )> }\n);\n\nexport type SetBasketItemMiGroupMutationVariables = Exact<{\n basketItem: Scalars['ID'];\n group?: Maybe<Scalars['String']>;\n withSupplemental?: Maybe<Scalars['Boolean']>;\n}>;\n\n\nexport type SetBasketItemMiGroupMutation = (\n { __typename?: 'Mutation' }\n & { setBasketItemMIGroup: (\n { __typename?: 'Basket' }\n & BasketFieldsFragment\n ) }\n);\n\nexport type SetBasketItemLeadPassengerMutationVariables = Exact<{\n id: Scalars['ID'];\n user: Scalars['ID'];\n withSupplemental: Scalars['Boolean'];\n}>;\n\n\nexport type SetBasketItemLeadPassengerMutation = (\n { __typename?: 'Mutation' }\n & { setBasketItemLeadPassenger: (\n { __typename?: 'Basket' }\n & BasketFieldsFragment\n ) }\n);\n\nexport type SetBasketItemMiValueMutationVariables = Exact<{\n mi: Scalars['ID'];\n miValue?: Maybe<Scalars['ID']>;\n miFreeValue?: Maybe<Scalars['String']>;\n user?: Maybe<Scalars['ID']>;\n withSupplemental?: Maybe<Scalars['Boolean']>;\n}>;\n\n\nexport type SetBasketItemMiValueMutation = (\n { __typename?: 'Mutation' }\n & { setBasketItemMIValue: (\n { __typename?: 'Basket' }\n & BasketFieldsFragment\n ) }\n);\n\nexport type SetBasketItemPaymentMethodMutationVariables = Exact<{\n basketItem: Scalars['ID'];\n paymentMethod: Scalars['ID'];\n withSupplemental?: Maybe<Scalars['Boolean']>;\n}>;\n\n\nexport type SetBasketItemPaymentMethodMutation = (\n { __typename?: 'Mutation' }\n & { setBasketItemPaymentMethod: (\n { __typename?: 'Basket' }\n & BasketFieldsFragment\n ) }\n);\n\nexport type UpdateBasketNotesMutationVariables = Exact<{\n id?: Maybe<Scalars['ID']>;\n reference?: Maybe<Scalars['String']>;\n notes: Scalars['String'];\n withSupplemental?: Maybe<Scalars['Boolean']>;\n}>;\n\n\nexport type UpdateBasketNotesMutation = (\n { __typename?: 'Mutation' }\n & { updateBasketNotes: (\n { __typename?: 'Basket' }\n & BasketFieldsFragment\n ) }\n);\n\nexport type UpdateBasketTitleMutationVariables = Exact<{\n id?: Maybe<Scalars['ID']>;\n reference?: Maybe<Scalars['String']>;\n newTitle: Scalars['String'];\n withSupplemental?: Maybe<Scalars['Boolean']>;\n}>;\n\n\nexport type UpdateBasketTitleMutation = (\n { __typename?: 'Mutation' }\n & { updateBasketTitle: (\n { __typename?: 'Basket' }\n & BasketFieldsFragment\n ) }\n);\n\nexport type UserFieldsFragment = (\n { __typename?: 'User' }\n & Pick<User, 'id' | 'title' | 'forename' | 'surname' | 'email' | 'username' | 'employeeId' | 'createdAt' | 'updatedAt' | 'dob' | 'admin' | 'tmcAdmin' | 'companyAdmin' | 'bookerType' | 'authMethods' | 'active' | 'passwordLastUpdated'>\n & { selectedLanguage: (\n { __typename?: 'Language' }\n & Pick<Language, 'id' | 'name' | 'isoCode'>\n ), availableLanguages: Array<(\n { __typename?: 'Language' }\n & Pick<Language, 'id' | 'name' | 'isoCode'>\n )>, passports: Array<(\n { __typename?: 'Passport' }\n & Pick<Passport, 'id' | 'number' | 'codeOfIssuingState' | 'nationality' | 'sex' | 'dob' | 'surname' | 'givenNames' | 'dateOfIssue' | 'createdAt' | 'updatedAt'>\n )>, addresses: Array<(\n { __typename?: 'Address' }\n & Pick<Address, 'id' | 'description' | 'numberOrName' | 'street' | 'town' | 'county' | 'postcode' | 'countryCode' | 'userPrimary' | 'officePrimary'>\n )>, phoneNumbers: Array<(\n { __typename?: 'PhoneNumber' }\n & Pick<PhoneNumber, 'id' | 'description' | 'countryCode' | 'areaCode' | 'number' | 'extension' | 'type' | 'officePrimary' | 'userPrimary'>\n )> }\n);\n\nexport type GetUserServicesQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GetUserServicesQuery = (\n { __typename?: 'Query' }\n & { getUserServices: Array<(\n { __typename?: 'Service' }\n & Pick<Service, 'id' | 'cancellable' | 'amendable' | 'type' | 'name' | 'description' | 'detailSchema' | 'searchQuerySchema'>\n )> }\n);\n\nexport type GetUserUiConfigsQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GetUserUiConfigsQuery = (\n { __typename?: 'Query' }\n & { getUserUIConfigs: (\n { __typename?: 'UIConfigCollection' }\n & { all: Array<(\n { __typename?: 'UIConfig' }\n & Pick<UiConfig, 'id' | 'config' | 'key'>\n )> }\n ) }\n);\n\nexport type GetUserMessagesQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GetUserMessagesQuery = (\n { __typename?: 'Query' }\n & { getUserMessages: Array<(\n { __typename?: 'Message' }\n & Pick<Message, 'id' | 'name' | 'description' | 'config' | 'target' | 'key'>\n )> }\n);\n\nexport type GetUserPhoneNumbersQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GetUserPhoneNumbersQuery = (\n { __typename?: 'Query' }\n & { getUserPhoneNumbers: Array<(\n { __typename?: 'PhoneNumber' }\n & Pick<PhoneNumber, 'id' | 'description' | 'countryCode' | 'areaCode' | 'number' | 'extension' | 'type' | 'officePrimary' | 'userPrimary'>\n )> }\n);\n\nexport type SetUserLanguageMutationVariables = Exact<{\n language?: Maybe<Scalars['ID']>;\n}>;\n\n\nexport type SetUserLanguageMutation = (\n { __typename?: 'Mutation' }\n & { setUserLanguage: (\n { __typename?: 'User' }\n & Pick<User, 'id'>\n & { selectedLanguage: (\n { __typename?: 'Language' }\n & Pick<Language, 'id' | 'name'>\n ) }\n ) }\n);\n\nexport type GetUserQueryVariables = Exact<{\n id?: Maybe<Scalars['ID']>;\n}>;\n\n\nexport type GetUserQuery = (\n { __typename?: 'Query' }\n & { getUser: (\n { __typename?: 'User' }\n & UserFieldsFragment\n ) }\n);\n\nexport type SearchUserCanBookForQueryVariables = Exact<{\n email?: Maybe<Scalars['String']>;\n userName?: Maybe<Scalars['String']>;\n employeeId?: Maybe<Scalars['String']>;\n}>;\n\n\nexport type SearchUserCanBookForQuery = (\n { __typename?: 'Query' }\n & { searchUserCanBookFor: Array<(\n { __typename?: 'User' }\n & Pick<User, 'id' | 'forename' | 'surname' | 'email'>\n )> }\n);\n\nexport type ValidateUserMiFreeValueQueryVariables = Exact<{\n mi: Scalars['ID'];\n freeValue: Scalars['String'];\n}>;\n\n\nexport type ValidateUserMiFreeValueQuery = (\n { __typename?: 'Query' }\n & Pick<Query, 'validateUserMIFreeValue'>\n);\n\nexport namespace AcceptNewPrice {\n export type Variables = AcceptNewPriceMutationVariables;\n export type Mutation = AcceptNewPriceMutation;\n export type AcceptNewPrice = AcceptNewPriceMutation['acceptNewPrice'];\n}\n\nexport namespace AddUsersToBasketItem {\n export type Variables = AddUsersToBasketItemMutationVariables;\n export type Mutation = AddUsersToBasketItemMutation;\n export type AddUsersToBasketItem = AddUsersToBasketItemMutation['addUsersToBasketItem'];\n}\n\nexport namespace TravellerFields {\n export type Fragment = TravellerFieldsFragment;\n}\n\nexport namespace OwnerFields {\n export type Fragment = OwnerFieldsFragment;\n}\n\nexport namespace BasketFields {\n export type Fragment = BasketFieldsFragment;\n export type Owner = BasketFieldsFragment['owner'];\n export type BasketItems = BasketFieldsFragment['basketItems'][number];\n export type AvailablePaymentMethods = BasketFieldsFragment['basketItems'][number]['availablePaymentMethods'][number];\n export type SelectedPaymentMethod = BasketFieldsFragment['basketItems'][number]['selectedPaymentMethod'];\n export type Service = BasketFieldsFragment['basketItems'][number]['service'];\n export type Users = BasketFieldsFragment['basketItems'][number]['users'][number];\n export type UserPassengerTypes = BasketFieldsFragment['basketItems'][number]['userPassengerTypes'][number];\n export type LeadPassenger = BasketFieldsFragment['basketItems'][number]['leadPassenger'];\n export type ManagementInfo = BasketFieldsFragment['basketItems'][number]['managementInfo'][number];\n export type FixedValue = BasketFieldsFragment['basketItems'][number]['managementInfo'][number]['fixedValue'];\n export type DefaultValue = BasketFieldsFragment['basketItems'][number]['managementInfo'][number]['defaultValue'];\n export type Values = BasketFieldsFragment['basketItems'][number]['managementInfo'][number]['values'][number];\n export type SelectedValues = BasketFieldsFragment['basketItems'][number]['managementInfo'][number]['selectedValues'][number];\n export type Value = BasketFieldsFragment['basketItems'][number]['managementInfo'][number]['selectedValues'][number]['value'];\n export type User = BasketFieldsFragment['basketItems'][number]['managementInfo'][number]['selectedValues'][number]['user'];\n export type CompanyGroup = BasketFieldsFragment['companyGroup'];\n}\n\nexport namespace GetUserBaskets {\n export type Variables = GetUserBasketsQueryVariables;\n export type Query = GetUserBasketsQuery;\n export type GetUserBaskets = GetUserBasketsQuery['getUserBaskets'][number];\n}\n\nexport namespace DeleteBasket {\n export type Variables = DeleteBasketMutationVariables;\n export type Mutation = DeleteBasketMutation;\n}\n\nexport namespace CreateBasket {\n export type Variables = CreateBasketMutationVariables;\n export type Mutation = CreateBasketMutation;\n export type CreateBasket = CreateBasketMutation['createBasket'];\n}\n\nexport namespace RemoveItemFromBasket {\n export type Variables = RemoveItemFromBasketMutationVariables;\n export type Mutation = RemoveItemFromBasketMutation;\n export type RemoveItemFromBasket = RemoveItemFromBasketMutation['removeItemFromBasket'];\n}\n\nexport namespace SendBasketForApproval {\n export type Variables = SendBasketForApprovalMutationVariables;\n export type Mutation = SendBasketForApprovalMutation;\n export type SendBasketForApproval = SendBasketForApprovalMutation['sendBasketForApproval'];\n}\n\nexport namespace AddItemToBasket {\n export type Variables = AddItemToBasketMutationVariables;\n export type Mutation = AddItemToBasketMutation;\n export type AddItemToBasket = AddItemToBasketMutation['addItemToBasket'];\n}\n\nexport namespace GetUserBasket {\n export type Variables = GetUserBasketQueryVariables;\n export type Query = GetUserBasketQuery;\n export type GetUserBasket = GetUserBasketQuery['getUserBasket'];\n}\n\nexport namespace RevalidateBasket {\n export type Variables = RevalidateBasketMutationVariables;\n export type Mutation = RevalidateBasketMutation;\n export type RevalidateBasket = RevalidateBasketMutation['revalidateBasket'];\n}\n\nexport namespace BookBasket {\n export type Variables = BookBasketMutationVariables;\n export type Mutation = BookBasketMutation;\n export type BookBasket = BookBasketMutation['bookBasket'];\n}\n\nexport namespace SearchCabHire {\n export type Variables = SearchCabHireQueryVariables;\n export type Query = SearchCabHireQuery;\n export type SearchCabHire = SearchCabHireQuery['searchCabHire'];\n export type Results = SearchCabHireQuery['searchCabHire']['results'][number];\n export type FromLocation = SearchCabHireQuery['searchCabHire']['results'][number]['fromLocation'];\n export type ToLocation = SearchCabHireQuery['searchCabHire']['results'][number]['toLocation'];\n export type Vias = SearchCabHireQuery['searchCabHire']['results'][number]['vias'][number];\n export type Errors = SearchCabHireQuery['searchCabHire']['errors'][number];\n}\n\nexport namespace CarHireAvailabilityDetailRequest {\n export type Variables = CarHireAvailabilityDetailRequestQueryVariables;\n export type Query = CarHireAvailabilityDetailRequestQuery;\n export type CarHireAvailabilityDetailRequest = CarHireAvailabilityDetailRequestQuery['carHireAvailabilityDetailRequest'];\n export type Identifiers = CarHireAvailabilityDetailRequestQuery['carHireAvailabilityDetailRequest']['identifiers'];\n export type Vendor = CarHireAvailabilityDetailRequestQuery['carHireAvailabilityDetailRequest']['vendor'];\n export type Address = CarHireAvailabilityDetailRequestQuery['carHireAvailabilityDetailRequest']['address'];\n export type AdditionalInfo = CarHireAvailabilityDetailRequestQuery['carHireAvailabilityDetailRequest']['additionalInfo'][number];\n export type Custom = CarHireAvailabilityDetailRequestQuery['carHireAvailabilityDetailRequest']['additionalInfo'][number]['custom'][number];\n}\n\nexport namespace SearchCarHire {\n export type Variables = SearchCarHireQueryVariables;\n export type Query = SearchCarHireQuery;\n export type SearchCarHire = SearchCarHireQuery['searchCarHire'];\n export type Results = SearchCarHireQuery['searchCarHire']['results'][number];\n export type Identifiers = SearchCarHireQuery['searchCarHire']['results'][number]['identifiers'];\n export type DisplayRecord = SearchCarHireQuery['searchCarHire']['results'][number]['displayRecord'];\n export type Vendor = SearchCarHireQuery['searchCarHire']['results'][number]['displayRecord']['vendor'];\n export type Vehicle = SearchCarHireQuery['searchCarHire']['results'][number]['displayRecord']['vehicle'];\n export type Charges = SearchCarHireQuery['searchCarHire']['results'][number]['displayRecord']['charges'][number];\n export type PickupLocation = SearchCarHireQuery['searchCarHire']['results'][number]['displayRecord']['pickupLocation'];\n export type ReturnLocation = SearchCarHireQuery['searchCarHire']['results'][number]['displayRecord']['returnLocation'];\n export type AdditionalInfo = SearchCarHireQuery['searchCarHire']['results'][number]['displayRecord']['additionalInfo'][number];\n export type Custom = SearchCarHireQuery['searchCarHire']['results'][number]['displayRecord']['additionalInfo'][number]['custom'][number];\n export type Errors = SearchCarHireQuery['searchCarHire']['errors'][number];\n}\n\nexport namespace DeleteRecentSearch {\n export type Variables = DeleteRecentSearchMutationVariables;\n export type Mutation = DeleteRecentSearchMutation;\n}\n\nexport namespace DeleteUserAddress {\n export type Variables = DeleteUserAddressMutationVariables;\n export type Mutation = DeleteUserAddressMutation;\n}\n\nexport namespace Errors {\n export type Fragment = ErrorsFragment;\n export type Service = ErrorsFragment['service'];\n}\n\nexport namespace GroupedFields {\n export type Fragment = GroupedFieldsFragment;\n export type Flights = GroupedFieldsFragment['flights'];\n}\n\nexport namespace SearchFlightsV2 {\n export type Variables = SearchFlightsV2QueryVariables;\n export type Query = SearchFlightsV2Query;\n export type SearchFlightsV2 = SearchFlightsV2Query['searchFlightsV2'];\n export type Results = SearchFlightsV2Query['searchFlightsV2']['results'];\n export type Journeys = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number];\n export type OutboundFlights = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['outboundFlights'][number];\n export type OriginAirportDetail = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['outboundFlights'][number]['originAirportDetail'];\n export type DestinationAirportDetail = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['outboundFlights'][number]['destinationAirportDetail'];\n export type MarketingCarrierDetail = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['outboundFlights'][number]['marketingCarrierDetail'];\n export type OperatingCarrierDetail = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['outboundFlights'][number]['operatingCarrierDetail'];\n export type FareConditions = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['outboundFlights'][number]['fareConditions'];\n export type Cancellation = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['outboundFlights'][number]['fareConditions']['cancellation'][number];\n export type Change = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['outboundFlights'][number]['fareConditions']['change'][number];\n export type NoShow = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['outboundFlights'][number]['fareConditions']['noShow'][number];\n export type Upgrade = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['outboundFlights'][number]['fareConditions']['upgrade'][number];\n export type Other = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['outboundFlights'][number]['fareConditions']['other'][number];\n export type InboundFlights = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['inboundFlights'][number];\n export type _OriginAirportDetail = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['inboundFlights'][number]['originAirportDetail'];\n export type _DestinationAirportDetail = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['inboundFlights'][number]['destinationAirportDetail'];\n export type _MarketingCarrierDetail = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['inboundFlights'][number]['marketingCarrierDetail'];\n export type _OperatingCarrierDetail = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['inboundFlights'][number]['operatingCarrierDetail'];\n export type _FareConditions = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['inboundFlights'][number]['fareConditions'];\n export type _Cancellation = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['inboundFlights'][number]['fareConditions']['cancellation'][number];\n export type _Change = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['inboundFlights'][number]['fareConditions']['change'][number];\n export type _NoShow = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['inboundFlights'][number]['fareConditions']['noShow'][number];\n export type _Upgrade = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['inboundFlights'][number]['fareConditions']['upgrade'][number];\n export type _Other = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['inboundFlights'][number]['fareConditions']['other'][number];\n export type OutboundCarbonEmissions = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['outboundCarbonEmissions'];\n export type InboundCarbonEmissions = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['inboundCarbonEmissions'];\n export type Taxes = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['taxes'][number];\n export type Discounts = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['discounts'][number];\n export type Total = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['total'];\n export type __FareConditions = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['fareConditions'];\n export type __Cancellation = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['fareConditions']['cancellation'][number];\n export type __Change = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['fareConditions']['change'][number];\n export type __NoShow = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['fareConditions']['noShow'][number];\n export type __Upgrade = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['fareConditions']['upgrade'][number];\n export type __Other = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['fareConditions']['other'][number];\n export type BaggageAllowance = SearchFlightsV2Query['searchFlightsV2']['results']['journeys'][number]['baggageAllowance'][number];\n export type Multi = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number];\n export type _Results = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number];\n export type _OutboundFlights = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['outboundFlights'][number];\n export type __OriginAirportDetail = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['outboundFlights'][number]['originAirportDetail'];\n export type __DestinationAirportDetail = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['outboundFlights'][number]['destinationAirportDetail'];\n export type __MarketingCarrierDetail = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['outboundFlights'][number]['marketingCarrierDetail'];\n export type __OperatingCarrierDetail = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['outboundFlights'][number]['operatingCarrierDetail'];\n export type ___FareConditions = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['outboundFlights'][number]['fareConditions'];\n export type ___Cancellation = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['outboundFlights'][number]['fareConditions']['cancellation'][number];\n export type ___Change = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['outboundFlights'][number]['fareConditions']['change'][number];\n export type ___NoShow = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['outboundFlights'][number]['fareConditions']['noShow'][number];\n export type ___Upgrade = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['outboundFlights'][number]['fareConditions']['upgrade'][number];\n export type ___Other = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['outboundFlights'][number]['fareConditions']['other'][number];\n export type _InboundFlights = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['inboundFlights'][number];\n export type ___OriginAirportDetail = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['inboundFlights'][number]['originAirportDetail'];\n export type ___DestinationAirportDetail = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['inboundFlights'][number]['destinationAirportDetail'];\n export type ___MarketingCarrierDetail = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['inboundFlights'][number]['marketingCarrierDetail'];\n export type ___OperatingCarrierDetail = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['inboundFlights'][number]['operatingCarrierDetail'];\n export type ____FareConditions = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['inboundFlights'][number]['fareConditions'];\n export type ____Cancellation = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['inboundFlights'][number]['fareConditions']['cancellation'][number];\n export type ____Change = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['inboundFlights'][number]['fareConditions']['change'][number];\n export type ____NoShow = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['inboundFlights'][number]['fareConditions']['noShow'][number];\n export type ____Upgrade = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['inboundFlights'][number]['fareConditions']['upgrade'][number];\n export type ____Other = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['inboundFlights'][number]['fareConditions']['other'][number];\n export type _OutboundCarbonEmissions = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['outboundCarbonEmissions'];\n export type _InboundCarbonEmissions = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['inboundCarbonEmissions'];\n export type _Taxes = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['taxes'][number];\n export type _Discounts = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['discounts'][number];\n export type _Total = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['total'];\n export type _____FareConditions = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['fareConditions'];\n export type _____Cancellation = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['fareConditions']['cancellation'][number];\n export type _____Change = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['fareConditions']['change'][number];\n export type _____NoShow = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['fareConditions']['noShow'][number];\n export type _____Upgrade = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['fareConditions']['upgrade'][number];\n export type _____Other = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['fareConditions']['other'][number];\n export type _BaggageAllowance = SearchFlightsV2Query['searchFlightsV2']['results']['multi'][number]['results'][number]['baggageAllowance'][number];\n export type Grouped = SearchFlightsV2Query['searchFlightsV2']['results']['grouped'][number];\n export type Errors = SearchFlightsV2Query['searchFlightsV2']['errors'][number];\n}\n\nexport namespace GetCarHireDepots {\n export type Variables = GetCarHireDepotsQueryVariables;\n export type Query = GetCarHireDepotsQuery;\n export type GetCarHireDepots = GetCarHireDepotsQuery['getCarHireDepots'][number];\n}\n\nexport namespace GetConfermaOfficeNames {\n export type Variables = GetConfermaOfficeNamesQueryVariables;\n export type Query = GetConfermaOfficeNamesQuery;\n export type GetConfermaOfficeNames = GetConfermaOfficeNamesQuery['getConfermaOfficeNames'];\n export type Results = GetConfermaOfficeNamesQuery['getConfermaOfficeNames']['results'][number];\n export type Errors = GetConfermaOfficeNamesQuery['getConfermaOfficeNames']['errors'][number];\n}\n\nexport namespace GetConfermaQuicklist {\n export type Variables = GetConfermaQuicklistQueryVariables;\n export type Query = GetConfermaQuicklistQuery;\n export type GetConfermaQuicklist = GetConfermaQuicklistQuery['getConfermaQuicklist'];\n export type Results = GetConfermaQuicklistQuery['getConfermaQuicklist']['results'][number];\n export type Location = GetConfermaQuicklistQuery['getConfermaQuicklist']['results'][number]['location'];\n export type Address = GetConfermaQuicklistQuery['getConfermaQuicklist']['results'][number]['address'];\n export type Transports = GetConfermaQuicklistQuery['getConfermaQuicklist']['results'][number]['transports'][number];\n export type Preferred = GetConfermaQuicklistQuery['getConfermaQuicklist']['results'][number]['preferred'];\n export type Tags = GetConfermaQuicklistQuery['getConfermaQuicklist']['results'][number]['tags'][number];\n export type AvailableRates = GetConfermaQuicklistQuery['getConfermaQuicklist']['results'][number]['availableRates'];\n export type Rooms = GetConfermaQuicklistQuery['getConfermaQuicklist']['results'][number]['availableRates']['rooms'][number];\n export type CurrencyConversion = GetConfermaQuicklistQuery['getConfermaQuicklist']['results'][number]['availableRates']['rooms'][number]['currencyConversion'];\n export type Deposit = GetConfermaQuicklistQuery['getConfermaQuicklist']['results'][number]['availableRates']['rooms'][number]['deposit'];\n export type Nights = GetConfermaQuicklistQuery['getConfermaQuicklist']['results'][number]['availableRates']['rooms'][number]['nights'][number];\n export type Policies = GetConfermaQuicklistQuery['getConfermaQuicklist']['results'][number]['availableRates']['rooms'][number]['policies'];\n export type Tax = GetConfermaQuicklistQuery['getConfermaQuicklist']['results'][number]['availableRates']['rooms'][number]['tax'];\n export type AcceptedCards = GetConfermaQuicklistQuery['getConfermaQuicklist']['results'][number]['availableRates']['rooms'][number]['acceptedCards'][number];\n export type PaymentTypes = GetConfermaQuicklistQuery['getConfermaQuicklist']['results'][number]['availableRates']['rooms'][number]['paymentTypes'][number];\n export type Errors = GetConfermaQuicklistQuery['getConfermaQuicklist']['errors'][number];\n}\n\nexport namespace GetRailStation {\n export type Variables = GetRailStationQueryVariables;\n export type Query = GetRailStationQuery;\n export type GetRailStation = GetRailStationQuery['getRailStation'];\n export type LocationDetails = GetRailStationQuery['getRailStation']['locationDetails'];\n export type Coordinates = GetRailStationQuery['getRailStation']['locationDetails']['coordinates'];\n}\n\nexport namespace GetRailcards {\n export type Variables = GetRailcardsQueryVariables;\n export type Query = GetRailcardsQuery;\n export type GetRailcards = GetRailcardsQuery['getRailcards'][number];\n}\n\nexport namespace GetRiskAlerts {\n export type Variables = GetRiskAlertsQueryVariables;\n export type Query = GetRiskAlertsQuery;\n export type GetRiskAlerts = GetRiskAlertsQuery['getRiskAlerts'][number];\n}\n\nexport namespace GetUserAddresses {\n export type Variables = GetUserAddressesQueryVariables;\n export type Query = GetUserAddressesQuery;\n export type GetUserAddresses = GetUserAddressesQuery['getUserAddresses'][number];\n}\n\nexport namespace GetUserCompanyOffices {\n export type Variables = GetUserCompanyOfficesQueryVariables;\n export type Query = GetUserCompanyOfficesQuery;\n export type GetUserCompanyOffices = GetUserCompanyOfficesQuery['getUserCompanyOffices'][number];\n export type Addresses = GetUserCompanyOfficesQuery['getUserCompanyOffices'][number]['addresses'][number];\n}\n\nexport namespace GetUserCurrentCarbonAllowance {\n export type Variables = GetUserCurrentCarbonAllowanceQueryVariables;\n export type Query = GetUserCurrentCarbonAllowanceQuery;\n export type GetUserCurrentCarbonAllowance = GetUserCurrentCarbonAllowanceQuery['getUserCurrentCarbonAllowance'];\n export type Company = GetUserCurrentCarbonAllowanceQuery['getUserCurrentCarbonAllowance']['company'];\n export type Office = GetUserCurrentCarbonAllowanceQuery['getUserCurrentCarbonAllowance']['office'];\n export type User = GetUserCurrentCarbonAllowanceQuery['getUserCurrentCarbonAllowance']['user'];\n export type PeriodConsumption = GetUserCurrentCarbonAllowanceQuery['getUserCurrentCarbonAllowance']['periodConsumption'][number];\n}\n\nexport namespace GetUserMiAutoSuggestValues {\n export type Variables = GetUserMiAutoSuggestValuesQueryVariables;\n export type Query = GetUserMiAutoSuggestValuesQuery;\n export type GetUserMiAutoSuggestValues = GetUserMiAutoSuggestValuesQuery['getUserMIAutoSuggestValues'][number];\n}\n\nexport namespace GetUserPhone {\n export type Variables = GetUserPhoneQueryVariables;\n export type Query = GetUserPhoneQuery;\n export type GetUserPhoneNumbers = GetUserPhoneQuery['getUserPhoneNumbers'][number];\n}\n\nexport namespace GetUserRecentSearches {\n export type Variables = GetUserRecentSearchesQueryVariables;\n export type Query = GetUserRecentSearchesQuery;\n export type GetUserRecentSearches = GetUserRecentSearchesQuery['getUserRecentSearches'][number];\n export type Travellers = GetUserRecentSearchesQuery['getUserRecentSearches'][number]['travellers'][number];\n}\n\nexport namespace SearchHotels {\n export type Variables = SearchHotelsQueryVariables;\n export type Query = SearchHotelsQuery;\n export type SearchHotels = SearchHotelsQuery['searchHotels'];\n export type Results = SearchHotelsQuery['searchHotels']['results'][number];\n export type Location = SearchHotelsQuery['searchHotels']['results'][number]['location'];\n export type Address = SearchHotelsQuery['searchHotels']['results'][number]['address'];\n export type Transports = SearchHotelsQuery['searchHotels']['results'][number]['transports'][number];\n export type Preferred = SearchHotelsQuery['searchHotels']['results'][number]['preferred'];\n export type Tags = SearchHotelsQuery['searchHotels']['results'][number]['tags'][number];\n export type AvailableRates = SearchHotelsQuery['searchHotels']['results'][number]['availableRates'];\n export type Rooms = SearchHotelsQuery['searchHotels']['results'][number]['availableRates']['rooms'][number];\n export type CurrencyConversion = SearchHotelsQuery['searchHotels']['results'][number]['availableRates']['rooms'][number]['currencyConversion'];\n export type Deposit = SearchHotelsQuery['searchHotels']['results'][number]['availableRates']['rooms'][number]['deposit'];\n export type Nights = SearchHotelsQuery['searchHotels']['results'][number]['availableRates']['rooms'][number]['nights'][number];\n export type Policies = SearchHotelsQuery['searchHotels']['results'][number]['availableRates']['rooms'][number]['policies'];\n export type Tax = SearchHotelsQuery['searchHotels']['results'][number]['availableRates']['rooms'][number]['tax'];\n export type AcceptedCards = SearchHotelsQuery['searchHotels']['results'][number]['availableRates']['rooms'][number]['acceptedCards'][number];\n export type PaymentTypes = SearchHotelsQuery['searchHotels']['results'][number]['availableRates']['rooms'][number]['paymentTypes'][number];\n export type Errors = SearchHotelsQuery['searchHotels']['errors'][number];\n export type Service = SearchHotelsQuery['searchHotels']['errors'][number]['service'];\n}\n\nexport namespace GetMultipleHotelsAvailability {\n export type Variables = GetMultipleHotelsAvailabilityQueryVariables;\n export type Query = GetMultipleHotelsAvailabilityQuery;\n export type GetMultipleHotelsAvailability = GetMultipleHotelsAvailabilityQuery['getMultipleHotelsAvailability'];\n export type Results = GetMultipleHotelsAvailabilityQuery['getMultipleHotelsAvailability']['results'][number];\n export type Rooms = GetMultipleHotelsAvailabilityQuery['getMultipleHotelsAvailability']['results'][number]['rooms'][number];\n export type CurrencyConversion = GetMultipleHotelsAvailabilityQuery['getMultipleHotelsAvailability']['results'][number]['rooms'][number]['currencyConversion'];\n export type Deposit = GetMultipleHotelsAvailabilityQuery['getMultipleHotelsAvailability']['results'][number]['rooms'][number]['deposit'];\n export type Nights = GetMultipleHotelsAvailabilityQuery['getMultipleHotelsAvailability']['results'][number]['rooms'][number]['nights'][number];\n export type Policies = GetMultipleHotelsAvailabilityQuery['getMultipleHotelsAvailability']['results'][number]['rooms'][number]['policies'];\n export type Tax = GetMultipleHotelsAvailabilityQuery['getMultipleHotelsAvailability']['results'][number]['rooms'][number]['tax'];\n export type AcceptedCards = GetMultipleHotelsAvailabilityQuery['getMultipleHotelsAvailability']['results'][number]['rooms'][number]['acceptedCards'][number];\n export type PaymentTypes = GetMultipleHotelsAvailabilityQuery['getMultipleHotelsAvailability']['results'][number]['rooms'][number]['paymentTypes'][number];\n export type Errors = GetMultipleHotelsAvailabilityQuery['getMultipleHotelsAvailability']['errors'][number];\n}\n\nexport namespace IsPostcodeValid {\n export type Variables = IsPostcodeValidQueryVariables;\n export type Query = IsPostcodeValidQuery;\n}\n\nexport namespace Location_Detail {\n export type Fragment = Location_DetailFragment;\n export type Coordinates = Location_DetailFragment['coordinates'];\n}\n\nexport namespace SearchAirports {\n export type Variables = SearchAirportsQueryVariables;\n export type Query = SearchAirportsQuery;\n export type SearchAirports = SearchAirportsQuery['searchAirports'];\n export type IataMatch = SearchAirportsQuery['searchAirports']['iataMatch'];\n export type LocationDetails = SearchAirportsQuery['searchAirports']['iataMatch']['locationDetails'];\n export type GeneralMatches = SearchAirportsQuery['searchAirports']['generalMatches'][number];\n export type _LocationDetails = SearchAirportsQuery['searchAirports']['generalMatches'][number]['locationDetails'];\n}\n\nexport namespace SearchLounges {\n export type Variables = SearchLoungesQueryVariables;\n export type Query = SearchLoungesQuery;\n export type SearchLounges = SearchLoungesQuery['searchLounges'];\n export type Results = SearchLoungesQuery['searchLounges']['results'][number];\n export type Lounge = SearchLoungesQuery['searchLounges']['results'][number]['lounge'];\n export type Errors = SearchLoungesQuery['searchLounges']['errors'][number];\n}\n\nexport namespace MoveItemToADifferentBasket {\n export type Variables = MoveItemToADifferentBasketMutationVariables;\n export type Mutation = MoveItemToADifferentBasketMutation;\n export type MoveItemToADifferentBasket = MoveItemToADifferentBasketMutation['moveItemToADifferentBasket'];\n}\n\nexport namespace SearchParking {\n export type Variables = SearchParkingQueryVariables;\n export type Query = SearchParkingQuery;\n export type SearchParking = SearchParkingQuery['searchParking'];\n export type Results = SearchParkingQuery['searchParking']['results'][number];\n export type CarPark = SearchParkingQuery['searchParking']['results'][number]['carPark'];\n export type Errors = SearchParkingQuery['searchParking']['errors'][number];\n}\n\nexport namespace SearchRail {\n export type Variables = SearchRailQueryVariables;\n export type Query = SearchRailQuery;\n export type SearchRail = SearchRailQuery['searchRail'];\n export type Results = SearchRailQuery['searchRail']['results'][number];\n export type Outbound = SearchRailQuery['searchRail']['results'][number]['outbound'][number];\n export type Identifiers = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['identifiers'];\n export type Travellers = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['travellers'][number];\n export type Segments = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['segments'][number];\n export type SeatPreferenceTypes = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['segments'][number]['seatPreferenceTypes'][number];\n export type Seats = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['segments'][number]['seats'][number];\n export type CallingPoints = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['segments'][number]['callingPoints'][number];\n export type Providers = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['providers'][number];\n export type CheapestTicket = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['providers'][number]['cheapestTicket'];\n export type _Identifiers = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['providers'][number]['cheapestTicket']['identifiers'];\n export type Terms = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['providers'][number]['cheapestTicket']['terms'];\n export type DynamicConditions = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['providers'][number]['cheapestTicket']['terms']['dynamicConditions'][number];\n export type Tickets = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['providers'][number]['cheapestTicket']['tickets'][number];\n export type _Segments = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['providers'][number]['cheapestTicket']['tickets'][number]['segments'][number];\n export type TicketQueueList = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['providers'][number]['cheapestTicket']['ticketQueueList'][number];\n export type AccountsList = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['providers'][number]['cheapestTicket']['accountsList'][number];\n export type TicketOptions = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['providers'][number]['ticketOptions'][number];\n export type __Identifiers = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['providers'][number]['ticketOptions'][number]['identifiers'];\n export type AllowedWith = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['providers'][number]['ticketOptions'][number]['identifiers']['allowedWith'][number];\n export type _Terms = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['providers'][number]['ticketOptions'][number]['terms'];\n export type _Tickets = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['providers'][number]['ticketOptions'][number]['tickets'][number];\n export type _TicketQueueList = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['providers'][number]['ticketOptions'][number]['ticketQueueList'][number];\n export type _AccountsList = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['providers'][number]['ticketOptions'][number]['accountsList'][number];\n export type BookedTicket = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['providers'][number]['bookedTicket'];\n export type ___Identifiers = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['providers'][number]['bookedTicket']['identifiers'];\n export type __Terms = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['providers'][number]['bookedTicket']['terms'];\n export type __Tickets = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['providers'][number]['bookedTicket']['tickets'][number];\n export type __TicketQueueList = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['providers'][number]['bookedTicket']['ticketQueueList'][number];\n export type __AccountsList = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['providers'][number]['bookedTicket']['accountsList'][number];\n export type TicketExtras = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['ticketExtras'][number];\n export type ____Identifiers = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['ticketExtras'][number]['identifiers'];\n export type PlusBus = SearchRailQuery['searchRail']['results'][number]['outbound'][number]['plusBus'];\n export type Return = SearchRailQuery['searchRail']['results'][number]['return'][number];\n export type _____Identifiers = SearchRailQuery['searchRail']['results'][number]['return'][number]['identifiers'];\n export type _Travellers = SearchRailQuery['searchRail']['results'][number]['return'][number]['travellers'][number];\n export type __Segments = SearchRailQuery['searchRail']['results'][number]['return'][number]['segments'][number];\n export type _CallingPoints = SearchRailQuery['searchRail']['results'][number]['return'][number]['segments'][number]['callingPoints'][number];\n export type _Providers = SearchRailQuery['searchRail']['results'][number]['return'][number]['providers'][number];\n export type _CheapestTicket = SearchRailQuery['searchRail']['results'][number]['return'][number]['providers'][number]['cheapestTicket'];\n export type ______Identifiers = SearchRailQuery['searchRail']['results'][number]['return'][number]['providers'][number]['cheapestTicket']['identifiers'];\n export type ___Terms = SearchRailQuery['searchRail']['results'][number]['return'][number]['providers'][number]['cheapestTicket']['terms'];\n export type _DynamicConditions = SearchRailQuery['searchRail']['results'][number]['return'][number]['providers'][number]['cheapestTicket']['terms']['dynamicConditions'][number];\n export type ___Tickets = SearchRailQuery['searchRail']['results'][number]['return'][number]['providers'][number]['cheapestTicket']['tickets'][number];\n export type ___Segments = SearchRailQuery['searchRail']['results'][number]['return'][number]['providers'][number]['cheapestTicket']['tickets'][number]['segments'][number];\n export type ___TicketQueueList = SearchRailQuery['searchRail']['results'][number]['return'][number]['providers'][number]['cheapestTicket']['ticketQueueList'][number];\n export type ___AccountsList = SearchRailQuery['searchRail']['results'][number]['return'][number]['providers'][number]['cheapestTicket']['accountsList'][number];\n export type _TicketOptions = SearchRailQuery['searchRail']['results'][number]['return'][number]['providers'][number]['ticketOptions'][number];\n export type _______Identifiers = SearchRailQuery['searchRail']['results'][number]['return'][number]['providers'][number]['ticketOptions'][number]['identifiers'];\n export type _AllowedWith = SearchRailQuery['searchRail']['results'][number]['return'][number]['providers'][number]['ticketOptions'][number]['identifiers']['allowedWith'][number];\n export type ____Terms = SearchRailQuery['searchRail']['results'][number]['return'][number]['providers'][number]['ticketOptions'][number]['terms'];\n export type ____Tickets = SearchRailQuery['searchRail']['results'][number]['return'][number]['providers'][number]['ticketOptions'][number]['tickets'][number];\n export type ____TicketQueueList = SearchRailQuery['searchRail']['results'][number]['return'][number]['providers'][number]['ticketOptions'][number]['ticketQueueList'][number];\n export type ____AccountsList = SearchRailQuery['searchRail']['results'][number]['return'][number]['providers'][number]['ticketOptions'][number]['accountsList'][number];\n export type _BookedTicket = SearchRailQuery['searchRail']['results'][number]['return'][number]['providers'][number]['bookedTicket'];\n export type ________Identifiers = SearchRailQuery['searchRail']['results'][number]['return'][number]['providers'][number]['bookedTicket']['identifiers'];\n export type _____Terms = SearchRailQuery['searchRail']['results'][number]['return'][number]['providers'][number]['bookedTicket']['terms'];\n export type _____Tickets = SearchRailQuery['searchRail']['results'][number]['return'][number]['providers'][number]['bookedTicket']['tickets'][number];\n export type _____TicketQueueList = SearchRailQuery['searchRail']['results'][number]['return'][number]['providers'][number]['bookedTicket']['ticketQueueList'][number];\n export type _____AccountsList = SearchRailQuery['searchRail']['results'][number]['return'][number]['providers'][number]['bookedTicket']['accountsList'][number];\n export type _TicketExtras = SearchRailQuery['searchRail']['results'][number]['return'][number]['ticketExtras'][number];\n export type _PlusBus = SearchRailQuery['searchRail']['results'][number]['return'][number]['plusBus'];\n export type Errors = SearchRailQuery['searchRail']['errors'][number];\n}\n\nexport namespace SaveRecentSearch {\n export type Variables = SaveRecentSearchMutationVariables;\n export type Mutation = SaveRecentSearchMutation;\n export type SaveRecentSearch = SaveRecentSearchMutation['saveRecentSearch'][number];\n}\n\nexport namespace SaveUserAddress {\n export type Variables = SaveUserAddressMutationVariables;\n export type Mutation = SaveUserAddressMutation;\n export type SaveUserAddress = SaveUserAddressMutation['saveUserAddress'];\n}\n\nexport namespace SearchAirlines {\n export type Variables = SearchAirlinesQueryVariables;\n export type Query = SearchAirlinesQuery;\n export type SearchAirlines = SearchAirlinesQuery['searchAirlines'];\n export type IataMatch = SearchAirlinesQuery['searchAirlines']['iataMatch'];\n export type GeneralMatches = SearchAirlinesQuery['searchAirlines']['generalMatches'][number];\n}\n\nexport namespace SearchCities {\n export type Variables = SearchCitiesQueryVariables;\n export type Query = SearchCitiesQuery;\n export type SearchCities = SearchCitiesQuery['searchCities'][number];\n export type Coordinates = SearchCitiesQuery['searchCities'][number]['coordinates'];\n}\n\nexport namespace SearchConfermaCities {\n export type Variables = SearchConfermaCitiesQueryVariables;\n export type Query = SearchConfermaCitiesQuery;\n export type SearchConfermaCities = SearchConfermaCitiesQuery['searchConfermaCities'];\n export type Suggestions = SearchConfermaCitiesQuery['searchConfermaCities']['suggestions'][number];\n}\n\nexport namespace SearchEurostar {\n export type Variables = SearchEurostarQueryVariables;\n export type Query = SearchEurostarQuery;\n export type SearchEurostar = SearchEurostarQuery['searchEurostar'];\n export type Results = SearchEurostarQuery['searchEurostar']['results'];\n export type Journeys = SearchEurostarQuery['searchEurostar']['results']['journeys'][number];\n export type OutboundFlights = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['outboundFlights'][number];\n export type FareInfo = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['outboundFlights'][number]['fareInfo'];\n export type OriginAirportDetail = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['outboundFlights'][number]['originAirportDetail'];\n export type DestinationAirportDetail = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['outboundFlights'][number]['destinationAirportDetail'];\n export type MarketingCarrierDetail = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['outboundFlights'][number]['marketingCarrierDetail'];\n export type OperatingCarrierDetail = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['outboundFlights'][number]['operatingCarrierDetail'];\n export type FareConditions = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['outboundFlights'][number]['fareConditions'];\n export type Cancellation = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['outboundFlights'][number]['fareConditions']['cancellation'][number];\n export type Change = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['outboundFlights'][number]['fareConditions']['change'][number];\n export type NoShow = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['outboundFlights'][number]['fareConditions']['noShow'][number];\n export type Upgrade = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['outboundFlights'][number]['fareConditions']['upgrade'][number];\n export type Other = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['outboundFlights'][number]['fareConditions']['other'][number];\n export type InboundFlights = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['inboundFlights'][number];\n export type _FareInfo = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['inboundFlights'][number]['fareInfo'];\n export type _OriginAirportDetail = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['inboundFlights'][number]['originAirportDetail'];\n export type _DestinationAirportDetail = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['inboundFlights'][number]['destinationAirportDetail'];\n export type _MarketingCarrierDetail = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['inboundFlights'][number]['marketingCarrierDetail'];\n export type _OperatingCarrierDetail = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['inboundFlights'][number]['operatingCarrierDetail'];\n export type _FareConditions = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['inboundFlights'][number]['fareConditions'];\n export type _Cancellation = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['inboundFlights'][number]['fareConditions']['cancellation'][number];\n export type _Change = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['inboundFlights'][number]['fareConditions']['change'][number];\n export type _NoShow = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['inboundFlights'][number]['fareConditions']['noShow'][number];\n export type _Upgrade = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['inboundFlights'][number]['fareConditions']['upgrade'][number];\n export type _Other = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['inboundFlights'][number]['fareConditions']['other'][number];\n export type OutboundCarbonEmissions = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['outboundCarbonEmissions'];\n export type InboundCarbonEmissions = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['inboundCarbonEmissions'];\n export type Taxes = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['taxes'][number];\n export type Discounts = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['discounts'][number];\n export type Total = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['total'];\n export type __FareConditions = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['fareConditions'];\n export type __Cancellation = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['fareConditions']['cancellation'][number];\n export type __Change = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['fareConditions']['change'][number];\n export type __NoShow = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['fareConditions']['noShow'][number];\n export type __Upgrade = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['fareConditions']['upgrade'][number];\n export type __Other = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['fareConditions']['other'][number];\n export type BaggageAllowance = SearchEurostarQuery['searchEurostar']['results']['journeys'][number]['baggageAllowance'][number];\n export type Multi = SearchEurostarQuery['searchEurostar']['results']['multi'][number];\n export type _Results = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number];\n export type _OutboundFlights = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['outboundFlights'][number];\n export type __FareInfo = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['outboundFlights'][number]['fareInfo'];\n export type __OriginAirportDetail = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['outboundFlights'][number]['originAirportDetail'];\n export type __DestinationAirportDetail = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['outboundFlights'][number]['destinationAirportDetail'];\n export type __MarketingCarrierDetail = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['outboundFlights'][number]['marketingCarrierDetail'];\n export type __OperatingCarrierDetail = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['outboundFlights'][number]['operatingCarrierDetail'];\n export type ___FareConditions = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['outboundFlights'][number]['fareConditions'];\n export type ___Cancellation = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['outboundFlights'][number]['fareConditions']['cancellation'][number];\n export type ___Change = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['outboundFlights'][number]['fareConditions']['change'][number];\n export type ___NoShow = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['outboundFlights'][number]['fareConditions']['noShow'][number];\n export type ___Upgrade = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['outboundFlights'][number]['fareConditions']['upgrade'][number];\n export type ___Other = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['outboundFlights'][number]['fareConditions']['other'][number];\n export type _InboundFlights = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['inboundFlights'][number];\n export type ___FareInfo = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['inboundFlights'][number]['fareInfo'];\n export type ___OriginAirportDetail = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['inboundFlights'][number]['originAirportDetail'];\n export type ___DestinationAirportDetail = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['inboundFlights'][number]['destinationAirportDetail'];\n export type ___MarketingCarrierDetail = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['inboundFlights'][number]['marketingCarrierDetail'];\n export type ___OperatingCarrierDetail = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['inboundFlights'][number]['operatingCarrierDetail'];\n export type ____FareConditions = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['inboundFlights'][number]['fareConditions'];\n export type ____Cancellation = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['inboundFlights'][number]['fareConditions']['cancellation'][number];\n export type ____Change = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['inboundFlights'][number]['fareConditions']['change'][number];\n export type ____NoShow = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['inboundFlights'][number]['fareConditions']['noShow'][number];\n export type ____Upgrade = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['inboundFlights'][number]['fareConditions']['upgrade'][number];\n export type ____Other = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['inboundFlights'][number]['fareConditions']['other'][number];\n export type _OutboundCarbonEmissions = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['outboundCarbonEmissions'];\n export type _InboundCarbonEmissions = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['inboundCarbonEmissions'];\n export type _Taxes = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['taxes'][number];\n export type _Discounts = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['discounts'][number];\n export type _Total = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['total'];\n export type _____FareConditions = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['fareConditions'];\n export type _____Cancellation = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['fareConditions']['cancellation'][number];\n export type _____Change = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['fareConditions']['change'][number];\n export type _____NoShow = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['fareConditions']['noShow'][number];\n export type _____Upgrade = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['fareConditions']['upgrade'][number];\n export type _____Other = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['fareConditions']['other'][number];\n export type _BaggageAllowance = SearchEurostarQuery['searchEurostar']['results']['multi'][number]['results'][number]['baggageAllowance'][number];\n export type Grouped = SearchEurostarQuery['searchEurostar']['results']['grouped'][number];\n export type Flights = SearchEurostarQuery['searchEurostar']['results']['grouped'][number]['flights'];\n export type Errors = SearchEurostarQuery['searchEurostar']['errors'][number];\n}\n\nexport namespace SearchHotelChains {\n export type Variables = SearchHotelChainsQueryVariables;\n export type Query = SearchHotelChainsQuery;\n}\n\nexport namespace SearchIrl {\n export type Variables = SearchIrlQueryVariables;\n export type Query = SearchIrlQuery;\n export type SearchIrl = SearchIrlQuery['searchIRL'];\n export type Results = SearchIrlQuery['searchIRL']['results'][number];\n export type Outbound = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number];\n export type Identifiers = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['identifiers'];\n export type Travellers = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['travellers'][number];\n export type Segments = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['segments'][number];\n export type SeatPreferenceTypes = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['segments'][number]['seatPreferenceTypes'][number];\n export type Seats = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['segments'][number]['seats'][number];\n export type Providers = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['providers'][number];\n export type CheapestTicket = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['providers'][number]['cheapestTicket'];\n export type _Identifiers = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['providers'][number]['cheapestTicket']['identifiers'];\n export type Tickets = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['providers'][number]['cheapestTicket']['tickets'][number];\n export type _Segments = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['providers'][number]['cheapestTicket']['tickets'][number]['segments'][number];\n export type _SeatPreferenceTypes = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['providers'][number]['cheapestTicket']['tickets'][number]['segments'][number]['seatPreferenceTypes'][number];\n export type _Seats = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['providers'][number]['cheapestTicket']['tickets'][number]['segments'][number]['seats'][number];\n export type TicketOptions = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['providers'][number]['ticketOptions'][number];\n export type __Identifiers = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['providers'][number]['ticketOptions'][number]['identifiers'];\n export type _Tickets = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['providers'][number]['ticketOptions'][number]['tickets'][number];\n export type __Segments = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['providers'][number]['ticketOptions'][number]['tickets'][number]['segments'][number];\n export type __SeatPreferenceTypes = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['providers'][number]['ticketOptions'][number]['tickets'][number]['segments'][number]['seatPreferenceTypes'][number];\n export type __Seats = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['providers'][number]['ticketOptions'][number]['tickets'][number]['segments'][number]['seats'][number];\n export type BookedTicket = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['providers'][number]['bookedTicket'];\n export type ___Identifiers = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['providers'][number]['bookedTicket']['identifiers'];\n export type __Tickets = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['providers'][number]['bookedTicket']['tickets'][number];\n export type ___Segments = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['providers'][number]['bookedTicket']['tickets'][number]['segments'][number];\n export type ___SeatPreferenceTypes = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['providers'][number]['bookedTicket']['tickets'][number]['segments'][number]['seatPreferenceTypes'][number];\n export type ___Seats = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['providers'][number]['bookedTicket']['tickets'][number]['segments'][number]['seats'][number];\n export type TicketExtras = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['ticketExtras'][number];\n export type ____Identifiers = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['ticketExtras'][number]['identifiers'];\n export type PlusBus = SearchIrlQuery['searchIRL']['results'][number]['outbound'][number]['plusBus'];\n export type Return = SearchIrlQuery['searchIRL']['results'][number]['return'][number];\n export type _____Identifiers = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['identifiers'];\n export type _Travellers = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['travellers'][number];\n export type ____Segments = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['segments'][number];\n export type ____SeatPreferenceTypes = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['segments'][number]['seatPreferenceTypes'][number];\n export type ____Seats = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['segments'][number]['seats'][number];\n export type _Providers = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['providers'][number];\n export type _CheapestTicket = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['providers'][number]['cheapestTicket'];\n export type ______Identifiers = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['providers'][number]['cheapestTicket']['identifiers'];\n export type ___Tickets = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['providers'][number]['cheapestTicket']['tickets'][number];\n export type _____Segments = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['providers'][number]['cheapestTicket']['tickets'][number]['segments'][number];\n export type _____SeatPreferenceTypes = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['providers'][number]['cheapestTicket']['tickets'][number]['segments'][number]['seatPreferenceTypes'][number];\n export type _____Seats = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['providers'][number]['cheapestTicket']['tickets'][number]['segments'][number]['seats'][number];\n export type _TicketOptions = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['providers'][number]['ticketOptions'][number];\n export type _______Identifiers = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['providers'][number]['ticketOptions'][number]['identifiers'];\n export type ____Tickets = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['providers'][number]['ticketOptions'][number]['tickets'][number];\n export type ______Segments = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['providers'][number]['ticketOptions'][number]['tickets'][number]['segments'][number];\n export type ______SeatPreferenceTypes = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['providers'][number]['ticketOptions'][number]['tickets'][number]['segments'][number]['seatPreferenceTypes'][number];\n export type ______Seats = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['providers'][number]['ticketOptions'][number]['tickets'][number]['segments'][number]['seats'][number];\n export type _BookedTicket = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['providers'][number]['bookedTicket'];\n export type ________Identifiers = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['providers'][number]['bookedTicket']['identifiers'];\n export type _____Tickets = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['providers'][number]['bookedTicket']['tickets'][number];\n export type _______Segments = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['providers'][number]['bookedTicket']['tickets'][number]['segments'][number];\n export type _______SeatPreferenceTypes = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['providers'][number]['bookedTicket']['tickets'][number]['segments'][number]['seatPreferenceTypes'][number];\n export type _______Seats = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['providers'][number]['bookedTicket']['tickets'][number]['segments'][number]['seats'][number];\n export type _TicketExtras = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['ticketExtras'][number];\n export type _________Identifiers = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['ticketExtras'][number]['identifiers'];\n export type _PlusBus = SearchIrlQuery['searchIRL']['results'][number]['return'][number]['plusBus'];\n export type Errors = SearchIrlQuery['searchIRL']['errors'][number];\n}\n\nexport namespace SearchPostcodes {\n export type Variables = SearchPostcodesQueryVariables;\n export type Query = SearchPostcodesQuery;\n export type GetPostcodeDetails = SearchPostcodesQuery['getPostcodeDetails'];\n}\n\nexport namespace SearchRailStations {\n export type Variables = SearchRailStationsQueryVariables;\n export type Query = SearchRailStationsQuery;\n export type SearchRailStations = SearchRailStationsQuery['searchRailStations'][number];\n export type LocationDetails = SearchRailStationsQuery['searchRailStations'][number]['locationDetails'];\n export type Coordinates = SearchRailStationsQuery['searchRailStations'][number]['locationDetails']['coordinates'];\n}\n\nexport namespace SearchUserAddress {\n export type Variables = SearchUserAddressQueryVariables;\n export type Query = SearchUserAddressQuery;\n export type GetUserAddresses = SearchUserAddressQuery['getUserAddresses'][number];\n}\n\nexport namespace SetBasketItemMiGroup {\n export type Variables = SetBasketItemMiGroupMutationVariables;\n export type Mutation = SetBasketItemMiGroupMutation;\n export type SetBasketItemMiGroup = SetBasketItemMiGroupMutation['setBasketItemMIGroup'];\n}\n\nexport namespace SetBasketItemLeadPassenger {\n export type Variables = SetBasketItemLeadPassengerMutationVariables;\n export type Mutation = SetBasketItemLeadPassengerMutation;\n export type SetBasketItemLeadPassenger = SetBasketItemLeadPassengerMutation['setBasketItemLeadPassenger'];\n}\n\nexport namespace SetBasketItemMiValue {\n export type Variables = SetBasketItemMiValueMutationVariables;\n export type Mutation = SetBasketItemMiValueMutation;\n export type SetBasketItemMiValue = SetBasketItemMiValueMutation['setBasketItemMIValue'];\n}\n\nexport namespace SetBasketItemPaymentMethod {\n export type Variables = SetBasketItemPaymentMethodMutationVariables;\n export type Mutation = SetBasketItemPaymentMethodMutation;\n export type SetBasketItemPaymentMethod = SetBasketItemPaymentMethodMutation['setBasketItemPaymentMethod'];\n}\n\nexport namespace UpdateBasketNotes {\n export type Variables = UpdateBasketNotesMutationVariables;\n export type Mutation = UpdateBasketNotesMutation;\n export type UpdateBasketNotes = UpdateBasketNotesMutation['updateBasketNotes'];\n}\n\nexport namespace UpdateBasketTitle {\n export type Variables = UpdateBasketTitleMutationVariables;\n export type Mutation = UpdateBasketTitleMutation;\n export type UpdateBasketTitle = UpdateBasketTitleMutation['updateBasketTitle'];\n}\n\nexport namespace UserFields {\n export type Fragment = UserFieldsFragment;\n export type SelectedLanguage = UserFieldsFragment['selectedLanguage'];\n export type AvailableLanguages = UserFieldsFragment['availableLanguages'][number];\n export type Passports = UserFieldsFragment['passports'][number];\n export type Addresses = UserFieldsFragment['addresses'][number];\n export type PhoneNumbers = UserFieldsFragment['phoneNumbers'][number];\n}\n\nexport namespace GetUserServices {\n export type Variables = GetUserServicesQueryVariables;\n export type Query = GetUserServicesQuery;\n export type GetUserServices = GetUserServicesQuery['getUserServices'][number];\n}\n\nexport namespace GetUserUiConfigs {\n export type Variables = GetUserUiConfigsQueryVariables;\n export type Query = GetUserUiConfigsQuery;\n export type GetUserUiConfigs = GetUserUiConfigsQuery['getUserUIConfigs'];\n export type All = GetUserUiConfigsQuery['getUserUIConfigs']['all'][number];\n}\n\nexport namespace GetUserMessages {\n export type Variables = GetUserMessagesQueryVariables;\n export type Query = GetUserMessagesQuery;\n export type GetUserMessages = GetUserMessagesQuery['getUserMessages'][number];\n}\n\nexport namespace GetUserPhoneNumbers {\n export type Variables = GetUserPhoneNumbersQueryVariables;\n export type Query = GetUserPhoneNumbersQuery;\n export type GetUserPhoneNumbers = GetUserPhoneNumbersQuery['getUserPhoneNumbers'][number];\n}\n\nexport namespace SetUserLanguage {\n export type Variables = SetUserLanguageMutationVariables;\n export type Mutation = SetUserLanguageMutation;\n export type SetUserLanguage = SetUserLanguageMutation['setUserLanguage'];\n export type SelectedLanguage = SetUserLanguageMutation['setUserLanguage']['selectedLanguage'];\n}\n\nexport namespace GetUser {\n export type Variables = GetUserQueryVariables;\n export type Query = GetUserQuery;\n export type GetUser = GetUserQuery['getUser'];\n}\n\nexport namespace SearchUserCanBookFor {\n export type Variables = SearchUserCanBookForQueryVariables;\n export type Query = SearchUserCanBookForQuery;\n export type SearchUserCanBookFor = SearchUserCanBookForQuery['searchUserCanBookFor'][number];\n}\n\nexport namespace ValidateUserMiFreeValue {\n export type Variables = ValidateUserMiFreeValueQueryVariables;\n export type Query = ValidateUserMiFreeValueQuery;\n}\n","import { ValidationErrors } from '../types/types';\r\n\r\nexport abstract class ValidatorChecker {\r\n constructor() {}\r\n abstract isValid(): boolean;\r\n abstract hasErrors(value: string): Promise<ValidationErrors>;\r\n}\r\n","import {\r\n SearchIrl,\r\n SearchEurostar,\r\n GetMultipleHotelsAvailability,\r\n GetUser,\r\n GetUserBasket,\r\n GetUserBaskets,\r\n GetUserMessagesQuery,\r\n GetUserMiAutoSuggestValues,\r\n GetUserServicesQuery,\r\n GetUserUiConfigsQuery,\r\n Query,\r\n HotelRoom,\r\n SaveUserAddressMutation,\r\n SearchAirports,\r\n SearchCabHire,\r\n SearchCarHire,\r\n SearchCitiesQuery,\r\n SearchFlightsV2,\r\n SearchHotels,\r\n SearchLounges,\r\n SearchParking,\r\n SearchPostcodesQuery,\r\n SearchRail,\r\n SearchRailStationsQuery,\r\n SearchUserCanBookFor,\r\n SendBasketForApprovalMutation,\r\n CarHireDepotResult,\r\n Address,\r\n Office,\r\n GetRiskAlertsQuery,\r\n FlightCabinClass,\r\n FlightItinerary,\r\n FlightFareTotal,\r\n SearchAirlines,\r\n FlightJourney,\r\n HotelSearchResult,\r\n HotelItinerary,\r\n SearchError,\r\n GetUserRecentSearches,\r\n ServiceType,\r\n SearchConfermaCities,\r\n SaveRecentSearchMutation\r\n} from './graphql.types';\r\n\r\nexport type HotelSearchResultArray = {\r\n results?: HotelItinerary[];\r\n errors?: SearchError[];\r\n};\r\nexport enum LogoutEnum {\r\n LOGOUT,\r\n STAYIN\r\n}\r\n\r\nexport type RecursivePartial<T> = { [P in keyof T]?: RecursivePartial<T[P]> };\r\n\r\nexport interface NgbDateStruct {\r\n day: number;\r\n month: number;\r\n year: number;\r\n}\r\n\r\nexport interface Vendor {\r\n code: string;\r\n name: string;\r\n}\r\n\r\nexport type CountryCode = string;\r\n\r\nexport enum LocationTypes {\r\n City = 'City',\r\n Office = 'Office',\r\n Airport = 'Airport',\r\n TrainStation = 'Train Station',\r\n Postcode = 'Postcode',\r\n Shortlist = 'Shortlist'\r\n}\r\n\r\nexport interface LocationDetails {\r\n name: string;\r\n type: LocationTypes;\r\n key?: string;\r\n airport?: OBTAirportDetails;\r\n country?: string;\r\n latitude?: number;\r\n longitude?: number;\r\n countryCode?: string;\r\n id?: string | number;\r\n office?: Address;\r\n stationCode?: string;\r\n}\r\n\r\nexport interface Country {\r\n cCode: string;\r\n cName: string;\r\n}\r\n\r\nexport type Unpacked<T> = T extends (infer U)[] ? U : T;\r\n\r\nexport interface RailAirport {\r\n destination: string;\r\n isairport: 0 | 1;\r\n supplier_code: string;\r\n postcode?: string;\r\n}\r\n\r\nexport interface AddressForm {\r\n ID?: number;\r\n House?: string;\r\n Street?: string;\r\n Town?: string;\r\n PostCode?: string;\r\n Country?: string;\r\n placeDescription?: any;\r\n Terminal?: string;\r\n}\r\n\r\nexport enum BreatfastTypes {\r\n BreakfastIncluded = 'BreakfastIncluded',\r\n BreakfastNotIncluded = 'BreakfastNotIncluded'\r\n}\r\n\r\nexport enum HotelPolicyEnum {\r\n cancellation = 'cancellation',\r\n deposit = 'deposit',\r\n disabledAccess = 'disabledAccess',\r\n general = 'general',\r\n guarantee = 'guarantee',\r\n refundAvailable = 'refundAvailable'\r\n}\r\n\r\nexport interface GeoLocationMarker {\r\n Latitude: number;\r\n Longitude: number;\r\n office: boolean;\r\n label: {\r\n color: string;\r\n fontWeight: string;\r\n fontSize: string;\r\n text: string;\r\n };\r\n iconUrl: string;\r\n}\r\n\r\nexport interface OBTAirportDetails {\r\n destination: string;\r\n gateway: string;\r\n terminals: TerminalsType[];\r\n country: string;\r\n postcode: string;\r\n countryCode?: string;\r\n}\r\n\r\nexport interface OBTAirlinesDetails {\r\n code: string;\r\n name: string;\r\n}\r\n\r\nexport enum BookingStatus {\r\n Loading,\r\n AddingItems,\r\n AddingTravellers,\r\n AddingLeadPassenger,\r\n Failed,\r\n Revalidate,\r\n RevalidatingError,\r\n ChooseMIGroup,\r\n ProvideMi,\r\n SendForApproval,\r\n AwaitingApproval,\r\n ApprovedPaymentOption,\r\n ApprovedSupplemtal,\r\n ApprovedBook,\r\n PartiallyBooked,\r\n Complete\r\n}\r\n\r\nexport type BasketUserArray =\r\n GetUserBasket.Query['getUserBasket']['basketItems'][number]['users'];\r\nexport type BasketUser = Unpacked<BasketUserArray>;\r\n\r\nexport type RailQuoteResultArray = SearchRail.Query['searchRail']['results'];\r\nexport type RailQuoteResult = Unpacked<RailQuoteResultArray>;\r\nexport type RailcardResult = Query['getRailcards'];\r\n\r\nexport type IrlQuoteResultArray = SearchIrl.Query['searchIRL']['results'];\r\nexport type IrlQuoteResult = Unpacked<RailQuoteResultArray>;\r\n\r\nexport type GetMiAutoSugestionArray =\r\n GetUserMiAutoSuggestValues.Query['getUserMIAutoSuggestValues'];\r\nexport type GetMiAutoSugestion = Unpacked<GetMiAutoSugestionArray>;\r\n\r\nexport type ValidationErrors = { [key: string]: any };\r\n\r\nexport interface TerminalsType {\r\n key: string;\r\n value: string;\r\n}\r\n\r\nexport interface MinMax {\r\n min: number;\r\n max: number;\r\n}\r\n\r\nexport type SchemaType =\r\n | 'integer'\r\n | 'object'\r\n | 'string'\r\n | 'array'\r\n | { enum: string[] | number[] };\r\n\r\nexport enum SchemaFormat {\r\n array = 'array',\r\n datetime = 'date-time',\r\n integer = 'integer',\r\n object = 'object',\r\n select = 'select',\r\n string = 'string',\r\n boolean = 'boolean',\r\n countryCode = 'countryCode'\r\n}\r\n\r\nexport enum Widgets {\r\n COUNTRY_CODE = 'COUNTRY_CODE'\r\n}\r\n\r\nexport interface SchemaOption {\r\n const: string;\r\n enum: string[];\r\n title: string;\r\n}\r\n\r\nexport interface Schema {\r\n $schema?: string;\r\n $id?: string;\r\n title?: string;\r\n description?: string;\r\n additionalProperties?: false;\r\n properties?: { [key: string]: Schema };\r\n required?: string[];\r\n format?: SchemaFormat;\r\n type: SchemaType;\r\n exclusiveMinimum?: number;\r\n items?: Schema[];\r\n minItems?: number;\r\n uniqueItems?: boolean;\r\n allOf?: SchemaOption[];\r\n anyOf?: SchemaOption[];\r\n oneOf?: SchemaOption[];\r\n not?: SchemaOption[];\r\n widget?: string;\r\n}\r\n\r\nexport type GetUserBasketResult = GetUserBasket.Query['getUserBasket'];\r\nexport type GetUserBasketItemResult =\r\n GetUserBasket.Query['getUserBasket']['basketItems'][number];\r\n\r\nexport type CabhireQuoteResultArray =\r\n SearchCabHire.Query['searchCabHire']['results'];\r\nexport type CabhireQuoteResult = Unpacked<CabhireQuoteResultArray>;\r\n\r\nexport type CarHireQuoteResultArray =\r\n SearchCarHire.Query['searchCarHire']['results'];\r\nexport type CarHireQuoteResult = Unpacked<CarHireQuoteResultArray>;\r\n\r\nexport type UserBasketResultArray = GetUserBaskets.Query['getUserBaskets'];\r\nexport type UserBasketResult = Unpacked<UserBasketResultArray>;\r\n\r\nexport type GetUserRecentSearchesResultArray =\r\n GetUserRecentSearches.Query['getUserRecentSearches'];\r\nexport type GetUserRecentSearchesResult =\r\n Unpacked<GetUserRecentSearchesResultArray>;\r\n\r\nexport type CurrencyDetails = {\r\n [key: string]: {\r\n // in CurrencyCode\r\n minprice: number;\r\n maxprice: number;\r\n };\r\n};\r\n\r\nexport type FlightAllQuoteResult =\r\n SearchFlightsV2.Query['searchFlightsV2']['results'] & {\r\n journeys: FlightItineraryWithSelected;\r\n };\r\n\r\nexport type FlightItineraryWithSelected = FlightItinerary & {\r\n selected?: boolean;\r\n canSelect?: boolean;\r\n};\r\n\r\nexport type EurostarQuoteResult =\r\n SearchEurostar.Query['searchEurostar']['results'];\r\n\r\nexport type GroupedFlights =\r\n SearchFlightsV2.Query['searchFlightsV2']['results']['grouped'];\r\nexport interface FlightItineraryClass {\r\n flights: FlightItineraryWithSelected[];\r\n minprice: number;\r\n maxprice: number;\r\n currency: string;\r\n}\r\nexport enum FlightDirectionEnum {\r\n Outbound = 1,\r\n Inbound = 0\r\n}\r\n\r\nexport interface FlightGroupedQuoteResult {\r\n inlegs: FlightJourney[];\r\n outlegs: FlightJourney[];\r\n classes: {\r\n [FlightCabinClass.EconomyNoBags]: FlightItineraryClass;\r\n [FlightCabinClass.EconomyRestricted]: FlightItineraryClass;\r\n [FlightCabinClass.Economy]: FlightItineraryClass;\r\n [FlightCabinClass.Business]: FlightItineraryClass;\r\n [FlightCabinClass.First]: FlightItineraryClass;\r\n [FlightCabinClass.PremiumEconomy]: FlightItineraryClass;\r\n };\r\n direction: FlightDirectionEnum;\r\n originAirport: string;\r\n originAirportName: string;\r\n destinationAirport: string;\r\n destinationAirportName: string;\r\n departDateTime: string;\r\n arrivalDateTime: string;\r\n outboundTotalDuration: number;\r\n inboundTotalDuration: number;\r\n outlegsCount: number;\r\n\r\n inlegsCount: number;\r\n dataSource: string;\r\n preferred: boolean;\r\n outboundFlightNumber: string;\r\n operator: string;\r\n operatorFull: string;\r\n inboundFlightNumber: string;\r\n isReturn: boolean;\r\n}\r\n\r\nexport type EurostarFare = {\r\n class: string;\r\n isDisabled: boolean;\r\n currency: string;\r\n price: number;\r\n fare: FlightJourney;\r\n};\r\nexport interface EurostarItem {\r\n uid: number;\r\n dateArrival: string;\r\n co2PerItem: number;\r\n co2PerPassenger: number;\r\n sourceId: number;\r\n total: FlightFareTotal;\r\n standardFare: EurostarFare;\r\n standardPremierFare: EurostarFare;\r\n businessPremierFare: EurostarFare;\r\n dateDeparture: string;\r\n duration: string;\r\n timeArrival: string;\r\n timeDeparture: string;\r\n}\r\n\r\n// ! ANDI I wrote this to match with what the FE expects (this can be changed)\r\n\r\nexport interface EurostarResults {\r\n outbound: EurostarItem[];\r\n inbound: EurostarItem[];\r\n}\r\nexport type EurostarQuoteResultArray =\r\n | EurostarResults[]\r\n | EurostarQuoteResult[];\r\n\r\nexport type FlightQuoteResultArray =\r\n | FlightGroupedQuoteResult[]\r\n | [FlightAllQuoteResult];\r\n\r\nexport type FlightQuoteResult = Unpacked<FlightQuoteResultArray>;\r\n\r\n/**\r\n * Eurostar preferred class enum\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nexport enum EurostarClassEnum {\r\n ANY = 'Any',\r\n BUSINESS_PREMIER = 'BusinessPremier',\r\n STANDARD_PREMIER = 'StandardPremier',\r\n STANDARD = 'Standard'\r\n}\r\nexport interface EurostarGroupedQuoteResult {\r\n inlegs: FlightJourney[];\r\n outlegs: FlightJourney[];\r\n classes: {\r\n [EurostarClassEnum.STANDARD]: FlightItineraryClass;\r\n [EurostarClassEnum.STANDARD_PREMIER]: FlightItineraryClass;\r\n [EurostarClassEnum.BUSINESS_PREMIER]: FlightItineraryClass;\r\n };\r\n direction: FlightDirectionEnum;\r\n originAirport: string;\r\n originAirportName: string;\r\n destinationAirport: string;\r\n destinationAirportName: string;\r\n departDateTime: string;\r\n arrivalDateTime: string;\r\n outboundTotalDuration: number;\r\n inboundTotalDuration: number;\r\n outlegsCount: number;\r\n\r\n inlegsCount: number;\r\n dataSource: string;\r\n preferred: boolean;\r\n outboundFlightNumber: string;\r\n operator: string;\r\n operatorFull: string;\r\n inboundFlightNumber: string;\r\n isReturn: boolean;\r\n}\r\n\r\nexport type HotelRoomWithLocalPrice = HotelRoom & {\r\n LocalPrice?: number;\r\n LocalCurrency?: string;\r\n};\r\nexport type HotelAvalibilityQuoteResult = Unpacked<\r\n GetMultipleHotelsAvailability.Query['getMultipleHotelsAvailability']['results']\r\n> & {\r\n maxprice?: number;\r\n minprice?: number;\r\n rooms?: HotelRoomWithLocalPrice[];\r\n currencies?: CurrencyDetails;\r\n};\r\n\r\nexport type HotelAvalibilityQuoteResultArray = HotelAvalibilityQuoteResult[];\r\n\r\nexport type HotelAvalibilityQuery = GetMultipleHotelsAvailability.Variables;\r\n\r\nexport type HotelQuoteResult = Unpacked<\r\n SearchHotels.Query['searchHotels']['results']\r\n>;\r\nexport type HotelQuoteResultArray = HotelQuoteResult[];\r\n\r\nexport type LoungeQuoteResultArray =\r\n SearchLounges.Query['searchLounges']['results'];\r\nexport type LoungeQuoteResult = Unpacked<LoungeQuoteResultArray>;\r\n\r\nexport type ParkingQuoteResultArray =\r\n SearchParking.Query['searchParking']['results'];\r\nexport type ParkingQuoteResult = Unpacked<ParkingQuoteResultArray>;\r\n\r\nexport type AirlinesSearchResultArray = SearchAirlines.SearchAirlines;\r\nexport type AirlinesSearchResult = Unpacked<AirlinesSearchResultArray>;\r\n\r\nexport type AirportSearchResultsArray = SearchAirports.SearchAirports;\r\nexport type AirportSearchResults = Unpacked<AirportSearchResultsArray>;\r\n\r\nexport type SearchCitiesResultArray = SearchCitiesQuery['searchCities'];\r\nexport type SearchCitiesResult = Unpacked<SearchCitiesResultArray>;\r\n\r\nexport type SearchConfermaCitiesResultArray =\r\n SearchConfermaCities.SearchConfermaCities;\r\nexport type SearchConfermaCitiesResult =\r\n Unpacked<SearchConfermaCitiesResultArray>;\r\n\r\nexport type CarHireDepotResultArray = CarHireDepotResult['results'];\r\nexport type CarHireDepot = Unpacked<CarHireDepotResultArray>;\r\n\r\nexport type SearchPostcodesResult = SearchPostcodesQuery['getPostcodeDetails'];\r\nexport type SearchPostcodesResultArray = SearchPostcodesResult[];\r\n\r\nexport type GetUserCompanyOfficesResult = Office;\r\nexport type GetUserCompanyOfficesResultArray = GetUserCompanyOfficesResult[];\r\n\r\nexport type SearchHotelChainsResult = string;\r\nexport type SearchHotelChainsResultArray = SearchHotelChainsResult[];\r\n\r\nexport type SearchRailStationsResultArray =\r\n SearchRailStationsQuery['searchRailStations'];\r\nexport type SearchRailStationsResult = Unpacked<SearchRailStationsResultArray>;\r\n\r\nexport type SearchUserCanBookForResult =\r\n SearchUserCanBookFor.Query['searchUserCanBookFor'];\r\n\r\nexport type GetUserResult = GetUser.Query['getUser'];\r\n\r\nexport type GetUserAddressResultArray = GetUserResult['addresses'];\r\nexport type GetUserAddressResult = Unpacked<GetUserAddressResultArray>;\r\nexport type GetUserPhoneNumberResultArray = GetUserResult['phoneNumbers'];\r\nexport type GetUserPhoneNumberResult = Unpacked<GetUserPhoneNumberResultArray>;\r\n\r\nexport type UserMessagesResult = GetUserMessagesQuery['getUserMessages'];\r\n\r\nexport type UserProductsResult = GetUserServicesQuery['getUserServices'];\r\n\r\nexport type UserAddressesResult = Query['getUserAddresses'];\r\n\r\nexport type UserUiConfigsResult =\r\n GetUserUiConfigsQuery['getUserUIConfigs']['all'];\r\n\r\nexport type SendBasketForApprovalResults =\r\n SendBasketForApprovalMutation['sendBasketForApproval'];\r\n\r\nexport type SaveUserAddressResult = SaveUserAddressMutation['saveUserAddress'];\r\n\r\nexport type SaveRecentSearchResult =\r\n SaveRecentSearchMutation['saveRecentSearch'];\r\n\r\nexport type SearchRiskAlertsResultArray = GetRiskAlertsQuery['getRiskAlerts'];\r\nexport type SearchRiskAlertsResult = Unpacked<SearchRiskAlertsResultArray>;\r\n\r\nexport interface Router {\r\n url: string;\r\n navigate(route: string[], options?: { [key: string]: any }): void;\r\n}\r\n\r\nexport interface NgFilterSelect {\r\n // need to the app-filter-select that go2/scion uses\r\n id: string;\r\n text: string;\r\n}\r\n\r\nexport interface ParkingFiltersInterface {\r\n onAirport: string;\r\n meetAndGreet: string;\r\n parkAndRide: string;\r\n parkAndStroll: string;\r\n carParkedForYou: string;\r\n}\r\n\r\nexport type ConfermaOfficeNameResult = Query['getConfermaOfficeNames'];\r\nexport type ConfermaQuicklistResult = Query['getConfermaQuicklist'];\r\n\r\nexport interface KeyValue<K, V> {\r\n key: K;\r\n value: V;\r\n}\r\n\r\nconst BreakFastIncluded = [\r\n 'BREAKFAST INCLUDED',\r\n 'breakfast',\r\n 'BB',\r\n 'B&B',\r\n 'Bead and breakfast',\r\n 'Bed and breakfast',\r\n 'Bed&Break',\r\n 'INCLUDES BREAK',\r\n 'INCL BED AND BRE',\r\n 'BRKFST',\r\n 'BED AND BRKFST'\r\n];\r\n\r\n// Excluded breakfast keywords\r\n\r\nconst BreakBastExcluded = [\r\n 'breakfast not included',\r\n 'breakfast is not included',\r\n \"Breakfast isn't included\",\r\n 'Does not include breakfast',\r\n 'EXCL',\r\n 'exel Breakfast',\r\n 'Breakfast Costs',\r\n 'no breakfast'\r\n];\r\n\r\nconst excludedPattern = '(' + BreakBastExcluded.join(')|(') + ')';\r\nconst includedPattern = '(' + BreakFastIncluded.join(')|(') + ')';\r\nexport const includedExpression = new RegExp(includedPattern, 'i');\r\nexport const excludedExpression = new RegExp(excludedPattern, 'i');\r\n\r\nexport enum SearchHandler {\r\n AVAILABILITY = 'Availability',\r\n FEMALE_FRIENDLY = 'SOLO Female Friendly',\r\n CTM_GREEN_CHOICE = 'CTM Greener Choice',\r\n BREAKFAST_INCLUDED = 'BreakfastIncluded',\r\n BREAKFAST_NOT_INCLUDED = 'BreakfastNotIncluded',\r\n CLIENT = 'Client',\r\n AGENCY = 'Agency',\r\n ANY = 'Any'\r\n}\r\n\r\nexport enum MenuSlideEnum {\r\n IN = 'in',\r\n OUT = 'out',\r\n FLAT = 'flat'\r\n}\r\n\r\nexport enum RiskLevelRanking {\r\n Low = '1',\r\n Moderate = '2',\r\n Medium = '3',\r\n High = '4',\r\n Extreme = '5'\r\n}\r\n\r\n/*\r\n * Filter Keys being used in Lightening\r\n */\r\nexport const filtersKeys = {\r\n chain: 'chain',\r\n preferred: 'preferred',\r\n amenitytype: 'amenitytype',\r\n distanceRange: 'distanceRange',\r\n extra: 'extra',\r\n hotelName: 'hotelName',\r\n priceRange: 'priceRange',\r\n breakfastType: 'breakfastType'\r\n};\r\n\r\nexport interface RecentSearch {\r\n id: string | number;\r\n name: string;\r\n serviceType: ServiceType;\r\n searchArgs: any;\r\n createdAt: string;\r\n updatedAt: string;\r\n travelDate: string;\r\n travellers: any[];\r\n}\r\n\r\nexport enum ServiceProvider {\r\n Confirma = 'Conferma',\r\n Evolvi = 'Evolvi',\r\n SabreCarHire = 'Sabre Car Hire',\r\n Lounges = 'Holiday Extras Lounges',\r\n FastTrack = 'Holiday Extras Fast Track',\r\n Parking = 'Holiday Extras Parking',\r\n CMAC = 'CMAC',\r\n FarelogixLFGNDC = 'Farelogix LFG NDC',\r\n BaNdc = 'BA NDC',\r\n EurostarSabre = 'Eurostar (Sabre)'\r\n}\r\n","import { BehaviorSubject, Observable, of } from 'rxjs';\r\nimport {\r\n debounceTime,\r\n distinctUntilChanged,\r\n switchMap,\r\n tap\r\n} from 'rxjs/operators';\r\nimport { ValidatorChecker } from '../classes/validator.checker';\r\nimport { EnterpriseBasketServiceInterface } from '../interfaces/Ienterprise-basket.service';\r\nimport {\r\n FieldWrapper,\r\n ManagementInfo,\r\n ManagementInfoValue,\r\n Maybe,\r\n Scalars,\r\n SelectedManagementInfoValue,\r\n Service,\r\n UiPresentation\r\n} from '../types/graphql.types';\r\nimport { GetMiAutoSugestionArray, ValidationErrors } from '../types/types';\r\n\r\nexport abstract class ManagementInfoAndIsValid\r\n extends ValidatorChecker\r\n implements ManagementInfo\r\n{\r\n // ManagementInfo interface\r\n agentOnly: FieldWrapper<Scalars['Boolean']>;\r\n createdAt: FieldWrapper<Scalars['DateTime']>;\r\n dbId: FieldWrapper<Scalars['Int']>;\r\n defaultValue?: Maybe<FieldWrapper<ManagementInfoValue>>;\r\n description?: Maybe<FieldWrapper<Scalars['String']>>;\r\n fixed: FieldWrapper<Scalars['Boolean']>;\r\n fixedValue?: Maybe<FieldWrapper<ManagementInfoValue>>;\r\n group?: Maybe<Array<Maybe<FieldWrapper<Scalars['String']>>>>;\r\n handoff: FieldWrapper<Scalars['String']>;\r\n id: FieldWrapper<Scalars['ID']>;\r\n mandatory: FieldWrapper<Scalars['Boolean']>;\r\n name: FieldWrapper<Scalars['String']>;\r\n perBooking: FieldWrapper<Scalars['Boolean']>;\r\n perPassenger: FieldWrapper<Scalars['Boolean']>;\r\n _selectedValues: Array<Maybe<FieldWrapper<SelectedManagementInfoValue>>>;\r\n service: FieldWrapper<Service>;\r\n uiPresentation: FieldWrapper<UiPresentation>;\r\n updatedAt: FieldWrapper<Scalars['DateTime']>;\r\n valueMask?: Maybe<FieldWrapper<Scalars['String']>>;\r\n values: Array<Maybe<FieldWrapper<ManagementInfoValue>>>;\r\n\r\n // extraFields\r\n isLoading: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n avaliableItems: GetMiAutoSugestionArray;\r\n\r\n get selectedValues(): Array<\r\n Maybe<FieldWrapper<SelectedManagementInfoValue>>\r\n > {\r\n return this._selectedValues;\r\n }\r\n\r\n set selectedValues(values: SelectedManagementInfoValue[]) {\r\n if (!Object.is(this._selectedValues, values)) {\r\n this._selectedValues = values;\r\n }\r\n }\r\n get value(): string {\r\n return this.getValue();\r\n }\r\n\r\n set value(val: string) {\r\n this.setValue(val);\r\n }\r\n\r\n protected constructor(managementInfo: ManagementInfo) {\r\n super();\r\n Object.assign(this, managementInfo); // This will automatically call _isValid()\r\n }\r\n\r\n isValid(): boolean {\r\n return !this.mandatory || this.selectedValues.length !== 0;\r\n }\r\n\r\n hasErrors(value: string): Promise<ValidationErrors> {\r\n return new Promise((resolve, reject) => {\r\n resolve(\r\n this.mandatory && (!value || value.length === 0)\r\n ? { hasErrors: true }\r\n : null\r\n );\r\n });\r\n }\r\n\r\n abstract getValue(): string;\r\n abstract setValue(val: string): void;\r\n search = (terms: Observable<string>): Observable<GetMiAutoSugestionArray> => {\r\n return of([]);\r\n };\r\n\r\n abstract save(basketid: string, userId?: string): void;\r\n}\r\n\r\nclass FreeTextManagementInfo extends ManagementInfoAndIsValid {\r\n tempValue: string;\r\n constructor(\r\n managementInfo: ManagementInfo,\r\n private basketService: EnterpriseBasketServiceInterface\r\n ) {\r\n super(managementInfo);\r\n this.tempValue = this.selectedValues\r\n ? this.selectedValues[0]?.freeValue || ''\r\n : '';\r\n }\r\n getValue(): string {\r\n return this.tempValue;\r\n }\r\n setValue(val: string): void {\r\n if (this.tempValue === val) {\r\n return;\r\n }\r\n this.tempValue = val;\r\n\r\n this.selectedValues = [\r\n {\r\n freeValue: val,\r\n basketLevelValue: this.perBooking,\r\n userLevelValue: this.perPassenger\r\n }\r\n ];\r\n }\r\n\r\n save(basketid: string, userId?: string) {\r\n this.basketService.setMiFreeValue(\r\n basketid,\r\n this,\r\n this.selectedValues[0] ? this.selectedValues[0].freeValue : '',\r\n userId\r\n );\r\n }\r\n\r\n hasErrors(value: string): Promise<ValidationErrors> {\r\n return new Promise((resolve, reject) => {\r\n if (this.mandatory && (!value || value.length === 0)) {\r\n resolve({ hasErrors: true });\r\n }\r\n if (this.valueMask && !!value) {\r\n return this.basketService\r\n .validateFreeValeMi(this, value)\r\n .then((result: boolean) => {\r\n resolve(result ? null : { hasErrors: true });\r\n });\r\n } else if (this.values.length > 0) {\r\n resolve(\r\n !!this.values.find((miv: ManagementInfoValue) => {\r\n return miv.value === value;\r\n })\r\n ? null\r\n : { hasErrors: true }\r\n );\r\n } else {\r\n resolve(super.hasErrors(value));\r\n }\r\n });\r\n }\r\n}\r\n\r\nclass AutoSugestManagementInfo extends ManagementInfoAndIsValid {\r\n constructor(\r\n managementInfo: ManagementInfo,\r\n private basketService: EnterpriseBasketServiceInterface\r\n ) {\r\n super(managementInfo);\r\n if (this.values?.length > 0) {\r\n this.avaliableItems = this.values;\r\n }\r\n }\r\n getValue(): string {\r\n return this.selectedValues[0] ? this.selectedValues[0].value.id : '__NONE';\r\n }\r\n\r\n async hasErrors(id: string): Promise<ValidationErrors> {\r\n return !this.avaliableItems.find((value1: ManagementInfoValue) => {\r\n return value1.id === id;\r\n })\r\n ? { hasErrors: true }\r\n : null;\r\n }\r\n\r\n setValue(id: string): void {\r\n const value: ManagementInfoValue = this.avaliableItems.find(\r\n (value1: ManagementInfoValue) => {\r\n return value1.id === id;\r\n }\r\n );\r\n if (!!value) {\r\n this.selectedValues = [\r\n {\r\n value: {\r\n id: value.id,\r\n label: value.label,\r\n value: value.value,\r\n default: value.default,\r\n fixed: value.fixed,\r\n agentOnly: value.agentOnly\r\n },\r\n basketLevelValue: this.perBooking,\r\n userLevelValue: this.perPassenger\r\n }\r\n ];\r\n } else {\r\n this.selectedValues = [];\r\n }\r\n }\r\n\r\n search = (terms: Observable<string>): Observable<GetMiAutoSugestionArray> => {\r\n return terms.pipe(\r\n debounceTime(300),\r\n distinctUntilChanged(),\r\n switchMap((term: string) => {\r\n const ob =\r\n term.length > 2\r\n ? this.basketService.getMiAutoSugestions(\r\n this.id,\r\n term,\r\n this.isLoading\r\n )\r\n : of(this.avaliableItems);\r\n\r\n return ob;\r\n }),\r\n tap((sugestions: GetMiAutoSugestionArray) => {\r\n this.avaliableItems = sugestions;\r\n })\r\n );\r\n };\r\n\r\n save(basketid: string, userid?: string) {\r\n this.basketService.setMiSelectedValue(\r\n basketid,\r\n this,\r\n this.selectedValues[0].value.id,\r\n userid\r\n );\r\n }\r\n}\r\n\r\nclass HiddenManagementInfo extends ManagementInfoAndIsValid {\r\n constructor(managementInfo: ManagementInfo) {\r\n super(managementInfo);\r\n }\r\n getValue(): string {\r\n return '';\r\n }\r\n setValue(val: string): void {}\r\n\r\n save(basketid: string, userId?: string) {}\r\n}\r\n\r\nexport const makeManagamentInfo = (\r\n managementInfo: ManagementInfo,\r\n basketService: EnterpriseBasketServiceInterface\r\n): ManagementInfoAndIsValid => {\r\n switch (managementInfo.uiPresentation) {\r\n case UiPresentation.FreeText:\r\n return new FreeTextManagementInfo(managementInfo, basketService);\r\n case UiPresentation.AutoSuggest:\r\n return new AutoSugestManagementInfo(managementInfo, basketService);\r\n case UiPresentation.Hidden:\r\n return new HiddenManagementInfo(managementInfo);\r\n }\r\n return null;\r\n};\r\n","import {\r\n ManagementInfoAndIsValid,\r\n makeManagamentInfo\r\n} from './management-info-and-valid';\r\nimport { BaseHelperRoutines } from './helpers';\r\nimport { BasketItem, ManagementInfo, User } from '../types/graphql.types';\r\nimport { EnterpriseBasketServiceInterface } from '../interfaces/Ienterprise-basket.service';\r\n\r\ninterface UserManagementSupplement {\r\n [key: string]: {\r\n managementInfo: ManagementInfoAndIsValid[];\r\n };\r\n}\r\n\r\nexport class BasketInfoMiDetailsImpl {\r\n miPerItem: ManagementInfoAndIsValid[];\r\n miPerUser: UserManagementSupplement;\r\n users: string[];\r\n basketItem: BasketItem;\r\n isValidObservers: ManagementInfoAndIsValid[] = [];\r\n\r\n constructor(\r\n item: BasketItem,\r\n private basketService: EnterpriseBasketServiceInterface,\r\n private helpers: BaseHelperRoutines\r\n ) {\r\n this.basketItem = item;\r\n const { perItem, perUser } = item.managementInfo.reduce(\r\n (\r\n miAccum: {\r\n perItem: ManagementInfoAndIsValid[];\r\n perUser: ManagementInfoAndIsValid[];\r\n },\r\n miItem: ManagementInfo\r\n ) => {\r\n const miItemObj = makeManagamentInfo(miItem, this.basketService);\r\n this.isValidObservers.push(miItemObj);\r\n\r\n if (miItem.perBooking) {\r\n miAccum.perItem.push(miItemObj);\r\n } else {\r\n miAccum.perUser.push(miItemObj);\r\n }\r\n\r\n return miAccum;\r\n },\r\n { perItem: [], perUser: [] }\r\n );\r\n\r\n this.miPerItem = perItem;\r\n this.miPerUser = item.users.reduce(\r\n (userAccum: UserManagementSupplement, user: User) => {\r\n userAccum[user.id] = {\r\n managementInfo: this.helpers\r\n .clone(perUser)\r\n .map((miItem: ManagementInfo): ManagementInfoAndIsValid => {\r\n const miItemObj = makeManagamentInfo(miItem, this.basketService);\r\n this.isValidObservers.push(miItemObj);\r\n return miItemObj;\r\n })\r\n };\r\n return userAccum;\r\n },\r\n {}\r\n );\r\n this.users = Object.keys(this.miPerUser);\r\n }\r\n}\r\n","import moment from 'moment';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\n\r\nimport {\r\n AddressForm,\r\n CabhireQuoteResultArray,\r\n KeyValue,\r\n NgbDateStruct,\r\n RailAirport\r\n} from '../types/types';\r\nimport {\r\n BasketItem,\r\n CabHireLocation,\r\n LocationDetail,\r\n CabHireQuote,\r\n SearchCabHireQueryVariables,\r\n ServiceType,\r\n CabHireVehicleType\r\n} from '../types/graphql.types';\r\n\r\nimport { BaseEnterpriseSearch } from '../classes/base-enterprise';\r\nimport { ICheapestPrice } from './cheapest-price';\r\n\r\nexport enum TaxiFormMode {\r\n ADDRESS = 'location',\r\n STATION = 'station'\r\n}\r\nexport enum AirportSearchMode {\r\n PICKUP = 'Airport Pick Up',\r\n DROPOFF = 'Airport drop off'\r\n}\r\n\r\nexport interface TransType {\r\n key: CabHireVehicleType;\r\n value: string;\r\n id: number;\r\n}\r\n\r\nexport enum ActionType {\r\n GET = 'get',\r\n SAVE = 'save',\r\n DELETE = 'delete'\r\n}\r\n\r\nexport interface TaxiAirport {\r\n destination: string;\r\n gateway: string;\r\n terminals: string;\r\n supplier_code: string;\r\n}\r\nexport interface TaxiAttribute extends KeyValue<string, string> {\r\n enabled: boolean;\r\n}\r\n\r\nexport interface TaxiAddress {\r\n AddressType: string;\r\n House: string;\r\n Town: string;\r\n PostCode: string;\r\n Street: string;\r\n defaultUser: string;\r\n id: string;\r\n label: string;\r\n action?: ActionType;\r\n isLoading: boolean;\r\n isAirportOrStation: boolean;\r\n Country: string;\r\n placeDescription?: string; // the raw address string - use for stations/ airports\r\n}\r\nexport interface CabHireTempParams {\r\n adults: number;\r\n airport: TaxiAirport;\r\n children: number;\r\n countryCode: string;\r\n departs: moment.Moment;\r\n fromAddress: AddressForm;\r\n fromStation: RailAirport;\r\n fromLocationType: TaxiFormMode;\r\n infants: number;\r\n toAddress: AddressForm;\r\n toStation: RailAirport;\r\n toLocationType: TaxiFormMode;\r\n vehicleType: CabHireVehicleType;\r\n viasFrom: AddressForm;\r\n viasTo: AddressForm;\r\n}\r\nexport interface CabHireEnterpriseSearchInterface\r\n extends BaseEnterpriseSearch<\r\n CabHireTempParams,\r\n CabhireQuoteResultArray,\r\n CabhireQuoteResultArray\r\n >,\r\n CabHireTempParams {\r\n type: ServiceType;\r\n airportChange: Subject<TaxiAirport>;\r\n readonly fromLocation: CabHireLocation;\r\n readonly toLocation: CabHireLocation;\r\n readonly transTypes: TransType[];\r\n readonly attributes: TaxiAttribute[];\r\n readonly searchTypes: string[];\r\n readonly airportSearchTypes: {};\r\n readonly criteria: {};\r\n mode: TaxiFormMode;\r\n airportSearchType: AirportSearchMode;\r\n fromLocationType: TaxiFormMode;\r\n toLocationType: TaxiFormMode;\r\n minSelectDate: moment.Moment;\r\n selectedPlaces: any;\r\n getPassengers: () => string;\r\n date: NgbDateStruct;\r\n searchType: string;\r\n searchCriteria: string;\r\n outboundDateTime: moment.Moment;\r\n returnDateTime: moment.Moment;\r\n flightNumber: string;\r\n airport: TaxiAirport;\r\n terminal: string;\r\n time: string;\r\n departs: moment.Moment;\r\n adults: number;\r\n children: number;\r\n infants: number;\r\n countryCode: string;\r\n vias: CabHireLocation[];\r\n viasFrom: AddressForm;\r\n viasTo: AddressForm;\r\n vehicleType: CabHireVehicleType;\r\n fromAddress: AddressForm;\r\n fromStation: RailAirport;\r\n toAddress: AddressForm;\r\n toStation: RailAirport;\r\n cheapestPrice: ICheapestPrice;\r\n startSearch(): any;\r\n getSearchQuery(): SearchCabHireQueryVariables;\r\n updateOutboundAddress(location: any, placeDescription?: string): void;\r\n updateInboundAddress(location: any, placeDescription?: string): void;\r\n matchAddresses(): void;\r\n sortBy(asc?: boolean): void;\r\n getAddressFormat(\r\n location: any,\r\n placeDescription?: string\r\n ): {\r\n House: string;\r\n Street: string;\r\n Town: string;\r\n PostCode: string;\r\n Country: string;\r\n placeDescription: string;\r\n };\r\n getAddressFromPlaceDetails(placeDetails: any, types: string[]): string;\r\n getAddressFromAirportDetails(\r\n airportDetails: LocationDetail,\r\n airportName: string\r\n ): AddressForm;\r\n setLocationFromAirport(\r\n airportDetails: LocationDetail,\r\n airportName: string\r\n ): void;\r\n addToSelectedPlaces(address: any): void;\r\n setOutboundFormVisibility(showForm: boolean): void;\r\n setInboundFormVisibility(showForm: boolean): void;\r\n getOutboundFormVisibility(): BehaviorSubject<boolean>;\r\n getInboundFormVisibility(): BehaviorSubject<boolean>;\r\n updateFromPreviousSearches(\r\n previousItems: Record<ServiceType, BasketItem>\r\n ): void;\r\n getTransType(): string;\r\n addCabHireToBasket(\r\n cabHireQuote: CabHireQuote,\r\n cabHireQuery: SearchCabHireQueryVariables\r\n ): any;\r\n updateLowestPrice(results: CabHireQuote[]): ICheapestPrice;\r\n resetParams(): void;\r\n}\r\n","import { BehaviorSubject } from 'rxjs';\r\nimport { Traveller } from '../models/traveller.object';\r\nimport {\r\n BasketDetails,\r\n BasketItemManagementInfo,\r\n MiGroupDetail\r\n} from '../services/enterprise-basket.service';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { BookingStatus } from '../types/types';\r\nimport { EnterpriseBasketServiceInterface } from '../interfaces/Ienterprise-basket.service';\r\nimport {\r\n BasketItem,\r\n BasketStatus,\r\n PassengerType,\r\n PaymentMethod,\r\n SupplementaryBookingInfo,\r\n User,\r\n UserPassengerType\r\n} from '../types/graphql.types';\r\n\r\nexport class BookableBasket {\r\n status: BehaviorSubject<BookingStatus> = new BehaviorSubject<BookingStatus>(\r\n BookingStatus.Loading\r\n );\r\n\r\n basket: BehaviorSubject<BasketDetails> = new BehaviorSubject<BasketDetails>(\r\n {} as BasketDetails\r\n );\r\n needsToViewMi: boolean = true;\r\n isUpdating: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n private id: string = null;\r\n constructor(\r\n private basketService: EnterpriseBasketServiceInterface,\r\n private helpers: BaseHelperRoutines\r\n ) {}\r\n\r\n loadBasket(id: string): void {\r\n this.id = id;\r\n this.basket = new BehaviorSubject<BasketDetails>({} as BasketDetails);\r\n this.status.next(BookingStatus.Loading);\r\n this.isUpdating.next(true);\r\n this._loadBasket(id);\r\n }\r\n\r\n /*\r\n Loading,\r\n 0 AddingItems,\r\n 1 AddingTravellers,\r\n 2 AddingLeadPassenger,\r\n 3 Failed,\r\n 4 Revalidate,\r\n 5 RevalidatingError,\r\n 6 RevalidatingAccepted,\r\n 7 ChooseMIGroup,\r\n 8 ProvideMi,\r\n 9 SendForApproval,\r\n 10 AwaitingApproval,\r\n 11 Approved\r\n 12 PartiallyBooked,\r\n 13 Complete\r\n */\r\n\r\n private _loadBasket(id: string): void {\r\n this.basketService.loadBasket(id);\r\n\r\n this.basketService.subsribeToBasket(id, {\r\n next: (basket: BasketDetails) => {\r\n this.basket.next(basket);\r\n this.updateBasket(basket);\r\n },\r\n error: (error: any) => {\r\n this.basket.error(error);\r\n console.error(error);\r\n },\r\n complete: () => {\r\n this.basket.complete();\r\n console.log('Basket completed');\r\n }\r\n });\r\n }\r\n\r\n updateBasket(basket: BasketDetails): void {\r\n this.isUpdating.next(false);\r\n switch (basket.status) {\r\n case BasketStatus.Open:\r\n this.workoutOpenState(basket);\r\n break;\r\n case BasketStatus.AwaitingApproval:\r\n this.status.next(\r\n this.workoutState(basket, BookingStatus.AwaitingApproval)\r\n );\r\n break;\r\n case BasketStatus.Approved:\r\n this.status.next(this.workoutApprovedState(basket));\r\n break;\r\n case BasketStatus.Booked:\r\n this.status.next(this.workoutState(basket, BookingStatus.Complete));\r\n break;\r\n case BasketStatus.BookingFailed:\r\n this.status.next(this.workoutState(basket, BookingStatus.Failed));\r\n break;\r\n case BasketStatus.Disapproved:\r\n this.status.next(BookingStatus.Failed);\r\n break;\r\n case BasketStatus.PartiallyBooked:\r\n this.status.next(BookingStatus.Failed);\r\n break;\r\n default:\r\n const tmp: never = basket.status;\r\n console.log(tmp);\r\n }\r\n }\r\n sendBasketForApproval(): void {\r\n this.basketService.sendBasketForApproval(this.id);\r\n }\r\n\r\n workoutApprovedState(basket: BasketDetails): BookingStatus {\r\n let status = BookingStatus.ApprovedBook;\r\n\r\n if (\r\n !!basket.basketItems.find((basketItem: BasketItem): boolean => {\r\n return (\r\n basketItem.availablePaymentMethods?.length > 0 &&\r\n !basketItem.selectedPaymentMethod\r\n );\r\n })\r\n ) {\r\n return this.workoutState(basket, BookingStatus.ApprovedPaymentOption);\r\n }\r\n\r\n console.log(basket.suppInfo);\r\n const haveSuppDetails = basket.suppInfo.find((supp) => supp.hasDetails);\r\n console.log(haveSuppDetails);\r\n if (haveSuppDetails) {\r\n status = BookingStatus.ApprovedSupplemtal;\r\n }\r\n return this.workoutState(basket, status);\r\n }\r\n\r\n workoutState(\r\n basket: BasketDetails,\r\n defaultState: BookingStatus\r\n ): BookingStatus {\r\n // Is the basket validated.\r\n if (!basket.validated) {\r\n if (this._hasInvalidPrice(basket)) {\r\n return BookingStatus.Revalidate;\r\n }\r\n return BookingStatus.Revalidate;\r\n }\r\n return defaultState;\r\n }\r\n\r\n workoutOpenState(basket: BasketDetails): BookingStatus {\r\n // If any of the basketItems don't have enough travellers, then we need to add them.\r\n if (basket.basketItems.length === 0) {\r\n this.status.next(BookingStatus.AddingItems);\r\n return;\r\n }\r\n if (this._needsCorrectTravellers(basket)) {\r\n this.status.next(BookingStatus.AddingTravellers);\r\n return;\r\n }\r\n\r\n if (this._needLeadPassengers(basket)) {\r\n this.status.next(BookingStatus.AddingLeadPassenger);\r\n return;\r\n }\r\n // Is the basket validated.\r\n if (!basket.validated) {\r\n if (this._hasInvalidPrice(basket)) {\r\n this.status.next(BookingStatus.Revalidate);\r\n return;\r\n }\r\n this.status.next(BookingStatus.Revalidate);\r\n return;\r\n }\r\n\r\n if (this._needsMiGroups(basket)) {\r\n this.status.next(BookingStatus.ChooseMIGroup);\r\n return;\r\n }\r\n\r\n if (this.helpers.needsMi(basket, this.needsToViewMi)) {\r\n this.status.next(BookingStatus.ProvideMi);\r\n return;\r\n }\r\n\r\n this.status.next(BookingStatus.SendForApproval);\r\n }\r\n\r\n revalidate() {\r\n this.basketService.revalidate(this.id);\r\n }\r\n\r\n addTravellers(\r\n basket: BasketDetails,\r\n basketItem: BasketItem,\r\n travellers: Traveller[],\r\n index: number = 0\r\n ): void {\r\n this.isUpdating.next(true);\r\n this.basketService.addTravellers(basket.id, basketItem, travellers, index);\r\n }\r\n\r\n setLeadPassenger(\r\n basket: BasketDetails,\r\n basketItem: BasketItem,\r\n travellers: Traveller,\r\n index: number = 0\r\n ): void {\r\n this.isUpdating.next(true);\r\n this.basketService.setLeadPassenger(\r\n basket.id,\r\n basketItem,\r\n travellers,\r\n index\r\n );\r\n }\r\n\r\n setBasketItemMiGroup(basketId: string, groupDetail: MiGroupDetail) {\r\n this.isUpdating.next(true);\r\n this.basketService.setBasketItemMiGroup(\r\n basketId,\r\n groupDetail.basketItem.id,\r\n groupDetail.value\r\n );\r\n }\r\n\r\n saveMiGroup(miGroupDetailsResult: MiGroupDetail[]) {\r\n this.isUpdating.next(true);\r\n miGroupDetailsResult.forEach((groupDetails: MiGroupDetail) => {\r\n this.setBasketItemMiGroup(this.id, groupDetails);\r\n });\r\n }\r\n\r\n saveMi(results: BasketItemManagementInfo[]) {\r\n this.needsToViewMi = false;\r\n this.isUpdating.next(true);\r\n if (results) {\r\n this.basketService.saveMiData(this.id, results);\r\n }\r\n }\r\n\r\n removeExpiredItems() {\r\n this.isUpdating.next(true);\r\n this.basketService.removeExpiredItems(this.id);\r\n }\r\n\r\n setBasketItemPaymentOption(\r\n basketItem: BasketItem,\r\n paymentMethod: string\r\n ): Promise<void> {\r\n this.isUpdating.next(true);\r\n return this.basketService.setBasketItemPaymentOption(\r\n this.basket.value,\r\n basketItem,\r\n paymentMethod\r\n );\r\n }\r\n\r\n bookBasket(results: SupplementaryBookingInfo[]): void {\r\n this.isUpdating.next(true);\r\n if (results) {\r\n this.basketService.bookBasket(this.id, results);\r\n }\r\n }\r\n\r\n private _needsMiGroups(basket: BasketDetails) {\r\n return !!basket.basketItems.find((basketItem: BasketItem): boolean => {\r\n return (\r\n basketItem.miGroupsAvailable.length > 0 && !basketItem.miGroupSelected\r\n );\r\n });\r\n }\r\n\r\n private _needsCorrectTravellers(basket: BasketDetails): boolean {\r\n return !!basket.basketItems.find((basketItem: BasketItem) => {\r\n const travellers = this._splitTravellers(basketItem);\r\n return !(\r\n travellers.adults.length === basketItem.adults &&\r\n travellers.children.length === basketItem.children &&\r\n travellers.infants.length === basketItem.infants\r\n );\r\n });\r\n }\r\n\r\n private _hasInvalidPrice(basket: BasketDetails): boolean {\r\n return !!basket.basketItems.find((basketItem: BasketItem) => {\r\n return !basketItem.latestValidationPriceDifference || basketItem.expired;\r\n });\r\n }\r\n\r\n private _needLeadPassengers(basket: BasketDetails): boolean {\r\n return !!basket.basketItems.find((basketItem: BasketItem) => {\r\n return !basketItem.leadPassenger;\r\n });\r\n }\r\n\r\n private _splitTravellers(basketItem: BasketItem): {\r\n adults: User[];\r\n children: User[];\r\n infants: User[];\r\n } {\r\n return (basketItem.userPassengerTypes || []).reduce(\r\n (\r\n accum: { adults: User[]; children: User[]; infants: User[] },\r\n user: UserPassengerType,\r\n index: number\r\n ) => {\r\n switch (user.passengerType) {\r\n case PassengerType.Adult:\r\n accum.adults.push(\r\n this._findUser(basketItem.users, Number(user.id))\r\n );\r\n break;\r\n case PassengerType.Child:\r\n accum.children.push(\r\n this._findUser(basketItem.users, Number(user.id))\r\n );\r\n break;\r\n case PassengerType.Infant:\r\n accum.infants.push(\r\n this._findUser(basketItem.users, Number(user.id))\r\n );\r\n break;\r\n }\r\n return accum;\r\n },\r\n { adults: [], children: [], infants: [] }\r\n );\r\n }\r\n\r\n private _findUser(users: User[], id: number): User {\r\n return users.find((user: User) => {\r\n return Number(user.id) === id;\r\n });\r\n }\r\n\r\n getId(): string {\r\n return this.id;\r\n }\r\n}\r\n","import moment from 'moment';\r\nimport { BaseEnterpriseSearch } from './base-enterprise';\r\nimport { BaseStorageService } from '../services/storage.service';\r\nimport { BaseHelperRoutines } from './helpers';\r\nimport { Observable, of, BehaviorSubject, combineLatest } from 'rxjs';\r\nimport { CarHireSort } from '../interfaces/car-hire-sort.interface';\r\nimport { CarHireFilters } from '../interfaces/car-hire-filters.interface';\r\nimport { SelectFilter } from '../interfaces/select-filter.interface';\r\nimport { ValueDisplay } from '../interfaces/value-display';\r\nimport { EnterpriseSearchServiceInterface } from '../interfaces/Isearch.service';\r\nimport {\r\n EnterpriseBasketServiceInterface,\r\n InternalBasketInterface\r\n} from '../interfaces/Ienterprise-basket.service';\r\nimport {\r\n CarHireDetailRequestResponse,\r\n CurrencyCode,\r\n BasketItem,\r\n CarHireInputIdentifiers,\r\n CarHireVehicleAvailibility,\r\n QuerySearchCarHireArgs,\r\n SearchFlightsV2QueryVariables,\r\n ServiceType,\r\n CarHireTransmission,\r\n CarHireClass,\r\n CarHireType,\r\n DistanceTypes,\r\n SearchCarHireQueryVariables,\r\n SaveRecentSearchMutationVariables\r\n} from '../types/graphql.types';\r\nimport {\r\n CarHireQuoteResult,\r\n CarHireQuoteResultArray,\r\n NgbDateStruct,\r\n OBTAirportDetails,\r\n Vendor,\r\n LocationTypes,\r\n LocationDetails,\r\n CarHireDepot,\r\n RecentSearch\r\n} from '../types/types';\r\nimport {\r\n BaseCarhireQuoteFetcher,\r\n CarHireFetcherType\r\n} from '../fetchers/carhire-quote-fetcher';\r\nimport {\r\n CarhireEnterpriseSearchInterface,\r\n CarHireTempParams\r\n} from '../interfaces/Icarhire-enterprise-search';\r\nimport { ICheapestPrice } from '../interfaces/cheapest-price';\r\nimport {\r\n BaseCarHireAvailabilityDetailFetcher,\r\n CarHireAvailabilityDetailFetcherType\r\n} from '../fetchers/carhire-availability-detail.fetcher';\r\nimport { take, map } from 'rxjs/operators';\r\nimport { ICarClasses } from '../interfaces/car-hire-classes.interface';\r\nimport { Traveller } from '../models/traveller.object';\r\n\r\nexport enum SortTypesCar {\r\n price = 'price',\r\n brand = 'brand',\r\n size = 'size',\r\n preferred = 'preferred',\r\n expensive = 'expensive'\r\n}\r\n\r\nexport class CarhireEnterpriseSearch<\r\n CH_Q extends CarHireFetcherType,\r\n CHAD_Q extends CarHireAvailabilityDetailFetcherType\r\n >\r\n extends BaseEnterpriseSearch<\r\n CarHireTempParams,\r\n CarHireQuoteResultArray,\r\n CarHireQuoteResultArray\r\n >\r\n implements CarhireEnterpriseSearchInterface\r\n{\r\n static readonly STORAGE_SESSION_PARAMS = 'carhire_params';\r\n static readonly STORAGE_SESSION_RESULTS = 'carhire_results';\r\n\r\n // ! - Hardcoded Data\r\n private _carTypeCodes: [string, string, CarHireType][] = [\r\n ['B', '2-3 Door', CarHireType.TwoToThreeDoor],\r\n ['C', '2/4 Door', CarHireType.TwoOrFourDoor],\r\n ['D', '4-5 Door', CarHireType.FourToFiveDoor],\r\n ['W', 'Wagon / Estate', CarHireType.WagonOrEstate],\r\n ['V', 'Passenger Van', CarHireType.PassengerVan],\r\n ['L', 'Limousine', CarHireType.Limousine],\r\n ['S', 'Sport', CarHireType.Sport],\r\n ['T', 'Convertible', CarHireType.Convertible],\r\n ['F', 'SUV', CarHireType.Suv],\r\n ['J', 'Open Air All Terrain', CarHireType.OpenAirAllTerrain],\r\n ['X', 'Special', CarHireType.Special],\r\n ['P', 'Pickup Regular Cab', CarHireType.PickUpRegularCab],\r\n ['Q', 'Pickup Extended Cab', CarHireType.PickUpExtendedCab],\r\n ['Z', 'Special Offer Car', CarHireType.SpecialOfferCar],\r\n ['E', 'Coupe', CarHireType.Coupe],\r\n ['M', 'Monospace (Europe)', CarHireType.MonospaceEuropeanUse],\r\n ['R', 'Recreational Vehicle', CarHireType.Suv],\r\n ['H', 'Motor Home', CarHireType.MotorHome],\r\n ['Y', '2-Wheel Vehicle', CarHireType.TwoWheelVehicle],\r\n ['N', 'Roadster', CarHireType.Roadster],\r\n ['G', 'Crossover', CarHireType.Suv],\r\n ['K', 'Commercial Van / Truck', CarHireType.PassengerVan]\r\n ];\r\n\r\n private _carAirConditionTypes: [string, string, boolean][] = [\r\n ['Any', 'Any', null],\r\n ['Y', 'Yes', true],\r\n ['N', 'No', false]\r\n ];\r\n\r\n private _carTransmissionCodes: [string, string, CarHireTransmission][] = [\r\n ['M', 'Manual', CarHireTransmission.Manual],\r\n ['N', 'Manual 4-Wheel Drive', CarHireTransmission.Manual],\r\n ['C', 'Manual All-Wheel Drive', CarHireTransmission.Manual],\r\n ['A', 'Automatic', CarHireTransmission.Auto],\r\n ['B', 'Automatic 4-Wheel Drive', CarHireTransmission.Auto],\r\n ['D', 'Automatic All- Wheel Drive', CarHireTransmission.Auto]\r\n ];\r\n\r\n carhireCodes: any;\r\n private _vendors: Vendor[] = [\r\n { code: '-', name: 'Any' },\r\n { code: 'AC', name: 'Ace Rent A Car' },\r\n { code: 'AD', name: 'Advantage Rent A Car' },\r\n { code: 'AL', name: 'Alamo' },\r\n { code: 'ZI', name: 'Avis' },\r\n { code: 'AT', name: 'Atesa' },\r\n { code: 'ZD', name: 'Budget Rent A Car' },\r\n { code: 'CI', name: 'Citer Rent A Car' },\r\n { code: 'ZR', name: 'Dollar Rent A Car' },\r\n { code: 'DF', name: 'Driving Force' },\r\n { code: 'EY', name: 'Economy Rent A Car' },\r\n { code: 'ET', name: 'Enterprise' },\r\n { code: 'EP', name: 'Europcar' },\r\n { code: 'IM', name: 'Europcar Southafrica' },\r\n { code: 'EZ', name: 'Ez Rent A Car' },\r\n { code: 'FF', name: 'Firefly' },\r\n { code: 'FX', name: 'Fox Rent A Car' },\r\n { code: 'GN', name: 'Guerin Car Rental' },\r\n { code: 'ZE', name: 'Hertz' },\r\n { code: 'LM', name: 'L & M Car Rental' },\r\n { code: 'LL', name: 'Localiza' },\r\n { code: 'MW', name: 'Midway Car Rental' },\r\n { code: 'ZL', name: 'National Car Rental System' },\r\n { code: 'NC', name: 'Nextcar' },\r\n { code: 'NU', name: 'Nu Car Rentals' },\r\n { code: 'ZA', name: 'Payless Car Rental' },\r\n { code: 'PR', name: 'Priceless' },\r\n { code: 'RW', name: 'Rent A Wreck' },\r\n { code: 'SX', name: 'Sixt' },\r\n { code: 'TE', name: 'Tempest' },\r\n { code: 'XF', name: 'Test-S Cross Galileo' },\r\n { code: 'XG', name: 'Test-S Cross Trng' },\r\n { code: 'ZT', name: 'Thrifty Car Rental' },\r\n { code: 'PM', name: 'Travelport Test Code' },\r\n { code: 'SV', name: 'U-Save Auto Rental' },\r\n { code: 'WF', name: 'Woodford' }\r\n ];\r\n\r\n private _car_classes: ICarClasses[] = [\r\n { code: 'M', name: 'Mini', key: CarHireClass.Mini, value: '10' },\r\n { code: 'N', name: 'Mini Elite', key: CarHireClass.MiniElite, value: '20' },\r\n { code: 'E', name: 'Economy', key: CarHireClass.Economy, value: '30' },\r\n {\r\n code: 'H',\r\n name: 'Economy Elite',\r\n key: CarHireClass.EconomyElite,\r\n value: '40'\r\n },\r\n { code: 'C', name: 'Compact', key: CarHireClass.Compact, value: '50' },\r\n {\r\n code: 'D',\r\n name: 'Compact Elite',\r\n key: CarHireClass.CompactElite,\r\n value: '60'\r\n },\r\n {\r\n code: 'I',\r\n name: 'Intermediate',\r\n key: CarHireClass.Intermediate,\r\n value: '70'\r\n },\r\n {\r\n code: 'J',\r\n name: 'Intermediate Elite',\r\n key: CarHireClass.IntermediateElite,\r\n value: '80'\r\n },\r\n { code: 'S', name: 'Standard', key: CarHireClass.Standard, value: '90' },\r\n {\r\n code: 'R',\r\n name: 'Standard Elite',\r\n key: CarHireClass.StandardElite,\r\n value: '100'\r\n },\r\n { code: 'F', name: 'Full Size', key: CarHireClass.Fullsize, value: '110' },\r\n {\r\n code: 'G',\r\n name: 'Full Size Elite',\r\n key: CarHireClass.FullsizeElite,\r\n value: '120'\r\n },\r\n { code: 'P', name: 'Premium', key: CarHireClass.Premium, value: '130' },\r\n {\r\n code: 'U',\r\n name: 'Premium Elite',\r\n key: CarHireClass.PremiumElite,\r\n value: '140'\r\n },\r\n { code: 'L', name: 'Luxury', key: CarHireClass.Luxury, value: '150' },\r\n {\r\n code: 'W',\r\n name: 'Luxury Elite',\r\n key: CarHireClass.LuxuryElite,\r\n value: '160'\r\n },\r\n { code: 'O', name: 'Oversize', key: CarHireClass.Oversize, value: '170' },\r\n { code: 'X', name: 'Special', key: CarHireClass.Special, value: '180' }\r\n ];\r\n\r\n private _location_types = [\r\n LocationTypes.City,\r\n LocationTypes.Airport,\r\n LocationTypes.Postcode\r\n ];\r\n\r\n private carClassMap: { [key: string]: number } = {\r\n mini: 0,\r\n 'mini elite': 1,\r\n economy: 2,\r\n 'economy elite': 3,\r\n compact: 4,\r\n 'compact special': 5,\r\n 'compact elite': 6,\r\n intermediate: 7,\r\n 'intermediate elite': 8,\r\n standard: 9,\r\n 'standard elite': 10,\r\n 'full size': 11,\r\n 'full size elite': 12,\r\n premium: 13,\r\n 'premium elite': 14,\r\n luxury: 15,\r\n 'luxury elite': 16,\r\n oversize: 17,\r\n special: 18\r\n };\r\n // ! - End of hardcoded data\r\n\r\n public type: ServiceType = ServiceType.Car;\r\n\r\n private _ngbPickupDate: NgbDateStruct;\r\n private _pickupTime: string;\r\n private _ngbDropoffDate: NgbDateStruct;\r\n private _dropoffTime: string;\r\n private _sorting_options: CarHireSort[] = [\r\n {\r\n value: 0,\r\n display: 'Cheapest First'\r\n },\r\n {\r\n value: 1,\r\n display: 'Most Expensive First'\r\n },\r\n {\r\n value: 2,\r\n display: 'Preferred First'\r\n }\r\n ];\r\n private _minDate: NgbDateStruct = {\r\n day: moment().date(),\r\n month: moment().month() + 1,\r\n year: moment().year()\r\n };\r\n\r\n private _minInDate: NgbDateStruct = {\r\n day: moment().date(),\r\n month: moment().month() + 1,\r\n year: moment().year()\r\n };\r\n travellers: Traveller[];\r\n\r\n get adults(): number {\r\n return this.tempParams.adults;\r\n }\r\n\r\n set adults(value: number) {\r\n this.tempParams.adults = value;\r\n this._isValid();\r\n }\r\n\r\n get children(): number {\r\n return this.tempParams.children;\r\n }\r\n\r\n set children(value: number) {\r\n this.tempParams.children = value;\r\n this._isValid();\r\n }\r\n\r\n get estimatedMileage(): number {\r\n return this.tempParams.estimatedMileage;\r\n }\r\n\r\n set estimatedMileage(milage: number) {\r\n this.tempParams.estimatedMileage = milage;\r\n this._isValid();\r\n }\r\n\r\n get pickupTime(): string {\r\n return this._pickupTime;\r\n }\r\n\r\n set pickupTime(newtime: string) {\r\n this._pickupTime = newtime;\r\n this._updateNgbPickupDateTime();\r\n }\r\n\r\n get dropoffTime(): string {\r\n return this._dropoffTime;\r\n }\r\n\r\n set dropoffTime(newtime: string) {\r\n this._dropoffTime = newtime;\r\n this._updateNgbDropoffDateTime();\r\n }\r\n\r\n get postcodePickupRaw(): LocationDetails {\r\n return this.tempParams.postcodePickupRaw;\r\n }\r\n\r\n set postcodePickupRaw(newPickupCountry: LocationDetails) {\r\n this.tempParams.postcodePickupRaw = newPickupCountry;\r\n this._isValid();\r\n }\r\n\r\n get postcodeDropoffRaw(): LocationDetails {\r\n return this.tempParams.postcodeDropoffRaw;\r\n }\r\n\r\n set postcodeDropoffRaw(newPickupCountry: LocationDetails) {\r\n this.tempParams.postcodeDropoffRaw = newPickupCountry;\r\n this._isValid();\r\n }\r\n\r\n get cityPickupDepot(): CarHireDepot {\r\n return this.tempParams.cityPickupDepot;\r\n }\r\n\r\n set cityPickupDepot(newPickupCountry: CarHireDepot) {\r\n this.tempParams.cityPickupDepot = newPickupCountry;\r\n this._isValid();\r\n }\r\n\r\n get cityDropoffDepot(): CarHireDepot {\r\n return this.tempParams.cityDropoffDepot;\r\n }\r\n\r\n set cityDropoffDepot(newPostCodeDropoff: CarHireDepot) {\r\n this.tempParams.cityDropoffDepot = newPostCodeDropoff;\r\n this._isValid();\r\n }\r\n\r\n get postcodePickup(): CarHireDepot {\r\n return this.tempParams.postcodePickup;\r\n }\r\n\r\n set postcodePickup(newPickupCountry: CarHireDepot) {\r\n this.tempParams.postcodePickup = newPickupCountry;\r\n if (this.tempParams.postcodePickup) {\r\n this.tempParams.locationType = LocationTypes.Postcode;\r\n }\r\n this._isValid();\r\n }\r\n\r\n get postcodeDropoff(): CarHireDepot {\r\n return this.tempParams.postcodeDropoff;\r\n }\r\n\r\n set postcodeDropoff(newPostCodeDropoff: CarHireDepot) {\r\n this.tempParams.postcodeDropoff = newPostCodeDropoff;\r\n this._isValid();\r\n }\r\n\r\n get cityPickup(): LocationDetails {\r\n return this.tempParams.cityPickup;\r\n }\r\n\r\n set cityPickup(newPickup: LocationDetails) {\r\n this.tempParams.cityPickup = newPickup;\r\n if (this.tempParams.cityPickup) {\r\n this.tempParams.locationType = LocationTypes.City;\r\n console.log(this.tempParams.locationType);\r\n }\r\n\r\n this._isValid();\r\n }\r\n\r\n get cityDropoff(): LocationDetails {\r\n return this.tempParams.cityDropoff;\r\n }\r\n\r\n set cityDropoff(newDropoff: LocationDetails) {\r\n this.tempParams.cityDropoff = newDropoff;\r\n this._isValid();\r\n }\r\n\r\n get minDate(): NgbDateStruct {\r\n return this._minDate;\r\n }\r\n\r\n get minInDate(): NgbDateStruct {\r\n return this._minInDate;\r\n }\r\n\r\n private _timeArray: ValueDisplay[];\r\n // - Getters And Setters For Various Variables\r\n get pickup_country(): string {\r\n return this.tempParams.pickup_country;\r\n }\r\n\r\n set pickup_country(newPickupCountry: string) {\r\n this.tempParams.pickup_country = newPickupCountry;\r\n this._isValid();\r\n }\r\n\r\n get dropoff_country(): string {\r\n return this.tempParams.dropoff_country;\r\n }\r\n\r\n set dropoff_country(newDropoffCountry: string) {\r\n this.tempParams.dropoff_country = newDropoffCountry;\r\n this._isValid();\r\n }\r\n\r\n get pickup_location(): OBTAirportDetails {\r\n return this.tempParams.pickup_location;\r\n }\r\n\r\n set pickup_location(pickupLocation: OBTAirportDetails) {\r\n this.tempParams.pickup_location = pickupLocation;\r\n if (this.tempParams.pickup_location) {\r\n this.tempParams.locationType = LocationTypes.Airport;\r\n }\r\n\r\n if (this.return_to_pickup) {\r\n this.dropoff_location = pickupLocation;\r\n }\r\n\r\n this._isValid();\r\n }\r\n\r\n get dropoff_location(): OBTAirportDetails {\r\n return this.tempParams.dropoff_location;\r\n }\r\n\r\n set dropoff_location(dropOffLocation: OBTAirportDetails) {\r\n this.tempParams.dropoff_location = dropOffLocation;\r\n this._isValid();\r\n }\r\n\r\n set ngbPickupDate(value: NgbDateStruct) {\r\n this._ngbPickupDate = value;\r\n this._updateNgbPickupDateTime();\r\n }\r\n\r\n get ngbPickupDate(): NgbDateStruct {\r\n return this._ngbPickupDate;\r\n }\r\n\r\n set ngbDropoffDate(value: NgbDateStruct) {\r\n this._ngbDropoffDate = value;\r\n this._updateNgbDropoffDateTime();\r\n }\r\n\r\n get ngbDropoffDate(): NgbDateStruct {\r\n return this._ngbDropoffDate;\r\n }\r\n\r\n // Datetimes within the query itself\r\n get pickup_datetime(): moment.Moment {\r\n return this.tempParams.pickup_datetime;\r\n }\r\n\r\n set pickup_datetime(value: moment.Moment) {\r\n this.tempParams.pickup_datetime = value;\r\n try {\r\n if (value && value.isValid()) {\r\n this._ngbPickupDate = this.helpers.momentToNgDate(value);\r\n this._pickupTime = moment(value).format('HH:mm')\r\n ? moment(value).format('HH:mm')\r\n : '07:30';\r\n }\r\n this._minInDate = {\r\n day: value.date(),\r\n month: value.month() + 1,\r\n year: value.year()\r\n };\r\n\r\n if (value.isSameOrAfter(this.tempParams.dropoff_datetime)) {\r\n this.dropoff_datetime = this.dropoff_datetime\r\n .set('date', value.date())\r\n .set('month', value.month())\r\n .set('year', value.year());\r\n }\r\n } catch (error) {}\r\n\r\n this._isValid();\r\n }\r\n\r\n get dropoff_datetime(): moment.Moment {\r\n return this.tempParams.dropoff_datetime;\r\n }\r\n\r\n set dropoff_datetime(value: moment.Moment) {\r\n this.tempParams.dropoff_datetime = value;\r\n if (value && value.isValid()) {\r\n this._ngbDropoffDate = this.helpers.momentToNgDate(value);\r\n this._dropoffTime = moment(value).format('HH:mm')\r\n ? moment(value).format('HH:mm')\r\n : '08:30';\r\n }\r\n this._isValid();\r\n }\r\n\r\n // !date and time is handled differently for LU\r\n private _pickup_date: NgbDateStruct = null;\r\n\r\n get pickup_date(): NgbDateStruct {\r\n return this._pickup_date;\r\n }\r\n\r\n set pickup_date(value: NgbDateStruct) {\r\n this._pickup_date = value;\r\n this._updatePickupDateTime();\r\n }\r\n\r\n private _pickup_time: string = null;\r\n get pickup_time(): string {\r\n return this._pickup_time;\r\n }\r\n\r\n set pickup_time(value: string) {\r\n this._pickup_time = value;\r\n this._updatePickupDateTime();\r\n }\r\n\r\n private _dropoff_date: NgbDateStruct = null;\r\n\r\n get dropoff_date(): NgbDateStruct {\r\n return this._dropoff_date;\r\n }\r\n\r\n set dropoff_date(value: NgbDateStruct) {\r\n this._dropoff_date = value;\r\n this._updateDropoffDateTime();\r\n }\r\n\r\n private _dropoff_time: string = null;\r\n get dropoff_time(): string {\r\n return this._dropoff_time;\r\n }\r\n\r\n set dropoff_time(value: string) {\r\n this._dropoff_time = value;\r\n this._updateDropoffDateTime();\r\n }\r\n\r\n get return_to_pickup(): boolean {\r\n return this.tempParams.return_to_pickup;\r\n }\r\n\r\n set return_to_pickup(newVal: boolean) {\r\n this.tempParams.return_to_pickup = newVal;\r\n this._isValid();\r\n }\r\n\r\n get chosenVendor(): string {\r\n return this.tempParams.chosenVendor;\r\n }\r\n\r\n set chosenVendor(newVendor: string) {\r\n this.tempParams.chosenVendor = newVendor;\r\n this._isValid();\r\n }\r\n\r\n get carClass(): CarHireClass {\r\n return this.tempParams.carClass;\r\n }\r\n\r\n set carClass(carClass: CarHireClass) {\r\n this.tempParams.carClass = carClass;\r\n this._isValid();\r\n }\r\n\r\n get carType(): CarHireType {\r\n return this.tempParams.carType;\r\n }\r\n\r\n set carType(type: CarHireType) {\r\n this.tempParams.carType = type;\r\n this._isValid();\r\n }\r\n\r\n get transmission(): CarHireTransmission {\r\n return this.tempParams.transmission;\r\n }\r\n\r\n set transmission(trans: CarHireTransmission) {\r\n this.tempParams.transmission = trans;\r\n this._isValid();\r\n }\r\n\r\n get airCon(): boolean {\r\n return this.tempParams.airCon;\r\n }\r\n\r\n set airCon(newCon: boolean) {\r\n this.tempParams.airCon = newCon;\r\n this._isValid();\r\n }\r\n\r\n get locationType(): LocationTypes {\r\n return this.tempParams.locationType;\r\n }\r\n set locationType(value: LocationTypes) {\r\n this.tempParams.locationType = value;\r\n this._isValid();\r\n }\r\n\r\n public get timeArray() {\r\n this._timeArray =\r\n this._timeArray ||\r\n Array(96)\r\n .fill(0)\r\n .map((_, index: number) => {\r\n return {\r\n value:\r\n Math.floor(index / 4)\r\n .toString()\r\n .padStart(2, '0') +\r\n ':' +\r\n ((index % 4) * 15).toString().padStart(2, '0'),\r\n display:\r\n Math.floor(index / 4)\r\n .toString()\r\n .padStart(2, '0') +\r\n ':' +\r\n ((index % 4) * 15).toString().padStart(2, '0')\r\n };\r\n });\r\n return this._timeArray;\r\n }\r\n\r\n // ! - The below values have getters only (I.E Cannot modify)\r\n\r\n get carAirConditionTypes(): [string, string, boolean][] {\r\n return this._carAirConditionTypes;\r\n }\r\n\r\n get carTransmissionCodes(): [string, string, CarHireTransmission][] {\r\n return this._carTransmissionCodes;\r\n }\r\n\r\n get carTypeCodes(): [string, string, CarHireType][] {\r\n return this._carTypeCodes;\r\n }\r\n\r\n get vendors(): Vendor[] {\r\n return this._vendors;\r\n }\r\n\r\n get sortingOptions(): CarHireSort[] {\r\n return this._sorting_options;\r\n }\r\n\r\n // ! - End of getters and setters\r\n\r\n constructor(\r\n private carhirefetcher: BaseCarhireQuoteFetcher<CH_Q>,\r\n private carHireAvailabilityDetailFetcher: BaseCarHireAvailabilityDetailFetcher<CHAD_Q>,\r\n private helpers: BaseHelperRoutines,\r\n private basketService: EnterpriseBasketServiceInterface,\r\n storageService: BaseStorageService,\r\n private searchService: EnterpriseSearchServiceInterface\r\n ) {\r\n super(storageService);\r\n const data: {\r\n tempParams: CarHireTempParams;\r\n } = storageService.getSessionItem(\r\n CarhireEnterpriseSearch.STORAGE_SESSION_PARAMS\r\n ) || {\r\n tempParams: {} as CarHireTempParams\r\n };\r\n\r\n this.updateTempParams(searchService.makeCarHireQuery(data.tempParams));\r\n\r\n if (searchService.shouldAddTravellerSubscription()) {\r\n searchService.travellerInformation.subscribe(\r\n (travellers: Traveller[]) => {\r\n const splitTravellers = this.helpers.selectedTravellers(\r\n travellers,\r\n ServiceType.Car\r\n );\r\n this.adults = splitTravellers.adults.length;\r\n this.children = splitTravellers.children.length;\r\n this.travellers = travellers;\r\n this._isValid();\r\n }\r\n );\r\n }\r\n\r\n const results =\r\n storageService.getSessionItemAsList<CarHireQuoteResultArray>(\r\n this.resultsSessionName\r\n ) || [];\r\n\r\n this.fullResults = helpers.clone(results || []);\r\n this._cheapestResultPrice = this.updateLowestPrice(results);\r\n this.results.next(results);\r\n }\r\n\r\n protected resultsSessionName =\r\n CarhireEnterpriseSearch.STORAGE_SESSION_RESULTS;\r\n\r\n protected resetQuery(): void {\r\n this.updateTempParams(this.searchService.makeCarHireQuery());\r\n this.estimatedMileage = null;\r\n this._isValid();\r\n }\r\n\r\n private _isValid() {\r\n if (!this.doChecks) {\r\n return;\r\n }\r\n this.storageService.setSessionItem(\r\n CarhireEnterpriseSearch.STORAGE_SESSION_PARAMS,\r\n {\r\n tempParams: this.tempParams\r\n }\r\n );\r\n\r\n // go over and check that all of the various variables are correct\r\n\r\n // first of all check that we have a valid location\r\n this.validationMessages = [];\r\n\r\n switch (this.locationType) {\r\n case LocationTypes.Airport:\r\n if (!this.pickup_location || !this.pickup_location.destination) {\r\n this.validationMessages.push('Please supply a pickup location');\r\n }\r\n\r\n if (!this.dropoff_location || !this.dropoff_location.destination) {\r\n this.validationMessages.push('Please supply a dropoff location');\r\n }\r\n break;\r\n case LocationTypes.City:\r\n if (!this.cityPickup) {\r\n this.validationMessages.push('Please supply a pickup city');\r\n }\r\n\r\n if (!this.cityDropoff) {\r\n this.validationMessages.push('Please supply a dropoff city');\r\n }\r\n break;\r\n case LocationTypes.Postcode:\r\n if (!this.postcodePickup) {\r\n this.validationMessages.push('Please supply a pickup depot');\r\n }\r\n\r\n if (!this.postcodeDropoff) {\r\n this.validationMessages.push('Please supply a dropoff depot');\r\n }\r\n break;\r\n }\r\n\r\n if (this.estimatedMileage && this.estimatedMileage <= 0) {\r\n this.validationMessages.push(\r\n 'Estimated Milage must be a positive number.'\r\n );\r\n }\r\n\r\n try {\r\n if (!this.pickup_datetime) {\r\n this.validationMessages.push('Please supply a pickup time and date');\r\n }\r\n\r\n if (!this.dropoff_datetime) {\r\n this.validationMessages.push('Please supply a drop off time and date');\r\n }\r\n\r\n if (\r\n this.dropoff_datetime?.isSameOrBefore(this.pickup_datetime, 'minute')\r\n ) {\r\n this.validationMessages.push(\r\n 'Dropoff date/time cannot be before or the same as pickup date/time'\r\n );\r\n }\r\n\r\n if (this.pickup_datetime?.isBefore(moment())) {\r\n this.validationMessages.push(\r\n 'Pickup date/time must be after present date/time'\r\n );\r\n }\r\n\r\n if (this.dropoff_datetime?.isBefore(moment())) {\r\n this.validationMessages.push(\r\n 'Dropoff date/time must be after present date/time'\r\n );\r\n }\r\n } catch (error) {}\r\n\r\n this.isValid.next(this.validationMessages.length === 0);\r\n this.messages.next(this.validationMessages);\r\n }\r\n\r\n startSearch(): Promise<boolean> {\r\n this.results.next([]);\r\n if (this.isValid.value) {\r\n const query = this.getSearchQuery();\r\n this.searchService.saveRecentSearch(\r\n this.getRecentSearchQuery(this.getSearchQuery())\r\n );\r\n return this._startSearch(\r\n this.carhirefetcher.fetchList(\r\n this.helpers.removeNulls<QuerySearchCarHireArgs>(query)\r\n )\r\n );\r\n } else {\r\n return Promise.resolve(false);\r\n }\r\n }\r\n\r\n getRecentSearchQuery(\r\n query: QuerySearchCarHireArgs\r\n ): SaveRecentSearchMutationVariables {\r\n const recentSearchQuery: any = query;\r\n switch (this.locationType) {\r\n case LocationTypes.City:\r\n recentSearchQuery.city = {\r\n pickupName: this.cityPickup.name,\r\n pickupCountryCode: this.cityPickup.countryCode,\r\n pickupCity: this.cityPickup.id.toString(),\r\n pickupLatitude: this.cityPickup.latitude,\r\n pickupLongitude: this.cityPickup.longitude,\r\n\r\n dropOffName: this.cityDropoff.name,\r\n dropoffCountryCode: this.cityDropoff.countryCode,\r\n dropoffCity: this.cityDropoff.id.toString(),\r\n dropOffLatitude: this.cityDropoff.latitude,\r\n dropOffLongitude: this.cityDropoff.longitude,\r\n\r\n pickupAddressLines: this.cityPickupDepot.addressLines[0],\r\n pickupCityName: this.cityPickupDepot.cityName,\r\n pickupExtendedLocationCode: this.cityPickupDepot.extendedLocationCode,\r\n pickupLocationCode: this.cityPickupDepot.locationCode,\r\n pickupVendor: this.cityPickupDepot.vendor,\r\n pickupVendorCode: this.cityPickupDepot.vendorCode,\r\n\r\n dropOffAddressLines: this.cityDropoffDepot.addressLines[0],\r\n dropOffCityName: this.cityDropoffDepot.cityName,\r\n dropOffExtendedLocationCode:\r\n this.cityDropoffDepot.extendedLocationCode,\r\n dropOffLocationCode: this.cityDropoffDepot.locationCode,\r\n dropOffVendor: this.cityDropoffDepot.vendor,\r\n dropOffVendorCode: this.cityDropoffDepot.vendorCode\r\n };\r\n break;\r\n case LocationTypes.Postcode:\r\n recentSearchQuery.depot = {\r\n vendorCode: this.postcodePickup.vendorCode,\r\n pickupLocationCode: this.postcodePickup.locationCode,\r\n pickupExtendedLocationCode: this.postcodePickup.extendedLocationCode,\r\n pickupAddressLines: this.postcodePickup.addressLines[0],\r\n pickupCityName: this.postcodePickup.cityName,\r\n pickupVendor: this.postcodePickup.vendor,\r\n\r\n dropOffLocationCode: this.postcodeDropoff.locationCode,\r\n dropOffExtendedLocationCode:\r\n this.postcodeDropoff.extendedLocationCode,\r\n dropoffAddressLines: this.postcodeDropoff.addressLines[0],\r\n dropoffCityName: this.postcodeDropoff.cityName,\r\n dropoffVendor: this.postcodeDropoff.vendor,\r\n\r\n pickupPostCode: this.postcodePickupRaw.name,\r\n pickupLatitude: this.postcodePickupRaw.latitude,\r\n pickupLongitude: this.postcodePickupRaw.longitude,\r\n\r\n dropoffPostCode: this.postcodeDropoffRaw.name,\r\n dropoffLatitude: this.postcodeDropoffRaw.latitude,\r\n dropoffLongitude: this.postcodeDropoffRaw.longitude\r\n };\r\n break;\r\n }\r\n\r\n return {\r\n serviceType: ServiceType.Car,\r\n searchArgs: recentSearchQuery,\r\n travelDate: this.pickup_datetime.format(),\r\n travellers: this.helpers.getTravellersId(this.travellers)\r\n };\r\n }\r\n\r\n public startRecentSearch(recentSearch: RecentSearch): void {\r\n this.chosenVendor = recentSearch.searchArgs.vendor;\r\n this.carClass = recentSearch.searchArgs.class;\r\n this.carType = recentSearch.searchArgs.type;\r\n this.transmission = recentSearch.searchArgs.transmission;\r\n this.airCon = recentSearch.searchArgs.aircon;\r\n this.estimatedMileage = recentSearch.searchArgs.estimatedDailyDistance;\r\n this.dropoff_datetime = moment(recentSearch.searchArgs.dropoffDateTime);\r\n this.pickup_datetime = moment(recentSearch.searchArgs.pickupDateTime);\r\n\r\n if (recentSearch.searchArgs.city) {\r\n this.getParamsForCarbyCity(recentSearch);\r\n } else if (recentSearch.searchArgs.airport) {\r\n this.getParamsForCarbyAirport(recentSearch);\r\n } else if (recentSearch.searchArgs.depot) {\r\n this.getParamsForCarbyPostCode(recentSearch);\r\n }\r\n }\r\n\r\n private getParamsForCarbyAirport(recentSearch: RecentSearch): void {\r\n this.locationType = LocationTypes.Airport;\r\n combineLatest([\r\n this.searchService.getAirportByCode(\r\n recentSearch.searchArgs.airport.pickupCode\r\n ),\r\n this.searchService.getAirportByCode(\r\n recentSearch.searchArgs.airport.dropoffCode\r\n )\r\n ]).subscribe(([departLocation, arriveLocation]) => {\r\n if (departLocation && arriveLocation) {\r\n this.dropoff_location = {\r\n destination: departLocation.iataMatch.name,\r\n gateway: departLocation.iataMatch.iata,\r\n terminals: this.searchService.processTerminals(\r\n arriveLocation.iataMatch.terminals\r\n ),\r\n country: departLocation.iataMatch?.locationDetails?.country,\r\n postcode: departLocation.iataMatch?.locationDetails?.postcode,\r\n countryCode: departLocation.iataMatch?.locationDetails?.countryCode\r\n };\r\n this.pickup_location = {\r\n destination: arriveLocation.iataMatch.name,\r\n gateway: arriveLocation.iataMatch.iata,\r\n terminals: this.searchService.processTerminals(\r\n arriveLocation.iataMatch.terminals\r\n ),\r\n country: arriveLocation.iataMatch?.locationDetails?.country,\r\n postcode: arriveLocation.iataMatch?.locationDetails?.postcode,\r\n countryCode: arriveLocation.iataMatch?.locationDetails?.countryCode\r\n };\r\n\r\n this.dropoff_country = this.dropoff_location.countryCode;\r\n this.pickup_country = this.pickup_location.countryCode;\r\n this.searchService.startSearches();\r\n }\r\n });\r\n }\r\n\r\n private getParamsForCarbyCity(recentSearch: RecentSearch): void {\r\n this.locationType = LocationTypes.City;\r\n\r\n this.cityPickup = {\r\n countryCode: recentSearch.searchArgs.city.pickupCountryCode,\r\n id: recentSearch.searchArgs.city.pickupCity,\r\n name: recentSearch.searchArgs.city.pickupName,\r\n type: LocationTypes.City,\r\n latitude: recentSearch.searchArgs.city.pickupLatitude,\r\n longitude: recentSearch.searchArgs.city.pickupLongitude\r\n };\r\n\r\n this.cityDropoff = {\r\n countryCode: recentSearch.searchArgs.city.dropoffCountryCode,\r\n id: recentSearch.searchArgs.city.dropoffCity,\r\n name: recentSearch.searchArgs.city.dropOffName,\r\n type: LocationTypes.City,\r\n latitude: recentSearch.searchArgs.city.dropOffLatitude,\r\n longitude: recentSearch.searchArgs.city.dropOffLongitude\r\n };\r\n\r\n this.cityDropoffDepot = {\r\n addressLines: [recentSearch.searchArgs.city.dropOffAddressLines],\r\n cityName: recentSearch.searchArgs.city.dropOffCityName,\r\n extendedLocationCode:\r\n recentSearch.searchArgs.city.dropOffExtendedLocationCode,\r\n locationCode: recentSearch.searchArgs.city.dropOffLocationCode,\r\n vendor: recentSearch.searchArgs.city.dropOffVendor,\r\n vendorCode: recentSearch.searchArgs.city.dropOffVendorCode\r\n };\r\n\r\n this.cityPickupDepot = {\r\n addressLines: [recentSearch.searchArgs.city.pickupAddressLines],\r\n cityName: recentSearch.searchArgs.city.pickupCityName,\r\n extendedLocationCode:\r\n recentSearch.searchArgs.city.pickupExtendedLocationCode,\r\n locationCode: recentSearch.searchArgs.city.pickupLocationCode,\r\n vendor: recentSearch.searchArgs.city.pickupVendor,\r\n vendorCode: recentSearch.searchArgs.city.pickupVendorCode\r\n };\r\n\r\n this.searchService.startSearches();\r\n }\r\n\r\n private getParamsForCarbyPostCode(recentSearch: RecentSearch): void {\r\n this.locationType = LocationTypes.Postcode;\r\n this.postcodeDropoff = {\r\n addressLines: [recentSearch.searchArgs.depot.dropoffAddressLines],\r\n vendorCode: recentSearch.searchArgs.depot.vendorCode,\r\n locationCode: recentSearch.searchArgs.depot.dropOffLocationCode,\r\n extendedLocationCode:\r\n recentSearch.searchArgs.depot.dropOffExtendedLocationCode,\r\n cityName: recentSearch.searchArgs.depot.dropoffCityName,\r\n vendor: recentSearch.searchArgs.depot.dropoffVendor\r\n };\r\n\r\n this.postcodeDropoffRaw = {\r\n name: recentSearch.searchArgs.depot.dropoffPostCode,\r\n type: LocationTypes.Postcode,\r\n latitude: recentSearch.searchArgs.depot.dropoffLatitude,\r\n longitude: recentSearch.searchArgs.depot.dropoffLongitude\r\n };\r\n this.postcodePickup = {\r\n addressLines: [recentSearch.searchArgs.depot.pickupAddressLines],\r\n vendorCode: recentSearch.searchArgs.depot.vendorCode,\r\n locationCode: recentSearch.searchArgs.depot.pickupLocationCode,\r\n extendedLocationCode:\r\n recentSearch.searchArgs.depot.pickupExtendedLocationCode,\r\n cityName: recentSearch.searchArgs.depot.pickupCityName,\r\n vendor: recentSearch.searchArgs.depot.pickupVendor\r\n };\r\n\r\n this.postcodePickupRaw = {\r\n name: recentSearch.searchArgs.depot.pickupPostCode,\r\n type: LocationTypes.Postcode,\r\n latitude: recentSearch.searchArgs.depot.pickupLatitude,\r\n longitude: recentSearch.searchArgs.depot.pickupLongitude\r\n };\r\n\r\n this.searchService.startSearches();\r\n }\r\n\r\n getSearchQuery(): QuerySearchCarHireArgs {\r\n const query: QuerySearchCarHireArgs = {} as QuerySearchCarHireArgs;\r\n switch (this.locationType) {\r\n case LocationTypes.Airport:\r\n query.airport = {\r\n pickupCode: '',\r\n dropoffCode: ''\r\n };\r\n\r\n query.airport.pickupCode = this.pickup_location.gateway;\r\n query.airport.dropoffCode = this.return_to_pickup\r\n ? this.pickup_location.gateway\r\n : this.dropoff_location.gateway;\r\n break;\r\n case LocationTypes.City:\r\n query.city = {\r\n pickupCountryCode: this.cityPickup.countryCode,\r\n pickupCity: this.cityPickup.id.toString(),\r\n dropoffCountryCode: this.cityDropoff.countryCode,\r\n dropoffCity: this.cityDropoff.id.toString()\r\n };\r\n break;\r\n case LocationTypes.Postcode:\r\n query.depot = {\r\n vendorCode: this.postcodePickup.vendorCode,\r\n pickupLocationCode: this.postcodePickup.locationCode,\r\n pickupExtendedLocationCode: this.postcodePickup.extendedLocationCode,\r\n dropOffLocationCode: this.postcodeDropoff.locationCode,\r\n dropOffExtendedLocationCode: this.postcodeDropoff.extendedLocationCode\r\n };\r\n break;\r\n }\r\n query.dropoffDateTime = this.dropoff_datetime;\r\n query.pickupDateTime = this.pickup_datetime;\r\n\r\n // now for the optional fields - nullify these if they are '-' (Any)\r\n query.aircon = this.airCon || null;\r\n query.vendor = this.chosenVendor === '-' ? null : this.chosenVendor;\r\n query.transmission = this.transmission || null;\r\n query.class = this.carClass || null;\r\n query.type = this.carType || null;\r\n query.estimatedDailyDistance = this.estimatedMileage || null;\r\n query.estimatedDailyDistanceUnits = this.estimatedMileage\r\n ? DistanceTypes.M\r\n : null; // Setting as miles for now - may swap out for kilometers later\r\n\r\n return this.helpers.removeNulls<QuerySearchCarHireArgs>(query);\r\n }\r\n\r\n /**\r\n * @todo - turn this into a BE call to dynamically get the list of car classes\r\n * @returns all car classes as an array\r\n */\r\n getCarClasses(): Observable<ICarClasses[]> {\r\n return of(this._car_classes);\r\n }\r\n\r\n getLocationTypes() {\r\n return of(this._location_types);\r\n }\r\n\r\n /**\r\n * @description - filter down the car results based on user chosen filters\r\n */\r\n filterResults(appliedFilters: CarHireFilters, selectedSort: number): void {\r\n let fullResults: CarHireQuoteResultArray = this.helpers.clone(\r\n this.fullResults\r\n );\r\n\r\n // now apply filters\r\n // price filters\r\n fullResults = fullResults.filter((result: CarHireQuoteResult) => {\r\n const price = this.getPrice(result);\r\n\r\n return (\r\n price >= appliedFilters.minPrice && price <= appliedFilters.maxPrice\r\n );\r\n });\r\n\r\n // apply transmission filters\r\n fullResults = this.filterByTransmissionType(\r\n appliedFilters.transmissions,\r\n fullResults\r\n );\r\n\r\n // aircon\r\n fullResults = this.filterByAirconType(\r\n appliedFilters.airConditioning,\r\n fullResults\r\n );\r\n\r\n // car types (class)\r\n fullResults = this.filterByCarType(appliedFilters.types, fullResults);\r\n\r\n // company\r\n fullResults = this.filterByCompany(appliedFilters.companies, fullResults);\r\n\r\n // lastly apply any required sorting\r\n fullResults = this.sortResults(selectedSort, fullResults);\r\n\r\n this.results.next(fullResults);\r\n }\r\n\r\n filterByCompany(\r\n companies: SelectFilter[],\r\n cars: CarHireQuoteResultArray\r\n ): CarHireQuoteResultArray {\r\n const selected = companies.filter((company) => company.selected);\r\n\r\n if (selected.length) {\r\n cars = cars.filter((car: CarHireQuoteResult) => {\r\n const haveSelected = selected.find(\r\n (selc: any) =>\r\n selc.value.toString().toLowerCase() ===\r\n car.identifiers.vendor.toLowerCase()\r\n );\r\n\r\n return haveSelected;\r\n });\r\n }\r\n\r\n return cars;\r\n }\r\n\r\n filterByCarType(\r\n types: SelectFilter[],\r\n cars: CarHireQuoteResultArray\r\n ): CarHireQuoteResultArray {\r\n // this is a filter type which allows more than one to be set\r\n // if none are set allow all through\r\n\r\n const selected = types.filter((type) => type.selected);\r\n\r\n if (selected.length) {\r\n cars = cars.filter((car: any) => {\r\n const haveSelected = selected.find(\r\n (selc) =>\r\n selc.value.toString().toLowerCase() ===\r\n car.displayRecord.vehicle.class.toLowerCase()\r\n );\r\n\r\n return haveSelected;\r\n });\r\n }\r\n\r\n return cars;\r\n }\r\n\r\n filterByTransmissionType(\r\n tranmissions: SelectFilter[],\r\n cars: CarHireQuoteResultArray\r\n ): CarHireQuoteResultArray {\r\n const selectedTransmission = tranmissions.find((trans) => {\r\n return trans.selected;\r\n });\r\n\r\n if (selectedTransmission && selectedTransmission.value !== 'Y') {\r\n // not 'Any'\r\n try {\r\n cars = cars.filter((car: CarHireQuoteResult) => {\r\n const trans = car.identifiers.vehType[2];\r\n\r\n return (\r\n trans.toLowerCase() ===\r\n selectedTransmission.value.toString().toLowerCase()\r\n );\r\n });\r\n } catch (error) {\r\n console.error(`+++ Error filtering transmissions: ${error} +++`);\r\n }\r\n }\r\n\r\n return cars;\r\n }\r\n\r\n filterByAirconType(\r\n aircons: SelectFilter[],\r\n cars: CarHireQuoteResultArray\r\n ): CarHireQuoteResultArray {\r\n const selectedAircon = aircons.find((ac) => {\r\n return ac.selected;\r\n });\r\n\r\n if (selectedAircon && selectedAircon.value !== 'A') {\r\n // not 'Any'\r\n try {\r\n cars = cars.filter((car: CarHireQuoteResult) => {\r\n const ac = car.identifiers.vehType[3];\r\n\r\n return (\r\n ac.toLowerCase() === selectedAircon.value.toString().toLowerCase()\r\n );\r\n });\r\n } catch (error) {\r\n console.error(`+++ Error filtering aircons: ${error} +++`);\r\n }\r\n }\r\n\r\n return cars;\r\n }\r\n\r\n /**\r\n * @description - sort the results\r\n * @param selectedSort - the sort we have chosen\r\n * @param results - optionally pass in the results, if not provided - uses internal results (not full, would cause issues)\r\n */\r\n sortResults(\r\n selectedSort: number,\r\n results?: CarHireQuoteResultArray\r\n ): CarHireQuoteResultArray {\r\n let fullResults = this.helpers.clone(\r\n results ? results : this.results.value\r\n );\r\n switch (selectedSort) {\r\n case 0: // cheapest\r\n fullResults = fullResults.sort(\r\n (a: CarHireQuoteResult, b: CarHireQuoteResult) =>\r\n this.getPrice(a) - this.getPrice(b)\r\n );\r\n break;\r\n case 1: // expensive\r\n fullResults = fullResults.sort(\r\n (a: CarHireQuoteResult, b: CarHireQuoteResult) =>\r\n this.getPrice(b) - this.getPrice(a)\r\n );\r\n break;\r\n case 2: // preferred TODO\r\n break;\r\n case 3: // brand\r\n fullResults = this.sortByBrand(fullResults);\r\n break;\r\n case 4: // size\r\n fullResults = this.sortBySize(fullResults);\r\n break;\r\n }\r\n // fallback to whatever was before\r\n this.results.next(fullResults);\r\n return fullResults;\r\n }\r\n\r\n /**\r\n * @description - sort the results expensive\r\n * @param results - full results from sort results function\r\n */\r\n\r\n sortExpensive(results?: CarHireQuoteResultArray): CarHireQuoteResultArray {\r\n const fullResults = this.helpers.clone(\r\n results ? results : this.results.value\r\n );\r\n const sortedResults = fullResults.sort(\r\n (a: CarHireQuoteResult, b: CarHireQuoteResult) =>\r\n this.getPrice(b) - this.getPrice(a)\r\n );\r\n this.results.next(sortedResults);\r\n return sortedResults;\r\n }\r\n\r\n /**\r\n * @description - sort the results cheapest\r\n * @param results - full results from sort results function\r\n */\r\n\r\n sortCheapest(results?: CarHireQuoteResultArray): CarHireQuoteResultArray {\r\n const fullResults = this.helpers.clone(\r\n results ? results : this.results.value\r\n );\r\n const sortedResults = fullResults.sort(\r\n (a: CarHireQuoteResult, b: CarHireQuoteResult) =>\r\n this.getPrice(a) - this.getPrice(b)\r\n );\r\n this.results.next(sortedResults);\r\n return sortedResults;\r\n }\r\n\r\n /**\r\n * @description - sort the results\r\n * @param results - full results from sort results function\r\n */\r\n sortBySize(results?: CarHireQuoteResultArray): CarHireQuoteResultArray {\r\n const fullResults = this.helpers.clone(\r\n results ? results : this.results.value\r\n );\r\n const sortedResults = fullResults.sort(\r\n (a: CarHireQuoteResult, b: CarHireQuoteResult) => {\r\n let aVal: number;\r\n let bVal: number;\r\n aVal = this.carClassMap[a.displayRecord.vehicle.class.toLowerCase()];\r\n bVal = this.carClassMap[b.displayRecord.vehicle.class.toLowerCase()];\r\n if (aVal >= 0 && bVal >= 0) {\r\n return aVal - bVal;\r\n }\r\n return -1; // just place them at end - unrecognised product description\r\n }\r\n );\r\n this.results.next(sortedResults);\r\n return sortedResults;\r\n }\r\n\r\n /**\r\n * @description - sort the results\r\n * @param results - full results from sort results function\r\n */\r\n sortByBrand(results?: CarHireQuoteResultArray): CarHireQuoteResultArray {\r\n const fullResults = this.helpers.clone(\r\n results ? results : this.results.value\r\n );\r\n const sortedResults = fullResults.sort(\r\n (a: CarHireQuoteResult, b: CarHireQuoteResult) => {\r\n let brandA = a.identifiers.vendor;\r\n let brandB = b.identifiers.vendor;\r\n\r\n // switching as these strings don't match the brand name\r\n switch (brandA) {\r\n case 'ZE':\r\n brandA = 'HE';\r\n break;\r\n case 'ZI':\r\n brandA = 'AV';\r\n break;\r\n }\r\n\r\n switch (brandB) {\r\n case 'ZE':\r\n brandB = 'HE';\r\n break;\r\n case 'ZI':\r\n brandB = 'AV';\r\n break;\r\n }\r\n\r\n if (brandA < brandB) {\r\n return -1;\r\n } else if (brandA > brandB) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n );\r\n\r\n this.results.next(sortedResults);\r\n return sortedResults;\r\n }\r\n\r\n /**\r\n * @description - get the price of a individual car\r\n */\r\n getPrice(car: CarHireQuoteResult): number {\r\n try {\r\n return Number(car.displayRecord.charges[0].amount);\r\n } catch (error) {}\r\n\r\n return 0;\r\n }\r\n\r\n getMinPrice(cars: CarHireQuoteResultArray): number {\r\n return cars.reduce((min: number, car: CarHireQuoteResult) => {\r\n const price = this.getPrice(car);\r\n if (price < min) {\r\n min = price;\r\n }\r\n return min;\r\n }, Number.MAX_SAFE_INTEGER);\r\n }\r\n\r\n getMaxPrice(cars: CarHireQuoteResultArray): number {\r\n return cars.reduce((max: number, car: CarHireQuoteResult) => {\r\n const price = this.getPrice(car);\r\n if (price > max) {\r\n max = price;\r\n }\r\n return max;\r\n }, Number.MIN_SAFE_INTEGER);\r\n }\r\n\r\n updateFromPreviousSearches(\r\n previousItems: Record<ServiceType, BasketItem>\r\n ): void {\r\n const flightItem: SearchFlightsV2QueryVariables =\r\n previousItems[ServiceType.Flight]?.searchQuery;\r\n if (flightItem) {\r\n // TODO flights haven't been done yet.\r\n }\r\n }\r\n\r\n // !date and time is handled differently for LU\r\n private _updatePickupDateTime() {\r\n if (this._pickup_date && this._pickup_time) {\r\n const time = this.helpers.ngDateToMoment(\r\n this._pickup_date,\r\n this._pickup_time\r\n );\r\n this.pickup_datetime = time.isValid() ? time : null;\r\n this._isValid();\r\n }\r\n }\r\n\r\n private _updateDropoffDateTime() {\r\n if (this._dropoff_date && this._dropoff_time) {\r\n const time = this.helpers.ngDateToMoment(\r\n this._dropoff_date,\r\n this._dropoff_time\r\n );\r\n this.dropoff_datetime = time.isValid() ? time : null;\r\n this._isValid();\r\n }\r\n }\r\n\r\n private _updateNgbPickupDateTime() {\r\n if (this._ngbPickupDate && this._pickupTime) {\r\n const time = this.helpers.ngDateToMoment(\r\n this._ngbPickupDate,\r\n this._pickupTime\r\n );\r\n this.pickup_datetime = time.isValid() ? time : null;\r\n this._isValid();\r\n }\r\n }\r\n\r\n private _updateNgbDropoffDateTime() {\r\n if (this._ngbDropoffDate && this._dropoffTime) {\r\n const time = this.helpers.ngDateToMoment(\r\n this._ngbDropoffDate,\r\n this._dropoffTime\r\n );\r\n this.dropoff_datetime = time.isValid() ? time : null;\r\n this._isValid();\r\n }\r\n }\r\n\r\n isOverNight(): boolean {\r\n const outwardDay = this.pickup_datetime.date();\r\n const returnDay = this.dropoff_datetime.date();\r\n if (returnDay - outwardDay >= 1) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n updateLowestPrice(results: CarHireQuoteResultArray): ICheapestPrice {\r\n if (!results.length) return null;\r\n const minPrice = this.getMinPrice(results);\r\n return {\r\n amount: minPrice,\r\n currencyCode: results[0].displayRecord.charges[0].currencyCode\r\n };\r\n }\r\n\r\n /**\r\n * @description - get the availability details for a particular car hire result using locationDetails param\r\n * @param locationDetails - e.g. taken from response data in searchCarHire query\r\n * @param isLoading behaviourSubject for handling loading spinner state of request\r\n */\r\n getCarHireAvailabilityDetail(\r\n locationDetails: CarHireInputIdentifiers,\r\n isLoading: BehaviorSubject<boolean>\r\n ): Observable<CarHireDetailRequestResponse> {\r\n if (!isLoading.value) {\r\n isLoading.next(true);\r\n }\r\n return this.carHireAvailabilityDetailFetcher\r\n .fetchList({ locationDetails })\r\n .pipe(\r\n take(1),\r\n map((result: CarHireDetailRequestResponse) => {\r\n if (isLoading.value) {\r\n isLoading.next(false);\r\n }\r\n return result;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * @description - add car hire to basket\r\n */\r\n async addCarHireToBasket(\r\n carHireVehicleAvailibility: CarHireVehicleAvailibility,\r\n carHireQuery: SearchCarHireQueryVariables\r\n ): Promise<boolean> {\r\n if (carHireVehicleAvailibility.unavailable) {\r\n return Promise.resolve(false);\r\n }\r\n const intBasket: InternalBasketInterface =\r\n await this.basketService.getDefaultBasket();\r\n const basket = intBasket?.subject.value;\r\n if (basket) {\r\n const {\r\n co2PerItem,\r\n co2PerPassenger,\r\n displayRecord,\r\n identifiers,\r\n sourceId\r\n } = carHireVehicleAvailibility;\r\n const price = parseFloat(displayRecord?.charges[0]?.amount ?? '0');\r\n return this.basketService.addToBasket(\r\n {\r\n adults: this.adults,\r\n basket: basket.id,\r\n service: sourceId.toString(),\r\n detail: {\r\n pickUpDatetime: new Date(displayRecord.pickup).toISOString(),\r\n dropOffDatetime: new Date(displayRecord.dropoff).toISOString(),\r\n pickUpLocation: {\r\n iata:\r\n this.locationType === LocationTypes.Airport\r\n ? identifiers.locationCode\r\n : '',\r\n name: displayRecord.pickupLocation.name,\r\n address: `${displayRecord.pickupLocation.topLine}, ${displayRecord.pickupLocation.city}`,\r\n postcode: displayRecord.pickupLocation.postCode\r\n },\r\n dropOffLocation: {\r\n iata:\r\n this.locationType === LocationTypes.Airport\r\n ? identifiers.dropOffLocation\r\n : '',\r\n name: displayRecord.returnLocation.name,\r\n address: `${displayRecord.returnLocation.topLine}, ${displayRecord.returnLocation.city}`,\r\n postcode: displayRecord.returnLocation.postCode\r\n },\r\n car: {\r\n type: displayRecord.vehicle.type,\r\n manualTransmission: displayRecord.vehicle.transmission.includes(\r\n CarHireTransmission.Manual\r\n )\r\n },\r\n vendorName: displayRecord.vendor.name,\r\n identifiers: {\r\n dropOffLocation: identifiers.dropOffLocation,\r\n locationCode: identifiers.locationCode,\r\n locationName: identifiers.locationName,\r\n vehType: identifiers.vehType,\r\n vendor: identifiers.vendor\r\n }\r\n },\r\n price,\r\n currency: 'GBP' as CurrencyCode,\r\n searchQuery: carHireQuery,\r\n co2PerItem,\r\n co2PerPassenger,\r\n outboundDate: new Date(displayRecord.pickup).toISOString()\r\n },\r\n intBasket,\r\n this.searchService,\r\n this.travellers\r\n );\r\n }\r\n return Promise.resolve(false);\r\n }\r\n}\r\n","import moment from 'moment';\r\nimport { BaseEnterpriseSearch } from './base-enterprise';\r\nimport { BaseStorageService } from '../services/storage.service';\r\nimport { BaseHelperRoutines } from './helpers';\r\nimport { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs';\r\nimport { Traveller } from '../models/traveller.object';\r\nimport {\r\n AddressForm,\r\n CabhireQuoteResultArray,\r\n NgbDateStruct,\r\n RailAirport,\r\n RecentSearch,\r\n LocationDetails,\r\n LocationTypes\r\n} from '../types/types';\r\nimport { EnterpriseSearchServiceInterface } from '../interfaces/Isearch.service';\r\nimport {\r\n BaseCabhireQuoteFetcher,\r\n CabhireQuoteFetcherType\r\n} from '../fetchers/cabhire-quote-fetcher';\r\nimport {\r\n BasketItem,\r\n CabHireLocation,\r\n CabHireQuote,\r\n CabHireVehicleType,\r\n LocationDetail,\r\n QuerySearchCabHireArgs,\r\n SaveRecentSearchMutationVariables,\r\n SearchCabHireQueryVariables,\r\n SearchFlightsV2QueryVariables,\r\n ServiceType\r\n} from '../types/graphql.types';\r\nimport {\r\n AirportSearchMode,\r\n CabHireEnterpriseSearchInterface,\r\n CabHireTempParams,\r\n TaxiAirport,\r\n TaxiAttribute,\r\n TaxiFormMode,\r\n TransType\r\n} from '../interfaces/Icabhire-enterprise-search';\r\nimport {\r\n EnterpriseBasketServiceInterface,\r\n InternalBasketInterface\r\n} from '../interfaces/Ienterprise-basket.service';\r\nimport { ICheapestPrice } from '../interfaces/cheapest-price';\r\nimport { map, take } from 'rxjs/operators';\r\n\r\nexport class CabHireEnterpriseSearch<CH_Q extends CabhireQuoteFetcherType>\r\n extends BaseEnterpriseSearch<\r\n CabHireTempParams,\r\n CabhireQuoteResultArray,\r\n CabhireQuoteResultArray\r\n >\r\n implements CabHireEnterpriseSearchInterface\r\n{\r\n static readonly STORAGE_SESSION_PARAMS = 'search_cab';\r\n static readonly STORAGE_SESSION_RESULTS = 'results_cab';\r\n private outboundVisibility: BehaviorSubject<boolean>;\r\n private inboundVisibility: BehaviorSubject<boolean>;\r\n public type: ServiceType = ServiceType.Cab;\r\n private travellers: Traveller[];\r\n\r\n airportChange: Subject<TaxiAirport> = new Subject();\r\n\r\n readonly transTypes: TransType[] = [\r\n { key: CabHireVehicleType.Any, value: 'Any (1-8 Passengers)', id: 8 },\r\n {\r\n key: CabHireVehicleType.StandardCar,\r\n value: 'Saloon Car (1-4 Passengers)',\r\n id: 4\r\n },\r\n {\r\n key: CabHireVehicleType.BlackCab,\r\n value: 'Hackney Carriage (1-4 Passengers)',\r\n id: 4\r\n },\r\n {\r\n key: CabHireVehicleType.DdaCar,\r\n value: 'Dda - wheelchair accessible (1-4 Passengers)',\r\n id: 4\r\n },\r\n {\r\n key: CabHireVehicleType.MediumMpv,\r\n value: 'People Carrier (1-7 Passengers)',\r\n id: 7\r\n },\r\n {\r\n key: CabHireVehicleType.ExecutiveCar,\r\n value: 'Executive (1-4 Passengers)',\r\n id: 4\r\n }\r\n ];\r\n readonly attributes: TaxiAttribute[] = [\r\n { enabled: false, key: 'wheelchair', value: 'Wheelchair (On Request)' },\r\n { enabled: false, key: 'call_on_arrival', value: 'Call On Arrival' },\r\n {\r\n enabled: false,\r\n key: 'meet_and_greet',\r\n value: 'Meet And Greet (Charge Applies)'\r\n },\r\n { enabled: false, key: 'wait_and_return', value: 'Wait And Return' }\r\n ];\r\n readonly searchTypes = [\r\n 'One-way'\r\n // , 'Return'\r\n ];\r\n\r\n readonly airportSearchTypes = ['Airport drop off', 'Airport Pick Up'];\r\n readonly criteria = ['Pick Up Time'];\r\n\r\n mode: TaxiFormMode = TaxiFormMode.ADDRESS;\r\n minSelectDate: moment.Moment = moment();\r\n\r\n // getters and setters\r\n private _date: NgbDateStruct = null;\r\n selectedPlaces: any = [];\r\n private _fromLocation: CabHireLocation;\r\n private _toLocation: CabHireLocation;\r\n private _vias: CabHireLocation[] = [null, null, null, null];\r\n\r\n get fromLocation(): CabHireLocation {\r\n return this._fromLocation;\r\n }\r\n\r\n get toLocation(): CabHireLocation {\r\n return this._toLocation;\r\n }\r\n\r\n get date(): NgbDateStruct {\r\n return this._date;\r\n }\r\n\r\n set date(value: NgbDateStruct) {\r\n this._date = value;\r\n this._updateDateTime();\r\n }\r\n\r\n /*\r\n * searchType\r\n */\r\n private _searchType = this.searchTypes[0];\r\n get searchType() {\r\n return this._searchType;\r\n }\r\n\r\n set searchType(value: string) {\r\n this._searchType = value;\r\n }\r\n\r\n /*\r\n * airpoirt searchType\r\n */\r\n\r\n _airportSearchType: AirportSearchMode = AirportSearchMode.DROPOFF;\r\n get airportSearchType(): AirportSearchMode {\r\n return this._airportSearchType;\r\n }\r\n set airportSearchType(mode: AirportSearchMode) {\r\n this._airportSearchType = mode;\r\n if (this.fromAddress || this.toAddress) {\r\n this.switchFromAndToLocation();\r\n }\r\n }\r\n /*\r\n * airpoirt and train station searchType\r\n */\r\n\r\n get fromLocationType(): TaxiFormMode {\r\n return this.tempParams.fromLocationType;\r\n }\r\n set fromLocationType(mode: TaxiFormMode) {\r\n this.tempParams.fromLocationType = mode;\r\n }\r\n get toLocationType(): TaxiFormMode {\r\n return this.tempParams.toLocationType;\r\n }\r\n set toLocationType(mode: TaxiFormMode) {\r\n this.tempParams.toLocationType = mode;\r\n }\r\n /*\r\n * searchCriteria\r\n */\r\n private _searchCriteria = this.criteria[0];\r\n get searchCriteria() {\r\n return this._searchCriteria;\r\n }\r\n\r\n set searchCriteria(value: string) {\r\n this._searchCriteria = value;\r\n }\r\n\r\n /*\r\n * outboundDateTime\r\n */\r\n private _outboundDateTime: moment.Moment = this.helpers.round(\r\n moment(),\r\n moment.duration(15, 'minutes')\r\n );\r\n get outboundDateTime() {\r\n return this._outboundDateTime;\r\n }\r\n\r\n set outboundDateTime(value: moment.Moment) {\r\n this._outboundDateTime = value;\r\n }\r\n\r\n /*\r\n * returnDateTime\r\n */\r\n private _returnDateTime: moment.Moment = this.helpers.round(\r\n moment(),\r\n moment.duration(15, 'minutes')\r\n );\r\n get returnDateTime() {\r\n return this._returnDateTime;\r\n }\r\n\r\n set returnDateTime(value: moment.Moment) {\r\n this._returnDateTime = value;\r\n }\r\n\r\n /*\r\n * flightNumber\r\n */\r\n private _flightNumber: string = '';\r\n get flightNumber() {\r\n return this._flightNumber;\r\n }\r\n set flightNumber(value: string) {\r\n this._flightNumber = value;\r\n }\r\n\r\n /*\r\n * airport\r\n */\r\n\r\n get airport() {\r\n return this.tempParams.airport;\r\n }\r\n set airport(value: TaxiAirport) {\r\n this.tempParams.airport = value;\r\n }\r\n\r\n /*\r\n * terminal\r\n */\r\n private _terminal: string = null;\r\n get terminal() {\r\n return this._terminal;\r\n }\r\n set terminal(value: string) {\r\n this._terminal = value;\r\n }\r\n\r\n private _time: string = null;\r\n get time(): string {\r\n return this._time;\r\n }\r\n\r\n set time(value: string) {\r\n this._time = value;\r\n this._updateDateTime();\r\n }\r\n\r\n get departs(): moment.Moment {\r\n return this.tempParams.departs;\r\n }\r\n\r\n set departs(value: moment.Moment) {\r\n this.tempParams.departs = value.isValid ? value : null;\r\n if (value && value.isValid()) {\r\n this._date = this.helpers.momentToNgDate(value);\r\n this._time = this.helpers.formatTimeColon(value);\r\n }\r\n this._isValid();\r\n }\r\n\r\n // get fromLocation(): CabHireLocation {\r\n // return this._fromLocation;\r\n // }\r\n\r\n // set fromLocation(value: CabHireLocation) {\r\n // this._fromLocation = value;\r\n // this._isValid();\r\n // }\r\n\r\n // get toLocation(): CabHireLocation {\r\n // return this._toLocation;\r\n // }\r\n\r\n // set toLocation(value: CabHireLocation) {\r\n // this._toLocation = value;\r\n // this._isValid();\r\n // }\r\n\r\n get adults(): number {\r\n return this.tempParams.adults;\r\n }\r\n\r\n set adults(value: number) {\r\n this.tempParams.adults = value;\r\n this._isValid();\r\n }\r\n\r\n get children(): number {\r\n return this.tempParams.children;\r\n }\r\n\r\n set children(value: number) {\r\n this.tempParams.children = value;\r\n this._isValid();\r\n }\r\n\r\n get infants(): number {\r\n return this.tempParams.infants;\r\n }\r\n\r\n set infants(value: number) {\r\n this.tempParams.infants = value;\r\n this._isValid();\r\n }\r\n\r\n get countryCode(): string {\r\n return this.tempParams.countryCode;\r\n }\r\n\r\n set countryCode(value: string) {\r\n this.tempParams.countryCode = value;\r\n this._isValid();\r\n }\r\n\r\n get vias(): CabHireLocation[] {\r\n return this._vias;\r\n }\r\n\r\n set vias(value: CabHireLocation[]) {\r\n this._vias = value;\r\n this._isValid();\r\n }\r\n\r\n get viasFrom(): AddressForm {\r\n return this.tempParams.viasFrom;\r\n }\r\n\r\n set viasFrom(value: AddressForm) {\r\n this.tempParams.viasFrom = value;\r\n this._vias[0] = value ? this.createCabHireLocation(value) : null;\r\n this._isValid();\r\n }\r\n\r\n get viasTo(): AddressForm {\r\n return this.tempParams.viasTo;\r\n }\r\n\r\n set viasTo(value: AddressForm) {\r\n this.tempParams.viasTo = value;\r\n this._vias[1] = value ? this.createCabHireLocation(value) : null;\r\n this._isValid();\r\n }\r\n\r\n get vehicleType(): CabHireVehicleType {\r\n return this.tempParams.vehicleType;\r\n }\r\n\r\n set vehicleType(value: CabHireVehicleType) {\r\n this.tempParams.vehicleType = value;\r\n this._isValid();\r\n }\r\n\r\n get fromAddress(): AddressForm {\r\n return this.tempParams.fromAddress;\r\n }\r\n\r\n set fromAddress(value: AddressForm) {\r\n this.tempParams.fromAddress = value;\r\n this._fromLocation = value ? this.createCabHireLocation(value) : null;\r\n this._isValid();\r\n }\r\n\r\n get fromStation(): RailAirport {\r\n return this.tempParams.fromStation;\r\n }\r\n\r\n set fromStation(value: RailAirport) {\r\n this.tempParams.fromStation = value;\r\n\r\n this._fromLocation = value\r\n ? {\r\n address: value.destination,\r\n postcode: value.postcode\r\n }\r\n : null;\r\n this._isValid();\r\n }\r\n\r\n get toAddress(): AddressForm {\r\n return this.tempParams.toAddress;\r\n }\r\n\r\n set toAddress(value: AddressForm) {\r\n this.tempParams.toAddress = value;\r\n this._toLocation = value ? this.createCabHireLocation(value) : null;\r\n this._isValid();\r\n }\r\n\r\n get toStation(): RailAirport {\r\n return this.tempParams.toStation;\r\n }\r\n\r\n set toStation(value: RailAirport) {\r\n this.tempParams.toStation = value;\r\n this._toLocation = value\r\n ? {\r\n address: value.destination,\r\n postcode: value.postcode\r\n }\r\n : null;\r\n this._isValid();\r\n }\r\n\r\n constructor(\r\n private cabfetcher: BaseCabhireQuoteFetcher<CH_Q>,\r\n private helpers: BaseHelperRoutines,\r\n storageService: BaseStorageService,\r\n private searchService: EnterpriseSearchServiceInterface,\r\n private basketService: EnterpriseBasketServiceInterface\r\n ) {\r\n super(storageService);\r\n const data: {\r\n tempParams: CabHireTempParams;\r\n } = storageService.getSessionItem(\r\n CabHireEnterpriseSearch.STORAGE_SESSION_PARAMS\r\n ) || {\r\n tempParams: {} as CabHireTempParams\r\n };\r\n\r\n // const momentDateTime = data.query.departs\r\n // ? moment(data.query.departs)\r\n // : moment();\r\n\r\n this.updateTempParams(searchService.makeCabHireQuery(data.tempParams));\r\n\r\n if (data.tempParams.fromAddress) {\r\n this.fromAddress = data.tempParams.fromAddress;\r\n }\r\n\r\n if (data.tempParams.toAddress) {\r\n this.toAddress = data.tempParams.toAddress;\r\n }\r\n\r\n if (searchService.shouldAddTravellerSubscription()) {\r\n searchService.travellerInformation.subscribe(\r\n (travellers: Traveller[]) => {\r\n this.travellers = travellers;\r\n const splitTravellers = this.helpers.selectedTravellers(\r\n travellers,\r\n ServiceType.Cab\r\n );\r\n this.tempParams.adults = splitTravellers.adults.length;\r\n this.tempParams.children = splitTravellers.children.length;\r\n this._isValid();\r\n }\r\n );\r\n }\r\n\r\n const results =\r\n storageService.getSessionItemAsList<CabhireQuoteResultArray>(\r\n this.resultsSessionName\r\n ) || [];\r\n this.fullResults = results;\r\n this._cheapestResultPrice = this.updateLowestPrice(results);\r\n this.results.next(results || []);\r\n this._isValid();\r\n this.outboundVisibility = new BehaviorSubject<boolean>(false);\r\n this.inboundVisibility = new BehaviorSubject<boolean>(false);\r\n }\r\n\r\n protected resultsSessionName =\r\n CabHireEnterpriseSearch.STORAGE_SESSION_RESULTS;\r\n\r\n protected resetQuery(): void {\r\n this.updateTempParams(this.searchService.makeCabHireQuery());\r\n this._isValid();\r\n }\r\n\r\n public resetParams(): void {\r\n this.reset();\r\n this.resetQuery();\r\n this.results.next([]);\r\n }\r\n\r\n private _isValid() {\r\n if (!this.doChecks) {\r\n return;\r\n }\r\n this.storageService.setSessionItem(\r\n CabHireEnterpriseSearch.STORAGE_SESSION_PARAMS,\r\n {\r\n tempParams: this.tempParams\r\n }\r\n );\r\n\r\n this.validationMessages = [];\r\n if (!this.tempParams.fromAddress) {\r\n this.validationMessages.push('From - Enter a location or postcode.');\r\n }\r\n\r\n if (!this.tempParams.toAddress) {\r\n this.validationMessages.push('To - Enter a location or postcode.');\r\n }\r\n\r\n if (this.tempParams.departs.unix() < moment().unix()) {\r\n this.validationMessages.push('Taxi journey cannot be in the past.');\r\n }\r\n\r\n if (this.tempParams.adults + this.tempParams.children < 1) {\r\n this.validationMessages.push('There must be at least 1 traveller');\r\n }\r\n\r\n this.isValid.next(this.validationMessages.length === 0);\r\n this.messages.next(this.validationMessages);\r\n }\r\n\r\n private _updateDateTime() {\r\n if (this._date && this._time) {\r\n this.departs = this.helpers.ngDateToMoment(this._date, this._time);\r\n }\r\n }\r\n\r\n startSearch(): Promise<boolean> {\r\n this.results.next([]);\r\n if (this.isValid.value) {\r\n const query = this.getSearchQuery();\r\n this.searchService.saveRecentSearch(this.getRecentSearchQuery(query));\r\n\r\n return this._startSearch(\r\n this.cabfetcher.fetchList(\r\n this.helpers.removeNulls<QuerySearchCabHireArgs>(query)\r\n )\r\n );\r\n } else {\r\n return Promise.resolve(false);\r\n }\r\n }\r\n\r\n getRecentSearchQuery(query: QuerySearchCabHireArgs): SaveRecentSearchMutationVariables {\r\n return {\r\n serviceType: ServiceType.Cab,\r\n searchArgs: query,\r\n travelDate: this.departs.format(),\r\n travellers: this.helpers.getTravellersId(this.travellers)\r\n };\r\n }\r\n\r\n startRecentSearch(recentSearch: RecentSearch): void{\r\n this.departs = moment(recentSearch.searchArgs.departs);\r\n this.vehicleType = recentSearch.searchArgs.vehicleType;\r\n\r\n combineLatest([\r\n this.getStationOrAirport(recentSearch.searchArgs.fromLocation.address),\r\n this.getStationOrAirport(recentSearch.searchArgs.toLocation.address)\r\n ]).subscribe(([fromStationOrAirport, toStationOrAirport]) => {\r\n if (fromStationOrAirport.length) {\r\n this.fromStation = this.getStationOrAirportAdress(fromStationOrAirport[0]);\r\n this.fromAddress = this.convertStationOrAirportLocation(recentSearch.searchArgs.fromLocation.address, recentSearch.searchArgs.fromLocation.postcode);\r\n } else {\r\n this.fromAddress = this.convertAddressLocation(recentSearch.searchArgs.fromLocation.address, recentSearch.searchArgs.fromLocation.postcode);\r\n }\r\n if (toStationOrAirport.length) {\r\n this.toStation = this.getStationOrAirportAdress(toStationOrAirport[0]);\r\n this.toAddress = this.convertStationOrAirportLocation(recentSearch.searchArgs.toLocation.address, recentSearch.searchArgs.toLocation.postcode);\r\n } else {\r\n this.toAddress = this.convertAddressLocation(recentSearch.searchArgs.toLocation.address, recentSearch.searchArgs.toLocation.postcode);\r\n }\r\n if(recentSearch.searchArgs.vias[0]) {\r\n this.getStationOrAirport(recentSearch.searchArgs.vias[0].address).subscribe((viaFromStationOrAirport) => {\r\n if (viaFromStationOrAirport.length) {\r\n this.viasFrom = this.convertStationOrAirportLocation(recentSearch.searchArgs.vias[0].address, recentSearch.searchArgs.vias[0].postcode);\r\n } else {\r\n this.viasFrom = this.convertAddressLocation(recentSearch.searchArgs.vias[0].address, recentSearch.searchArgs.vias[0].postcode);\r\n }\r\n this.searchService.startSearches();\r\n });\r\n }\r\n if(recentSearch.searchArgs.vias[1]) {\r\n this.getStationOrAirport(recentSearch.searchArgs.vias[1].address).subscribe((viaToStationOrAirport) => {\r\n if (viaToStationOrAirport.length) {\r\n this.viasTo = this.convertStationOrAirportLocation(recentSearch.searchArgs.vias[1].address, recentSearch.searchArgs.vias[1].postcode);\r\n } else {\r\n this.viasTo = this.convertAddressLocation(recentSearch.searchArgs.vias[1].address, recentSearch.searchArgs.vias[1].postcode);\r\n }\r\n \r\n this.searchService.startSearches();\r\n });\r\n }\r\n \r\n this.searchService.startSearches();\r\n });\r\n\r\n }\r\n\r\n getSearchQuery(): QuerySearchCabHireArgs {\r\n const query: QuerySearchCabHireArgs = {\r\n adults: this.tempParams.adults,\r\n children: this.tempParams.children,\r\n departs: this.tempParams.departs,\r\n fromLocation: this.createCabHireLocation(this.tempParams.fromAddress),\r\n toLocation: this.createCabHireLocation(this.tempParams.toAddress),\r\n infants: 0,\r\n vehicleType: this.vehicleType,\r\n vias: this._vias,\r\n };\r\n return this.helpers.removeNulls<QuerySearchCabHireArgs>(query);\r\n }\r\n\r\n updateOutboundAddress(location: any, placeDescription?: string): void {\r\n this.tempParams.fromAddress = this.getAddressFormat(\r\n location,\r\n placeDescription\r\n );\r\n }\r\n\r\n updateInboundAddress(location: any, placeDescription?: string): void {\r\n this.tempParams.toAddress = this.getAddressFormat(\r\n location,\r\n placeDescription\r\n );\r\n }\r\n\r\n private createCabHireLocation(location: AddressForm): CabHireLocation {\r\n return {\r\n address: [\r\n location?.Terminal,\r\n location?.House,\r\n location?.Street,\r\n location?.Town,\r\n location?.Country\r\n ]\r\n .filter((item: string): boolean => !!item)\r\n .join(','),\r\n postcode: location?.PostCode\r\n };\r\n }\r\n\r\n matchAddresses() {\r\n this._toLocation = this.createCabHireLocation(this.tempParams.toAddress);\r\n this._fromLocation = this.createCabHireLocation(\r\n this.tempParams.fromAddress\r\n );\r\n this._isValid();\r\n }\r\n\r\n sortBy(asc?: boolean) {\r\n let results = this.helpers.clone(this.fullResults);\r\n if (asc) {\r\n results = results.sort(\r\n (a: CabHireQuote, b: CabHireQuote) => b.price - a.price\r\n );\r\n } else {\r\n results = results.sort(\r\n (a: CabHireQuote, b: CabHireQuote) => a.price - b.price\r\n );\r\n }\r\n this.results.next(results);\r\n }\r\n\r\n // ! stuff to go in a postcode servie\r\n\r\n getAddressFormat(location: any, placeDescription?: string) {\r\n return {\r\n House: this.getAddressFromPlaceDetails(location, [\r\n 'floor',\r\n 'street_number',\r\n 'premise'\r\n ]),\r\n Street: this.getAddressFromPlaceDetails(location, [\r\n 'route',\r\n 'street_name',\r\n 'establishment'\r\n ]),\r\n Town: this.getAddressFromPlaceDetails(location, [\r\n 'postal_town',\r\n 'administrative_area_level_2',\r\n 'locality'\r\n ]),\r\n PostCode: this.getAddressFromPlaceDetails(location, ['postal_code']),\r\n Country: this.getAddressFromPlaceDetails(location, ['country']),\r\n placeDescription\r\n };\r\n }\r\n\r\n getAddressFromPlaceDetails(placeDetails: any, types: string[]): string {\r\n let addressProp = null;\r\n if (placeDetails && Array.isArray(placeDetails)) {\r\n for (const type of types) {\r\n const prop = placeDetails.filter((pd) => {\r\n return Array.isArray(pd.types) && pd.types.includes(type);\r\n })[0];\r\n\r\n if (prop) {\r\n addressProp = prop.long_name;\r\n break;\r\n }\r\n }\r\n }\r\n return addressProp;\r\n }\r\n\r\n getAddressFromAirportDetails(\r\n airportDetails: LocationDetail,\r\n airportName: string\r\n ) {\r\n console.log(airportDetails);\r\n let address: AddressForm = null;\r\n if (airportDetails) {\r\n address = {\r\n Country: airportDetails.country,\r\n Street: airportDetails.road,\r\n PostCode: airportDetails.postcode,\r\n Town: airportDetails.city,\r\n placeDescription: airportName,\r\n House: airportName\r\n };\r\n }\r\n return address;\r\n }\r\n\r\n setLocationFromAirport(airportDetails: LocationDetail, airportName: string) {\r\n const address = this.getAddressFromAirportDetails(\r\n airportDetails,\r\n airportName\r\n );\r\n if (this.mode === TaxiFormMode.STATION) {\r\n if (this.airportSearchType === AirportSearchMode.PICKUP) {\r\n this.fromAddress = address;\r\n } else {\r\n this.toAddress = address;\r\n }\r\n }\r\n }\r\n\r\n addToSelectedPlaces(address: any) {\r\n this.selectedPlaces.push(address);\r\n }\r\n\r\n setOutboundFormVisibility(showForm: boolean): void {\r\n this.outboundVisibility.next(showForm);\r\n }\r\n\r\n setInboundFormVisibility(showForm: boolean): void {\r\n this.inboundVisibility.next(showForm);\r\n }\r\n\r\n getOutboundFormVisibility(): BehaviorSubject<boolean> {\r\n return this.outboundVisibility;\r\n }\r\n\r\n getInboundFormVisibility(): BehaviorSubject<boolean> {\r\n return this.inboundVisibility;\r\n }\r\n\r\n updateFromPreviousSearches(\r\n previousItems: Record<ServiceType, BasketItem>\r\n ): void {\r\n const flightItem: SearchFlightsV2QueryVariables =\r\n previousItems[ServiceType.Flight]?.searchQuery;\r\n if (flightItem) {\r\n // TODO flights haven't been done yet.\r\n }\r\n }\r\n\r\n getTransType(): string {\r\n const transTypeIndex = this.tempParams.vehicleType;\r\n return this.transTypes.find((x) => x.key === transTypeIndex)?.value || '';\r\n }\r\n\r\n getPassengers = (): string => {\r\n const adults = this.adults;\r\n const children = this.children;\r\n let passengers = `${adults} Adult`;\r\n\r\n if (Number(adults) !== 1) {\r\n passengers += 's';\r\n }\r\n if (Number(children) === 1) {\r\n passengers += `, ${children} Child`;\r\n }\r\n\r\n if (Number(children) > 1) {\r\n passengers += `, ${children} Children`;\r\n }\r\n return passengers;\r\n return '';\r\n };\r\n\r\n private getStationOrAirport(text: string): Observable<LocationDetails[]>{\r\n return this.searchService.getStationsAndAirportsList(text, null, this.isLoading).pipe(\r\n take(1),\r\n map((res: LocationDetails[]) => {\r\n return res;\r\n })\r\n );\r\n };\r\n\r\n private getStationOrAirportAdress(stationOrAirport: LocationDetails): any {\r\n if (stationOrAirport.type === LocationTypes.Airport) {\r\n return {\r\n name: stationOrAirport.name\r\n };\r\n } else if (stationOrAirport.type === LocationTypes.TrainStation) {\r\n return {\r\n name: stationOrAirport.name\r\n }\r\n }\r\n }\r\n\r\n private convertStationOrAirportLocation(address: string, postcode: string) {\r\n return {\r\n House: address,\r\n PostCode: postcode,\r\n }\r\n }\r\n\r\n private convertAddressLocation(address: string, postcode: string) {\r\n let locationArray = address.split(',');\r\n let street = '';\r\n let town = locationArray[locationArray.length-2];\r\n \r\n for (let index = 1; index < locationArray.length-2; index++) {\r\n street += locationArray[index] + ' ';\r\n }\r\n return {\r\n Country: address.slice(-2),\r\n House: locationArray[0],\r\n PostCode: postcode,\r\n Street: street,\r\n Town: town\r\n }\r\n }\r\n\r\n async addCabHireToBasket(\r\n cabHireQuote: CabHireQuote,\r\n cabHireQuery: SearchCabHireQueryVariables\r\n ): Promise<boolean> {\r\n if (cabHireQuote.unavailable) {\r\n return Promise.resolve(false);\r\n }\r\n const intBasket: InternalBasketInterface =\r\n await this.basketService.getDefaultBasket();\r\n const basket = intBasket?.subject.value;\r\n if (basket) {\r\n return this.basketService.addToBasket(\r\n {\r\n adults: cabHireQuery.adults,\r\n basket: basket.id,\r\n service: cabHireQuote.sourceId.toString(),\r\n detail: {\r\n id: cabHireQuote.id,\r\n departs: cabHireQuery.departs.format(),\r\n supplierName: cabHireQuote.supplierName,\r\n estimatedCO2: cabHireQuote.estimatedCO2,\r\n fromLocation: {\r\n address: cabHireQuery.fromLocation.address,\r\n postcode: cabHireQuery.fromLocation.postcode\r\n },\r\n toLocation: {\r\n address: cabHireQuery.toLocation.address,\r\n postcode: cabHireQuery.toLocation.postcode\r\n },\r\n vehicleType: cabHireQuery.vehicleType\r\n },\r\n price: cabHireQuote.price,\r\n currency: cabHireQuote.currency,\r\n searchQuery: cabHireQuery,\r\n co2PerItem: cabHireQuote.co2PerItem,\r\n co2PerPassenger: cabHireQuote.co2PerPassenger,\r\n outboundDate: cabHireQuery.departs.format()\r\n },\r\n intBasket,\r\n this.searchService,\r\n this.travellers\r\n );\r\n }\r\n return Promise.resolve(false); // TODO should this throw an error?\r\n }\r\n\r\n switchFromAndToLocation() {\r\n const newFromAddress = { ...this.toAddress };\r\n const newToAddress = { ...this.fromAddress };\r\n this.fromAddress = newFromAddress;\r\n this.toAddress = newToAddress;\r\n }\r\n\r\n updateLowestPrice(results: CabHireQuote[]): ICheapestPrice {\r\n if (!results.length) return null;\r\n const currency = results[0].currency;\r\n return results.reduce(\r\n (cheapestPrice: ICheapestPrice, result: CabHireQuote) => {\r\n const price = result.price;\r\n if (cheapestPrice.amount > price) cheapestPrice.amount = price;\r\n return cheapestPrice;\r\n },\r\n { amount: Number.MAX_SAFE_INTEGER, currencyCode: currency }\r\n );\r\n }\r\n}\r\n","export enum FlightSearchType {\r\n return = 'return',\r\n oneWay = 'oneWay',\r\n multiCity = 'multiCity'\r\n}\r\n","import moment from 'moment';\r\nimport { BaseEnterpriseSearch } from './base-enterprise';\r\nimport { BaseStorageService } from '../services/storage.service';\r\nimport { BaseHelperRoutines } from './helpers';\r\nimport { Traveller } from '../models/traveller.object';\r\nimport { BehaviorSubject, combineLatest } from 'rxjs';\r\nimport { ValueDisplay } from '../interfaces/value-display';\r\nimport { FlightFilters } from '../interfaces/flight-filters.interface';\r\nimport { SelectFilter } from '../interfaces/select-filter.interface';\r\nimport {\r\n AddItemToBasketMutationVariables,\r\n BasketItem,\r\n CurrencyCode,\r\n DestinationEntry,\r\n FareType,\r\n FlightCabinClass,\r\n FlightItinerary,\r\n FlightJourney,\r\n FlightPassengerObject,\r\n FlightPassengerType,\r\n GroupedFieldsFragment,\r\n ItinerarySummary,\r\n MatchingFlights,\r\n SaveRecentSearchMutationVariables,\r\n SearchFlightsV2QueryVariables,\r\n ServiceType\r\n} from '../types/graphql.types';\r\nimport {\r\n FlightAllQuoteResult,\r\n FlightGroupedQuoteResult,\r\n FlightItineraryClass,\r\n FlightQuoteResultArray,\r\n NgbDateStruct,\r\n OBTAirportDetails,\r\n OBTAirlinesDetails,\r\n FlightDirectionEnum,\r\n GroupedFlights,\r\n FlightItineraryWithSelected,\r\n RecentSearch\r\n} from '../types/types';\r\nimport {\r\n BaseFlightQuoteFetcher,\r\n FlightQuoteFetcherType\r\n} from '../fetchers/flight-quote.fetcher';\r\nimport {\r\n FullUserDetails,\r\n UserServiceInterface\r\n} from '../interfaces/Iuser.service';\r\nimport { EnterpriseSearchServiceInterface } from '../interfaces/Isearch.service';\r\nimport {\r\n FlightEnterpriseSearchInterface,\r\n FlightTempParams\r\n} from '../interfaces/Iflight-enterprise-search';\r\nimport { ICheapestPrice } from '../interfaces/cheapest-price';\r\nimport { FlightSearchType } from './flight-search-type.enum';\r\nimport { IMultiDestination } from '../interfaces/flight-multi-destination.interface';\r\nimport {\r\n EnterpriseBasketServiceInterface,\r\n InternalBasketInterface\r\n} from '../interfaces/Ienterprise-basket.service';\r\nexport interface AllowedClass {\r\n name: string;\r\n type: FlightCabinClass | null;\r\n}\r\n\r\nexport interface FlightOperator {\r\n code: string;\r\n name: string;\r\n}\r\n\r\nexport type AllowedClasses = AllowedClass[];\r\n\r\nexport enum TimeWindow {\r\n Anytime = 'Anytime',\r\n Depart = 'Depart By',\r\n Arrive = 'Arrive By'\r\n}\r\n\r\nexport enum SortTypes {\r\n CheapestFirst = 'C',\r\n MostExpensiveFirst = 'M',\r\n FastestFirst = 'F',\r\n PreferredFirst = 'P',\r\n LowestEmissions = 'L'\r\n}\r\n\r\nexport type FlightGroups =\r\n | 'LiteEconomy'\r\n | 'Economy'\r\n | 'EconomyNoBags'\r\n | 'EconomyRestricted'\r\n | 'PremiumEconomy'\r\n | 'Business'\r\n | 'PremiumBusiness'\r\n | 'First'\r\n | 'PremiumFirst';\r\n\r\nexport type RestrictedFlightGroups =\r\n | 'Economy'\r\n | 'EconomyNoBags'\r\n | 'EconomyRestricted'\r\n | 'PremiumEconomy'\r\n | 'Business'\r\n | 'First';\r\n\r\ninterface FlightSessionType {\r\n results: FlightQuoteResultArray;\r\n groupData: { [key: number]: number[] };\r\n grouped: GroupedFlights;\r\n query: SearchFlightsV2QueryVariables;\r\n}\r\n\r\nexport class FlightEnterpriseSearch<FQ_Q extends FlightQuoteFetcherType>\r\n extends BaseEnterpriseSearch<\r\n FlightTempParams,\r\n FlightAllQuoteResult,\r\n FlightQuoteResultArray\r\n >\r\n implements FlightEnterpriseSearchInterface\r\n{\r\n static readonly STORAGE_SESSION_PARAMS = 'search_flight';\r\n static readonly STORAGE_SESSION_RESULTS = 'results_flight';\r\n\r\n public type: ServiceType = ServiceType.Flight;\r\n\r\n avaliableClasses: BehaviorSubject<AllowedClasses> =\r\n new BehaviorSubject<AllowedClasses>([]);\r\n timeCriteriaOptions: BehaviorSubject<TimeWindow[]> = new BehaviorSubject<\r\n TimeWindow[]\r\n >([]);\r\n flightOperators: BehaviorSubject<FlightOperator[]> = new BehaviorSubject<\r\n FlightOperator[]\r\n >([]);\r\n\r\n private _negotiated: boolean = false;\r\n private _nearby_airports: boolean = false;\r\n\r\n private _timeArray: ValueDisplay[];\r\n private _sortArray: ValueDisplay[] = [\r\n { display: 'Cheapest First', value: SortTypes.CheapestFirst },\r\n { display: 'Most Expensive First', value: SortTypes.MostExpensiveFirst },\r\n { display: 'Fastest First', value: SortTypes.FastestFirst },\r\n { display: 'Preferred Fares First', value: SortTypes.PreferredFirst },\r\n { display: 'Lowest Co2 Emissions First', value: SortTypes.LowestEmissions }\r\n ];\r\n\r\n private _fareTypeArray: ValueDisplay[] = [\r\n { value: FareType.Flexible, display: 'Flexible' },\r\n { value: FareType.Leisure, display: 'Leisure' },\r\n { value: FareType.Lowest, display: 'Lowest' },\r\n { value: FareType.Negotiated, display: 'Negotiated' },\r\n { value: FareType.NonNegotiated, display: 'Non-Negotiated' },\r\n { value: FareType.RequestFareRules, display: 'Request Fare Rules' },\r\n { value: FareType.SelectAndPro, display: 'Select & Pro' }\r\n ];\r\n\r\n public minimumOutBoundDate = {\r\n year: moment().year(),\r\n month: moment().month() + 1,\r\n day: moment().date()\r\n };\r\n\r\n public minimumInBoundDate = {\r\n year: moment().year(),\r\n month: moment().month() + 1,\r\n day: moment().date()\r\n };\r\n private _outDate: NgbDateStruct;\r\n private _outTime: string;\r\n private _inDate: NgbDateStruct;\r\n private _inTime: string;\r\n private _destinationAirport: any;\r\n private _originAirport: any;\r\n private _passengers: any;\r\n private groupedObject: FlightItineraryWithSelected[];\r\n protected flightsToGroup: { [key: number]: number[] } = {};\r\n protected resultQuery: SearchFlightsV2QueryVariables;\r\n protected grouped: GroupedFlights = null;\r\n travellers: Traveller[] = null;\r\n protected resultsSessionName = FlightEnterpriseSearch.STORAGE_SESSION_RESULTS;\r\n selectedGroupFlight: FlightItineraryWithSelected;\r\n private _showHotelForm: boolean = false;\r\n private _hotelSearchRequested: boolean = false;\r\n\r\n public get timeArray() {\r\n this._timeArray =\r\n this._timeArray ||\r\n Array(96)\r\n .fill(0)\r\n .map((_, index: number) => {\r\n return {\r\n value:\r\n Math.floor(index / 4)\r\n .toString()\r\n .padStart(2, '0') +\r\n ':' +\r\n ((index % 4) * 15).toString().padStart(2, '0'),\r\n display:\r\n Math.floor(index / 4)\r\n .toString()\r\n .padStart(2, '0') +\r\n ':' +\r\n ((index % 4) * 15).toString().padStart(2, '0')\r\n };\r\n });\r\n return this._timeArray;\r\n }\r\n\r\n public get preferredCarriers(): OBTAirlinesDetails[] {\r\n return this.tempParams.preferredCarriers;\r\n }\r\n\r\n public set preferredCarriers(value: OBTAirlinesDetails[]) {\r\n this.tempParams.preferredCarriers = value;\r\n this._isValid();\r\n }\r\n\r\n public get operator1(): OBTAirlinesDetails {\r\n return this.tempParams.preferredCarriers[0];\r\n }\r\n\r\n public set operator1(value: OBTAirlinesDetails) {\r\n this.tempParams.preferredCarriers[0] = value;\r\n this._isValid();\r\n }\r\n public get operator2(): OBTAirlinesDetails {\r\n return this.tempParams.preferredCarriers[1];\r\n }\r\n\r\n public set operator2(value: OBTAirlinesDetails) {\r\n this.tempParams.preferredCarriers[1] = value;\r\n this._isValid();\r\n }\r\n public get operator3(): OBTAirlinesDetails {\r\n return this.tempParams.preferredCarriers[2];\r\n }\r\n\r\n public set operator3(value: OBTAirlinesDetails) {\r\n this.tempParams.preferredCarriers[2] = value;\r\n this._isValid();\r\n }\r\n public get operator4(): OBTAirlinesDetails {\r\n return this.tempParams.preferredCarriers[3];\r\n }\r\n\r\n public set operator4(value: OBTAirlinesDetails) {\r\n this.tempParams.preferredCarriers[3] = value;\r\n this._isValid();\r\n }\r\n\r\n private _minDate: NgbDateStruct;\r\n public get minDate(): NgbDateStruct {\r\n this._minDate = this._minDate || this.helpers.momentToNgDate(moment());\r\n return this._minDate;\r\n }\r\n\r\n public get adults(): number {\r\n return this.tempParams.adults;\r\n }\r\n\r\n public set adults(value: number) {\r\n this.tempParams.adults = Number(value);\r\n this.updateTravellers();\r\n }\r\n\r\n public get children(): number {\r\n return this.tempParams.children;\r\n }\r\n\r\n public set children(value: number) {\r\n this.tempParams.children = Number(value);\r\n this.updateTravellers();\r\n }\r\n\r\n public get departLocation(): string | OBTAirportDetails {\r\n return this.tempParams.departLocation;\r\n }\r\n\r\n public set departLocation(value: string | OBTAirportDetails) {\r\n this.tempParams.departLocation = value;\r\n if (typeof value === 'string') {\r\n this._originAirport = '';\r\n } else if (value && value.gateway) {\r\n this._originAirport = value.gateway;\r\n } else {\r\n this._originAirport = null;\r\n }\r\n this._isValid();\r\n }\r\n\r\n public get queryOriginAiport(): string {\r\n return this._originAirport;\r\n }\r\n\r\n public get queryDestinationAiport(): string {\r\n return this._destinationAirport;\r\n }\r\n\r\n public get departDate(): NgbDateStruct {\r\n return this._outDate;\r\n }\r\n\r\n public set departDate(value: NgbDateStruct) {\r\n this._outDate = value;\r\n this.outBoundDate = this.helpers.ngDateToMoment(\r\n this._outDate,\r\n this._outTime\r\n );\r\n }\r\n\r\n public get departTime(): string {\r\n return this._outTime;\r\n }\r\n\r\n public set departTime(value: string) {\r\n this._outTime = value;\r\n this.outBoundDate = this.helpers.ngDateToMoment(\r\n this._outDate,\r\n this._outTime\r\n );\r\n }\r\n\r\n public get outBoundDate(): moment.Moment {\r\n return this.tempParams.outBoundDate;\r\n }\r\n\r\n public set outBoundDate(value: moment.Moment) {\r\n this.tempParams.outBoundDate = value.isValid() ? value : null;\r\n this.minimumInBoundDate = {\r\n year: value.year(),\r\n month: value.month() + 1,\r\n day: value.date()\r\n };\r\n\r\n if (\r\n this.tempParams.outBoundDate &&\r\n this.tempParams.inboundDate &&\r\n this.tempParams.outBoundDate.isAfter(this.tempParams.inboundDate)\r\n ) {\r\n this.inboundDate = moment(this.tempParams.outBoundDate).add(1, 'day');\r\n }\r\n this._outDate = this.helpers.momentToNgDate(value);\r\n this._outTime = this.helpers.formatTimeColon(value);\r\n this._isValid();\r\n }\r\n\r\n public get returnDate(): NgbDateStruct {\r\n return this._inDate;\r\n }\r\n\r\n public set returnDate(value: NgbDateStruct) {\r\n this._inDate = value;\r\n this.inboundDate = this.helpers.ngDateToMoment(this._inDate, this._inTime);\r\n }\r\n\r\n public get arriveTime(): string {\r\n return this._inTime;\r\n }\r\n\r\n public set arriveTime(value: string) {\r\n this._inTime = value;\r\n this.inboundDate = this.helpers.ngDateToMoment(this._inDate, this._inTime);\r\n }\r\n\r\n public get inboundDate(): moment.Moment {\r\n return this.tempParams.inboundDate;\r\n }\r\n\r\n public set inboundDate(value: moment.Moment) {\r\n this.tempParams.inboundDate = value.isValid() ? value : null;\r\n this._inDate = this.helpers.momentToNgDate(value);\r\n this._inTime = this.helpers.formatTimeColon(value);\r\n this._isValid();\r\n }\r\n\r\n public get arriveLocation(): string | OBTAirportDetails {\r\n return this.tempParams.arriveLocation;\r\n }\r\n\r\n public set arriveLocation(value: string | OBTAirportDetails) {\r\n this.tempParams.arriveLocation = value;\r\n if (typeof value === 'string') {\r\n this._destinationAirport = '';\r\n } else if (value && value.gateway) {\r\n this._destinationAirport = value.gateway;\r\n } else {\r\n this._destinationAirport = null;\r\n }\r\n this._isValid();\r\n }\r\n\r\n get cabinClass(): FlightCabinClass | null {\r\n return this.tempParams.cabinClass;\r\n }\r\n\r\n set cabinClass(value: FlightCabinClass | null) {\r\n this.tempParams.cabinClass = value;\r\n this._isValid();\r\n }\r\n\r\n get returnCabinClass(): FlightCabinClass | null {\r\n return this.tempParams.returnCabinClass;\r\n }\r\n\r\n set returnCabinClass(value: FlightCabinClass | null) {\r\n this.tempParams.returnCabinClass = value;\r\n this._isValid();\r\n }\r\n\r\n get chosenSearchType(): FlightSearchType {\r\n return this.tempParams.chosenSearchType;\r\n }\r\n\r\n set chosenSearchType(type: FlightSearchType) {\r\n this.tempParams.chosenSearchType = type;\r\n }\r\n\r\n get isReturn(): boolean {\r\n return this.tempParams.chosenSearchType === FlightSearchType.return;\r\n }\r\n\r\n get outTimeCriteria(): TimeWindow {\r\n return this.tempParams.outTimeCriteria;\r\n }\r\n\r\n set outTimeCriteria(value: TimeWindow) {\r\n this.tempParams.outTimeCriteria = value;\r\n this._isValid();\r\n }\r\n\r\n get inTimeCriteria(): TimeWindow {\r\n return this.tempParams.inTimeCriteria;\r\n }\r\n\r\n set inTimeCriteria(value: TimeWindow) {\r\n this.tempParams.inTimeCriteria = value;\r\n this._isValid();\r\n }\r\n get maxConnections(): number {\r\n return this.tempParams.maxConnections;\r\n }\r\n\r\n set maxConnections(value: number) {\r\n this.tempParams.maxConnections = value;\r\n }\r\n\r\n private _multiDestination: DestinationEntry[] = [];\r\n get multiDestination(): IMultiDestination[] {\r\n return this.tempParams.multiDestination;\r\n }\r\n\r\n set multiDestination(valueArray: IMultiDestination[]) {\r\n this.tempParams.multiDestination = valueArray;\r\n this._isValid();\r\n }\r\n\r\n public get showHotelForm(): boolean {\r\n return this._showHotelForm;\r\n }\r\n\r\n public set showHotelForm(newVal: boolean) {\r\n this._showHotelForm = newVal;\r\n }\r\n\r\n public get hotelSearchRequested(): boolean {\r\n return this._hotelSearchRequested;\r\n }\r\n\r\n public set hotelSearchRequested(newVal: boolean) {\r\n this._hotelSearchRequested = newVal;\r\n }\r\n\r\n setMultiDestinationQuery(multiDestination: IMultiDestination[]) {\r\n const newMultiDestination = this.helpers.clone(multiDestination);\r\n return newMultiDestination.reduce(\r\n (destinationArray: DestinationEntry[], item: IMultiDestination) => {\r\n const destinationObject = {} as DestinationEntry;\r\n destinationObject.orig = item.orig.gateway;\r\n destinationObject.dest = item.dest.gateway;\r\n destinationObject.date = this.helpers.formatIsoDate(item.date);\r\n destinationArray.push(destinationObject);\r\n return destinationArray;\r\n },\r\n [] as DestinationEntry[]\r\n );\r\n }\r\n\r\n // get only\r\n get sortDropdownValues(): ValueDisplay[] {\r\n return this._sortArray;\r\n }\r\n\r\n get fareTypesValues(): ValueDisplay[] {\r\n return this._fareTypeArray;\r\n }\r\n\r\n get fareType(): FareType {\r\n return this.tempParams.fareType;\r\n }\r\n\r\n set fareType(value: FareType) {\r\n this.tempParams.fareType = value;\r\n this._isValid();\r\n }\r\n\r\n get negotiated(): boolean {\r\n return this._negotiated;\r\n }\r\n\r\n set negotiated(value: boolean) {\r\n this._negotiated = value;\r\n }\r\n\r\n get includeNearbyAirports(): boolean {\r\n return this.tempParams.includeNearbyAirports;\r\n }\r\n\r\n set includeNearbyAirports(value: boolean) {\r\n this.tempParams.includeNearbyAirports = value;\r\n }\r\n constructor(\r\n private flightfetcher: BaseFlightQuoteFetcher<FQ_Q>,\r\n private helpers: BaseHelperRoutines,\r\n userService: UserServiceInterface,\r\n private basketService: EnterpriseBasketServiceInterface,\r\n storageService: BaseStorageService,\r\n private searchService: EnterpriseSearchServiceInterface\r\n ) {\r\n super(\r\n storageService,\r\n (results: FlightAllQuoteResult): FlightQuoteResultArray => {\r\n this.flightsToGroup = {};\r\n this.grouped = results.grouped || [];\r\n this.resultQuery = this.getSearchQuery();\r\n delete this.resultQuery.withGrouped;\r\n\r\n if (results && this.searchService.isFlightsGrouped()) {\r\n this.groupedObject = (results.multi || [])\r\n .reduce(\r\n (\r\n previousItems: FlightItineraryWithSelected[],\r\n nextItem: ItinerarySummary\r\n ) => {\r\n return previousItems.concat(nextItem.results);\r\n },\r\n results.journeys as unknown as FlightItineraryWithSelected[]\r\n )\r\n .map((flight: FlightItineraryWithSelected) => {\r\n return Object.assign(flight, { seleced: false, canSelect: true });\r\n });\r\n\r\n const returnData = (results.grouped || []).reduce(\r\n (\r\n acc: FlightGroupedQuoteResult[],\r\n item: GroupedFieldsFragment,\r\n groupNumber: number\r\n ): FlightGroupedQuoteResult[] => {\r\n const isOutBound =\r\n item.boundIndicator === FlightDirectionEnum.Outbound;\r\n const returnObject: FlightGroupedQuoteResult = {\r\n direction: item.boundIndicator,\r\n classes: {\r\n [FlightCabinClass.EconomyNoBags]:\r\n null as FlightItineraryClass,\r\n [FlightCabinClass.EconomyRestricted]:\r\n null as FlightItineraryClass,\r\n [FlightCabinClass.Economy]: null as FlightItineraryClass,\r\n [FlightCabinClass.Business]: null as FlightItineraryClass,\r\n [FlightCabinClass.First]: null as FlightItineraryClass,\r\n [FlightCabinClass.PremiumEconomy]:\r\n null as FlightItineraryClass\r\n },\r\n originAirport: '',\r\n originAirportName: '',\r\n destinationAirport: '',\r\n destinationAirportName: '',\r\n departDateTime: '',\r\n arrivalDateTime: '',\r\n outboundTotalDuration: 0,\r\n inboundTotalDuration: 0,\r\n outlegs: null,\r\n inlegs: null,\r\n outlegsCount: 0,\r\n inlegsCount: 0,\r\n dataSource: '',\r\n preferred: false,\r\n outboundFlightNumber: '',\r\n operator: '',\r\n operatorFull: '',\r\n inboundFlightNumber: '',\r\n isReturn: false\r\n };\r\n const brands: MatchingFlights = item.flights;\r\n\r\n Object.keys(brands)\r\n .filter((key: string) => key[0] !== '_')\r\n .forEach((brand: FlightGroups) => {\r\n if (!brands[brand].length) {\r\n return;\r\n }\r\n // ! using a reduce because not all flights actually exist and we were seeing undefined in the flight list\r\n const matchingBrandFlights: FlightItinerary[] = brands[\r\n brand\r\n ].reduce((acc1: FlightItinerary[], flightNum: number, i) => {\r\n (this.flightsToGroup[flightNum] =\r\n this.flightsToGroup[flightNum] || []).push(groupNumber);\r\n const flight = this.groupedObject[flightNum];\r\n if (isOutBound) {\r\n this.createGroupedItem(\r\n returnObject,\r\n flight.source,\r\n flight.outboundFlights,\r\n flight.outboundTotalDuration,\r\n flight.inboundFlights,\r\n flight.inboundTotalDuration\r\n );\r\n } else {\r\n this.createGroupedItem(\r\n returnObject,\r\n flight.source,\r\n flight.inboundFlights,\r\n flight.inboundTotalDuration,\r\n flight.outboundFlights,\r\n flight.outboundTotalDuration\r\n );\r\n }\r\n if (flight) {\r\n acc1.push(flight);\r\n }\r\n return acc1;\r\n }, []);\r\n let correctBrand: RestrictedFlightGroups;\r\n\r\n switch (brand) {\r\n case FlightCabinClass.LiteEconomy:\r\n case FlightCabinClass.Economy:\r\n correctBrand = FlightCabinClass.Economy;\r\n break;\r\n case FlightCabinClass.EconomyNoBags:\r\n correctBrand = FlightCabinClass.EconomyNoBags;\r\n break;\r\n case FlightCabinClass.EconomyRestricted:\r\n correctBrand = FlightCabinClass.EconomyRestricted;\r\n break;\r\n case FlightCabinClass.PremiumBusiness:\r\n case FlightCabinClass.Business:\r\n correctBrand = FlightCabinClass.Business;\r\n break;\r\n case FlightCabinClass.PremiumFirst:\r\n case FlightCabinClass.First:\r\n correctBrand = FlightCabinClass.First;\r\n break;\r\n case FlightCabinClass.PremiumEconomy:\r\n correctBrand = FlightCabinClass.PremiumEconomy;\r\n break;\r\n default:\r\n console.log('something went wrong');\r\n break;\r\n }\r\n\r\n const minprice =\r\n this.getMinFlightPriceForBrand(matchingBrandFlights);\r\n const maxprice =\r\n this.getMaxFlightPriceForBrand(matchingBrandFlights);\r\n if (returnObject.classes[correctBrand]?.flights?.length) {\r\n returnObject.classes[correctBrand].flights.concat(\r\n matchingBrandFlights\r\n );\r\n returnObject.classes[correctBrand].minprice = Math.min(\r\n returnObject.classes[correctBrand].minprice,\r\n minprice\r\n );\r\n returnObject.classes[correctBrand].maxprice = Math.max(\r\n returnObject.classes[correctBrand].maxprice,\r\n maxprice\r\n );\r\n } else {\r\n returnObject.classes[correctBrand] = {\r\n flights: matchingBrandFlights,\r\n minprice,\r\n maxprice,\r\n currency: matchingBrandFlights[0].total.currency\r\n };\r\n }\r\n });\r\n if (returnObject) {\r\n acc.push(returnObject);\r\n }\r\n return acc;\r\n },\r\n []\r\n );\r\n\r\n console.log('Processed Grouped data', returnData);\r\n return returnData;\r\n } else {\r\n return results ? [results] : [];\r\n }\r\n }\r\n );\r\n\r\n const data: {\r\n tempParams: FlightTempParams;\r\n originalUserSearch: FlightTempParams;\r\n } = storageService.getSessionItem(\r\n FlightEnterpriseSearch.STORAGE_SESSION_PARAMS\r\n ) || {\r\n tempParams: {} as FlightTempParams,\r\n originalUserSearch: {} as FlightTempParams\r\n };\r\n // data.tempParams.adults = 1;\r\n // data.tempParams.cabinClass = [FlightCabinClass.Economy];\r\n const query = searchService.makeFlightQuery(data.tempParams);\r\n this.updateTempParams(query);\r\n this._originalUserSearch = data.originalUserSearch;\r\n if (searchService.shouldAddTravellerSubscription()) {\r\n searchService.travellerInformation.subscribe(\r\n (travellers: Traveller[]) => {\r\n this.travellers = travellers;\r\n const splitTravellers = this.helpers.selectedTravellers(\r\n travellers,\r\n ServiceType.Flight\r\n );\r\n this.tempParams.adults = splitTravellers.adults.length;\r\n this.tempParams.children = splitTravellers.children.length;\r\n // this.tempParams.infants = splitTravellers.infants.length;\r\n\r\n this.updateTravellers();\r\n this._isValid();\r\n }\r\n );\r\n }\r\n\r\n userService.changeUser.subscribe((user: FullUserDetails) => {\r\n this.timeCriteriaOptions.next([\r\n TimeWindow.Anytime,\r\n TimeWindow.Arrive,\r\n TimeWindow.Depart\r\n ]); // TODO update with any UFs\r\n this.flightOperators.next([{ code: 'BA', name: 'British Airways' }]); // Fetch these from DB\r\n this.updateAvaliableClasses();\r\n });\r\n\r\n this.updateTravellers();\r\n\r\n if (this.isValid.value) {\r\n const results: FlightSessionType = storageService.getSessionItem(\r\n this.resultsSessionName\r\n ) || {\r\n results: [],\r\n groupData: {},\r\n grouped: [],\r\n query: {} as SearchFlightsV2QueryVariables\r\n };\r\n this.fullResults = this.helpers.clone(results.results);\r\n this.flightsToGroup = results.groupData || {};\r\n this.resultQuery = results.query;\r\n // if (results == null && this.isValid) {\r\n // searchService.startSearches();\r\n // }\r\n // this._cheapestResultPrice = this.updateLowestPrice(results);\r\n this.results.next(results.results || ([] as FlightQuoteResultArray));\r\n }\r\n\r\n this.negotiated =\r\n this.tempParams.fareType === FareType.Negotiated ? true : false;\r\n }\r\n private createGroupedItem(\r\n returnObject: FlightGroupedQuoteResult,\r\n source: string,\r\n outboundFlights: FlightJourney[],\r\n outboundTotalDuration: number,\r\n inboundFlights: FlightJourney[],\r\n inboundTotalDuration: number\r\n ) {\r\n if (outboundFlights?.length && !returnObject.departDateTime) {\r\n const first = outboundFlights[0];\r\n const last = outboundFlights[outboundFlights.length - 1];\r\n returnObject.originAirport = first.originAirport;\r\n returnObject.originAirportName = first.originAirportName;\r\n returnObject.destinationAirport = last.destinationAirport;\r\n returnObject.destinationAirportName = last.destinationAirportName;\r\n returnObject.departDateTime = first.dateTimeDeparting;\r\n returnObject.arrivalDateTime = last.dateTimeArriving;\r\n returnObject.outboundTotalDuration = outboundTotalDuration;\r\n returnObject.dataSource = source;\r\n returnObject.operator = first.marketingCarrier;\r\n returnObject.operatorFull = first.marketingCarrierName;\r\n returnObject.outlegsCount = outboundFlights.length;\r\n returnObject.outlegs = outboundFlights;\r\n returnObject.outboundFlightNumber =\r\n this.helpers.joinFromAttribute<FlightJourney>(\r\n '-',\r\n 'marketingFlightNumber',\r\n outboundFlights\r\n );\r\n\r\n returnObject.isReturn = false;\r\n }\r\n\r\n if (inboundFlights?.length && !returnObject.inboundTotalDuration) {\r\n returnObject.inboundTotalDuration = inboundTotalDuration;\r\n returnObject.inlegsCount = inboundFlights.length;\r\n returnObject.inlegs = inboundFlights;\r\n returnObject.inboundFlightNumber =\r\n this.helpers.joinFromAttribute<FlightJourney>(\r\n '-',\r\n 'operatingFlightNumber',\r\n inboundFlights\r\n );\r\n\r\n returnObject.isReturn = true;\r\n }\r\n }\r\n\r\n protected makeSessionResults(\r\n data: FlightQuoteResultArray\r\n ): FlightSessionType {\r\n return {\r\n results: data,\r\n groupData: this.flightsToGroup,\r\n grouped: this.grouped,\r\n query: this.resultQuery\r\n };\r\n }\r\n\r\n getMaxFlightPriceForBrand(matchingBrandFlights: FlightItinerary[]): number {\r\n let max = 0;\r\n matchingBrandFlights.forEach((flight) => {\r\n if (max < flight?.total?.price) {\r\n max = flight.total.price;\r\n }\r\n });\r\n return max;\r\n }\r\n getMinFlightPriceForBrand(matchingBrandFlights: FlightItinerary[]): number {\r\n let min = Number.MAX_SAFE_INTEGER;\r\n matchingBrandFlights.forEach((flight) => {\r\n if (min > flight?.total?.price) {\r\n min = flight.total.price;\r\n }\r\n });\r\n return min;\r\n }\r\n\r\n protected resetQuery(checkIsValid: boolean = true): void {\r\n this.updateTempParams(this.searchService.makeFlightQuery());\r\n if (checkIsValid) {\r\n this._isValid();\r\n }\r\n }\r\n\r\n public resetParams(): void {\r\n this.reset();\r\n this.resetQuery();\r\n }\r\n\r\n private _isValid() {\r\n if (!this.doChecks) {\r\n return;\r\n }\r\n this.storageService.setSessionItem(\r\n FlightEnterpriseSearch.STORAGE_SESSION_PARAMS,\r\n {\r\n tempParams: this.tempParams,\r\n originalUserSearch: this.originalUserSearch\r\n }\r\n );\r\n\r\n this.validationMessages = [];\r\n if (this.tempParams.chosenSearchType === FlightSearchType.multiCity) {\r\n this.multiCityValidation();\r\n } else {\r\n if (!this._originAirport) {\r\n this.validationMessages.push('Please add in a departure location');\r\n }\r\n if (!this._destinationAirport) {\r\n this.validationMessages.push('Please add in an arrival destination');\r\n }\r\n if (!this.tempParams.outBoundDate.isAfter(moment())) {\r\n this.validationMessages.push('Departure date can not be in the past');\r\n }\r\n\r\n if (\r\n this._originAirport &&\r\n this._destinationAirport &&\r\n this._destinationAirport === this._originAirport\r\n ) {\r\n this.validationMessages.push(\r\n 'Origin and destination airport cannot be the same'\r\n );\r\n }\r\n if (this.isReturn) {\r\n // TODO check that return details are set\r\n if (\r\n this.tempParams.outBoundDate.isSameOrAfter(\r\n this.tempParams.inTimeCriteria\r\n )\r\n ) {\r\n this.validationMessages.push(\r\n 'Return date must be after the departure date'\r\n );\r\n }\r\n }\r\n this.isValid.next(this.validationMessages.length === 0);\r\n this.messages.next(this.validationMessages);\r\n }\r\n }\r\n\r\n multiCityValidation() {\r\n let isemptyValue = false;\r\n let isemptyLanding = false;\r\n let isSameValue = false;\r\n this.tempParams.multiDestination.map((element, i) => {\r\n if (!element.orig) {\r\n isemptyValue = true;\r\n if (i < 2) {\r\n isemptyLanding = true;\r\n }\r\n }\r\n if (element.orig === element.dest) isSameValue = true;\r\n });\r\n if (!moment(this.tempParams.multiDestination[0].date).isAfter(moment())) {\r\n this.validationMessages.push('Departure date can not be in the past');\r\n }\r\n if (isemptyLanding)\r\n this.validationMessages.push('Please select landing airport(s)');\r\n if (isemptyValue)\r\n this.validationMessages.push('Please select take off airport(s)');\r\n if (isSameValue)\r\n this.validationMessages.push(\r\n 'Take off and landing location(s) cannot be the same'\r\n );\r\n }\r\n startSearch(): Promise<boolean> {\r\n this.results.next([]);\r\n this._isValid();\r\n\r\n if (this.isValid.value) {\r\n this._originalUserSearch = Object.freeze({ ...this.tempParams });\r\n this.storageService.setSessionItem(\r\n FlightEnterpriseSearch.STORAGE_SESSION_PARAMS,\r\n {\r\n tempParams: this.tempParams,\r\n originalUserSearch: this.originalUserSearch\r\n }\r\n );\r\n const query = this.getSearchQuery();\r\n this.searchService.saveRecentSearch(this.getRecentSearchQuery(query));\r\n\r\n return this._startSearch(this.flightfetcher.fetchList(query));\r\n } else {\r\n return Promise.resolve(false);\r\n }\r\n }\r\n\r\n getRecentSearchQuery(\r\n query: SearchFlightsV2QueryVariables\r\n ): SaveRecentSearchMutationVariables {\r\n return {\r\n serviceType: ServiceType.Flight,\r\n searchArgs: query,\r\n travelDate: this.outBoundDate.format(),\r\n travellers: this.helpers.getTravellersId(this.travellers)\r\n };\r\n }\r\n\r\n public startRecentSearch(recentSearch: RecentSearch): void {\r\n if (recentSearch.searchArgs.outboundDate) {\r\n this.outBoundDate = this.convertRecentSearchDateTime(\r\n recentSearch.searchArgs.outboundDate,\r\n recentSearch.searchArgs.outboundDepartureTimeWindow\r\n );\r\n }\r\n\r\n if (recentSearch.searchArgs.returnDate) {\r\n this.inboundDate = this.convertRecentSearchDateTime(\r\n recentSearch.searchArgs.returnDate,\r\n recentSearch.searchArgs.returnDepartureTimeWindow\r\n );\r\n }\r\n\r\n this.fareType = recentSearch.searchArgs.fareType;\r\n this.maxConnections = recentSearch.searchArgs.maxConnections;\r\n\r\n if (recentSearch.searchArgs.outboundCabinClass) {\r\n this.cabinClass = recentSearch.searchArgs.outboundCabinClass[0];\r\n }\r\n if (recentSearch.searchArgs.returnCabinClass) {\r\n this.returnCabinClass = recentSearch.searchArgs.returnCabinClass[0];\r\n }\r\n\r\n this.includeNearbyAirports = recentSearch.searchArgs.includeNearbyAirports\r\n ? true\r\n : false;\r\n\r\n this.chosenSearchType = recentSearch.searchArgs.returnTrip\r\n ? FlightSearchType.return\r\n : FlightSearchType.oneWay;\r\n\r\n if (recentSearch.searchArgs.outboundDepartureTimeWindow) {\r\n this.outTimeCriteria = TimeWindow.Depart;\r\n } else if (recentSearch.searchArgs.outboundArrivalTimeWindow) {\r\n this.outTimeCriteria = TimeWindow.Arrive;\r\n } else {\r\n this.outTimeCriteria = TimeWindow.Anytime;\r\n }\r\n\r\n if (recentSearch.searchArgs.returnDepartureTimeWindow) {\r\n this.inTimeCriteria = TimeWindow.Depart;\r\n } else if (recentSearch.searchArgs.returnArrivalTimeWindow) {\r\n this.inTimeCriteria = TimeWindow.Arrive;\r\n } else {\r\n this.inTimeCriteria = TimeWindow.Anytime;\r\n }\r\n\r\n combineLatest([\r\n this.searchService.getAirportByCode(\r\n recentSearch.searchArgs.originAirport\r\n ),\r\n this.searchService.getAirportByCode(\r\n recentSearch.searchArgs.destinationAirport\r\n )\r\n ]).subscribe(([departLocation, arriveLocation]) => {\r\n if (departLocation && arriveLocation) {\r\n this.departLocation = {\r\n destination: departLocation.iataMatch.name,\r\n gateway: departLocation.iataMatch.iata,\r\n terminals: this.searchService.processTerminals(\r\n departLocation.iataMatch.terminals\r\n ),\r\n country: departLocation.iataMatch?.locationDetails?.country,\r\n postcode: departLocation.iataMatch?.locationDetails?.postcode,\r\n countryCode: departLocation.iataMatch?.locationDetails?.countryCode\r\n };\r\n this.arriveLocation = {\r\n destination: arriveLocation.iataMatch.name,\r\n gateway: arriveLocation.iataMatch.iata,\r\n terminals: this.searchService.processTerminals(\r\n arriveLocation.iataMatch.terminals\r\n ),\r\n country: arriveLocation.iataMatch?.locationDetails?.country,\r\n postcode: arriveLocation.iataMatch?.locationDetails?.postcode,\r\n countryCode: arriveLocation.iataMatch?.locationDetails?.countryCode\r\n };\r\n\r\n if (recentSearch.searchArgs.preferredCarriers) {\r\n let preferredCarriers: OBTAirlinesDetails[] = [];\r\n recentSearch.searchArgs.preferredCarriers.map(\r\n (preferredCarry: string) => {\r\n this.searchService\r\n .getAirlinesList(preferredCarry)\r\n .subscribe((items: OBTAirlinesDetails[]) => {\r\n items.map((item: OBTAirlinesDetails) => {\r\n if (item.code === preferredCarry) {\r\n preferredCarriers.push(item);\r\n }\r\n });\r\n this.preferredCarriers = preferredCarriers;\r\n this.searchService.startSearches();\r\n });\r\n }\r\n );\r\n }\r\n this.searchService.startSearches();\r\n }\r\n });\r\n this.searchService.startSearches();\r\n }\r\n\r\n private makeDepartureTimeWindow(\r\n dateTime: moment.Moment,\r\n window: TimeWindow,\r\n isFlightsGrouped: boolean\r\n ): string {\r\n return window === TimeWindow.Depart\r\n ? isFlightsGrouped\r\n ? this.helpers.makeTimeWindow(dateTime, -2, 2)\r\n : this.helpers.makeTimeWindow(dateTime, 0, 4)\r\n : null;\r\n }\r\n\r\n private makeArrivalTimeWindow(\r\n dateTime: moment.Moment,\r\n window: TimeWindow,\r\n isFlightsGrouped: boolean\r\n ): string {\r\n if (window !== TimeWindow.Arrive) return null;\r\n return isFlightsGrouped\r\n ? this.helpers.makeTimeWindow(dateTime, -2, 2)\r\n : this.helpers.makeTimeWindow(dateTime, 0, 4);\r\n }\r\n\r\n convertRecentSearchDateTime(\r\n date: string,\r\n timeWindow?: string\r\n ): moment.Moment {\r\n if (timeWindow) {\r\n const flightTime = timeWindow.split('-');\r\n let timeAndDate = moment(date).add(\r\n moment.duration(this.helpers.hhmmToTime(flightTime[0]))\r\n );\r\n // add 2 hour\r\n return timeAndDate.clone().add(2, 'hour');\r\n } else {\r\n return moment(date);\r\n }\r\n }\r\n\r\n getSearchQuery(): SearchFlightsV2QueryVariables {\r\n const isMultiCityActive =\r\n this.tempParams.chosenSearchType === FlightSearchType.multiCity;\r\n this._multiDestination = isMultiCityActive\r\n ? this.setMultiDestinationQuery(this.tempParams.multiDestination)\r\n : null;\r\n\r\n this._multiDestination =\r\n this.tempParams.chosenSearchType === FlightSearchType.multiCity\r\n ? this.setMultiDestinationQuery(this.tempParams.multiDestination)\r\n : [];\r\n const isFlightsGrouped = this.searchService.isFlightsGrouped();\r\n return this.helpers.removeNulls<SearchFlightsV2QueryVariables>(\r\n Object.assign(\r\n {},\r\n isMultiCityActive\r\n ? {\r\n multiDestination: this._multiDestination\r\n }\r\n : {\r\n originAirport: this._originAirport,\r\n destinationAirport: this._destinationAirport,\r\n outboundDate: this.helpers.formatIsoDate(\r\n this.tempParams.outBoundDate\r\n ),\r\n outboundDepartureTimeWindow: this.makeDepartureTimeWindow(\r\n this.tempParams.outBoundDate,\r\n this.tempParams.outTimeCriteria,\r\n isFlightsGrouped\r\n ),\r\n outboundArrivalTimeWindow: this.makeArrivalTimeWindow(\r\n this.tempParams.outBoundDate,\r\n this.tempParams.outTimeCriteria,\r\n isFlightsGrouped\r\n )\r\n },\r\n {\r\n passengers: this._passengers,\r\n returnTrip: this.isReturn,\r\n outboundCabinClass: this.tempParams.cabinClass\r\n ? [this.tempParams.cabinClass]\r\n : null,\r\n requireFreeBag: null,\r\n maxConnections: this.tempParams.maxConnections,\r\n includeNearbyAirports: this.tempParams.includeNearbyAirports,\r\n preferredCarriers: this.tempParams.preferredCarriers.map(\r\n (carrier: OBTAirlinesDetails) =>\r\n carrier?.code ? carrier.code : null\r\n ),\r\n fareType: this.tempParams.fareType,\r\n withGrouped: isFlightsGrouped\r\n },\r\n this.isReturn\r\n ? {\r\n returnDate: this.helpers.formatIsoDate(\r\n this.tempParams.inboundDate\r\n ),\r\n returnDepartureTimeWindow: this.makeDepartureTimeWindow(\r\n this.tempParams.inboundDate,\r\n this.tempParams.inTimeCriteria,\r\n isFlightsGrouped\r\n ),\r\n returnArrivalTimeWindow: this.makeArrivalTimeWindow(\r\n this.tempParams.inboundDate,\r\n this.tempParams.inTimeCriteria,\r\n isFlightsGrouped\r\n ),\r\n returnCabinClass: this.tempParams.returnCabinClass\r\n ? [this.tempParams.returnCabinClass]\r\n : null\r\n }\r\n : {}\r\n )\r\n );\r\n }\r\n\r\n private updateTravellers() {\r\n const travellers: FlightPassengerObject[] = [];\r\n for (let loop = 0; loop < this.tempParams.adults; loop += 1) {\r\n travellers.push({ type: FlightPassengerType.Adult });\r\n }\r\n for (let loop = 0; loop < this.tempParams.children; loop += 1) {\r\n travellers.push({ type: FlightPassengerType.Child });\r\n }\r\n\r\n this._passengers = travellers;\r\n this._isValid();\r\n }\r\n\r\n private updateAvaliableClasses() {\r\n this.avaliableClasses.next([\r\n { name: 'Any', type: FlightCabinClass.Any },\r\n { name: 'Economy', type: FlightCabinClass.Economy },\r\n { name: 'Premium', type: FlightCabinClass.PremiumEconomy },\r\n { name: 'Business', type: FlightCabinClass.Business },\r\n { name: 'First', type: FlightCabinClass.First }\r\n ]);\r\n }\r\n\r\n /**\r\n * @description - sort the flight results\r\n * @todo - Fill out Preferred and Co2 sorting when we have that data\r\n */\r\n public sortResults(\r\n sortMethodValue: SortTypes,\r\n givenResults?: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n let results = this.helpers.clone(\r\n givenResults\r\n ? givenResults\r\n : <FlightItinerary[]>(<unknown>this.fullResults)\r\n );\r\n\r\n switch (sortMethodValue) {\r\n case SortTypes.CheapestFirst:\r\n results = results.sort((a: FlightItinerary, b: FlightItinerary) => {\r\n return a.total.price - b.total.price;\r\n });\r\n break;\r\n case SortTypes.MostExpensiveFirst:\r\n results = results.sort((a: FlightItinerary, b: FlightItinerary) => {\r\n return b.total.price - a.total.price;\r\n });\r\n break;\r\n case SortTypes.FastestFirst:\r\n results = results.sort((a: FlightItinerary, b: FlightItinerary) => {\r\n return (\r\n a.outboundTotalDuration +\r\n (a.inboundTotalDuration ? a.inboundTotalDuration : 0) -\r\n (b.outboundTotalDuration +\r\n (b.inboundTotalDuration ? b.inboundTotalDuration : 0))\r\n );\r\n });\r\n break;\r\n case SortTypes.LowestEmissions:\r\n results = results.sort((a: FlightItinerary, b: FlightItinerary) => {\r\n return a.co2PerItem - b.co2PerItem;\r\n });\r\n break;\r\n default:\r\n console.error(`+++ Unknown sorting method: ${sortMethodValue} +++`);\r\n }\r\n\r\n return results;\r\n }\r\n\r\n updateFromPreviousSearches(\r\n previousItems: Record<ServiceType, BasketItem>\r\n ): void {\r\n // Flights can not be search after other products so no defaults can be set.\r\n }\r\n\r\n getTotalBaggage(result: FlightItinerary): number {\r\n let total = 0;\r\n\r\n const parsedAdditional = JSON.parse(result.additional);\r\n if (parsedAdditional && parsedAdditional.outboundFlights) {\r\n parsedAdditional.outboundFlights.forEach((flight: any) => {\r\n flight.baggage.forEach((bag: any) => {\r\n if (bag.allowance && bag.allowance > total) {\r\n total = bag.allowance;\r\n }\r\n });\r\n });\r\n } else if (parsedAdditional && parsedAdditional.baggageAllowance) {\r\n parsedAdditional.baggageAllowance.forEach((baggageAllow: any) => {\r\n if (\r\n baggageAllow.baggage.qty &&\r\n Number(baggageAllow.baggage.qty) > total\r\n ) {\r\n total = Number(baggageAllow.baggage.qty);\r\n }\r\n });\r\n }\r\n\r\n return total;\r\n }\r\n\r\n /**\r\n * @description - filter the results, then sort the remainder\r\n * @todo - Add filters for travel policy, fare types and ancilliaries\r\n */\r\n filterResults(\r\n filters: FlightFilters,\r\n sortValue: SortTypes,\r\n givenResults?: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n console.log('+++ Applying Filters to flights: ', filters, ' +++');\r\n let results: FlightItinerary[] = this.helpers.clone(givenResults);\r\n\r\n if (this.isReturn) {\r\n results = results.filter(\r\n (result: FlightItinerary) =>\r\n result.inboundFlights && result.inboundFlights.length\r\n );\r\n }\r\n\r\n // Add In Filters Here\r\n // filter stops\r\n results = this.filterResultsByStops(filters.stops, results);\r\n results = this.filterResultsByAirline(filters.airlines, results);\r\n results = this.filterResultsByClass(filters.classes, results);\r\n results = this.filterByDepartureAirport(filters.depatureAirport, results);\r\n results = this.filterByDepartureReturnAirport(\r\n filters.depatureReturnAirport,\r\n results\r\n );\r\n results = this.filterByArrivalAirport(filters.arrivalAirport, results);\r\n results = this.filterByArrivalReturnAirport(\r\n filters.arrivalReturnAirport,\r\n results\r\n );\r\n results = this.filterByPrice(filters.minPrice, filters.maxPrice, results);\r\n results = this.filterByFlightNumber(filters.flightNumber, results);\r\n results = this.filterByBaggage(filters.baggage, results);\r\n results = this.filterByDepartureTime(\r\n filters.minDepartureTime,\r\n filters.maxDepartureTime,\r\n results\r\n );\r\n results = this.filterByReturnDepartureTime(\r\n filters.minReturnDepartureTime,\r\n filters.maxReturnDepartureTime,\r\n results\r\n );\r\n results = this.filterByArrivalTime(\r\n filters.minArrivalTime,\r\n filters.maxArrivalTime,\r\n results\r\n );\r\n results = this.filterByReturnArrivalTime(\r\n filters.minReturnArrivalTime,\r\n filters.maxReturnArrivalTime,\r\n results\r\n );\r\n results = this.filterByDuration(\r\n filters.minDuration,\r\n filters.maxDuration,\r\n results\r\n );\r\n results = this.filterByDuration(\r\n filters.minReturnDuration,\r\n filters.maxReturnDuration,\r\n results,\r\n true\r\n ); // return duration\r\n\r\n results = this.sortResults(sortValue, results);\r\n return results;\r\n }\r\n\r\n /**\r\n * @description - give the correct format for transfering minuetes on the sliders\r\n * @param min - the min in 100th's to transform onto 60th's\r\n */\r\n transformMin(min: number): string {\r\n let num = (Number(min) * 60) / 100;\r\n // console.log('+++ Num Copy: ', _.clone(num), ' +++');\r\n if (num % 1 < 0.5) {\r\n num = Math.floor(num);\r\n } else {\r\n num = Math.ceil(num);\r\n }\r\n\r\n return num.toString().padStart(2, '0');\r\n }\r\n\r\n filterByDuration(\r\n minDuration: number,\r\n maxDuration: number,\r\n results: FlightItinerary[],\r\n isReturn = false\r\n ): FlightItinerary[] {\r\n results = results.filter((result) => {\r\n let dur = 0;\r\n if (!isReturn) {\r\n result.outboundFlights.forEach((out: FlightJourney) => {\r\n dur += out.totalDuration;\r\n });\r\n }\r\n\r\n if (result.inboundFlights?.length && isReturn) {\r\n result.inboundFlights.forEach((inb: FlightJourney) => {\r\n dur += inb.totalDuration;\r\n });\r\n }\r\n\r\n return dur >= minDuration && dur <= maxDuration;\r\n });\r\n\r\n return results;\r\n }\r\n\r\n filterByDepartureTime(\r\n minDep: number,\r\n maxDep: number,\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n results = results.filter((result) => {\r\n const departureTime = Number(\r\n moment(result.outboundFlights[0].dateTimeDeparting).format('HHmm')\r\n );\r\n const newNumString1 = Number(\r\n Math.floor(Number(minDep / 100)).toString() +\r\n this.transformMin(Math.ceil(Number(minDep % 100)))\r\n );\r\n const newNumString2 = Number(\r\n Math.floor(Number(maxDep / 100)).toString() +\r\n this.transformMin(Math.ceil(Number(maxDep % 100)))\r\n );\r\n\r\n return departureTime >= newNumString1 && departureTime <= newNumString2;\r\n });\r\n\r\n return results;\r\n }\r\n\r\n filterByReturnDepartureTime(\r\n minDep: number,\r\n maxDep: number,\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n if (!minDep && !maxDep) {\r\n return results;\r\n }\r\n\r\n const newNumString1 = Number(\r\n Math.floor(Number(minDep / 100)).toString() +\r\n this.transformMin(Math.ceil(Number(minDep % 100)))\r\n );\r\n const newNumString2 = Number(\r\n Math.floor(Number(maxDep / 100)).toString() +\r\n this.transformMin(Math.ceil(Number(maxDep % 100)))\r\n );\r\n\r\n results = results.filter((result) => {\r\n if (!result.inboundFlights || !result.inboundFlights[0]) {\r\n return true;\r\n }\r\n\r\n const departureTime = Number(\r\n moment(result.inboundFlights[0].dateTimeDeparting).format('HHmm')\r\n );\r\n return departureTime >= newNumString1 && departureTime <= newNumString2;\r\n });\r\n\r\n return results;\r\n }\r\n\r\n filterByReturnArrivalTime(\r\n minArr: number,\r\n maxArr: number,\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n if (!minArr && !maxArr) {\r\n return results;\r\n }\r\n\r\n const newNumString1 = Number(\r\n Math.floor(Number(minArr / 100)).toString() +\r\n this.transformMin(Math.ceil(Number(minArr % 100)))\r\n );\r\n const newNumString2 = Number(\r\n Math.floor(Number(maxArr / 100)).toString() +\r\n this.transformMin(Math.ceil(Number(maxArr % 100)))\r\n );\r\n\r\n results = results.filter((result) => {\r\n if (!result.inboundFlights || !result.inboundFlights[0]) {\r\n return true;\r\n }\r\n\r\n const arrivalTime = Number(\r\n moment(\r\n result.inboundFlights[result.inboundFlights.length - 1]\r\n .dateTimeArriving\r\n ).format('HHmm')\r\n );\r\n const retVal =\r\n arrivalTime >= newNumString1 && arrivalTime <= newNumString2;\r\n\r\n // for debugging\r\n // if (!retVal) {\r\n // console.warn(`+++ Filtering Out: ${arrivalTime} +++`);\r\n // }\r\n\r\n return retVal;\r\n });\r\n\r\n return results;\r\n }\r\n\r\n filterByArrivalTime(\r\n minArr: number,\r\n maxArr: number,\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n const newNumString1 = Number(\r\n Math.floor(Number(minArr / 100)).toString() +\r\n this.transformMin(Math.ceil(Number(minArr % 100)))\r\n );\r\n const newNumString2 = Number(\r\n Math.floor(Number(maxArr / 100)).toString() +\r\n this.transformMin(Math.ceil(Number(maxArr % 100)))\r\n );\r\n\r\n results = results.filter((result) => {\r\n const arrivalTime = Number(\r\n moment(\r\n result.outboundFlights[result.outboundFlights.length - 1]\r\n .dateTimeArriving\r\n ).format('HHmm')\r\n );\r\n\r\n return arrivalTime >= newNumString1 && arrivalTime <= newNumString2;\r\n });\r\n\r\n return results;\r\n }\r\n\r\n filterByBaggage(\r\n baggageFilters: SelectFilter[],\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n const selected = baggageFilters.filter((x) => x.selected);\r\n\r\n if (selected?.length >= 1 && selected.length !== baggageFilters.length) {\r\n results = results.filter((result) => {\r\n try {\r\n const totalBags = this.getTotalBaggage(result);\r\n\r\n return selected.find((x) => x.value === totalBags);\r\n } catch (error) {\r\n console.error('+++ Error determening baggage: ${error} +++');\r\n return false;\r\n }\r\n });\r\n }\r\n\r\n return results;\r\n }\r\n\r\n filterByPrice(\r\n minPrice: number,\r\n maxPrice: number,\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n results = results.filter((result) => {\r\n // console.log(`+++ Price: ${result.total.price} is between: ${minPrice} and ${maxPrice}: ${result.total.price >= minPrice && result.total.price <= maxPrice} +++`)\r\n\r\n return result.total.price >= minPrice && result.total.price <= maxPrice;\r\n });\r\n\r\n return results;\r\n }\r\n\r\n /**\r\n * @description - filter the results by the number of stops\r\n * @param stopFilters - the selected stops\r\n * @param fullResults - all of our results so far\r\n */\r\n filterResultsByStops(\r\n stopFilters: SelectFilter[],\r\n fullResults: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n const selected = stopFilters.filter((x) => x.selected);\r\n\r\n if (selected?.length >= 1 && selected.length !== stopFilters.length) {\r\n fullResults = fullResults.filter((result) => {\r\n const totalStops = result.outboundFlights.length - 1;\r\n\r\n const haveStop = selected.find(\r\n (selected1: SelectFilter) => selected1.value === totalStops\r\n );\r\n\r\n return haveStop;\r\n });\r\n }\r\n\r\n return fullResults;\r\n }\r\n\r\n filterResultsByAirline(\r\n airlineFilters: SelectFilter[],\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n const selected = airlineFilters.filter((x) => x.selected);\r\n\r\n if (selected?.length >= 1 && selected.length !== airlineFilters.length) {\r\n results = results.filter((result) => {\r\n return selected.find(\r\n (x) => x.value === result.outboundFlights[0].operatingCarrier\r\n );\r\n });\r\n }\r\n\r\n return results;\r\n }\r\n\r\n filterResultsByClass(\r\n classFilters: SelectFilter[],\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n const selected = classFilters.filter((x) => x.selected);\r\n\r\n if (selected?.length >= 1 && selected.length !== classFilters.length) {\r\n results = results.filter((result) => {\r\n return selected.find(\r\n (x) => x.value === result.outboundFlights[0].cabinClass\r\n );\r\n });\r\n }\r\n\r\n return results;\r\n }\r\n\r\n filterByDepartureAirport(\r\n departureAirports: SelectFilter[],\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n const selected = departureAirports.filter((x) => x.selected);\r\n\r\n if (selected?.length >= 1 && selected.length !== departureAirports.length) {\r\n results = results.filter((result) => {\r\n return selected.find(\r\n (x) => x.value === result.outboundFlights[0].originAirport\r\n );\r\n });\r\n }\r\n\r\n return results;\r\n }\r\n\r\n filterByArrivalAirport(\r\n arrivalAirports: SelectFilter[],\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n const selected = arrivalAirports.filter((x) => x.selected);\r\n\r\n if (selected?.length >= 1 && selected.length !== arrivalAirports.length) {\r\n results = results.filter((result) => {\r\n const destinationAirport =\r\n result.outboundFlights[result.outboundFlights.length - 1]\r\n .destinationAirport;\r\n return selected.find((x) => x.value === destinationAirport);\r\n });\r\n }\r\n\r\n return results;\r\n }\r\n\r\n filterByDepartureReturnAirport(\r\n departureAirports: SelectFilter[],\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n const selected = departureAirports.filter((x) => x.selected);\r\n\r\n if (selected?.length >= 1 && selected.length !== departureAirports.length) {\r\n results = results.filter((result) => {\r\n if (!result.inboundFlights?.length) {\r\n return true;\r\n }\r\n\r\n return selected.find(\r\n (x) => x.value === result.inboundFlights[0].originAirport\r\n );\r\n });\r\n }\r\n\r\n return results;\r\n }\r\n\r\n filterByArrivalReturnAirport(\r\n arrivalAirports: SelectFilter[],\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n const selected = arrivalAirports.filter((x) => x.selected);\r\n\r\n if (selected?.length >= 1 && selected.length !== arrivalAirports.length) {\r\n results = results.filter((result) => {\r\n if (!result.inboundFlights?.length) {\r\n return true;\r\n }\r\n\r\n const destinationAirport =\r\n result.inboundFlights[result.inboundFlights.length - 1]\r\n .destinationAirport;\r\n return selected.find((x) => x.value === destinationAirport);\r\n });\r\n }\r\n\r\n return results;\r\n }\r\n\r\n filterByFlightNumber(\r\n flightNumber: string,\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n if (flightNumber) {\r\n // make sure to check both outbound and inbound\r\n\r\n results = results.filter((result: FlightItinerary) => {\r\n const inOutbound = result.outboundFlights.find((out: FlightJourney) => {\r\n return out.operatingFlightNumber\r\n .toUpperCase()\r\n .includes(flightNumber.toUpperCase());\r\n });\r\n\r\n let inInbound;\r\n\r\n if (result.inboundFlights?.length) {\r\n inInbound = result.inboundFlights.find((inB: FlightJourney) => {\r\n return inB.operatingFlightNumber\r\n .toUpperCase()\r\n .includes(flightNumber.toUpperCase());\r\n });\r\n }\r\n\r\n return inOutbound || inInbound;\r\n });\r\n }\r\n\r\n return results;\r\n }\r\n\r\n createFilters(results: FlightItinerary[] = []): FlightFilters {\r\n const minPrice = this.getMinPrice(results);\r\n const maxPrice = this.getMaxPrice(results);\r\n\r\n const newFilters: FlightFilters = {\r\n stops: this.getAllStops(results),\r\n mustInclude: [],\r\n classes: this.getAllClasses(results),\r\n airlines: this.getAllAirlines(results),\r\n travelPolicy: [],\r\n depatureAirport: this.getAllDepartureAirports(results),\r\n arrivalAirport: this.getAllArrivalAirports(results),\r\n minPrice,\r\n maxPrice,\r\n depatureReturnAirport: this.getAllDepartureAirports(results, true),\r\n arrivalReturnAirport: this.getAllArrivalAirports(results, true),\r\n baggage: this.getBaggage(results),\r\n fareTypes: [],\r\n minDuration: this.getMinDuration(results),\r\n maxDuration: this.getMaxDuration(results),\r\n minReturnDuration: this.getMinDuration(results, true),\r\n maxReturnDuration: this.getMaxDuration(results, true),\r\n minDepartureTime: this.getMinDepartureTime(results),\r\n maxDepartureTime: this.getMaxDepartureTime(results),\r\n minArrivalTime: this.getMinArrivalTime(results),\r\n maxArrivalTime: this.getMaxArrivalTime(results),\r\n minReturnDepartureTime: this.getMinReturnDepartureTime(results),\r\n maxReturnDepartureTime: this.getMaxReturnDepartureTime(results),\r\n maxReturnArrivalTime: this.getMaxReturnArrivalTime(results),\r\n minReturnArrivalTime: this.getMinReturnArrivalTime(results),\r\n flightNumber: ''\r\n };\r\n\r\n return newFilters;\r\n }\r\n\r\n getMinDuration(results: FlightItinerary[], isReturn = false): number {\r\n let min = 0;\r\n\r\n results.forEach((result) => {\r\n let dur = 0;\r\n\r\n if (!isReturn) {\r\n result.outboundFlights.forEach((out: FlightJourney) => {\r\n dur += out.totalDuration;\r\n });\r\n }\r\n\r\n if (result.inboundFlights?.length && isReturn) {\r\n result.inboundFlights.forEach((inb: FlightJourney) => {\r\n dur += inb.totalDuration;\r\n });\r\n }\r\n\r\n if (!min || dur < min) {\r\n min = dur;\r\n }\r\n });\r\n\r\n return min;\r\n }\r\n\r\n getMaxDuration(results: FlightItinerary[], isReturn = false): number {\r\n let max = 0;\r\n\r\n results.forEach((result) => {\r\n let dur = 0;\r\n if (!isReturn) {\r\n result.outboundFlights.forEach((out: FlightJourney) => {\r\n dur += out.totalDuration;\r\n });\r\n }\r\n\r\n if (result.inboundFlights?.length && isReturn) {\r\n result.inboundFlights.forEach((inb: FlightJourney) => {\r\n dur += inb.totalDuration;\r\n });\r\n }\r\n\r\n if (!max || dur > max) {\r\n max = dur;\r\n }\r\n });\r\n\r\n return max;\r\n }\r\n\r\n getMinArrivalTime(results: FlightItinerary[]): number {\r\n let min: number;\r\n\r\n results.forEach((result) => {\r\n let minDepTime = Number(\r\n moment(\r\n result.outboundFlights[result.outboundFlights.length - 1]\r\n .dateTimeArriving\r\n ).format('HHmm')\r\n );\r\n minDepTime = Math.floor(minDepTime / 100) * 100;\r\n if (!min || minDepTime < min) {\r\n min = minDepTime;\r\n }\r\n });\r\n\r\n return min;\r\n }\r\n\r\n getMinReturnArrivalTime(results: FlightItinerary[]): number {\r\n let min: number;\r\n\r\n results.forEach((result) => {\r\n if (result.inboundFlights && result.inboundFlights.length) {\r\n let minDepTime = Number(\r\n moment(\r\n result.inboundFlights[result.inboundFlights.length - 1]\r\n .dateTimeArriving\r\n ).format('HHmm')\r\n );\r\n minDepTime = Math.floor(minDepTime / 100) * 100;\r\n if (!min || minDepTime < min) {\r\n min = minDepTime;\r\n }\r\n }\r\n });\r\n\r\n return min;\r\n }\r\n\r\n getMaxReturnArrivalTime(results: FlightItinerary[]): number {\r\n let max: number;\r\n\r\n results.forEach((result) => {\r\n if (result.inboundFlights && result.inboundFlights.length) {\r\n let maxDepTime = Number(\r\n moment(\r\n result.inboundFlights[result.inboundFlights.length - 1]\r\n .dateTimeArriving\r\n ).format('HHmm')\r\n );\r\n maxDepTime = Math.ceil(maxDepTime / 100) * 100;\r\n if (!max || maxDepTime > max) {\r\n max = maxDepTime;\r\n }\r\n }\r\n });\r\n\r\n return max;\r\n }\r\n\r\n getMaxArrivalTime(results: FlightItinerary[]): number {\r\n let max: number;\r\n\r\n results.forEach((result) => {\r\n let maxDepTime = Number(\r\n moment(\r\n result.outboundFlights[result.outboundFlights.length - 1]\r\n .dateTimeArriving\r\n ).format('HHmm')\r\n );\r\n\r\n maxDepTime = Math.ceil(maxDepTime / 100) * 100;\r\n if (!max || maxDepTime > max) {\r\n max = maxDepTime;\r\n }\r\n });\r\n return max;\r\n }\r\n\r\n getMinDepartureTime(results: FlightItinerary[]): number {\r\n let min: number;\r\n\r\n results.forEach((result) => {\r\n let minDepTime = Number(\r\n moment(result.outboundFlights[0].dateTimeDeparting).format('HHmm')\r\n );\r\n minDepTime = Math.floor(minDepTime / 100) * 100;\r\n if (!min || minDepTime < min) {\r\n min = minDepTime;\r\n }\r\n });\r\n\r\n return min;\r\n }\r\n\r\n getMinReturnDepartureTime(results: FlightItinerary[]): number {\r\n let min: number;\r\n\r\n results.forEach((result) => {\r\n if (result.inboundFlights && result.inboundFlights[0]) {\r\n let minDepTime = Number(\r\n moment(result.inboundFlights[0].dateTimeDeparting).format('HHmm')\r\n );\r\n minDepTime = Math.floor(minDepTime / 100) * 100;\r\n if (!min || minDepTime < min) {\r\n min = minDepTime;\r\n }\r\n }\r\n });\r\n\r\n return min;\r\n }\r\n\r\n getMaxReturnDepartureTime(results: FlightItinerary[]): number {\r\n let max: number;\r\n\r\n results.forEach((result) => {\r\n if (result.inboundFlights && result.inboundFlights[0]) {\r\n let maxDepTime = Number(\r\n moment(result.inboundFlights[0].dateTimeDeparting).format('HHmm')\r\n );\r\n\r\n maxDepTime = Math.ceil(maxDepTime / 100) * 100;\r\n\r\n if (!max || maxDepTime > max) {\r\n max = maxDepTime;\r\n }\r\n }\r\n });\r\n\r\n return max;\r\n }\r\n\r\n getMaxDepartureTime(results: FlightItinerary[]): number {\r\n let max: number;\r\n\r\n results.forEach((result) => {\r\n let maxDepTime = Number(\r\n moment(result.outboundFlights[0].dateTimeDeparting).format('HHmm')\r\n );\r\n\r\n maxDepTime = Math.ceil(maxDepTime / 100) * 100;\r\n\r\n if (!max || maxDepTime > max) {\r\n max = maxDepTime;\r\n }\r\n });\r\n\r\n return max;\r\n }\r\n\r\n getBaggage(results: FlightItinerary[]): SelectFilter[] {\r\n const baggage: any = {};\r\n\r\n results.forEach((result) => {\r\n try {\r\n if (result.baggageAllowance.length) {\r\n let total = +result.baggageAllowance[0]?.qty;\r\n if (result.inboundFlights.length) {\r\n // ! assuming second item is inbound if the airlines are different, steven said he would sort this out\r\n if (\r\n result.baggageAllowance[1] &&\r\n +result.baggageAllowance[1].qty > total\r\n ) {\r\n total = +result.baggageAllowance[1]?.qty;\r\n } else if (+result.baggageAllowance[0]?.qty > total) {\r\n total = +result.baggageAllowance[0]?.qty;\r\n }\r\n }\r\n if (+result.baggageAllowance[0]?.qty > total) {\r\n total = +result.baggageAllowance[0]?.qty;\r\n }\r\n baggage[total] = {\r\n selected: false,\r\n value: total,\r\n display: `${total} bag${total !== 1 ? 's' : ''}`\r\n };\r\n }\r\n } catch (error) {\r\n console.error(`+++ Error parsing additional flight data: ${error} +++`);\r\n }\r\n });\r\n\r\n return Object.values(baggage);\r\n }\r\n\r\n getMinPrice(results: FlightItinerary[]): number {\r\n let minPrice: number;\r\n\r\n results.forEach((result) => {\r\n if (!minPrice || result.total.price < minPrice) {\r\n minPrice = result.total.price;\r\n }\r\n });\r\n\r\n return minPrice;\r\n }\r\n\r\n getMaxPrice(results: FlightItinerary[]): number {\r\n let maxPrice: any;\r\n\r\n results.forEach((result) => {\r\n if (!maxPrice || result.total.price > maxPrice) {\r\n maxPrice = result.total.price;\r\n }\r\n });\r\n\r\n return maxPrice;\r\n }\r\n\r\n getAllStops(results: FlightItinerary[]): SelectFilter[] {\r\n const allStops: any = {};\r\n\r\n results.forEach((result) => {\r\n const totalStops = result.outboundFlights.length - 1; // might have to recalculate this\r\n allStops[totalStops] = {\r\n value: totalStops,\r\n display: `${totalStops} stop` + (totalStops !== 1 ? 's' : ''),\r\n selected: false\r\n };\r\n });\r\n\r\n return Object.values(allStops);\r\n }\r\n\r\n getAllClasses(results: FlightItinerary[]): SelectFilter[] {\r\n const allClasses: any = [];\r\n\r\n results.forEach((result) => {\r\n result.outboundFlights.forEach((outFlight: FlightJourney) => {\r\n allClasses[outFlight.cabinClass] = {\r\n value: outFlight.cabinClass,\r\n display: outFlight.cabinClass,\r\n selected: false\r\n } as SelectFilter;\r\n });\r\n\r\n if (result.inboundFlights) {\r\n result.inboundFlights.forEach((inFlight: FlightJourney) => {\r\n allClasses[inFlight.cabinClass] = {\r\n value: inFlight.cabinClass,\r\n display: inFlight.cabinClass,\r\n selected: false\r\n } as SelectFilter;\r\n });\r\n }\r\n });\r\n\r\n return Object.values(allClasses);\r\n }\r\n\r\n /**\r\n * @description - create select filters for all unique departure airports returned in the search\r\n * @param results - the flight results\r\n */\r\n getAllDepartureAirports(\r\n results: FlightItinerary[],\r\n inbound = false\r\n ): SelectFilter[] {\r\n const allAirports: any = {};\r\n\r\n results.forEach((result) => {\r\n if (result.outboundFlights.length && !inbound) {\r\n allAirports[result.outboundFlights[0].originAirport] = {\r\n value: result.outboundFlights[0].originAirport,\r\n display: result.outboundFlights[0].originAirportName,\r\n selected: false\r\n };\r\n }\r\n\r\n if (result.inboundFlights?.length && inbound) {\r\n allAirports[result.inboundFlights[0].originAirport] = {\r\n value: result.inboundFlights[0].originAirport,\r\n display: result.inboundFlights[0].originAirportName,\r\n selected: false\r\n };\r\n }\r\n });\r\n\r\n return Object.values(allAirports);\r\n }\r\n\r\n /**\r\n * @description - create select filters for all unique departure airports returned in the search\r\n * @param results - the flight results\r\n */\r\n getAllArrivalAirports(\r\n results: FlightItinerary[],\r\n inbound = false\r\n ): SelectFilter[] {\r\n const allAirports: any = {};\r\n\r\n results.forEach((result) => {\r\n if (result.outboundFlights.length && !inbound) {\r\n allAirports[\r\n result.outboundFlights[\r\n result.outboundFlights.length - 1\r\n ].destinationAirport\r\n ] = {\r\n value:\r\n result.outboundFlights[result.outboundFlights.length - 1]\r\n .destinationAirport,\r\n display:\r\n result.outboundFlights[result.outboundFlights.length - 1]\r\n .destinationAirportName,\r\n selected: false\r\n };\r\n }\r\n\r\n if (result.inboundFlights?.length && inbound) {\r\n allAirports[\r\n result.inboundFlights[\r\n result.inboundFlights.length - 1\r\n ].destinationAirport\r\n ] = {\r\n value:\r\n result.inboundFlights[result.inboundFlights.length - 1]\r\n .destinationAirport,\r\n display:\r\n result.inboundFlights[result.inboundFlights.length - 1]\r\n .destinationAirportName,\r\n selected: false\r\n };\r\n }\r\n });\r\n\r\n return Object.values(allAirports);\r\n }\r\n\r\n /**\r\n * @description - create select filters for all unique airlines returned in the search\r\n * @param results - the flight results\r\n */\r\n getAllAirlines(results: FlightItinerary[]): SelectFilter[] {\r\n const allAirlines: any = {};\r\n\r\n results.forEach((result: FlightItinerary) => {\r\n result.outboundFlights.forEach((outFlight: FlightJourney) => {\r\n allAirlines[outFlight.operatingCarrier] = {\r\n value: outFlight.operatingCarrier,\r\n display: outFlight.operatingCarrierName,\r\n selected: false\r\n } as SelectFilter;\r\n });\r\n\r\n if (result.inboundFlights) {\r\n result.inboundFlights.forEach((inFlight: FlightJourney) => {\r\n allAirlines[inFlight.operatingCarrier] = {\r\n value: inFlight.operatingCarrier,\r\n display: inFlight.operatingCarrierName,\r\n selected: false\r\n } as SelectFilter;\r\n });\r\n }\r\n });\r\n\r\n return Object.values(allAirlines);\r\n }\r\n\r\n updateLowestPrice(results: FlightQuoteResultArray): ICheapestPrice {\r\n return null;\r\n // add in once filght result is updated///\r\n // const results = this.storageService.getSessionItemAsList<FlightQuoteResultArray>(this.resultsSessionName) || [] as FlightQuoteResultArray;\r\n // if(!results.length) return;\r\n // this._cheapestResultPrice.currencyCode = results[0].total.currency;\r\n // results.map(result => {\r\n // const price = result.total.price;\r\n // if( this._cheapestResultPrice.amount > price || this._cheapestResultPrice.amount === null){\r\n // this._cheapestResultPrice.amount = price;\r\n // }\r\n // })\r\n }\r\n\r\n async selectGroupedFlight(\r\n selectedFlight: FlightItineraryWithSelected,\r\n direction: FlightDirectionEnum\r\n ) {\r\n const intBasket: InternalBasketInterface =\r\n await this.basketService.getDefaultBasket();\r\n const basket = intBasket?.subject.value;\r\n\r\n if (\r\n basket &&\r\n this.originalUserSearch.chosenSearchType === FlightSearchType.oneWay &&\r\n direction === FlightDirectionEnum.Outbound\r\n ) {\r\n this.doBooking(\r\n intBasket,\r\n selectedFlight,\r\n {\r\n outboundFlights: selectedFlight.outboundFlights.map(\r\n (flight: FlightJourney, segmentIndex: number) =>\r\n this.makeSchemaFlights(flight, 'outbound', 0, segmentIndex)\r\n ),\r\n inboundFlights: [],\r\n journeyType: 'single'\r\n },\r\n selectedFlight.outboundFlights[0].dateTimeDeparting\r\n );\r\n return;\r\n }\r\n if (\r\n basket &&\r\n this.originalUserSearch.chosenSearchType === FlightSearchType.return &&\r\n direction === FlightDirectionEnum.Outbound\r\n ) {\r\n if (selectedFlight.selected) {\r\n this.results.next(this.fullResults);\r\n this.selectedGroupFlight = null;\r\n } else {\r\n this.selectedGroupFlight = selectedFlight;\r\n const groupsToShow = this.flightsToGroup[selectedFlight.uid];\r\n // const relatedFlights = this.grouped[groupsToShow[0]].flights;\r\n // const filter = (flight: FlightItinerary, segmentIndex: number) => {\r\n // return true;\r\n // };\r\n this.results.next(\r\n (this.fullResults as FlightGroupedQuoteResult[]).filter(\r\n (result: FlightGroupedQuoteResult, groupIndex: number) => {\r\n return groupsToShow.includes(groupIndex);\r\n }\r\n )\r\n );\r\n }\r\n selectedFlight.selected = !selectedFlight.selected;\r\n }\r\n if (\r\n basket &&\r\n this.originalUserSearch.chosenSearchType === FlightSearchType.return &&\r\n direction === FlightDirectionEnum.Inbound &&\r\n this.selectedGroupFlight\r\n ) {\r\n this.doBooking(\r\n intBasket,\r\n selectedFlight,\r\n {\r\n outboundFlights: [\r\n ...selectedFlight.outboundFlights.map(\r\n (flight: FlightJourney, segmentIndex: number) =>\r\n this.makeSchemaFlights(flight, 'outbound', 0, segmentIndex)\r\n )\r\n ],\r\n inboundFlights: [\r\n ...selectedFlight.inboundFlights.map(\r\n (flight: FlightJourney, segmentIndex: number) =>\r\n this.makeSchemaFlights(flight, 'inbound', 0, segmentIndex)\r\n )\r\n ],\r\n journeyType: 'roundtrip'\r\n },\r\n selectedFlight.outboundFlights[0].dateTimeDepartingUTC,\r\n selectedFlight.inboundFlights[0].dateTimeDepartingUTC\r\n );\r\n this.selectedGroupFlight.selected = false;\r\n this.results.next(this.fullResults);\r\n }\r\n }\r\n\r\n doBooking(\r\n intBasket: InternalBasketInterface,\r\n selectedFlight: FlightItinerary,\r\n schemaDetails: any,\r\n outboundDate: string,\r\n inboundDate?: string\r\n ): void {\r\n const { sourceId, co2PerItem, co2PerPassenger, total } = selectedFlight;\r\n const booking: AddItemToBasketMutationVariables = {\r\n adults: this.adults,\r\n basket: intBasket.id,\r\n children: this.children,\r\n co2PerItem,\r\n co2PerPassenger,\r\n currency: total.currency as CurrencyCode,\r\n detail: schemaDetails,\r\n price: total.price,\r\n searchQuery: this.resultQuery,\r\n service: sourceId.toString(),\r\n outboundDate\r\n };\r\n if (inboundDate) {\r\n booking.inboundDate = inboundDate;\r\n }\r\n this.basketService.addToBasket(\r\n booking,\r\n intBasket,\r\n this.searchService,\r\n this.travellers\r\n );\r\n }\r\n makeSchemaFlights(\r\n selectedFlight: FlightJourney,\r\n flightGroup: 'outbound' | 'inbound',\r\n groupIndex: number,\r\n segmentIndex: number\r\n ): any {\r\n return {\r\n cabinClass: selectedFlight.cabinClass,\r\n dateTimeArriving: selectedFlight.dateTimeArriving,\r\n dateTimeArrivingUTC: selectedFlight.dateTimeArrivingUTC,\r\n dateTimeDeparting: selectedFlight.dateTimeDeparting,\r\n dateTimeDepartingUTC: selectedFlight.dateTimeDepartingUTC,\r\n destinationAirport: selectedFlight.destinationAirport,\r\n journeyInfo: {\r\n flightGroup,\r\n groupIndex,\r\n segmentIndex\r\n },\r\n marketingCarrier: selectedFlight.marketingCarrier,\r\n marketingFlightNumber: selectedFlight.marketingFlightNumber,\r\n operatingCarrier: selectedFlight.operatingCarrier,\r\n operatingFlightNumber: selectedFlight.operatingFlightNumber,\r\n originAirport: selectedFlight.originAirport,\r\n totalDuration: selectedFlight.totalDuration\r\n };\r\n }\r\n\r\n async addFlightJourneysToBasket(\r\n flightQuote: FlightItinerary\r\n ): Promise<boolean> {\r\n if (flightQuote.unavailable) {\r\n return Promise.resolve(false);\r\n }\r\n const intBasket: InternalBasketInterface =\r\n await this.basketService.getDefaultBasket();\r\n const basket = intBasket?.subject.value;\r\n if (basket) {\r\n const { sourceId, co2PerItem, co2PerPassenger, total } = flightQuote;\r\n const outboundDate: any = moment(\r\n flightQuote.outboundFlights[0].dateTimeDeparting\r\n );\r\n const inboundDate: any = flightQuote.inboundFlights.length\r\n ? moment(flightQuote.inboundFlights[0].dateTimeDeparting)\r\n : null;\r\n\r\n const schemaDetails = {\r\n outboundFlights: [\r\n ...flightQuote.outboundFlights.map(\r\n (flight: FlightJourney, segmentIndex: number) =>\r\n this.makeSchemaFlights(flight, 'outbound', 0, segmentIndex)\r\n )\r\n ],\r\n inboundFlights: [\r\n ...flightQuote.inboundFlights.map(\r\n (flight: FlightJourney, segmentIndex: number) =>\r\n this.makeSchemaFlights(flight, 'inbound', 0, segmentIndex)\r\n )\r\n ],\r\n journeyType: 'single'\r\n };\r\n const booking: AddItemToBasketMutationVariables = {\r\n adults: this.adults,\r\n basket: intBasket.id,\r\n children: this.children,\r\n co2PerItem,\r\n co2PerPassenger,\r\n currency: total.currency as CurrencyCode,\r\n detail: schemaDetails,\r\n price: total.price,\r\n searchQuery: this.resultQuery,\r\n service: sourceId.toString(),\r\n outboundDate: outboundDate.format()\r\n };\r\n if (inboundDate) {\r\n booking.inboundDate = inboundDate.format();\r\n schemaDetails.journeyType = 'roundtrip';\r\n }\r\n\r\n return this.basketService.addToBasket(\r\n booking,\r\n intBasket,\r\n this.searchService,\r\n this.travellers\r\n );\r\n }\r\n return Promise.resolve(false); // TODO should this throw an error?\r\n }\r\n}\r\n","export abstract class BaseEnvironment {\r\n abstract readonly production: boolean;\r\n // tslint:disable-next-line: variable-name\r\n abstract readonly bypass_logon: boolean;\r\n // tslint:disable-next-line: variable-name\r\n abstract readonly disable_console: boolean;\r\n abstract readonly hostBaseUrl: string;\r\n abstract readonly authURL: string;\r\n abstract readonly requestURL: string;\r\n abstract readonly authRefreshTimeout: number;\r\n abstract readonly maxFlightResults: number;\r\n abstract readonly timeout: number;\r\n abstract readonly httpCallTimeout: number;\r\n abstract readonly maxNumberRecentSearches: number;\r\n abstract readonly useSessionStorageForRecentSearches: boolean;\r\n abstract readonly AppNotificationBaseUrl: string;\r\n abstract readonly tagMap: { [key: string]: string };\r\n // Lighting should set this to 10, to only get the first 10, Scion and Go2book can leave it at MAX_SAFE_INTEGER to preload all.\r\n readonly numberHotelToPreload = Number.MAX_SAFE_INTEGER;\r\n numberOfHotelsToFetch: number = 5;\r\n autoFetchHotelTimeout: number = 50;\r\n autoLogoutTime = 60;\r\n hotelAvalibilityTimeout: number = 2000;\r\n maxBasketNumber: number = 5;\r\n}\r\n","import { Subject } from 'rxjs';\r\n\r\nexport type EventType = string;\r\nexport interface EventMessage {\r\n name: EventType;\r\n data: any;\r\n}\r\n\r\nconst nullEmitter = { next: (a: any) => {} };\r\n\r\nexport class BaseEventMessenager {\r\n private events: { [key: string]: Subject<any> } = {};\r\n constructor() {}\r\n\r\n getEmmitter(eventType: EventType): Subject<any> {\r\n this.events[eventType] = this.events[eventType] || new Subject<any>();\r\n return this.events[eventType];\r\n }\r\n\r\n emit(eventType: EventType, data: any) {\r\n (this.events[eventType] || nullEmitter).next(data);\r\n }\r\n}\r\n","class Node<T> {\r\n next: Node<T> = null;\r\n pre: Node<T> = null;\r\n constructor(public key: string, public value: T) {}\r\n}\r\n\r\nexport class LimitedCache<T> {\r\n private cache: { [key: string]: Node<T> } = {};\r\n private count: number = 0;\r\n private head: Node<T>;\r\n\r\n constructor(private size = 10) {\r\n this.head = new Node<T>('', null);\r\n const tail = new Node<T>('', null);\r\n this.head.next = tail;\r\n tail.pre = this.head;\r\n }\r\n\r\n get(key: string): T {\r\n if (this.cache[key]) {\r\n return this.cache[key].value;\r\n }\r\n return null;\r\n }\r\n\r\n set(key: string, value: T) {\r\n const item: Node<T> = this.cache[key];\r\n if (item) {\r\n item.value = value;\r\n this.deleteItem(item);\r\n this.addToHead(item);\r\n } else {\r\n this.cache[key] = new Node<T>(key, value);\r\n this.addToHead(this.cache[key]);\r\n }\r\n }\r\n\r\n hasKey(key: string): boolean {\r\n return this.cache.hasOwnProperty(key);\r\n }\r\n\r\n deleteItem(node: Node<T>): void {\r\n node.pre.next = node.next;\r\n node.next.pre = node.pre;\r\n }\r\n\r\n addToHead(item: Node<T>) {\r\n item.next = this.head.next;\r\n item.next.pre = item;\r\n item.pre = this.head;\r\n this.head.next = item;\r\n }\r\n}\r\n\r\nexport function Memorise() {\r\n return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {\r\n const cache = new LimitedCache<any>();\r\n const targetMethod = descriptor.value;\r\n\r\n descriptor.value = function (...args: any[]) {\r\n const key = JSON.stringify(args);\r\n\r\n if (!cache.hasKey(key)) {\r\n cache.set(key, targetMethod.apply(this, args));\r\n }\r\n\r\n return cache.get(key);\r\n };\r\n };\r\n}\r\n","import moment from 'moment';\r\nimport _ from 'lodash';\r\n\r\nimport { Traveller } from '../models/traveller.object';\r\n\r\nimport {\r\n BasketDetails,\r\n BasketItemManagementInfo\r\n} from '../services/enterprise-basket.service';\r\nimport { ManagementInfoAndIsValid } from './management-info-and-valid';\r\nimport { UserServices } from '../interfaces/Iuser.service';\r\nimport {\r\n FlightDirectionEnum,\r\n MinMax,\r\n NgbDateStruct,\r\n Schema\r\n} from '../types/types';\r\nimport {\r\n Airport,\r\n BasketItem,\r\n FareConditions,\r\n FlightItinerary,\r\n FlightJourney,\r\n PassengerType,\r\n Service,\r\n ServiceType,\r\n UserPassengerTypeInput\r\n} from '../types/graphql.types';\r\nimport { SupplementaryBookingInfoInterface } from '../interfaces/Isupplementary-booking-info-impl';\r\nimport { Memorise } from './limited-cache.class';\r\n\r\ndeclare var hex_hmac_md5: any;\r\n\r\nconst FLIGHT_MAX_CHILD_AGE_YEARS = 16;\r\nconst RAIL_MAX_CHILD_AGE_YEARS = 12;\r\nconst EUROSTAR_MAX_CHILD_AGE_YEARS = 12;\r\nconst COACH_MAX_CHILD_AGE_YEARS = 15;\r\nconst LOUNGES_MAX_CHILD_AGE_YEARS = 12;\r\nconst FLIGHT_MAX_INFANT_AGE_YEARS = 0;\r\nconst RAIL_MAX_INFANT_AGE_YEARS = 0;\r\nconst COACH_MAX_INFANT_AGE_YEARS = 0;\r\nconst LOUNGES_MAX_INFANT_AGE_YEARS = 0;\r\n\r\nconst months = [\r\n 'Jan',\r\n 'Feb',\r\n 'Mar',\r\n 'Apr',\r\n 'May',\r\n 'Jun',\r\n 'Jul',\r\n 'Aug',\r\n 'Sep',\r\n 'Oct',\r\n 'Nov',\r\n 'Dec'\r\n];\r\n\r\nconst full_months = [\r\n 'January',\r\n 'February',\r\n 'March',\r\n 'April',\r\n 'May',\r\n 'June',\r\n 'July',\r\n 'August',\r\n 'September',\r\n 'October',\r\n 'November',\r\n 'December'\r\n];\r\n\r\nconst weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\r\n\r\nconst full_weekdays = [\r\n 'Sunday',\r\n 'Monday',\r\n 'Tuesday',\r\n 'Wednesday',\r\n 'Thursday',\r\n 'Friday',\r\n 'Saturday'\r\n];\r\n\r\nexport class BaseHelperRoutines {\r\n static READ_DATE_FORMAT = 'dd, D MMM YYYY';\r\n static READ_TIME_FORMAT = 'HH:mm';\r\n static DATE_FORMAT = 'YYMMDD';\r\n static ISO_DATA_FORMAT = 'YYYY-MM-DD';\r\n static ISO_DATA_FORMAT_TIME = 'YYYY-MM-DD HH:mm';\r\n static ISO_DATA_FORMAT_NO_HYPHANS = 'YYYYMMDD';\r\n static TIME_FORMAT = 'HHmm';\r\n static TIME_FORMAT_COLON = 'HH:mm';\r\n static MMDDYY_DATE = 'DDMMYYYY';\r\n\r\n minToHour(dur: number) {\r\n return `${Math.floor(dur / 60)}h ${dur % 60}m`;\r\n }\r\n\r\n makeColonTime(time: string) {\r\n return time.substring(0, 2) + ':' + time.substring(2, 4);\r\n }\r\n\r\n nonNullMin(key: string, ...args: any[]) {\r\n return args.reduce(\r\n (current, item) => {\r\n if (item && item[key]) {\r\n if (current.min > Number(item[key])) {\r\n return { item, min: Number(item[key]) };\r\n }\r\n }\r\n return current;\r\n },\r\n { min: Number.MAX_SAFE_INTEGER, item: null }\r\n ).item;\r\n }\r\n\r\n joinByComma(...attributes: any[]): string {\r\n return attributes\r\n .reduce((acc, attr) => {\r\n if (_.isEmpty(attr)) {\r\n acc += attr + ',';\r\n }\r\n return acc;\r\n }, '')\r\n .slice(0, -1);\r\n }\r\n\r\n mutuallyInclude(a: string, b: string): boolean {\r\n try {\r\n return a.includes(b) || b.includes(a);\r\n } catch (e) {\r\n console.warn('Trying to mutually compare undefined variable.');\r\n return false;\r\n }\r\n }\r\n\r\n findByKey(array: any[], key: string, value: string): any {\r\n return array\r\n .filter((item) => {\r\n return item[key] === value;\r\n })\r\n .pop();\r\n }\r\n\r\n dateToNgDate(date: Date): NgbDateStruct {\r\n return {\r\n year: date.getFullYear(),\r\n month: date.getMonth() + 1,\r\n day: date.getDate()\r\n };\r\n }\r\n\r\n convertToYYMMDD(date: string) {\r\n if (date.length > 6) {\r\n return this.formatDate(this.yyyymmddTimeToMoment(date));\r\n }\r\n return date;\r\n }\r\n\r\n formatDateToMMDDYYY(date: Date): string {\r\n return moment(date).format(BaseHelperRoutines.MMDDYY_DATE);\r\n }\r\n\r\n formatDate(date: moment.Moment): string {\r\n date = moment(date);\r\n return date.format(BaseHelperRoutines.DATE_FORMAT);\r\n }\r\n\r\n formatTime(date: moment.Moment): string {\r\n try {\r\n return date.format(BaseHelperRoutines.TIME_FORMAT);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n formatTimeColon(date: moment.Moment): string {\r\n date = moment(date);\r\n return date.format(BaseHelperRoutines.TIME_FORMAT_COLON);\r\n }\r\n\r\n formatIsoDate(date: moment.Moment): string {\r\n date = moment(date);\r\n return date.format(BaseHelperRoutines.ISO_DATA_FORMAT);\r\n }\r\n\r\n formatIsoDateTime(date: moment.Moment): string {\r\n date = moment(date);\r\n return date.format(BaseHelperRoutines.ISO_DATA_FORMAT_TIME);\r\n }\r\n\r\n formatIsoDateNoHyphans(date: moment.Moment): string {\r\n date = moment(date);\r\n return date.format(BaseHelperRoutines.ISO_DATA_FORMAT_NO_HYPHANS);\r\n }\r\n\r\n generateTimesList(from = 0, to = 24, step = 15): string[] {\r\n const dateTimeArray: string[] = [];\r\n for (let hour = 0; hour < to - from; hour++) {\r\n for (let minute = 0; minute < 60; minute += step) {\r\n dateTimeArray.push(moment({ hour, minute }).format('HH:mm'));\r\n }\r\n }\r\n return dateTimeArray;\r\n }\r\n\r\n momentToNgDate(date: moment.Moment): NgbDateStruct {\r\n date = moment(date);\r\n return this.dateToNgDate(date.toDate());\r\n }\r\n\r\n ngDateToDate(date: NgbDateStruct): Date {\r\n return new Date(date.year, date.month - 1, date.day);\r\n }\r\n\r\n ngDateToMoment(date: NgbDateStruct, time?: string): moment.Moment {\r\n const mom = moment(this.ngDateToDate(date));\r\n if (time) {\r\n const times = time.split(':');\r\n if (times.length === 2) {\r\n mom.set('hours', Number(times[0])).set('minutes', Number(times[1]));\r\n } else {\r\n mom\r\n .set('hours', Number(time.substr(0, 2)))\r\n .set('minutes', Number(time.substr(2, 2)));\r\n }\r\n }\r\n return mom;\r\n }\r\n\r\n todayToNgbDateStruct(): NgbDateStruct {\r\n const today = moment();\r\n return { year: today.year(), month: today.month() + 1, day: today.date() };\r\n }\r\n\r\n objectToArray(object: Record<string, any>): Array<any> {\r\n return Object.keys(object).map((i) => object[i]);\r\n }\r\n\r\n yyyymmddToDate(value: string): Date {\r\n return new Date(\r\n Number(value.substring(0, 4)),\r\n Number(value.substring(4, 6)) - 1,\r\n Number(value.substring(6, 8))\r\n );\r\n }\r\n\r\n yyyymmddToMoment(value: string): moment.Moment {\r\n return moment(this.yyyymmddToDate(value));\r\n }\r\n\r\n yymmddToMoment(value: string): moment.Moment {\r\n return moment(value, 'YYMMDD');\r\n }\r\n\r\n yymmddToNgbDate(value: string): NgbDateStruct {\r\n return this.momentToNgDate(this.yymmddToMoment(value));\r\n }\r\n\r\n yymmdd_hhmmToMoment(date: string, time: string): moment.Moment {\r\n return moment(`${date} ${time}`, 'YYMMDD HHmm');\r\n }\r\n\r\n yyyymmdd_hhmmToMoment(date: string, time: string): moment.Moment {\r\n return moment(`${date} ${time}`, 'YYYYMMDD HHmm');\r\n }\r\n\r\n yyyymmddToNgDate(value: string): NgbDateStruct {\r\n return this.dateToNgDate(this.yyyymmddToDate(value));\r\n }\r\n\r\n yyyymmddTimeToNgDate(date: string, time: string): NgbDateStruct {\r\n const dt = this.yyyymmddToMoment(date)\r\n .add(Number(time.substring(0, 2)), 'hours')\r\n .add(Number(time.substring(2, 4)), 'minutes');\r\n return this.momentToNgDate(dt);\r\n }\r\n\r\n yyyymmddTimeToMoment(date: string): moment.Moment {\r\n if (date.length === 6) {\r\n return moment(`${date}`, 'YYMMDD');\r\n }\r\n return moment(`${date}`, 'YYYYMMDD');\r\n }\r\n\r\n hhmmToTime(value: string): string {\r\n return `${value.substring(0, 2)}:${value.substring(2, 4)}`;\r\n }\r\n\r\n dateStringToyyyymmdd(d: string): string | null {\r\n if (typeof d !== 'string') {\r\n return null;\r\n }\r\n const m = /(\\d{4})[-\\/]?(\\d{2})[-\\/]?(\\d{2})/.exec(d);\r\n return m ? `${m[1]}${m[2]}${m[3]}` : null;\r\n }\r\n\r\n timeStringTohh_mm(t: string): string | null {\r\n if (typeof t !== 'string') {\r\n return null;\r\n }\r\n const m = /(\\d{2})[:-]?(\\d{2})/.exec(t);\r\n return m ? `${m[1]}:${m[2]}` : null;\r\n }\r\n\r\n stringToBool(s: string): boolean {\r\n return s && s !== 'false' && s !== '0' && s !== 'no' && s !== 'n';\r\n }\r\n\r\n clone<T = any>(toClone: T): T {\r\n return _.cloneDeep(toClone) as T;\r\n }\r\n\r\n replaceKeysInText(\r\n text: string,\r\n replacements: Record<string, string>\r\n ): string {\r\n return Object.keys(replacements).reduce((current, key) => {\r\n return current.replace('%' + key, replacements[key]);\r\n }, text);\r\n }\r\n\r\n getNextMinuets(date: moment.Moment = moment(), minutesToRound = 15) {\r\n date.minute(Math.ceil(date.minute() / minutesToRound) * minutesToRound);\r\n return date.format('HH:mm');\r\n }\r\n /********************************************************************************************\r\n * Below are functions needed for generating the hashed number once token, taken as required\t*\r\n * Don't Mess with these\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t*\r\n ********************************************************************************************/\r\n getNumberOnceValue(token: string): string {\r\n const random_value = this.guid();\r\n return random_value + '_' + hex_hmac_md5(token, random_value);\r\n }\r\n\r\n guid(): any {\r\n let random_hex = '';\r\n\r\n for (let i = 0; i < 32; i++) {\r\n random_hex += this.s4();\r\n }\r\n\r\n return random_hex;\r\n }\r\n\r\n s4(): any {\r\n return Math.floor((1 + Math.random()) * 0x10000)\r\n .toString(16)\r\n .substring(1);\r\n }\r\n\r\n capitaliseFirstLetter(word: string): string {\r\n if (word.length > 0) {\r\n return word[0].toUpperCase() + word.slice(1).toLowerCase();\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n fromObject(...args: any[]): any {\r\n let data = args.shift();\r\n for (let index = 0; data && index < args.length; index += 1) {\r\n data = data[args[index]];\r\n }\r\n return data;\r\n }\r\n\r\n momentRoundMinutes(time: moment.Moment, round: number): moment.Moment {\r\n time = moment(time).startOf('minutes');\r\n let diff = time.minutes() % round;\r\n if (diff !== 0) {\r\n diff = round - diff;\r\n }\r\n return time.add(diff, 'minute');\r\n }\r\n\r\n round(date: any, duration: any) {\r\n return moment(Math.ceil(+date / +duration) * +duration);\r\n }\r\n\r\n icsFold(body: string): string {\r\n const lines = body.split(/\\r\\n/g);\r\n return lines\r\n .map((line) => {\r\n let res = '';\r\n const n = 72;\r\n line = line.trim();\r\n while (line.length > n) {\r\n res += `${line.slice(0, n)}\\r\\n`;\r\n line = ` ${line.slice(n).trim()}`;\r\n }\r\n if (line.trim()) {\r\n res += line;\r\n }\r\n return res;\r\n })\r\n .join('\\r\\n');\r\n }\r\n\r\n splitAddressLine(\r\n line: string,\r\n len: number\r\n ): { line: string; residue: string } {\r\n const res = {\r\n line: line.replace(/\\s+/g, ' ').trim(),\r\n residue: ''\r\n };\r\n if (res.line.length > len) {\r\n let i = res.line.slice(0, len).lastIndexOf(',');\r\n if (i > 0) {\r\n res.residue = res.line.slice(i + 1).trim();\r\n res.line = res.line.slice(0, i).trim();\r\n } else {\r\n i = res.line.slice(0, len).lastIndexOf(' ');\r\n if (i > 0) {\r\n res.residue = res.line.slice(i + 1).trim();\r\n res.line = res.line.slice(0, i);\r\n } else {\r\n res.residue = res.line.slice(len);\r\n res.line = res.line.slice(0, len);\r\n }\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n daysBetween(start: moment.Moment, end: moment.Moment): number {\r\n return end.diff(start, 'days');\r\n }\r\n\r\n mapPromise<T = any, R = any>(\r\n a: T[],\r\n f: (val: T, index: number) => R | Promise<R>,\r\n max?: number\r\n ): Promise<R[]> {\r\n const it = a[Symbol.iterator]();\r\n const result: R[] = [];\r\n const buffer: Promise<R>[] = [];\r\n let i = 0;\r\n const nextf = (): Promise<R> => {\r\n const next = it.next();\r\n if (next.done) {\r\n return;\r\n }\r\n const index = i++;\r\n return Promise.resolve(f(next.value, index)).then((val) => {\r\n result[index] = val;\r\n return nextf();\r\n });\r\n };\r\n while (!max || buffer.length <= max) {\r\n const n = nextf();\r\n if (n) {\r\n buffer.push(n);\r\n } else {\r\n break;\r\n }\r\n }\r\n return Promise.all(buffer).then(() => {\r\n return result;\r\n });\r\n }\r\n\r\n mapSeriesPromise<T = any, R = any>(\r\n a: T[],\r\n f: (val: T, index: number) => R | Promise<R>\r\n ): Promise<R[]> {\r\n return this.mapPromise(a, f, 1);\r\n }\r\n\r\n obj2queryString(obj: any): string {\r\n return _.reduce(\r\n obj,\r\n (a, v, k) => {\r\n if (a !== '') {\r\n a += '&';\r\n }\r\n return `${a}${encodeURIComponent(k)}=${encodeURIComponent(v)}`;\r\n },\r\n ''\r\n );\r\n }\r\n\r\n stripPunctuation(s: string): string {\r\n return s.replace(/[^a-zA-Z0-9\\s]/g, '');\r\n }\r\n\r\n replaceAll(haystack: string, needle: string, replacement: string): string {\r\n return haystack\r\n ? haystack.replace(new RegExp(needle, 'g'), replacement)\r\n : null;\r\n }\r\n\r\n dateTime(sabsDate: string, sabsTime: string): any {\r\n const tempDate = sabsDate.match(/.{1,2}/g); // splits every 2 characters\r\n const tempTime = sabsTime.match(/.{1,2}/g);\r\n\r\n const newStr =\r\n '20' +\r\n tempDate[0] +\r\n '-' +\r\n tempDate[1] +\r\n '-' +\r\n tempDate[2] +\r\n 'T' +\r\n tempTime[0] +\r\n ':' +\r\n tempTime[1] +\r\n ':00';\r\n return newStr;\r\n }\r\n\r\n alternateJSONStringify(jsonObject: any): string {\r\n let jsonString = JSON.stringify(jsonObject);\r\n jsonString = jsonString.replace(/\"/g, '`');\r\n return jsonString;\r\n }\r\n\r\n // Convert object to array\r\n ConvertObjectToArray(object: object): any[] {\r\n let array = _.values(object);\r\n array = _.flatten(array);\r\n return array;\r\n }\r\n\r\n addDay(dateStruct: NgbDateStruct): any {\r\n const date = new Date(\r\n dateStruct.year,\r\n dateStruct.month - 1,\r\n dateStruct.day + 1\r\n );\r\n const retDate = {\r\n year: date.getFullYear(),\r\n month: date.getMonth() + 1,\r\n day: date.getDate()\r\n };\r\n //// console.log(retDate);\r\n //// console.log(date);\r\n return retDate;\r\n }\r\n\r\n hashCode(toCode: string): string {\r\n let hash = 0;\r\n\r\n for (let i = 0; i < toCode.length; i += 1) {\r\n const char = toCode.charCodeAt(i);\r\n // tslint:disable-next-line: no-bitwise\r\n hash = (hash << 5) - hash + char;\r\n // tslint:disable-next-line: no-bitwise\r\n hash = hash & hash;\r\n }\r\n return hash.toString();\r\n }\r\n\r\n MMddyyToNgb(date: string): NgbDateStruct {\r\n return this.momentToNgDate(moment(date, BaseHelperRoutines.MMDDYY_DATE));\r\n }\r\n\r\n selectedChildrenTravellers(\r\n selectedTravellers: Traveller[],\r\n type: ServiceType\r\n ) {\r\n switch (type) {\r\n // These types do not have a difference between adults and children. so always mark as adults.\r\n case ServiceType.Hotel:\r\n case ServiceType.Cab:\r\n return [];\r\n }\r\n return selectedTravellers.filter(\r\n (traveller: Traveller) => traveller.isChild\r\n );\r\n }\r\n\r\n selectedTravellers(travellers: Traveller[], type: ServiceType) {\r\n switch (type) {\r\n // These types do not have a difference between adults and children. so always mark as adults.\r\n case ServiceType.Hotel:\r\n case ServiceType.Cab:\r\n return { adults: travellers, children: [], infants: [] };\r\n default:\r\n return travellers.reduce(\r\n (\r\n accum: {\r\n adults: Traveller[];\r\n children: Traveller[];\r\n infants: Traveller[];\r\n },\r\n traveller: Traveller\r\n ) => {\r\n if (traveller.isChild) {\r\n if (traveller.isInfant) {\r\n accum.infants.push(traveller);\r\n } else {\r\n accum.children.push(traveller);\r\n }\r\n } else {\r\n accum.adults.push(traveller);\r\n }\r\n return accum;\r\n },\r\n {\r\n adults: [],\r\n children: [],\r\n infants: []\r\n }\r\n );\r\n }\r\n }\r\n selectedAdultTravellers(selectedTravellers: Traveller[], type: ServiceType) {\r\n switch (type) {\r\n // These types do not have a difference between adults and children. so always mark as adults.\r\n case ServiceType.Hotel:\r\n case ServiceType.Cab:\r\n return selectedTravellers;\r\n }\r\n return selectedTravellers.filter(\r\n (traveller: Traveller) => !traveller.isChild && !traveller.isInfant\r\n );\r\n }\r\n\r\n private _isChild(traveller: Traveller | Date, maxAge: number): boolean {\r\n if (traveller instanceof Date) {\r\n const adultDate = moment().add(-maxAge, 'years');\r\n return adultDate.isBefore(\r\n moment(traveller, BaseHelperRoutines.ISO_DATA_FORMAT),\r\n 'day'\r\n );\r\n } else {\r\n return traveller.isChild;\r\n }\r\n }\r\n\r\n isChildFlight(traveller: Traveller): boolean {\r\n return this._isChild(traveller, FLIGHT_MAX_CHILD_AGE_YEARS);\r\n }\r\n\r\n isChildRail(traveller: Traveller): boolean {\r\n return this._isChild(traveller, RAIL_MAX_CHILD_AGE_YEARS);\r\n }\r\n\r\n isChildEurostar(traveller: Traveller): boolean {\r\n return this._isChild(traveller, EUROSTAR_MAX_CHILD_AGE_YEARS);\r\n }\r\n\r\n uniqBy(array: any[], value: string) {\r\n return _.uniqBy(array, value);\r\n }\r\n\r\n isChild(traveller: Traveller | Date, travelType: ServiceType) {\r\n switch (travelType) {\r\n case ServiceType.Flight:\r\n return this._isChild(traveller, FLIGHT_MAX_CHILD_AGE_YEARS);\r\n case ServiceType.Rail:\r\n return this._isChild(traveller, RAIL_MAX_CHILD_AGE_YEARS);\r\n // case ServiceType.Eurostar:\r\n // return this._isChild(traveller, EUROSTAR_MAX_CHILD_AGE_YEARS);\r\n case ServiceType.Coach:\r\n return this._isChild(traveller, COACH_MAX_CHILD_AGE_YEARS);\r\n case ServiceType.Lounge:\r\n return this._isChild(traveller, LOUNGES_MAX_CHILD_AGE_YEARS);\r\n case ServiceType.Hotel:\r\n case ServiceType.Cab:\r\n return false;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n isInfant(traveller: Traveller | Date, travelType: ServiceType) {\r\n switch (travelType) {\r\n case ServiceType.Flight:\r\n return this._isChild(traveller, FLIGHT_MAX_INFANT_AGE_YEARS);\r\n case ServiceType.Rail:\r\n return this._isChild(traveller, RAIL_MAX_INFANT_AGE_YEARS);\r\n // case ServiceType.Eurostar:\r\n // return this._isChild(traveller, EUROSTAR_MAX_CHILD_AGE_YEARS);\r\n case ServiceType.Coach:\r\n return this._isChild(traveller, COACH_MAX_INFANT_AGE_YEARS);\r\n case ServiceType.Lounge:\r\n return this._isChild(traveller, LOUNGES_MAX_INFANT_AGE_YEARS);\r\n case ServiceType.Hotel:\r\n case ServiceType.Cab:\r\n return false;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n getAgeType(traveller: Traveller, travelType: ServiceType): any {\r\n return this.isChild(traveller, travelType) ? 'C' : 'A';\r\n }\r\n\r\n getMaxChildAge(type: ServiceType): string {\r\n switch (type) {\r\n case ServiceType.Flight:\r\n return moment()\r\n .add(-FLIGHT_MAX_CHILD_AGE_YEARS + 1, 'years')\r\n .format(BaseHelperRoutines.MMDDYY_DATE);\r\n case ServiceType.Rail:\r\n return moment()\r\n .add(-RAIL_MAX_CHILD_AGE_YEARS + 1, 'years')\r\n .format(BaseHelperRoutines.MMDDYY_DATE);\r\n // case ServiceType.EUROSTAR:\r\n // return moment().add(-EUROSTAR_MAX_CHILD_AGE_YEARS + 1, 'years').format(Helpers.MMDDYY_DATE);\r\n case ServiceType.Coach:\r\n return moment()\r\n .add(-COACH_MAX_CHILD_AGE_YEARS + 1, 'years')\r\n .format(BaseHelperRoutines.MMDDYY_DATE);\r\n case ServiceType.Lounge:\r\n return moment()\r\n .add(-LOUNGES_MAX_CHILD_AGE_YEARS + 1, 'years')\r\n .format(BaseHelperRoutines.MMDDYY_DATE);\r\n }\r\n }\r\n\r\n getDefaultAdultAge(type: ServiceType): string {\r\n switch (type) {\r\n case ServiceType.Flight:\r\n return moment()\r\n .add(-FLIGHT_MAX_CHILD_AGE_YEARS - 10, 'years')\r\n .format(BaseHelperRoutines.MMDDYY_DATE);\r\n case ServiceType.Rail:\r\n return moment()\r\n .add(-RAIL_MAX_CHILD_AGE_YEARS - 10, 'years')\r\n .format(BaseHelperRoutines.MMDDYY_DATE);\r\n // case ServiceType.Eurostar:\r\n // return moment().add(-EUROSTAR_MAX_CHILD_AGE_YEARS - 10, 'years').format(Helpers.MMDDYY_DATE);\r\n case ServiceType.Coach:\r\n return moment()\r\n .add(-COACH_MAX_CHILD_AGE_YEARS - 10, 'years')\r\n .format(BaseHelperRoutines.MMDDYY_DATE);\r\n case ServiceType.Lounge:\r\n return moment()\r\n .add(-LOUNGES_MAX_CHILD_AGE_YEARS - 10, 'years')\r\n .format(BaseHelperRoutines.MMDDYY_DATE);\r\n case ServiceType.Hotel:\r\n case ServiceType.Cab:\r\n // These types do not have child places so\r\n return moment()\r\n .add(-18, 'years')\r\n .format(BaseHelperRoutines.MMDDYY_DATE);\r\n }\r\n return moment().add(-18, 'years').format(BaseHelperRoutines.MMDDYY_DATE);\r\n }\r\n\r\n transform(\r\n array: any[],\r\n callback: _.MemoVoidArrayIterator<any, any[]>,\r\n acc: any\r\n ): any[] {\r\n return _.transform(array, callback, acc);\r\n }\r\n\r\n arrayToObject<T extends { [key: string]: any }>(\r\n array: T[],\r\n field: string\r\n ): { [key: string]: T } {\r\n return array\r\n .filter((data: T) => !!data)\r\n .reduce((configs: { [key: string]: T }, configItem: T) => {\r\n if (configItem && configItem[field]) {\r\n configs[configItem[field]] = configItem;\r\n return configs;\r\n }\r\n }, {});\r\n }\r\n\r\n arrayToObjectArray<T extends { [key: string]: any }>(\r\n array: T[],\r\n field: string\r\n ): { [key: string]: T[] } {\r\n return array\r\n .filter((data: T) => !!data)\r\n .reduce((configs: { [key: string]: T[] }, configItem: T) => {\r\n if (configItem && configItem[field]) {\r\n configs[configItem[field]] = configs[configItem[field]] || [];\r\n configs[configItem[field]].push(configItem);\r\n return configs;\r\n }\r\n }, {});\r\n }\r\n\r\n getTerminals(airport: Airport): string[] {\r\n return airport.terminals;\r\n }\r\n\r\n fieldFromObject(obj: object, field: string): string {\r\n return (field || '')\r\n .split('.')\r\n .reduce((current: Record<string, any>, field1: string) => {\r\n if (current && current[field1]) {\r\n return current[field1];\r\n }\r\n return '';\r\n }, obj);\r\n }\r\n\r\n mapFieldFromObject<K extends string | number | symbol, T>(field: K) {\r\n return (obj: Record<K, any>): T => {\r\n return obj[field];\r\n };\r\n }\r\n\r\n removeNulls<T>(query: T): T {\r\n return Object.keys(query).reduce((accum: T, key: string) => {\r\n const value = (query as Record<string, any>)[key];\r\n const data = Array.isArray(value)\r\n ? value.filter((item: any) => !!item) || null\r\n : value;\r\n if (\r\n (data !== null && data !== undefined && data !== 'null') ||\r\n (Array.isArray(data) && data.length > 0)\r\n ) {\r\n (accum as Record<string, any>)[key] = data;\r\n }\r\n return accum;\r\n }, {} as T);\r\n }\r\n\r\n getTravellersId(travellers: Traveller[]): string[] {\r\n if (travellers) {\r\n return travellers.reduce(\r\n (previousValue: string[], currentValue: Traveller, idx: number) => {\r\n return idx === 0 ? [currentValue.id] : [...previousValue, currentValue.id];\r\n }, []);\r\n }\r\n }\r\n\r\n /**\r\n * loop over the query object param and convert any moment date objects to date-time strings\r\n * @param query\r\n * @param debug\r\n */\r\n sanitizeMomentDates(query: any, debug = false): any {\r\n const sanitizedQuery = { ...query };\r\n for (const [key, value] of Object.entries(sanitizedQuery)) {\r\n if (moment.isMoment(value)) {\r\n sanitizedQuery[key] = sanitizedQuery[key].toISOString();\r\n }\r\n }\r\n if (debug) {\r\n console.log('-- sanitizeMomentDates() called --');\r\n console.log('original query: ', query);\r\n console.log('sanitized query: ', sanitizedQuery);\r\n }\r\n return sanitizedQuery;\r\n }\r\n\r\n toStrings<T>(toFormat: T, schema: Schema): T {\r\n return Object.entries(schema.properties || {}).reduce(\r\n (currentValue: T, [key, value]: [string, Schema]): T => {\r\n const newValue = this._formatValue(\r\n toFormat[key as keyof T],\r\n value,\r\n (schema.required || []).includes(key)\r\n );\r\n\r\n if (newValue !== null) {\r\n currentValue[key as keyof T] = newValue;\r\n }\r\n return currentValue;\r\n },\r\n {} as T\r\n );\r\n }\r\n\r\n private _formatValue(value: any, schema: Schema, isRequired: boolean): any {\r\n switch (schema.type) {\r\n case 'integer':\r\n const tmp = Number.parseInt(value, 10);\r\n return Number.isNaN(tmp) ? (isRequired ? 0 : null) : tmp;\r\n case 'string':\r\n const tmp1 = value ? value.toString() : null;\r\n return tmp1 && tmp1.length > 0 ? tmp1 : isRequired ? '' : null;\r\n case 'object':\r\n return value ? this.toStrings(value, schema) : isRequired ? {} : null;\r\n case 'array':\r\n return value; // TODO write array translation\r\n default:\r\n return value;\r\n }\r\n }\r\n\r\n makeTimeWindow(dateTime: moment.Moment, start: number, end: number): string {\r\n const startTime = dateTime.clone().add(start, 'hour');\r\n const endTime = dateTime.clone().add(end, 'hour');\r\n\r\n return this.formatTime(startTime) + '-' + this.formatTime(endTime);\r\n }\r\n\r\n inRange(tocheck: number, range: MinMax): boolean {\r\n return tocheck >= range.min && tocheck <= range.max;\r\n }\r\n\r\n makeUsers(travellers: Traveller[]): UserPassengerTypeInput[] {\r\n return travellers.map((traveller: Traveller): UserPassengerTypeInput => {\r\n return {\r\n id: traveller.id,\r\n passengerType: traveller.isChild\r\n ? PassengerType.Child\r\n : traveller.isInfant\r\n ? PassengerType.Infant\r\n : PassengerType.Adult\r\n };\r\n });\r\n }\r\n\r\n makeMomentDayTime(addDay?: number, hh?: number, m?: number) {\r\n const dt = moment();\r\n\r\n if (addDay !== undefined) {\r\n dt.add(addDay, 'day');\r\n }\r\n\r\n if (hh !== undefined) {\r\n dt.set('hours', hh);\r\n }\r\n\r\n if (m !== undefined) {\r\n dt.set('minutes', m);\r\n }\r\n\r\n return dt;\r\n }\r\n\r\n sanatizeReturns<T>(\r\n defaults: T,\r\n suppliedData: Partial<T>,\r\n momentFields?: (keyof T)[]\r\n ): T {\r\n const combined: T = Object.assign({}, defaults, suppliedData);\r\n return (momentFields || []).reduce((current: T, next: keyof T) => {\r\n const value = (current as any)[next];\r\n (current as any)[next] = !value\r\n ? moment()\r\n : typeof value === 'string'\r\n ? moment(value)\r\n : value;\r\n return current;\r\n }, combined);\r\n }\r\n\r\n miIsValid(toCheck: ManagementInfoAndIsValid[]) {\r\n return (\r\n toCheck.length === 0 ||\r\n !!toCheck.find((miItem: ManagementInfoAndIsValid) => {\r\n return miItem.isValid();\r\n })\r\n );\r\n }\r\n\r\n isMiValid(\r\n miPerItem: ManagementInfoAndIsValid[],\r\n miPerUser: {\r\n [key: string]: {\r\n managementInfo: ManagementInfoAndIsValid[];\r\n };\r\n }\r\n ): boolean {\r\n const userMis = Object.values(miPerUser || {});\r\n return (\r\n this.miIsValid(miPerItem) &&\r\n (userMis.length === 0 ||\r\n !!userMis.find(\r\n (userMis1: { managementInfo: ManagementInfoAndIsValid[] }) => {\r\n return this.miIsValid(userMis1.managementInfo);\r\n }\r\n ))\r\n );\r\n }\r\n\r\n needsMi(basket: BasketDetails, needsToViewMi: boolean): boolean {\r\n return (\r\n basket.basketInfoMiDetails.length > 0 &&\r\n (needsToViewMi ||\r\n !basket.basketInfoMiDetails.find(\r\n (miDetail: BasketItemManagementInfo): boolean => {\r\n return this.isMiValid(miDetail.miPerItem, miDetail.miPerUser);\r\n }\r\n ))\r\n );\r\n }\r\n\r\n findService(services: UserServices, id: string): Service {\r\n return Object.values(services).reduce(\r\n (current: Service, service1: Service[]): Service => {\r\n return (\r\n current ||\r\n service1.find((service2: Service): boolean => {\r\n return service2.id === id;\r\n })\r\n );\r\n },\r\n null as Service\r\n );\r\n }\r\n\r\n allTrue(\r\n suppInfo: SupplementaryBookingInfoInterface[],\r\n filter: (suppInfo: SupplementaryBookingInfoInterface) => boolean\r\n ): boolean {\r\n return suppInfo.filter(filter).length === suppInfo.length;\r\n }\r\n\r\n joinFromAttribute<T>(\r\n joinCharacter: string,\r\n attribute: keyof T,\r\n array: T[]\r\n ): string {\r\n return array.map((item: T) => item[attribute]).join(joinCharacter);\r\n }\r\n\r\n /**\r\n * @description - split up an array into equal parts\r\n * @param array - the array to split up\r\n * @param size - the size of the constituant parts\r\n * @param includeRemainder - wether or not to include any remaing results - default true\r\n */\r\n splitUpArray(\r\n array: any[],\r\n size: number,\r\n includeRemainder: boolean = true\r\n ): any[] {\r\n const arrayCopy = _.cloneDeep(array); // lodash clone deep\r\n let newArray = [];\r\n\r\n if (arrayCopy.length > size) {\r\n while (arrayCopy.length >= size) {\r\n newArray.push(arrayCopy.splice(0, size));\r\n }\r\n\r\n // add any remaining\r\n if (arrayCopy.length && includeRemainder) {\r\n newArray.push(arrayCopy);\r\n }\r\n } else {\r\n newArray = arrayCopy;\r\n }\r\n\r\n return newArray;\r\n }\r\n\r\n @Memorise()\r\n getTimeDifference(depDateTime: string, arrDateTime: string): number {\r\n return moment(depDateTime).diff(moment(arrDateTime), 'minutes');\r\n }\r\n\r\n @Memorise()\r\n dayDifference(dept: string, arr: string): string {\r\n const diff = moment(arr)\r\n .startOf('day')\r\n .diff(moment(dept).startOf('day'), 'day');\r\n return diff > 0 ? diff.toString() : '';\r\n }\r\n\r\n @Memorise()\r\n makeFareRules(flight: FlightItinerary, direction: FlightDirectionEnum) {\r\n const flights =\r\n direction === FlightDirectionEnum.Outbound\r\n ? flight.outboundFlights\r\n : flight.inboundFlights;\r\n const rules = flights.reduce(\r\n (current: FareConditions, next: FlightJourney) => {\r\n current.cancellation = current.cancellation.concat(\r\n next.fareConditions?.cancellation || []\r\n );\r\n current.change = current.change.concat(\r\n next.fareConditions?.change || []\r\n );\r\n current.noShow = current.noShow.concat(\r\n next.fareConditions?.noShow || []\r\n );\r\n current.upgrade = current.upgrade.concat(\r\n next.fareConditions?.upgrade || []\r\n );\r\n current.other = current.other.concat(next.fareConditions?.other || []);\r\n return current;\r\n },\r\n {\r\n cancellation: [],\r\n change: [],\r\n noShow: [],\r\n upgrade: [],\r\n other: []\r\n }\r\n );\r\n return { rules, flights };\r\n }\r\n\r\n /**\r\n * @desc - generates ics file content\r\n */\r\n generateIcsFileContents(basketItems: BasketItem[]): string {\r\n const icsBodyContent = this.generateIcsFileBodyContent(basketItems);\r\n return [\r\n 'BEGIN:VCALENDAR\\r\\n',\r\n 'PRODID:-//Micros Travel//SABS Corporate - MMXIII//EN\\r\\n',\r\n 'VERSION:2.0\\r\\n',\r\n 'METHOD:REQUEST\\r\\n',\r\n icsBodyContent,\r\n 'END:VCALENDAR\\r\\n'\r\n ].join('');\r\n }\r\n\r\n /**\r\n * @desc - generates ics file body content based on the provided basketItems param\r\n */\r\n generateIcsFileBodyContent(basketItems: BasketItem[]): string {\r\n // TODO: currently only basket items with ServiceType.Lounge are handled. See below to TODOs for remaining tasks\r\n const bodyContent: string[] = [];\r\n\r\n // generate calendar data for each basket item\r\n basketItems.map((basketItem, index) => {\r\n const data = {\r\n dStart: '',\r\n dEnd: '',\r\n locationFrom: '',\r\n locationTo: '',\r\n basketId: '',\r\n description: '',\r\n serviceType: '',\r\n summary: ''\r\n };\r\n\r\n const { type } = basketItem.service;\r\n\r\n // populate data object depending on the service type in the basket\r\n switch (type) {\r\n case ServiceType.Lounge:\r\n const {\r\n adults,\r\n children,\r\n bookingThirdPartyReference,\r\n detail,\r\n service\r\n } = basketItem;\r\n data.basketId = basketItem.id;\r\n data.dStart = detail?.arrivalDatetime;\r\n data.dEnd = '';\r\n data.summary = `Airport Lounge - ${detail.name}`;\r\n data.serviceType = service.type.toLowerCase();\r\n data.description = [\r\n `Lounge: ${detail.name}\\r\\n`,\r\n `Starts: ${detail.arrivalDatetime}\\r\\n`,\r\n `Adults: ${adults}\\r\\n`,\r\n `Children: ${children}\\r\\n`,\r\n `Booking Ref: ${bookingThirdPartyReference}`\r\n ].join('');\r\n break;\r\n case ServiceType.Cab:\r\n // TODO: handle this case\r\n // hint: see logic in icalendar.component.ts file on lighting current version\r\n case ServiceType.Car:\r\n // TODO: handle this case\r\n case ServiceType.Coach:\r\n // TODO: handle this case\r\n case ServiceType.FastTrack:\r\n // TODO: handle this case\r\n case ServiceType.Flight:\r\n // TODO: handle this case\r\n case ServiceType.Hotel:\r\n // TODO: handle this case\r\n case ServiceType.InternationalRail:\r\n // TODO: handle this case\r\n case ServiceType.Parking:\r\n // TODO: handle this case\r\n case ServiceType.Rail:\r\n // TODO: handle this case\r\n }\r\n\r\n bodyContent.push(\r\n [\r\n 'BEGIN:VEVENT\\r\\n',\r\n data.dStart\r\n ? `DTSTART:${moment(data.dStart).format('YYYYMMDDTHHmmss')}\\r\\n`\r\n : '',\r\n data.dEnd\r\n ? `DTEND:${moment(data.dEnd).format('YYYYMMDDTHHmmss')}\\r\\n`\r\n : '',\r\n 'ORGANIZER;CN=\"Do not reply to this email\":mailto:do_not_reply@sabscorp.com\\r\\n',\r\n data.locationTo && data.locationFrom\r\n ? `LOCATION: ${data.locationTo} to ${data.locationFrom} \\r\\n`\r\n : '',\r\n 'TRANSP:OPAQUE\\r\\n',\r\n 'SEQUENCE:0\\r\\n',\r\n `UID:${data.serviceType}_${index}_${data.basketId}@sabscorp.com\\r\\n`,\r\n `DTSTAMP:${moment().format('YYYYMMDDTHHmmss')}\\r\\n`,\r\n `DESCRIPTION:${data.description}\\r\\n`,\r\n `SUMMARY:${data.summary}\\r\\n`,\r\n 'END:VEVENT\\r\\n'\r\n ].join('')\r\n );\r\n });\r\n\r\n return bodyContent.join('');\r\n }\r\n\r\n /**\r\n * @desc - creates an element in memory and triggers click event to download ics file\r\n */\r\n downloadIcs(filename: string, text: string) {\r\n const element = document.createElement('a');\r\n element.setAttribute(\r\n 'href',\r\n 'data:text/plain;charset=utf-8,' + encodeURIComponent(text)\r\n );\r\n element.setAttribute('download', filename);\r\n element.setAttribute('target', '_blank');\r\n element.style.display = 'none';\r\n element.click();\r\n }\r\n\r\n /**\r\n * @description - split a string on capitals\r\n * @param rawString - the string we want to split\r\n * @param join - whether or not to joing the split into one string, seperated by a space\r\n * @returns string/string[]\r\n */\r\n splitStringOnCapitals(\r\n rawString: string,\r\n join: boolean = false\r\n ): string | string[] {\r\n const splitString = rawString.split(/(?=[A-Z])/);\r\n\r\n if (join) {\r\n return splitString.join(' ');\r\n }\r\n\r\n return splitString;\r\n }\r\n}\r\n","import { BaseEnvironment } from '../classes/enviroment';\r\n\r\nexport enum URLS {\r\n AccessToken = 'accessToken',\r\n LOGOUT_URL = 'logout',\r\n Refresh = 'refreshToken',\r\n CONFERMA_THUMBNAIL_URL = 'https://ssl.conferma.com/Images/PropertyThumbnails/',\r\n CONFIRMA_PHOTO_URL = '/confermainfo/Info.aspx?mode=media&key=MICROSSABS&id=',\r\n CONFIRMA_INFO_URL = '/confermainfo/Info.aspx?mode=hotel&key=MICROSSABS&id=',\r\n RECOVER_PASSWORD_URL = 'password/getResetToken',\r\n RESET_PASSWORD = 'password/resetByToken'\r\n}\r\n","import { BehaviorSubject, Observable, Subject } from 'rxjs';\r\nimport moment from 'moment';\r\nimport {\r\n Country,\r\n HotelQuoteResult,\r\n HotelQuoteResultArray,\r\n LocationTypes,\r\n MinMax,\r\n NgbDateStruct,\r\n LocationDetails,\r\n BreatfastTypes,\r\n} from '../types/types';\r\nimport {\r\n BasketItem,\r\n ConfermaOfficeNames,\r\n HotelLocation,\r\n HotelRoom,\r\n HotelTag,\r\n SearchHotelsQueryVariables,\r\n ServiceType\r\n} from '../types/graphql.types';\r\nimport { BaseEnterpriseSearch } from '../classes/base-enterprise';\r\nimport { ICheapestPrice } from './cheapest-price';\r\nimport { Traveller } from '../models/traveller.object';\r\n\r\nexport interface HotelTempParams {\r\n location_type_select: LocationTypes;\r\n checkin_date: moment.Moment;\r\n checkout_date: moment.Moment;\r\n no_of_rooms: number;\r\n no_of_occupants: number;\r\n location: any;\r\n distance: number;\r\n prefered_hotels_only: boolean;\r\n country: Country;\r\n hotel_name: string;\r\n hotel_chain: any;\r\n currency: string;\r\n postcode: LocationDetails;\r\n trainsStation: LocationDetails;\r\n office: ConfermaOfficeNames;\r\n}\r\n\r\nexport type HotelDetails = HotelQuoteResult & {\r\n sortedTags?: HotelTag[];\r\n Details: {\r\n distance_airport: number;\r\n airport_details: {\r\n name: string;\r\n };\r\n distance_metro: number;\r\n metro_details: {\r\n name: string;\r\n };\r\n distance_rail: number;\r\n rail_details: {\r\n name: string;\r\n };\r\n };\r\n};\r\n\r\nexport type HotelDetailsArray = HotelDetails[];\r\nexport interface DisplayFilterSettings {\r\n minprice: number;\r\n maxprice: number;\r\n filters: {\r\n breakfastType: BreatfastTypes[];\r\n };\r\n}\r\n\r\nexport interface ResultDetails {\r\n chains: Set<string>;\r\n amenities: string[];\r\n maxDistance: number;\r\n}\r\n\r\nexport interface AvailabilityObject {\r\n hotel: string;\r\n startDate: string;\r\n endDate: string;\r\n rooms: number;\r\n occupants: number;\r\n currency: string;\r\n}\r\n\r\nexport class HotelFilters {\r\n priceRange: MinMax = { min: 0, max: 0 };\r\n distanceRange: MinMax = { min: 0, max: 0 };\r\n chain: string[] = [];\r\n amenitytype: string[] = [];\r\n preferred: string[] = [];\r\n extra: string[] = [];\r\n hotelName = '';\r\n breakfastType: string[] = [];\r\n}\r\n\r\nexport enum HotelView {\r\n LIST = 'list',\r\n MAP = 'map'\r\n}\r\n\r\nexport interface HotelViewController {\r\n showMap: boolean;\r\n ratesUpdated: any;\r\n filterChange: any;\r\n hotelChosen: any;\r\n filtered: any;\r\n filterArray: {};\r\n showFilterOptions: any;\r\n selectedVals: [];\r\n nr: any;\r\n single: boolean;\r\n hotelCodeChosen: any;\r\n closeFilterOptions: any;\r\n}\r\n\r\n/**\r\n * Sorting type can be passed to sorting-toggle component.\r\n *\r\n * @export\r\n * @interface SortType\r\n */\r\nexport interface SortType {\r\n /** Title displayed on dropdown */\r\n title: string;\r\n /** Reference to method used by component to sort results\r\n ** Please ensure that method is binding to correct object\r\n */\r\n methodRef?: () => void;\r\n /** Icon displayed on drop down */\r\n icon?: string;\r\n /** Change dir after user click second time */\r\n dynamicDir?: boolean;\r\n /**\r\n * ! Deprecated Prod build only, should be removed in next version\r\n * @deprecated Prod build only, should be removed in next version\r\n * */\r\n method?: string;\r\n /**\r\n * ! Deprecated Prod build only, should be removed in next version\r\n * @deprecated Prod build only, should be removed in next version\r\n * */\r\n dir?: boolean;\r\n}\r\n\r\nexport interface HotelEnterpriseSearchInterface\r\n extends BaseEnterpriseSearch<\r\n HotelTempParams,\r\n HotelQuoteResultArray,\r\n HotelDetailsArray\r\n > {\r\n type: ServiceType;\r\n location_types: BehaviorSubject<{}>;\r\n offices: BehaviorSubject<{}>;\r\n lastActivePage: BehaviorSubject<number>;\r\n readonly galleries: { [key: string]: {} };\r\n filterChange: Subject<any>;\r\n selectItemMapView: Subject<any>;\r\n display: DisplayFilterSettings;\r\n min_date: { year: any; month: any; day: any };\r\n min_return_date: { year: any; month: any; day: any };\r\n currentView: HotelView;\r\n filterResults: () => void;\r\n readonly chains: {};\r\n readonly amenities: {};\r\n readonly maxDistance: number;\r\n readonly maxPrice: number;\r\n checkin_date_ngb: NgbDateStruct;\r\n checkout_date_ngb: NgbDateStruct;\r\n checkin_date: any;\r\n checkout_date: any;\r\n no_of_rooms: number;\r\n no_of_occupants: number;\r\n location: any;\r\n readonly formatted_location: string;\r\n distance: number;\r\n prefered_hotels_only: boolean;\r\n country: Country;\r\n trainsStation: LocationDetails;\r\n office: ConfermaOfficeNames;\r\n hotel_name: string;\r\n hotel_chain: string;\r\n readonly max_rooms_array: {};\r\n readonly max_occupant_array: {};\r\n readonly distance_list: {};\r\n location_type_select: LocationTypes;\r\n readonly filters: HotelFilters;\r\n cheapestPrice: ICheapestPrice;\r\n makeLocations(location: HotelLocation[]): { [key: string]: {} };\r\n sortTags(tags: HotelTag[]): {};\r\n startSearch(): any;\r\n getSearchQuery(): SearchHotelsQueryVariables;\r\n buildQuery(): void;\r\n makeHotelAvalilityObject(hotel: HotelQuoteResult): AvailabilityObject;\r\n byMostExpensive(): void;\r\n sortByPrice(min?: boolean, debug?: boolean): void;\r\n sortByName(): void;\r\n sortByDistance(): void;\r\n byPreferred(): void;\r\n getmaxPriceForCurrency(currency: string): any;\r\n addFilter(filter: string, type: keyof HotelFilters): void;\r\n removeFilter(filter: string, type: keyof HotelFilters): void;\r\n resetFilters(): void;\r\n updateFromPreviousSearches(\r\n previousItems: Record<ServiceType, BasketItem>\r\n ): void;\r\n filterLighteningResults(): void;\r\n getImages(HolidayCode: string): Observable<{}>;\r\n addPaginationPage(currentPage: number): any;\r\n toggleView(): void;\r\n calcDayDiff(): number;\r\n updateLowestPrice(results: HotelDetails[]): ICheapestPrice;\r\n addHotelRoomToBasket(\r\n hotelQuoteResult: HotelQuoteResult,\r\n hotelRoom: HotelRoom,\r\n hotelQuery: SearchHotelsQueryVariables,\r\n travellers?: Traveller[]\r\n ): Promise<boolean>;\r\n}\r\n","import moment from 'moment';\r\nimport { BaseEnterpriseSearch } from './base-enterprise';\r\nimport { BaseStorageService } from '../services/storage.service';\r\nimport { BaseHelperRoutines } from './helpers';\r\nimport { BehaviorSubject, from, of, Observable, Subject } from 'rxjs';\r\nimport { map, take } from 'rxjs/operators';\r\nimport { BaseEnvironment } from './enviroment';\r\nimport { BaseHotelAvalibilityService } from '../services/hotel-avallibility.service';\r\nimport { URLS } from './../services/url.service';\r\nimport {\r\n Country,\r\n HotelQuoteResult,\r\n HotelQuoteResultArray,\r\n LocationTypes,\r\n NgbDateStruct,\r\n LocationDetails,\r\n HotelAvalibilityQuoteResult,\r\n includedExpression,\r\n excludedExpression,\r\n SearchHandler,\r\n RecentSearch,\r\n AirportSearchResults\r\n} from '../types/types';\r\nimport {\r\n BasketItem,\r\n ConfermaOfficeNames,\r\n CurrencyCode,\r\n DistanceTypes,\r\n HotelLocation,\r\n HotelRoom,\r\n HotelTag,\r\n RailStation,\r\n SaveRecentSearchMutationVariables,\r\n SearchFlightsV2QueryVariables,\r\n SearchHotelsQueryVariables,\r\n ServiceType\r\n} from '../types/graphql.types';\r\nimport {\r\n BaseHotelQuoteFetcher,\r\n HotelQuoteFetcherType\r\n} from '../fetchers/hotel-quote-fetcher';\r\nimport {\r\n FullUserDetails,\r\n UserServiceInterface\r\n} from '../interfaces/Iuser.service';\r\nimport { EnterpriseSearchServiceInterface } from '../interfaces/Isearch.service';\r\nimport { AbstractHttpCallService } from '../services/http-call.service';\r\n\r\nimport { HotelAvalinilityFetcherType } from '../fetchers/hotel-avaliability-fetcher';\r\nimport {\r\n EnterpriseBasketServiceInterface,\r\n InternalBasketInterface\r\n} from '../interfaces/Ienterprise-basket.service';\r\nimport {\r\n AvailabilityObject,\r\n DisplayFilterSettings,\r\n HotelDetails,\r\n HotelDetailsArray,\r\n HotelEnterpriseSearchInterface,\r\n HotelFilters,\r\n HotelTempParams,\r\n HotelView,\r\n ResultDetails\r\n} from '../interfaces/Ihotel-enterprise-search';\r\nimport { ICheapestPrice } from '../interfaces/cheapest-price';\r\nimport { Traveller } from '../models/traveller.object';\r\nimport { BaseSearchConfermaQuicklistFetcher, ConfermaQuicklistFetcherType } from '../fetchers/conferma-quicklist.fetcher';\r\nimport { BaseGetRailStationFetcher, GetRailStationFetcherType } from '../fetchers/get-rail-station.fetcher';\r\n\r\nexport enum SortTypesHotel {\r\n distance = 'distance',\r\n name = 'name',\r\n price = 'price'\r\n}\r\n\r\nconst CLIENT_PREFERRED_VALUE = 1;\r\nconst AGENT_PREFERRED_VALUE = 2;\r\n\r\nexport class HotelEnterpriseSearch<\r\n HQ_Q extends HotelQuoteFetcherType,\r\n HA_Q extends HotelAvalinilityFetcherType,\r\n QL_Q extends ConfermaQuicklistFetcherType,\r\n GRS_Q extends GetRailStationFetcherType\r\n >\r\n extends BaseEnterpriseSearch<\r\n HotelTempParams,\r\n HotelQuoteResultArray,\r\n HotelDetailsArray\r\n >\r\n implements HotelEnterpriseSearchInterface {\r\n static readonly MAX_HOTEL_ROOMS = 4;\r\n static readonly STORAGE_SESSION_PARAMS = 'search_hotel';\r\n static readonly STORAGE_SESSION_RESULTS = 'results_hotel';\r\n\r\n public type: ServiceType = ServiceType.Hotel;\r\n private travellers: Traveller[];\r\n public location_types: BehaviorSubject<LocationTypes[]> = new BehaviorSubject<\r\n LocationTypes[]\r\n >([]);\r\n public offices: BehaviorSubject<LocationTypes[]> = new BehaviorSubject<\r\n LocationTypes[]\r\n >([]);\r\n public lastActivePage: BehaviorSubject<number> = new BehaviorSubject(null);\r\n\r\n readonly galleries: { [key: string]: string[] } = {};\r\n private occupied: number = 0;\r\n private results_details: ResultDetails = {\r\n chains: new Set<string>(),\r\n amenities: [],\r\n maxDistance: 0\r\n };\r\n private _checkin_date_ngb: NgbDateStruct;\r\n private _checkout_date_ngb: NgbDateStruct;\r\n\r\n get chains(): string[] {\r\n return [...this.results_details.chains];\r\n }\r\n\r\n get amenities(): string[] {\r\n return [...this.results_details.amenities];\r\n }\r\n\r\n get maxDistance(): number {\r\n this.filters.distanceRange.max = Math.ceil(\r\n Math.max.apply(\r\n Math,\r\n this.results.value.map((o) => o.location.distance)\r\n )\r\n );\r\n this.results_details.maxDistance = this.filters.distanceRange.max;\r\n return this.results_details.maxDistance;\r\n }\r\n\r\n get maxPrice(): number {\r\n return Math.ceil(this.filters.priceRange.max);\r\n }\r\n\r\n get currency(): string {\r\n return this.tempParams.currency;\r\n }\r\n\r\n set currency(value: string) {\r\n this.tempParams.currency = value;\r\n }\r\n // Event Emitters\r\n public filterChange: Subject<any> = new Subject();\r\n public selectItemMapView: Subject<any> = new Subject();\r\n\r\n public display: DisplayFilterSettings = {\r\n minprice: Number.NEGATIVE_INFINITY,\r\n maxprice: Number.POSITIVE_INFINITY,\r\n filters: {\r\n breakfastType: []\r\n }\r\n };\r\n\r\n // public variables\r\n public min_date = {\r\n year: moment().year(),\r\n month: moment().month() + 1, // ngbDate months are not 0 indexed\r\n day: moment().date()\r\n };\r\n\r\n public min_return_date = {\r\n year: moment().year(),\r\n month: moment().month() + 1, // ngbDate months are not 0 indexed\r\n day: moment().date() + 1 // min 1 night stay\r\n };\r\n\r\n // private variables\r\n // don't need to worry about times here - maybe normalise these in the request body?\r\n\r\n private localFilters = new HotelFilters();\r\n\r\n public currentView: HotelView = HotelView.LIST;\r\n\r\n // For NgForing over in the templates\r\n private _max_no_of_rooms = 4;\r\n private _max_rooms_array = new Array(this._max_no_of_rooms).fill(0);\r\n private _max_no_of_occupants = 2;\r\n private _max_occupant_array = new Array(this._max_no_of_occupants).fill(0);\r\n private _distance_list = [1, 2, 5, 10, 20, 25]; // copied from old frontend for now\r\n private _default_currency: any = null;\r\n\r\n // getters and setters\r\n\r\n get checkin_date_ngb(): NgbDateStruct {\r\n return this._checkin_date_ngb;\r\n }\r\n\r\n set checkin_date_ngb(value: NgbDateStruct) {\r\n this._checkin_date_ngb = value;\r\n\r\n this.tempParams.checkin_date = this.helpers.ngDateToMoment(value);\r\n this.checkin_date = this.helpers.ngDateToMoment(value);\r\n }\r\n\r\n get checkout_date_ngb(): NgbDateStruct {\r\n return this._checkout_date_ngb;\r\n }\r\n\r\n set checkout_date_ngb(value: NgbDateStruct) {\r\n this._checkout_date_ngb = value;\r\n this.tempParams.checkout_date = this.helpers.ngDateToMoment(value);\r\n this._isValid();\r\n }\r\n\r\n get checkin_date(): moment.Moment {\r\n return this.tempParams.checkin_date;\r\n }\r\n\r\n set checkin_date(newDate: moment.Moment) {\r\n if (newDate && newDate.isValid()) {\r\n this.tempParams.checkin_date = moment(newDate);\r\n this._checkin_date_ngb = this.helpers.momentToNgDate(newDate);\r\n if (newDate.isSameOrBefore(this.tempParams.checkout_date)) {\r\n this.checkout_date = moment(newDate).add(1, 'day');\r\n }\r\n this._isValid();\r\n }\r\n }\r\n\r\n get checkout_date(): moment.Moment {\r\n return this.tempParams.checkout_date;\r\n }\r\n\r\n set checkout_date(newDate: moment.Moment) {\r\n // if (newDate.isSameOrBefore(this.checkin_date)) { // not allowed\r\n // return;\r\n // }\r\n if (newDate && newDate.isValid()) {\r\n this.tempParams.checkout_date = newDate;\r\n this.checkout_date_ngb = this.helpers.momentToNgDate(newDate);\r\n this._isValid();\r\n }\r\n }\r\n\r\n get no_of_rooms(): number {\r\n return this.tempParams.no_of_rooms;\r\n }\r\n\r\n set no_of_rooms(newRooms: number) {\r\n if (newRooms > 4 || newRooms < 1) {\r\n return;\r\n }\r\n\r\n this.tempParams.no_of_rooms = newRooms;\r\n this._isValid();\r\n }\r\n\r\n get no_of_occupants(): number {\r\n return this.tempParams.no_of_occupants;\r\n }\r\n\r\n set no_of_occupants(newOcc: number) {\r\n if (newOcc < 1 || newOcc > 3) {\r\n return;\r\n }\r\n\r\n this.tempParams.no_of_occupants = newOcc;\r\n this._isValid();\r\n }\r\n\r\n get default_currency(): string {\r\n return this.tempParams.currency;\r\n }\r\n\r\n set default_currency(currency: string) {\r\n this.tempParams.currency = currency;\r\n }\r\n\r\n // may have to modify these\r\n get location(): any {\r\n return this.tempParams.location;\r\n }\r\n\r\n set location(newLoc: any) {\r\n this.tempParams.location = newLoc;\r\n\r\n this._isValid();\r\n }\r\n\r\n get formatted_location(): string {\r\n return this.tempParams.location\r\n ? this.tempParams.location.destination\r\n : 'No Location Set'; // TODO - expand this for different types\r\n }\r\n\r\n get distance(): number {\r\n return this.tempParams.distance;\r\n }\r\n\r\n set distance(newDist: number) {\r\n this.tempParams.distance = newDist;\r\n this._isValid();\r\n }\r\n\r\n get prefered_hotels_only(): boolean {\r\n return this.tempParams.prefered_hotels_only;\r\n }\r\n\r\n set prefered_hotels_only(newPref: boolean) {\r\n this.tempParams.prefered_hotels_only = newPref;\r\n this._isValid();\r\n }\r\n\r\n get country(): Country {\r\n return this.tempParams.country;\r\n }\r\n\r\n set country(newCont: Country) {\r\n this.tempParams.country = newCont;\r\n this._isValid();\r\n }\r\n\r\n get postcode(): LocationDetails {\r\n return this.tempParams.postcode;\r\n }\r\n\r\n set postcode(postcode: LocationDetails) {\r\n this.tempParams.postcode = postcode;\r\n this._isValid();\r\n }\r\n\r\n get trainsStation(): LocationDetails {\r\n return this.tempParams.trainsStation;\r\n }\r\n\r\n set trainsStation(station: LocationDetails) {\r\n this.tempParams.trainsStation = station;\r\n this._isValid();\r\n }\r\n\r\n get office(): ConfermaOfficeNames {\r\n return this.tempParams.office;\r\n }\r\n\r\n set office(office: ConfermaOfficeNames) {\r\n this.tempParams.office = office;\r\n this._isValid();\r\n }\r\n\r\n // Additional Variables\r\n get hotel_name(): string {\r\n return this.tempParams.hotel_name;\r\n }\r\n\r\n set hotel_name(newName: string) {\r\n this.tempParams.hotel_name = newName;\r\n this._isValid();\r\n }\r\n\r\n get hotel_chain(): any {\r\n return this.tempParams.hotel_chain;\r\n }\r\n\r\n set hotel_chain(newChain: any) {\r\n this.tempParams.hotel_chain = newChain;\r\n this._isValid();\r\n }\r\n\r\n // Getters Only\r\n\r\n get max_rooms_array(): number[] {\r\n return this._max_rooms_array;\r\n }\r\n\r\n get max_occupant_array(): number[] {\r\n return this._max_occupant_array;\r\n }\r\n\r\n get distance_list(): number[] {\r\n return this._distance_list;\r\n }\r\n\r\n get location_type_select(): LocationTypes {\r\n return this.tempParams.location_type_select;\r\n }\r\n\r\n set location_type_select(value: LocationTypes) {\r\n this.tempParams.location_type_select = value;\r\n this._isValid();\r\n }\r\n\r\n get filters(): HotelFilters {\r\n return this.localFilters;\r\n }\r\n\r\n constructor(\r\n private hotelFetcher: BaseHotelQuoteFetcher<HQ_Q>,\r\n private helpers: BaseHelperRoutines,\r\n private userService: UserServiceInterface,\r\n private environment: BaseEnvironment,\r\n private avaliabilityService: BaseHotelAvalibilityService<HA_Q>,\r\n private basketService: EnterpriseBasketServiceInterface,\r\n storageService: BaseStorageService,\r\n private searchService: EnterpriseSearchServiceInterface,\r\n private httpCallService: AbstractHttpCallService,\r\n private quickListFetcher: BaseSearchConfermaQuicklistFetcher<QL_Q>,\r\n private getRailStationFetcher: BaseGetRailStationFetcher<GRS_Q>\r\n ) {\r\n super(storageService, (resultsToMap: HotelQuoteResultArray) => {\r\n this.results_details.maxDistance = 0;\r\n this.results_details.chains = new Set<string>();\r\n return resultsToMap.map(\r\n (hotelResult: HotelQuoteResult, index: number): HotelDetails => {\r\n this.results_details.maxDistance = Math.max(\r\n this.results_details.maxDistance,\r\n hotelResult.location.distance\r\n );\r\n this.filters.distanceRange.max = this.results_details.maxDistance;\r\n this.results_details.chains.add(hotelResult.group);\r\n if (index < this.environment.numberHotelToPreload) {\r\n this.avaliabilityService.getAvailabilityForId(\r\n this.makeHotelAvalilityObject(hotelResult)\r\n );\r\n }\r\n // this.getHotelAvailability(hotelResult);\r\n return {\r\n sortedTags: this.sortTags(hotelResult.tags),\r\n Details: {\r\n distance_airport: 0,\r\n distance_metro: 0,\r\n distance_rail: 0,\r\n airport_details: { name: 'Not returned' },\r\n metro_details: { name: 'Not returned' },\r\n rail_details: { name: 'Not returned' }\r\n },\r\n // avilability: this.hotel_availability,\r\n ...hotelResult\r\n };\r\n }\r\n );\r\n });\r\n this.results_details.chains = new Set<string>();\r\n const data: {\r\n tempParams: HotelTempParams;\r\n } = storageService.getSessionItem(\r\n HotelEnterpriseSearch.STORAGE_SESSION_PARAMS\r\n ) || {\r\n tempParams: {} as HotelTempParams\r\n };\r\n\r\n this.default_currency = this.tempParams.currency\r\n ? this.tempParams.currency\r\n : this._default_currency;\r\n this.updateTempParams(searchService.makeHotelQuery(data.tempParams));\r\n\r\n if (searchService.shouldAddTravellerSubscription()) {\r\n searchService.travellerInformation.subscribe(\r\n (travellers: Traveller[]) => {\r\n this.travellers = travellers;\r\n const splitTravellers = this.helpers.selectedTravellers(\r\n travellers,\r\n ServiceType.Hotel\r\n );\r\n this.tempParams.no_of_occupants = splitTravellers.adults.length;\r\n this.travellers = travellers;\r\n this._isValid();\r\n }\r\n );\r\n }\r\n\r\n const results =\r\n storageService.getSessionItemAsList<HotelDetailsArray>(\r\n this.resultsSessionName\r\n ) || [];\r\n results\r\n .slice(0, this.environment.numberHotelToPreload)\r\n .forEach((hotel: HotelDetails) => {\r\n this.avaliabilityService.getAvailabilityForId(\r\n this.makeHotelAvalilityObject(hotel)\r\n );\r\n });\r\n\r\n results.forEach((hotelResult: HotelDetails) => {\r\n this.results_details.chains.add(hotelResult.group);\r\n });\r\n this.fullResults = results;\r\n this.results.next(results);\r\n this._isValid();\r\n\r\n this.userService.changeUser.subscribe((user: Partial<FullUserDetails>) => {\r\n this.location_types.next([\r\n LocationTypes.Airport,\r\n LocationTypes.City,\r\n LocationTypes.Office,\r\n LocationTypes.Shortlist,\r\n LocationTypes.TrainStation\r\n ]);\r\n if (searchService.shouldFetchAllOffices()) {\r\n this.offices.next([]); // TODO fetch offices\r\n }\r\n });\r\n\r\n this.localFilters = new HotelFilters();\r\n\r\n this.avaliabilityService.fetching.subscribe((isFetching: boolean) => {\r\n if (!isFetching) {\r\n // We've just finished fetching avalibility so update filters.\r\n\r\n const maxNumber = this.avaliabilityService.maxPriceForCurrency('GBP');\r\n if (maxNumber > 0) {\r\n this.filters.priceRange.max = maxNumber;\r\n this.localFilters.priceRange.max = maxNumber;\r\n }\r\n this._cheapestResultPrice = this.updateLowestPrice(results);\r\n }\r\n });\r\n }\r\n\r\n protected resultsSessionName = HotelEnterpriseSearch.STORAGE_SESSION_RESULTS;\r\n\r\n private query: SearchHotelsQueryVariables = {} as SearchHotelsQueryVariables;\r\n\r\n makeLocations(location: HotelLocation[]): { [key: string]: HotelLocation[] } {\r\n return this.helpers.arrayToObjectArray<HotelLocation>(\r\n location,\r\n 'distanceType'\r\n );\r\n }\r\n\r\n sortTags(tags: HotelTag[]): any[] {\r\n if (tags) {\r\n return [...tags]\r\n .sort((a: HotelTag, b: HotelTag) => {\r\n if (a.name < b.name) {\r\n return -1;\r\n } else if (a.name > b.name) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n })\r\n .map((tag: HotelTag) => {\r\n return {\r\n ...tag,\r\n icon: this.environment.tagMap[tag.name] || tag.icon\r\n };\r\n });\r\n }\r\n return [];\r\n }\r\n\r\n protected resetQuery(): void {\r\n this.updateTempParams(this.searchService.makeHotelQuery());\r\n this.localFilters = new HotelFilters();\r\n this.results_details = {\r\n chains: new Set<string>(),\r\n amenities: [],\r\n maxDistance: 0\r\n };\r\n this._isValid();\r\n }\r\n\r\n private _isValid() {\r\n if (!this.doChecks) {\r\n return;\r\n }\r\n\r\n this.storageService.setSessionItem(\r\n HotelEnterpriseSearch.STORAGE_SESSION_PARAMS,\r\n {\r\n tempParams: this.tempParams\r\n }\r\n );\r\n\r\n this.min_return_date = this.helpers.momentToNgDate(\r\n this.tempParams.checkin_date\r\n );\r\n if (\r\n this.tempParams.checkin_date.isSameOrAfter(this.tempParams.checkout_date)\r\n ) {\r\n this.checkout_date = moment(this.tempParams.checkin_date).add(1, 'day'); // ensure that checkout date is min 1 day after checkin date\r\n }\r\n this.validationMessages = [];\r\n\r\n switch (this.tempParams.location_type_select) {\r\n case LocationTypes.City:\r\n if (!this.country) {\r\n this.validationMessages.push('Please select country');\r\n }\r\n if (!this.location && !this.postcode) {\r\n this.validationMessages.push(\r\n 'Please select a hotel location or enter a postcode.'\r\n );\r\n }\r\n break;\r\n\r\n case LocationTypes.Office:\r\n if (!this.tempParams.location?.office) {\r\n this.validationMessages.push('Please select an office.');\r\n }\r\n break;\r\n\r\n case LocationTypes.Airport:\r\n if (this.tempParams?.location) {\r\n if (!this.tempParams.location.airport?.gateway) {\r\n this.validationMessages.push('Please select a airport.');\r\n }\r\n break;\r\n } else {\r\n this.validationMessages.push('Please select a airport.');\r\n }\r\n\r\n break;\r\n \r\n case LocationTypes.TrainStation:\r\n if (this.tempParams?.location) {\r\n if (!this.tempParams.location.railstation?.stationCode) {\r\n this.validationMessages.push('Please select a train station.');\r\n }\r\n break;\r\n } else {\r\n this.validationMessages.push('Please select a train station.');\r\n }\r\n\r\n break;\r\n\r\n case LocationTypes.Shortlist:\r\n if (!this.country) {\r\n this.validationMessages.push('Please select country');\r\n }\r\n break;\r\n }\r\n\r\n if (\r\n this.checkout_date &&\r\n this.checkout_date.isSameOrBefore(this.checkin_date)\r\n ) {\r\n this.validationMessages.push('Checkout date must be after checkin date');\r\n }\r\n\r\n if (this.checkout_date && this.checkout_date.isBefore(moment())) {\r\n this.validationMessages.push('Checkout date must not be in the past');\r\n }\r\n\r\n if (this.checkin_date && this.checkin_date.isBefore(moment())) {\r\n this.validationMessages.push('Checkin date must not be in the past');\r\n }\r\n\r\n if (\r\n this.checkout_date &&\r\n this.checkin_date &&\r\n this.checkin_date.isAfter(this.checkout_date)\r\n ) {\r\n this.validationMessages.push(\r\n 'Checkout data must be after the checkin date'\r\n );\r\n }\r\n\r\n // Calculating Occupancy\r\n const occupancy = this.no_of_occupants / this.no_of_rooms;\r\n\r\n if (!(occupancy === 1 || occupancy === 2)) {\r\n this.validationMessages.push(\r\n 'Occupants per room must be 1 or 2, if you have an odd number of travellers (greater than one), the no of rooms must be equal'\r\n );\r\n }\r\n\r\n console.log(this.validationMessages);\r\n this.isValid.next(this.validationMessages.length === 0);\r\n this.messages.next(this.validationMessages);\r\n }\r\n\r\n startSearch(): Promise<boolean> {\r\n this.results.next([]);\r\n this.avaliabilityService.reset();\r\n if (this.isValid.value) {\r\n // build the query\r\n this.buildQuery();\r\n const query = this.getSearchQuery();\r\n this.searchService.saveRecentSearch(this.getRecentSearchQuery(this.getSearchQuery()));\r\n return this._startSearch(\r\n this.tempParams.location_type_select === LocationTypes.Shortlist ?\r\n this.quickListFetcher.fetchList({countryCode: this.country.cCode}) :\r\n this.hotelFetcher.fetchList(\r\n query\r\n )\r\n );\r\n } else {\r\n return Promise.resolve(false);\r\n }\r\n }\r\n\r\n getRecentSearchQuery(query: SearchHotelsQueryVariables): SaveRecentSearchMutationVariables {\r\n if (this.location?.name) {\r\n query.cityName = this.location.name;\r\n }\r\n return {\r\n serviceType: ServiceType.Hotel,\r\n searchArgs: query,\r\n travelDate: this.checkin_date.format(),\r\n travellers: this.helpers.getTravellersId(this.travellers)\r\n };\r\n }\r\n\r\n public startRecentSearch(recentSearch: RecentSearch): void {\r\n this.currency = recentSearch.searchArgs.currency;\r\n this.distance = recentSearch.searchArgs.distance;\r\n this.no_of_rooms = recentSearch.searchArgs.rooms;\r\n this.checkin_date = moment(recentSearch.searchArgs.startDate);\r\n this.checkout_date = moment(recentSearch.searchArgs.endDate);\r\n this.hotel_name = recentSearch.searchArgs.hotelName;\r\n\r\n if (recentSearch.searchArgs.groupName) {\r\n this.hotel_chain = {\r\n name: recentSearch.searchArgs.groupName\r\n }\r\n }\r\n\r\n // get location_type_select\r\n if (recentSearch.searchArgs.iata) {\r\n this.location_type_select = LocationTypes.Airport;\r\n this.searchService.getAirportByCode(recentSearch.searchArgs.iata).subscribe((iata: AirportSearchResults) => {\r\n let airport = {\r\n airport: {\r\n gateway: iata.iataMatch.iata\r\n }\r\n }\r\n this.location = { ...airport, ...iata.iataMatch };\r\n this.searchService.startSearches();\r\n })\r\n } else if ((recentSearch.searchArgs.latitude && recentSearch.searchArgs.longitude) || recentSearch.searchArgs.postOrZipCode) {\r\n this.location_type_select = LocationTypes.City;\r\n this.country = {\r\n cCode: recentSearch.searchArgs.countryCode,\r\n cName: '' \r\n }\r\n // should be one search metod for the city search: location or postcode\r\n if (recentSearch.searchArgs.latitude && recentSearch.searchArgs.longitude) {\r\n this.location = {\r\n name: recentSearch.searchArgs.cityName,\r\n latitude: recentSearch.searchArgs.latitude,\r\n longitude: recentSearch.searchArgs.longitude\r\n }\r\n } else if (recentSearch.searchArgs.postOrZipCode) {\r\n this.postcode = {\r\n name: recentSearch.searchArgs.postOrZipCode,\r\n type: LocationTypes.Postcode\r\n }\r\n }\r\n this.searchService.startSearches();\r\n } else if (recentSearch.searchArgs.officeId) { \r\n this.location_type_select = LocationTypes.Office;\r\n this.searchService.getOfficeNames(this.isLoading).pipe(take(1)).subscribe((offices: ConfermaOfficeNames[]) => { \r\n if (offices) {\r\n let office: ConfermaOfficeNames = offices.find((office: ConfermaOfficeNames) => office.id === recentSearch.searchArgs.officeId);\r\n this.office = {\r\n id: recentSearch.searchArgs.officeId,\r\n name: office.name\r\n }\r\n this.searchService.startSearches();\r\n }\r\n });\r\n } else if (recentSearch.searchArgs.trainStationCode) {\r\n this.location_type_select = LocationTypes.TrainStation;\r\n this.getRailStationByCode(recentSearch.searchArgs.trainStationCode).subscribe((trainsStation: RailStation) => {\r\n this.trainsStation = trainsStation as LocationDetails\r\n this.searchService.startSearches();\r\n });\r\n } else {\r\n this.location_type_select = LocationTypes.Shortlist;\r\n this.country = {\r\n cCode: recentSearch.searchArgs.countryCode,\r\n cName: '' \r\n }\r\n this.searchService.startSearches();\r\n }\r\n }\r\n\r\n private getRailStationByCode(code: string): Observable<RailStation> {\r\n if (code) {\r\n return this.getRailStationFetcher.fetchList({ id: null, code: code }).pipe(\r\n take(1)\r\n );\r\n } else {\r\n return of();\r\n }\r\n }\r\n\r\n getSearchQuery(): SearchHotelsQueryVariables {\r\n this.buildQuery();\r\n return this.helpers.removeNulls<SearchHotelsQueryVariables>(this.query);\r\n }\r\n\r\n buildQuery(): void {\r\n const query: SearchHotelsQueryVariables = {\r\n startDate: this.tempParams.checkin_date.format('YYYY-MM-DD'),\r\n endDate: this.tempParams.checkout_date.format('YYYY-MM-DD'),\r\n rooms: this.tempParams.no_of_rooms,\r\n adults: this.tempParams.no_of_occupants,\r\n currency: this.tempParams.currency ? this.tempParams.currency : null,\r\n distance: this.tempParams.distance,\r\n distanceType: DistanceTypes.M,\r\n maxResults: 100\r\n };\r\n\r\n this.getRoomNumber();\r\n console.log(this.location)\r\n switch (this.tempParams.location_type_select) {\r\n case LocationTypes.Airport:\r\n query.iata = this.tempParams.location.airport.gateway;\r\n break;\r\n\r\n case LocationTypes.City:\r\n query.countryCode = this.country.cCode;\r\n // should be one search metod for the city search: location or postcode\r\n if (this.location) {\r\n query.latitude = this.location.latitude;\r\n query.longitude = this.location.longitude;\r\n } else if (this.postcode) {\r\n query.postOrZipCode = this.postcode.name;\r\n }\r\n break;\r\n \r\n case LocationTypes.TrainStation:\r\n query.trainStationCode = this.location.railstation.stationCode;\r\n break;\r\n\r\n case LocationTypes.Office: // Needs to fix in next PR\r\n query.officeId = +this.location.office?.id;\r\n break;\r\n\r\n case LocationTypes.Shortlist: \r\n query.countryCode = this.country.cCode;\r\n break;\r\n\r\n }\r\n\r\n // Add hotel name in the query\r\n if (this.hotel_name) {\r\n query.hotelName = this.tempParams.hotel_name;\r\n }\r\n\r\n // add chain or group name int he query\r\n if (this.hotel_chain) {\r\n query.groupName = this.tempParams.hotel_chain?.name;\r\n }\r\n\r\n this.query = query;\r\n }\r\n\r\n makeHotelAvalilityObject(hotel: HotelQuoteResult): AvailabilityObject {\r\n return {\r\n hotel: hotel.id,\r\n startDate: this.helpers.formatIsoDate(this.checkin_date),\r\n endDate: this.helpers.formatIsoDate(this.checkout_date),\r\n rooms: this.no_of_rooms,\r\n occupants: this.no_of_occupants,\r\n currency: 'GBP'\r\n };\r\n }\r\n\r\n public filterResults = () => {\r\n this.results.next(\r\n this.fullResults.filter((hotel: HotelDetails) => {\r\n return (\r\n this.inPriceRange(hotel) &&\r\n this.inDistanceRange(hotel) &&\r\n this.containsHotelname(hotel) &&\r\n this.hasChain(hotel) &&\r\n this.breakfastTypeFilter(hotel)\r\n );\r\n })\r\n );\r\n };\r\n\r\n // Lightening Filters\r\n public filterLighteningResults = () => {\r\n this.results.next(\r\n this.fullResults.filter((hotel: HotelDetails) => {\r\n return (\r\n this.inLighteningPriceRange(hotel) &&\r\n this.containsHotelname(hotel) &&\r\n this.hasChain(hotel) &&\r\n this.hasPreferred(hotel) &&\r\n this.breakfastTypeFilter(hotel) &&\r\n this.getExtraFilter(hotel) &&\r\n this.getAmenitiesFilter(hotel)\r\n );\r\n })\r\n );\r\n };\r\n\r\n private inPriceRange(hotel: HotelDetails): boolean {\r\n const availability = this.avaliabilityService.getAvailabilityValue(hotel);\r\n if (availability) {\r\n return (\r\n this.helpers.inRange(availability.maxprice, this.filters.priceRange) &&\r\n this.helpers.inRange(availability.minprice, this.filters.priceRange)\r\n );\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private inDistanceRange(hotel: HotelDetails): boolean {\r\n return (\r\n this.filters.distanceRange.max === 0 ||\r\n this.helpers.inRange(hotel.location.distance, this.filters.distanceRange)\r\n );\r\n }\r\n\r\n private containsHotelname(hotel: HotelDetails): boolean {\r\n const tocheck = this.filters.hotelName.toLowerCase();\r\n\r\n return tocheck && tocheck.length > 0\r\n ? hotel.name.toLowerCase().includes(tocheck)\r\n : true;\r\n }\r\n\r\n private inLighteningPriceRange(hotel: HotelDetails): boolean {\r\n const availability = this.avaliabilityService.getAvailabilityValue(hotel);\r\n if (availability && Object.keys(availability).length !== 0) {\r\n let maxRange: boolean = false;\r\n let findMax: number = 0;\r\n let minRange = this.helpers.inRange(\r\n availability.prpn,\r\n this.filters.priceRange\r\n );\r\n if (availability?.maxprice) {\r\n findMax = availability.maxprice;\r\n } else {\r\n findMax = availability?.rooms.reduce(\r\n (op, item) => (op = op > item.total ? op : item.total),\r\n 0\r\n );\r\n }\r\n maxRange = this.helpers.inRange(findMax, this.filters.priceRange);\r\n let result: boolean = minRange && maxRange;\r\n return result;\r\n }\r\n return true;\r\n }\r\n\r\n private hasChain(hotel: HotelDetails): boolean {\r\n const tocheck = (this.filters.chain || []).map((chain: string): string => {\r\n return chain.toLowerCase();\r\n });\r\n return tocheck && tocheck.length\r\n ? !!tocheck.find((chain: string) => {\r\n return hotel.group.toLowerCase().includes(chain);\r\n })\r\n : true;\r\n }\r\n\r\n private breakfastTypeFilter(hotel: HotelDetails): boolean {\r\n if(!this.filters.breakfastType.length) return true;\r\n const hotelObject = this.avaliabilityService.getAvailabilityForId(this.makeHotelAvalilityObject(hotel));\r\n if(!hotelObject && !hotelObject.value) return false;\r\n const hotelObjectValue: HotelAvalibilityQuoteResult = hotelObject.value;\r\n const isBreakfastIncluded = this.filters.breakfastType.includes(SearchHandler.BREAKFAST_INCLUDED);\r\n const isBreakfastExcluded = this.filters.breakfastType.includes(SearchHandler.BREAKFAST_NOT_INCLUDED);\r\n\r\n const breakfastMatches = hotelObjectValue.rooms.filter((rooms: any) => {\r\n if(isBreakfastIncluded && isBreakfastExcluded){\r\n return rooms;\r\n } else if(isBreakfastIncluded) {\r\n return rooms.rateDescription.match(includedExpression) && !rooms.rateDescription.match(excludedExpression);\r\n } else if(isBreakfastExcluded){\r\n return !rooms.rateDescription.match(includedExpression) || rooms.rateDescription.match(excludedExpression);\r\n }\r\n }\r\n );\r\n return !!breakfastMatches.length;\r\n }\r\n\r\n byMostExpensive() {\r\n this.sortByPrice(false);\r\n }\r\n\r\n /**\r\n * @param {boolean} min\r\n * @param {boolean} debug set this to true to output console logs\r\n * @description sorts results by price according to the 'min' paramater. min = true (lowest price first), min = false (highest price first)\r\n * In summary, this method creates a sorted array of hotels with prices and an array of hotels WITHOUT prices,\r\n * then finally joins these 2 temporary arrays together before triggering the next observable.\r\n */\r\n\r\n sortByPrice(min = true, debug = false): void {\r\n // store all results\r\n const hotels: HotelDetailsArray = this.fullResults;\r\n\r\n // get hotels with and without prices\r\n const hotelsWithPrices: HotelDetailsArray = [];\r\n const hotelsWithoutPrices: HotelDetailsArray = [];\r\n hotels.map((hotelResult) => {\r\n this.avaliabilityService.getAvailabilityValue(hotelResult)?.prpn\r\n ? hotelsWithPrices.push(hotelResult)\r\n : hotelsWithoutPrices.push(hotelResult);\r\n });\r\n\r\n // sort hotels with prices according to the 'min' parameter for the order\r\n hotelsWithPrices.sort((first: HotelDetails, second: HotelDetails) => {\r\n const firstPrice =\r\n this.avaliabilityService.getAvailabilityValue(first)?.prpn;\r\n const secondPrice =\r\n this.avaliabilityService.getAvailabilityValue(second)?.prpn;\r\n return min\r\n ? firstPrice > secondPrice\r\n ? 1\r\n : secondPrice > firstPrice\r\n ? -1\r\n : 0\r\n : firstPrice < secondPrice\r\n ? 1\r\n : secondPrice < firstPrice\r\n ? -1\r\n : 0;\r\n });\r\n\r\n // join hotels with prices to hotels WITHOUT prices\r\n const sortedHotels = [...hotelsWithPrices, ...hotelsWithoutPrices];\r\n\r\n // trigger next observable\r\n this.results.next(sortedHotels);\r\n\r\n // display console logs if debug is true (could prove useful in future)\r\n if (debug) {\r\n console.log('++ sortByPrice() called ++');\r\n console.log('++ hotel ++', hotels);\r\n console.log('++ hotelsWithPrices ++', hotelsWithPrices);\r\n console.log('++ hotelsWithoutPrices ++', hotelsWithoutPrices);\r\n console.log('++ sortedHotels ++', sortedHotels);\r\n }\r\n }\r\n\r\n sortByName(): void {\r\n this.results.next(\r\n this.results.value.sort(\r\n (fst: HotelDetails, snd: HotelDetails): number => {\r\n return fst.name.toLowerCase().localeCompare(snd.name.toLowerCase());\r\n }\r\n )\r\n );\r\n }\r\n\r\n sortByDistance(): void {\r\n let results = this.results.value || [];\r\n results = results.sort((a, b) => {\r\n return Number(a.location.distance) - Number(b.location.distance);\r\n });\r\n this.results.next(results);\r\n }\r\n\r\n byPreferred(): void {\r\n let results = this.results.value || [];\r\n results = results.sort((a: HotelDetails, b: HotelDetails) => {\r\n return this.preferredToInt(b) - this.preferredToInt(a);\r\n });\r\n this.results.next(results);\r\n }\r\n\r\n private preferredToInt(hotel: HotelDetails): number {\r\n return (\r\n (hotel.preferred.client ? CLIENT_PREFERRED_VALUE : 0) +\r\n (hotel.preferred.consumer ? AGENT_PREFERRED_VALUE : 0)\r\n );\r\n }\r\n\r\n private intToPreferred(preferred: 0 | 1 | 2 | 3) {\r\n return {\r\n // tslint:disable-next-line: no-bitwise\r\n client: (preferred & CLIENT_PREFERRED_VALUE) === CLIENT_PREFERRED_VALUE,\r\n // tslint:disable-next-line: no-bitwise\r\n consumer: (preferred & AGENT_PREFERRED_VALUE) === AGENT_PREFERRED_VALUE\r\n };\r\n }\r\n\r\n addFilter(filter: string, type: keyof HotelFilters): void {\r\n const filt: any = this.localFilters;\r\n filt[type].push(filter);\r\n }\r\n\r\n removeFilter(filter: string, type: keyof HotelFilters): void {\r\n const filt = this.localFilters;\r\n if (Array.isArray(filt[type])) {\r\n (filt[type] as string[]) = (filt[type] as string[]).filter(\r\n (chain: string) => {\r\n return filter !== chain;\r\n }\r\n );\r\n }\r\n }\r\n\r\n resetFilters(): void {\r\n this.localFilters.chain = [];\r\n this.localFilters.amenitytype = [];\r\n this.localFilters.preferred = [];\r\n this.localFilters.extra = [];\r\n this.localFilters.hotelName = '';\r\n this.localFilters.breakfastType = [];\r\n }\r\n\r\n updateFromPreviousSearches(\r\n previousItems: Record<ServiceType, BasketItem>\r\n ): void {\r\n const flightItem: SearchFlightsV2QueryVariables =\r\n previousItems[ServiceType.Flight]?.searchQuery;\r\n if (flightItem) {\r\n // TODO flights haven't been done yet.\r\n }\r\n }\r\n\r\n private hasPreferred(hotel: HotelDetails): boolean {\r\n const preferredFilters = this.filters.preferred;\r\n\r\n // Empty preferred filters OR \"Any\"\r\n if (\r\n !preferredFilters.length ||\r\n preferredFilters.includes(SearchHandler.ANY)\r\n ) {\r\n return true;\r\n }\r\n\r\n // Agency (consumer) && Client\r\n if (\r\n preferredFilters.includes(SearchHandler.AGENCY) &&\r\n preferredFilters.includes(SearchHandler.CLIENT)\r\n ) {\r\n return (\r\n hotel.preferred.consumer === true && hotel.preferred.client === true\r\n );\r\n }\r\n\r\n // Agency\r\n if (preferredFilters.includes(SearchHandler.AGENCY)) {\r\n return hotel.preferred.consumer === true;\r\n }\r\n\r\n // Client\r\n if (preferredFilters.includes(SearchHandler.CLIENT)) {\r\n return hotel.preferred.client === true;\r\n }\r\n }\r\n\r\n public getmaxPriceForCurrency(currency: string): any {\r\n return this.avaliabilityService.maxPriceForCurrency(currency);\r\n }\r\n\r\n // Lightening Extra Filters\r\n private getExtraFilter(hotel: HotelDetails): boolean {\r\n const checkAvailability = this.filters.extra.includes(\r\n SearchHandler.AVAILABILITY\r\n );\r\n if (checkAvailability) {\r\n return hotel.unavailable === true;\r\n }\r\n\r\n const checkFemaleFriendly = this.filters.extra.includes(\r\n SearchHandler.FEMALE_FRIENDLY\r\n );\r\n if (checkFemaleFriendly) {\r\n return (\r\n hotel.tags.filter((tag) => {\r\n if (tag.name) {\r\n let name: string = this.convertToOneString(tag.name).toLowerCase();\r\n return name.includes(\r\n this.convertToOneString(\r\n SearchHandler.FEMALE_FRIENDLY\r\n ).toLowerCase()\r\n );\r\n } else {\r\n return true;\r\n }\r\n }).length > 0\r\n );\r\n }\r\n return true;\r\n }\r\n\r\n // Lightening Amernities Filters\r\n private getAmenitiesFilter(hotel: HotelDetails): boolean {\r\n let isTrue: boolean = true;\r\n this.filters.amenitytype.forEach((search) => {\r\n let filteredResults: any = hotel.tags.filter((tag) => {\r\n if (tag.name) {\r\n let name: string = this.convertToOneString(tag.name).toLowerCase();\r\n if (name.includes(this.convertToOneString(search).toLowerCase())) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n });\r\n isTrue = filteredResults && filteredResults.length > 0 ? true : false;\r\n // console.log(`Hotel ${hotel.name} with filter applied`, hotel?.tags, isTrue);\r\n return isTrue;\r\n });\r\n return isTrue;\r\n }\r\n\r\n private convertToOneString(item: string) {\r\n return item.replace(/[^a-zA-Z]/g, '');\r\n }\r\n\r\n getImages(HolidayCode: string): Observable<string[]> {\r\n const url =\r\n this.environment.hostBaseUrl +\r\n URLS.CONFIRMA_PHOTO_URL +\r\n HolidayCode.split(',')[0];\r\n const imgProvider = 'https://www.vfmii.com/'; // img provider thats holds images, used to match which images on page belongs to gallery.\r\n if (this.galleries[HolidayCode]) {\r\n return of(this.galleries[HolidayCode]);\r\n }\r\n\r\n return this.httpCallService.get(url as URLS, { responseType: 'text' }).pipe(\r\n map((imagesHTML) => {\r\n if (!imagesHTML) {\r\n throw Error(`Gallery for ${HolidayCode} can not be loaded.`);\r\n }\r\n const temp = document.createElement('div');\r\n temp.innerHTML = imagesHTML;\r\n const images = Array.from(temp.getElementsByTagName('img')).reduce(\r\n (acc, img) => {\r\n if (img.src.includes(imgProvider)) {\r\n acc.push(img.src);\r\n }\r\n return acc;\r\n },\r\n []\r\n );\r\n if (!images.length) {\r\n throw Error(\r\n `There is no media content provided for this hotel ${HolidayCode}`\r\n );\r\n }\r\n return (this.galleries[HolidayCode] = images);\r\n })\r\n );\r\n }\r\n\r\n addPaginationPage(currentPage: number): any {\r\n const key = 'PaginationPageCount';\r\n this.storageService.setSessionItem(key, currentPage);\r\n return this.storageService.getSessionItem(key);\r\n }\r\n\r\n toggleView(): void {\r\n if (this.currentView === HotelView.LIST) {\r\n this.currentView = HotelView.MAP;\r\n } else {\r\n this.currentView = HotelView.LIST;\r\n }\r\n }\r\n\r\n calcDayDiff(): number {\r\n const checkout = moment(this.checkout_date);\r\n const checkin = moment(this.checkin_date);\r\n return checkout.startOf().diff(checkin.startOf(), 'days');\r\n }\r\n updateLowestPrice(results: HotelDetails[]): ICheapestPrice {\r\n const currenciesKey = Object.keys(this.avaliabilityService.currencies);\r\n if ((!results.length && !currenciesKey.length) || !currenciesKey.length)\r\n return null;\r\n\r\n const currencie = currenciesKey[0];\r\n\r\n return {\r\n amount: this.avaliabilityService.currencies[currencie].minprice,\r\n currencyCode: currencie\r\n };\r\n }\r\n\r\n getRoomNumber() {\r\n let roomsOccupancy: any[] = [];\r\n for (let i = 0; i < Number(this.tempParams.no_of_rooms); i++) {\r\n const newRoomOccupancy = {\r\n Adults: this.calcRoomOccupancy(this.tempParams.no_of_rooms, this.tempParams.no_of_occupants),\r\n Children: 0,\r\n Infants: 0\r\n };\r\n roomsOccupancy.push(newRoomOccupancy);\r\n }\r\n\r\n let rooms: number[] = [];\r\n for (let index = 0; index < roomsOccupancy.length; index++) {\r\n for (let j = 0; j < roomsOccupancy[index].Adults; j++) {\r\n rooms.push(index+1);\r\n }\r\n }\r\n\r\n // --- should we add new property roomNumber for traveller? --\r\n // for (let index = 0; index < this.travellers.length; index++) {\r\n // this.travellers[index].roomNumber = rooms[index];\r\n // };\r\n }\r\n\r\n\r\n /**\r\n *\t@desc - return the occupancy for a room - need to calculate based on no of rooms, no of travellers and currently occupied rooms;\r\n **/\r\n\r\n calcRoomOccupancy(no_of_rooms: number, travellers: number): number{\r\n console.log('No of Travellers: ' + travellers + '| No of rooms: ' + no_of_rooms + ' | Assigned: ' + this.occupied);\r\n let roomOccupancy: number = Math.ceil(travellers/no_of_rooms);\r\n\r\n if (travellers - this.occupied < roomOccupancy) {\r\n console.log('We have run out of occupiers!');\r\n roomOccupancy = travellers - this.occupied;\r\n }\r\n\r\n if (roomOccupancy <= 0) {\r\n roomOccupancy = 1;\r\n }\r\n\r\n this.occupied += roomOccupancy;\r\n return roomOccupancy;\r\n }\r\n\r\n async addHotelRoomToBasket(\r\n hotel: HotelQuoteResult,\r\n hotelRoom: HotelRoom,\r\n hotelQuery: SearchHotelsQueryVariables,\r\n travellers?: Traveller[]\r\n ): Promise<boolean> {\r\n if (hotel.unavailable) {\r\n return Promise.resolve(false);\r\n }\r\n // modify the 'startDate' and 'endDate' properties to have ISO format\r\n hotelQuery.startDate = new Date(hotelQuery.startDate).toISOString();\r\n hotelQuery.endDate = new Date(hotelQuery.endDate).toISOString();\r\n\r\n // create copy of hotelQuery and delete 'adults' property as searchQuerySchema for hotel (conferma) does not seem to support it being added\r\n const searchQuery = { ...hotelQuery };\r\n delete searchQuery.adults;\r\n\r\n const intBasket: InternalBasketInterface =\r\n await this.basketService.getDefaultBasket();\r\n const basket = intBasket?.subject.value;\r\n if (basket) {\r\n const { address: hotelAaddress } = hotel;\r\n const { rateDescription, roomDescription, roomId, roomType } = hotelRoom;\r\n return this.basketService.addToBasket(\r\n {\r\n adults: hotelQuery.adults,\r\n basket: basket.id,\r\n service: hotel.sourceId.toString(),\r\n detail: {\r\n checkIn: hotelQuery.startDate,\r\n checkOut: hotelQuery.endDate,\r\n hotelAddress: {\r\n streetName: hotelAaddress.addressLine1,\r\n town: hotelAaddress.addressLine2,\r\n county: hotelAaddress.addressLine3,\r\n postcode: hotelAaddress.postOrZipCode,\r\n countryCode: hotelAaddress.countryCode\r\n },\r\n hotelDescription: hotel.group,\r\n hotelName: hotel.name,\r\n numberOfRooms: hotelQuery.rooms,\r\n rateDescription,\r\n roomDescription,\r\n roomId,\r\n roomType\r\n },\r\n price: hotelRoom.total,\r\n currency: hotelRoom.currencyCode as CurrencyCode,\r\n searchQuery,\r\n outboundDate: hotelQuery.startDate\r\n },\r\n intBasket,\r\n this.searchService,\r\n this.travellers\r\n );\r\n }\r\n\r\n return Promise.resolve(false);\r\n }\r\n}\r\n","import { BaseEnterpriseSearch } from './base-enterprise';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport moment from 'moment';\r\nimport { BaseStorageService } from '../services/storage.service';\r\nimport { BaseHelperRoutines } from './helpers';\r\nimport { Traveller } from '../models/traveller.object';\r\nimport {\r\n LoungeQuoteResult,\r\n LoungeQuoteResultArray,\r\n NgbDateStruct,\r\n OBTAirportDetails,\r\n RecentSearch,\r\n TerminalsType\r\n} from '../types/types';\r\nimport {\r\n AirportResults,\r\n BasketItem,\r\n LoungeQuote,\r\n SaveRecentSearchMutationVariables,\r\n SearchFlightsV2QueryVariables,\r\n SearchLoungesQueryVariables,\r\n ServiceType\r\n} from '../types/graphql.types';\r\nimport {\r\n BaseLoungeQuoteFetcher,\r\n LoungeQuoteFetcherType\r\n} from '../fetchers/lounge-quote.fetcher';\r\nimport {\r\n EnterpriseBasketServiceInterface,\r\n InternalBasketInterface\r\n} from '../interfaces/Ienterprise-basket.service';\r\nimport { EnterpriseSearchServiceInterface } from '../interfaces/Isearch.service';\r\nimport {\r\n LoungesEnterpriseSearchInterface,\r\n LoungesTempParams\r\n} from '../interfaces/Ilounges-enterprise-search';\r\nimport { ICheapestPrice } from '../interfaces/cheapest-price';\r\nexport class LoungesEnterpriseSearch<LQ_Q extends LoungeQuoteFetcherType>\r\n extends BaseEnterpriseSearch<\r\n LoungesTempParams,\r\n LoungeQuoteResultArray,\r\n LoungeQuoteResultArray\r\n >\r\n implements LoungesEnterpriseSearchInterface\r\n{\r\n static readonly STORAGE_SESSION_PARAMS = 'search_lounge';\r\n static readonly STORAGE_SESSION_RESULTS = 'results_lounge';\r\n public type: ServiceType = ServiceType.Lounge;\r\n public terminals = new BehaviorSubject<TerminalsType[]>([]);\r\n\r\n private travellers: Traveller[];\r\n private _locationCode: string;\r\n\r\n get adults(): number {\r\n return this.tempParams.adults;\r\n }\r\n\r\n set adults(value: number) {\r\n this.tempParams.adults = value;\r\n this._isValid();\r\n }\r\n\r\n get children(): number {\r\n return this.tempParams.children;\r\n }\r\n\r\n set children(value: number) {\r\n this.tempParams.children = value;\r\n this._isValid();\r\n }\r\n\r\n get infants(): number {\r\n return this.tempParams.infants;\r\n }\r\n\r\n set infants(value: number) {\r\n this.tempParams.infants = value;\r\n }\r\n\r\n private _flightNumber: string = null;\r\n\r\n get flightNumber(): string {\r\n return this._flightNumber;\r\n }\r\n\r\n set flightNumber(value: string) {\r\n this._flightNumber = value;\r\n }\r\n\r\n get locationCode(): string | OBTAirportDetails {\r\n return this.tempParams.locationCode;\r\n }\r\n\r\n set locationCode(value: string | OBTAirportDetails) {\r\n this.tempParams.locationCode = value;\r\n const terminalsType: TerminalsType[] = this.terminals?.value;\r\n if (typeof value === 'string') {\r\n this._locationCode = '';\r\n this.terminal = null;\r\n this.terminals.next([]);\r\n this.selectedTerminal = null;\r\n this._isValid();\r\n } else if (value && value.gateway) {\r\n this._locationCode = value.gateway;\r\n this.terminal = null;\r\n this.terminals.next(value.terminals);\r\n if (terminalsType.length === 1) {\r\n this.selectedTerminal = terminalsType[0].key;\r\n }\r\n this._isValid();\r\n } else {\r\n this._locationCode = null;\r\n this.terminal = null;\r\n this.selectedTerminal = null;\r\n this.terminals.next([]);\r\n this._isValid();\r\n }\r\n }\r\n\r\n get terminal(): string {\r\n return this.tempParams.terminal\r\n ? this.tempParams.terminal.toString()\r\n : null;\r\n }\r\n\r\n set terminal(input: string) {\r\n this.tempParams.terminal = input;\r\n const found: TerminalsType = this.terminals.value.find(\r\n (terminal: TerminalsType, index: number) => {\r\n if (terminal.value === input) {\r\n return true;\r\n }\r\n }\r\n );\r\n\r\n if (found) {\r\n this.selectedTerminal = found.key;\r\n } else {\r\n if (this.terminals.value && this.terminals.value.length > 0) {\r\n this.selectedTerminal = this.terminals.value[0].key;\r\n } else {\r\n this.selectedTerminal = 'Any Terminal';\r\n }\r\n }\r\n this._isValid();\r\n }\r\n\r\n private _selectedTerminal: string = '';\r\n set selectedTerminal(value: string) {\r\n this._selectedTerminal = value;\r\n this._isValid();\r\n }\r\n\r\n get selectedTerminal(): string {\r\n return this._selectedTerminal;\r\n }\r\n\r\n // public variables\r\n public min_date = {\r\n year: moment().year(),\r\n month: moment().month() + 1, // ngbDate months are not 0 indexed\r\n day: moment().date()\r\n };\r\n\r\n private _date: NgbDateStruct = null;\r\n get date(): NgbDateStruct {\r\n return this._date;\r\n }\r\n\r\n set date(value: NgbDateStruct) {\r\n this._date = value;\r\n this._updateDateTime();\r\n }\r\n\r\n private _time: string = null;\r\n get time(): string {\r\n return this._time;\r\n }\r\n\r\n set time(value: string) {\r\n this._time = value;\r\n this._updateDateTime();\r\n }\r\n\r\n get arrivalDatetime(): moment.Moment {\r\n return this.tempParams.arrivalDatetime;\r\n }\r\n\r\n set arrivalDatetime(value: moment.Moment) {\r\n if (value.isValid()) {\r\n this.tempParams.arrivalDatetime = value;\r\n\r\n this._date = this.helpers.momentToNgDate(value);\r\n this._time = this.helpers.formatTimeColon(value);\r\n } else {\r\n this.tempParams.arrivalDatetime = null;\r\n }\r\n this._isValid();\r\n }\r\n\r\n protected resultsSessionName =\r\n LoungesEnterpriseSearch.STORAGE_SESSION_RESULTS;\r\n\r\n constructor(\r\n private loungefetcher: BaseLoungeQuoteFetcher<LQ_Q>,\r\n private helpers: BaseHelperRoutines,\r\n private basketService: EnterpriseBasketServiceInterface,\r\n storageService: BaseStorageService,\r\n private searchService: EnterpriseSearchServiceInterface\r\n ) {\r\n super(storageService);\r\n const data: {\r\n tempParams: LoungesTempParams;\r\n } = storageService.getSessionItem(\r\n LoungesEnterpriseSearch.STORAGE_SESSION_PARAMS\r\n ) || {\r\n tempParams: {} as LoungesTempParams\r\n };\r\n\r\n this.updateTempParams(searchService.makeLoungesQuery(data.tempParams));\r\n\r\n if (searchService.shouldAddTravellerSubscription()) {\r\n searchService.travellerInformation.subscribe(\r\n (travellers: Traveller[]) => {\r\n const splitTravellers = this.helpers.selectedTravellers(\r\n travellers,\r\n ServiceType.Lounge\r\n );\r\n\r\n this.tempParams.adults = splitTravellers.adults.length;\r\n this.tempParams.children = splitTravellers.children.length;\r\n this.travellers = travellers;\r\n\r\n this._isValid();\r\n }\r\n );\r\n }\r\n const results =\r\n storageService.getSessionItemAsList<LoungeQuoteResultArray>(\r\n this.resultsSessionName\r\n ) || [];\r\n // if (results == null && this.isValid) {\r\n // searchService.startSearches();\r\n // }\r\n this._cheapestResultPrice = this.updateLowestPrice(results);\r\n this.results.next(results || []);\r\n }\r\n\r\n protected resetQuery() {\r\n this.updateTempParams(this.searchService.makeLoungesQuery());\r\n this._isValid();\r\n }\r\n\r\n getSearchQuery(): SearchLoungesQueryVariables {\r\n const query: SearchLoungesQueryVariables = {\r\n adults: this.tempParams.adults,\r\n children: this.tempParams.children,\r\n infants: this.tempParams.infants,\r\n locationCode: this._locationCode,\r\n terminal: this.tempParams.terminal === 'Any' ? null : this.tempParams.terminal,\r\n arrivalDatetime: this.tempParams.arrivalDatetime\r\n };\r\n return this.helpers.removeNulls<SearchLoungesQueryVariables>(query);\r\n }\r\n\r\n // Private Methods\r\n\r\n private _isValid() {\r\n if (!this.doChecks) {\r\n return;\r\n }\r\n this.storageService.setSessionItem(\r\n LoungesEnterpriseSearch.STORAGE_SESSION_PARAMS,\r\n {\r\n tempParams: this.tempParams,\r\n travellers: this.travellers\r\n }\r\n );\r\n\r\n this.validationMessages = [];\r\n if (!this._locationCode || this._locationCode === '') {\r\n this.validationMessages.push('You must select airport first.');\r\n }\r\n\r\n // if (!this.query.terminal) {\r\n // this.validationMessages.push('Terminal can not be empty.');\r\n // }\r\n\r\n if (this.tempParams.arrivalDatetime.unix() < moment().unix()) {\r\n this.validationMessages.push('Outward journey cannot be in the past.');\r\n }\r\n\r\n this.isValid.next(this.validationMessages.length === 0);\r\n this.messages.next(this.validationMessages);\r\n }\r\n\r\n private _updateDateTime() {\r\n if (this._date && this._time) {\r\n const time = this.helpers.ngDateToMoment(this._date, this._time);\r\n this.tempParams.arrivalDatetime = time.isValid() ? time : null;\r\n this._isValid();\r\n }\r\n }\r\n\r\n startSearch(): Promise<boolean> {\r\n this.results.next([]);\r\n\r\n if (this.isValid.value) {\r\n const query = this.getSearchQuery();\r\n this.searchService.saveRecentSearch(this.getRecentSearchQuery(query));\r\n return this._startSearch(\r\n this.loungefetcher.fetchList(\r\n this.helpers.removeNulls<SearchLoungesQueryVariables>(\r\n query\r\n )\r\n )\r\n );\r\n } else {\r\n return Promise.resolve(false);\r\n }\r\n }\r\n\r\n getRecentSearchQuery(query: SearchLoungesQueryVariables): SaveRecentSearchMutationVariables {\r\n return {\r\n serviceType: ServiceType.Lounge,\r\n searchArgs: query,\r\n travelDate: this.arrivalDatetime.format(),\r\n travellers: this.helpers.getTravellersId(this.travellers)\r\n };\r\n }\r\n\r\n public startRecentSearch(recentSearch: RecentSearch): void {\r\n this.arrivalDatetime = moment(recentSearch.searchArgs.arrivalDatetime);\r\n this.terminal = recentSearch.searchArgs.terminal;\r\n this.searchService.getAirportByCode(recentSearch.searchArgs.locationCode).subscribe((airport: AirportResults) => {\r\n if (airport) {\r\n this.locationCode = {\r\n country: airport.iataMatch?.locationDetails?.country,\r\n countryCode: airport.iataMatch?.locationDetails?.countryCode,\r\n destination: airport.iataMatch.name,\r\n gateway: airport.iataMatch.iata,\r\n postcode: airport.iataMatch?.locationDetails?.postcode,\r\n terminals: this.searchService.processTerminals(airport.iataMatch.terminals)\r\n };\r\n this.searchService.startSearches();\r\n }\r\n })\r\n this.searchService.startSearches();\r\n }\r\n\r\n sortByPrice(asc?: boolean, resultArray: LoungeQuote[] = []) {\r\n let sortResults = [...this.fullResults] as LoungeQuote[];\r\n if (!sortResults.length) {\r\n sortResults = resultArray;\r\n }\r\n sortResults = this.sortResultsPrice(sortResults, asc);\r\n this.results.next(sortResults);\r\n }\r\n\r\n sortResultsPrice(resultArray: LoungeQuote[], asc?: boolean): LoungeQuote[] {\r\n let results = [...resultArray];\r\n if (asc) {\r\n results = results.sort(\r\n (a: LoungeQuoteResult, b: LoungeQuoteResult) => b.price - a.price\r\n );\r\n } else {\r\n results = results.sort(\r\n (a: LoungeQuoteResult, b: LoungeQuoteResult) => a.price - b.price\r\n );\r\n }\r\n return results;\r\n }\r\n\r\n sortByTerminal(resultArray: LoungeQuote[] = []) {\r\n let results = [...this.fullResults];\r\n if (!results.length) {\r\n results = resultArray;\r\n }\r\n const terminalSorter = (a: LoungeQuoteResult, b: LoungeQuoteResult) => {\r\n return -1; // TODO a.rawData.FlightTermOut > b.rawData.FlightTermOut ? 1 : -1;\r\n };\r\n this.results.next(results.sort(terminalSorter));\r\n }\r\n\r\n updateFromPreviousSearches(\r\n previousItems: Record<ServiceType, BasketItem>\r\n ): void {\r\n const flightItem: SearchFlightsV2QueryVariables =\r\n previousItems[ServiceType.Flight]?.searchQuery;\r\n if (flightItem) {\r\n // TODO flights haven't been done yet.\r\n }\r\n }\r\n\r\n async addLoungeToBasket(\r\n loungeQuote: LoungeQuote,\r\n loungeQuery: SearchLoungesQueryVariables\r\n ): Promise<boolean> {\r\n if (loungeQuote.unavailable) {\r\n return Promise.resolve(false);\r\n }\r\n const intBasket: InternalBasketInterface =\r\n await this.basketService.getDefaultBasket();\r\n const basket = intBasket?.subject.value;\r\n if (basket) {\r\n return this.basketService.addToBasket(\r\n {\r\n adults: loungeQuery.adults,\r\n children: loungeQuery.children,\r\n infants: loungeQuery.infants,\r\n basket: basket.id,\r\n service: loungeQuote.sourceId.toString(),\r\n detail: {\r\n arrivalDatetime: loungeQuery.arrivalDatetime.format(),\r\n locationCode: loungeQuote.code,\r\n name: loungeQuote.name,\r\n airportIata: loungeQuery?.locationCode\r\n },\r\n price: loungeQuote.price,\r\n currency: loungeQuote.currency,\r\n searchQuery: loungeQuery,\r\n outboundDate: loungeQuery.arrivalDatetime.format()\r\n },\r\n intBasket,\r\n this.searchService,\r\n this.travellers\r\n );\r\n }\r\n return Promise.resolve(false); // TODO should this throw an error?\r\n }\r\n\r\n updateLowestPrice(results: LoungeQuote[]): ICheapestPrice {\r\n if (!results.length) return null;\r\n const currency = results[0].currency;\r\n return results.reduce(\r\n (cheapestPrice: ICheapestPrice, result: LoungeQuote) => {\r\n const price = result.price;\r\n if (cheapestPrice.amount > price) cheapestPrice.amount = price;\r\n return cheapestPrice;\r\n },\r\n { amount: Number.MAX_SAFE_INTEGER, currencyCode: currency }\r\n );\r\n }\r\n}\r\n","export enum RailDirection {\r\n Outbound = 'out',\r\n Inbound = 'in'\r\n}\r\n","export enum EurostarSearchType {\r\n return = 'return',\r\n oneWay = 'oneWay'\r\n}\r\n","import moment from 'moment';\r\nimport { BaseEnterpriseSearch } from './base-enterprise';\r\nimport { BaseStorageService } from '../services/storage.service';\r\nimport { BaseHelperRoutines } from './helpers';\r\nimport { Traveller } from '../models/traveller.object';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { ValueDisplay } from '../interfaces/value-display';\r\nimport { FlightFilters } from '../interfaces/flight-filters.interface';\r\nimport { SelectFilter } from '../interfaces/select-filter.interface';\r\nimport {\r\n AddItemToBasketMutationVariables,\r\n BasketItem,\r\n CurrencyCode,\r\n DestinationEntry,\r\n FareType,\r\n FlightCabinClass,\r\n FlightFareTotal,\r\n FlightItinerary,\r\n FlightJourney,\r\n FlightPassengerObject,\r\n FlightPassengerType,\r\n SearchFlightsV2QueryVariables,\r\n ServiceType\r\n} from '../types/graphql.types';\r\nimport {\r\n EurostarQuoteResult,\r\n NgbDateStruct,\r\n OBTAirportDetails,\r\n OBTAirlinesDetails,\r\n FlightDirectionEnum,\r\n GroupedFlights,\r\n FlightItineraryWithSelected,\r\n RecentSearch,\r\n EurostarGroupedQuoteResult,\r\n EurostarResults,\r\n EurostarItem,\r\n EurostarFare,\r\n EurostarClassEnum,\r\n EurostarQuoteResultArray\r\n} from '../types/types';\r\nimport {\r\n FullUserDetails,\r\n UserServiceInterface\r\n} from '../interfaces/Iuser.service';\r\nimport { EnterpriseSearchServiceInterface } from '../interfaces/Isearch.service';\r\nimport { ICheapestPrice } from '../interfaces/cheapest-price';\r\nimport { EurostarSearchType } from './eurostar-search-type.enum';\r\nimport { IMultiDestination } from '../interfaces/flight-multi-destination.interface';\r\nimport {\r\n EnterpriseBasketServiceInterface,\r\n InternalBasketInterface\r\n} from '../interfaces/Ienterprise-basket.service';\r\nimport {\r\n BaseEurostarQuoteFetcher,\r\n EurostarQuoteFetcherType\r\n} from '../fetchers/eurostar-quote.fetcher';\r\nimport {\r\n EurostarEnterpriseSearchInterface,\r\n EurostarTempParams\r\n} from '../interfaces/Ieurostar-enterprise-search';\r\nimport {\r\n FlightGroups,\r\n FlightOperator,\r\n TimeWindow\r\n} from './flight-enterprise-search';\r\nexport interface AllowedClassEurostar {\r\n name: string;\r\n type: EurostarClassEnum | null;\r\n}\r\n\r\nexport type AllowedClassesEurostar = AllowedClassEurostar[];\r\n\r\nexport type EurostarStation = {\r\n gateway: string;\r\n destination: string;\r\n};\r\n\r\nexport enum SortTypesEurostar {\r\n CheapestFirst = 'C',\r\n EarliestFirst = 'E'\r\n}\r\n\r\nexport enum SortMethod {\r\n sortByPrice = 'sortByPrice',\r\n sortByDate = 'sortByDate'\r\n}\r\n\r\nexport interface SortTypeEurostar {\r\n /** Title displayed on dropdown */\r\n title: string;\r\n /** Method name used by component to sort results */\r\n method: SortMethod;\r\n /** Icon displayed on drop down */\r\n icon: string;\r\n /** Sorting direction true for asc, false for dsc */\r\n dir: boolean;\r\n // this is what we will use to sort\r\n code: SortTypesEurostar;\r\n}\r\n\r\nexport type EurostarGroups = 'Standard' | 'StandardPremier' | 'BusinessPremier';\r\n\r\ninterface EurostarSessionType {\r\n results: EurostarQuoteResultArray;\r\n groupData: { [key: number]: number[] };\r\n grouped: GroupedFlights;\r\n query: SearchFlightsV2QueryVariables;\r\n}\r\n\r\nexport class EurostarEnterpriseSearch<SE_Q extends EurostarQuoteFetcherType>\r\n extends BaseEnterpriseSearch<\r\n EurostarTempParams,\r\n EurostarQuoteResult,\r\n EurostarQuoteResultArray\r\n >\r\n implements EurostarEnterpriseSearchInterface {\r\n static readonly STORAGE_SESSION_PARAMS = 'search_eurostar';\r\n static readonly STORAGE_SESSION_RESULTS = 'results_eurostar';\r\n\r\n public type: ServiceType = ServiceType.Eurostar;\r\n\r\n avaliableClasses: BehaviorSubject<AllowedClassesEurostar> =\r\n new BehaviorSubject<AllowedClassesEurostar>([]);\r\n timeCriteriaOptions: BehaviorSubject<TimeWindow[]> = new BehaviorSubject<\r\n TimeWindow[]\r\n >([]);\r\n flightOperators: BehaviorSubject<FlightOperator[]> = new BehaviorSubject<\r\n FlightOperator[]\r\n >([]);\r\n\r\n private _negotiated: boolean = false;\r\n private _nearby_airports: boolean = false;\r\n\r\n private _timeArray: ValueDisplay[];\r\n private _sortArray: SortTypeEurostar[] = [\r\n {\r\n title: 'Price',\r\n method: SortMethod.sortByPrice,\r\n icon: 'ico-dollar',\r\n dir: true,\r\n code: SortTypesEurostar.CheapestFirst\r\n },\r\n {\r\n title: 'Time',\r\n method: SortMethod.sortByDate,\r\n icon: 'ico-calendar',\r\n dir: true,\r\n code: SortTypesEurostar.EarliestFirst\r\n }\r\n ];\r\n\r\n private _fareTypeArray: ValueDisplay[] = [\r\n { value: FareType.Flexible, display: 'Flexible' },\r\n { value: FareType.Leisure, display: 'Leisure' },\r\n { value: FareType.Lowest, display: 'Lowest' },\r\n { value: FareType.Negotiated, display: 'Negotiated' },\r\n { value: FareType.NonNegotiated, display: 'Non-Negotiated' },\r\n { value: FareType.RequestFareRules, display: 'Request Fare Rules' },\r\n { value: FareType.SelectAndPro, display: 'Select & Pro' }\r\n ];\r\n\r\n public minimumOutBoundDate = {\r\n year: moment().year(),\r\n month: moment().month() + 1,\r\n day: moment().date()\r\n };\r\n\r\n public minimumInBoundDate = {\r\n year: moment().year(),\r\n month: moment().month() + 1,\r\n day: moment().date()\r\n };\r\n\r\n public searchTypes: ValueDisplay[] = [\r\n {value: EurostarSearchType.return, display: 'Return'},\r\n {value: EurostarSearchType.oneWay, display: 'One-way'},\r\n ]\r\n\r\n private _outDate: NgbDateStruct;\r\n private _outTime: string;\r\n private _inDate: NgbDateStruct;\r\n private _inTime: string;\r\n private _destinationAirport: any;\r\n private _originAirport: any;\r\n private _passengers: any;\r\n private groupedObject: FlightItineraryWithSelected[];\r\n protected flightsToGroup: { [key: number]: number[] } = {};\r\n protected resultQuery: SearchFlightsV2QueryVariables;\r\n protected grouped: GroupedFlights = null;\r\n travellers: Traveller[] = null;\r\n protected resultsSessionName =\r\n EurostarEnterpriseSearch.STORAGE_SESSION_RESULTS;\r\n selectedGroupFlight: FlightItineraryWithSelected;\r\n private _displayAddHotel: boolean = false;\r\n\r\n public get displayAddHotel(): boolean {\r\n return this._displayAddHotel;\r\n }\r\n\r\n public set displayAddHotel(newVal: boolean) {\r\n this._displayAddHotel = newVal;\r\n }\r\n selectedGroupEurostar: EurostarItem;\r\n selectedEurostarFare: EurostarFare;\r\n\r\n public get timeArray() {\r\n this._timeArray =\r\n this._timeArray ||\r\n Array(96)\r\n .fill(0)\r\n .map((_, index: number) => {\r\n return {\r\n value:\r\n Math.floor(index / 4)\r\n .toString()\r\n .padStart(2, '0') +\r\n ':' +\r\n ((index % 4) * 15).toString().padStart(2, '0'),\r\n display:\r\n Math.floor(index / 4)\r\n .toString()\r\n .padStart(2, '0') +\r\n ':' +\r\n ((index % 4) * 15).toString().padStart(2, '0')\r\n };\r\n });\r\n return this._timeArray;\r\n }\r\n\r\n public get preferredCarriers(): OBTAirlinesDetails[] {\r\n return this.tempParams.preferredCarriers;\r\n }\r\n\r\n public set preferredCarriers(value: OBTAirlinesDetails[]) {\r\n this.tempParams.preferredCarriers = value;\r\n this._isValid();\r\n }\r\n\r\n public get operator1(): OBTAirlinesDetails {\r\n return this.tempParams.preferredCarriers[0];\r\n }\r\n\r\n public set operator1(value: OBTAirlinesDetails) {\r\n this.tempParams.preferredCarriers[0] = value;\r\n this._isValid();\r\n }\r\n public get operator2(): OBTAirlinesDetails {\r\n return this.tempParams.preferredCarriers[1];\r\n }\r\n\r\n public set operator2(value: OBTAirlinesDetails) {\r\n this.tempParams.preferredCarriers[1] = value;\r\n this._isValid();\r\n }\r\n public get operator3(): OBTAirlinesDetails {\r\n return this.tempParams.preferredCarriers[2];\r\n }\r\n\r\n public set operator3(value: OBTAirlinesDetails) {\r\n this.tempParams.preferredCarriers[2] = value;\r\n this._isValid();\r\n }\r\n public get operator4(): OBTAirlinesDetails {\r\n return this.tempParams.preferredCarriers[3];\r\n }\r\n\r\n public set operator4(value: OBTAirlinesDetails) {\r\n this.tempParams.preferredCarriers[3] = value;\r\n this._isValid();\r\n }\r\n\r\n private _minDate: NgbDateStruct;\r\n public get minDate(): NgbDateStruct {\r\n this._minDate = this._minDate || this.helpers.momentToNgDate(moment());\r\n return this._minDate;\r\n }\r\n\r\n public get adults(): number {\r\n return this.tempParams.adults;\r\n }\r\n\r\n public set adults(value: number) {\r\n this.tempParams.adults = Number(value);\r\n this.updateTravellers();\r\n }\r\n\r\n public get children(): number {\r\n return this.tempParams.children;\r\n }\r\n\r\n public set children(value: number) {\r\n this.tempParams.children = Number(value);\r\n this.updateTravellers();\r\n }\r\n\r\n public get departLocation(): string | OBTAirportDetails {\r\n return this.tempParams.departLocation;\r\n }\r\n\r\n public set departLocation(value: string | OBTAirportDetails) {\r\n this.tempParams.departLocation = value;\r\n if (typeof value === 'string') {\r\n this._originAirport = '';\r\n } else if (value && value.gateway) {\r\n this._originAirport = value.gateway;\r\n } else {\r\n this._originAirport = null;\r\n }\r\n this._isValid();\r\n }\r\n\r\n public get queryOriginAiport(): string {\r\n return this._originAirport;\r\n }\r\n\r\n public get queryDestinationAiport(): string {\r\n return this._destinationAirport;\r\n }\r\n\r\n public get departDate(): NgbDateStruct {\r\n return this._outDate;\r\n }\r\n\r\n public set departDate(value: NgbDateStruct) {\r\n this._outDate = value;\r\n this.outBoundDate = this.helpers.ngDateToMoment(\r\n this._outDate,\r\n this._outTime\r\n );\r\n }\r\n\r\n public get departTime(): string {\r\n return this._outTime;\r\n }\r\n\r\n public set departTime(value: string) {\r\n this._outTime = value;\r\n this.outBoundDate = this.helpers.ngDateToMoment(\r\n this._outDate,\r\n this._outTime\r\n );\r\n }\r\n\r\n public get outBoundDate(): moment.Moment {\r\n return this.tempParams.outBoundDate;\r\n }\r\n\r\n public set outBoundDate(value: moment.Moment) {\r\n value = moment(value);\r\n this.tempParams.outBoundDate = value.isValid() ? value : null;\r\n this.minimumInBoundDate = {\r\n year: value.year(),\r\n month: value.month() + 1,\r\n day: value.date()\r\n };\r\n\r\n if (\r\n this.tempParams.outBoundDate &&\r\n this.tempParams.inboundDate &&\r\n this.tempParams.outBoundDate.isAfter(this.tempParams.inboundDate)\r\n ) {\r\n this.inboundDate = moment(this.tempParams.outBoundDate).add(1, 'day');\r\n }\r\n this._outDate = this.helpers.momentToNgDate(value);\r\n this._outTime = this.helpers.formatTimeColon(value);\r\n this._isValid();\r\n }\r\n\r\n public get returnDate(): NgbDateStruct {\r\n return this._inDate;\r\n }\r\n\r\n public set returnDate(value: NgbDateStruct) {\r\n this._inDate = value;\r\n this.inboundDate = this.helpers.ngDateToMoment(this._inDate, this._inTime);\r\n }\r\n\r\n public get arriveTime(): string {\r\n return this._inTime;\r\n }\r\n\r\n public set arriveTime(value: string) {\r\n this._inTime = value;\r\n this.inboundDate = this.helpers.ngDateToMoment(this._inDate, this._inTime);\r\n }\r\n\r\n public get inboundDate(): moment.Moment {\r\n return this.tempParams.inboundDate;\r\n }\r\n\r\n public set inboundDate(value: moment.Moment) {\r\n value = moment(value);\r\n this.tempParams.inboundDate = value.isValid() ? value : null;\r\n this._inDate = this.helpers.momentToNgDate(value);\r\n this._inTime = this.helpers.formatTimeColon(value);\r\n this._isValid();\r\n }\r\n\r\n public get arriveLocation(): string | OBTAirportDetails {\r\n return this.tempParams.arriveLocation;\r\n }\r\n\r\n public set arriveLocation(value: string | OBTAirportDetails) {\r\n this.tempParams.arriveLocation = value;\r\n if (typeof value === 'string') {\r\n this._destinationAirport = '';\r\n } else if (value && value.gateway) {\r\n this._destinationAirport = value.gateway;\r\n } else {\r\n this._destinationAirport = null;\r\n }\r\n this._isValid();\r\n }\r\n\r\n get cabinClass(): FlightCabinClass | null {\r\n return this.tempParams.cabinClass;\r\n }\r\n\r\n set cabinClass(value: FlightCabinClass | null) {\r\n this.tempParams.cabinClass = value;\r\n this._isValid();\r\n }\r\n\r\n get returnCabinClass(): FlightCabinClass | null {\r\n return this.tempParams.returnCabinClass;\r\n }\r\n\r\n set returnCabinClass(value: FlightCabinClass | null) {\r\n this.tempParams.returnCabinClass = value;\r\n this._isValid();\r\n }\r\n\r\n get chosenSearchType(): EurostarSearchType {\r\n return this.tempParams.chosenSearchType;\r\n }\r\n\r\n set chosenSearchType(type: EurostarSearchType) {\r\n this.tempParams.chosenSearchType = type;\r\n this._isValid();\r\n }\r\n\r\n get isReturn(): boolean {\r\n return this.tempParams.chosenSearchType === EurostarSearchType.return;\r\n }\r\n\r\n get outTimeCriteria(): TimeWindow {\r\n return this.tempParams.outTimeCriteria;\r\n }\r\n\r\n set outTimeCriteria(value: TimeWindow) {\r\n this.tempParams.outTimeCriteria = value;\r\n this._isValid();\r\n }\r\n\r\n get inTimeCriteria(): TimeWindow {\r\n return this.tempParams.inTimeCriteria;\r\n }\r\n\r\n set inTimeCriteria(value: TimeWindow) {\r\n this.tempParams.inTimeCriteria = value;\r\n this._isValid();\r\n }\r\n get maxConnections(): number {\r\n return this.tempParams.maxConnections;\r\n }\r\n\r\n set maxConnections(value: number) {\r\n this.tempParams.maxConnections = value;\r\n }\r\n\r\n private _multiDestination: DestinationEntry[] = [];\r\n get multiDestination(): IMultiDestination[] {\r\n return this.tempParams.multiDestination;\r\n }\r\n\r\n set multiDestination(valueArray: IMultiDestination[]) {\r\n this.tempParams.multiDestination = valueArray;\r\n this._isValid();\r\n }\r\n\r\n setMultiDestinationQuery(multiDestination: IMultiDestination[]) {\r\n const newMultiDestination = this.helpers.clone(multiDestination);\r\n return newMultiDestination.reduce(\r\n (destinationArray: DestinationEntry[], item: IMultiDestination) => {\r\n const destinationObject = {} as DestinationEntry;\r\n destinationObject.orig = item.orig.gateway;\r\n destinationObject.dest = item.dest.gateway;\r\n destinationObject.date = this.helpers.formatIsoDate(item.date);\r\n destinationArray.push(destinationObject);\r\n return destinationArray;\r\n },\r\n [] as DestinationEntry[]\r\n );\r\n }\r\n\r\n // get only\r\n get sortDropdownValues(): SortTypeEurostar[] {\r\n return this._sortArray;\r\n }\r\n\r\n get fareTypesValues(): ValueDisplay[] {\r\n return this._fareTypeArray;\r\n }\r\n\r\n get fareType(): FareType {\r\n return this.tempParams.fareType;\r\n }\r\n\r\n set fareType(value: FareType) {\r\n this.tempParams.fareType = value;\r\n this._isValid();\r\n }\r\n\r\n get negotiated(): boolean {\r\n return this._negotiated;\r\n }\r\n\r\n set negotiated(value: boolean) {\r\n this._negotiated = value;\r\n }\r\n\r\n get includeNearbyAirports(): boolean {\r\n return this.tempParams.includeNearbyAirports;\r\n }\r\n\r\n set includeNearbyAirports(value: boolean) {\r\n this.tempParams.includeNearbyAirports = value;\r\n }\r\n constructor(\r\n private eurostarFetcher: BaseEurostarQuoteFetcher<SE_Q>,\r\n private helpers: BaseHelperRoutines,\r\n userService: UserServiceInterface,\r\n private basketService: EnterpriseBasketServiceInterface,\r\n storageService: BaseStorageService,\r\n private searchService: EnterpriseSearchServiceInterface\r\n ) {\r\n super(\r\n storageService,\r\n\r\n (results1: EurostarQuoteResult): EurostarQuoteResultArray => {\r\n this.resultQuery = this.getSearchQuery();\r\n delete this.resultQuery.withGrouped;\r\n if(results1 && this.searchService.isFlightsGrouped()){\r\n const returndata = (results1.journeys || []).reduce(\r\n (acc: EurostarResults, result: FlightItinerary): EurostarResults => {\r\n if (result.outboundFlights.length) {\r\n const euroResult = this.formatEurostarResults(\r\n result.outboundFlights,\r\n result.total\r\n );\r\n euroResult.co2PerPassenger = result.co2PerPassenger;\r\n euroResult.co2PerItem = result.co2PerItem;\r\n euroResult.sourceId = result.sourceId;\r\n euroResult.total = result.total;\r\n euroResult.duration = this.minToHour(result.outboundTotalDuration);\r\n if (\r\n !acc.outbound.find(\r\n (item: EurostarItem) =>\r\n item.dateDeparture === euroResult.dateDeparture\r\n )\r\n ) {\r\n acc.outbound.push(euroResult);\r\n }\r\n }\r\n\r\n if (result.inboundFlights.length) {\r\n const euroResult = this.formatEurostarResults(\r\n result.inboundFlights,\r\n result.total\r\n );\r\n euroResult.co2PerPassenger = result.co2PerPassenger;\r\n euroResult.co2PerItem = result.co2PerItem;\r\n euroResult.sourceId = result.sourceId;\r\n euroResult.total = result.total;\r\n euroResult.duration = this.minToHour(result.inboundTotalDuration);\r\n if (\r\n !acc.inbound.find(\r\n (item: EurostarItem) =>\r\n item.dateDeparture === euroResult.dateDeparture\r\n )\r\n ) {\r\n acc.inbound.push(euroResult);\r\n }\r\n }\r\n return acc;\r\n }, { outbound: [], inbound: [] } as EurostarResults);\r\n return [returndata];\r\n } else {\r\n return results1 ? [results1] : [];\r\n }\r\n\r\n }\r\n );\r\n\r\n const data: {\r\n tempParams: EurostarTempParams;\r\n originalUserSearch: EurostarTempParams;\r\n } = storageService.getSessionItem(\r\n EurostarEnterpriseSearch.STORAGE_SESSION_PARAMS\r\n ) || {\r\n tempParams: {} as EurostarTempParams,\r\n originalUserSearch: {} as EurostarTempParams\r\n };\r\n // data.tempParams.adults = 1;\r\n // data.tempParams.cabinClass = [FlightCabinClass.Economy];\r\n const query = searchService.makeEurostarQuery(data.tempParams);\r\n this.updateTempParams(query);\r\n this._originalUserSearch = data.originalUserSearch;\r\n if (searchService.shouldAddTravellerSubscription()) {\r\n searchService.travellerInformation.subscribe(\r\n (travellers: Traveller[]) => {\r\n this.travellers = travellers;\r\n const splitTravellers = this.helpers.selectedTravellers(\r\n travellers,\r\n ServiceType.Eurostar\r\n );\r\n this.tempParams.adults = splitTravellers.adults.length;\r\n this.tempParams.children = splitTravellers.children.length;\r\n // this.tempParams.infants = splitTravellers.infants.length;\r\n\r\n this.updateTravellers();\r\n this._isValid();\r\n }\r\n );\r\n }\r\n\r\n userService.changeUser.subscribe((user: FullUserDetails) => {\r\n this.timeCriteriaOptions.next([\r\n TimeWindow.Anytime,\r\n TimeWindow.Arrive,\r\n TimeWindow.Depart\r\n ]); // TODO update with any UFs\r\n this.updateAvaliableClasses();\r\n });\r\n\r\n this.updateTravellers();\r\n const results: EurostarSessionType = storageService.getSessionItem(\r\n this.resultsSessionName\r\n ) || {\r\n results: [],\r\n groupData: {},\r\n grouped: [],\r\n query: {} as SearchFlightsV2QueryVariables\r\n };\r\n this.fullResults = this.helpers.clone(results.results);\r\n this.flightsToGroup = results.groupData || {};\r\n this.resultQuery = results.query;\r\n this.results.next(results.results || ([] as EurostarQuoteResultArray));\r\n this._isValid();\r\n this.negotiated =\r\n this.tempParams.fareType === FareType.Negotiated ? true : false;\r\n }\r\n formatEurostarResults(\r\n results: FlightJourney[],\r\n total: FlightFareTotal\r\n ): EurostarItem {\r\n const returnObject: EurostarItem = {\r\n dateArrival: null,\r\n dateDeparture: null,\r\n duration: null,\r\n timeArrival: null,\r\n timeDeparture: null,\r\n co2PerItem: 0,\r\n co2PerPassenger: 0,\r\n sourceId: null,\r\n total: null,\r\n uid: null,\r\n\r\n businessPremierFare: {\r\n class: null,\r\n fare: null,\r\n isDisabled: true,\r\n price: NaN,\r\n currency: 'GBP'\r\n },\r\n standardFare: {\r\n class: null,\r\n fare: null,\r\n isDisabled: true,\r\n price: NaN,\r\n currency: 'GBP'\r\n },\r\n standardPremierFare: {\r\n class: null,\r\n fare: null,\r\n isDisabled: true,\r\n price: NaN,\r\n currency: 'GBP'\r\n }\r\n };\r\n // returnObject.duration = results.outboundTotalDuration;\r\n results.forEach((flight, index) => {\r\n returnObject.dateArrival = flight.dateTimeArriving;\r\n returnObject.dateDeparture = flight.dateTimeDeparting;\r\n returnObject.duration = this.minToHour(flight.totalDuration);\r\n returnObject.timeArrival = moment(flight.dateTimeArriving).format(\r\n 'HH:mm'\r\n );\r\n returnObject.timeDeparture = moment(flight.dateTimeDeparting).format(\r\n 'HH:mm'\r\n );\r\n returnObject.uid = index;\r\n switch (flight.fareInfo.title) {\r\n case EurostarClassEnum.STANDARD:\r\n returnObject.standardFare.isDisabled = false;\r\n returnObject.standardFare.fare = flight;\r\n returnObject.standardFare.price = total.price;\r\n returnObject.standardFare.currency = total.currency;\r\n returnObject.standardFare.class = flight.cabinClass;\r\n break;\r\n case EurostarClassEnum.STANDARD_PREMIER:\r\n returnObject.standardPremierFare.isDisabled = false;\r\n returnObject.standardPremierFare.fare = flight;\r\n returnObject.standardPremierFare.price = total.price;\r\n returnObject.standardPremierFare.currency = total.currency;\r\n returnObject.standardPremierFare.class = flight.cabinClass;\r\n break;\r\n case EurostarClassEnum.BUSINESS_PREMIER:\r\n returnObject.businessPremierFare.isDisabled = false;\r\n returnObject.businessPremierFare.fare = flight;\r\n returnObject.businessPremierFare.price = total.price;\r\n returnObject.businessPremierFare.currency = total.currency;\r\n returnObject.businessPremierFare.class = flight.cabinClass;\r\n break;\r\n default:\r\n console.log('new class to be implemented: ', flight.fareInfo.title);\r\n }\r\n });\r\n return returnObject;\r\n }\r\n\r\n protected resetQuery(checkIsValid: boolean = true): void {\r\n this.updateTempParams(this.searchService.makeEurostarQuery());\r\n if (checkIsValid) {\r\n this._isValid();\r\n }\r\n }\r\n\r\n public resetParams(): void {\r\n this.reset();\r\n this.resetQuery();\r\n }\r\n\r\n private _isValid() {\r\n if (!this.doChecks) {\r\n return;\r\n }\r\n this.storageService.setSessionItem(\r\n EurostarEnterpriseSearch.STORAGE_SESSION_PARAMS,\r\n {\r\n tempParams: this.tempParams,\r\n originalUserSearch: this.originalUserSearch\r\n }\r\n );\r\n\r\n this.validationMessages = [];\r\n if (!this._originAirport) {\r\n this.validationMessages.push('Please add in a departutre location');\r\n }\r\n if (!this._destinationAirport) {\r\n this.validationMessages.push('Please add in a arrival destination');\r\n }\r\n if (!this.tempParams.outBoundDate.isAfter(moment())) {\r\n this.validationMessages.push('Departure date can not be in the past');\r\n }\r\n\r\n if (\r\n this._originAirport &&\r\n this._destinationAirport &&\r\n this._destinationAirport === this._originAirport\r\n ) {\r\n this.validationMessages.push(\r\n 'Origin and destination station cannot be the same'\r\n );\r\n }\r\n if (this.isReturn) {\r\n // TODO check that return details are set\r\n if (\r\n this.tempParams.outBoundDate.isSameOrAfter(\r\n this.tempParams.inTimeCriteria\r\n )\r\n ) {\r\n this.validationMessages.push(\r\n 'Return date must be after the departure date'\r\n );\r\n }\r\n }\r\n this.isValid.next(this.validationMessages.length === 0);\r\n this.messages.next(this.validationMessages);\r\n }\r\n\r\n startSearch(): Promise<boolean> {\r\n this.results.next([]);\r\n this._isValid();\r\n\r\n if (this.isValid.value) {\r\n this._originalUserSearch = Object.freeze({ ...this.tempParams });\r\n this.storageService.setSessionItem(\r\n EurostarEnterpriseSearch.STORAGE_SESSION_PARAMS,\r\n {\r\n tempParams: this.tempParams,\r\n originalUserSearch: this.originalUserSearch\r\n }\r\n );\r\n return this._startSearch(\r\n this.eurostarFetcher.fetchList(this.getSearchQuery())\r\n );\r\n } else {\r\n return Promise.resolve(false);\r\n }\r\n }\r\n\r\n public startRecentSearch(recentSearch: RecentSearch): void { }\r\n\r\n private makeDepartureTimeWindow(\r\n dateTime: moment.Moment,\r\n window: TimeWindow\r\n ): string {\r\n return window === TimeWindow.Depart\r\n ? this.helpers.makeTimeWindow(dateTime, -2, 2)\r\n : null;\r\n }\r\n\r\n private makeArrivalTimeWindow(\r\n dateTime: moment.Moment,\r\n window: TimeWindow\r\n ): string {\r\n if (window !== TimeWindow.Arrive) {\r\n return null;\r\n }\r\n\r\n return this.helpers.makeTimeWindow(dateTime, -2, 2);\r\n }\r\n\r\n getSearchQuery(): SearchFlightsV2QueryVariables {\r\n return this.helpers.removeNulls<SearchFlightsV2QueryVariables>(\r\n Object.assign(\r\n {},\r\n {\r\n originAirport: this._originAirport,\r\n destinationAirport: this._destinationAirport,\r\n outboundDate: this.helpers.formatIsoDate(\r\n this.tempParams.outBoundDate\r\n ),\r\n outboundDepartureTimeWindow: this.makeDepartureTimeWindow(\r\n this.tempParams.outBoundDate,\r\n this.tempParams.outTimeCriteria\r\n ),\r\n outboundArrivalTimeWindow: this.makeArrivalTimeWindow(\r\n this.tempParams.outBoundDate,\r\n this.tempParams.outTimeCriteria\r\n )\r\n },\r\n {\r\n passengers: this._passengers,\r\n returnTrip: this.isReturn,\r\n outboundCabinClass: this.tempParams.cabinClass\r\n ? [this.tempParams.cabinClass]\r\n : null,\r\n requireFreeBag: null,\r\n maxConnections: this.tempParams.maxConnections,\r\n includeNearbyAirports: this.tempParams.includeNearbyAirports,\r\n preferredCarriers: this.tempParams.preferredCarriers.map(\r\n (carrier: OBTAirlinesDetails) =>\r\n carrier?.code ? carrier.code : null\r\n ),\r\n fareType: this.tempParams.fareType,\r\n withGrouped: null\r\n },\r\n this.isReturn\r\n ? {\r\n returnDate: this.helpers.formatIsoDate(\r\n this.tempParams.inboundDate\r\n ),\r\n returnDepartureTimeWindow: this.makeDepartureTimeWindow(\r\n this.tempParams.inboundDate,\r\n this.tempParams.inTimeCriteria\r\n ),\r\n returnArrivalTimeWindow: this.makeArrivalTimeWindow(\r\n this.tempParams.inboundDate,\r\n this.tempParams.inTimeCriteria\r\n ),\r\n returnCabinClass: this.tempParams.returnCabinClass\r\n ? [this.tempParams.returnCabinClass]\r\n : null\r\n }\r\n : {}\r\n )\r\n );\r\n }\r\n\r\n private updateTravellers() {\r\n const travellers: FlightPassengerObject[] = [];\r\n for (let loop = 0; loop < this.tempParams.adults; loop += 1) {\r\n travellers.push({ type: FlightPassengerType.Adult });\r\n }\r\n for (let loop = 0; loop < this.tempParams.children; loop += 1) {\r\n travellers.push({ type: FlightPassengerType.Child });\r\n }\r\n\r\n this._passengers = travellers;\r\n this._isValid();\r\n }\r\n\r\n private updateAvaliableClasses() {\r\n this.avaliableClasses.next([\r\n {\r\n name: 'Any',\r\n type: EurostarClassEnum.ANY\r\n },\r\n {\r\n name: 'Standard (semi flexible)',\r\n type: EurostarClassEnum.STANDARD\r\n },\r\n {\r\n name: 'Standard premier (semi flexible)',\r\n type: EurostarClassEnum.STANDARD_PREMIER\r\n },\r\n {\r\n name: 'Business premier (fully flexible)',\r\n type: EurostarClassEnum.BUSINESS_PREMIER\r\n }\r\n ]);\r\n }\r\n\r\n /**\r\n * @description - sort the flight results\r\n * @todo - Fill out Preferred and Co2 sorting when we have that data\r\n */\r\n public sortResults(\r\n sortMethodValue: SortTypesEurostar,\r\n givenResults?: EurostarResults[]\r\n ): void {\r\n let results = this.helpers.clone(\r\n givenResults\r\n ? givenResults\r\n : <EurostarResults[]>(<unknown>this.fullResults)\r\n );\r\n\r\n switch (sortMethodValue) {\r\n case SortTypesEurostar.CheapestFirst:\r\n results = this.sortByPrice(results);\r\n break;\r\n case SortTypesEurostar.EarliestFirst:\r\n results = this.sortByDate(results);\r\n break;\r\n default:\r\n console.error(`+++ Unknown sorting method: ${sortMethodValue} +++`);\r\n }\r\n\r\n this.results.next(results);\r\n }\r\n\r\n /**\r\n * Sort results by departure time\r\n *\r\n * @param {EurostarResults[]} results\r\n * @returns\r\n * @memberof EurostarInfo\r\n */\r\n sortByDate(results: EurostarResults[]): EurostarResults[] {\r\n const byDate = (a: EurostarItem, b: EurostarItem) => {\r\n return (\r\n moment(a.timeDeparture, 'HH:mm').unix() -\r\n moment(b.timeDeparture, 'HH:mm').unix()\r\n );\r\n };\r\n\r\n const sortedResults = {\r\n outbound: results[0].outbound.sort(byDate),\r\n inbound: results[0].inbound.sort(byDate)\r\n };\r\n return [sortedResults];\r\n }\r\n\r\n /**\r\n * Sort results by price\r\n *\r\n * @param {EurostarResults[]} results\r\n * @returns\r\n * @memberof EurostarInfo\r\n */\r\n sortByPrice(results: EurostarResults[], dir?: boolean): EurostarResults[] {\r\n const byPrice = (a: EurostarItem, b: EurostarItem) => {\r\n const aPrice =\r\n +a.standardFare.price ||\r\n +a.standardPremierFare.price ||\r\n +a.businessPremierFare.price;\r\n const bPrice =\r\n +b.standardFare.price ||\r\n +b.standardPremierFare.price ||\r\n +b.businessPremierFare.price;\r\n if (dir) {\r\n return bPrice - aPrice;\r\n }\r\n return aPrice - bPrice;\r\n };\r\n\r\n const sortedResults = {\r\n outbound: results[0].outbound.sort(byPrice),\r\n inbound: results[0].inbound.sort(byPrice)\r\n };\r\n return [sortedResults];\r\n }\r\n\r\n updateFromPreviousSearches(\r\n previousItems: Record<ServiceType, BasketItem>\r\n ): void {\r\n const flightItem: SearchFlightsV2QueryVariables =\r\n previousItems[ServiceType.Flight]?.searchQuery;\r\n if (flightItem) {\r\n // TODO flights haven't been done yet.\r\n }\r\n }\r\n\r\n getTotalBaggage(result: FlightItinerary): number {\r\n let total = 0;\r\n\r\n const parsedAdditional = JSON.parse(result.additional);\r\n if (parsedAdditional && parsedAdditional.outboundFlights) {\r\n parsedAdditional.outboundFlights.forEach((flight: any) => {\r\n flight.baggage.forEach((bag: any) => {\r\n if (bag.allowance && bag.allowance > total) {\r\n total = bag.allowance;\r\n }\r\n });\r\n });\r\n } else if (parsedAdditional && parsedAdditional.baggageAllowance) {\r\n parsedAdditional.baggageAllowance.forEach((baggageAllow: any) => {\r\n if (\r\n baggageAllow.baggage.qty &&\r\n Number(baggageAllow.baggage.qty) > total\r\n ) {\r\n total = Number(baggageAllow.baggage.qty);\r\n }\r\n });\r\n }\r\n\r\n return total;\r\n }\r\n\r\n /**\r\n * @description - give the correct format for transfering minuetes on the sliders\r\n * @param min - the min in 100th's to transform onto 60th's\r\n */\r\n transformMin(min: number): string {\r\n let num = (Number(min) * 60) / 100;\r\n // console.log('+++ Num Copy: ', _.clone(num), ' +++');\r\n if (num % 1 < 0.5) {\r\n num = Math.floor(num);\r\n } else {\r\n num = Math.ceil(num);\r\n }\r\n\r\n return num.toString().padStart(2, '0');\r\n }\r\n\r\n filterByDuration(\r\n minDuration: number,\r\n maxDuration: number,\r\n results: FlightItinerary[],\r\n isReturn = false\r\n ): FlightItinerary[] {\r\n results = results.filter((result) => {\r\n let dur = 0;\r\n if (!isReturn) {\r\n result.outboundFlights.forEach((out: FlightJourney) => {\r\n dur += out.totalDuration;\r\n });\r\n }\r\n\r\n if (result.inboundFlights?.length && isReturn) {\r\n result.inboundFlights.forEach((inb: FlightJourney) => {\r\n dur += inb.totalDuration;\r\n });\r\n }\r\n\r\n return dur >= minDuration && dur <= maxDuration;\r\n });\r\n\r\n return results;\r\n }\r\n\r\n filterByDepartureTime(\r\n minDep: number,\r\n maxDep: number,\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n results = results.filter((result) => {\r\n const departureTime = Number(\r\n moment(result.outboundFlights[0].dateTimeDeparting).format('HHmm')\r\n );\r\n const newNumString1 = Number(\r\n Math.floor(Number(minDep / 100)).toString() +\r\n this.transformMin(Math.ceil(Number(minDep % 100)))\r\n );\r\n const newNumString2 = Number(\r\n Math.floor(Number(maxDep / 100)).toString() +\r\n this.transformMin(Math.ceil(Number(maxDep % 100)))\r\n );\r\n\r\n return departureTime >= newNumString1 && departureTime <= newNumString2;\r\n });\r\n\r\n return results;\r\n }\r\n\r\n filterByReturnDepartureTime(\r\n minDep: number,\r\n maxDep: number,\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n if (!minDep && !maxDep) {\r\n return results;\r\n }\r\n\r\n const newNumString1 = Number(\r\n Math.floor(Number(minDep / 100)).toString() +\r\n this.transformMin(Math.ceil(Number(minDep % 100)))\r\n );\r\n const newNumString2 = Number(\r\n Math.floor(Number(maxDep / 100)).toString() +\r\n this.transformMin(Math.ceil(Number(maxDep % 100)))\r\n );\r\n\r\n results = results.filter((result) => {\r\n if (!result.inboundFlights || !result.inboundFlights[0]) {\r\n return true;\r\n }\r\n\r\n const departureTime = Number(\r\n moment(result.inboundFlights[0].dateTimeDeparting).format('HHmm')\r\n );\r\n return departureTime >= newNumString1 && departureTime <= newNumString2;\r\n });\r\n\r\n return results;\r\n }\r\n\r\n filterByReturnArrivalTime(\r\n minArr: number,\r\n maxArr: number,\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n if (!minArr && !maxArr) {\r\n return results;\r\n }\r\n\r\n const newNumString1 = Number(\r\n Math.floor(Number(minArr / 100)).toString() +\r\n this.transformMin(Math.ceil(Number(minArr % 100)))\r\n );\r\n const newNumString2 = Number(\r\n Math.floor(Number(maxArr / 100)).toString() +\r\n this.transformMin(Math.ceil(Number(maxArr % 100)))\r\n );\r\n\r\n results = results.filter((result) => {\r\n if (!result.inboundFlights || !result.inboundFlights[0]) {\r\n return true;\r\n }\r\n\r\n const arrivalTime = Number(\r\n moment(\r\n result.inboundFlights[result.inboundFlights.length - 1]\r\n .dateTimeArriving\r\n ).format('HHmm')\r\n );\r\n const retVal =\r\n arrivalTime >= newNumString1 && arrivalTime <= newNumString2;\r\n\r\n // for debugging\r\n // if (!retVal) {\r\n // console.warn(`+++ Filtering Out: ${arrivalTime} +++`);\r\n // }\r\n\r\n return retVal;\r\n });\r\n\r\n return results;\r\n }\r\n\r\n filterByArrivalTime(\r\n minArr: number,\r\n maxArr: number,\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n const newNumString1 = Number(\r\n Math.floor(Number(minArr / 100)).toString() +\r\n this.transformMin(Math.ceil(Number(minArr % 100)))\r\n );\r\n const newNumString2 = Number(\r\n Math.floor(Number(maxArr / 100)).toString() +\r\n this.transformMin(Math.ceil(Number(maxArr % 100)))\r\n );\r\n\r\n results = results.filter((result) => {\r\n const arrivalTime = Number(\r\n moment(\r\n result.outboundFlights[result.outboundFlights.length - 1]\r\n .dateTimeArriving\r\n ).format('HHmm')\r\n );\r\n\r\n return arrivalTime >= newNumString1 && arrivalTime <= newNumString2;\r\n });\r\n\r\n return results;\r\n }\r\n\r\n filterByBaggage(\r\n baggageFilters: SelectFilter[],\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n const selected = baggageFilters.filter((x) => x.selected);\r\n\r\n if (selected?.length >= 1 && selected.length !== baggageFilters.length) {\r\n results = results.filter((result) => {\r\n try {\r\n const totalBags = this.getTotalBaggage(result);\r\n\r\n return selected.find((x) => x.value === totalBags);\r\n } catch (error) {\r\n console.error('+++ Error determening baggage: ${error} +++');\r\n return false;\r\n }\r\n });\r\n }\r\n\r\n return results;\r\n }\r\n\r\n filterByPrice(\r\n minPrice: number,\r\n maxPrice: number,\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n results = results.filter((result) => {\r\n // console.log(`+++ Price: ${result.total.price} is between: ${minPrice} and ${maxPrice}: ${result.total.price >= minPrice && result.total.price <= maxPrice} +++`)\r\n\r\n return result.total.price >= minPrice && result.total.price <= maxPrice;\r\n });\r\n\r\n return results;\r\n }\r\n\r\n /**\r\n * @description - filter the results by the number of stops\r\n * @param stopFilters - the selected stops\r\n * @param fullResults - all of our results so far\r\n */\r\n filterResultsByStops(\r\n stopFilters: SelectFilter[],\r\n fullResults: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n const selected = stopFilters.filter((x) => x.selected);\r\n\r\n if (selected?.length >= 1 && selected.length !== stopFilters.length) {\r\n fullResults = fullResults.filter((result) => {\r\n const totalStops = result.outboundFlights.length - 1;\r\n\r\n const haveStop = selected.find(\r\n (selected1: SelectFilter) => selected1.value === totalStops\r\n );\r\n\r\n return haveStop;\r\n });\r\n }\r\n\r\n return fullResults;\r\n }\r\n\r\n filterResultsByAirline(\r\n airlineFilters: SelectFilter[],\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n const selected = airlineFilters.filter((x) => x.selected);\r\n\r\n if (selected?.length >= 1 && selected.length !== airlineFilters.length) {\r\n results = results.filter((result) => {\r\n return selected.find(\r\n (x) => x.value === result.outboundFlights[0].operatingCarrier\r\n );\r\n });\r\n }\r\n\r\n return results;\r\n }\r\n\r\n filterResultsByClass(\r\n classFilters: SelectFilter[],\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n const selected = classFilters.filter((x) => x.selected);\r\n\r\n if (selected?.length >= 1 && selected.length !== classFilters.length) {\r\n results = results.filter((result) => {\r\n return selected.find(\r\n (x) => x.value === result.outboundFlights[0].cabinClass\r\n );\r\n });\r\n }\r\n\r\n return results;\r\n }\r\n\r\n filterByDepartureAirport(\r\n departureAirports: SelectFilter[],\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n const selected = departureAirports.filter((x) => x.selected);\r\n\r\n if (selected?.length >= 1 && selected.length !== departureAirports.length) {\r\n results = results.filter((result) => {\r\n return selected.find(\r\n (x) => x.value === result.outboundFlights[0].originAirport\r\n );\r\n });\r\n }\r\n\r\n return results;\r\n }\r\n\r\n filterByArrivalAirport(\r\n arrivalAirports: SelectFilter[],\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n const selected = arrivalAirports.filter((x) => x.selected);\r\n\r\n if (selected?.length >= 1 && selected.length !== arrivalAirports.length) {\r\n results = results.filter((result) => {\r\n const destinationAirport =\r\n result.outboundFlights[result.outboundFlights.length - 1]\r\n .destinationAirport;\r\n return selected.find((x) => x.value === destinationAirport);\r\n });\r\n }\r\n\r\n return results;\r\n }\r\n\r\n filterByDepartureReturnAirport(\r\n departureAirports: SelectFilter[],\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n const selected = departureAirports.filter((x) => x.selected);\r\n\r\n if (selected?.length >= 1 && selected.length !== departureAirports.length) {\r\n results = results.filter((result) => {\r\n if (!result.inboundFlights?.length) {\r\n return true;\r\n }\r\n\r\n return selected.find(\r\n (x) => x.value === result.inboundFlights[0].originAirport\r\n );\r\n });\r\n }\r\n\r\n return results;\r\n }\r\n\r\n filterByArrivalReturnAirport(\r\n arrivalAirports: SelectFilter[],\r\n results: FlightItinerary[]\r\n ): FlightItinerary[] {\r\n const selected = arrivalAirports.filter((x) => x.selected);\r\n\r\n if (selected?.length >= 1 && selected.length !== arrivalAirports.length) {\r\n results = results.filter((result) => {\r\n if (!result.inboundFlights?.length) {\r\n return true;\r\n }\r\n\r\n const destinationAirport =\r\n result.inboundFlights[result.inboundFlights.length - 1]\r\n .destinationAirport;\r\n return selected.find((x) => x.value === destinationAirport);\r\n });\r\n }\r\n\r\n return results;\r\n }\r\n\r\n createFilters(results: FlightItinerary[] = []): FlightFilters {\r\n const minPrice = this.getMinPrice(results);\r\n const maxPrice = this.getMaxPrice(results);\r\n\r\n const newFilters: FlightFilters = {\r\n stops: this.getAllStops(results),\r\n mustInclude: [],\r\n classes: this.getAllClasses(results),\r\n airlines: this.getAllAirlines(results),\r\n travelPolicy: [],\r\n depatureAirport: this.getAllDepartureAirports(results),\r\n arrivalAirport: this.getAllArrivalAirports(results),\r\n minPrice,\r\n maxPrice,\r\n depatureReturnAirport: this.getAllDepartureAirports(results, true),\r\n arrivalReturnAirport: this.getAllArrivalAirports(results, true),\r\n baggage: this.getBaggage(results),\r\n fareTypes: [],\r\n minDuration: this.getMinDuration(results),\r\n maxDuration: this.getMaxDuration(results),\r\n minReturnDuration: this.getMinDuration(results, true),\r\n maxReturnDuration: this.getMaxDuration(results, true),\r\n minDepartureTime: this.getMinDepartureTime(results),\r\n maxDepartureTime: this.getMaxDepartureTime(results),\r\n minArrivalTime: this.getMinArrivalTime(results),\r\n maxArrivalTime: this.getMaxArrivalTime(results),\r\n minReturnDepartureTime: this.getMinReturnDepartureTime(results),\r\n maxReturnDepartureTime: this.getMaxReturnDepartureTime(results),\r\n maxReturnArrivalTime: this.getMaxReturnArrivalTime(results),\r\n minReturnArrivalTime: this.getMinReturnArrivalTime(results),\r\n flightNumber: ''\r\n };\r\n\r\n return newFilters;\r\n }\r\n\r\n getMinDuration(results: FlightItinerary[], isReturn = false): number {\r\n let min = 0;\r\n\r\n results.forEach((result) => {\r\n let dur = 0;\r\n\r\n if (!isReturn) {\r\n result.outboundFlights.forEach((out: FlightJourney) => {\r\n dur += out.totalDuration;\r\n });\r\n }\r\n\r\n if (result.inboundFlights?.length && isReturn) {\r\n result.inboundFlights.forEach((inb: FlightJourney) => {\r\n dur += inb.totalDuration;\r\n });\r\n }\r\n\r\n if (!min || dur < min) {\r\n min = dur;\r\n }\r\n });\r\n\r\n return min;\r\n }\r\n\r\n getMaxDuration(results: FlightItinerary[], isReturn = false): number {\r\n let max = 0;\r\n\r\n results.forEach((result) => {\r\n let dur = 0;\r\n if (!isReturn) {\r\n result.outboundFlights.forEach((out: FlightJourney) => {\r\n dur += out.totalDuration;\r\n });\r\n }\r\n\r\n if (result.inboundFlights?.length && isReturn) {\r\n result.inboundFlights.forEach((inb: FlightJourney) => {\r\n dur += inb.totalDuration;\r\n });\r\n }\r\n\r\n if (!max || dur > max) {\r\n max = dur;\r\n }\r\n });\r\n\r\n return max;\r\n }\r\n\r\n getMinArrivalTime(results: FlightItinerary[]): number {\r\n let min: number;\r\n\r\n results.forEach((result) => {\r\n let minDepTime = Number(\r\n moment(\r\n result.outboundFlights[result.outboundFlights.length - 1]\r\n .dateTimeArriving\r\n ).format('HHmm')\r\n );\r\n minDepTime = Math.floor(minDepTime / 100) * 100;\r\n if (!min || minDepTime < min) {\r\n min = minDepTime;\r\n }\r\n });\r\n\r\n return min;\r\n }\r\n\r\n getMinReturnArrivalTime(results: FlightItinerary[]): number {\r\n let min: number;\r\n\r\n results.forEach((result) => {\r\n if (result.inboundFlights && result.inboundFlights.length) {\r\n let minDepTime = Number(\r\n moment(\r\n result.inboundFlights[result.inboundFlights.length - 1]\r\n .dateTimeArriving\r\n ).format('HHmm')\r\n );\r\n minDepTime = Math.floor(minDepTime / 100) * 100;\r\n if (!min || minDepTime < min) {\r\n min = minDepTime;\r\n }\r\n }\r\n });\r\n\r\n return min;\r\n }\r\n\r\n getMaxReturnArrivalTime(results: FlightItinerary[]): number {\r\n let max: number;\r\n\r\n results.forEach((result) => {\r\n if (result.inboundFlights && result.inboundFlights.length) {\r\n let maxDepTime = Number(\r\n moment(\r\n result.inboundFlights[result.inboundFlights.length - 1]\r\n .dateTimeArriving\r\n ).format('HHmm')\r\n );\r\n maxDepTime = Math.ceil(maxDepTime / 100) * 100;\r\n if (!max || maxDepTime > max) {\r\n max = maxDepTime;\r\n }\r\n }\r\n });\r\n\r\n return max;\r\n }\r\n\r\n getMaxArrivalTime(results: FlightItinerary[]): number {\r\n let max: number;\r\n\r\n results.forEach((result) => {\r\n let maxDepTime = Number(\r\n moment(\r\n result.outboundFlights[result.outboundFlights.length - 1]\r\n .dateTimeArriving\r\n ).format('HHmm')\r\n );\r\n\r\n maxDepTime = Math.ceil(maxDepTime / 100) * 100;\r\n if (!max || maxDepTime > max) {\r\n max = maxDepTime;\r\n }\r\n });\r\n return max;\r\n }\r\n\r\n getMinDepartureTime(results: FlightItinerary[]): number {\r\n let min: number;\r\n\r\n results.forEach((result) => {\r\n let minDepTime = Number(\r\n moment(result.outboundFlights[0].dateTimeDeparting).format('HHmm')\r\n );\r\n minDepTime = Math.floor(minDepTime / 100) * 100;\r\n if (!min || minDepTime < min) {\r\n min = minDepTime;\r\n }\r\n });\r\n\r\n return min;\r\n }\r\n\r\n getMinReturnDepartureTime(results: FlightItinerary[]): number {\r\n let min: number;\r\n\r\n results.forEach((result) => {\r\n if (result.inboundFlights && result.inboundFlights[0]) {\r\n let minDepTime = Number(\r\n moment(result.inboundFlights[0].dateTimeDeparting).format('HHmm')\r\n );\r\n minDepTime = Math.floor(minDepTime / 100) * 100;\r\n if (!min || minDepTime < min) {\r\n min = minDepTime;\r\n }\r\n }\r\n });\r\n\r\n return min;\r\n }\r\n\r\n getMaxReturnDepartureTime(results: FlightItinerary[]): number {\r\n let max: number;\r\n\r\n results.forEach((result) => {\r\n if (result.inboundFlights && result.inboundFlights[0]) {\r\n let maxDepTime = Number(\r\n moment(result.inboundFlights[0].dateTimeDeparting).format('HHmm')\r\n );\r\n\r\n maxDepTime = Math.ceil(maxDepTime / 100) * 100;\r\n\r\n if (!max || maxDepTime > max) {\r\n max = maxDepTime;\r\n }\r\n }\r\n });\r\n\r\n return max;\r\n }\r\n\r\n getMaxDepartureTime(results: FlightItinerary[]): number {\r\n let max: number;\r\n\r\n results.forEach((result) => {\r\n let maxDepTime = Number(\r\n moment(result.outboundFlights[0].dateTimeDeparting).format('HHmm')\r\n );\r\n\r\n maxDepTime = Math.ceil(maxDepTime / 100) * 100;\r\n\r\n if (!max || maxDepTime > max) {\r\n max = maxDepTime;\r\n }\r\n });\r\n\r\n return max;\r\n }\r\n\r\n getBaggage(results: FlightItinerary[]): SelectFilter[] {\r\n const baggage: any = {};\r\n\r\n results.forEach((result) => {\r\n try {\r\n const parsedAdditional = JSON.parse(result.additional);\r\n\r\n let total = 0;\r\n\r\n if (parsedAdditional && parsedAdditional.outboundFlights) {\r\n parsedAdditional.outboundFlights.forEach((flight: any) => {\r\n flight.baggage.forEach((bag: any) => {\r\n if (bag.allowance && bag.allowance > total) {\r\n total = bag.allowance;\r\n }\r\n });\r\n });\r\n } else if (parsedAdditional && parsedAdditional.baggageAllowance) {\r\n parsedAdditional.baggageAllowance.forEach((baggageAllow: any) => {\r\n if (\r\n baggageAllow.baggage.qty &&\r\n Number(baggageAllow.baggage.qty) > total\r\n ) {\r\n total = Number(baggageAllow.baggage.qty);\r\n }\r\n });\r\n }\r\n\r\n baggage[total] = {\r\n selected: false,\r\n value: total,\r\n display: `${total} bag${total !== 1 ? 's' : ''}`\r\n };\r\n } catch (error) {\r\n console.error(`+++ Error parsing additional flight data: ${error} +++`);\r\n }\r\n });\r\n\r\n return Object.values(baggage);\r\n }\r\n\r\n getMinPrice(results: FlightItinerary[]): number {\r\n let minPrice: number;\r\n\r\n results.forEach((result) => {\r\n if (!minPrice || result.total.price < minPrice) {\r\n minPrice = result.total.price;\r\n }\r\n });\r\n\r\n return minPrice;\r\n }\r\n\r\n getMaxPrice(results: FlightItinerary[]): number {\r\n let maxPrice: any;\r\n\r\n results.forEach((result) => {\r\n if (!maxPrice || result.total.price > maxPrice) {\r\n maxPrice = result.total.price;\r\n }\r\n });\r\n\r\n return maxPrice;\r\n }\r\n\r\n getAllStops(results: FlightItinerary[]): SelectFilter[] {\r\n const allStops: any = {};\r\n\r\n results.forEach((result) => {\r\n const totalStops = result.outboundFlights.length - 1; // might have to recalculate this\r\n allStops[totalStops] = {\r\n value: totalStops,\r\n display: `${totalStops} stop` + (totalStops !== 1 ? 's' : ''),\r\n selected: false\r\n };\r\n });\r\n\r\n return Object.values(allStops);\r\n }\r\n\r\n getAllClasses(results: FlightItinerary[]): SelectFilter[] {\r\n const allClasses: any = [];\r\n\r\n results.forEach((result) => {\r\n result.outboundFlights.forEach((outFlight: FlightJourney) => {\r\n allClasses[outFlight.cabinClass] = {\r\n value: outFlight.cabinClass,\r\n display: outFlight.cabinClass,\r\n selected: false\r\n } as SelectFilter;\r\n });\r\n\r\n if (result.inboundFlights) {\r\n result.inboundFlights.forEach((inFlight: FlightJourney) => {\r\n allClasses[inFlight.cabinClass] = {\r\n value: inFlight.cabinClass,\r\n display: inFlight.cabinClass,\r\n selected: false\r\n } as SelectFilter;\r\n });\r\n }\r\n });\r\n\r\n return Object.values(allClasses);\r\n }\r\n\r\n /**\r\n * @description - create select filters for all unique departure airports returned in the search\r\n * @param results - the flight results\r\n */\r\n getAllDepartureAirports(\r\n results: FlightItinerary[],\r\n inbound = false\r\n ): SelectFilter[] {\r\n const allAirports: any = {};\r\n\r\n results.forEach((result) => {\r\n if (result.outboundFlights.length && !inbound) {\r\n allAirports[result.outboundFlights[0].originAirport] = {\r\n value: result.outboundFlights[0].originAirport,\r\n display: result.outboundFlights[0].originAirportName,\r\n selected: false\r\n };\r\n }\r\n\r\n if (result.inboundFlights?.length && inbound) {\r\n allAirports[result.inboundFlights[0].originAirport] = {\r\n value: result.inboundFlights[0].originAirport,\r\n display: result.inboundFlights[0].originAirportName,\r\n selected: false\r\n };\r\n }\r\n });\r\n\r\n return Object.values(allAirports);\r\n }\r\n\r\n /**\r\n * @description - create select filters for all unique departure airports returned in the search\r\n * @param results - the flight results\r\n */\r\n getAllArrivalAirports(\r\n results: FlightItinerary[],\r\n inbound = false\r\n ): SelectFilter[] {\r\n const allAirports: any = {};\r\n\r\n results.forEach((result) => {\r\n if (result.outboundFlights.length && !inbound) {\r\n allAirports[\r\n result.outboundFlights[\r\n result.outboundFlights.length - 1\r\n ].destinationAirport\r\n ] = {\r\n value:\r\n result.outboundFlights[result.outboundFlights.length - 1]\r\n .destinationAirport,\r\n display:\r\n result.outboundFlights[result.outboundFlights.length - 1]\r\n .destinationAirportName,\r\n selected: false\r\n };\r\n }\r\n\r\n if (result.inboundFlights?.length && inbound) {\r\n allAirports[\r\n result.inboundFlights[\r\n result.inboundFlights.length - 1\r\n ].destinationAirport\r\n ] = {\r\n value:\r\n result.inboundFlights[result.inboundFlights.length - 1]\r\n .destinationAirport,\r\n display:\r\n result.inboundFlights[result.inboundFlights.length - 1]\r\n .destinationAirportName,\r\n selected: false\r\n };\r\n }\r\n });\r\n\r\n return Object.values(allAirports);\r\n }\r\n\r\n /**\r\n * @description - create select filters for all unique airlines returned in the search\r\n * @param results - the flight results\r\n */\r\n getAllAirlines(results: FlightItinerary[]): SelectFilter[] {\r\n const allAirlines: any = {};\r\n\r\n results.forEach((result: FlightItinerary) => {\r\n result.outboundFlights.forEach((outFlight: FlightJourney) => {\r\n allAirlines[outFlight.operatingCarrier] = {\r\n value: outFlight.operatingCarrier,\r\n display: outFlight.operatingCarrierName,\r\n selected: false\r\n } as SelectFilter;\r\n });\r\n\r\n if (result.inboundFlights) {\r\n result.inboundFlights.forEach((inFlight: FlightJourney) => {\r\n allAirlines[inFlight.operatingCarrier] = {\r\n value: inFlight.operatingCarrier,\r\n display: inFlight.operatingCarrierName,\r\n selected: false\r\n } as SelectFilter;\r\n });\r\n }\r\n });\r\n\r\n return Object.values(allAirlines);\r\n }\r\n\r\n async selectGroupedEurostar(\r\n selectedEurostar: EurostarItem,\r\n fare: EurostarFare,\r\n direction: FlightDirectionEnum\r\n ) {\r\n const intBasket: InternalBasketInterface =\r\n await this.basketService.getDefaultBasket();\r\n const basket = intBasket?.subject.value;\r\n\r\n if (\r\n basket &&\r\n this.originalUserSearch.chosenSearchType === EurostarSearchType.oneWay &&\r\n direction === FlightDirectionEnum.Outbound\r\n ) {\r\n this.doBooking(\r\n intBasket,\r\n selectedEurostar,\r\n {\r\n outboundFlights:\r\n [this.makeSchemaFlights(fare.fare, 'outbound', 0)],\r\n inboundFlights: [],\r\n journeyType: 'single'\r\n },\r\n selectedEurostar.dateDeparture\r\n );\r\n return;\r\n }\r\n if (\r\n basket &&\r\n this.originalUserSearch.chosenSearchType === EurostarSearchType.return &&\r\n direction === FlightDirectionEnum.Outbound\r\n ) {\r\n this.selectedGroupEurostar = selectedEurostar;\r\n this.selectedEurostarFare = fare;\r\n const index = selectedEurostar.uid;\r\n\r\n this.results.next(\r\n (this.fullResults as EurostarResults[]).map((result:EurostarResults) => {\r\n const outbound = result.outbound.filter((item:EurostarItem, groupIndex) => index === groupIndex);\r\n return { inbound: result.inbound, outbound }\r\n })\r\n );\r\n }\r\n if (\r\n basket &&\r\n this.originalUserSearch.chosenSearchType === EurostarSearchType.return &&\r\n direction === FlightDirectionEnum.Inbound &&\r\n this.selectedGroupEurostar\r\n ) {\r\n this.doBooking(\r\n intBasket,\r\n selectedEurostar,\r\n {\r\n outboundFlights: [\r\n this.makeSchemaFlights(this.selectedEurostarFare.fare, 'outbound', 0)\r\n ],\r\n inboundFlights: [\r\n this.makeSchemaFlights(fare.fare, 'inbound', 0)\r\n\r\n ],\r\n journeyType: 'roundtrip'\r\n },\r\n selectedEurostar.dateDeparture,\r\n this.selectedGroupEurostar.dateArrival\r\n );\r\n this.results.next(this.fullResults);\r\n }\r\n }\r\n updateLowestPrice(results: EurostarResults[]): ICheapestPrice {\r\n return null;\r\n // add in once filght result is updated///\r\n // const results = this.storageService.getSessionItemAsList<FlightQuoteResultArray>(this.resultsSessionName) || [] as FlightQuoteResultArray;\r\n // if(!results.length) return;\r\n // this._cheapestResultPrice.currencyCode = results[0].total.currency;\r\n // results.map(result => {\r\n // const price = result.total.price;\r\n // if( this._cheapestResultPrice.amount > price || this._cheapestResultPrice.amount === null){\r\n // this._cheapestResultPrice.amount = price;\r\n // }\r\n // })\r\n }\r\n\r\n doBooking(\r\n intBasket: InternalBasketInterface,\r\n selectedFlight: EurostarItem,\r\n schemaDetails: any,\r\n outboundDate: string,\r\n inboundDate?: string\r\n ): void {\r\n const { sourceId, co2PerItem, co2PerPassenger, total } = selectedFlight;\r\n const booking: AddItemToBasketMutationVariables = {\r\n adults: this.adults,\r\n basket: intBasket.id,\r\n children: this.children,\r\n co2PerItem,\r\n co2PerPassenger,\r\n currency: total.currency as CurrencyCode,\r\n detail: schemaDetails,\r\n price: total.price,\r\n searchQuery: this.resultQuery,\r\n service: sourceId.toString(),\r\n outboundDate\r\n };\r\n if (inboundDate) {\r\n booking.inboundDate = inboundDate;\r\n }\r\n this.basketService.addToBasket(\r\n booking,\r\n intBasket,\r\n this.searchService,\r\n this.travellers\r\n );\r\n }\r\n\r\n makeSchemaFlights(\r\n selectedFlight: FlightJourney,\r\n flightGroup: 'outbound' | 'inbound',\r\n groupIndex: number,\r\n segmentIndex?: number\r\n ): any {\r\n return {\r\n cabinClass: selectedFlight.cabinClass,\r\n dateTimeArriving: selectedFlight.dateTimeArriving,\r\n dateTimeArrivingUTC: selectedFlight.dateTimeArrivingUTC,\r\n dateTimeDeparting: selectedFlight.dateTimeDeparting,\r\n dateTimeDepartingUTC: selectedFlight.dateTimeDepartingUTC,\r\n destinationAirport: selectedFlight.destinationAirport,\r\n journeyInfo: {\r\n flightGroup,\r\n groupIndex,\r\n segmentIndex\r\n },\r\n marketingCarrier: selectedFlight.marketingCarrier,\r\n marketingFlightNumber: selectedFlight.marketingFlightNumber,\r\n operatingCarrier: selectedFlight.operatingCarrier,\r\n operatingFlightNumber: selectedFlight.operatingFlightNumber,\r\n originAirport: selectedFlight.originAirport,\r\n totalDuration: selectedFlight.totalDuration,\r\n fareType: selectedFlight.fareInfo.title\r\n };\r\n }\r\n\r\n private createGroupedItem(\r\n returnObject: EurostarGroupedQuoteResult,\r\n source: string,\r\n outboundFlights: FlightJourney[],\r\n outboundTotalDuration: number,\r\n inboundFlights: FlightJourney[],\r\n inboundTotalDuration: number\r\n ) {\r\n if (outboundFlights?.length && !returnObject.departDateTime) {\r\n const first = outboundFlights[0];\r\n const last = outboundFlights[outboundFlights.length - 1];\r\n returnObject.originAirport = first.originAirport;\r\n returnObject.originAirportName = first.originAirportName;\r\n returnObject.destinationAirport = last.destinationAirport;\r\n returnObject.destinationAirportName = last.destinationAirportName;\r\n returnObject.departDateTime = first.dateTimeDeparting;\r\n returnObject.arrivalDateTime = last.dateTimeArriving;\r\n returnObject.outboundTotalDuration = outboundTotalDuration;\r\n returnObject.dataSource = source;\r\n returnObject.operator = first.operatingCarrier;\r\n returnObject.operatorFull = first.operatingCarrierName;\r\n returnObject.outlegsCount = outboundFlights.length;\r\n returnObject.outlegs = outboundFlights;\r\n returnObject.outboundFlightNumber =\r\n this.helpers.joinFromAttribute<FlightJourney>(\r\n '-',\r\n 'operatingFlightNumber',\r\n outboundFlights\r\n );\r\n\r\n returnObject.isReturn = false;\r\n }\r\n\r\n if (inboundFlights?.length && !returnObject.inboundTotalDuration) {\r\n returnObject.inboundTotalDuration = inboundTotalDuration;\r\n returnObject.inlegsCount = inboundFlights.length;\r\n returnObject.inlegs = inboundFlights;\r\n returnObject.inboundFlightNumber =\r\n this.helpers.joinFromAttribute<FlightJourney>(\r\n '-',\r\n 'operatingFlightNumber',\r\n inboundFlights\r\n );\r\n\r\n returnObject.isReturn = true;\r\n }\r\n }\r\n\r\n protected makeSessionResults(\r\n data: EurostarQuoteResultArray\r\n ): EurostarSessionType {\r\n return {\r\n results: data,\r\n groupData: this.flightsToGroup,\r\n grouped: this.grouped,\r\n query: this.resultQuery\r\n };\r\n }\r\n\r\n getMinFlightPriceForBrand(matchingBrandFlights: FlightItinerary[]): number {\r\n let min = Number.MAX_SAFE_INTEGER;\r\n matchingBrandFlights.forEach((flight) => {\r\n if (min > flight?.total?.price) {\r\n min = flight.total.price;\r\n }\r\n });\r\n return min;\r\n }\r\n\r\n getMaxFlightPriceForBrand(matchingBrandFlights: FlightItinerary[]): number {\r\n let max = 0;\r\n matchingBrandFlights.forEach((flight) => {\r\n if (max < flight?.total?.price) {\r\n max = flight.total.price;\r\n }\r\n });\r\n return max;\r\n }\r\n\r\n isOverNight(): boolean {\r\n const outwardDay = this.outBoundDate.date();\r\n const returnDay = this.inboundDate.date();\r\n if (returnDay - outwardDay >= 1) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n minToHour = (dur: number): string => `${Math.floor(dur / 60)}h ${dur % 60}m`;\r\n\r\n async addEurostarJourneysToBasket(\r\n eurostarQuote: FlightItinerary\r\n ): Promise<boolean> {\r\n if (eurostarQuote.unavailable) {\r\n return Promise.resolve(false);\r\n }\r\n const intBasket: InternalBasketInterface =\r\n await this.basketService.getDefaultBasket();\r\n const basket = intBasket?.subject.value;\r\n if (basket) {\r\n\r\n const { sourceId, co2PerItem, co2PerPassenger, total } = eurostarQuote;\r\n const outboundDate: any = moment(eurostarQuote.outboundFlights[0].dateTimeDeparting);\r\n const inboundDate: any = eurostarQuote.inboundFlights.length ? moment(eurostarQuote.inboundFlights[0].dateTimeDeparting) : null;\r\n\r\n const schemaDetails = {\r\n outboundFlights: [\r\n ...eurostarQuote.outboundFlights.map(\r\n (flight: FlightJourney, segmentIndex: number) =>\r\n this.makeSchemaFlights(flight, 'outbound', 0, segmentIndex)\r\n )],\r\n inboundFlights: [\r\n ...eurostarQuote.inboundFlights.map(\r\n (flight: FlightJourney, segmentIndex: number) =>\r\n this.makeSchemaFlights(flight, 'inbound', 0, segmentIndex)\r\n )\r\n ],\r\n journeyType: 'single'\r\n }\r\n const booking: AddItemToBasketMutationVariables = {\r\n adults: this.adults,\r\n basket: intBasket.id,\r\n children: this.children,\r\n co2PerItem,\r\n co2PerPassenger,\r\n currency: total.currency as CurrencyCode,\r\n detail: schemaDetails,\r\n price: total.price,\r\n searchQuery: this.resultQuery,\r\n service: sourceId.toString(),\r\n outboundDate: outboundDate.format()\r\n };\r\n if (inboundDate) {\r\n booking.inboundDate = inboundDate.format();\r\n schemaDetails.journeyType = 'roundtrip';\r\n }\r\n\r\n return this.basketService.addToBasket(\r\n booking,\r\n intBasket,\r\n this.searchService,\r\n this.travellers\r\n );\r\n }\r\n return Promise.resolve(false); // TODO should this throw an error?\r\n }\r\n}\r\n","import { BehaviorSubject, Observable } from 'rxjs';\r\nimport moment from 'moment';\r\nimport { BaseEnterpriseSearch } from './base-enterprise';\r\nimport { BaseStorageService } from '../services/storage.service';\r\nimport { BaseHelperRoutines } from './helpers';\r\nimport { Traveller } from '../models/traveller.object';\r\nimport {\r\n NgbDateStruct,\r\n OBTAirportDetails,\r\n ParkingQuoteResultArray,\r\n TerminalsType,\r\n ParkingFiltersInterface,\r\n RecentSearch\r\n} from '../types/types';\r\nimport {\r\n AirportResults,\r\n BasketItem,\r\n ParkingQuote,\r\n SaveRecentSearchMutationVariables,\r\n SearchFlightsV2QueryVariables,\r\n SearchParkingQueryVariables,\r\n ServiceType\r\n} from '../types/graphql.types';\r\nimport {\r\n BaseParkingQuoteFetcher,\r\n ParkingQuoteFetcherType\r\n} from '../fetchers/parking-quote-fetcher';\r\nimport {\r\n EnterpriseBasketServiceInterface,\r\n InternalBasketInterface\r\n} from '../interfaces/Ienterprise-basket.service';\r\nimport { EnterpriseSearchServiceInterface } from '../interfaces/Isearch.service';\r\nimport {\r\n ParkingEnterpriseSearchInterface,\r\n ParkingTempParams\r\n} from '../interfaces/Iparking-enterprise-search';\r\nimport { ICheapestPrice } from '../interfaces/cheapest-price';\r\nexport const defaultValidations = {\r\n AirportFirst: `You must select airport first.`,\r\n InvardJourney: `Inward journey cannot be in the past.`,\r\n OutwardJourney: `Outward journey cannot be in the past.`,\r\n DateOverlapped: `Inward Journey can not be before outward journey`\r\n};\r\n\r\nexport class ParkingEnterpriseSearch<Q extends ParkingQuoteFetcherType>\r\n extends BaseEnterpriseSearch<\r\n ParkingTempParams,\r\n ParkingQuoteResultArray,\r\n ParkingQuoteResultArray\r\n >\r\n implements ParkingEnterpriseSearchInterface\r\n{\r\n static readonly STORAGE_SESSION_PARAMS = 'search_parking';\r\n static readonly STORAGE_SESSION_RESULTS = 'results_parking';\r\n\r\n public type: ServiceType = ServiceType.Parking;\r\n public terminals = new BehaviorSubject<TerminalsType[]>([]);\r\n\r\n public listViewToggle = new BehaviorSubject<ParkingQuote>(null);\r\n\r\n public parkingFiltersText: ParkingFiltersInterface = {\r\n onAirport: 'On Airport',\r\n meetAndGreet: 'Meet and greet',\r\n parkAndRide: 'Park and ride',\r\n parkAndStroll: 'Park and stroll',\r\n carParkedForYou: 'Car parked for you'\r\n };\r\n\r\n private _locationCode: string;\r\n\r\n get outdate(): NgbDateStruct {\r\n return this._outdate;\r\n }\r\n\r\n set outdate(value: NgbDateStruct) {\r\n this._outdate = value;\r\n if (this._outdate && this._outdate) {\r\n this.arrivalDatetime = this.helpers.ngDateToMoment(\r\n this._outdate,\r\n this._outtime\r\n );\r\n }\r\n }\r\n\r\n get outtime(): string {\r\n return this._outtime;\r\n }\r\n\r\n set outtime(value: string) {\r\n this._outtime = value;\r\n if (this._outdate && this._outtime) {\r\n this.arrivalDatetime = this.helpers.ngDateToMoment(\r\n this._outdate,\r\n this._outtime\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * The date you need the parking till\r\n */\r\n get departDatetime(): moment.Moment {\r\n return this.tempParams.departDatetime;\r\n }\r\n\r\n /**\r\n * The date you need the parking till\r\n */\r\n set departDatetime(value: moment.Moment) {\r\n this.tempParams.departDatetime = value.isValid() ? value : null;\r\n if (value && value.isValid()) {\r\n this._indate = this.helpers.momentToNgDate(value);\r\n this._intime = this.helpers.formatTimeColon(value);\r\n }\r\n this._isValid();\r\n }\r\n\r\n get indate(): NgbDateStruct {\r\n return this._indate;\r\n }\r\n\r\n set indate(value: NgbDateStruct) {\r\n this._indate = value;\r\n if (this._indate && this._intime) {\r\n this.departDatetime = this.helpers.ngDateToMoment(\r\n this._indate,\r\n this._intime\r\n );\r\n }\r\n }\r\n get intime(): string {\r\n return this._intime;\r\n }\r\n\r\n set intime(value: string) {\r\n this._intime = value;\r\n this.departDatetime = this.helpers.ngDateToMoment(\r\n this._indate,\r\n this._intime\r\n );\r\n }\r\n\r\n /**\r\n * The date you need the parking from\r\n */\r\n get arrivalDatetime(): moment.Moment {\r\n return this.tempParams?.arrivalDatetime;\r\n }\r\n\r\n /**\r\n * The date you need the parking from\r\n */\r\n set arrivalDatetime(value: moment.Moment) {\r\n this.tempParams.arrivalDatetime = value.isValid ? value : null;\r\n if (value && value.isValid()) {\r\n this._outdate = this.helpers.momentToNgDate(value);\r\n this._outtime = this.helpers.formatTimeColon(value);\r\n\r\n if (\r\n this.departDatetime &&\r\n this.departDatetime.isSameOrBefore(this.arrivalDatetime)\r\n ) {\r\n const dayAfterArrivalDateTime = this.arrivalDatetime.clone();\r\n this.departDatetime = dayAfterArrivalDateTime;\r\n }\r\n }\r\n this._isValid();\r\n }\r\n\r\n get outFlightNumber(): string {\r\n return this.tempParams?.outFlightNumber;\r\n }\r\n\r\n set outFlightNumber(value: string) {\r\n this.tempParams.outFlightNumber = value || null;\r\n this._isValid();\r\n }\r\n\r\n get recommended(): boolean | null {\r\n return !!this.tempParams?.recommended;\r\n }\r\n set recommended(value: boolean) {\r\n this.tempParams.recommended = value || null;\r\n this._isValid();\r\n }\r\n get onAirport(): boolean {\r\n return !!this.tempParams?.onAirport;\r\n }\r\n\r\n set onAirport(value: boolean) {\r\n this.tempParams.onAirport = value || null;\r\n this._isValid();\r\n }\r\n\r\n get meetAndGreet(): boolean {\r\n return !!this.tempParams?.meetAndGreet;\r\n }\r\n\r\n set meetAndGreet(value: boolean) {\r\n this.tempParams.meetAndGreet = value || null;\r\n this._isValid();\r\n }\r\n\r\n get parkAndRide(): boolean {\r\n return !!this.tempParams?.parkAndRide;\r\n }\r\n\r\n set parkAndRide(value: boolean) {\r\n this.tempParams.parkAndRide = value || null;\r\n this._isValid();\r\n }\r\n\r\n get parkAndStroll(): boolean {\r\n return !!this.tempParams?.parkAndStroll;\r\n }\r\n\r\n set parkAndStroll(value: boolean) {\r\n this.tempParams.parkAndStroll = value || null;\r\n this._isValid();\r\n }\r\n\r\n get carParkedForYou(): boolean {\r\n return !!this.tempParams?.carParkedForYou;\r\n }\r\n\r\n set carParkedForYou(value: boolean) {\r\n this.tempParams.carParkedForYou = value || null;\r\n this._isValid();\r\n }\r\n\r\n get terminal(): string {\r\n return this.tempParams.terminal\r\n ? this.tempParams.terminal.toString()\r\n : null;\r\n }\r\n\r\n set terminal(input: string) {\r\n this.tempParams.terminal = input;\r\n const found: TerminalsType = this.terminals.value.find(\r\n (terminal: TerminalsType, index: number) => {\r\n if (terminal.value === input) {\r\n return true;\r\n }\r\n }\r\n );\r\n\r\n if (found) {\r\n this.selectedTerminal = found.key;\r\n } else {\r\n if (this.terminals.value && this.terminals.value.length > 0) {\r\n this.selectedTerminal = this.terminals.value[0].key;\r\n } else {\r\n this.selectedTerminal = 'Any Terminal';\r\n }\r\n }\r\n this._isValid();\r\n }\r\n\r\n get locationCode(): string | OBTAirportDetails {\r\n return this.tempParams.locationCode;\r\n }\r\n\r\n set locationCode(value: string | OBTAirportDetails) {\r\n this.tempParams.locationCode = value;\r\n\r\n if (typeof value === 'string') {\r\n this._locationCode = null;\r\n this.terminal = null;\r\n this.terminals.next([]);\r\n this.selectedTerminal = null;\r\n this._isValid();\r\n } else if (value && value.gateway) {\r\n this._locationCode = value.gateway;\r\n this.terminal = null;\r\n this.terminals.next(value.terminals);\r\n if (value.terminals.length === 1) {\r\n this.selectedTerminal = value.terminals[0].key;\r\n }\r\n this._isValid();\r\n } else {\r\n this._locationCode = null;\r\n this.terminal = null;\r\n this.terminals.next([]);\r\n this.selectedTerminal = null;\r\n this._isValid();\r\n }\r\n }\r\n\r\n private _selectedTerminal: string = '';\r\n set selectedTerminal(value: string) {\r\n this._selectedTerminal = value;\r\n }\r\n\r\n get selectedTerminal(): string {\r\n return this._selectedTerminal;\r\n }\r\n\r\n // public variables\r\n public min_date = {\r\n year: moment().year(),\r\n month: moment().month() + 1, // ngbDate months are not 0 indexed\r\n day: moment().date()\r\n };\r\n\r\n public min_return_date = {\r\n year: moment().year(),\r\n month: moment().month() + 1, // ngbDate months are not 0 indexed\r\n day: moment().date() + 1 // min 1 night stay\r\n };\r\n\r\n private travellers: Traveller[];\r\n\r\n constructor(\r\n private parkingfetcher: BaseParkingQuoteFetcher<Q>,\r\n private helpers: BaseHelperRoutines,\r\n private basketService: EnterpriseBasketServiceInterface,\r\n storageService: BaseStorageService,\r\n private searchService: EnterpriseSearchServiceInterface\r\n ) {\r\n super(storageService);\r\n\r\n const data: {\r\n tempParams: ParkingTempParams;\r\n } = storageService.getSessionItem(\r\n ParkingEnterpriseSearch.STORAGE_SESSION_PARAMS\r\n ) || {\r\n tempParams: {} as ParkingTempParams\r\n };\r\n\r\n this.updateTempParams(searchService.makeParkingQuery(data.tempParams));\r\n\r\n const results =\r\n storageService.getSessionItemAsList<ParkingQuoteResultArray>(\r\n this.resultsSessionName\r\n ) || [];\r\n\r\n this.results.next(results);\r\n this._cheapestResultPrice = this.updateLowestPrice(results);\r\n if (searchService.shouldAddTravellerSubscription()) {\r\n searchService.travellerInformation.subscribe(\r\n (travellers: Traveller[]) => {\r\n this.travellers = travellers;\r\n this._isValid();\r\n }\r\n );\r\n }\r\n }\r\n\r\n protected resultsSessionName =\r\n ParkingEnterpriseSearch.STORAGE_SESSION_RESULTS;\r\n\r\n private _outdate: NgbDateStruct = null;\r\n\r\n private _outtime: string = null;\r\n\r\n private _indate: NgbDateStruct = null;\r\n\r\n private _intime: string = null;\r\n\r\n protected resetQuery(): void {\r\n this.updateTempParams(this.searchService.makeParkingQuery());\r\n this._isValid();\r\n }\r\n\r\n private _isValid() {\r\n if (!this.doChecks) {\r\n return;\r\n }\r\n this.storageService.setSessionItem(\r\n ParkingEnterpriseSearch.STORAGE_SESSION_PARAMS,\r\n {\r\n location: this._locationCode,\r\n travellers: this.travellers,\r\n tempParams: this.tempParams\r\n }\r\n );\r\n\r\n this.validationMessages = [];\r\n if (!this._locationCode || this._locationCode === '') {\r\n this.validationMessages.push(defaultValidations.AirportFirst);\r\n }\r\n\r\n // if (!this.query?.terminal) {\r\n // this.validationMessages.push('Terminal can not be empty.');\r\n // }\r\n\r\n if (this.tempParams?.arrivalDatetime.unix() < moment().unix()) {\r\n this.validationMessages.push(defaultValidations.InvardJourney);\r\n }\r\n\r\n if (this.tempParams?.departDatetime.unix() < moment().unix()) {\r\n this.validationMessages.push(defaultValidations.OutwardJourney);\r\n }\r\n\r\n if (\r\n this.tempParams.departDatetime?.isBefore(this.tempParams.arrivalDatetime)\r\n ) {\r\n this.validationMessages.push(defaultValidations.DateOverlapped);\r\n }\r\n this.isValid.next(this.validationMessages.length === 0);\r\n this.messages.next(this.validationMessages);\r\n }\r\n\r\n startSearch(): Promise<boolean> {\r\n this.results.next([]);\r\n if (this.isValid.value) {\r\n const query = this.getSearchQuery();\r\n this.searchService.saveRecentSearch(this.getRecentSearchQuery(query));\r\n return this._startSearch(\r\n this.parkingfetcher.fetchList(\r\n this.helpers.removeNulls<SearchParkingQueryVariables>(\r\n query\r\n )\r\n )\r\n );\r\n } else {\r\n return Promise.resolve(false);\r\n }\r\n }\r\n\r\n getRecentSearchQuery(query: SearchParkingQueryVariables): SaveRecentSearchMutationVariables {\r\n return {\r\n serviceType: ServiceType.Parking,\r\n searchArgs: query,\r\n travelDate: this.arrivalDatetime.format(),\r\n travellers: this.helpers.getTravellersId(this.travellers)\r\n };\r\n }\r\n\r\n public startRecentSearch(recentSearch: RecentSearch): void {\r\n this.arrivalDatetime= moment(recentSearch.searchArgs.arrivalDatetime);\r\n this.departDatetime = moment(recentSearch.searchArgs.departDatetime);\r\n this.outFlightNumber = recentSearch.searchArgs.outFlightNumber;\r\n this.terminal = recentSearch.searchArgs.terminal;\r\n \r\n this.searchService.getAirportByCode(recentSearch.searchArgs.locationCode).subscribe((airport: AirportResults) => {\r\n if (airport) {\r\n this.locationCode = {\r\n country: airport.iataMatch?.locationDetails?.country,\r\n countryCode: airport.iataMatch?.locationDetails?.countryCode,\r\n destination: airport.iataMatch.name,\r\n gateway: airport.iataMatch.iata,\r\n postcode: airport.iataMatch?.locationDetails?.postcode,\r\n terminals: this.searchService.processTerminals(airport.iataMatch.terminals),\r\n };\r\n this.searchService.startSearches();\r\n }\r\n })\r\n\r\n this.searchService.startSearches();\r\n }\r\n\r\n getSearchQuery(): SearchParkingQueryVariables {\r\n const query: SearchParkingQueryVariables = {\r\n arrivalDatetime: this.tempParams.arrivalDatetime,\r\n departDatetime: this.tempParams.departDatetime,\r\n locationCode: this._locationCode,\r\n outFlightNumber: this.tempParams.outFlightNumber,\r\n recommended: this.tempParams.recommended,\r\n onAirport: this.tempParams.onAirport,\r\n meetAndGreet: this.tempParams.meetAndGreet,\r\n parkAndRide: this.tempParams.parkAndRide,\r\n parkAndStroll: this.tempParams.parkAndStroll,\r\n carParkedForYou: this.tempParams.carParkedForYou,\r\n terminal: this.tempParams.terminal === 'Any' ? null : this.tempParams.terminal\r\n };\r\n return this.helpers.removeNulls<SearchParkingQueryVariables>(query);\r\n }\r\n\r\n sortByPrice(asc?: boolean) {\r\n let results = this.helpers.clone(this.results.value) || [];\r\n if (asc) {\r\n results = results.sort(\r\n (a: ParkingQuote, b: ParkingQuote) => b.price - a.price\r\n );\r\n } else {\r\n results = results.sort(\r\n (a: ParkingQuote, b: ParkingQuote) => a.price - b.price\r\n );\r\n }\r\n this.results.next(results);\r\n }\r\n\r\n updateFromPreviousSearches(\r\n previousItems: Record<ServiceType, BasketItem>\r\n ): void {\r\n const flightItem: SearchFlightsV2QueryVariables =\r\n previousItems[ServiceType.Flight]?.searchQuery;\r\n if (flightItem) {\r\n // TODO flights haven't been done yet.\r\n }\r\n }\r\n\r\n async addParkingToBasket(\r\n parkingQuote: ParkingQuote,\r\n parkingQuery: SearchParkingQueryVariables\r\n ): Promise<boolean> {\r\n const intBasket: InternalBasketInterface =\r\n await this.basketService.getDefaultBasket();\r\n const basket = intBasket?.subject.value;\r\n if (basket) {\r\n return this.basketService.addToBasket(\r\n {\r\n adults: 1,\r\n basket: basket.id,\r\n service: parkingQuote.sourceId.toString(),\r\n detail: {\r\n arrivalDatetime: parkingQuery.arrivalDatetime.format(),\r\n departDatetime: parkingQuery.departDatetime.format(),\r\n locationCode: parkingQuote.carPark.code,\r\n name: parkingQuote.carPark.name,\r\n requiredInfo: parkingQuote.requiredInfo,\r\n airportIata: parkingQuery.locationCode\r\n },\r\n price: parkingQuote.price,\r\n currency: parkingQuote.currency,\r\n searchQuery: parkingQuery,\r\n outboundDate: parkingQuery.arrivalDatetime.format(),\r\n inboundDate: parkingQuery.departDatetime.format()\r\n },\r\n intBasket,\r\n this.searchService,\r\n this.travellers\r\n );\r\n }\r\n return Promise.resolve(false);\r\n }\r\n\r\n updateLowestPrice(results: ParkingQuote[]): ICheapestPrice {\r\n if (!results.length) return null;\r\n const currency = results[0].currency;\r\n return results.reduce(\r\n (cheapestPrice: ICheapestPrice, result: ParkingQuote) => {\r\n const price = result.price;\r\n if (cheapestPrice.amount > price) cheapestPrice.amount = price;\r\n return cheapestPrice;\r\n },\r\n { amount: Number.MAX_SAFE_INTEGER, currencyCode: currency }\r\n );\r\n }\r\n}\r\n","import moment from 'moment';\r\nimport { of, Observable, BehaviorSubject, combineLatest } from 'rxjs';\r\nimport { map, take, tap } from 'rxjs/operators';\r\nimport { BaseEnterpriseSearch } from './base-enterprise';\r\nimport { BaseStorageService } from '../services/storage.service';\r\nimport { BaseHelperRoutines } from './helpers';\r\nimport { RailTicketGroups } from '../interfaces/rail-ticket-groups.interface';\r\nimport {\r\n RailResultIndifiers,\r\n RailTicketGroup,\r\n TicketGroups\r\n} from '../interfaces/rail-ticket-group.interface';\r\nimport { RailDirection } from './rail-direction.enum';\r\nimport { ValueDisplay } from '../interfaces/value-display';\r\nimport {\r\n NgbDateStruct,\r\n RailQuoteResultArray,\r\n RecentSearch,\r\n RecursivePartial\r\n} from '../types/types';\r\nimport {\r\n BasketItem,\r\n CurrencyCode,\r\n RailAccount,\r\n RailClass,\r\n RailJourneyOption,\r\n RailJourneyOptions,\r\n RailJourneyType,\r\n RailProvider,\r\n RailSegment,\r\n RailStation,\r\n RailTicketOption,\r\n RailTicketQueue,\r\n ReferenceRailCardQualifier,\r\n SaveRecentSearchMutationVariables,\r\n SearchRailQueryVariables,\r\n ServiceType,\r\n RailTicketExtra\r\n} from '../types/graphql.types';\r\nimport {\r\n BaseRailQuoteFetcher,\r\n RailQuoteFetcherType\r\n} from '../fetchers/rail-quote-fetcher';\r\nimport {\r\n BaseGetRailStationFetcher,\r\n GetRailStationFetcherType\r\n} from '../fetchers/get-rail-station.fetcher';\r\nimport {\r\n EnterpriseBasketServiceInterface,\r\n InternalBasketInterface\r\n} from '../interfaces/Ienterprise-basket.service';\r\nimport { EnterpriseSearchServiceInterface } from '../interfaces/Isearch.service';\r\nimport {\r\n RailEnterpriseSearchInterface,\r\n RailTempParams\r\n} from '../interfaces/Irail-enterprise-search';\r\nimport { Traveller } from '../models/traveller.object';\r\nimport { ICheapestPrice } from '../interfaces/cheapest-price';\r\nimport { IRailAirportExpressStations } from '../interfaces/rail-airport-express-stations.interface';\r\nimport { RailBasketItem, TicketExtras } from '../interfaces/rail-basket-item.interface';\r\nimport { RailRecentSearchArgs } from '../interfaces/rail-recent-search-args.interface';\r\n\r\nexport enum RailSearchCriteria {\r\n Depart = 'Depart After',\r\n Arrive = 'Arrive Before'\r\n}\r\n\r\nexport enum RailTicketOptionType { // may need to be expanded for dual/split\r\n Return = 'Return',\r\n Single = 'Single'\r\n}\r\n\r\nexport class RailEnterpriseSearch<\r\n Q extends RailQuoteFetcherType,\r\n GRS_Q extends GetRailStationFetcherType\r\n >\r\n extends BaseEnterpriseSearch<\r\n RailTempParams,\r\n RailQuoteResultArray,\r\n RailQuoteResultArray\r\n >\r\n implements RailEnterpriseSearchInterface\r\n{\r\n static readonly STORAGE_SESSION_PARAMS = 'search_rail';\r\n static readonly STORAGE_SESSION_RESULTS = 'rail_results';\r\n static readonly PASSING_POINT = 'Passing';\r\n private travellers: Traveller[];\r\n\r\n protected resultsSessionName = RailEnterpriseSearch.STORAGE_SESSION_RESULTS;\r\n\r\n public searchTypes = [\r\n { display: 'Return', value: RailJourneyType.ReturnJourney },\r\n { display: 'One-Way', value: RailJourneyType.SingleJourney }\r\n // { display: 'Open Return', value: RailJourneyType.OpenReturnJourney },\r\n // { display: 'Dual Singles', value: RailJourneyType.DualSingleJourney },\r\n ];\r\n\r\n public classTypes = [\r\n { display: 'Any', value: RailClass.All },\r\n { display: 'Standard', value: RailClass.Standard },\r\n { display: 'First', value: RailClass.First }\r\n ];\r\n\r\n public airportExpressStations: IRailAirportExpressStations[] = [\r\n { code: 'HP1-3', name: 'Heathrow T1-3 - Paddington' },\r\n { code: 'HP4', name: 'Heathrow T4 - Paddington' },\r\n { code: 'HP5', name: 'Heathrow T5 - Paddington' },\r\n { code: 'PH1-3', name: 'Paddington - Heathrow T1-3' },\r\n { code: 'PH4', name: 'Paddington - Heathrow T4' },\r\n { code: 'PH5', name: 'Paddington - Heathrow T5' },\r\n { code: 'GV', name: 'Gatwick - Victoria' },\r\n { code: 'VG', name: 'Victoria - Gatwick' },\r\n { code: 'SL', name: 'Stansted - Liverpool Street' },\r\n { code: 'LS', name: 'Liverpool Street - Stansted' }\r\n ];\r\n\r\n public airportExpressStationsCodes: {\r\n [key: string]: { dep: string; arr: string };\r\n } = {\r\n 'HP1-3': { dep: 'HXX', arr: 'PAD' },\r\n 'PH1-3': { dep: 'PAD', arr: 'HXX' },\r\n HP4: { dep: 'HAF', arr: 'PAD' },\r\n PH4: { dep: 'PAD', arr: 'HAF' },\r\n HP5: { dep: 'HWV', arr: 'PAD' },\r\n PH5: { dep: 'PAD', arr: 'HWV' },\r\n GV: { dep: 'GTW', arr: 'VIC' },\r\n VG: { dep: 'VIC', arr: 'GTW' },\r\n SL: { dep: 'SSD', arr: 'LST' },\r\n LS: { dep: 'LST', arr: 'SSD' }\r\n };\r\n\r\n public railCriteria = [RailSearchCriteria.Depart, RailSearchCriteria.Arrive];\r\n\r\n public travelCards = [\r\n { display: 'Young persons railcard', value: 'YNG' },\r\n { display: 'Disability railcard', value: 'DIS' },\r\n { display: 'Family railcard', value: 'FAM' },\r\n { display: 'Forces railcard', value: 'HMF' },\r\n { display: 'Travel agency discount', value: 'TAD' }\r\n ];\r\n\r\n // YNG: \"Young persons railcard\",\r\n // DIS: \"Disability railcard\",\r\n // FAM: \"Family railcard\",\r\n // HMF: \"Forces railcard\",\r\n // TAD: \"Travel agency discount\"\r\n public removePassingPointsFromResults = true;\r\n public type: ServiceType = ServiceType.Rail;\r\n public minOutboundDate: NgbDateStruct = {\r\n year: moment().year(),\r\n month: moment().month() + 1,\r\n day: moment().date()\r\n };\r\n public minInboundDate: NgbDateStruct = {\r\n year: moment().year(),\r\n month: moment().month() + 1,\r\n day: moment().date()\r\n };\r\n public maxDate: NgbDateStruct = {\r\n // ENT-1557 - max Evolvi search date is 6 months in future\r\n year: moment().add('month', 6).year(),\r\n month: moment().add('month', 6).month(),\r\n day: moment().add('month', 6).date()\r\n };\r\n private _timeArray: ValueDisplay[];\r\n private _canCombine: any;\r\n private _chosenOutboundTicket: RecursivePartial<RailTicketOption>;\r\n private _chosenInboundTicket: RecursivePartial<RailTicketOption>;\r\n private _chosenOutboundJourney: RecursivePartial<RailJourneyOption>;\r\n private _chosenInboundJourney: RecursivePartial<RailJourneyOption>;\r\n private _chosenTicketGroup: RailTicketGroup;\r\n private _viaLocation: string;\r\n private _travellingFrom: string;\r\n private _travellingTo: string;\r\n protected _originalUserSearch: RailTempParams;\r\n\r\n get chosenTicketGroup(): RailTicketGroup {\r\n return this._chosenTicketGroup;\r\n }\r\n\r\n get chosenTotalPrice(): number {\r\n if (this._chosenOutboundTicket) {\r\n if (this._chosenInboundTicket) {\r\n // now check if they are returns or dual\r\n if (\r\n this._chosenOutboundTicket.singleOrReturn ===\r\n RailTicketOptionType.Return &&\r\n this._chosenInboundTicket.singleOrReturn ===\r\n RailTicketOptionType.Return\r\n ) {\r\n // they should both have the same price\r\n return this._chosenOutboundTicket.price;\r\n }\r\n return (\r\n this._chosenOutboundTicket.price + this._chosenInboundTicket.price\r\n );\r\n }\r\n\r\n return this._chosenOutboundTicket.price;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n get chosenTickets(): any {\r\n return {\r\n Outbound: this._chosenOutboundTicket,\r\n Inbound: this._chosenInboundTicket\r\n };\r\n }\r\n\r\n get chosenOutboundJourney(): RecursivePartial<RailJourneyOption> {\r\n return this._chosenOutboundJourney;\r\n }\r\n\r\n get chosenInboundJourney(): RecursivePartial<RailJourneyOption> {\r\n return this._chosenInboundJourney;\r\n }\r\n\r\n get openReturn(): boolean {\r\n return this.tempParams.openReturn;\r\n }\r\n\r\n set openReturn(newVal: boolean) {\r\n this.tempParams.openReturn = newVal;\r\n\r\n if (newVal) {\r\n this.tempParams.chosenSearchType = RailJourneyType.OpenReturnJourney;\r\n }\r\n this._isValid();\r\n }\r\n\r\n get chosenSearchType(): RailJourneyType {\r\n return this.tempParams.chosenSearchType;\r\n }\r\n\r\n set chosenSearchType(newType: RailJourneyType) {\r\n this.tempParams.chosenSearchType = newType;\r\n if (newType === RailJourneyType.SingleJourney) {\r\n this.openReturn = false;\r\n }\r\n this._isValid();\r\n }\r\n\r\n get noOfAdults(): number {\r\n return this.tempParams.noOfAdults;\r\n }\r\n\r\n set noOfAdults(adults: number) {\r\n this.tempParams.noOfAdults = adults;\r\n this._isValid();\r\n }\r\n\r\n get noOfChildren(): number {\r\n return this.tempParams.noOfChildren;\r\n }\r\n\r\n set noOfChildren(children: number) {\r\n this.tempParams.noOfChildren = children;\r\n this._isValid();\r\n }\r\n\r\n get travellingTo(): any {\r\n return this.tempParams.travellingTo;\r\n }\r\n\r\n set travellingTo(tt: any) {\r\n this.tempParams.travellingTo = tt;\r\n\r\n this._travellingTo = '';\r\n if (tt?.railstation?.id) {\r\n this._travellingTo = tt.railstation.id;\r\n }\r\n\r\n this._isValid();\r\n }\r\n\r\n get travellingFrom(): any {\r\n return this.tempParams.travellingFrom;\r\n }\r\n\r\n set travellingFrom(tt: any) {\r\n this.tempParams.travellingFrom = tt;\r\n this._travellingFrom = '';\r\n if (tt?.railstation?.id) {\r\n this._travellingFrom = tt.railstation.id;\r\n }\r\n\r\n this._isValid();\r\n }\r\n\r\n get chosenRailClass(): RailClass {\r\n return this.tempParams.chosenSearchClass;\r\n }\r\n\r\n set chosenRailClass(newClass: RailClass) {\r\n this.tempParams.chosenSearchClass = newClass;\r\n }\r\n\r\n get chosenSearchClass(): RailClass {\r\n return this.tempParams.chosenSearchClass;\r\n }\r\n\r\n set chosenSearchClass(classR: RailClass) {\r\n this.tempParams.chosenSearchClass = classR;\r\n this._isValid();\r\n }\r\n\r\n get extraTime(): boolean {\r\n return this.tempParams.extraTime;\r\n }\r\n\r\n set extraTime(extra: boolean) {\r\n this.tempParams.extraTime = extra;\r\n this._isValid();\r\n }\r\n\r\n get via(): boolean {\r\n return this.tempParams.via;\r\n }\r\n\r\n set via(via: boolean) {\r\n this.tempParams.via = via;\r\n this._isValid();\r\n }\r\n\r\n get viaLocation(): any {\r\n return this.tempParams.viaLocation;\r\n }\r\n\r\n set viaLocation(viaLocation: any) {\r\n this.tempParams.viaLocation = viaLocation;\r\n\r\n this._viaLocation = '';\r\n if (viaLocation?.railstation?.id) {\r\n this._viaLocation = viaLocation.railstation.id;\r\n }\r\n\r\n this._isValid();\r\n }\r\n\r\n get outBoundDateTime(): moment.Moment {\r\n return this.tempParams.outBoundDateTime;\r\n }\r\n\r\n set outBoundDateTime(newDateTime: moment.Moment) {\r\n this.tempParams.outBoundDateTime = newDateTime;\r\n if (newDateTime && newDateTime.isValid()) {\r\n this._outbound_date = this.helpers.momentToNgDate(newDateTime);\r\n this._outbound_time = moment(newDateTime).format('HHmm')\r\n ? moment(newDateTime).format('HHmm')\r\n : '0700';\r\n }\r\n\r\n this.minInboundDate = {\r\n year: newDateTime.year(),\r\n month: newDateTime.month() + 1,\r\n day: newDateTime.date()\r\n };\r\n\r\n if (\r\n this.outBoundDateTime &&\r\n this.inBoundDateTime &&\r\n this.outBoundDateTime.isAfter(this.inBoundDateTime)\r\n ) {\r\n this.inBoundDateTime = this.inBoundDateTime\r\n .set('date', newDateTime.date())\r\n .set('month', newDateTime.month())\r\n .set('year', newDateTime.year());\r\n }\r\n\r\n this._isValid();\r\n }\r\n\r\n get outboundCriteria(): RailSearchCriteria {\r\n return this.tempParams.outboundCriteria;\r\n }\r\n\r\n set outboundCriteria(newCrit: RailSearchCriteria) {\r\n // console.warn(`+++ Setting New Criteria: ${newCrit} +++`);\r\n this.tempParams.outboundCriteria = newCrit;\r\n\r\n this._isValid();\r\n }\r\n\r\n get inBoundDateTime(): moment.Moment {\r\n return this.tempParams.inBoundDateTime;\r\n }\r\n\r\n set inBoundDateTime(newDateTime: moment.Moment) {\r\n this.tempParams.inBoundDateTime = newDateTime;\r\n if (newDateTime && newDateTime.isValid()) {\r\n this._return_date = this.helpers.momentToNgDate(newDateTime);\r\n this._return_time = moment(newDateTime).format('HHmm')\r\n ? moment(newDateTime).format('HHmm')\r\n : '1600';\r\n }\r\n this._isValid();\r\n }\r\n\r\n // !date and time is handled differently for LU\r\n private _outbound_date: NgbDateStruct = null;\r\n\r\n get outbound_date(): NgbDateStruct {\r\n return this._outbound_date;\r\n }\r\n\r\n set outbound_date(value: NgbDateStruct) {\r\n this._outbound_date = value;\r\n this._updateOutboundDateTime();\r\n }\r\n\r\n private _outbound_time: string = null;\r\n get outbound_time(): string {\r\n return this._outbound_time;\r\n }\r\n\r\n set outbound_time(value: string) {\r\n this._outbound_time = value;\r\n this._updateOutboundDateTime();\r\n }\r\n\r\n private _return_date: NgbDateStruct = null;\r\n\r\n get return_date(): NgbDateStruct {\r\n return this._return_date;\r\n }\r\n\r\n set return_date(value: NgbDateStruct) {\r\n this._return_date = value;\r\n this._updateReturnDateTime();\r\n }\r\n\r\n private _return_time: string = null;\r\n get return_time(): string {\r\n return this._return_time;\r\n }\r\n\r\n set return_time(value: string) {\r\n this._return_time = value;\r\n this._updateReturnDateTime();\r\n }\r\n\r\n get returnCriteria(): RailSearchCriteria {\r\n return this.tempParams.returnCriteria;\r\n }\r\n\r\n set returnCriteria(newCrit: RailSearchCriteria) {\r\n this.tempParams.returnCriteria = newCrit;\r\n this._isValid();\r\n }\r\n\r\n get carnetTicket(): boolean {\r\n return this.tempParams.carnetTicket;\r\n }\r\n\r\n set carnetTicket(newCarnet: boolean) {\r\n this.tempParams.carnetTicket = newCarnet;\r\n this._isValid();\r\n }\r\n\r\n get disableAutoDiscounts(): boolean {\r\n return this.tempParams.disableAutoDiscounts;\r\n }\r\n\r\n set disableAutoDiscounts(newDis: boolean) {\r\n this.tempParams.disableAutoDiscounts = newDis;\r\n this._isValid();\r\n }\r\n\r\n get prioritiseByPrice(): boolean {\r\n return this.tempParams.prioritiseByPrice;\r\n }\r\n\r\n set prioritiseByPrice(newPriority: boolean) {\r\n this.tempParams.prioritiseByPrice = newPriority;\r\n this._isValid();\r\n }\r\n\r\n get applyRailcards(): boolean {\r\n return this.tempParams.applyRailcards;\r\n }\r\n\r\n set applyRailcards(apCards: boolean) {\r\n this.tempParams.applyRailcards = apCards;\r\n }\r\n\r\n get railCards(): ReferenceRailCardQualifier[] {\r\n return this.tempParams.railCards;\r\n }\r\n\r\n set railCards(value: ReferenceRailCardQualifier[]) {\r\n this.tempParams.railCards = value;\r\n }\r\n\r\n public get timeArray(): ValueDisplay[] {\r\n this._timeArray =\r\n this._timeArray ||\r\n Array(48)\r\n .fill(0)\r\n .map((_, index: number) => {\r\n return {\r\n value:\r\n Math.floor(index / 2)\r\n .toString()\r\n .padStart(2, '0') +\r\n ((index % 2) * 30).toString().padStart(2, '0'),\r\n display:\r\n Math.floor(index / 2)\r\n .toString()\r\n .padStart(2, '0') +\r\n ':' +\r\n ((index % 2) * 30).toString().padStart(2, '0')\r\n };\r\n });\r\n return this._timeArray;\r\n }\r\n\r\n getAirportExpressStations(): { code: string; name: string }[] {\r\n return this.airportExpressStations;\r\n }\r\n\r\n get airportExpressStation(): string {\r\n return this.tempParams.airportExpressStation;\r\n }\r\n\r\n set airportExpressStation(station: string) {\r\n this.tempParams.airportExpressStation = station;\r\n this._setAirportExpressStations();\r\n this._isValid();\r\n }\r\n\r\n get isAirportExpress(): boolean {\r\n return this.tempParams.isAirportExpress;\r\n }\r\n\r\n set isAirportExpress(value: boolean) {\r\n this.tempParams.isAirportExpress = value;\r\n this.tempParams.openReturn = value;\r\n this.tempParams.chosenSearchType = value\r\n ? RailJourneyType.OpenReturnJourney\r\n : RailJourneyType.ReturnJourney;\r\n this._isValid();\r\n }\r\n\r\n setAirportExpressStationIds(stationIds: {\r\n departureLocationId: string;\r\n arrivalLocationId: string;\r\n }): void {\r\n const { departureLocationId, arrivalLocationId } = stationIds;\r\n if (departureLocationId && arrivalLocationId) {\r\n this._travellingFrom = departureLocationId;\r\n this._travellingTo = arrivalLocationId;\r\n this._isValid();\r\n }\r\n }\r\n\r\n private _cheapestStandard: RailTicketOption = null;\r\n get cheapestStandard(): RailTicketOption {\r\n return this._cheapestStandard;\r\n }\r\n private _cheapestFirst: RailTicketOption = null;\r\n get cheapestFirst(): RailTicketOption {\r\n return this._cheapestFirst;\r\n }\r\n\r\n constructor(\r\n private Railfetcher: BaseRailQuoteFetcher<Q>,\r\n private getRailStationFetcher: BaseGetRailStationFetcher<GRS_Q>,\r\n private helpers: BaseHelperRoutines,\r\n private basketService: EnterpriseBasketServiceInterface,\r\n storageService: BaseStorageService,\r\n private searchService: EnterpriseSearchServiceInterface\r\n ) {\r\n super(storageService);\r\n\r\n const data: {\r\n query: {};\r\n tempParams: RailTempParams;\r\n originalUserSearch: RailTempParams;\r\n } = storageService.getSessionItem(\r\n RailEnterpriseSearch.STORAGE_SESSION_PARAMS\r\n ) || {\r\n query: {},\r\n tempParams: {} as RailTempParams,\r\n originalUserSearch: {} as RailTempParams\r\n };\r\n\r\n this.updateTempParams(this.searchService.makeRailQuery(data.tempParams));\r\n this._originalUserSearch = data.originalUserSearch;\r\n\r\n if (this._originalUserSearch && this._originalUserSearch.chosenSearchType) {\r\n this.chosenSearchType = this._originalUserSearch.chosenSearchType;\r\n }\r\n\r\n if (searchService.shouldAddTravellerSubscription()) {\r\n searchService.travellerInformation.subscribe(\r\n (travellers: Traveller[]) => {\r\n this.travellers = travellers;\r\n const splitTravellers = this.helpers.selectedTravellers(\r\n travellers,\r\n ServiceType.Rail\r\n );\r\n this.tempParams.noOfAdults = splitTravellers.adults.length;\r\n this.tempParams.noOfChildren = splitTravellers.children.length;\r\n this.travellers = travellers;\r\n this._isValid();\r\n }\r\n );\r\n }\r\n this._isValid();\r\n const results =\r\n storageService.getSessionItemAsList<RailQuoteResultArray>(\r\n this.resultsSessionName\r\n ) || [];\r\n // if (results == null && this.isValid) {\r\n // searchService.startSearches();\r\n // }\r\n this._cheapestResultPrice = this.updateLowestPrice(results);\r\n this.results.next(results || []);\r\n }\r\n\r\n protected resetQuery(): void {\r\n this.updateTempParams(this.searchService.makeRailQuery());\r\n this._isValid();\r\n }\r\n\r\n private _setAirportExpressStations() {\r\n const parsedStation =\r\n this.airportExpressStationsCodes[this.airportExpressStation];\r\n console.log('--- Parsed Station is :', parsedStation);\r\n if (parsedStation) {\r\n this._travellingFrom = parsedStation.dep;\r\n this._travellingTo = parsedStation.arr;\r\n }\r\n }\r\n\r\n private _isValid() {\r\n this.storageService.setSessionItem(\r\n RailEnterpriseSearch.STORAGE_SESSION_PARAMS,\r\n {\r\n tempParams: this.tempParams,\r\n originalUserSearch: this.originalUserSearch\r\n }\r\n );\r\n\r\n this.validationMessages = [];\r\n\r\n const now = moment();\r\n\r\n if (!this._travellingFrom) {\r\n this.validationMessages.push('Please Enter a From Location.');\r\n }\r\n\r\n if (!this._travellingTo) {\r\n this.validationMessages.push('Please Enter a To Location.');\r\n }\r\n\r\n if (this.outBoundDateTime?.isBefore(now)) {\r\n this.validationMessages.push(\r\n 'Departure Date/Time cannot be in the past.'\r\n );\r\n }\r\n\r\n if (\r\n this.chosenSearchType === RailJourneyType.ReturnJourney ||\r\n this.chosenSearchType === RailJourneyType.DualSingleJourney\r\n ) {\r\n // check for return specific validations in here\r\n\r\n if (this.inBoundDateTime?.isSameOrBefore(this.outBoundDateTime)) {\r\n this.validationMessages.push(\r\n 'Return Date/Time must be after Departure Date/Time'\r\n );\r\n }\r\n }\r\n\r\n if (this.via) {\r\n if (!this.tempParams.viaLocation) {\r\n this.validationMessages.push('Please enter a via location.');\r\n }\r\n }\r\n\r\n if (this.tempParams.noOfAdults + this.tempParams.noOfChildren < 1) {\r\n this.validationMessages.push('There must be at least 1 traveller');\r\n }\r\n\r\n this.isValid.next(this.validationMessages.length === 0);\r\n this.messages.next(this.validationMessages);\r\n }\r\n\r\n startSearch(): Promise<boolean> {\r\n this.results.next([]);\r\n\r\n if (this.isValid.value) {\r\n this._originalUserSearch = Object.freeze({ ...this.tempParams });\r\n this.storageService.setSessionItem(\r\n RailEnterpriseSearch.STORAGE_SESSION_PARAMS,\r\n {\r\n tempParams: this.tempParams,\r\n originalUserSearch: this.originalUserSearch\r\n }\r\n );\r\n const query = this.getSearchQuery();\r\n this.searchService.saveRecentSearch(this.getRecentSearchQuery(query));\r\n return this._startSearch(\r\n this.Railfetcher.fetchList(query).pipe(\r\n map((result) => {\r\n if (this.removePassingPointsFromResults) {\r\n result = this._removeCallingPoints(result);\r\n }\r\n\r\n return result;\r\n })\r\n )\r\n );\r\n } else {\r\n return Promise.resolve(false);\r\n }\r\n }\r\n\r\n getRecentSearchQuery(\r\n query: SearchRailQueryVariables\r\n ): SaveRecentSearchMutationVariables {\r\n const recentSearchQuery: RailRecentSearchArgs = query;\r\n \r\n if (this.isAirportExpress) {\r\n recentSearchQuery.isAirportExpress = this.isAirportExpress;\r\n }\r\n\r\n if (this.airportExpressStation) {\r\n recentSearchQuery.airportExpressStation = this.airportExpressStation;\r\n }\r\n\r\n return {\r\n serviceType: ServiceType.Rail,\r\n searchArgs: recentSearchQuery,\r\n travelDate: this.outBoundDateTime.format(),\r\n travellers: this.helpers.getTravellersId(this.travellers)\r\n };\r\n }\r\n\r\n public startRecentSearch(recentSearch: RecentSearch): void {\r\n this.chosenSearchType = recentSearch.searchArgs.journeyType;\r\n this.chosenSearchClass = recentSearch.searchArgs.class;\r\n this.extraTime = recentSearch.searchArgs.extraTimeToChange;\r\n this.isAirportExpress = recentSearch.searchArgs.isAirportExpress;\r\n this.airportExpressStation = recentSearch.searchArgs.airportExpressStation;\r\n\r\n // get outBoundDateTime, inBoundDateTime and outboundCriteria ,returnCriteria\r\n this.outBoundDateTime = recentSearch.searchArgs.outboundDepartureDateTime\r\n ? moment(recentSearch.searchArgs.outboundDepartureDateTime)\r\n : moment(recentSearch.searchArgs.outboundArrivalDateTime);\r\n this.outboundCriteria = this.getCriteria(\r\n recentSearch.searchArgs.outboundDepartureDateTime,\r\n recentSearch.searchArgs.outboundArrivalDateTime\r\n );\r\n\r\n if (recentSearch.searchArgs.journeyType === RailJourneyType.ReturnJourney) {\r\n this.inBoundDateTime = recentSearch.searchArgs.returnDepartureDateTime\r\n ? moment(recentSearch.searchArgs.returnDepartureDateTime)\r\n : moment(recentSearch.searchArgs.returnArrivalDateTime);\r\n\r\n this.returnCriteria = this.getCriteria(\r\n recentSearch.searchArgs.returnDepartureDateTime,\r\n recentSearch.searchArgs.returnArrivalDateTime\r\n );\r\n }\r\n\r\n if (\r\n recentSearch.searchArgs.journeyType === RailJourneyType.OpenReturnJourney\r\n ) {\r\n this.openReturn = true;\r\n }\r\n\r\n this.applyRailcards = recentSearch.searchArgs?.railCardQualifiers?.length\r\n ? true\r\n : false;\r\n if (this.applyRailcards) {\r\n this.railCards = recentSearch.searchArgs.railCardQualifiers;\r\n }\r\n\r\n // get from, to, via\r\n combineLatest([\r\n this.getRailStationById(recentSearch.searchArgs.departureLocationId),\r\n this.getRailStationById(recentSearch.searchArgs.arrivalLocationId)\r\n ]).subscribe(([departureStation, arrivalStation]) => {\r\n if (departureStation && arrivalStation) {\r\n this.travellingTo = {\r\n name: arrivalStation.name,\r\n railstation: {\r\n id: arrivalStation.id,\r\n name: arrivalStation.name,\r\n nlcCode: arrivalStation.nlcCode,\r\n stationCode: arrivalStation.stationCode,\r\n trainlineCode: arrivalStation.trainlineCode,\r\n trainlineUniqueCode: arrivalStation.trainlineUniqueCode\r\n }\r\n };\r\n\r\n this.travellingFrom = {\r\n name: departureStation.name,\r\n railstation: {\r\n id: departureStation.id,\r\n name: departureStation.name,\r\n nlcCode: departureStation.nlcCode,\r\n stationCode: departureStation.stationCode,\r\n trainlineCode: departureStation.trainlineCode,\r\n trainlineUniqueCode: departureStation.trainlineUniqueCode\r\n }\r\n };\r\n\r\n if (recentSearch.searchArgs.viaLocationId) {\r\n this.via = true;\r\n this.getRailStationById(\r\n recentSearch.searchArgs.viaLocationId\r\n ).subscribe((viaLocation) => {\r\n this.viaLocation = {\r\n name: viaLocation.name,\r\n railstation: {\r\n id: viaLocation.id,\r\n name: viaLocation.name,\r\n nlcCode: viaLocation.nlcCode,\r\n stationCode: viaLocation.stationCode,\r\n trainlineCode: viaLocation.trainlineCode,\r\n trainlineUniqueCode: viaLocation.trainlineUniqueCode\r\n }\r\n };\r\n this.searchService.startSearches();\r\n });\r\n }\r\n\r\n this.searchService.startSearches();\r\n }\r\n });\r\n }\r\n\r\n private _removeCallingPoints(\r\n journeys: RailJourneyOptions[]\r\n ): RailJourneyOptions[] {\r\n journeys[0].outbound = journeys[0].outbound.map((outbound) => {\r\n outbound.segments.map((segment) => {\r\n segment.callingPoints = segment.callingPoints.filter(\r\n (callingPoint) =>\r\n callingPoint.stoppingPattern !== RailEnterpriseSearch.PASSING_POINT\r\n );\r\n return segment;\r\n });\r\n return outbound;\r\n });\r\n\r\n return journeys;\r\n }\r\n\r\n private _updateOutboundDateTime(): void {\r\n if (this._outbound_date && this._outbound_time) {\r\n const time = this.helpers.ngDateToMoment(\r\n this._outbound_date,\r\n this._outbound_time\r\n );\r\n this.outBoundDateTime = time.isValid() ? time : null;\r\n this._isValid();\r\n }\r\n }\r\n\r\n private _updateReturnDateTime(): void {\r\n if (this._return_date && this._return_time) {\r\n const time = this.helpers.ngDateToMoment(\r\n this._return_date,\r\n this._return_time\r\n );\r\n this.inBoundDateTime = time.isValid() ? time : null;\r\n this._isValid();\r\n }\r\n }\r\n\r\n getSearchQuery(): SearchRailQueryVariables {\r\n const query: SearchRailQueryVariables = {\r\n countryCode: 'GB',\r\n journeyType: this.tempParams.chosenSearchType,\r\n adults: this.tempParams.noOfAdults,\r\n arrivalLocationId: this._travellingTo,\r\n departureLocationId: this._travellingFrom,\r\n children: this.tempParams.noOfChildren,\r\n class: this.tempParams.chosenSearchClass,\r\n extraTimeToChange: this.tempParams.extraTime,\r\n outboundArrivalDateTime: this.tempParams.outBoundDateTime,\r\n outboundDepartureDateTime: this.tempParams.outBoundDateTime,\r\n returnArrivalDateTime: this.tempParams.inBoundDateTime,\r\n returnDepartureDateTime: this.tempParams.inBoundDateTime,\r\n viaLocationId: this._viaLocation,\r\n railCardQualifiers: this.tempParams.railCards?.map(\r\n (railCard: ReferenceRailCardQualifier) => {\r\n return railCard.code;\r\n }\r\n )\r\n };\r\n\r\n if (this.tempParams.noOfChildren === 0) {\r\n query.children = null;\r\n }\r\n\r\n if (this._viaLocation === '') {\r\n query.viaLocationId = null;\r\n }\r\n\r\n switch (this.tempParams.outboundCriteria) {\r\n case RailSearchCriteria.Depart:\r\n query.outboundArrivalDateTime = null;\r\n break;\r\n case RailSearchCriteria.Arrive:\r\n query.outboundDepartureDateTime = null;\r\n break;\r\n default:\r\n console.warn(\r\n `+++ Unknown Criteria: ${this.tempParams.outboundCriteria} +++`\r\n );\r\n }\r\n\r\n switch (this.tempParams.returnCriteria) {\r\n case RailSearchCriteria.Depart:\r\n query.returnArrivalDateTime = null;\r\n break;\r\n case RailSearchCriteria.Arrive:\r\n query.returnDepartureDateTime = null;\r\n break;\r\n default:\r\n console.warn(\r\n `+++ Unknown Criteria: ${this.tempParams.returnCriteria} +++`\r\n );\r\n }\r\n\r\n switch (this.tempParams.chosenSearchType) {\r\n case RailJourneyType.SingleJourney:\r\n case RailJourneyType.OpenReturnJourney:\r\n query.returnDepartureDateTime = null;\r\n query.returnArrivalDateTime = null;\r\n break;\r\n }\r\n\r\n return this.helpers.removeNulls<SearchRailQueryVariables>(query);\r\n }\r\n\r\n private getRailStationById(id: string): Observable<RailStation> {\r\n if (id) {\r\n return this.getRailStationFetcher.fetchList({ id }).pipe(take(1));\r\n } else {\r\n return of();\r\n }\r\n }\r\n\r\n private getCriteria(\r\n departureDateTime: string,\r\n arrivalDateTime: string\r\n ): RailSearchCriteria {\r\n if (departureDateTime) {\r\n return RailSearchCriteria.Depart;\r\n } else if (arrivalDateTime) {\r\n return RailSearchCriteria.Arrive;\r\n }\r\n {\r\n return null;\r\n }\r\n }\r\n\r\n createTicketGroups(results: RailJourneyOptions[]): RailTicketGroups {\r\n let tickets: RailTicketGroups = {};\r\n let ticketId = '';\r\n this._canCombine = {};\r\n\r\n let ticketGroupsOutbound = this.setTicketsGroups(results[0].outbound);\r\n let ticketGroupsReturn = this.setTicketsGroups(results[0].return);\r\n ticketGroupsOutbound = this.sortTicketPrices(ticketGroupsOutbound);\r\n ticketGroupsReturn = this.sortTicketPrices(ticketGroupsReturn);\r\n\r\n Object.keys(ticketGroupsOutbound).map((key) => {\r\n ticketGroupsOutbound[key].map((tkt: RailTicketOption) => {\r\n ticketId = `${tkt.type}${tkt.singleOrReturn}`;\r\n const identifier = tkt.identifiers.journeyIdentifier;\r\n const identifierObj: RailResultIndifiers = {};\r\n identifierObj[identifier] = {\r\n price: tkt.price,\r\n isChild: false,\r\n fareIdentifier: tkt.identifiers.fareIdentifier,\r\n availableSeats: tkt.availableSeats\r\n };\r\n if (tickets[key]) {\r\n this.updateCanCombine(tkt);\r\n identifierObj[tkt.identifiers.journeyIdentifier].isChild = false;\r\n if (tickets[tkt.type].header.price === tkt.price) {\r\n tickets[tkt.type].resultIndifiers.push(identifier);\r\n tickets[tkt.type].resultIndifiersPrices = {\r\n ...tickets[tkt.type].resultIndifiersPrices,\r\n ...identifierObj\r\n };\r\n } else if (tkt.price) {\r\n // add identifier and price even if it is a child\r\n if (!tickets[tkt.type].resultIndifiers.includes(identifier)) {\r\n tickets[tkt.type].resultIndifiers.push(identifier);\r\n tickets[tkt.type].resultIndifiersPrices = {\r\n ...tickets[tkt.type].resultIndifiersPrices,\r\n ...identifierObj\r\n };\r\n }\r\n identifierObj[identifier].isChild = true;\r\n const childTicket = {\r\n header: tkt,\r\n children: [],\r\n open: false,\r\n direction: RailDirection.Outbound,\r\n resultIndifiers: [identifier],\r\n resultIndifiersPrices: identifierObj,\r\n child: true,\r\n ticketId,\r\n selectedIndicies: [],\r\n disabledIndicies: [],\r\n showLimitedSeats: false\r\n } as RailTicketGroup;\r\n tickets[tkt.type].children.push(childTicket);\r\n }\r\n } else {\r\n this._canCombine[tkt.type] = {};\r\n this.updateCanCombine(tkt);\r\n tickets[tkt.type] = {\r\n header: tkt,\r\n children: [],\r\n open: false,\r\n direction: RailDirection.Outbound,\r\n resultIndifiers: [identifier],\r\n resultIndifiersPrices: identifierObj,\r\n child: false,\r\n ticketId,\r\n selectedIndicies: [],\r\n disabledIndicies: [],\r\n showLimitedSeats: false\r\n } as RailTicketGroup;\r\n }\r\n });\r\n });\r\n\r\n Object.keys(ticketGroupsReturn).map((key) => {\r\n ticketGroupsReturn[key].map((tkt: RailTicketOption) => {\r\n ticketId = `${tkt.type}${tkt.singleOrReturn}`;\r\n const identifier = tkt.identifiers.journeyIdentifier;\r\n const identifierObj: RailResultIndifiers = {};\r\n identifierObj[identifier] = {\r\n price: tkt.price,\r\n isChild: true,\r\n fareIdentifier: tkt.identifiers.fareIdentifier,\r\n availableSeats: tkt.availableSeats\r\n };\r\n if (\r\n tickets[tkt.type] &&\r\n tkt.price &&\r\n tkt.price !== tickets[tkt.type].header.price\r\n ) {\r\n this.updateCanCombine(tkt);\r\n identifierObj[identifier].isChild = true;\r\n const childTicket = {\r\n header: tkt,\r\n children: [],\r\n open: false,\r\n direction: RailDirection.Inbound,\r\n resultIndifiers: [identifier],\r\n resultIndifiersPrices: identifierObj,\r\n child: true,\r\n ticketId,\r\n selectedIndicies: [],\r\n disabledIndicies: [],\r\n showLimitedSeats: false\r\n } as any;\r\n tickets[tkt.type].children.push(childTicket);\r\n } else if (!tickets[tkt.type]) {\r\n this.updateCanCombine(tkt);\r\n tickets[tkt.type] = {\r\n header: tkt,\r\n children: [],\r\n open: false,\r\n direction: RailDirection.Inbound,\r\n resultIndifiers: [identifier],\r\n resultIndifiersPrices: identifierObj,\r\n child: false,\r\n ticketId,\r\n selectedIndicies: [],\r\n disabledIndicies: [],\r\n showLimitedSeats: false\r\n } as any;\r\n } else if (!tkt.price || tkt.price === tickets[tkt.type].header.price) {\r\n this.updateCanCombine(tkt);\r\n tickets[tkt.type].resultIndifiers.push(identifier);\r\n identifierObj[identifier].isChild = false;\r\n tickets[tkt.type].resultIndifiersPrices = {\r\n ...tickets[tkt.type].resultIndifiersPrices,\r\n ...identifierObj\r\n };\r\n }\r\n });\r\n });\r\n\r\n let combineTickets = { ...tickets };\r\n tickets = this.combineChildTickets(combineTickets);\r\n\r\n // console.log('groups: ', tickets);\r\n // console.log('Can Combine: ', this._canCombine);\r\n return tickets;\r\n }\r\n\r\n combineChildTickets(tickets: RailTicketGroups): RailTicketGroups {\r\n const values = Object.values(tickets);\r\n for (let i = 0; i < values.length; i++) {\r\n const childObject: { [key: string]: RailTicketGroup } = {};\r\n\r\n for (let j = 0; j < values[i].children.length; j++) {\r\n const child = values[i].children[j];\r\n const fareIdentifier = child.header.identifiers.fareIdentifier;\r\n if (childObject[fareIdentifier]) {\r\n childObject[fareIdentifier].resultIndifiers.push(\r\n child.resultIndifiers[0]\r\n );\r\n childObject[fareIdentifier].resultIndifiersPrices = {\r\n ...childObject[fareIdentifier].resultIndifiersPrices,\r\n ...child.resultIndifiersPrices\r\n };\r\n } else {\r\n childObject[fareIdentifier] = child;\r\n }\r\n }\r\n // console.log(childObject);\r\n // console.log(values[i]['header']['type']);\r\n tickets[values[i].header.type].children = Object.values(childObject);\r\n }\r\n tickets = this.sortTicketChildrenPrices(tickets);\r\n return tickets;\r\n }\r\n setTicketsGroups(results: RailJourneyOption[]): TicketGroups {\r\n let ticketGroups: TicketGroups = {};\r\n results.forEach((out: RailJourneyOption) => {\r\n out.providers.forEach((prov: RailProvider) => {\r\n prov.ticketOptions.forEach((tkt: RailTicketOption) => {\r\n ticketGroups[tkt.type]\r\n ? ticketGroups[tkt.type].push(tkt)\r\n : (ticketGroups[tkt.type] = [tkt]);\r\n });\r\n });\r\n });\r\n return ticketGroups;\r\n }\r\n\r\n updateFromPreviousSearches(\r\n previousItems: Record<ServiceType, BasketItem>\r\n ): void {}\r\n\r\n updateCanCombine(tkt: RailTicketOption): void {\r\n (tkt.identifiers.allowedWith || []).forEach((allowed) => {\r\n if (!this._canCombine[tkt.type][allowed.journeyIdentifier]) {\r\n this._canCombine[tkt.type][allowed.journeyIdentifier] = [\r\n allowed.fareIdentifier\r\n ];\r\n } else {\r\n this._canCombine[tkt.type][allowed.journeyIdentifier].push(\r\n allowed.fareIdentifier\r\n );\r\n }\r\n });\r\n }\r\n\r\n toggleTicketSelect(\r\n ticket: RailTicketGroup,\r\n way: 'departs' | 'returns',\r\n timeSlotId: string,\r\n ticketId: string,\r\n fareIdentifier: string,\r\n ticketsGroups: RailTicketGroups\r\n ): RailTicketGroups {\r\n console.log(ticket);\r\n\r\n if (!ticket) {\r\n return;\r\n }\r\n\r\n this._chosenTicketGroup = ticket;\r\n const keys = Object.keys(ticketsGroups);\r\n let selectedTicket = null;\r\n let departsTicket: RailTicketOption[] = [];\r\n let returnTicket: RailTicketOption[] = [];\r\n let isUnselected = false;\r\n keys.forEach((key) => {\r\n let group = ticketsGroups[key] as RailTicketGroup;\r\n\r\n if (\r\n group.ticketId === ticketId &&\r\n group.selectedIndicies.includes(timeSlotId)\r\n ) {\r\n if (way === 'departs') {\r\n group.selectedIndicies = [];\r\n departsTicket = [];\r\n returnTicket = [];\r\n this._chosenInboundTicket = null;\r\n this._chosenInboundJourney = null;\r\n this._chosenTicketGroup = null;\r\n group.children.forEach((child) => {\r\n child.selectedIndicies = [];\r\n });\r\n } else {\r\n group.selectedIndicies = group.selectedIndicies.filter(\r\n (Indicies) => Indicies !== timeSlotId\r\n );\r\n returnTicket = returnTicket.filter(\r\n (Indicies) => Indicies !== group.header\r\n );\r\n }\r\n } else {\r\n if (\r\n group.ticketId === ticketId &&\r\n group.header.identifiers.fareIdentifier === fareIdentifier &&\r\n way === 'departs'\r\n ) {\r\n group = this.clearUnneededTickets(way, group, timeSlotId);\r\n group.selectedIndicies.push(timeSlotId);\r\n way === 'departs'\r\n ? departsTicket.push(group.header)\r\n : returnTicket.push(group.header);\r\n selectedTicket = group.header;\r\n } else {\r\n // may have to modify this for dual singles\r\n if (way === 'departs') {\r\n group.selectedIndicies = [];\r\n } else if (ticketId.includes(group.header.type)) {\r\n selectedTicket = group.header;\r\n }\r\n }\r\n\r\n group.children.forEach((child) => {\r\n if (child.selectedIndicies.includes(timeSlotId)) {\r\n if (way === 'departs') {\r\n child.selectedIndicies = [];\r\n departsTicket = [];\r\n returnTicket = [];\r\n this._chosenInboundTicket = null;\r\n this._chosenInboundJourney = null;\r\n isUnselected = true;\r\n } else {\r\n child.selectedIndicies = child.selectedIndicies.filter(\r\n (Indicies) => Indicies !== timeSlotId\r\n );\r\n returnTicket = returnTicket.filter(\r\n (Indicies) => Indicies !== group.header\r\n );\r\n }\r\n } else {\r\n if (\r\n child.ticketId === ticketId &&\r\n child.header.identifiers.fareIdentifier === fareIdentifier\r\n ) {\r\n if (\r\n (way === 'departs' &&\r\n child.direction !== RailDirection.Inbound) ||\r\n (way !== 'departs' && child.direction === RailDirection.Inbound)\r\n ) {\r\n child = this.clearUnneededTickets(way, child, timeSlotId);\r\n child.selectedIndicies.push(timeSlotId);\r\n way === 'departs'\r\n ? departsTicket.push(child.header)\r\n : returnTicket.push(child.header);\r\n selectedTicket = child.header;\r\n } else if (isUnselected) {\r\n child.selectedIndicies = [];\r\n }\r\n } else {\r\n child.selectedIndicies = [];\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n // now we need to mark tickets as disabled if they are returns that do not match the selected return\r\n // or on overlapping times\r\n if (way === 'departs') {\r\n this._chosenOutboundTicket = this.helpers.clone(selectedTicket);\r\n\r\n // now go over the full results and find the matching timeslot\r\n departsTicket.length\r\n ? (this._chosenOutboundJourney = this.results.value[0].outbound.find(\r\n (out: RailJourneyOption) => {\r\n return out.identifiers.journeyIdentifier === timeSlotId;\r\n }\r\n ))\r\n : (this._chosenOutboundJourney = null);\r\n\r\n if (\r\n this._chosenInboundTicket &&\r\n this._chosenOutboundTicket.singleOrReturn ===\r\n RailTicketOptionType.Return &&\r\n this._chosenOutboundTicket.identifiers.fareIdentifier !==\r\n this._chosenInboundTicket.identifiers.fareIdentifier\r\n ) {\r\n console.warn('+++ Cannot combine fares, clearing inbound... +++');\r\n this._chosenInboundTicket = null;\r\n this._chosenInboundJourney = null;\r\n }\r\n } else if (way === 'returns') {\r\n this._chosenInboundTicket = this.helpers.clone(selectedTicket);\r\n\r\n this._chosenInboundTicket\r\n ? (this._chosenInboundJourney = this.results.value[0].return.find(\r\n (inT: RailJourneyOption) => {\r\n return inT.identifiers.journeyIdentifier === timeSlotId;\r\n }\r\n ))\r\n : (this._chosenInboundJourney = null);\r\n }\r\n\r\n return ticketsGroups;\r\n }\r\n\r\n /**\r\n * @description - determine if a fare can be combined with what we currently have selected\r\n */\r\n canCombine(journeyIdentifier: string, fareIdentifier: string): boolean {\r\n // may have to modify this for dual singles later on\r\n try {\r\n if (\r\n this._chosenOutboundTicket &&\r\n this._chosenOutboundTicket.singleOrReturn ===\r\n RailTicketOptionType.Return &&\r\n Number(journeyIdentifier) > 5\r\n ) {\r\n // greater than 5 only as we are not going to restrict outbounds\r\n if (\r\n this._canCombine[this._chosenOutboundTicket.type][\r\n Number(journeyIdentifier)\r\n ]?.includes(fareIdentifier) &&\r\n this._chosenOutboundTicket.identifiers.fareIdentifier ===\r\n fareIdentifier\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n } catch (error) {\r\n console.error('+++ Error combining rail fares: ', error, ' +++');\r\n }\r\n\r\n return false;\r\n }\r\n\r\n clearUnneededTickets(\r\n way: string,\r\n group: RailTicketGroup,\r\n timeSlotId: string\r\n ): RailTicketGroup {\r\n if (way === 'returns') {\r\n group.selectedIndicies = group.selectedIndicies.filter(\r\n (indicie: string) => {\r\n return Number(indicie) <= 5 || indicie === timeSlotId;\r\n }\r\n );\r\n } else {\r\n group.selectedIndicies = group.selectedIndicies.filter(\r\n (indicie: string) => {\r\n return Number(indicie) > 5 || indicie === timeSlotId;\r\n }\r\n );\r\n }\r\n\r\n return group;\r\n }\r\n\r\n getRailStation(\r\n code: string,\r\n isLoading?: BehaviorSubject<boolean>\r\n ): Observable<RailStation> {\r\n if (code.length === 3) {\r\n isLoading?.next(true);\r\n return this.getRailStationFetcher.fetchList({ code }).pipe(\r\n tap(() => isLoading?.next(false)),\r\n take(1)\r\n );\r\n } else {\r\n return of();\r\n }\r\n }\r\n\r\n getSelectedRailTicketOption(\r\n railJourneyOption: RailJourneyOption,\r\n railTicketGroup: RailTicketGroup,\r\n providerIndex: number\r\n ): RailTicketOption {\r\n return railJourneyOption.providers[providerIndex].ticketOptions.find(\r\n (ticketOption) =>\r\n ticketOption.type === railTicketGroup.header.type &&\r\n (ticketOption.price === railTicketGroup.header.price ||\r\n ticketOption.identifiers.fareIdentifier ===\r\n railTicketGroup.header.identifiers.fareIdentifier)\r\n );\r\n }\r\n\r\n getLegsFromRailJourneyOption(railJourneyOption: RailJourneyOption): any[] {\r\n let legs: any[] = [];\r\n if (railJourneyOption?.segments.length) {\r\n legs = railJourneyOption.segments.map((segment) => {\r\n return {\r\n operator: segment.operator,\r\n departureDateTime: segment.departDateTime,\r\n departureStationName: segment.depart,\r\n arrivalDateTime: segment.arriveDateTime,\r\n arrivalStationName: segment.arrive\r\n };\r\n });\r\n }\r\n return legs;\r\n }\r\n\r\n async addSingleJourneyToBasket(\r\n serviceId: string,\r\n railQuery: SearchRailQueryVariables,\r\n railJourneyOption: RailJourneyOption,\r\n railTicketGroup: RailTicketGroup\r\n ): Promise<boolean> {\r\n\r\n let outTicketExtras: TicketExtras[];\r\n // if ticketExtras exists create TicketExtrasObject and added it to the basket\r\n if (railJourneyOption.ticketExtras) {\r\n outTicketExtras = this.createTicketExtrasObject(railJourneyOption.ticketExtras[0]);\r\n }\r\n \r\n if (railJourneyOption.unsellable) {\r\n return Promise.resolve(false);\r\n }\r\n const intBasket: InternalBasketInterface =\r\n await this.basketService.getDefaultBasket();\r\n const basket = intBasket?.subject.value;\r\n if (basket) {\r\n const selectedRailTicketOption = this.getSelectedRailTicketOption(\r\n railJourneyOption,\r\n railTicketGroup,\r\n 0\r\n );\r\n const legs = this.getLegsFromRailJourneyOption(railJourneyOption);\r\n const ticketQueueList = selectedRailTicketOption.ticketQueueList.map(\r\n (ticketQueueList1) => {\r\n return {\r\n id: ticketQueueList1.id,\r\n name: ticketQueueList1.name,\r\n type: ticketQueueList1.type\r\n };\r\n }\r\n );\r\n\r\n const basketItem: RailBasketItem = {\r\n basket: basket.id,\r\n service: serviceId,\r\n detail: {\r\n accountsList: selectedRailTicketOption.accountsList.map(\r\n (account: RailAccount) => {\r\n return { id: account.id, description: account.description };\r\n }\r\n ),\r\n outwardDetail: {\r\n arrivalDateTime: railJourneyOption.arriveDateTime,\r\n arrivalStationName: railJourneyOption.to,\r\n departureDateTime: railJourneyOption.departDateTime,\r\n departureStationName: railJourneyOption.from,\r\n supplierTickets: [\r\n {\r\n supplierName: railJourneyOption.providers[0].name,\r\n ticketDescription: selectedRailTicketOption.type,\r\n price: selectedRailTicketOption.price,\r\n legs\r\n }\r\n ]\r\n },\r\n transactionIdentifier:\r\n railJourneyOption.identifiers.transactionIdentifier,\r\n outbound: {\r\n fareIdentifiers: [\r\n selectedRailTicketOption.identifiers.fareIdentifier\r\n ],\r\n journeyIdentifier: selectedRailTicketOption.identifiers.journeyIdentifier\r\n },\r\n ticketQueueList\r\n },\r\n adults: railQuery.adults,\r\n price: selectedRailTicketOption.price,\r\n currency: selectedRailTicketOption.currency as CurrencyCode,\r\n searchQuery: railQuery,\r\n co2PerItem: railJourneyOption.co2PerItem,\r\n co2PerPassenger: railJourneyOption.co2PerPassenger,\r\n outboundDate: railJourneyOption.departDateTime\r\n }\r\n\r\n // if outTicketExtras exists add the object to basketItem\r\n if (outTicketExtras) {\r\n basketItem.detail.outbound.ticketExtras = outTicketExtras;\r\n }\r\n\r\n return this.basketService.addToBasket(\r\n basketItem,\r\n intBasket,\r\n this.searchService,\r\n this.travellers\r\n );\r\n }\r\n return Promise.resolve(false);\r\n }\r\n\r\n async addReturnJourneyToBasket(\r\n serviceId: string,\r\n railQuery: SearchRailQueryVariables,\r\n outbound: RailJourneyOption,\r\n inbound: RailJourneyOption,\r\n railTicketGroup: RailTicketGroup\r\n ): Promise<boolean> {\r\n if (outbound.unsellable) {\r\n return Promise.resolve(false);\r\n }\r\n\r\n let inTicketExtras: TicketExtras[];\r\n let outTicketExtras: TicketExtras[];\r\n\r\n // if ticketExtras exists create TicketExtrasObject and added it to the basket\r\n if (inbound.ticketExtras) {\r\n inTicketExtras = this.createTicketExtrasObject(inbound.ticketExtras[0]);\r\n }\r\n\r\n if (outbound.ticketExtras) {\r\n outTicketExtras = this.createTicketExtrasObject(outbound.ticketExtras[0]);\r\n }\r\n\r\n const intBasket: InternalBasketInterface =\r\n await this.basketService.getDefaultBasket();\r\n const basket = intBasket?.subject.value;\r\n if (basket) {\r\n const selectedRailTicketOption = this.getSelectedRailTicketOption(\r\n outbound,\r\n railTicketGroup,\r\n 0\r\n );\r\n const selectedInboundRailTicketOption = this.getSelectedRailTicketOption(\r\n inbound,\r\n railTicketGroup,\r\n 0\r\n );\r\n const outboundLegs = this.getLegsFromRailJourneyOption(outbound);\r\n const inboundLegs = this.getLegsFromRailJourneyOption(inbound);\r\n const ticketQueueList = selectedRailTicketOption.ticketQueueList.map(\r\n (ticketQueueList1: RailTicketQueue) => {\r\n return {\r\n id: ticketQueueList1.id,\r\n name: ticketQueueList1.name,\r\n type: ticketQueueList1.type\r\n };\r\n }\r\n );\r\n\r\n const basketItem: RailBasketItem = {\r\n basket: basket.id,\r\n service: serviceId,\r\n detail: {\r\n accountsList: selectedRailTicketOption.accountsList.map(\r\n (account: RailAccount) => {\r\n return { id: account.id, description: account.description };\r\n }\r\n ),\r\n outwardDetail: {\r\n arrivalDateTime: outbound.arriveDateTime,\r\n arrivalStationName: outbound.to,\r\n departureDateTime: outbound.departDateTime,\r\n departureStationName: outbound.from,\r\n supplierTickets: [\r\n {\r\n supplierName: outbound.providers[0].name,\r\n ticketDescription: selectedRailTicketOption.type,\r\n price: selectedRailTicketOption.price,\r\n legs: outboundLegs\r\n }\r\n ]\r\n },\r\n inwardDetail: {\r\n arrivalDateTime: inbound.arriveDateTime,\r\n arrivalStationName: inbound.to,\r\n departureDateTime: inbound.departDateTime,\r\n departureStationName: inbound.from,\r\n supplierTickets: [\r\n {\r\n supplierName: inbound.providers[0].name,\r\n ticketDescription: selectedRailTicketOption.type,\r\n legs: inboundLegs\r\n }\r\n ]\r\n },\r\n transactionIdentifier: outbound.identifiers.transactionIdentifier,\r\n outbound: {\r\n fareIdentifiers: [\r\n selectedRailTicketOption.identifiers.fareIdentifier\r\n ],\r\n journeyIdentifier: selectedRailTicketOption.identifiers.journeyIdentifier\r\n },\r\n ticketQueueList,\r\n return: {\r\n fareIdentifiers: [\r\n selectedInboundRailTicketOption.identifiers.fareIdentifier\r\n ],\r\n journeyIdentifier: selectedInboundRailTicketOption.identifiers.journeyIdentifier\r\n }\r\n },\r\n adults: railQuery.adults,\r\n price: railTicketGroup.header.price,\r\n currency: selectedRailTicketOption.currency as CurrencyCode,\r\n searchQuery: railQuery,\r\n co2PerItem: outbound.co2PerItem,\r\n co2PerPassenger: outbound.co2PerPassenger,\r\n outboundDate: outbound.arriveDateTime,\r\n inboundDate: inbound.arriveDateTime\r\n }\r\n\r\n // if inTicketExtras or outTicketExtras exists add the object to basketItem\r\n if (inTicketExtras) {\r\n basketItem.detail.return.ticketExtras = inTicketExtras;\r\n }\r\n if (outTicketExtras) {\r\n basketItem.detail.outbound.ticketExtras = outTicketExtras;\r\n }\r\n\r\n return this.basketService.addToBasket(\r\n basketItem,\r\n intBasket,\r\n this.searchService,\r\n this.travellers\r\n );\r\n }\r\n return Promise.resolve(false);\r\n }\r\n\r\n createTicketExtrasObject(railTicketExtra: RailTicketExtra): TicketExtras[] {\r\n return [{\r\n type: railTicketExtra.description,\r\n location: railTicketExtra.location,\r\n date: railTicketExtra.date\r\n }];\r\n }\r\n\r\n sortTicketPrices(tickets: TicketGroups): TicketGroups {\r\n const sortTicketPrices = { ...tickets };\r\n Object.keys(sortTicketPrices).map((key) => {\r\n sortTicketPrices[key].sort((a: RailTicketOption, b: RailTicketOption) => {\r\n const priceA = a.price;\r\n const priceB = b.price;\r\n return priceA < priceB ? -1 : priceA > priceB ? 1 : 0;\r\n });\r\n });\r\n return sortTicketPrices;\r\n }\r\n sortTicketChildrenPrices(tickets: RailTicketGroups): RailTicketGroups {\r\n const sortTicketPrices = { ...tickets };\r\n Object.keys(sortTicketPrices).map((key) => {\r\n sortTicketPrices[key].children.sort(\r\n (a: RailTicketGroup, b: RailTicketGroup) => {\r\n const priceA = a.header.price;\r\n const priceB = b.header.price;\r\n return priceA < priceB ? -1 : priceA > priceB ? 1 : 0;\r\n }\r\n );\r\n });\r\n return sortTicketPrices;\r\n }\r\n updateLowestPrice(results: RailJourneyOptions[]): ICheapestPrice {\r\n if (!results.length) return null;\r\n let currency;\r\n try {\r\n currency = results[0].outbound[0].providers[0].ticketOptions[0].currency;\r\n } catch (error) {\r\n currency = 'GBP';\r\n }\r\n\r\n const price = this.findCheapestTicket(results);\r\n return {\r\n amount: price,\r\n currencyCode: currency\r\n };\r\n }\r\n findCheapestTicket(results: RailJourneyOptions[]): number {\r\n this._cheapestFirst = null;\r\n this._cheapestStandard = null;\r\n if (!results.length) return null;\r\n let cheapestArr: number[] = [];\r\n\r\n results.map((result) => {\r\n result.outbound.map((out) => {\r\n out.providers.map((tkt) => {\r\n let cheapestTicket: number = tkt.ticketOptions[0].price;\r\n tkt.ticketOptions.map((tktOption) => {\r\n let tktPrice = tktOption.price;\r\n let tktClass = tktOption.class;\r\n if (\r\n tktClass === 'First' &&\r\n (this._cheapestFirst?.price > tktPrice || !this._cheapestFirst)\r\n ) {\r\n this._cheapestFirst = tktOption;\r\n } else if (\r\n tktClass === 'Standard' &&\r\n (this._cheapestStandard?.price > tktPrice ||\r\n !this._cheapestStandard)\r\n ) {\r\n this._cheapestStandard = tktOption;\r\n }\r\n if (tktPrice === cheapestTicket) {\r\n cheapestArr.push(cheapestTicket);\r\n }\r\n });\r\n });\r\n });\r\n });\r\n return Math.min(...cheapestArr);\r\n }\r\n\r\n calculateTimeDifferenceInMins(\r\n railJourney: RailJourneyOption | RailSegment\r\n ): string {\r\n return this.helpers\r\n .getTimeDifference(railJourney.arriveDateTime, railJourney.departDateTime)\r\n .toString();\r\n }\r\n\r\n /**\r\n * @description - determine if a ticket is an eTicket\r\n * @param ticket - the ticket we want to to check\r\n * @returns - boolean\r\n */\r\n ticketIsAnETicket(ticket: RailTicketOption): boolean {\r\n let foundETicket = null;\r\n\r\n foundETicket = ticket.ticketQueueList.find((queueListItem) => {\r\n return queueListItem.type === 'eTicket';\r\n });\r\n\r\n return foundETicket ? true : null;\r\n }\r\n\r\n /**\r\n * @description - clear all of our chosen tickets/other rail stuff, call this when kicking off a new search\r\n */\r\n clearChosenTickets(): void {\r\n this._chosenInboundTicket = null;\r\n this._chosenOutboundTicket = null;\r\n this._chosenInboundJourney = null;\r\n this._chosenOutboundJourney = null;\r\n this._chosenTicketGroup = null;\r\n }\r\n}\r\n","import moment, { Moment } from 'moment';\r\nimport { of, Observable, BehaviorSubject } from 'rxjs';\r\nimport { map, take, tap } from 'rxjs/operators';\r\nimport { BaseEnterpriseSearch } from './base-enterprise';\r\nimport { BaseStorageService } from '../services/storage.service';\r\nimport { BaseHelperRoutines } from './helpers';\r\nimport { RailTicketGroups } from '../interfaces/rail-ticket-groups.interface';\r\nimport {\r\n RailResultIndifiers,\r\n RailTicketGroup,\r\n TicketGroups\r\n} from '../interfaces/rail-ticket-group.interface';\r\nimport { RailDirection } from './rail-direction.enum';\r\nimport { ValueDisplay } from '../interfaces/value-display';\r\nimport {\r\n NgbDateStruct,\r\n IrlQuoteResultArray,\r\n RecursivePartial,\r\n RecentSearch\r\n} from '../types/types';\r\nimport {\r\n BasketItem,\r\n CurrencyCode,\r\n IrlClass,\r\n IrlJourneyOption,\r\n IrlJourneyOptions,\r\n IrlProvider,\r\n IrlTicketOption,\r\n SearchIrlQueryVariables,\r\n ServiceType,\r\n IrlJourneyType, IrlSupplier\r\n} from '../types/graphql.types';\r\nimport {\r\n BaseIrlQuoteFetcher,\r\n IrlQuoteFetcherType\r\n} from '../fetchers/irl-quote-fetcher';\r\nimport {\r\n BaseGetRailStationFetcher,\r\n GetRailStationFetcherType\r\n} from '../fetchers/get-rail-station.fetcher';\r\nimport {\r\n EnterpriseBasketServiceInterface,\r\n InternalBasketInterface\r\n} from '../interfaces/Ienterprise-basket.service';\r\nimport { EnterpriseSearchServiceInterface } from '../interfaces/Isearch.service';\r\nimport {\r\n IRLEnterpriseSearchInterface,\r\n IrlTempParams\r\n} from '../interfaces/Iirl-enterprise-search';\r\nimport { Traveller } from '../models/traveller.object';\r\nimport { ICheapestPrice } from '../interfaces/cheapest-price';\r\n\r\nexport enum IrlSearchCriteria {\r\n Depart = 'Depart After',\r\n Arrive = 'Arrive Before'\r\n}\r\n\r\nexport class IRLEnterpriseSearch<\r\n Q extends IrlQuoteFetcherType\r\n // ,\r\n // GRS_Q extends GetRailStationFetcherType\r\n >\r\n extends BaseEnterpriseSearch<\r\n IrlTempParams,\r\n IrlQuoteResultArray,\r\n IrlQuoteResultArray\r\n >\r\n implements IRLEnterpriseSearchInterface\r\n{\r\n static readonly STORAGE_SESSION_PARAMS = 'search_irl';\r\n static readonly STORAGE_SESSION_RESULTS = 'irl_results';\r\n static readonly PASSING_POINT = 'Passing';\r\n private travellers: Traveller[];\r\n\r\n protected resultsSessionName = IRLEnterpriseSearch.STORAGE_SESSION_RESULTS;\r\n\r\n public searchTypes = [\r\n { display: 'Return', value: IrlJourneyType.ReturnJourney },\r\n { display: 'One-Way', value: IrlJourneyType.SingleJourney }\r\n // { display: 'Open Return', value: IrlJourneyType.OpenReturnJourney },\r\n // { display: 'Dual Singles', value: IrlJourneyType.DualSingleJourney },\r\n ];\r\n\r\n public classTypes = [\r\n { display: 'Any', value: IrlClass.All },\r\n { display: 'Standard', value: IrlClass.Standard },\r\n { display: 'First', value: IrlClass.First }\r\n ];\r\n\r\n public ageRanges = [{ key: 'child', value: 'Child (0-3)' }, { key: 'child', value: 'Child (4-5)' }, { key: 'child', value: 'Child (6-11)' }, { key: 'youth', value: 'Youth (12-14)' }, { key: 'youth', value: 'Youth (15-25)' }, { key: 'adult', value: 'Adult (26-59)' }, { key: 'senior', value: 'Senior (60+)'}];\r\n\r\n\r\n\r\n public railCriteria = [IrlSearchCriteria.Depart, IrlSearchCriteria.Arrive];\r\n\r\n public travelCards = [\r\n { display: 'Young persons railcard', value: 'YNG' },\r\n { display: 'Disability railcard', value: 'DIS' },\r\n { display: 'Family railcard', value: 'FAM' },\r\n { display: 'Forces railcard', value: 'HMF' },\r\n { display: 'Travel agency discount', value: 'TAD' }\r\n ];\r\n\r\n\r\n public type: ServiceType = ServiceType.InternationalRail;\r\n public minOutboundDate: NgbDateStruct = {\r\n year: moment().year(),\r\n month: moment().month() + 1,\r\n day: moment().date()\r\n };\r\n public minInboundDate: NgbDateStruct = {\r\n year: moment().year(),\r\n month: moment().month() + 1,\r\n day: moment().date()\r\n };\r\n private _timeArray: ValueDisplay[];\r\n private _canCombine: any;\r\n // private _chosenOutboundTicket: RecursivePartial<IrlTicketOption>;\r\n // private _chosenInboundTicket: RecursivePartial<IrlTicketOption>;\r\n // private _chosenOutboundJourney: RecursivePartial<IrlJourneyOption>;\r\n // private _chosenInboundJourney: RecursivePartial<IrlJourneyOption>;\r\n private _viaLocation: any;\r\n private _travellingFrom: string;\r\n private _travellingTo: string;\r\n protected _originalUserSearch: IrlTempParams;\r\n\r\n // get chosenTotalPrice(): number {\r\n // if (this._chosenOutboundTicket) {\r\n // if (this._chosenInboundTicket) {\r\n // // now check if they are returns or dual\r\n // if (\r\n // this._chosenOutboundTicket.singleOrReturn === 'Return' &&\r\n // this._chosenInboundTicket.singleOrReturn === 'Return'\r\n // ) {\r\n // // they should both have the same price\r\n // return this._chosenOutboundTicket.price;\r\n // }\r\n // return (\r\n // this._chosenOutboundTicket.price + this._chosenInboundTicket.price\r\n // );\r\n // }\r\n\r\n // return this._chosenOutboundTicket.price;\r\n // }\r\n\r\n // return 0;\r\n // }\r\n\r\n // get chosenTickets(): any {\r\n // return {\r\n // Outbound: this._chosenOutboundTicket,\r\n // Inbound: this._chosenInboundTicket\r\n // };\r\n // }\r\n\r\n // get chosenOutboundJourney(): RecursivePartial<RailJourneyOption> {\r\n // return this._chosenOutboundJourney;\r\n // }\r\n\r\n // get chosenInboundJourney(): RecursivePartial<RailJourneyOption> {\r\n // return this._chosenInboundJourney;\r\n // }\r\n\r\n // get openReturn(): boolean {\r\n // return this.tempParams.openReturn;\r\n // }\r\n\r\n // set openReturn(newVal: boolean) {\r\n // this.tempParams.openReturn = newVal;\r\n\r\n // if (newVal) {\r\n // this.tempParams.chosenSearchType = IrlJourneyType.OpenReturnJourney;\r\n // }\r\n // this._isValid();\r\n // }\r\n\r\n // get chosenSearchType(): IrlJourneyType {\r\n // return this.tempParams.chosenSearchType;\r\n // }\r\n\r\n // set chosenSearchType(newType: IrlJourneyType) {\r\n // this.tempParams.chosenSearchType = newType;\r\n // this._isValid();\r\n // }\r\n\r\n get noOfAdults(): number {\r\n return this.tempParams.adults;\r\n }\r\n\r\n set noOfAdults(adults: number) {\r\n this.tempParams.adults = adults;\r\n this._isValid();\r\n }\r\n\r\n get noOfChildren(): number {\r\n return this.tempParams.children;\r\n }\r\n\r\n set noOfChildren(children: number) {\r\n this.tempParams.children = children;\r\n this._isValid();\r\n }\r\n\r\n get travellingTo(): any {\r\n return this.tempParams.arrivalLocationId;\r\n }\r\n\r\n set travellingTo(tt: any) {\r\n this.tempParams.arrivalLocationId = tt;\r\n\r\n this._travellingTo = '';\r\n if (tt?.railstation?.id) {\r\n this._travellingTo = tt.railstation.id;\r\n }\r\n\r\n this._isValid();\r\n }\r\n\r\n get travellingFrom(): any {\r\n return this.tempParams.departureLocationId;\r\n }\r\n\r\n set travellingFrom(tt: any) {\r\n this.tempParams.departureLocationId = tt;\r\n this._travellingFrom = '';\r\n if (tt?.railstation?.id) {\r\n this._travellingFrom = tt.railstation.id;\r\n }\r\n\r\n this._isValid();\r\n }\r\n\r\n private _supplier: IrlSupplier = null\r\n get supplier():IrlSupplier {\r\n return this._supplier;\r\n }\r\n set supplier(data: IrlSupplier) {\r\n this._supplier = data;\r\n }\r\n\r\n private _countryCode: string = null\r\n get countryCode():string {\r\n return this._countryCode;\r\n }\r\n set countryCode(data: string) {\r\n this._countryCode = data;\r\n }\r\n\r\n private _class: IrlClass = null\r\n get class():IrlClass {\r\n return this._class;\r\n }\r\n set class(data: IrlClass) {\r\n this._class = data;\r\n }\r\n\r\n private _outboundDepartureDateTime: Moment = null\r\n get outboundDepartureDateTime():Moment {\r\n return this._outboundDepartureDateTime;\r\n }\r\n set outboundDepartureDateTime(data: Moment) {\r\n this._outboundDepartureDateTime = data;\r\n }\r\n\r\n private _departureLocationId: string = null\r\n get departureLocationId():string {\r\n return this._departureLocationId;\r\n }\r\n set departureLocationId(data: string) {\r\n this._departureLocationId = data;\r\n }\r\n\r\n private _arrivalLocationId: string = null\r\n get arrivalLocationId():string {\r\n return this._arrivalLocationId;\r\n }\r\n set arrivalLocationId(data: string) {\r\n this._arrivalLocationId = data;\r\n }\r\n\r\n private _adults: number = 0\r\n get adults():number {\r\n return this._adults;\r\n }\r\n set adults(data: number) {\r\n this._adults = data;\r\n }\r\n\r\n private _children: number = 0\r\n get children():number {\r\n return this._children;\r\n }\r\n set children(data: number) {\r\n this._children = data;\r\n }\r\n\r\n private _returnDepartureDateTime: Moment = null\r\n get returnDepartureDateTime():Moment {\r\n return this._returnDepartureDateTime;\r\n }\r\n set returnDepartureDateTime(data: Moment) {\r\n this._returnDepartureDateTime = data;\r\n }\r\n\r\n private _ageRange: string = null\r\n get ageRange():string {\r\n return this._ageRange;\r\n }\r\n set ageRange(data: string) {\r\n this._ageRange = data;\r\n }\r\n\r\n\r\n\r\n\r\n // get chosenRailClass(): RailClass {\r\n // return this.tempParams.chosenSearchClass;\r\n // }\r\n\r\n get chosenSearchClass(): IrlClass {\r\n return this.tempParams.class;\r\n }\r\n\r\n set chosenSearchClass(classR: IrlClass) {\r\n this.tempParams.class = classR;\r\n this._isValid();\r\n }\r\n\r\n get outBoundDateTime(): moment.Moment {\r\n return this.tempParams.outboundDepartureDateTime;\r\n }\r\n\r\n set outBoundDateTime(newDateTime: moment.Moment) {\r\n this.tempParams.outboundDepartureDateTime = moment(newDateTime);\r\n\r\n this.minInboundDate = {\r\n year: newDateTime.year(),\r\n month: newDateTime.month() + 1,\r\n day: newDateTime.date()\r\n };\r\n\r\n // if (\r\n // this.outBoundDateTime &&\r\n // // this.inBoundDateTime &&\r\n // this.outBoundDateTime.isAfter(this.inBoundDateTime)\r\n // ) {\r\n // this.inBoundDateTime = this.outBoundDateTime.clone().add(1, 'day');\r\n // }\r\n\r\n this._isValid();\r\n }\r\n\r\n // get outboundCriteria(): IrlSearchCriteria {\r\n // return this.tempParams.outboundCriteria;\r\n // }\r\n\r\n // set outboundCriteria(newCrit: IrlSearchCriteria) {\r\n // // console.warn(`+++ Setting New Criteria: ${newCrit} +++`);\r\n // this.tempParams.outboundCriteria = newCrit;\r\n\r\n // this._isValid();\r\n // }\r\n\r\n // ! might not need this?\r\n // get inBoundDateTime(): moment.Moment {\r\n // return this.tempParams.inBoundDateTime;\r\n // }\r\n\r\n // set inBoundDateTime(newDateTime: moment.Moment) {\r\n // this.tempParams.inBoundDateTime = moment(newDateTime);\r\n // this._isValid();\r\n // }\r\n\r\n // !date and time is handled differently for LU\r\n private _outbound_date: NgbDateStruct = null;\r\n\r\n get outbound_date(): NgbDateStruct {\r\n return this._outbound_date;\r\n }\r\n\r\n set outbound_date(value: NgbDateStruct) {\r\n this._outbound_date = value;\r\n this._updateOutboundDateTime();\r\n }\r\n\r\n private _outbound_time: string = null;\r\n get outbound_time(): string {\r\n return this._outbound_time;\r\n }\r\n\r\n set outbound_time(value: string) {\r\n this._outbound_time = value;\r\n this._updateOutboundDateTime();\r\n }\r\n\r\n private _return_date: NgbDateStruct = null;\r\n\r\n get return_date(): NgbDateStruct {\r\n return this._return_date;\r\n }\r\n\r\n set return_date(value: NgbDateStruct) {\r\n this._return_date = value;\r\n this._updateReturnDateTime();\r\n }\r\n\r\n private _return_time: string = null;\r\n get return_time(): string {\r\n return this._return_time;\r\n }\r\n\r\n set return_time(value: string) {\r\n this._return_time = value;\r\n this._updateReturnDateTime();\r\n }\r\n\r\n // get returnCriteria(): IrlSearchCriteria {\r\n // return this.tempParams.returnCriteria;\r\n // }\r\n\r\n // set returnCriteria(newCrit: IrlSearchCriteria) {\r\n // this.tempParams.returnCriteria = newCrit;\r\n // this._isValid();\r\n // }\r\n\r\n // set railCards(newRailCards: string[]) {\r\n // this.tempParams.railCards = newRailCards;\r\n // this._isValid();\r\n // }\r\n\r\n // get carnetTicket(): boolean {\r\n // return this.tempParams.carnetTicket;\r\n // }\r\n\r\n // set carnetTicket(newCarnet: boolean) {\r\n // this.tempParams.carnetTicket = newCarnet;\r\n // this._isValid();\r\n // }\r\n\r\n // get disableAutoDiscounts(): boolean {\r\n // return this.tempParams.disableAutoDiscounts;\r\n // }\r\n\r\n // set disableAutoDiscounts(newDis: boolean) {\r\n // this.tempParams.disableAutoDiscounts = newDis;\r\n // this._isValid();\r\n // }\r\n\r\n // get prioritiseByPrice(): boolean {\r\n // return this.tempParams.prioritiseByPrice;\r\n // }\r\n\r\n // set prioritiseByPrice(newPriority: boolean) {\r\n // this.tempParams.prioritiseByPrice = newPriority;\r\n // this._isValid();\r\n // }\r\n\r\n\r\n public get timeArray(): ValueDisplay[] {\r\n this._timeArray =\r\n this._timeArray ||\r\n Array(48)\r\n .fill(0)\r\n .map((_, index: number) => {\r\n return {\r\n value:\r\n Math.floor(index / 2)\r\n .toString()\r\n .padStart(2, '0') +\r\n ((index % 2) * 30).toString().padStart(2, '0'),\r\n display:\r\n Math.floor(index / 2)\r\n .toString()\r\n .padStart(2, '0') +\r\n ':' +\r\n ((index % 2) * 30).toString().padStart(2, '0')\r\n };\r\n });\r\n return this._timeArray;\r\n }\r\n\r\n\r\n private _cheapestStandard: IrlTicketOption = null;\r\n get cheapestStandard(): IrlTicketOption {\r\n return this._cheapestStandard;\r\n }\r\n private _cheapestFirst: IrlTicketOption = null;\r\n get cheapestFirst(): IrlTicketOption {\r\n return this._cheapestFirst;\r\n }\r\n\r\n private _irlClass: IrlClass = null;\r\n get irlClass(): IrlClass {\r\n return this._irlClass\r\n }\r\n\r\n set irlClass(data : IrlClass) {\r\n this._irlClass = data;\r\n }\r\n\r\n private _journeytype: IrlJourneyType = null;\r\n get journeyType(): IrlJourneyType {\r\n return this._journeytype\r\n }\r\n\r\n set journeyType(data : IrlJourneyType) {\r\n this._journeytype = data;\r\n }\r\n\r\n constructor(\r\n private Irlfetcher: BaseIrlQuoteFetcher<Q>,\r\n // private getRailStationFetcher: BaseGetRailStationFetcher<GRS_Q>, // doesnt exist yet\r\n private helpers: BaseHelperRoutines,\r\n private basketService: EnterpriseBasketServiceInterface,\r\n storageService: BaseStorageService,\r\n private searchService: EnterpriseSearchServiceInterface\r\n ) {\r\n super(storageService);\r\n\r\n const data: {\r\n query: {};\r\n tempParams: IrlTempParams;\r\n originalUserSearch: IrlTempParams;\r\n } = storageService.getSessionItem(\r\n IRLEnterpriseSearch.STORAGE_SESSION_PARAMS\r\n ) || {\r\n query: {},\r\n tempParams: {} as IrlTempParams,\r\n originalUserSearch: {} as IrlTempParams\r\n };\r\n\r\n this.updateTempParams(this.searchService.makeIrlQuery(data.tempParams));\r\n this._originalUserSearch = data.originalUserSearch;\r\n\r\n if (searchService.shouldAddTravellerSubscription()) {\r\n searchService.travellerInformation.subscribe(\r\n (travellers: Traveller[]) => {\r\n this.travellers = travellers;\r\n const splitTravellers = this.helpers.selectedTravellers(\r\n travellers,\r\n ServiceType.Rail\r\n );\r\n this.tempParams.adults = splitTravellers.adults.length;\r\n this.tempParams.children = splitTravellers.children.length;\r\n this.travellers = travellers;\r\n this._isValid();\r\n }\r\n );\r\n }\r\n this._isValid();\r\n const results =\r\n storageService.getSessionItemAsList<IrlQuoteResultArray>(\r\n this.resultsSessionName\r\n ) || [];\r\n // if (results == null && this.isValid) {\r\n // searchService.startSearches();\r\n // }\r\n this._cheapestResultPrice = this.updateLowestPrice(results);\r\n this.results.next(results || []);\r\n }\r\n\r\n protected resetQuery(): void {\r\n this.updateTempParams(this.searchService.makeIrlQuery());\r\n this._isValid();\r\n }\r\n\r\n private _isValid() {\r\n this.storageService.setSessionItem(\r\n IRLEnterpriseSearch.STORAGE_SESSION_PARAMS,\r\n {\r\n tempParams: this.tempParams,\r\n originalUserSearch: this.originalUserSearch\r\n }\r\n );\r\n\r\n this.validationMessages = [];\r\n\r\n const now = moment();\r\n\r\n if (!this._travellingFrom) {\r\n this.validationMessages.push('Please Enter a From Location.');\r\n }\r\n\r\n if (!this._travellingTo) {\r\n this.validationMessages.push('Please Enter a To Location.');\r\n }\r\n\r\n if (this.outBoundDateTime?.isBefore(now)) {\r\n this.validationMessages.push(\r\n 'Departure Date/Time cannot be in the past.'\r\n );\r\n }\r\n\r\n // if (\r\n // this.chosenSearchType === IrlJourneyType.ReturnJourney\r\n // ) {\r\n // // check for return specific validations in here\r\n\r\n // if (this.inBoundDateTime?.isSameOrBefore(this.outBoundDateTime)) {\r\n // this.validationMessages.push(\r\n // 'Return Date/Time must be after Departure Date/Time'\r\n // );\r\n // }\r\n // }\r\n\r\n // if (this.via) {\r\n // if (!this.tempParams.viaLocation) {\r\n // this.validationMessages.push('Please enter a via location.');\r\n // }\r\n // }\r\n\r\n if (this.tempParams.adults + this.tempParams.children < 1) {\r\n this.validationMessages.push('There must be at least 1 traveller');\r\n }\r\n\r\n this.isValid.next(this.validationMessages.length === 0);\r\n this.messages.next(this.validationMessages);\r\n }\r\n\r\n startSearch(): Promise<boolean> {\r\n this.results.next([]);\r\n\r\n if (this.isValid.value) {\r\n this._originalUserSearch = Object.freeze({ ...this.tempParams });\r\n this.storageService.setSessionItem(\r\n IRLEnterpriseSearch.STORAGE_SESSION_PARAMS,\r\n {\r\n tempParams: this.tempParams,\r\n originalUserSearch: this.originalUserSearch\r\n }\r\n );\r\n return this._startSearch(\r\n this.Irlfetcher.fetchList(this.getSearchQuery()).pipe(\r\n map(result => result)\r\n )\r\n );\r\n } else {\r\n return Promise.resolve(false);\r\n }\r\n }\r\n\r\n public startRecentSearch(recentSearch: RecentSearch): void {\r\n this.startSearch();\r\n }\r\n\r\n private _updateOutboundDateTime(): void {\r\n if (this._outbound_date && this._outbound_time) {\r\n const time = this.helpers.ngDateToMoment(\r\n this._outbound_date,\r\n this._outbound_time\r\n );\r\n this.outBoundDateTime = time.isValid() ? time : null;\r\n this._isValid();\r\n }\r\n }\r\n\r\n private _updateReturnDateTime(): void {\r\n if (this._return_date && this._return_time) {\r\n const time = this.helpers.ngDateToMoment(\r\n this._return_date,\r\n this._return_time\r\n );\r\n // this.inBoundDateTime = time.isValid() ? time : null;\r\n this._isValid();\r\n }\r\n }\r\n\r\n getSearchQuery(): SearchIrlQueryVariables {\r\n const query: SearchIrlQueryVariables = {\r\n supplier: this.supplier, // IRLSupplier!\r\n countryCode: 'GB',\r\n // journeyType: this.journeyType, // IRLJourneyType!\r\n class: this.irlClass, // IRLClass\r\n outboundDepartureDateTime: this.tempParams.outboundDepartureDateTime,\r\n departureLocationId: this._travellingFrom,\r\n arrivalLocationId: this._travellingTo,\r\n adults: this.tempParams.adults,\r\n children: this.tempParams.children,\r\n returnDepartureDateTime: this.tempParams.returnDepartureDateTime,\r\n\r\n journeyType: this.tempParams.journeyType,\r\n // class: this.tempParams.chosenSearchClass,\r\n // extraTimeToChange: this.tempParams.extraTime,\r\n // outboundArrivalDateTime: this.tempParams.outBoundDateTime,\r\n // returnArrivalDateTime: this.tempParams.inBoundDateTime,\r\n // viaLocationCode: this.tempParams.viaLocation\r\n };\r\n\r\n if (this.tempParams.children === 0) {\r\n query.children = null;\r\n }\r\n\r\n // switch (this.tempParams.outboundCriteria) {\r\n // case IrlSearchCriteria.Depart:\r\n // query.outboundArrivalDateTime = null;\r\n // break;\r\n // case IrlSearchCriteria.Arrive:\r\n // query.outboundDepartureDateTime = null;\r\n // break;\r\n // default:\r\n // console.warn(\r\n // `+++ Unknown Criteria: ${this.tempParams.outboundCriteria} +++`\r\n // );\r\n // }\r\n\r\n // switch (this.tempParams.returnCriteria) {\r\n // case IrlSearchCriteria.Depart:\r\n // query.returnArrivalDateTime = null;\r\n // break;\r\n // case IrlSearchCriteria.Arrive:\r\n // query.returnDepartureDateTime = null;\r\n // break;\r\n // default:\r\n // console.warn(\r\n // `+++ Unknown Criteria: ${this.tempParams.returnCriteria} +++`\r\n // );\r\n // }\r\n\r\n switch (this.tempParams.journeyType) {\r\n case IrlJourneyType.SingleJourney:\r\n query.returnDepartureDateTime = null;\r\n break;\r\n }\r\n return this.helpers.removeNulls<SearchIrlQueryVariables>(query);\r\n }\r\n\r\n // createTicketGroups(results: IRLJourneyOptions[]): RailTicketGroups {\r\n // let tickets: RailTicketGroups = {};\r\n // let ticketId = '';\r\n // this._canCombine = {};\r\n\r\n // let ticketGroupsOutbound = this.setTicketsGroups(results[0].outbound);\r\n // let ticketGroupsReturn = this.setTicketsGroups(results[0].return);\r\n // ticketGroupsOutbound = this.sortTicketPrices(ticketGroupsOutbound);\r\n // ticketGroupsReturn = this.sortTicketPrices(ticketGroupsReturn);\r\n\r\n // Object.keys(ticketGroupsOutbound).map((key) => {\r\n // ticketGroupsOutbound[key].map((tkt: RailTicketOption) => {\r\n // ticketId = `${tkt.type}${tkt.singleOrReturn}`;\r\n // const identifier = tkt.identifiers.journeyIdentifier;\r\n // const identifierObj: RailResultIndifiers = {};\r\n // identifierObj[identifier] = {\r\n // price: tkt.price,\r\n // isChild: false,\r\n // fareIdentifier: tkt.identifiers.fareIdentifier\r\n // };\r\n // if (tickets[key]) {\r\n // this.updateCanCombine(tkt);\r\n // identifierObj[tkt.identifiers.journeyIdentifier].isChild = false;\r\n // if (tickets[tkt.type].header.price === tkt.price) {\r\n // tickets[tkt.type].resultIndifiers.push(identifier);\r\n // tickets[tkt.type].resultIndifiersPrices = {\r\n // ...tickets[tkt.type].resultIndifiersPrices,\r\n // ...identifierObj\r\n // };\r\n // } else if (tkt.price) {\r\n // identifierObj[identifier].isChild = true;\r\n // const childTicket = {\r\n // header: tkt,\r\n // children: [],\r\n // open: false,\r\n // direction: RailDirection.Outbound,\r\n // resultIndifiers: [identifier],\r\n // resultIndifiersPrices: identifierObj,\r\n // child: true,\r\n // ticketId,\r\n // selectedIndicies: [],\r\n // disabledIndicies: []\r\n // } as RailTicketGroup;\r\n // tickets[tkt.type].children.push(childTicket);\r\n // }\r\n // } else {\r\n // this._canCombine[tkt.type] = {};\r\n // this.updateCanCombine(tkt);\r\n // tickets[tkt.type] = {\r\n // header: tkt,\r\n // children: [],\r\n // open: false,\r\n // direction: RailDirection.Outbound,\r\n // resultIndifiers: [identifier],\r\n // resultIndifiersPrices: identifierObj,\r\n // child: false,\r\n // ticketId,\r\n // selectedIndicies: [],\r\n // disabledIndicies: []\r\n // } as RailTicketGroup;\r\n // }\r\n // });\r\n // });\r\n\r\n // Object.keys(ticketGroupsReturn).map((key) => {\r\n // ticketGroupsReturn[key].map((tkt: RailTicketOption) => {\r\n // ticketId = `${tkt.type}${tkt.singleOrReturn}`;\r\n // const identifier = tkt.identifiers.journeyIdentifier;\r\n // const identifierObj: RailResultIndifiers = {};\r\n // identifierObj[identifier] = {\r\n // price: tkt.price,\r\n // isChild: true,\r\n // fareIdentifier: tkt.identifiers.fareIdentifier\r\n // };\r\n // if (\r\n // tickets[tkt.type] &&\r\n // tkt.price &&\r\n // tkt.price !== tickets[tkt.type].header.price\r\n // ) {\r\n // this.updateCanCombine(tkt);\r\n // identifierObj[identifier].isChild = true;\r\n // const childTicket = {\r\n // header: tkt,\r\n // children: [],\r\n // open: false,\r\n // direction: RailDirection.Inbound,\r\n // resultIndifiers: [identifier],\r\n // resultIndifiersPrices: identifierObj,\r\n // child: true,\r\n // ticketId,\r\n // selectedIndicies: [],\r\n // disabledIndicies: []\r\n // } as any;\r\n // tickets[tkt.type].children.push(childTicket);\r\n // } else if (!tickets[tkt.type]) {\r\n // this.updateCanCombine(tkt);\r\n // tickets[tkt.type] = {\r\n // header: tkt,\r\n // children: [],\r\n // open: false,\r\n // direction: RailDirection.Inbound,\r\n // resultIndifiers: [identifier],\r\n // resultIndifiersPrices: identifierObj,\r\n // child: false,\r\n // ticketId,\r\n // selectedIndicies: [],\r\n // disabledIndicies: []\r\n // } as any;\r\n // } else if (!tkt.price || tkt.price === tickets[tkt.type].header.price) {\r\n // this.updateCanCombine(tkt);\r\n // tickets[tkt.type].resultIndifiers.push(identifier);\r\n // identifierObj[identifier].isChild = false;\r\n // tickets[tkt.type].resultIndifiersPrices = {\r\n // ...tickets[tkt.type].resultIndifiersPrices,\r\n // ...identifierObj\r\n // };\r\n // }\r\n // });\r\n // });\r\n\r\n // let combineTickets = { ...tickets };\r\n // tickets = this.combineChildTickets(combineTickets);\r\n\r\n // // console.log('groups: ', tickets);\r\n // // console.log('Can Combine: ', this._canCombine);\r\n // return tickets;\r\n // }\r\n\r\n combineChildTickets(tickets: RailTicketGroups): RailTicketGroups {\r\n const values = Object.values(tickets);\r\n for (let i = 0; i < values.length; i++) {\r\n const childObject: { [key: string]: RailTicketGroup } = {};\r\n\r\n for (let j = 0; j < values[i].children.length; j++) {\r\n const child = values[i].children[j];\r\n const fareIdentifier = child.header.identifiers.fareIdentifier;\r\n if (childObject[fareIdentifier]) {\r\n childObject[fareIdentifier].resultIndifiers.push(\r\n child.resultIndifiers[0]\r\n );\r\n childObject[fareIdentifier].resultIndifiersPrices = {\r\n ...childObject[fareIdentifier].resultIndifiersPrices,\r\n ...child.resultIndifiersPrices\r\n };\r\n } else {\r\n childObject[fareIdentifier] = child;\r\n }\r\n }\r\n // console.log(childObject);\r\n // console.log(values[i]['header']['type']);\r\n tickets[values[i].header.type].children = Object.values(childObject);\r\n }\r\n // tickets = this.sortTicketChildrenPrices(tickets);\r\n return tickets;\r\n }\r\n setTicketsGroups(results: IrlJourneyOption[]): any {\r\n let ticketGroups: any = {};\r\n results.forEach((out: IrlJourneyOption) => {\r\n out.providers.forEach((prov: IrlProvider) => {\r\n prov.ticketOptions.forEach((tkt: IrlTicketOption) => {\r\n ticketGroups[tkt.type]\r\n ? ticketGroups[tkt.type].push(tkt)\r\n : (ticketGroups[tkt.type] = [tkt]);\r\n });\r\n });\r\n });\r\n return ticketGroups;\r\n }\r\n\r\n updateFromPreviousSearches(\r\n previousItems: Record<ServiceType, BasketItem>\r\n ): void {}\r\n\r\n updateCanCombine(tkt: IrlTicketOption): void {\r\n (tkt.identifiers.allowedWith || []).forEach((allowed) => {\r\n if (!this._canCombine[tkt.type][allowed.journeyIdentifier]) {\r\n this._canCombine[tkt.type][allowed.journeyIdentifier] = [\r\n allowed.fareIdentifier\r\n ];\r\n } else {\r\n this._canCombine[tkt.type][allowed.journeyIdentifier].push(\r\n allowed.fareIdentifier\r\n );\r\n }\r\n });\r\n }\r\n\r\n // toggleTicketSelect(\r\n // ticket: IrlTicketGroup,\r\n // way: 'departs' | 'returns',\r\n // timeSlotId: string,\r\n // ticketId: string,\r\n // fareIdentifier: string,\r\n // ticketsGroups: IrlTicketGroups\r\n // ): IrlTicketGroups {\r\n // if (!ticket) {\r\n // return;\r\n // }\r\n // const keys = Object.keys(ticketsGroups);\r\n // let selectedTicket = null;\r\n // let departsTicket: IrlTicketOption[] = [];\r\n // let returnTicket: IrlTicketOption[] = [];\r\n // let isUnselected = false;\r\n // keys.forEach((key) => {\r\n // let group = ticketsGroups[key] as RailTicketGroup;\r\n\r\n // if (\r\n // group.ticketId === ticketId &&\r\n // group.selectedIndicies.includes(timeSlotId)\r\n // ) {\r\n // if (way === 'departs') {\r\n // group.selectedIndicies = [];\r\n // departsTicket = [];\r\n // returnTicket = [];\r\n // this._chosenInboundTicket = null;\r\n // this._chosenInboundJourney = null;\r\n // group.children.forEach((child) => {\r\n // child.selectedIndicies = [];\r\n // });\r\n // } else {\r\n // group.selectedIndicies = group.selectedIndicies.filter(\r\n // (Indicies) => Indicies !== timeSlotId\r\n // );\r\n // returnTicket = returnTicket.filter(\r\n // (Indicies) => Indicies !== group.header\r\n // );\r\n // }\r\n // } else {\r\n // if (\r\n // group.ticketId === ticketId &&\r\n // group.header.identifiers.fareIdentifier === fareIdentifier &&\r\n // way === 'departs'\r\n // ) {\r\n // group = this.clearUnneededTickets(way, group, timeSlotId);\r\n // group.selectedIndicies.push(timeSlotId);\r\n // way === 'departs'\r\n // ? departsTicket.push(group.header)\r\n // : returnTicket.push(group.header);\r\n // selectedTicket = group.header;\r\n // } else {\r\n // // may have to modify this for dual singles\r\n // if (way === 'departs') {\r\n // group.selectedIndicies = [];\r\n // } else {\r\n // selectedTicket = group.header;\r\n // }\r\n // }\r\n\r\n // group.children.forEach((child) => {\r\n // if (child.selectedIndicies.includes(timeSlotId)) {\r\n // if (way === 'departs') {\r\n // child.selectedIndicies = [];\r\n // departsTicket = [];\r\n // returnTicket = [];\r\n // this._chosenInboundTicket = null;\r\n // this._chosenInboundJourney = null;\r\n // isUnselected = true;\r\n // } else {\r\n // child.selectedIndicies = child.selectedIndicies.filter(\r\n // (Indicies) => Indicies !== timeSlotId\r\n // );\r\n // returnTicket = returnTicket.filter(\r\n // (Indicies) => Indicies !== group.header\r\n // );\r\n // }\r\n // } else {\r\n // if (\r\n // child.ticketId === ticketId &&\r\n // child.header.identifiers.fareIdentifier === fareIdentifier\r\n // ) {\r\n // if (\r\n // (way === 'departs' &&\r\n // child.direction !== RailDirection.Inbound) ||\r\n // (way !== 'departs' && child.direction === RailDirection.Inbound)\r\n // ) {\r\n // child = this.clearUnneededTickets(way, child, timeSlotId);\r\n // child.selectedIndicies.push(timeSlotId);\r\n // way === 'departs'\r\n // ? departsTicket.push(child.header)\r\n // : returnTicket.push(child.header);\r\n // selectedTicket = child.header;\r\n // } else if (isUnselected) {\r\n // child.selectedIndicies = [];\r\n // }\r\n // } else {\r\n // child.selectedIndicies = [];\r\n // }\r\n // }\r\n // });\r\n // }\r\n // });\r\n\r\n // // now we need to mark tickets as disabled if they are returns that do not match the selected return\r\n // // or on overlapping times\r\n // if (way === 'departs') {\r\n // this._chosenOutboundTicket = this.helpers.clone(selectedTicket);\r\n\r\n // // now go over the full results and find the matching timeslot\r\n // departsTicket.length\r\n // ? (this._chosenOutboundJourney = this.results.value[0].outbound.find(\r\n // (out: RailJourneyOption) => {\r\n // return out.identifiers.journeyIdentifier === timeSlotId;\r\n // }\r\n // ))\r\n // : (this._chosenOutboundJourney = null);\r\n\r\n // if (\r\n // this._chosenInboundTicket &&\r\n // this._chosenOutboundTicket.singleOrReturn === 'Return' &&\r\n // this._chosenOutboundTicket.identifiers.fareIdentifier !==\r\n // this._chosenInboundTicket.identifiers.fareIdentifier\r\n // ) {\r\n // console.warn('+++ Cannot combine fares, clearing inbound... +++');\r\n // this._chosenInboundTicket = null;\r\n // this._chosenInboundJourney = null;\r\n // }\r\n // } else if (way === 'returns') {\r\n // this._chosenInboundTicket = this.helpers.clone(selectedTicket);\r\n\r\n // this._chosenInboundTicket\r\n // ? (this._chosenInboundJourney = this.results.value[0].return.find(\r\n // (inT: RailJourneyOption) => {\r\n // return inT.identifiers.journeyIdentifier === timeSlotId;\r\n // }\r\n // ))\r\n // : (this._chosenInboundJourney = null);\r\n // }\r\n\r\n // console.log(this.chosenOutboundJourney);\r\n // console.log(this._chosenInboundJourney);\r\n // return ticketsGroups;\r\n // }\r\n\r\n /**\r\n * @description - determine if a fare can be combined with what we currently have selected\r\n */\r\n // canCombine(journeyIdentifier: string, fareIdentifier: string): boolean {\r\n // // may have to modify this for dual singles later on\r\n // if (\r\n // this._chosenOutboundTicket &&\r\n // this._chosenOutboundTicket.singleOrReturn === 'Return' &&\r\n // Number(journeyIdentifier) > 5\r\n // ) {\r\n // // greater than 5 only as we are not going to restrict outbounds\r\n // if (\r\n // this._canCombine[this._chosenOutboundTicket.type][\r\n // Number(journeyIdentifier)\r\n // ]?.includes(fareIdentifier) &&\r\n // this._chosenOutboundTicket.identifiers.fareIdentifier === fareIdentifier\r\n // ) {\r\n // return true;\r\n // }\r\n // return false;\r\n // }\r\n\r\n // return false;\r\n // }\r\n\r\n clearUnneededTickets(\r\n way: string,\r\n group: RailTicketGroup,\r\n timeSlotId: string\r\n ): RailTicketGroup {\r\n if (way === 'returns') {\r\n group.selectedIndicies = group.selectedIndicies.filter(\r\n (indicie: string) => {\r\n return Number(indicie) <= 5 || indicie === timeSlotId;\r\n }\r\n );\r\n } else {\r\n group.selectedIndicies = group.selectedIndicies.filter(\r\n (indicie: string) => {\r\n return Number(indicie) > 5 || indicie === timeSlotId;\r\n }\r\n );\r\n }\r\n\r\n return group;\r\n }\r\n\r\n // getRailStation(\r\n // code: string,\r\n // isLoading: BehaviorSubject<boolean>\r\n // ): Observable<IrlStation> {\r\n // if (code.length === 3) {\r\n // isLoading?.next(true);\r\n // return this.getRailStationFetcher.fetchList({ code }).pipe(\r\n // tap(() => isLoading?.next(false)),\r\n // take(1)\r\n // );\r\n // } else {\r\n // return of();\r\n // }\r\n // }\r\n\r\n // getSelectedirlTicketOption(\r\n // irlJourneyOption: IrlJourneyOption,\r\n // irlTicketGroup: IrlTicketGroup,\r\n // providerIndex: number\r\n // ): IrlTicketOption {\r\n // return irlJourneyOption.providers[providerIndex].ticketOptions.find(\r\n // (ticketOption) =>\r\n // ticketOption.type === irlTicketGroup.header.type &&\r\n // ticketOption.price === irlTicketGroup.header.price\r\n // );\r\n // }\r\n\r\n getLegsFromRailJourneyOption(railJourneyOption: IrlJourneyOption): any[] {\r\n let legs: any[] = [];\r\n if (railJourneyOption?.segments.length) {\r\n legs = railJourneyOption.segments.map((segment) => {\r\n return {\r\n operator: segment.operator,\r\n departureDateTime: segment.departDateTime,\r\n departureStationName: segment.depart,\r\n arrivalDateTime: segment.arriveDateTime,\r\n arrivalStationName: segment.arrive\r\n };\r\n });\r\n }\r\n return legs;\r\n }\r\n\r\n // async addSingleJourneyToBasket(\r\n // serviceId: string,\r\n // railQuery: SearchRailQueryVariables,\r\n // railJourneyOption: RailJourneyOption,\r\n // railTicketGroup: RailTicketGroup\r\n // ): Promise<boolean> {\r\n // if (railJourneyOption.unsellable) {\r\n // return Promise.resolve(false);\r\n // }\r\n // const intBasket: InternalBasketInterface =\r\n // await this.basketService.getDefaultBasket();\r\n // const basket = intBasket?.subject.value;\r\n // if (basket) {\r\n // const selectedRailTicketOption = this.getSelectedRailTicketOption(\r\n // railJourneyOption,\r\n // railTicketGroup,\r\n // 0\r\n // );\r\n // const legs = this.getLegsFromRailJourneyOption(railJourneyOption);\r\n // const ticketQueueList = selectedRailTicketOption.ticketQueueList.map(\r\n // (ticketQueueList) => {\r\n // return {\r\n // id: ticketQueueList.id,\r\n // name: ticketQueueList.name,\r\n // type: ticketQueueList.type\r\n // };\r\n // }\r\n // );\r\n\r\n // return this.basketService.addToBasket(\r\n // {\r\n // basket: basket.id,\r\n // service: serviceId,\r\n // detail: {\r\n // outwardDetail: {\r\n // arrivalDateTime: railJourneyOption.arriveDateTime,\r\n // arrivalStationName: railJourneyOption.to,\r\n // departureDateTime: railJourneyOption.departDateTime,\r\n // departureStationName: railJourneyOption.from,\r\n // supplierTickets: [\r\n // {\r\n // supplierName: railJourneyOption.providers[0].name,\r\n // ticketDescription: selectedRailTicketOption.type,\r\n // price: selectedRailTicketOption.price,\r\n // legs\r\n // }\r\n // ]\r\n // },\r\n // transactionIdentifier:\r\n // railJourneyOption.identifiers.transactionIdentifier,\r\n // outbound: {\r\n // fareIdentifiers: [\r\n // selectedRailTicketOption.identifiers.fareIdentifier\r\n // ],\r\n // journeyIdentifier:\r\n // selectedRailTicketOption.identifiers.journeyIdentifier\r\n // },\r\n // ticketQueueList\r\n // },\r\n // adults: railQuery.adults,\r\n // price: selectedRailTicketOption.price,\r\n // currency: selectedRailTicketOption.currency as CurrencyCode,\r\n // searchQuery: railQuery,\r\n // co2PerItem: railJourneyOption.co2PerItem,\r\n // co2PerPassenger: railJourneyOption.co2PerPassenger\r\n // },\r\n // intBasket,\r\n // this.searchService,\r\n // this.travellers\r\n // );\r\n // }\r\n // return Promise.resolve(false);\r\n // }\r\n\r\n // async addReturnJourneyToBasket(\r\n // serviceId: string,\r\n // railQuery: SearchRailQueryVariables,\r\n // outbound: RailJourneyOption,\r\n // inbound: RailJourneyOption,\r\n // railTicketGroup: RailTicketGroup\r\n // ): Promise<boolean> {\r\n // if (outbound.unsellable) {\r\n // return Promise.resolve(false);\r\n // }\r\n // const intBasket: InternalBasketInterface =\r\n // await this.basketService.getDefaultBasket();\r\n // const basket = intBasket?.subject.value;\r\n // if (basket) {\r\n // const selectedRailTicketOption = this.getSelectedRailTicketOption(\r\n // outbound,\r\n // railTicketGroup,\r\n // 0\r\n // );\r\n // const outboundLegs = this.getLegsFromRailJourneyOption(outbound);\r\n // const inboundLegs = this.getLegsFromRailJourneyOption(inbound);\r\n // const ticketQueueList = selectedRailTicketOption.ticketQueueList.map(\r\n // (ticketQueueList1: RailTicketQueue) => {\r\n // return {\r\n // id: ticketQueueList1.id,\r\n // name: ticketQueueList1.name,\r\n // type: ticketQueueList1.type\r\n // };\r\n // }\r\n // );\r\n\r\n // return this.basketService.addToBasket(\r\n // {\r\n // basket: basket.id,\r\n // service: serviceId,\r\n // detail: {\r\n // outwardDetail: {\r\n // arrivalDateTime: outbound.arriveDateTime,\r\n // arrivalStationName: outbound.to,\r\n // departureDateTime: outbound.departDateTime,\r\n // departureStationName: outbound.from,\r\n // supplierTickets: [\r\n // {\r\n // supplierName: outbound.providers[0].name,\r\n // ticketDescription: selectedRailTicketOption.type,\r\n // price: selectedRailTicketOption.price,\r\n // legs: outboundLegs\r\n // }\r\n // ]\r\n // },\r\n // inwardDetail: {\r\n // arrivalDateTime: inbound.arriveDateTime,\r\n // arrivalStationName: inbound.to,\r\n // departureDateTime: inbound.departDateTime,\r\n // departureStationName: inbound.from,\r\n // supplierTickets: [\r\n // {\r\n // supplierName: inbound.providers[0].name,\r\n // ticketDescription: selectedRailTicketOption.type,\r\n // legs: inboundLegs\r\n // }\r\n // ]\r\n // },\r\n // transactionIdentifier: outbound.identifiers.transactionIdentifier,\r\n // outbound: {\r\n // fareIdentifiers: [\r\n // selectedRailTicketOption.identifiers.fareIdentifier\r\n // ],\r\n // journeyIdentifier:\r\n // selectedRailTicketOption.identifiers.journeyIdentifier\r\n // },\r\n // ticketQueueList\r\n // },\r\n // adults: railQuery.adults,\r\n // price: railTicketGroup.header.price,\r\n // currency: selectedRailTicketOption.currency as CurrencyCode,\r\n // searchQuery: railQuery,\r\n // co2PerItem: outbound.co2PerItem,\r\n // co2PerPassenger: outbound.co2PerPassenger\r\n // },\r\n // intBasket,\r\n // this.searchService,\r\n // this.travellers\r\n // );\r\n // }\r\n // return Promise.resolve(false);\r\n // }\r\n\r\n // sortTicketPrices(tickets: TicketGroups): TicketGroups {\r\n // const sortTicketPrices = { ...tickets };\r\n // Object.keys(sortTicketPrices).map((key) => {\r\n // sortTicketPrices[key].sort((a: IrlTicketOption, b: IrlTicketOption) => {\r\n // const priceA = a.price,\r\n // priceB = b.price;\r\n // return priceA < priceB ? -1 : priceA > priceB ? 1 : 0;\r\n // });\r\n // });\r\n // return sortTicketPrices;\r\n // // }\r\n // sortTicketChildrenPrices(tickets: RailTicketGroups): RailTicketGroups {\r\n // const sortTicketPrices = { ...tickets };\r\n // Object.keys(sortTicketPrices).map((key) => {\r\n // sortTicketPrices[key].children.sort(\r\n // (a: RailTicketGroup, b: RailTicketGroup) => {\r\n // const priceA = a.header.price,\r\n // priceB = b.header.price;\r\n // return priceA < priceB ? -1 : priceA > priceB ? 1 : 0;\r\n // }\r\n // );\r\n // });\r\n // return sortTicketPrices;\r\n // }\r\n updateLowestPrice(results: IrlJourneyOptions[]): ICheapestPrice {\r\n if (!results.length) return null;\r\n const currency =\r\n results[0].outbound[0].providers[0].cheapestTicket.currency;\r\n const price = this.findCheapestTicket(results);\r\n return {\r\n amount: price,\r\n currencyCode: currency\r\n };\r\n }\r\n findCheapestTicket(results: IrlJourneyOptions[]): number {\r\n this._cheapestFirst = null;\r\n this._cheapestStandard = null;\r\n if (!results.length) return null;\r\n let cheapestArr: number[] = [];\r\n\r\n results.map((result) => {\r\n result.outbound.map((out) => {\r\n out.providers.map((tkt) => {\r\n let cheapestTicket: number = tkt.cheapestTicket.price;\r\n tkt.ticketOptions.map((tktOption) => {\r\n let tktPrice = tktOption.price;\r\n let tktClass = tktOption.class;\r\n if (\r\n tktClass === 'First' &&\r\n (this._cheapestFirst?.price > tktPrice || !this._cheapestFirst)\r\n ) {\r\n this._cheapestFirst = tktOption;\r\n } else if (\r\n tktClass === 'Standard' &&\r\n (this._cheapestStandard?.price > tktPrice ||\r\n !this._cheapestStandard)\r\n ) {\r\n this._cheapestStandard = tktOption;\r\n }\r\n if (tktPrice === cheapestTicket) {\r\n cheapestArr.push(cheapestTicket);\r\n }\r\n });\r\n });\r\n });\r\n });\r\n return Math.min(...cheapestArr);\r\n }\r\n}\r\n","import { take } from 'rxjs/operators';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\nimport {\r\n GetUserAddressResult,\r\n GetUserPhoneNumberResult,\r\n GetUserResult,\r\n Schema,\r\n SchemaFormat,\r\n SchemaType,\r\n Widgets\r\n} from '../types/types';\r\nimport {\r\n BaseGetUserFetcher,\r\n SearchGetUserFetcherType\r\n} from '../fetchers/user-fetcher';\r\nimport {\r\n Address,\r\n BasketItem,\r\n BookingAddress,\r\n BookingPhoneNumber,\r\n GetUserQueryVariables,\r\n PaymentMethodInput,\r\n PhoneNumber,\r\n SupplementaryBookingInfo,\r\n User,\r\n UserInfo\r\n} from '../types/graphql.types';\r\nimport { SupplementaryBookingInfoInterface } from '../interfaces/Isupplementary-booking-info-impl';\r\nimport { defaultTo } from 'lodash';\r\n\r\nconst SchemaString: Schema = {\r\n type: 'string'\r\n};\r\n\r\nconst PhoneNumberSchema: Schema = {\r\n type: 'object',\r\n properties: {\r\n countryCode: SchemaString,\r\n areaCode: SchemaString,\r\n number: SchemaString,\r\n extension: SchemaString\r\n },\r\n required: ['countryCode', 'areaCode', 'number', 'extension']\r\n};\r\nconst AddressSchema: Schema = {\r\n type: 'object',\r\n properties: {\r\n numberOrName: SchemaString,\r\n street: SchemaString,\r\n town: SchemaString,\r\n county: SchemaString,\r\n postcode: SchemaString,\r\n countryCode: SchemaString\r\n },\r\n required: [\r\n 'numberOrName',\r\n 'street',\r\n 'town',\r\n 'county',\r\n 'postcode',\r\n 'countryCode'\r\n ]\r\n};\r\nexport class AddressImpl {\r\n private details: BookingAddress = {\r\n numberOrName: '',\r\n street: '',\r\n town: '',\r\n county: '',\r\n postcode: '',\r\n countryCode: 'GB'\r\n };\r\n\r\n bookingAddress: BehaviorSubject<BookingAddress[]> = new BehaviorSubject<\r\n BookingAddress[]\r\n >([]);\r\n\r\n constructor(private helpers: BaseHelperRoutines) {}\r\n\r\n updateDetails(values: (BookingAddress | Address | GetUserAddressResult)[]) {\r\n this.bookingAddress.next(\r\n values.map((value: BookingAddress | Address | GetUserAddressResult) => {\r\n return this.helpers.sanatizeReturns<BookingAddress>(\r\n this.details,\r\n value\r\n );\r\n })\r\n );\r\n }\r\n}\r\n\r\nexport class PhoneNumberImpl {\r\n private details: BookingPhoneNumber = {\r\n countryCode: '',\r\n areaCode: '',\r\n number: '',\r\n extension: ''\r\n };\r\n\r\n bookingPhoneNUmber: BehaviorSubject<BookingPhoneNumber[]> =\r\n new BehaviorSubject<BookingPhoneNumber[]>([]);\r\n constructor(private helpers: BaseHelperRoutines) {}\r\n\r\n updateDetails(\r\n values: (BookingPhoneNumber | PhoneNumber | GetUserPhoneNumberResult)[]\r\n ) {\r\n this.bookingPhoneNUmber.next(\r\n values.map(\r\n (\r\n value: BookingPhoneNumber | PhoneNumber | GetUserPhoneNumberResult\r\n ): BookingPhoneNumber => {\r\n return this.helpers.sanatizeReturns<BookingPhoneNumber>(\r\n this.details,\r\n value\r\n );\r\n }\r\n )\r\n );\r\n }\r\n}\r\n\r\nexport class UserInfoImpl<Q extends SearchGetUserFetcherType> {\r\n get id(): string {\r\n return this.user.id;\r\n }\r\n\r\n get userAddress(): AddressImpl {\r\n if (this.userInfo.address === null) {\r\n this.setUpUserInfo();\r\n }\r\n return this.userInfo.address;\r\n }\r\n\r\n get userPhoneNumber(): PhoneNumberImpl {\r\n if (this.userInfo.address === null) {\r\n this.setUpUserInfo();\r\n }\r\n return this.userInfo.phoneNumber;\r\n }\r\n\r\n get userSupplementaryInfo(): any {\r\n if (this.userInfo.supplementaryInfo === null) {\r\n this.setUpUserInfo();\r\n }\r\n return this.userInfo.supplementaryInfo;\r\n }\r\n userInfo: {\r\n id: string;\r\n address: AddressImpl;\r\n phoneNumber: PhoneNumberImpl;\r\n supplementaryInfo: Schema;\r\n };\r\n userDetails: GetUserResult = null;\r\n\r\n constructor(\r\n public user: User,\r\n private getUserFetcher: BaseGetUserFetcher<Q>,\r\n private helpers: BaseHelperRoutines,\r\n private perPassengerPhoneNumber: boolean,\r\n private perPassengerAddress: boolean,\r\n private perPassengerSupplementaryBookingInfoSchema: Schema\r\n ) {\r\n this.userInfo = {\r\n id: user.id,\r\n address: null,\r\n phoneNumber: null,\r\n supplementaryInfo: null\r\n };\r\n }\r\n\r\n private setUpUserInfo() {\r\n this.userInfo.address = new AddressImpl(this.helpers);\r\n this.userInfo.phoneNumber = new PhoneNumberImpl(this.helpers);\r\n this.userInfo.supplementaryInfo =\r\n this.perPassengerSupplementaryBookingInfoSchema;\r\n if (this.user.id) {\r\n this.getUserFetcher\r\n .fetchOne({ id: this.user.id })\r\n .pipe(take(1))\r\n .subscribe((result: GetUserResult) => {\r\n if (result) {\r\n this.userDetails = result;\r\n this.userInfo.address.updateDetails(result?.addresses);\r\n this.userInfo.phoneNumber.updateDetails(result?.phoneNumbers);\r\n }\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport class SupplementaryBookingInfoImpl<Q extends SearchGetUserFetcherType>\r\n implements SupplementaryBookingInfoInterface\r\n{\r\n // From SupplementartBookingInfo\r\n\r\n get perItemAddress(): boolean {\r\n return !!this.basketItem.perItemAddress;\r\n }\r\n\r\n get perItemPhoneNumber(): boolean {\r\n return !!this.basketItem.perItemPhoneNumber;\r\n }\r\n\r\n get perItemSupplementarySchema(): Schema {\r\n return this.basketItem.perItemSupplementaryBookingInfoSchema;\r\n }\r\n\r\n get perPassengerAddress(): boolean {\r\n return !!this.basketItem.perPassengerAddress;\r\n }\r\n\r\n get perPassengerPhoneNumber(): boolean {\r\n return !!this.basketItem.perPassengerPhoneNumber;\r\n }\r\n\r\n get perPassengerSupplementaryBookingInfoSchema(): Schema {\r\n return this.basketItem.perPassengerSupplementaryBookingInfoSchema;\r\n }\r\n\r\n // aditional fields\r\n address: AddressImpl;\r\n phoneNumber: PhoneNumberImpl;\r\n userInfo: UserInfoImpl<Q>[];\r\n hasDetails: boolean = false;\r\n constructor(\r\n private basketItem: BasketItem,\r\n private helpers: BaseHelperRoutines,\r\n getUserFetcher: BaseGetUserFetcher<Q>\r\n ) {\r\n this.basketItem.perPassengerSupplementaryBookingInfoSchema =\r\n basketItem.perPassengerSupplementaryBookingInfoSchema\r\n ? this.processSchema(\r\n this.basketItem.perPassengerSupplementaryBookingInfoSchema\r\n )\r\n : null;\r\n this.userInfo = this.basketItem.users.map((user: User) => {\r\n return new UserInfoImpl(\r\n user,\r\n getUserFetcher,\r\n helpers,\r\n this.basketItem.perPassengerPhoneNumber,\r\n this.basketItem.perPassengerAddress,\r\n this.basketItem.perPassengerSupplementaryBookingInfoSchema\r\n );\r\n });\r\n\r\n this.address = new AddressImpl(this.helpers);\r\n this.phoneNumber = new PhoneNumberImpl(this.helpers);\r\n\r\n this.basketItem.perItemSupplementaryBookingInfoSchema = this.basketItem\r\n .perItemSupplementaryBookingInfoSchema\r\n ? this.processSchema(\r\n this.basketItem.perItemSupplementaryBookingInfoSchema || {}\r\n )\r\n : null;\r\n }\r\n\r\n processSchema(schema: Schema) {\r\n console.warn('processing: ', schema);\r\n schema = this.helpers.clone(schema);\r\n this.hasDetails =\r\n this.perItemAddress ||\r\n this.perItemPhoneNumber ||\r\n this.perPassengerAddress ||\r\n this.perPassengerPhoneNumber;\r\n Object.keys(schema.properties || {}).forEach((key: string) => {\r\n console.log('here: ', key);\r\n this.hasDetails = true;\r\n const item: Schema = schema.properties[key];\r\n if (item.type === 'object') {\r\n schema.properties[key] = {\r\n ...this.processSchema(item),\r\n format: SchemaFormat.object\r\n };\r\n }\r\n item.format =\r\n item.format ||\r\n this.schemaWidgetToFormat(item.widget) ||\r\n this.schemaTypeToFormat(item.type);\r\n if (item.oneOf && item.oneOf.length > 0) {\r\n item.format = SchemaFormat.select;\r\n }\r\n });\r\n console.log(`+++ has Details: ${this.hasDetails} +++`);\r\n return schema;\r\n }\r\n\r\n schemaWidgetToFormat(widget: string): SchemaFormat {\r\n switch (widget) {\r\n case Widgets.COUNTRY_CODE:\r\n return SchemaFormat.countryCode;\r\n default:\r\n return null;\r\n }\r\n }\r\n schemaTypeToFormat(type: SchemaType): SchemaFormat {\r\n switch (type) {\r\n case 'string':\r\n return SchemaFormat.string;\r\n case 'integer':\r\n return SchemaFormat.integer;\r\n case 'object':\r\n return SchemaFormat.object;\r\n case 'array':\r\n return SchemaFormat.array;\r\n case 'boolean':\r\n return SchemaFormat.boolean;\r\n default:\r\n return SchemaFormat.string;\r\n }\r\n }\r\n\r\n createSupplemtalBookingInformation(values: {\r\n [key: string]: any;\r\n }): SupplementaryBookingInfo {\r\n const newValue: SupplementaryBookingInfo = {\r\n basketItem: this.basketItem.id,\r\n userInfo: [],\r\n supplementaryInfo: {},\r\n paymentMethodDetails: {} as PaymentMethodInput\r\n };\r\n if (values.perItemAddress !== undefined) {\r\n newValue.address = this.helpers.toStrings(\r\n values.perItemAddress,\r\n AddressSchema\r\n );\r\n }\r\n if (values.perItemPhoneNumber !== undefined) {\r\n newValue.phoneNumber = this.helpers.toStrings(\r\n values.perItemPhoneNumber,\r\n PhoneNumberSchema\r\n );\r\n }\r\n if (values.perItemSupplementarySchema !== undefined) {\r\n newValue.supplementaryInfo = this.helpers.toStrings(\r\n values.perItemSupplementarySchema,\r\n this.perItemSupplementarySchema\r\n );\r\n }\r\n\r\n newValue.userInfo = this.userInfo.map(\r\n (userInfo: UserInfoImpl<Q>, index: number) => {\r\n const userValue: UserInfo = { id: userInfo.id, supplementaryInfo: {} };\r\n const thisUserSupplemental = values['user_' + index] || {};\r\n\r\n if (thisUserSupplemental.perPassengerAddress !== undefined) {\r\n userValue.address = this.helpers.toStrings(\r\n thisUserSupplemental.perPassengerAddress,\r\n AddressSchema\r\n );\r\n }\r\n if (thisUserSupplemental.perPassengerPhoneNumber !== undefined) {\r\n userValue.phoneNumber = this.helpers.toStrings(\r\n thisUserSupplemental.perPassengerPhoneNumber,\r\n PhoneNumberSchema\r\n );\r\n }\r\n if (\r\n thisUserSupplemental.perPassengerSupplementaryBookingInfoSchema !==\r\n undefined\r\n ) {\r\n userValue.supplementaryInfo = this.helpers.toStrings(\r\n thisUserSupplemental.perPassengerSupplementaryBookingInfoSchema,\r\n this.perPassengerSupplementaryBookingInfoSchema\r\n );\r\n }\r\n\r\n return userValue;\r\n }\r\n );\r\n return newValue;\r\n }\r\n}\r\n","export class UserFavorurite {\r\n static MaxFlightClass = new UserFavorurite('MaxFlightClass');\r\n static SSO_no_password = new UserFavorurite('SSO_no_password');\r\n\r\n constructor(public value: string) {}\r\n}\r\n\r\nexport class Suppliers {\r\n static non = new Suppliers('non');\r\n static EVI = new Suppliers('evi');\r\n constructor(public value: string) {}\r\n}\r\n","export interface Meta {\r\n not_matched_leg_indexes: any[];\r\n}\r\n\r\nexport interface Meta2 {\r\n index: number;\r\n}\r\n\r\nexport interface Datum {\r\n id: string;\r\n meta: Meta2;\r\n type: string;\r\n}\r\n\r\nexport interface Legs {\r\n data: Datum[];\r\n}\r\n\r\nexport interface Relationships {\r\n legs: Legs;\r\n}\r\n\r\nexport interface Data {\r\n id: string;\r\n relationships: Relationships;\r\n type: string;\r\n}\r\n\r\nexport interface Datum2 {\r\n id: string;\r\n type: string;\r\n}\r\n\r\nexport interface LegFares {\r\n data: Datum2[];\r\n}\r\n\r\nexport interface Data2 {\r\n id: string;\r\n type: string;\r\n}\r\n\r\nexport interface Photo {\r\n data: Data2;\r\n}\r\n\r\nexport interface Datum3 {\r\n id: string;\r\n type: string;\r\n}\r\n\r\nexport interface PhotoAttachments {\r\n data: Datum3[];\r\n}\r\n\r\nexport interface Datum4 {\r\n id: string;\r\n type: string;\r\n}\r\n\r\nexport interface Upas {\r\n data: Datum4[];\r\n}\r\n\r\nexport interface Data3 {\r\n id: string;\r\n type: string;\r\n}\r\n\r\nexport interface Fare {\r\n data: Data3;\r\n}\r\n\r\nexport interface Datum5 {\r\n id: string;\r\n type: string;\r\n}\r\n\r\nexport interface LegFareSegments {\r\n data: Datum5[];\r\n}\r\n\r\nexport interface Relationships2 {\r\n fare: Fare;\r\n leg_fare_segments: LegFareSegments;\r\n leg_fares: LegFares;\r\n photo_attachments: PhotoAttachments;\r\n photo: Photo;\r\n upas: Upas;\r\n}\r\n\r\nexport interface Attributes {\r\n brand_codes: string[];\r\n brand_name: string;\r\n caption: string;\r\n categories: string[];\r\n cta_text: string;\r\n cta_url: string;\r\n description: string;\r\n fees: any[];\r\n headline: string;\r\n large_icon_url: string;\r\n large_url: string;\r\n medium_square_url: string;\r\n mk_flt_no: string;\r\n small_icon_url: string;\r\n thumb_url: string;\r\n url: string;\r\n}\r\n\r\nexport enum IncludedType {\r\n Leg = 'leg',\r\n Photo = 'photo',\r\n PhotoAttachment = 'photo_attachment',\r\n Upa = 'upa',\r\n}\r\nexport interface Included {\r\n attributes: Attributes;\r\n id: string;\r\n relationships: Relationships2;\r\n type: IncludedType;\r\n}\r\n\r\nexport interface RouteHappyResponse {\r\n data: Data;\r\n included: Included[];\r\n meta: Meta;\r\n}\r\n","import { Observable } from 'rxjs';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { BaseNetworkCall } from '../classes/base-network-call';\r\nimport { ApolloQueryResult } from '@apollo/client/core';\r\n\r\nexport abstract class FetchableObject<\r\n Q extends { fetch: (a: A) => Observable<ApolloQueryResult<M>> },\r\n A,\r\n R,\r\n P,\r\n M\r\n> extends BaseNetworkCall<Q, A, R, P> {\r\n constructor(private query: Q, modalService: BaseModalOpenerService) {\r\n super(modalService);\r\n }\r\n\r\n public fetchOne(queryArgs?: A): Observable<P> {\r\n return this.processCall(this.query.fetch(queryArgs));\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport {\r\n GetUserBasketQuery,\r\n GetUserBasketQueryVariables\r\n} from '../types/graphql.types';\r\nimport { GetUserBasketResult } from '../types/types';\r\nimport { FetchableObject } from './object-fetchable-enterprise';\r\n\r\ntype R = { getUserBasket: P };\r\ntype P = GetUserBasketResult;\r\ntype A = GetUserBasketQueryVariables;\r\ntype M = GetUserBasketQuery;\r\n\r\nexport type GetBasketFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseGetBasketFetcher<\r\n Q extends GetBasketFetcherType\r\n> extends FetchableObject<Q, A, R, P, M> {\r\n constructor(getBasketGQL: Q, modalService: BaseModalOpenerService) {\r\n super(getBasketGQL, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data?.getUserBasket;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { BaseNetworkCall } from '../classes/base-network-call';\r\nimport { Unpacked } from '../types/types';\r\n\r\nexport abstract class FetchableList<\r\n Q extends { fetch: (a: A) => Observable<ApolloQueryResult<M>> },\r\n A,\r\n R,\r\n P,\r\n M\r\n> extends BaseNetworkCall<Q, A, R, P> {\r\n constructor(\r\n private query: Q,\r\n private helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(modalService);\r\n }\r\n\r\n public fetchList(queryArgs?: A): Observable<P> {\r\n return this.processCall(this.query.fetch(queryArgs));\r\n }\r\n\r\n public fetchKeyedObject(\r\n fieldToIndexOn: string,\r\n queryArgs?: A\r\n ): Observable<{ [key: string]: Unpacked<P> }> {\r\n return this.processCall(this.query.fetch(queryArgs)).pipe(\r\n map((toCreate: P) => {\r\n return toCreate\r\n ? this.helpers.arrayToObject<Unpacked<P>>(\r\n toCreate as unknown as any[],\r\n fieldToIndexOn\r\n )\r\n : null;\r\n })\r\n );\r\n }\r\n\r\n public fetchKeyedObjectArray(\r\n fieldToIndexOn: string,\r\n queryArgs?: A\r\n ): Observable<{ [key: string]: Unpacked<P>[] }> {\r\n return this.processCall(this.query.fetch(queryArgs)).pipe(\r\n map((toCreate: P) => {\r\n return toCreate\r\n ? this.helpers.arrayToObjectArray<Unpacked<P>>(\r\n toCreate as unknown as any[],\r\n fieldToIndexOn\r\n )\r\n : null;\r\n })\r\n );\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { Observable } from 'rxjs';\r\nimport { CabhireQuoteResultArray } from '../types/types';\r\nimport {\r\n SearchCabHireQuery,\r\n SearchCabHireQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { searchCabHire: { results: P } };\r\ntype P = CabhireQuoteResultArray;\r\ntype A = SearchCabHireQueryVariables;\r\ntype M = SearchCabHireQuery;\r\n\r\nexport type CabhireQuoteFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseCabhireQuoteFetcher<\r\n Q extends CabhireQuoteFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n gql: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(gql, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.searchCabHire?.results;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { Observable } from 'rxjs';\r\nimport { CarHireQuoteResultArray } from '../types/types';\r\nimport {\r\n SearchCarHireQuery,\r\n SearchCarHireQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { searchCarHire: { results: P } };\r\ntype P = CarHireQuoteResultArray;\r\ntype A = SearchCarHireQueryVariables;\r\ntype M = SearchCarHireQuery;\r\n\r\nexport type CarHireFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseCarhireQuoteFetcher<\r\n Q extends CarHireFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n gql: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(gql, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.searchCarHire?.results;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport {\r\n CarHireDetailRequestResponse,\r\n CarHireAvailabilityDetailRequestQuery,\r\n CarHireAvailabilityDetailRequestQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { carHireAvailabilityDetailRequest: P };\r\ntype P = CarHireDetailRequestResponse;\r\ntype A = CarHireAvailabilityDetailRequestQueryVariables;\r\ntype M = CarHireAvailabilityDetailRequestQuery;\r\n\r\nexport type CarHireAvailabilityDetailFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseCarHireAvailabilityDetailFetcher<\r\n Q extends CarHireAvailabilityDetailFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n gql: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(gql, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data.carHireAvailabilityDetailRequest;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { Observable } from 'rxjs';\r\nimport { FlightAllQuoteResult } from '../types/types';\r\nimport {\r\n SearchFlightsV2Query,\r\n SearchFlightsV2QueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { searchFlightsV2: { results: P } };\r\ntype P = FlightAllQuoteResult;\r\ntype A = SearchFlightsV2QueryVariables;\r\ntype M = SearchFlightsV2Query;\r\n\r\nexport type FlightQuoteFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\n\r\nexport class BaseFlightQuoteFetcher<\r\n Q extends FlightQuoteFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n gql: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(gql, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.searchFlightsV2?.results;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { SearchRailStationsResult } from '../types/types';\r\nimport {\r\n GetRailStationQuery,\r\n GetRailStationQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { getRailStation: P };\r\ntype P = SearchRailStationsResult;\r\ntype A = GetRailStationQueryVariables;\r\ntype M = GetRailStationQuery;\r\n\r\nexport type GetRailStationFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseGetRailStationFetcher<\r\n Q extends GetRailStationFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n gql: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(gql, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.getRailStation;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { Observable } from 'rxjs';\r\nimport { UserBasketResult } from '../types/types';\r\nimport {\r\n GetUserBasketsQuery,\r\n GetUserBasketsQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype A = GetUserBasketsQueryVariables;\r\ntype R = { getUserBaskets: UserBasketResult[] };\r\ntype P = UserBasketResult[];\r\ntype M = GetUserBasketsQuery;\r\n\r\nexport type GetUserBasketsFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseGetUserBasketsFetcher<\r\n Q extends GetUserBasketsFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n getUserBasketsGQL: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(getUserBasketsGQL, helpers, modalService);\r\n }\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data.getUserBaskets;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport {\r\n GetUserRecentSearchesQuery,\r\n GetUserRecentSearchesQueryVariables\r\n} from '../types/graphql.types';\r\nimport { GetUserRecentSearchesResultArray } from '../types/types';\r\n\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\n\r\ntype R = { getUserRecentSearches: P };\r\ntype P = GetUserRecentSearchesResultArray;\r\ntype A = GetUserRecentSearchesQueryVariables;\r\ntype M = GetUserRecentSearchesQuery;\r\n\r\nexport type GetUserRecentSearchesFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseGetUserRecentSearchesFetcher<\r\n Q extends GetUserRecentSearchesFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n getUserRecentSearchesGQL: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(getUserRecentSearchesGQL, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data.getUserRecentSearches;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { Observable } from 'rxjs';\r\nimport { GetMiAutoSugestionArray } from '../types/types';\r\nimport {\r\n GetUserMiAutoSuggestValuesQuery,\r\n GetUserMiAutoSuggestValuesQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { getUserMIAutoSuggestValues: P };\r\ntype P = GetMiAutoSugestionArray;\r\ntype A = GetUserMiAutoSuggestValuesQueryVariables;\r\ntype M = GetUserMiAutoSuggestValuesQuery;\r\n\r\nexport type MiAutoSuggestFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\n\r\nexport class BaseGetMiAutoSugestionFetcher<\r\n Q extends MiAutoSuggestFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n query: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(query, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data.getUserMIAutoSuggestValues;\r\n }\r\n}\r\n","import { ApolloQueryResult, FetchResult } from '@apollo/client/core';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable, of } from 'rxjs';\r\nimport { HotelAvalibilityQuoteResultArray } from '../types/types';\r\nimport {\r\n GetMultipleHotelsAvailabilityQuery,\r\n QueryGetMultipleHotelsAvailabilityArgs\r\n} from '../types/graphql.types';\r\nimport { catchError, map, take } from 'rxjs/operators';\r\n\r\ntype R = { getMultipleHotelsAvailability: { results: P } };\r\ntype P = HotelAvalibilityQuoteResultArray;\r\ntype A = QueryGetMultipleHotelsAvailabilityArgs;\r\ntype M = GetMultipleHotelsAvailabilityQuery;\r\n\r\nexport type HotelAvalinilityFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseHotelAvalibilityQuoteFetcher<\r\n Q extends HotelAvalinilityFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n gql: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(gql, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.getMultipleHotelsAvailability.results;\r\n }\r\n\r\n processCall(\r\n stream: Observable<\r\n FetchResult<{}, Record<string, any>, Record<string, any>>\r\n >\r\n ): Observable<P> {\r\n return stream.pipe(\r\n take(1),\r\n map((results: ApolloQueryResult<R>) => {\r\n this.checkError(results.errors);\r\n return this.getDataFromResult(results);\r\n }),\r\n catchError((error: any) => {\r\n this.checkError(error);\r\n return of({} as P);\r\n })\r\n );\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { Observable } from 'rxjs';\r\nimport { HotelQuoteResultArray } from '../types/types';\r\nimport {\r\n SearchHotelsQuery,\r\n SearchHotelsQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { searchHotels: { results: P } };\r\ntype P = HotelQuoteResultArray;\r\ntype A = SearchHotelsQueryVariables;\r\ntype M = SearchHotelsQuery;\r\n\r\nexport type HotelQuoteFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\n\r\nexport class BaseHotelQuoteFetcher<\r\n Q extends HotelQuoteFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n gql: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(gql, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.searchHotels?.results;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { LoungeQuoteResultArray } from '../types/types';\r\nimport {\r\n SearchLoungesQuery,\r\n SearchLoungesQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { searchLounges: { results: P } };\r\ntype P = LoungeQuoteResultArray;\r\ntype A = SearchLoungesQueryVariables;\r\ntype M = SearchLoungesQuery;\r\n\r\nexport type LoungeQuoteFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseLoungeQuoteFetcher<\r\n Q extends LoungeQuoteFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n gql: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(gql, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.searchLounges?.results;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { Observable } from 'rxjs';\r\nimport { ParkingQuoteResultArray } from '../types/types';\r\nimport {\r\n SearchParkingQuery,\r\n SearchParkingQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { searchParking: { results: P } };\r\ntype P = ParkingQuoteResultArray;\r\ntype A = SearchParkingQueryVariables;\r\ntype M = SearchParkingQuery;\r\n\r\nexport type ParkingQuoteFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseParkingQuoteFetcher<\r\n Q extends ParkingQuoteFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n gql: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(gql, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.searchParking?.results;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { RailQuoteResultArray } from '../types/types';\r\nimport {\r\n SearchRailQuery,\r\n SearchRailQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { searchRail: { results: P } };\r\ntype P = RailQuoteResultArray;\r\ntype A = SearchRailQueryVariables;\r\ntype M = SearchRailQuery;\r\n\r\nexport type RailQuoteFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseRailQuoteFetcher<\r\n Q extends RailQuoteFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n gql: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(gql, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.searchRail?.results;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { IrlQuoteResultArray } from '../types/types';\r\nimport {\r\n SearchIrlQuery,\r\n SearchIrlQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { searchIrl: { results: P } };\r\ntype P = IrlQuoteResultArray;\r\ntype A = SearchIrlQueryVariables;\r\ntype M = SearchIrlQuery;\r\n\r\nexport type IrlQuoteFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseIrlQuoteFetcher<\r\n Q extends IrlQuoteFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n gql: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(gql, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.searchIrl?.results;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { FetchableObject } from './object-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';;\r\nimport { AirlinesSearchResultArray } from '../types/types';\r\nimport {\r\n SearchAirlinesQuery,\r\n SearchAirlinesQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { searchAirlines: P };\r\ntype P = AirlinesSearchResultArray;\r\ntype A = SearchAirlinesQueryVariables;\r\ntype M = SearchAirlinesQuery;\r\n\r\nexport type SearchAirlinesQuoteFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\n\r\nexport class BaseSearchAirlinesFetcher<\r\n Q extends SearchAirlinesQuoteFetcherType\r\n> extends FetchableObject<Q, A, R, P, M> {\r\n constructor(query: Q, modalService: BaseModalOpenerService) {\r\n super(query, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data.searchAirlines;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { FetchableObject } from './object-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { AirportSearchResultsArray } from '../types/types';\r\nimport {\r\n SearchAirportsQuery,\r\n SearchAirportsQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { searchAirports: P };\r\ntype P = AirportSearchResultsArray;\r\ntype A = SearchAirportsQueryVariables;\r\ntype M = SearchAirportsQuery;\r\n\r\nexport type SearchAirportsQuoteFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseSearchAirportsFetcher<\r\n Q extends SearchAirportsQuoteFetcherType\r\n> extends FetchableObject<Q, A, R, P, M> {\r\n constructor(query: Q, modalService: BaseModalOpenerService) {\r\n super(query, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data.searchAirports;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { SearchCitiesResultArray } from '../types/types';\r\nimport {\r\n SearchCitiesQuery,\r\n SearchCitiesQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { searchCities: P };\r\ntype P = SearchCitiesResultArray;\r\ntype A = SearchCitiesQueryVariables;\r\ntype M = SearchCitiesQuery;\r\n\r\nexport type SearchCitiesQuoteFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseSearchCityFetcher<\r\n Q extends SearchCitiesQuoteFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n queryGQL: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(queryGQL, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data?.searchCities;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { FetchableObject } from './object-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { SearchConfermaCitiesResultArray } from '../types/types';\r\nimport {\r\n SearchConfermaCitiesQuery,\r\n SearchConfermaCitiesQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { searchConfermaCities: P };\r\ntype P = SearchConfermaCitiesResultArray;\r\ntype A = SearchConfermaCitiesQueryVariables;\r\ntype M = SearchConfermaCitiesQuery;\r\n\r\nexport type SearchConfermaCitiesQuoteFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseSearchConfermaCityFetcher<\r\n Q extends SearchConfermaCitiesQuoteFetcherType\r\n> extends FetchableObject<Q, A, R, P, M> {\r\n constructor(\r\n queryGQL: Q,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(queryGQL, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data?.searchConfermaCities;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n SearchPostcodesResult,\r\n SearchPostcodesResultArray\r\n} from '../types/types';\r\nimport {\r\n SearchPostcodesQuery,\r\n SearchPostcodesQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { getPostcodeDetails: SearchPostcodesResult };\r\ntype P = SearchPostcodesResultArray;\r\ntype A = SearchPostcodesQueryVariables;\r\ntype M = SearchPostcodesQuery;\r\n\r\nexport type SearchPostcodesQuoteFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseSearchPostcodeFetcher<\r\n Q extends SearchPostcodesQuoteFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n queryGQL: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(queryGQL, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return [results.data?.getPostcodeDetails];\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { SearchRailStationsResultArray } from '../types/types';\r\nimport {\r\n SearchRailStationsQuery,\r\n SearchRailStationsQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { searchRailStations: P };\r\ntype P = SearchRailStationsResultArray;\r\ntype A = SearchRailStationsQueryVariables;\r\ntype M = SearchRailStationsQuery;\r\n\r\nexport type SearchRailStationsFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\n\r\nexport class BaseSearchRailStationsFetcher<\r\n Q extends SearchRailStationsFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n queryGQL: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(queryGQL, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data?.searchRailStations;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { SearchUserCanBookForResult } from '../types/types';\r\nimport {\r\n SearchUserCanBookForQuery,\r\n SearchUserCanBookForQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { searchUserCanBookFor: P };\r\ntype P = SearchUserCanBookForResult;\r\ntype A = SearchUserCanBookForQueryVariables;\r\ntype M = SearchUserCanBookForQuery;\r\n\r\nexport type SearchUserCanBookForFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\n\r\nexport class BaseSearchUsersCanBookForFetcher<\r\n Q extends SearchUserCanBookForFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n queryGQL: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(queryGQL, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data?.searchUserCanBookFor;\r\n }\r\n}\r\n","import { FetchableObject } from './object-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { ApolloQueryResult } from '@apollo/client/core';\r\nimport { GetUserQuery, GetUserQueryVariables } from '../types/graphql.types';\r\nimport { GetUserResult } from '../types/types';\r\n\r\ntype A = GetUserQueryVariables;\r\ntype R = { getUser: P };\r\ntype P = GetUserResult;\r\ntype M = GetUserQuery;\r\n\r\nexport type SearchGetUserFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\n\r\nexport class BaseGetUserFetcher<\r\n Q extends SearchGetUserFetcherType\r\n> extends FetchableObject<Q, A, R, P, M> {\r\n constructor(getUserGQL: Q, modalService: BaseModalOpenerService) {\r\n super(getUserGQL, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data.getUser;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { UserMessagesResult } from '../types/types';\r\nimport {\r\n GetUserMessagesQuery,\r\n GetUserMessagesQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { getUserMessages: P };\r\ntype P = UserMessagesResult;\r\ntype A = GetUserMessagesQueryVariables;\r\ntype M = GetUserMessagesQuery;\r\n\r\nexport type UserMessageFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseUserMessagesFetcher<\r\n Q extends UserMessageFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n getUserMessagesGQL: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(getUserMessagesGQL, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.getUserMessages;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { UserProductsResult } from '../types/types';\r\nimport {\r\n GetUserServicesQuery,\r\n GetUserServicesQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { getUserServices: P };\r\ntype P = UserProductsResult;\r\ntype A = GetUserServicesQueryVariables;\r\ntype M = GetUserServicesQuery;\r\n\r\nexport type UserProductsFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\n\r\nexport class BaseUserProductsFetcher<\r\n Q extends UserProductsFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n getUserServicesGQL: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(getUserServicesGQL, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.getUserServices;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { UserUiConfigsResult } from '../types/types';\r\nimport {\r\n GetUserUiConfigsQuery,\r\n GetUserUiConfigsQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { getUserUIConfigs: { all: P } };\r\ntype P = UserUiConfigsResult;\r\ntype A = GetUserUiConfigsQueryVariables;\r\ntype M = GetUserUiConfigsQuery;\r\n\r\nexport type UserUiConfigsFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\n\r\nexport class BaseUserUiConfigsFetcher<\r\n Q extends UserUiConfigsFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n getUserUiConfigsGQL: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(getUserUiConfigsGQL, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.getUserUIConfigs.all;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { UserAddressesResult } from '../types/types';\r\nimport {\r\n GetUserAddressesQuery,\r\n GetUserAddressesQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { getUserAddresses: P };\r\ntype P = UserAddressesResult;\r\ntype A = GetUserAddressesQueryVariables;\r\ntype M = GetUserAddressesQuery;\r\n\r\nexport type UserAddressFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseUserAddressesFetcher<\r\n Q extends UserAddressFetcherType\r\n > extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n getUserAddressGQL: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(getUserAddressGQL, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.getUserAddresses;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { CarHireDepotResultArray } from '../types/types';\r\nimport {\r\n SearchCitiesQuery,\r\n QueryGetCarHireDepotsArgs\r\n} from '../types/graphql.types';\r\n\r\ntype R = { getCarHireDepots: P };\r\ntype P = CarHireDepotResultArray;\r\ntype A = QueryGetCarHireDepotsArgs;\r\n// type M = SearchCitiesQuery;\r\n\r\nexport type SearchDepotQuoteFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<any>>;\r\n};\r\nexport class BaseSearchDepotFetcher<\r\n Q extends SearchDepotQuoteFetcherType\r\n> extends FetchableList<Q, A, R, P, any> {\r\n constructor(\r\n queryGQL: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(queryGQL, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return <any>results.data.getCarHireDepots;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { GetUserCompanyOfficesResultArray } from '../types/types';\r\nimport {\r\n GetUserCompanyOfficesQuery,\r\n GetUserCompanyOfficesQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = {getUserCompanyOffices: P };\r\ntype P = GetUserCompanyOfficesResultArray;\r\ntype A = GetUserCompanyOfficesQueryVariables;\r\ntype M = GetUserCompanyOfficesQuery;\r\n\r\nexport type GetUserCompanyOfficesQuoteFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseGetUserCompanyOfficesFetcher<\r\n Q extends GetUserCompanyOfficesQuoteFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n queryGQL: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(queryGQL, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data?.getUserCompanyOffices;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { SearchHotelChainsResultArray } from '../types/types';\r\nimport {\r\n SearchHotelChainsQuery,\r\n SearchHotelChainsQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { searchHotelChains: P };\r\ntype P = SearchHotelChainsResultArray;\r\ntype A = SearchHotelChainsQueryVariables;\r\ntype M = SearchHotelChainsQuery;\r\n\r\nexport type SearchHotelChainsQuoteFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseSearchHotelChainsFetcher<\r\n Q extends SearchHotelChainsQuoteFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n queryGQL: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(queryGQL, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data?.searchHotelChains;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { ConfermaOfficeNameResult } from '../types/types';\r\nimport {\r\n GetConfermaOfficeNamesQuery,\r\n GetConfermaOfficeNamesQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { getConfermaOfficeNames: P };\r\ntype P = ConfermaOfficeNameResult;\r\ntype A = GetConfermaOfficeNamesQueryVariables;\r\ntype M = GetConfermaOfficeNamesQuery;\r\n\r\nexport type ConfermaOfficeNameFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseConfermaOfficeNamesFetcher<\r\n Q extends ConfermaOfficeNameFetcherType\r\n > extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n getUserAddressGQL: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(getUserAddressGQL, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.getConfermaOfficeNames;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { Observable } from 'rxjs';\r\nimport { UserBasketResult } from '../types/types';\r\nimport {\r\n GetUserBasketsQuery,\r\n GetUserCurrentCarbonAllowanceQuery,\r\n GetUserCurrentCarbonAllowanceQueryVariables,\r\n CarbonAllowance\r\n} from '../types/graphql.types';\r\n\r\ntype A = GetUserCurrentCarbonAllowanceQueryVariables;\r\ntype R = { getUserCurrentCarbonAllowance: CarbonAllowance };\r\ntype P = CarbonAllowance;\r\ntype M = GetUserCurrentCarbonAllowanceQuery;\r\n\r\nexport type GetUserCurrentCarbonAllowanceType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseGetUserCurrentCarbonAllowanceFetcher<\r\n Q extends GetUserCurrentCarbonAllowanceType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n getUserBasketsGQL: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(getUserBasketsGQL, helpers, modalService);\r\n }\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data.getUserCurrentCarbonAllowance;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { SearchRiskAlertsResult, SearchRiskAlertsResultArray } from '../types/types';\r\nimport {\r\n GetRiskAlertsQuery,\r\n GetRiskAlertsQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { getRiskAlerts: P };\r\ntype P = SearchRiskAlertsResultArray;\r\ntype A = GetRiskAlertsQueryVariables;\r\ntype M = GetRiskAlertsQuery;\r\n\r\nexport type GetRiskAlertsFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseGetRiskAlertsFetcher<\r\n Q extends GetRiskAlertsFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n gql: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(gql, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.getRiskAlerts;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { HotelQuoteResultArray } from '../types/types';\r\nimport {\r\n GetConfermaQuicklistQuery,\r\n GetConfermaQuicklistQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { getConfermaQuicklist: { results: P } };\r\ntype P = HotelQuoteResultArray;\r\ntype A = GetConfermaQuicklistQueryVariables;\r\ntype M = GetConfermaQuicklistQuery;\r\n\r\nexport type ConfermaQuicklistFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseSearchConfermaQuicklistFetcher<\r\n Q extends ConfermaQuicklistFetcherType\r\n > extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n queryGQL: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(queryGQL, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data?.getConfermaQuicklist?.results;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { RailcardResult } from '../types/types';\r\nimport {\r\n GetRailcardsQuery,\r\n GetRailcardsQueryVariables\r\n} from '../types/graphql.types';\r\n\r\n\r\ntype R = { getRailcards: P };\r\ntype P = RailcardResult;\r\ntype A = GetRailcardsQueryVariables;\r\ntype M = GetRailcardsQuery;\r\n\r\nexport type GetRailCardsFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\nexport class BaseGetRailcardsFetcher<\r\n Q extends GetRailCardsFetcherType\r\n > extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n gql: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(gql, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.getRailcards;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { FetchableList } from './list-fetchable-enterprise';\r\nimport { Observable } from 'rxjs';\r\nimport { EurostarQuoteResult } from '../types/types';\r\nimport {\r\n SearchEurostarQuery,\r\n SearchEurostarQueryVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { searchEurostar: { results: P } };\r\ntype P = EurostarQuoteResult;\r\ntype A = SearchEurostarQueryVariables;\r\ntype M = SearchEurostarQuery;\r\n\r\nexport type EurostarQuoteFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<M>>;\r\n};\r\n\r\nexport class BaseEurostarQuoteFetcher<\r\n Q extends EurostarQuoteFetcherType\r\n> extends FetchableList<Q, A, R, P, M> {\r\n constructor(\r\n gql: Q,\r\n helpers: BaseHelperRoutines,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(gql, helpers, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.searchEurostar?.results;\r\n }\r\n}\r\n","/**\r\n * @desc Known reg expresions\r\n */\r\n\r\n// @dynamic\r\nexport class RegExps {\r\n static readonly WHITE_CHARS = /[\\r\\n\\t\\s]/gm;\r\n static readonly CAPS = /([A-Z])/g;\r\n static readonly EMAIL_VALIDATOR = /(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])/;\r\n // tslint:disable-next-line:max-line-length\r\n static readonly UK_POSTCODE = /^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z]))))\\s?[0-9][A-Za-z]{2})$/;\r\n static readonly EMAIL_REGEX = \"^(([^<>()\\\\[\\\\]\\\\.,;:\\\\s@']+(\\\\.[^<>()\\\\[\\\\]\\\\.,;:\\\\s@']+)*)|('.+'))@((\\\\[[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\])|(([a-zA-Z0-9-]+\\\\.)+[a-zA-Z]{2,}))$\";\r\n}\r\n","import { RegExps } from './regexp.model';\r\n\r\nexport class LoginError extends Error {\r\n constructor(\r\n public reason: LoginErrorReason,\r\n public data?: LoginResponse | PasswordChangeResponse | boolean,\r\n public statusText?: string,\r\n public error?: string,\r\n message: string = 'Invalid username or password. Please try again'\r\n ) {\r\n super(message);\r\n this.name = 'LoginError';\r\n }\r\n}\r\n\r\nexport enum LoginErrorReason {\r\n PASSWORD_EXPIRED,\r\n PASSWORD_CHANGE,\r\n LOGED_IN,\r\n AUTH_ERROR,\r\n SSO\r\n}\r\n\r\nexport interface PasswordChangeResponse {\r\n alreadyLoggedIn: boolean;\r\n errorMsg: string;\r\n expiry: number;\r\n passwordDescription: string;\r\n success: boolean;\r\n token: string;\r\n}\r\n\r\nexport interface LoginResponse {\r\n showurl: boolean;\r\n SSOLogin: number;\r\n alreadyLoggedIn: boolean;\r\n changePassword: boolean;\r\n changeToken: string;\r\n error: boolean;\r\n expiry: number;\r\n firstLogin: boolean;\r\n invalidHost: boolean;\r\n lockedOut: number;\r\n loginSuccess: boolean;\r\n message: string;\r\n passwordDescription: string;\r\n}\r\n\r\nexport class AuthInfo {\r\n token: string;\r\n overwrite = '';\r\n oldPassword: string;\r\n confirmPassword: string;\r\n constructor(public username?: string, public password?: string, overwrite?: boolean) {\r\n if (overwrite) {\r\n this.overwrite = '1';\r\n }\r\n }\r\n getAgent(): string {\r\n return `Agent=${encodeURIComponent(this.username.toLowerCase())}`;\r\n }\r\n getPasswd(): string {\r\n return `Passwd=${encodeURIComponent(this.password)}`;\r\n }\r\n getToken(): string {\r\n return `token=${encodeURIComponent(this.token)}`;\r\n }\r\n getTokenStr(): string {\r\n try {\r\n return `${this.getAgent()}&${this.getPasswd()}&overwrite=${this.overwrite}&${this.getToken()}`;\r\n } catch (e) {\r\n console.error('Sorry there is no enough information to get token string.');\r\n }\r\n }\r\n getChangePassTokenStr(): string {\r\n try {\r\n return `\r\n ${this.getAgent()}&\r\n oldpasswd=${encodeURIComponent(this.oldPassword)}&\r\n newpasswd=${encodeURIComponent(this.password)}&\r\n cnfpasswd=${encodeURIComponent(this.confirmPassword)}&\r\n ${this.getToken()}`.replace(RegExps.WHITE_CHARS, '');\r\n } catch (e) {\r\n console.error('Sorry there is no enough information to get token string.', e);\r\n }\r\n }\r\n getResetPassTokenStr(): string {\r\n try {\r\n return `\r\n newpasswd=${encodeURIComponent(this.password)}&\r\n cnfpasswd=${encodeURIComponent(this.confirmPassword)}&\r\n ${this.getToken()}`.replace(RegExps.WHITE_CHARS, '');\r\n } catch (e) {\r\n console.error('Sorry there is no enough information to get token string.', e);\r\n }\r\n }\r\n}\r\n","import { map, take } from 'rxjs/operators';\r\nimport moment from 'moment';\r\nimport Countries from '../data/countries.json';\r\nimport { BehaviorSubject, forkJoin, of } from 'rxjs';\r\nimport { BaseEnterpriseSearch } from '../classes/base-enterprise';\r\nimport { Observable } from 'rxjs';\r\nimport { ParkingEnterpriseSearch } from '../classes/parking-enterprise-search';\r\nimport {\r\n SearchObject,\r\n SearchObjects\r\n} from '../interfaces/search-objects.interface';\r\nimport {\r\n Address,\r\n Airport,\r\n BasketItem,\r\n BookerType,\r\n FareType,\r\n RailClass,\r\n RailJourneyType,\r\n SearchAirports,\r\n ServiceType,\r\n SaveUserAddressMutationVariables,\r\n CarHireDepot,\r\n CabHireVehicleType,\r\n ConfermaOfficeNames,\r\n CarbonAllowance,\r\n RiskAlert,\r\n RiskLevel,\r\n RailStation,\r\n GetRiskAlertsQueryVariables,\r\n SearchAirlines,\r\n AirlineResult,\r\n HotelItinerary,\r\n FlightCabinClass,\r\n ReferenceRailCardQualifier,\r\n SearchUserCanBookForQueryVariables,\r\n Search,\r\n SaveRecentSearchMutationVariables\r\n} from '../types/graphql.types';\r\nimport { LoungesEnterpriseSearch } from '../classes/lounges-enterprise-search';\r\nimport { HotelEnterpriseSearch } from '../classes/hotel-enterprise-search';\r\nimport { CarhireEnterpriseSearch } from '../classes/carhire-enterprise-search';\r\nimport {\r\n FlightEnterpriseSearch,\r\n TimeWindow\r\n} from '../classes/flight-enterprise-search';\r\nimport { CabHireEnterpriseSearch } from '../classes/cabhire-enterprise-search';\r\nimport {\r\n RailEnterpriseSearch,\r\n RailSearchCriteria\r\n} from '../classes/rail-enterprise-search';\r\nimport { Traveller, TravellerObject } from '../models/traveller.object';\r\nimport { BaseStorageService } from './storage.service';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { BaseHotelAvalibilityService } from './hotel-avallibility.service';\r\nimport { BaseEnvironment } from '../classes/enviroment';\r\nimport {\r\n BaseSearchPostcodeFetcher,\r\n SearchPostcodesQuoteFetcherType\r\n} from '../fetchers/search-postcodes.fetcher';\r\nimport {\r\n AddressForm,\r\n AirportSearchResults,\r\n CarHireDepotResultArray,\r\n CountryCode,\r\n LocationDetails,\r\n LocationTypes,\r\n OBTAirportDetails,\r\n RailAirport,\r\n Router,\r\n SearchCitiesResult,\r\n SearchCitiesResultArray,\r\n SearchPostcodesResult,\r\n SearchPostcodesResultArray,\r\n SearchRailStationsResult,\r\n SearchRailStationsResultArray,\r\n TerminalsType,\r\n GetUserCompanyOfficesResultArray,\r\n GetUserCompanyOfficesResult,\r\n SearchHotelChainsResultArray,\r\n SearchHotelChainsResult,\r\n SearchRiskAlertsResult,\r\n AirlinesSearchResult,\r\n OBTAirlinesDetails,\r\n GetUserRecentSearchesResultArray,\r\n GetUserRecentSearchesResult,\r\n RecentSearch,\r\n HotelQuoteResultArray,\r\n SearchConfermaCitiesResult\r\n} from '../types/types';\r\nimport {\r\n BaseSearchRailStationsFetcher,\r\n SearchRailStationsFetcherType\r\n} from '../fetchers/search-rail-stations.fetcher';\r\nimport {\r\n BaseLoungeQuoteFetcher,\r\n LoungeQuoteFetcherType\r\n} from '../fetchers/lounge-quote.fetcher';\r\nimport {\r\n BaseParkingQuoteFetcher,\r\n ParkingQuoteFetcherType\r\n} from '../fetchers/parking-quote-fetcher';\r\nimport {\r\n BaseFlightQuoteFetcher,\r\n FlightQuoteFetcherType\r\n} from '../fetchers/flight-quote.fetcher';\r\nimport {\r\n BaseHotelQuoteFetcher,\r\n HotelQuoteFetcherType\r\n} from '../fetchers/hotel-quote-fetcher';\r\nimport {\r\n BaseCarhireQuoteFetcher,\r\n CarHireFetcherType\r\n} from '../fetchers/carhire-quote-fetcher';\r\nimport {\r\n BaseCarHireAvailabilityDetailFetcher,\r\n CarHireAvailabilityDetailFetcherType\r\n} from '../fetchers/carhire-availability-detail.fetcher';\r\nimport {\r\n BaseCabhireQuoteFetcher,\r\n CabhireQuoteFetcherType\r\n} from '../fetchers/cabhire-quote-fetcher';\r\nimport {\r\n BaseRailQuoteFetcher,\r\n RailQuoteFetcherType\r\n} from '../fetchers/rail-quote-fetcher';\r\nimport {\r\n BaseIrlQuoteFetcher,\r\n IrlQuoteFetcherType\r\n} from '../fetchers/irl-quote-fetcher';\r\nimport { RegExps } from '../models/regexp.model';\r\nimport {\r\n EnterpriseSearchServiceInterface,\r\n SearchParams\r\n} from '../interfaces/Isearch.service';\r\nimport {\r\n BaseSearchAirportsFetcher,\r\n SearchAirportsQuoteFetcherType\r\n} from '../fetchers/search-airports-fetcher';\r\nimport {\r\n BaseSearchAirlinesFetcher,\r\n SearchAirlinesQuoteFetcherType\r\n} from '../fetchers/search-airlines.fetcher';\r\nimport {\r\n UserServiceInterface,\r\n UserServices\r\n} from '../interfaces/Iuser.service';\r\nimport {\r\n BaseSearchCityFetcher,\r\n SearchCitiesQuoteFetcherType\r\n} from '../fetchers/search-cities.fetcher';\r\nimport {\r\n BaseSearchConfermaCityFetcher,\r\n SearchConfermaCitiesQuoteFetcherType\r\n} from '../fetchers/search-conferma-cities.fetcher';\r\nimport { AbstractHttpCallService } from './http-call.service';\r\nimport { EnterpriseBasketServiceInterface } from '../interfaces/Ienterprise-basket.service';\r\nimport { HotelAvalinilityFetcherType } from '../fetchers/hotel-avaliability-fetcher';\r\nimport {\r\n BaseSaveUserAddressUpdater,\r\n SaveUserAddressUpdaterType\r\n} from '../updaters/save-user-address.updater';\r\nimport {\r\n BaseUserAddressesFetcher,\r\n UserAddressFetcherType\r\n} from '../fetchers/user-addresses.fetcher';\r\n\r\nimport {\r\n BaseConfermaOfficeNamesFetcher,\r\n ConfermaOfficeNameFetcherType\r\n} from '../fetchers/conferma-office-names.fetcher';\r\n\r\nimport {\r\n BaseGetUserCompanyOfficesFetcher,\r\n GetUserCompanyOfficesQuoteFetcherType\r\n} from '../fetchers/get-user-company-offices.fetcher';\r\nimport {\r\n BaseSearchHotelChainsFetcher,\r\n SearchHotelChainsQuoteFetcherType\r\n} from '../fetchers/search-hotel-chains.fetcher';\r\nimport {\r\n BaseValidateIsPostcodeValidTester,\r\n ValidateIsPostcodeValidType\r\n} from '../testers/postcode-validate.tester';\r\n\r\nimport {\r\n BaseSearchDepotFetcher,\r\n SearchDepotQuoteFetcherType\r\n} from '../fetchers/search-depots.fetcher';\r\n\r\nimport {\r\n BaseGetRailStationFetcher,\r\n GetRailStationFetcherType\r\n} from '../fetchers/get-rail-station.fetcher';\r\n\r\nimport {\r\n BaseSearchConfermaQuicklistFetcher,\r\n ConfermaQuicklistFetcherType\r\n} from '../fetchers/conferma-quicklist.fetcher';\r\n\r\nimport {\r\n BaseDeleteUserAddressUpdater,\r\n DeleteUserAddressFetcherType\r\n} from '../updaters/remove-user-address-updater';\r\n\r\nimport {\r\n BaseDeleteRecentSearchUpdater,\r\n DeleteRecentSearchFetcherType\r\n} from '../updaters/remove-recent-search-updater';\r\n\r\nimport {\r\n BaseSaveRecentSearchUpdater,\r\n SaveRecentSearchFetcherType\r\n} from '../updaters/save-recent-search-updater';\r\n\r\nimport { HotelTempParams } from '../interfaces/Ihotel-enterprise-search';\r\nimport { RailTempParams } from '../interfaces/Irail-enterprise-search';\r\nimport { FlightTempParams } from '../interfaces/Iflight-enterprise-search';\r\nimport { LoungesTempParams } from '../interfaces/Ilounges-enterprise-search';\r\nimport { ParkingTempParams } from '../interfaces/Iparking-enterprise-search';\r\nimport { CabHireTempParams, TaxiFormMode } from '../interfaces/Icabhire-enterprise-search';\r\nimport { CarHireTempParams } from '../interfaces/Icarhire-enterprise-search';\r\nimport {\r\n BaseGetUserCurrentCarbonAllowanceFetcher,\r\n GetUserCurrentCarbonAllowanceType\r\n} from '../fetchers/get-user-current-carbon-allowance.fetcher';\r\nimport { BaseWebTokenService } from './webtoken.service';\r\nimport {\r\n BaseGetRiskAlertsFetcher,\r\n GetRiskAlertsFetcherType\r\n} from '../fetchers/get-risk-alerts.fetcher';\r\nimport { IrlTempParams } from '../interfaces/Iirl-enterprise-search';\r\nimport { IRLEnterpriseSearch } from '../classes/irl-enterprise-search';\r\nimport { FlightSearchType } from '../classes/flight-search-type.enum';\r\n\r\nimport {\r\n BaseGetUserRecentSearchesFetcher,\r\n GetUserRecentSearchesFetcherType\r\n} from '../fetchers/get-user-recent-searches.fetcher';\r\n\r\nimport {\r\n BaseGetRailcardsFetcher,\r\n GetRailCardsFetcherType\r\n} from '../fetchers/get-rail-cards.fetcher';\r\n\r\nimport {\r\n BaseEurostarQuoteFetcher,\r\n EurostarQuoteFetcherType\r\n} from '../fetchers/eurostar-quote.fetcher';\r\nimport { EurostarEnterpriseSearch } from '../classes/eurostar-enterprise-search';\r\nimport { EurostarTempParams } from '../interfaces/Ieurostar-enterprise-search';\r\nimport EuroStations from '../data/euro-stations.json';\r\nimport _ from 'lodash';\r\nimport {\r\n BaseSearchUsersCanBookForFetcher,\r\n SearchUserCanBookForFetcherType\r\n} from '../fetchers/search-users-can-book-for-fetcher';\r\nimport { EurostarSearchType } from '../classes/eurostar-search-type.enum';\r\n\r\nexport const MAX_TRAVELLERS = 8;\r\n\r\nexport enum TravellerSearchTypes {\r\n email = 'email',\r\n name = 'name',\r\n employeeNumber = 'employeeNumber'\r\n}\r\n\r\ninterface HighestSearchPriorityObjectInterface {\r\n highest: number;\r\n currentItem: SearchObject;\r\n}\r\n\r\nexport class BaseEnterpriseSearchService<\r\n SP_Q extends SearchPostcodesQuoteFetcherType,\r\n SR_Q extends SearchRailStationsFetcherType,\r\n SL_Q extends LoungeQuoteFetcherType,\r\n SPA_Q extends ParkingQuoteFetcherType,\r\n SFL_Q extends FlightQuoteFetcherType,\r\n SHO_Q extends HotelQuoteFetcherType,\r\n SCH_Q extends CarHireFetcherType,\r\n CHAD_Q extends CarHireAvailabilityDetailFetcherType,\r\n STH_Q extends CabhireQuoteFetcherType,\r\n SA_Q extends SearchAirportsQuoteFetcherType,\r\n SAL_Q extends SearchAirlinesQuoteFetcherType,\r\n HA_Q extends HotelAvalinilityFetcherType,\r\n SC_Q extends SearchCitiesQuoteFetcherType,\r\n SCC_Q extends SearchConfermaCitiesQuoteFetcherType,\r\n SRA_Q extends RailQuoteFetcherType,\r\n SI_Q extends IrlQuoteFetcherType,\r\n SUA_Q extends SaveUserAddressUpdaterType,\r\n SU_Q extends UserAddressFetcherType,\r\n GUCO_Q extends GetUserCompanyOfficesQuoteFetcherType,\r\n SHC_Q extends SearchHotelChainsQuoteFetcherType,\r\n IPV_Q extends ValidateIsPostcodeValidType,\r\n SD_Q extends SearchDepotQuoteFetcherType,\r\n GRS_Q extends GetRailStationFetcherType,\r\n GON_Q extends ConfermaOfficeNameFetcherType,\r\n DUA_Q extends DeleteUserAddressFetcherType,\r\n DRS_Q extends DeleteRecentSearchFetcherType,\r\n SRS_Q extends SaveRecentSearchFetcherType,\r\n UCA_Q extends GetUserCurrentCarbonAllowanceType,\r\n GRA_Q extends GetRiskAlertsFetcherType,\r\n QL_Q extends ConfermaQuicklistFetcherType,\r\n GURSF_Q extends GetUserRecentSearchesFetcherType,\r\n GRCF_Q extends GetRailCardsFetcherType,\r\n SE_Q extends EurostarQuoteFetcherType,\r\n SUCBF extends SearchUserCanBookForFetcherType\r\n > implements EnterpriseSearchServiceInterface {\r\n static SESSION_TRAVELLER: string = 'search_travellers';\r\n\r\n searches: SearchParams;\r\n traveller_error = false;\r\n travellerInformation: BehaviorSubject<Traveller[]> = new BehaviorSubject<\r\n Traveller[]\r\n >([]);\r\n errors: BehaviorSubject<string[]> = new BehaviorSubject<string[]>([]);\r\n searchLoadingDone: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(\r\n false\r\n );\r\n searchTimedOut: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(\r\n false\r\n );\r\n newSearchStarted: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(\r\n false\r\n );\r\n\r\n firstLoad = true;\r\n\r\n search_objects: SearchObjects;\r\n highest_search_priority = 8;\r\n show_errors = false;\r\n travellerValidationMessages: string[] = [];\r\n search_loading = false;\r\n search_airport_loading = false;\r\n\r\n private selectedTravellers: Traveller[] = [];\r\n selectedPlaces: any = [];\r\n countries = Countries;\r\n eurostations: { gateway: string; destination: string }[] =\r\n _.toArray(EuroStations);\r\n\r\n constructor(\r\n protected searchAirportsFetcher: BaseSearchAirportsFetcher<SA_Q>,\r\n protected searchAirlinesFetcher: BaseSearchAirlinesFetcher<SAL_Q>,\r\n protected storageService: BaseStorageService,\r\n protected userService: UserServiceInterface,\r\n protected router: Router,\r\n protected helpers: BaseHelperRoutines,\r\n protected hotelAvalibilityService: BaseHotelAvalibilityService<HA_Q>,\r\n private citiesFetcher: BaseSearchCityFetcher<SC_Q>,\r\n private confermaCitiesFetcher: BaseSearchConfermaCityFetcher<SCC_Q>,\r\n private postcodeFetcher: BaseSearchPostcodeFetcher<SP_Q>,\r\n private railStationFetcher: BaseSearchRailStationsFetcher<SR_Q>,\r\n private saveUserAddressUpdater: BaseSaveUserAddressUpdater<SUA_Q>,\r\n private userAddressesFetcher: BaseUserAddressesFetcher<SU_Q>,\r\n private basketService: EnterpriseBasketServiceInterface,\r\n private getUserCompanyOfficesFetcher: BaseGetUserCompanyOfficesFetcher<GUCO_Q>,\r\n private searchHotelChainsFetcher: BaseSearchHotelChainsFetcher<SHC_Q>,\r\n private baseValidateIsPostcodeValidTester: BaseValidateIsPostcodeValidTester<IPV_Q>,\r\n private depotFetcher: BaseSearchDepotFetcher<SD_Q>,\r\n private confermaOfficeNamesFetcher: BaseConfermaOfficeNamesFetcher<GON_Q>,\r\n private baseDeleteUserAddressUpdater: BaseDeleteUserAddressUpdater<DUA_Q>,\r\n private baseDeleteRecentSearchUpdater: BaseDeleteRecentSearchUpdater<DRS_Q>,\r\n private baseSaveRecentSearchUpdater: BaseSaveRecentSearchUpdater<SRS_Q>,\r\n private getUserCurrentCarbonAllowanceFetcher: BaseGetUserCurrentCarbonAllowanceFetcher<UCA_Q>,\r\n environment: BaseEnvironment,\r\n loungeFetcher: BaseLoungeQuoteFetcher<SL_Q>,\r\n parkingFetcher: BaseParkingQuoteFetcher<SPA_Q>,\r\n httpCallService: AbstractHttpCallService,\r\n flightFetcher: BaseFlightQuoteFetcher<SFL_Q>,\r\n hotelFetcher: BaseHotelQuoteFetcher<SHO_Q>,\r\n carhireFetcher: BaseCarhireQuoteFetcher<SCH_Q>,\r\n carHireAvailabilityDetailFetcher: BaseCarHireAvailabilityDetailFetcher<CHAD_Q>,\r\n cabhireFetcher: BaseCabhireQuoteFetcher<STH_Q>,\r\n railFetcher: BaseRailQuoteFetcher<SRA_Q>,\r\n irlFetcher: BaseIrlQuoteFetcher<SI_Q>,\r\n protected getRailStationFetcher: BaseGetRailStationFetcher<GRS_Q>,\r\n baseWebTokenService: BaseWebTokenService,\r\n private riskAlertsFetcher: BaseGetRiskAlertsFetcher<GRA_Q>,\r\n private quicklistFetcher: BaseSearchConfermaQuicklistFetcher<QL_Q>,\r\n private getUserRecentSearchesFetcher: BaseGetUserRecentSearchesFetcher<GURSF_Q>,\r\n protected getRailCardsFetcher: BaseGetRailcardsFetcher<GRCF_Q>,\r\n eurostarFetcher: BaseEurostarQuoteFetcher<SE_Q>,\r\n public searchUsersCanBookForFetcher: BaseSearchUsersCanBookForFetcher<SUCBF>\r\n ) {\r\n console.log('Enterpise search service being inited');\r\n this.searches = {\r\n [ServiceType.Lounge]: new LoungesEnterpriseSearch(\r\n loungeFetcher,\r\n helpers,\r\n basketService,\r\n storageService,\r\n this\r\n ),\r\n [ServiceType.Parking]: new ParkingEnterpriseSearch(\r\n parkingFetcher,\r\n helpers,\r\n basketService,\r\n storageService,\r\n this\r\n ),\r\n [ServiceType.Flight]: new FlightEnterpriseSearch(\r\n flightFetcher,\r\n helpers,\r\n userService,\r\n basketService,\r\n storageService,\r\n this\r\n ),\r\n [ServiceType.Hotel]: new HotelEnterpriseSearch(\r\n hotelFetcher,\r\n helpers,\r\n userService,\r\n environment,\r\n hotelAvalibilityService,\r\n basketService,\r\n storageService,\r\n this,\r\n httpCallService,\r\n quicklistFetcher,\r\n getRailStationFetcher\r\n ),\r\n [ServiceType.Car]: new CarhireEnterpriseSearch(\r\n carhireFetcher,\r\n carHireAvailabilityDetailFetcher,\r\n helpers,\r\n basketService,\r\n storageService,\r\n this\r\n ),\r\n [ServiceType.Cab]: new CabHireEnterpriseSearch(\r\n cabhireFetcher,\r\n helpers,\r\n storageService,\r\n this,\r\n basketService\r\n ),\r\n [ServiceType.InternationalRail]: new IRLEnterpriseSearch(\r\n irlFetcher,\r\n // getRailStationFetcher,\r\n helpers,\r\n basketService,\r\n storageService,\r\n this\r\n ),\r\n [ServiceType.FastTrack]: null,\r\n [ServiceType.Coach]: null,\r\n [ServiceType.Rail]: new RailEnterpriseSearch(\r\n railFetcher,\r\n getRailStationFetcher,\r\n helpers,\r\n basketService,\r\n storageService,\r\n this\r\n ),\r\n [ServiceType.Eurostar]: new EurostarEnterpriseSearch(\r\n eurostarFetcher,\r\n helpers,\r\n userService,\r\n basketService,\r\n storageService,\r\n this\r\n )\r\n };\r\n console.log('Newly created search objects: ', this.searches);\r\n this.search_objects = this.helpers.clone(this.init_search_objects());\r\n this.selectedTravellers = this.storageService.getSessionItemAsList<\r\n Traveller[]\r\n >(BaseEnterpriseSearchService.SESSION_TRAVELLER);\r\n this.travellerInformation.next(this.selectedTravellers);\r\n userService.fullUserDetails.userServices.subscribe(\r\n (services: UserServices) => {\r\n if (services) {\r\n this.search_objects = Object.keys(this.search_objects).reduce(\r\n (objects: SearchObjects, key: string) => {\r\n (objects as Record<string, any>)[key].enabled =\r\n !!services && !!services[key];\r\n return objects;\r\n },\r\n this.search_objects\r\n );\r\n }\r\n }\r\n );\r\n\r\n if (Array.isArray(this.countries)) {\r\n this.countries = this.countries.sort((a, b) => {\r\n if (a.cName < b.cName) {\r\n return -1;\r\n }\r\n if (a.cName > b.cName) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n }\r\n\r\n baseWebTokenService.autoLogoutConfig = this.getAutoLogoutConfig();\r\n }\r\n\r\n reset() {\r\n Object.values(this.searches).forEach(\r\n (item: BaseEnterpriseSearch<any, any, any[]>) => {\r\n item?.reset();\r\n }\r\n );\r\n this.removeAllTravellers();\r\n this.basketService.reset();\r\n }\r\n\r\n getUserCurrentCarbonAllowance(\r\n user?: string,\r\n isLoading?: BehaviorSubject<boolean>\r\n ): Observable<CarbonAllowance> {\r\n if (isLoading) {\r\n isLoading.next(true);\r\n }\r\n\r\n const query = { user };\r\n return this.getUserCurrentCarbonAllowanceFetcher.fetchList(query).pipe(\r\n take(1),\r\n map((results: CarbonAllowance) => {\r\n return results;\r\n })\r\n );\r\n }\r\n\r\n getRiskAlerts(\r\n minLevel: RiskLevel,\r\n maxLevel: RiskLevel,\r\n countryIsoCode: string,\r\n isLoading?: BehaviorSubject<boolean>,\r\n airport?: Airport,\r\n railStation?: RailStation,\r\n airportIata?: string\r\n ): Observable<RiskAlert[]> {\r\n if (isLoading) {\r\n isLoading.next(true);\r\n }\r\n\r\n const query: GetRiskAlertsQueryVariables = {\r\n minLevel,\r\n maxLevel,\r\n countryIsoCode\r\n };\r\n\r\n return this.riskAlertsFetcher.fetchList(query).pipe(\r\n take(1),\r\n map((result: RiskAlert[]) => {\r\n if (isLoading) {\r\n isLoading.next(false);\r\n }\r\n\r\n return result;\r\n })\r\n );\r\n }\r\n\r\n getAirportsList(\r\n term: string,\r\n countryCode?: CountryCode,\r\n isLoading?: BehaviorSubject<boolean>,\r\n hasLounge?: boolean,\r\n hasParking?: boolean,\r\n hasFastTrack?: boolean\r\n ): Observable<OBTAirportDetails[]> {\r\n if (term.length > 2) {\r\n if (isLoading) {\r\n isLoading.next(true);\r\n }\r\n\r\n const query: SearchAirports.Variables = { query: term };\r\n if (!!countryCode) {\r\n query.countryCode = countryCode;\r\n }\r\n if (typeof hasLounge === 'boolean') {\r\n query.hasLounge = hasLounge;\r\n }\r\n if (typeof hasParking === 'boolean') {\r\n query.hasParking = hasParking;\r\n }\r\n if (typeof hasFastTrack === 'boolean') {\r\n query.hasFastTrack = hasFastTrack;\r\n }\r\n return this.searchAirportsFetcher.fetchOne(query).pipe(\r\n take(1),\r\n map((results: AirportSearchResults) => {\r\n if (isLoading) {\r\n isLoading.next(false);\r\n }\r\n\r\n if (results && results.generalMatches) {\r\n const generalMatches = this.helpers.clone(results.generalMatches);\r\n\r\n // Removing this as this creates duplicate airports in the list\r\n // if (results.iataMatch) {\r\n // generalMatches.push(results.iataMatch);\r\n // }\r\n return (\r\n generalMatches\r\n // .filter((airport: AirportResult) => {\r\n // return !!countryCode\r\n // ? countryCode === airport.details.countryCode\r\n // : airport;\r\n // })\r\n .map((airport: Airport): OBTAirportDetails => {\r\n return {\r\n destination: airport.name,\r\n gateway: airport.iata,\r\n terminals: this.processTerminals(airport.terminals),\r\n country: airport?.locationDetails?.country,\r\n postcode: airport?.locationDetails?.postcode,\r\n countryCode: airport?.locationDetails?.countryCode\r\n };\r\n })\r\n );\r\n }\r\n })\r\n );\r\n } else {\r\n return of([]);\r\n }\r\n }\r\n getAirlinesList(\r\n term: string,\r\n isLoading?: BehaviorSubject<boolean>\r\n ): Observable<OBTAirlinesDetails[]> {\r\n if (term.length >= 2) {\r\n if (isLoading) {\r\n isLoading.next(true);\r\n }\r\n const query: SearchAirlines.Variables = { query: term };\r\n return this.searchAirlinesFetcher.fetchOne(query).pipe(\r\n take(1),\r\n map((results: AirlinesSearchResult) => {\r\n if (isLoading) {\r\n isLoading.next(false);\r\n }\r\n\r\n if (results && results.generalMatches) {\r\n const generalMatches = this.helpers.clone(results.generalMatches);\r\n return generalMatches.map(\r\n (airlines: AirlineResult): OBTAirlinesDetails => {\r\n return {\r\n code: airlines.iata,\r\n name: airlines.name\r\n };\r\n }\r\n );\r\n }\r\n })\r\n );\r\n } else {\r\n return of([]);\r\n }\r\n }\r\n getAirportLocations(\r\n term: string,\r\n countryCode: CountryCode,\r\n isLoading?: BehaviorSubject<boolean>,\r\n hasLounge?: boolean,\r\n hasParking?: boolean,\r\n hasFastTrack?: boolean\r\n ): Observable<LocationDetails[]> {\r\n const convert = (results: OBTAirportDetails[]): LocationDetails[] => {\r\n return results.map((result: OBTAirportDetails) => {\r\n return {\r\n name: result.destination,\r\n type: LocationTypes.Airport,\r\n airport: result\r\n };\r\n });\r\n };\r\n return this.getAirportsList(\r\n term,\r\n countryCode,\r\n isLoading,\r\n hasLounge,\r\n hasParking,\r\n hasFastTrack\r\n ).pipe(map(convert));\r\n }\r\n\r\n getCityLocations(\r\n term: string,\r\n countryCode?: CountryCode,\r\n isLoading?: BehaviorSubject<boolean>,\r\n isConfirma?: boolean\r\n ): Observable<LocationDetails[]> {\r\n if (term.length <= 2) {\r\n return;\r\n }\r\n if (isConfirma) {\r\n return this.getConfermaCityLocations(term, countryCode, isLoading);\r\n } else {\r\n return this._getCityLocations(term, countryCode, isLoading);\r\n }\r\n }\r\n\r\n _getCityLocations(\r\n term: string,\r\n countryCode?: CountryCode,\r\n isLoading?: BehaviorSubject<boolean>\r\n ): Observable<LocationDetails[]> {\r\n isLoading?.next(true);\r\n const query: any = { query: term };\r\n if (countryCode) {\r\n query.countryCode = countryCode;\r\n }\r\n const obs: Observable<SearchCitiesResultArray> =\r\n this.citiesFetcher.fetchList(query);\r\n const func = (results: SearchCitiesResultArray): LocationDetails[] => {\r\n const data: LocationDetails[] = results.map(\r\n (result: SearchCitiesResult): LocationDetails => {\r\n return {\r\n name: result.name,\r\n longitude: result.coordinates.longitude,\r\n latitude: result.coordinates.latitude,\r\n type: LocationTypes.City,\r\n countryCode: result.countryCode,\r\n id: result.id\r\n };\r\n }\r\n );\r\n isLoading?.next(false);\r\n return data;\r\n };\r\n return obs.pipe(take(1), map(func));\r\n }\r\n\r\n private getConfermaCityLocations(\r\n term: string,\r\n countryCode?: CountryCode,\r\n isLoading?: BehaviorSubject<boolean>\r\n ): Observable<LocationDetails[]> {\r\n isLoading?.next(true);\r\n const query: any = { cityName: term };\r\n if (countryCode) {\r\n query.countryCode = countryCode;\r\n }\r\n const obs: Observable<SearchConfermaCitiesResult> =\r\n this.confermaCitiesFetcher.fetchOne(query);\r\n const func = (results: SearchConfermaCitiesResult): LocationDetails[] => {\r\n const data: LocationDetails[] = results.suggestions.map(\r\n (result): LocationDetails => {\r\n return {\r\n name: result.name,\r\n longitude: result.longitude,\r\n latitude: result.latitude,\r\n type: LocationTypes.City,\r\n countryCode: result.countryCode\r\n };\r\n }\r\n );\r\n isLoading?.next(false);\r\n return data;\r\n };\r\n return obs.pipe(take(1), map(func));\r\n }\r\n\r\n /**\r\n * @description - get car hire depots based on city cords\r\n */\r\n getCarHireDepots(\r\n latitude: number,\r\n longitude: number,\r\n isLoading?: BehaviorSubject<boolean>\r\n ): Observable<CarHireDepotResultArray> {\r\n isLoading?.next(true);\r\n\r\n const obs: Observable<CarHireDepotResultArray> =\r\n this.depotFetcher.fetchList({ latitude, longitude });\r\n\r\n const func = (\r\n results: CarHireDepotResultArray\r\n ): CarHireDepotResultArray => {\r\n const data: CarHireDepotResultArray = results.map(\r\n (result: CarHireDepot): CarHireDepot => {\r\n console.log(result);\r\n return result;\r\n }\r\n );\r\n isLoading?.next(false);\r\n return data;\r\n };\r\n return obs; // .pipe(take(1), map(func));\r\n\r\n // return of([]);\r\n }\r\n\r\n /**\r\n * @description - get postcode locations, these will use partial postcode,\r\n * full and then grabbing them will let us fill in the address form\r\n * @todo - fill this out for the other location types, may need to mergeMap them or some other rxjs magic\r\n * @param term - the term to search by e.g. 'wa14' should bring back, our office, 'm33' shoiuld bring back my addrs\r\n */\r\n getPostcodeList(term: string): Observable<LocationDetails[]> {\r\n if (RegExps.UK_POSTCODE.test(term)) {\r\n const subs = this.postcodeFetcher.fetchList({ postcode: term }).pipe(\r\n map((results: SearchPostcodesResultArray) => {\r\n return results.map(\r\n (result: SearchPostcodesResult): LocationDetails => {\r\n return {\r\n name: result.postcode,\r\n type: LocationTypes.Postcode,\r\n latitude: result.latitude,\r\n longitude: result.longitude\r\n };\r\n }\r\n );\r\n })\r\n ); // expand this with the other searches when they are done\r\n\r\n return subs;\r\n } else {\r\n return of([]);\r\n }\r\n }\r\n\r\n addToSelectedPlaces(address: Address): void {\r\n this.selectedPlaces.push(address);\r\n }\r\n\r\n getSelectedPlaceById(placeId: string): Address {\r\n return this.selectedPlaces.find(\r\n (place: { place_id: string }) => place.place_id === placeId\r\n );\r\n }\r\n\r\n /*\r\n * @description - get the list of Office locations based on search term given\r\n * @todo - fill this out so that it actually performs a http call\r\n * @param term - the term we want to search by\r\n * @returns\r\n */\r\n getOfficeLocations(term: string): Observable<LocationDetails[]> {\r\n if (term.length > 2) {\r\n const obs: Observable<GetUserCompanyOfficesResultArray> =\r\n this.getUserCompanyOfficesFetcher.fetchList();\r\n const func = (\r\n results: GetUserCompanyOfficesResultArray\r\n ): LocationDetails[] => {\r\n const data: LocationDetails[] = results.map(\r\n (result: GetUserCompanyOfficesResult): LocationDetails => {\r\n return {\r\n name: result.name,\r\n office: result.addresses[0],\r\n type: LocationTypes.Office\r\n };\r\n }\r\n );\r\n return data;\r\n };\r\n return obs.pipe(take(1), map(func));\r\n }\r\n\r\n return of([]);\r\n }\r\n\r\n getStationLocations(\r\n term: string,\r\n isLoading?: BehaviorSubject<boolean>\r\n ): Observable<LocationDetails[]> {\r\n if (term.length > 2) {\r\n isLoading?.next(true);\r\n return this.railStationFetcher\r\n .fetchList({\r\n query: term\r\n })\r\n .pipe(\r\n take(1),\r\n map((results: SearchRailStationsResultArray): LocationDetails[] => {\r\n if (isLoading) {\r\n isLoading.next(false);\r\n }\r\n return results.map((result: SearchRailStationsResult) => {\r\n return {\r\n type: LocationTypes.TrainStation,\r\n name: result.name,\r\n railstation: result\r\n };\r\n });\r\n })\r\n );\r\n } else {\r\n return of([]);\r\n }\r\n }\r\n /**\r\n * @description - get hotel locations, these should be city, office, airport, railstation\r\n * @todo - fill this out for the other location types, may need to mergeMap them or some other rxjs magic\r\n * @param term - the term to search by e.g. 'Man' should bring back, manchester, manchester airport, manchester picadilly, etc\r\n */\r\n getHotelLocationsList(\r\n term: string,\r\n countryCode: CountryCode,\r\n isLoading?: BehaviorSubject<boolean>\r\n ): Observable<LocationDetails[]> {\r\n if (term.length > 2) {\r\n if (RegExps.UK_POSTCODE.test(term)) {\r\n return this.getPostcodeList(term);\r\n } else {\r\n if (!isLoading?.value) {\r\n isLoading.next(true);\r\n }\r\n const subs = forkJoin([\r\n this.getAirportLocations(term, countryCode, isLoading),\r\n this.getCityLocations(term, countryCode, isLoading),\r\n this.getStationLocations(term, isLoading),\r\n this.getOfficeLocations(term)\r\n ]).pipe(\r\n map((results: any[]) => {\r\n if (isLoading?.value) {\r\n isLoading.next(false);\r\n }\r\n return results.reduce((accum: LocationDetails[], result: any) => {\r\n accum.push(...result);\r\n return accum;\r\n }, []);\r\n })\r\n ); // expand this with the other searches when they are done\r\n return subs;\r\n }\r\n } else {\r\n return of([]);\r\n }\r\n }\r\n\r\n getStationsAndAirportsList(\r\n term: string,\r\n countryCode: CountryCode,\r\n isLoading?: BehaviorSubject<boolean>\r\n ): Observable<LocationDetails[]> {\r\n if (term.length > 2) {\r\n if (!isLoading?.value) {\r\n isLoading.next(true);\r\n }\r\n const subs = forkJoin([\r\n this.getAirportLocations(term, countryCode, isLoading),\r\n this.getStationLocations(term, isLoading)\r\n ]).pipe(\r\n map((results: any[]) => {\r\n if (isLoading?.value) {\r\n isLoading.next(false);\r\n }\r\n return results.reduce((accum: any[], result: any[]) => {\r\n accum.push(...result);\r\n return accum;\r\n }, []);\r\n })\r\n ); // expand this with the other searches when they are done\r\n return subs;\r\n } else {\r\n return of([]);\r\n }\r\n }\r\n\r\n /*\r\n @desc - remove a specified traveller from the selected array\r\n **/\r\n removeTraveller(traveller: Traveller): void {\r\n this._removeTraveller(traveller);\r\n\r\n this.storageService.setSessionItem(\r\n BaseEnterpriseSearchService.SESSION_TRAVELLER,\r\n this.selectedTravellers\r\n );\r\n this.updateTravellerInformation();\r\n }\r\n\r\n _removeTraveller(traveller: Traveller) {\r\n this.selectedTravellers = this.selectedTravellers.filter(\r\n (travellerToTest: Traveller) => {\r\n return !TravellerObject.equals(travellerToTest, traveller);\r\n }\r\n );\r\n }\r\n\r\n removeAllTravellers(): void {\r\n console.log('remove all travellers called!');\r\n console.log(this.selectedTravellers);\r\n if (!this.selectedTravellers) {\r\n this.selectedTravellers = [];\r\n }\r\n this.selectedTravellers.forEach((traveller: Traveller) => {\r\n this._removeTraveller(traveller);\r\n });\r\n\r\n this.storageService.setSessionItem(\r\n BaseEnterpriseSearchService.SESSION_TRAVELLER,\r\n this.selectedTravellers\r\n );\r\n this.updateTravellerInformation();\r\n }\r\n\r\n addTraveller(traveller: Traveller) {\r\n if (\r\n !this.travellerAlreadyAdded(traveller) &&\r\n !this.currentNoOfTravellersGreaterOrEqualToMax()\r\n ) {\r\n this.selectedTravellers.push(traveller);\r\n this.storageService.setSessionItem(\r\n BaseEnterpriseSearchService.SESSION_TRAVELLER,\r\n this.selectedTravellers\r\n );\r\n this.updateTravellerInformation();\r\n }\r\n }\r\n currentNoOfTravellersGreaterOrEqualToMax(): boolean {\r\n return this.selectedTravellers.length >= this.maxTravellers();\r\n }\r\n\r\n maxTravellers(): number {\r\n return /*this.userService.useTravellerProfile &&*/ this.canUseTravellerProfile()\r\n ? 1\r\n : MAX_TRAVELLERS;\r\n }\r\n /*\r\n @desc - helper function - determines if a selected traveller is already added -\r\n used to prevent same traveller being added more than once\r\n **/\r\n travellerAlreadyAdded(traveller: Traveller): boolean {\r\n // iterate through the selected travellers and return true if found, false other wise\r\n return !!this.selectedTravellers.find((travellers: Traveller) =>\r\n TravellerObject.equals(travellers, traveller)\r\n );\r\n }\r\n\r\n canUseTravellerProfile(): boolean {\r\n /*\r\n if (this.userService.isUserFavoriteSet(UserFavorurite.DontUseTravellerPolicy)) {\r\n return false;\r\n }\r\n const user = this.userService.getUserDetails();\r\n return (\r\n this.selectedTravellers.length === 1 &&\r\n !this.selectedTravellers[0]\r\n .guest /*&&\r\n this.selectedTravellers[0].pax_id &&\r\n this.selectedTravellers[0].pax_id !== user.PaxId\r\n );*/\r\n return false;\r\n }\r\n\r\n getCurrentNoOfTravellers(): number {\r\n return this.selectedTravellers.length;\r\n }\r\n\r\n updateTravellerInformation() {\r\n this.storageService.setSessionItem(\r\n BaseEnterpriseSearchService.SESSION_TRAVELLER,\r\n this.selectedTravellers\r\n );\r\n this.travellerInformation.next([...this.selectedTravellers]);\r\n }\r\n\r\n /*\r\n * @desc - determine and return the highest priority value,\r\n * the highest is based on the priority value of the search type,\r\n * if it is chosen and if the booking has not been chosen\r\n **/\r\n determineHighestSearchPriority(): number {\r\n return (this.highest_search_priority =\r\n this._getHighestSearchPriorityObject().highest);\r\n }\r\n\r\n getHighestSearchPriorityObject(\r\n basketItems: Record<ServiceType, BasketItem>\r\n ): SearchObject {\r\n return this._getHighestSearchPriorityObject(basketItems).currentItem;\r\n }\r\n\r\n private _getHighestSearchPriorityObject(\r\n basketItems: Record<ServiceType, BasketItem> = {} as Record<\r\n ServiceType,\r\n BasketItem\r\n >\r\n ): HighestSearchPriorityObjectInterface {\r\n return Object.values(this.search_objects).reduce(\r\n ({ highest, currentItem }, item: SearchObject) => {\r\n if (item.chosen && item.priority < highest) {\r\n if (!basketItems[item.type as ServiceType]) {\r\n return { highest: item.priority, currentItem: item };\r\n } else {\r\n item.chosen = false;\r\n }\r\n }\r\n return { highest, currentItem };\r\n },\r\n { highest: Number.MAX_SAFE_INTEGER, currentItem: null }\r\n );\r\n }\r\n\r\n getSelectedOptions(): ServiceType[] {\r\n return Object.keys(this.search_objects).reduce((cv, itemIndex) => {\r\n if ((this.search_objects as Record<string, any>)[itemIndex].chosen) {\r\n cv.push(itemIndex as ServiceType);\r\n }\r\n return cv;\r\n }, []);\r\n }\r\n\r\n /**\r\n * Checks if selected travellers contains any guests without all of details\r\n */\r\n hasSimpleGuests(): boolean {\r\n /*return !!this.selectedTravellers.find(({ guest, phone, nationality, email }) => {\r\n return guest && !(!!email && !!phone && !!nationality);\r\n });*/\r\n return false;\r\n }\r\n\r\n /**\r\n * @description - set the search objects to the get me there objects - called before starting the get me there searches\r\n */\r\n setGetMeThereSearchObjects(): void {\r\n console.log('+++ Setting GetMeThere Search Objects +++');\r\n this.search_objects = this.helpers.clone(this.getMeThereSearchObjects());\r\n }\r\n\r\n resetSearchParams(): void {\r\n console.log('Reseting Search Params!');\r\n this.search_objects = this.helpers.clone(this.init_search_objects());\r\n this.storageService.setSessionItem(\r\n BaseEnterpriseSearchService.SESSION_TRAVELLER,\r\n this.search_objects\r\n );\r\n Object.values(this.searches).forEach(\r\n (productSearchService: BaseEnterpriseSearch<any, any, any[]>) => {\r\n productSearchService.reset();\r\n }\r\n );\r\n }\r\n\r\n canSearch(type: ServiceType | string): boolean {\r\n // check that the selected type is chosen, has highest priority and has not already had a booking chosen\r\n\r\n this.determineHighestSearchPriority();\r\n // firstly check that the type of search exists\r\n if ((this.search_objects as Record<string, any>)[type]) {\r\n console.log('can search here');\r\n // now check that the type is chosen has highest priority\r\n if (\r\n (this.search_objects as Record<string, any>)[type].chosen &&\r\n this.hasHighestSearchPriority(\r\n (this.search_objects as Record<string, any>)[type].priority\r\n )\r\n ) {\r\n console.log(type + ' can be searched');\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n hasHighestSearchPriority(priorityVal: number): boolean {\r\n this.determineHighestSearchPriority();\r\n return priorityVal <= this.highest_search_priority;\r\n }\r\n\r\n /*\r\n * @desc - concatinats all the validation messages across all selected types +\r\n * travellers (or will do when it's complete) TODO - add Flight, Rail Car\r\n **/\r\n getAllErrorMessages(): string[] {\r\n const concattedErrors: string[] = this.travellerValidationMessages;\r\n if (\r\n this.search_objects[ServiceType.Lounge].chosen &&\r\n this.canSearch(ServiceType.Lounge)\r\n ) {\r\n concattedErrors.push(\r\n ...this.searches[ServiceType.Lounge].validationMessages\r\n );\r\n }\r\n\r\n if (\r\n this.search_objects[ServiceType.Car].chosen &&\r\n this.canSearch(ServiceType.Car)\r\n ) {\r\n concattedErrors.push(\r\n ...this.searches[ServiceType.Car].validationMessages\r\n );\r\n }\r\n\r\n if (\r\n this.search_objects[ServiceType.Rail].chosen &&\r\n this.canSearch(ServiceType.Rail)\r\n ) {\r\n concattedErrors.push(\r\n ...this.searches[ServiceType.Rail].validationMessages\r\n );\r\n }\r\n\r\n if (\r\n this.search_objects[ServiceType.Parking].chosen &&\r\n this.canSearch(ServiceType.Parking)\r\n ) {\r\n concattedErrors.push(\r\n ...this.searches[ServiceType.Parking].validationMessages\r\n );\r\n }\r\n\r\n if (\r\n this.search_objects[ServiceType.Cab].chosen &&\r\n this.canSearch(ServiceType.Cab)\r\n ) {\r\n concattedErrors.push(\r\n ...this.searches[ServiceType.Cab].validationMessages\r\n );\r\n }\r\n\r\n if (\r\n this.search_objects[ServiceType.Hotel].chosen &&\r\n this.canSearch(ServiceType.Hotel)\r\n ) {\r\n concattedErrors.push(\r\n ...this.searches[ServiceType.Hotel].validationMessages\r\n );\r\n }\r\n\r\n /*\r\n if (this.search_objects.hotel.chosen && this.canSearch(TravelTypeEnum.HOTEL)) {\r\n concattedErrors = concattedErrors.concat(this.hotel.validationMessages);\r\n }\r\n\r\n\r\n\r\n if (this.search_objects.flight.chosen && this.canSearch(TravelTypeEnum.FLIGHT)) {\r\n concattedErrors = concattedErrors.concat(this.flight.validationMessages);\r\n }\r\n\r\n if (this.search_objects.parking.chosen && this.canSearch(TravelTypeEnum.AIR_PARKING)) {\r\n concattedErrors.push(...this.parking.validationMessages);\r\n }\r\n\r\n if (this.search_objects.taxi.chosen && this.canSearch(TravelTypeEnum.TAXI)) {\r\n concattedErrors.push(...this.taxi.validationMessages);\r\n }\r\n\r\n if (this.search_objects.eurostar.chosen && this.canSearch(TravelTypeEnum.EUROSTAR)) {\r\n concattedErrors.push(...this.eurostar.validationMessages);\r\n }\r\n\r\n if (this.search_objects.coach.chosen && this.canSearch(TravelTypeEnum.COACH)) {\r\n concattedErrors.push(...this.coach.validationMessages);\r\n }*/\r\n this.errors.next(concattedErrors);\r\n return concattedErrors;\r\n }\r\n\r\n protected travellersContainUser(): boolean {\r\n return !!this.selectedTravellers.find((traveller: Traveller) => {\r\n return traveller.id === this.userService.getUserId().toString();\r\n });\r\n }\r\n\r\n public validateTravellers(): boolean {\r\n this.travellerValidationMessages = [];\r\n\r\n switch (this.userService.fullUserDetails.userData.value.booker_type) {\r\n case BookerType.SelfBook:\r\n if (\r\n !(\r\n this.selectedTravellers.length === 1 && this.travellersContainUser()\r\n )\r\n ) {\r\n // this should never trigger under normal conditions as the user should be loaded in as a traveller on login\r\n this.travellerValidationMessages.push(\r\n 'Current user must be a traveller'\r\n );\r\n }\r\n break;\r\n\r\n case BookerType.BookerWithSelf:\r\n if (\r\n !(this.selectedTravellers.length < 1) ||\r\n !this.travellersContainUser()\r\n ) {\r\n this.travellerValidationMessages.push('Please add your self.');\r\n this.traveller_error = true;\r\n }\r\n break;\r\n case BookerType.Booker:\r\n case BookerType.Company:\r\n case BookerType.CompanyGroup:\r\n case BookerType.Office:\r\n case BookerType.Tmc:\r\n case BookerType.Root:\r\n if (!(this.selectedTravellers.length >= 1)) {\r\n this.travellerValidationMessages.push(\r\n 'Please select at least one traveller'\r\n );\r\n this.traveller_error = true;\r\n }\r\n break;\r\n default:\r\n this.travellerValidationMessages.push(\r\n 'Unrecognised user type! - Please contact support.'\r\n );\r\n return false;\r\n }\r\n // console.log(this.travellerValidationMessages);\r\n return this.travellerValidationMessages.length === 0;\r\n }\r\n\r\n findPaxInTravellers(username: string) {\r\n return this.selectedTravellers.find((traveller: Traveller) => {\r\n return username === traveller.email;\r\n });\r\n }\r\n\r\n validateForms(): boolean {\r\n const searchObject: SearchObject = this._findSearchObtect();\r\n this.getAllErrorMessages();\r\n if (searchObject) {\r\n this.errors.next(\r\n this.searches[searchObject.type as keyof SearchParams].messages.value\r\n );\r\n return (\r\n this.validateTravellers() &&\r\n this.searches[searchObject.type as keyof SearchParams].isValid.value\r\n );\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n private _findSearchObtect(): SearchObject | null {\r\n return Object.values(this.search_objects).find((obj: SearchObject) => {\r\n return !!obj && obj.priority === this.highest_search_priority;\r\n });\r\n }\r\n\r\n startSearches(): void {\r\n this.newSearchStarted.next(true);\r\n this.search_loading = true;\r\n let searchObject: SearchObject;\r\n searchObject = this._findSearchObtect();\r\n if (searchObject) {\r\n searchObject.chosen = true;\r\n }\r\n\r\n if (searchObject && !this.router.url.includes(searchObject.resultUrl)) {\r\n this.router.navigate([searchObject.resultUrl]);\r\n }\r\n\r\n /*If the search exceeds the timeout time, cancel search and tell OBT that it's timed out*/\r\n const context = this;\r\n setTimeout(function () {\r\n if (context.search_loading) {\r\n context.search_loading = false;\r\n context.searchTimedOut.next(true);\r\n context.searchLoadingDone.next(true);\r\n }\r\n }, 12000);\r\n\r\n try {\r\n Promise.all(\r\n Object.values(this.searches).map(\r\n (search: BaseEnterpriseSearch<any, any, any[]>) => {\r\n return !!search &&\r\n this.search_objects[search.type] &&\r\n this.search_objects[search.type].chosen\r\n ? search.startSearch()\r\n : Promise.resolve(false);\r\n }\r\n )\r\n ).finally(() => {\r\n this.search_loading = false;\r\n this.searchLoadingDone.next(true);\r\n });\r\n } catch (error) {\r\n console.error(error);\r\n this.search_loading = false;\r\n this.searchLoadingDone.next(true);\r\n }\r\n }\r\n\r\n getTaxiStationLocations(\r\n term: string,\r\n isLoading?: BehaviorSubject<boolean>\r\n ): Observable<RailAirport[]> {\r\n return term.length < 3\r\n ? of([])\r\n : of([\r\n {\r\n destination: 'Manchester Airpot',\r\n isairport: true,\r\n supplier_code: 'MAN',\r\n address: 'Manchester Airport',\r\n postcode: 'M90 1QX'\r\n },\r\n {\r\n destination: 'Manchester Piccadilly',\r\n isairport: false,\r\n supplier_code: 'MMAN',\r\n address: 'Manchester Piccadilly',\r\n postcode: 'M1 2PZ'\r\n },\r\n {\r\n destination: 'London Heathrow',\r\n isairport: true,\r\n supplier_code: 'LHR',\r\n address: 'London Heathrow Airport',\r\n postcode: 'TW6 1EW'\r\n }\r\n ]);\r\n }\r\n\r\n getAddresses(isLoading: BehaviorSubject<boolean>): Observable<AddressForm[]> {\r\n return of([\r\n {\r\n House: 'Cecil Court',\r\n Street: '28-36 Cecil Road',\r\n Town: 'Hale',\r\n PostCode: 'WA15 9PB',\r\n Country: 'UK'\r\n }\r\n ]);\r\n }\r\n\r\n getUserAddresses(\r\n isLoading?: BehaviorSubject<boolean>\r\n ): Observable<AddressForm[]> {\r\n return this.userAddressesFetcher.fetchList().pipe(\r\n take(1),\r\n map((results: any): any => {\r\n return results.map((result: any) => {\r\n return {\r\n ID: result.id,\r\n House: result.numberOrName,\r\n Street: result.street,\r\n Town: result.town,\r\n PostCode: result.postcode,\r\n Country: result.countryCode\r\n };\r\n });\r\n })\r\n );\r\n }\r\n\r\n deleteUserAddressByID(id: string): Observable<any> {\r\n return this.baseDeleteUserAddressUpdater.updateOne({ id: id });\r\n }\r\n\r\n getHotelChain(\r\n term: string,\r\n isLoading?: BehaviorSubject<boolean>\r\n ): Observable<any[]> {\r\n if (term.length > 2) {\r\n isLoading?.next(true);\r\n const obs: Observable<SearchHotelChainsResultArray> =\r\n this.searchHotelChainsFetcher.fetchList({ query: term });\r\n const func = (results: SearchHotelChainsResultArray): any[] => {\r\n const data: any[] = results.map(\r\n (result: SearchHotelChainsResult): any => {\r\n return {\r\n name: result\r\n };\r\n }\r\n );\r\n isLoading?.next(false);\r\n return data;\r\n };\r\n return obs.pipe(take(1), map(func));\r\n }\r\n\r\n return of([]);\r\n }\r\n\r\n getOfficeNames(\r\n isLoading?: BehaviorSubject<boolean>\r\n ): Observable<ConfermaOfficeNames[]> {\r\n return this.confermaOfficeNamesFetcher.fetchList().pipe(\r\n take(1),\r\n map((results): any => {\r\n if (results) {\r\n return results?.results?.map((result: ConfermaOfficeNames) => {\r\n return {\r\n id: result.id,\r\n name: result.name\r\n };\r\n });\r\n }\r\n })\r\n );\r\n isLoading?.next(false);\r\n }\r\n\r\n getRailCards(): Observable<ReferenceRailCardQualifier[]> {\r\n return this.getRailCardsFetcher.fetchList().pipe(\r\n take(1),\r\n map((results): any => {\r\n if (results) {\r\n return results?.map((result: ReferenceRailCardQualifier) => {\r\n return {\r\n name: result.name,\r\n code: result.code\r\n };\r\n });\r\n }\r\n })\r\n );\r\n }\r\n\r\n public getAirportByCode(code: string): Observable<AirportSearchResults> {\r\n if (code) {\r\n return this.searchAirportsFetcher.fetchOne({ query: code }).pipe(\r\n take(1),\r\n map((result: AirportSearchResults) => {\r\n return result\r\n })\r\n );\r\n } else {\r\n return of();\r\n }\r\n }\r\n\r\n // TO BE OVER RIDDEN BY OBT SUBCLASSES\r\n protected init_search_objects(): SearchObjects {\r\n return {};\r\n }\r\n\r\n /********************************************************\r\n * SEARCH OBJECTS FOR GET ME THERE DOOR 2 DOOR *\r\n * Difference(s): *\r\n * All objects have a priority of 1 so that they are *\r\n * searched at the same time *\r\n * Urls changed to getmethere *\r\n *******************************************************/\r\n protected getMeThereSearchObjects(): SearchObjects {\r\n return {};\r\n }\r\n /*\r\n * @desc - gets all selected travellers\r\n * Implemented for rail card reasons in LU\r\n **/\r\n getSelectedtravellers(): Traveller[] {\r\n return this.selectedTravellers;\r\n }\r\n\r\n resetSearchObjects(): void {\r\n this.search_objects = this.helpers.clone(this.init_search_objects());\r\n }\r\n\r\n /*\r\n These are the possible array of values from API are exptected and function manipulate to create the list\r\n [\"Main\"]\r\n [\"1\"]\r\n [\"1\", \"2\"]\r\n [\"1\", \"2\", \"3\"]\r\n [\"1\", \"2\", \"3\", \"4\"]\r\n [\"1\", \"2\", \"3\", \"4\", \"5\"]\r\n [\"South\", \"North\"]\r\n */\r\n public processTerminals(terminals: string[]): TerminalsType[] {\r\n const tempTerminal: TerminalsType[] = [];\r\n if (\r\n terminals.includes('1') ||\r\n terminals.includes('2') ||\r\n terminals.includes('3') ||\r\n terminals.includes('4') ||\r\n terminals.includes('5')\r\n ) {\r\n tempTerminal.push({ key: 'Any Terminal', value: 'Any' });\r\n terminals.forEach((item) => {\r\n tempTerminal.push({ key: `Terminal ${item}`, value: `${item}` });\r\n });\r\n } else {\r\n if (terminals.length === 1) {\r\n tempTerminal.push({ key: `${terminals[0]} Terminal`, value: 'Any' });\r\n } else {\r\n tempTerminal.push({ key: 'Any Terminal', value: 'Any' });\r\n terminals.forEach((item) => {\r\n tempTerminal.push({ key: `${item} Terminal`, value: `${item}` });\r\n });\r\n }\r\n }\r\n return tempTerminal;\r\n }\r\n\r\n async saveUserAddress(\r\n address: SaveUserAddressMutationVariables\r\n ): Promise<void> {\r\n if (address) {\r\n await this.saveUserAddressUpdater.updateOne(address).toPromise();\r\n }\r\n }\r\n\r\n public canBook(service: ServiceType) {\r\n return this.userService.canBook(service) ? true : false;\r\n }\r\n\r\n isPostcodeVaild(postcode: string): Observable<boolean> {\r\n return this.baseValidateIsPostcodeValidTester.test({ postcode });\r\n }\r\n\r\n /* Create Query Defaults Start */\r\n /*\r\n * Create the Cab Hire search query with supplied param, auto fill with defaults if fields are empty.\r\n * @param {any} ...args example - searchService.setCabHireQuery(data.query, { departs: momentDateTime })\r\n * @return {QuerySearchCabHireArgs} Returns QuerySearchCabHireArgs type\r\n */\r\n public makeCabHireQuery(...args: any): CabHireTempParams {\r\n const defaultVal: CabHireTempParams = {\r\n adults: 0,\r\n airport: null,\r\n children: 0,\r\n countryCode: null,\r\n departs: this.helpers.makeMomentDayTime(),\r\n fromAddress: null,\r\n fromStation: null,\r\n fromLocationType: TaxiFormMode.ADDRESS,\r\n infants: 0,\r\n toAddress: null,\r\n toStation: null,\r\n toLocationType: TaxiFormMode.ADDRESS,\r\n vehicleType: CabHireVehicleType.Any,\r\n viasFrom: null,\r\n viasTo: null\r\n };\r\n\r\n return this.helpers.sanatizeReturns<CabHireTempParams>(\r\n defaultVal,\r\n Object.assign({}, ...args),\r\n ['departs']\r\n );\r\n }\r\n\r\n /*\r\n * Create the Car Hire search query with supplied param, auto fill with defaults if fields are empty.\r\n * @param {any} ...args example - searchService.setCarHireQuery(data.query, { departs: momentDateTime })\r\n * @return {QuerySearchCarHireArgs} Returns QuerySearchCarHireArgs type\r\n */\r\n public makeCarHireQuery(...args: any): CarHireTempParams {\r\n const defaultVal: CarHireTempParams = {\r\n adults: 0,\r\n airCon: null,\r\n carClass: null,\r\n carType: null,\r\n children: 0,\r\n chosenVendor: null,\r\n cityDropoff: null,\r\n cityDropoffDepot: null,\r\n cityPickup: null,\r\n cityPickupDepot: null,\r\n dropoff_country: 'GB',\r\n dropoff_datetime: null,\r\n dropoff_location: null,\r\n estimatedMileage: null,\r\n locationType: null,\r\n pickup_country: null,\r\n pickup_datetime: null,\r\n pickup_location: null,\r\n postcodeDropoff: null,\r\n postcodeDropoffRaw: null,\r\n postcodePickup: null,\r\n postcodePickupRaw: null,\r\n return_to_pickup: true,\r\n transmission: null\r\n };\r\n\r\n return this.helpers.sanatizeReturns<CarHireTempParams>(\r\n defaultVal,\r\n Object.assign({}, ...args),\r\n ['pickup_datetime', 'dropoff_datetime']\r\n );\r\n }\r\n\r\n /*\r\n * Creates a Flight search query with supplied params, auto fills with defaults if fields are empty.\r\n * @param {any} ...args Example - searchService.makeFlightQuery(data.query, { override: \"property\" })\r\n * @return {QuerySearchFlightsArgs} Returns QuerySearchFlightsArgs type\r\n */\r\n public makeFlightQuery(...args: any): FlightTempParams {\r\n const now = this.helpers.makeMomentDayTime();\r\n const tomorrow = this.helpers.makeMomentDayTime(1);\r\n const momentOutDateTime = this.helpers.momentRoundMinutes(now, 30);\r\n const momentInDateTime = this.helpers.momentRoundMinutes(tomorrow, 30);\r\n\r\n const defaultVal: FlightTempParams = {\r\n adults: 0,\r\n arriveLocation: null,\r\n cabinClass: FlightCabinClass.Any,\r\n children: 0,\r\n chosenSearchType: null,\r\n departLocation: null,\r\n fareType: FareType.Flexible,\r\n inboundDate: momentOutDateTime,\r\n inTimeCriteria: TimeWindow.Depart,\r\n maxConnections: null,\r\n includeNearbyAirports: false,\r\n multiDestination: [],\r\n outBoundDate: momentInDateTime,\r\n outTimeCriteria: TimeWindow.Depart,\r\n preferredCarriers: [null, null, null, null],\r\n returnCabinClass: FlightCabinClass.Any\r\n };\r\n\r\n return this.helpers.sanatizeReturns<FlightTempParams>(\r\n defaultVal,\r\n Object.assign({}, ...args),\r\n ['outBoundDate', 'inboundDate']\r\n );\r\n }\r\n\r\n /*\r\n * Creates a Hotel search query with supplied params, auto fills with defaults if fields are empty.\r\n * @param {any} ...args Example - searchService.makeHotelQuery(data.query, { override: \"property\" })\r\n * @return {QuerySearchHotelsArgs} Returns QuerySearchHotelsArgs type\r\n */\r\n public makeHotelQuery(...args: any): HotelTempParams {\r\n const defaultVal = {\r\n checkin_date: moment().set('hour', 23).set('minute', 59),\r\n checkout_date: moment().add(1, 'day').set('hour', 23).set('minute', 59),\r\n country: { cCode: 'GB', cName: 'United Kingdom' },\r\n currency: 'GBP',\r\n distance: 5, // default 5 miles radius\r\n hotel_availability: null,\r\n hotel_chain: null,\r\n hotel_name: null,\r\n location_type_select: LocationTypes.Airport,\r\n location: null, // might want to split this out to city, airport, office, railstation - this will do for now\r\n no_of_occupants: 1, // similarly think this is a max of 3\r\n no_of_rooms: 1, // max of 4 in old sabs, not sure here\r\n office: null,\r\n postcode: null,\r\n prefered_hotels_only: false,\r\n trainsStation: null\r\n } as HotelTempParams;\r\n\r\n return this.helpers.sanatizeReturns<HotelTempParams>(\r\n defaultVal,\r\n Object.assign({}, ...args),\r\n ['checkin_date', 'checkout_date']\r\n );\r\n }\r\n\r\n /*\r\n * Creates a Lounges search query with supplied params, auto fills with defaults if fields are empty.\r\n * @param {any} ...args Example - searchService.makeLoungesQuery(data.query, { override: \"property\" })\r\n * @return {QuerySearchLoungesArgs} Returns QuerySearchLoungesArgs type\r\n */\r\n public makeLoungesQuery(...args: any): LoungesTempParams {\r\n const defaultVal = {\r\n adults: 0,\r\n arrivalDatetime: moment(),\r\n children: 0,\r\n infants: 0,\r\n locationCode: null,\r\n terminal: null\r\n } as LoungesTempParams;\r\n\r\n return this.helpers.sanatizeReturns<LoungesTempParams>(\r\n defaultVal,\r\n Object.assign({}, ...args),\r\n ['arrivalDatetime']\r\n );\r\n }\r\n\r\n /*\r\n * Creates a Parking search query with supplied params, auto fills with defaults if fields are empty.\r\n * @param {any} ...args Example - searchService.makeParkingQuery(data.query, { override: \"property\" })\r\n * @return {QuerySearchParkingArgs} Returns QuerySearchParkingArgs type\r\n */\r\n public makeParkingQuery(...args: any): ParkingTempParams {\r\n const now = this.helpers.makeMomentDayTime();\r\n const tomorrow = this.helpers.makeMomentDayTime(1);\r\n const momentOutDateTime = this.helpers.momentRoundMinutes(now, 30);\r\n const momentInDateTime = this.helpers.momentRoundMinutes(tomorrow, 30);\r\n\r\n const defaultVal = {\r\n arrivalDatetime: momentOutDateTime,\r\n carParkedForYou: null,\r\n departDatetime: momentInDateTime,\r\n locationCode: null,\r\n meetAndGreet: null,\r\n onAirport: null,\r\n outFlightNumber: null,\r\n parkAndRide: null,\r\n parkAndStroll: null,\r\n recommended: null,\r\n terminal: null\r\n } as ParkingTempParams;\r\n\r\n return this.helpers.sanatizeReturns<ParkingTempParams>(\r\n defaultVal,\r\n Object.assign({}, ...args),\r\n ['arrivalDatetime', 'departDatetime']\r\n );\r\n }\r\n\r\n /*\r\n * Creates a Rail search query with supplied params, auto fills with defaults if fields are empty.\r\n * @param {any} ...args Example - searchService.makeRailQuery(data.query, { override: \"property\" })\r\n * @return {QuerySearchRailArgs} Returns QuerySearchRailArgs type\r\n */\r\n public makeRailQuery(...args: any): RailTempParams {\r\n const time = this.helpers.momentRoundMinutes(moment(), 30);\r\n const defaultVal: RailTempParams = {\r\n airportExpressStation: null,\r\n applyRailcards: false,\r\n carnetTicket: false,\r\n chosenSearchClass: RailClass.All,\r\n chosenSearchType: RailJourneyType.ReturnJourney,\r\n disableAutoDiscounts: false,\r\n extraTime: false,\r\n inBoundDateTime: time,\r\n isAirportExpress: false,\r\n noOfAdults: 0,\r\n noOfChildren: 0,\r\n openReturn: false,\r\n outboundCriteria: RailSearchCriteria.Depart,\r\n outBoundDateTime: time,\r\n prioritiseByPrice: false,\r\n returnCriteria: RailSearchCriteria.Depart,\r\n travellingFrom: null,\r\n travellingTo: null,\r\n via: false,\r\n viaLocation: null,\r\n railCards: null\r\n };\r\n\r\n return this.helpers.sanatizeReturns<RailTempParams>(\r\n defaultVal,\r\n Object.assign({}, ...args),\r\n ['inBoundDateTime', 'outBoundDateTime']\r\n );\r\n }\r\n\r\n /*\r\n * Creates a Rail search query with supplied params, auto fills with defaults if fields are empty.\r\n * @param {any} ...args Example - searchService.makeRailQuery(data.query, { override: \"property\" })\r\n * @return {QuerySearchRailArgs} Returns QuerySearchRailArgs type\r\n */\r\n public makeIrlQuery(...args: any): IrlTempParams {\r\n const time = this.helpers.momentRoundMinutes(moment(), 30);\r\n const defaultVal: IrlTempParams = {\r\n supplier: null, // IRLSupplier!\r\n countryCode: '',\r\n // journeyType: this.journeyType, // IRLJourneyType!\r\n class: null, // IRLClass\r\n outboundDepartureDateTime: time,\r\n departureLocationId: null,\r\n arrivalLocationId: null,\r\n adults: 0,\r\n children: 0,\r\n returnDepartureDateTime: time,\r\n journeyType: null\r\n };\r\n\r\n return this.helpers.sanatizeReturns<IrlTempParams>(\r\n defaultVal,\r\n Object.assign({}, ...args),\r\n ['returnDepartureDateTime', 'outboundDepartureDateTime']\r\n );\r\n }\r\n\r\n /*\r\n * Creates a Eurostar search query with supplied params, auto fills with defaults if fields are empty.\r\n * @param {any} ...args Example - searchService.makeEurostarQuery(data.query, { override: \"property\" })\r\n * @return {EurostarTempParams} Returns QuerySearchEurostarArgs type\r\n */\r\n public makeEurostarQuery(...args: any): EurostarTempParams {\r\n const now = this.helpers.makeMomentDayTime();\r\n const tomorrow = this.helpers.makeMomentDayTime(1);\r\n const momentOutDateTime = this.helpers.momentRoundMinutes(now, 30);\r\n const momentInDateTime = this.helpers.momentRoundMinutes(tomorrow, 30);\r\n\r\n const defaultVal: EurostarTempParams = {\r\n adults: 0,\r\n arriveLocation: null,\r\n cabinClass: FlightCabinClass.Any,\r\n children: 0,\r\n chosenSearchType: EurostarSearchType.return,\r\n departLocation: null,\r\n fareType: FareType.Flexible,\r\n inboundDate: momentOutDateTime,\r\n inTimeCriteria: TimeWindow.Depart,\r\n maxConnections: null,\r\n includeNearbyAirports: false,\r\n multiDestination: [],\r\n outBoundDate: momentInDateTime,\r\n outTimeCriteria: TimeWindow.Depart,\r\n preferredCarriers: [null, null, null, null],\r\n returnCabinClass: FlightCabinClass.Any\r\n };\r\n\r\n return this.helpers.sanatizeReturns<EurostarTempParams>(\r\n defaultVal,\r\n Object.assign({}, ...args),\r\n ['outBoundDate', 'inboundDate']\r\n );\r\n }\r\n /* Create Query Defaults End */\r\n\r\n shouldAddTravellerSubscription(): boolean {\r\n return false;\r\n }\r\n\r\n getAutoLogoutConfig() {\r\n return {};\r\n }\r\n /**\r\n * Overwrite if the OBT displays a list of offices instead of searching on them\r\n */\r\n public shouldFetchAllOffices(): boolean {\r\n return false;\r\n }\r\n isFlightsGrouped(): boolean {\r\n return false;\r\n }\r\n getCountryFullNameFromCountryCode(code: string): string {\r\n let fullName = 'Unknown';\r\n\r\n for (let i = 0; i < this.countries.length; i++) {\r\n const country = this.countries[i];\r\n\r\n if (country.cCode === code) {\r\n return country.cName;\r\n }\r\n }\r\n\r\n return fullName;\r\n }\r\n\r\n getUserRecentSearches(\r\n serviceType?: ServiceType,\r\n isLoading?: BehaviorSubject<boolean>\r\n ): Observable<RecentSearch[]> {\r\n isLoading?.next(true);\r\n const query = { serviceType };\r\n const obs: Observable<GetUserRecentSearchesResultArray> =\r\n this.getUserRecentSearchesFetcher.fetchList(query);\r\n\r\n const func = (\r\n results: GetUserRecentSearchesResultArray\r\n ): RecentSearch[] => {\r\n const data: RecentSearch[] = results.map(\r\n (result: GetUserRecentSearchesResult): RecentSearch => {\r\n return {\r\n id: result.id,\r\n name: result.name,\r\n serviceType: result.serviceType,\r\n searchArgs: result.searchArgs,\r\n createdAt: result.createdAt,\r\n updatedAt: result.updatedAt,\r\n travelDate: result.travelDate,\r\n travellers: result.travellers\r\n };\r\n }\r\n );\r\n isLoading?.next(false);\r\n return data;\r\n };\r\n return obs.pipe(take(1), map(func));\r\n }\r\n\r\n deleteRecentSearchByID(id: string): Observable<any> {\r\n return this.baseDeleteRecentSearchUpdater.updateOne({ id: id });\r\n }\r\n\r\n saveRecentSearch(query: SaveRecentSearchMutationVariables): void {\r\n if (query) {\r\n this.baseSaveRecentSearchUpdater.updateOne(query).pipe(take(1)).subscribe();\r\n }\r\n }\r\n\r\n /**\r\n * @description - get the list of eurostar station locations based on search term given\r\n * @todo - fill this out so that it actually performs a http call\r\n * @param term - the term we want to search by\r\n * @returns\r\n */\r\n lookupEurostarStations(term: string): Observable<any[]> {\r\n console.log('term| ', term);\r\n if (term === '') {\r\n return of(this.eurostations);\r\n } else {\r\n return of(this.eurostations.filter(v => v.destination.toLowerCase().indexOf(term.toLowerCase()) > -1));\r\n }\r\n }\r\n\r\n searchTravellers(\r\n input: string,\r\n searchTravellersBy: TravellerSearchTypes\r\n ): Observable<Traveller[]> {\r\n const type: BookerType = this.userService.getUserBookingType();\r\n this.traveller_error = false;\r\n /* TODO\r\n if (this.userService.useAgentCanBookFor()) {\r\n type = this.userService.getUserFavoriteValue('AgentCanBookFor');\r\n }*/\r\n if (\r\n type &&\r\n type !== BookerType.SelfBook &&\r\n type !== BookerType.Traveller &&\r\n input.length >= 1\r\n ) {\r\n const inputWords = input.toLowerCase().match(/([\\w])+/g);\r\n const args: SearchUserCanBookForQueryVariables = {};\r\n switch (searchTravellersBy) {\r\n case TravellerSearchTypes.name:\r\n args.userName = inputWords.length > 1 ? inputWords[0] : input;\r\n break;\r\n case TravellerSearchTypes.email:\r\n args.email = input;\r\n break;\r\n case TravellerSearchTypes.employeeNumber:\r\n args.employeeId = input;\r\n break;\r\n }\r\n\r\n return this.searchUsersCanBookForFetcher.fetchList(args).pipe(\r\n map((data: Traveller[]) => {\r\n if (data) {\r\n return data.sort((a, b) => {\r\n return a.surname < b.surname ? -1 : a.surname > b.surname ? 1 : 0;\r\n });\r\n }\r\n return [];\r\n })\r\n );\r\n }\r\n }\r\n}\r\n","import { UserData } from '../interfaces/user.data';\r\n\r\nexport interface Traveller {\r\n isChild: boolean;\r\n isInfant: boolean;\r\n childDOB: any;\r\n guest: any;\r\n id: string;\r\n forename: string;\r\n surname: string;\r\n email: string;\r\n title: string;\r\n name: string;\r\n}\r\n\r\n// @dynamic\r\nexport class TravellerObject {\r\n isChild: boolean;\r\n childDOB: string;\r\n\r\n private static hasItem(item: any) {\r\n return !!item;\r\n }\r\n\r\n public static fullname(traveller: Traveller): string {\r\n return [traveller.title, traveller.forename, traveller.surname].filter(this.hasItem).join(' ');\r\n }\r\n\r\n public static makeTravellerObjectFromUser(user: UserData): Traveller {\r\n return {\r\n id: user.user_id.toString(),\r\n forename: user.forename,\r\n surname: user.surname,\r\n email: user.username,\r\n title: user.title,\r\n isChild: false,\r\n isInfant: false,\r\n childDOB: null,\r\n guest: false,\r\n name: user.surname + ' ' + user.forename\r\n };\r\n }\r\n\r\n public static equals(first: Traveller, second: Traveller): boolean {\r\n return first.email === second.email;\r\n }\r\n\r\n public static compare(first: Traveller, second: Traveller): number {\r\n const name1 = TravellerObject.fullname(first);\r\n const name2 = TravellerObject.fullname(second);\r\n\r\n if (name1 === name2) {\r\n return 0;\r\n }\r\n if (name1 < name2) {\r\n return -1;\r\n }\r\n\r\n return 1;\r\n }\r\n}\r\n","import moment from 'moment';\r\nimport Ajv from 'ajv';\r\nimport { BehaviorSubject, Observable, Observer, Subject } from 'rxjs';\r\nimport { switchMap, take, tap, map } from 'rxjs/operators';\r\n\r\nimport {\r\n AddItemToBasket,\r\n Basket,\r\n BasketItem,\r\n BasketStatus,\r\n ManagementInfo,\r\n PassengerType,\r\n PaymentMethod,\r\n Service,\r\n ServiceType,\r\n SetBasketItemMiValue,\r\n SupplementaryBookingInfo\r\n} from '../types/graphql.types';\r\nimport {\r\n GetMiAutoSugestionArray,\r\n GetUserBasketItemResult,\r\n GetUserBasketResult,\r\n MenuSlideEnum,\r\n UserBasketResult\r\n} from '../types/types';\r\nimport { ManagementInfoAndIsValid } from '../classes/management-info-and-valid';\r\nimport { ModalTypes } from '../classes/modal-types.enum';\r\nimport { SupplementaryBookingInfoImpl } from '../classes/supplementary-booking-info-impl';\r\nimport { BasketInfoMiDetailsImpl } from '../classes/basket-info-mi-details.impl';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { BaseModalOpenerService } from './modal-opener.service';\r\nimport {\r\n BaseGetUserFetcher,\r\n SearchGetUserFetcherType\r\n} from '../fetchers/user-fetcher';\r\nimport {\r\n AcceptNewPriceFetcherType,\r\n BaseAcceptNewPriceUpdater\r\n} from '../updaters/accept-new-price.updater';\r\nimport {\r\n BaseGetBasketFetcher,\r\n GetBasketFetcherType\r\n} from '../fetchers/basket-fetcher';\r\nimport {\r\n BaseGetUserBasketsFetcher,\r\n GetUserBasketsFetcherType\r\n} from '../fetchers/get-users-baskets-fetcher';\r\nimport {\r\n BaseGetMiAutoSugestionFetcher,\r\n MiAutoSuggestFetcherType\r\n} from '../fetchers/getMiAutoSugestions.fetcher';\r\nimport {\r\n AddItemToBasketFetcherType,\r\n BaseAddItemToBasketUpdater\r\n} from '../updaters/add-item-to-basket.updater';\r\nimport {\r\n AddUserBasketFetcherType,\r\n BaseAddUserToBasketItemUpdater\r\n} from '../updaters/addUserToBasketItem';\r\nimport {\r\n SetBasketItemLeadPassengerFetcherType,\r\n BaseSetBasketItemLeadPassengerUpdater\r\n} from '../updaters/set-basket-item-lead-passenger.updater';\r\nimport {\r\n BaseBookBasketUpdater,\r\n BookBasketFetcherType\r\n} from '../updaters/book-basket-updater';\r\nimport {\r\n BaseCreateBasketUpdater,\r\n CreateBasketFetcherType\r\n} from '../updaters/create-basket-updater';\r\nimport {\r\n BaseDeleteBasketUpdater,\r\n DeleteBasketFetcherType\r\n} from '../updaters/remove-basket-updater';\r\nimport {\r\n BaseRemoveItemFromBasketUpdater,\r\n DeleteBasketItemFetcherType\r\n} from '../updaters/remove-item-from-basket.updater';\r\nimport {\r\n BaseRevalidateBasketUpdater,\r\n RevalidateBasketFetcherType\r\n} from '../updaters/revalidate-basket-updater';\r\nimport {\r\n BaseSendBasketForApprovalUpdater,\r\n SendBasketApprovalFetcherType\r\n} from '../updaters/send-basket-for-approval.updater';\r\nimport {\r\n BaseSetBasketItemMiGroupUpdater,\r\n SetBasketItMiGroupFetcherType\r\n} from '../updaters/set-basket-item-mi-group';\r\nimport { Traveller } from '../models/traveller.object';\r\nimport { SearchObject } from '../interfaces/search-objects.interface';\r\nimport {\r\n BaseSetBasketItemMiValueUpdater,\r\n SetBasketItMiFetcherType\r\n} from '../updaters/set-basket-item-mi-value-updater';\r\nimport {\r\n BaseValidateMiFreeValueTester,\r\n ValidateMiFetcherType\r\n} from '../testers/validate-mi-free-value.tester';\r\nimport { EnterpriseSearchServiceInterface } from '../interfaces/Isearch.service';\r\nimport {\r\n FullUserDetails,\r\n UserServiceInterface\r\n} from '../interfaces/Iuser.service';\r\nimport {\r\n EnterpriseBasketServiceInterface,\r\n InternalBasketInterface\r\n} from '../interfaces/Ienterprise-basket.service';\r\nimport { SupplementaryBookingInfoInterface } from '../interfaces/Isupplementary-booking-info-impl';\r\nimport {\r\n BasemoveBasketItemToBasket,\r\n MoveItemToADifferentBasketType\r\n} from '../updaters/move-basket-item-to-basket';\r\nimport {\r\n BaseUpdateBasketNotesType,\r\n BaseUpdateBasketNoteUpdater\r\n} from '../updaters/update-basket-notes-updater';\r\nimport {\r\n BaseUpdateBasketTitleType,\r\n BaseUpdateBasketTitleUpdater\r\n} from '../updaters/update-basket-title-updater';\r\nimport {\r\n BaseSetPaymentOptionUpdater,\r\n SetBasketItemPaymentMethodType\r\n} from '../updaters/set-basket-item-paymenr-option.updater';\r\nconst TEMPID = 'TEMPID_';\r\n\r\nexport interface BasketAndItem {\r\n basketId: string;\r\n item: BasketItem;\r\n}\r\nexport interface MiGroupDetail {\r\n type: ServiceType;\r\n options: string[];\r\n basketItem: BasketItem;\r\n value: string;\r\n}\r\nexport interface BasketItemManagementInfo {\r\n miPerItem: ManagementInfoAndIsValid[];\r\n miPerUser: {\r\n [key: string]: {\r\n managementInfo: ManagementInfoAndIsValid[];\r\n supplementaryBookingInfo?: SupplementaryBookingInfoInterface;\r\n };\r\n };\r\n users: string[];\r\n basketItem: BasketItem;\r\n}\r\n\r\nexport interface BasketInformation {\r\n prices: { [key: string]: number };\r\n mixedCurrency: boolean;\r\n count: number;\r\n miGroups: MiGroupDetail[];\r\n basketInfoMiDetails: BasketInfoMiDetailsImpl[];\r\n suppInfo: SupplementaryBookingInfoInterface[];\r\n}\r\n\r\nexport interface BasketPricesList {\r\n type: ServiceType;\r\n price: number;\r\n currency?: string;\r\n text: string;\r\n}\r\n\r\nexport interface BasketPrices {\r\n total: number;\r\n currency?: string;\r\n list: BasketPricesList[];\r\n}\r\n\r\nexport type BasketDetails = UserBasketResult & BasketInformation;\r\nexport class InternalBasket<Q extends SearchGetUserFetcherType>\r\n implements BasketInformation, InternalBasketInterface\r\n{\r\n subject: BehaviorSubject<BasketDetails>;\r\n id?: string;\r\n tempid?: string;\r\n title: string;\r\n prices: { [key: string]: number };\r\n mixedCurrency: boolean;\r\n count: number;\r\n miGroups: MiGroupDetail[];\r\n basketInfoMiDetails: BasketInfoMiDetailsImpl[];\r\n suppInfo: SupplementaryBookingInfoInterface[];\r\n grandTotal: { [key: string]: number };\r\n constructor(\r\n basket: UserBasketResult,\r\n private helpers: BaseHelperRoutines,\r\n private basketService: EnterpriseBasketServiceInterface,\r\n private getUserFetcher: BaseGetUserFetcher<Q>\r\n ) {\r\n Object.assign(this, {\r\n subject: new BehaviorSubject<BasketDetails>({\r\n ...basket,\r\n prices: {},\r\n mixedCurrency: false,\r\n count: 0,\r\n miGroups: [],\r\n basketInfoMiDetails: [],\r\n suppInfo: []\r\n }),\r\n tempid: basket.id,\r\n id: basket.id,\r\n title: basket.title,\r\n prices: {},\r\n mixedCurrency: false,\r\n count: 0,\r\n miGroups: [],\r\n basketInfoMiDetails: [],\r\n suppInfo: []\r\n });\r\n this.next(basket);\r\n }\r\n\r\n destructor() {\r\n this.subject.complete();\r\n }\r\n\r\n next(basket: UserBasketResult) {\r\n basket = this.helpers.clone(basket);\r\n if (\r\n basket.status === BasketStatus.Approved &&\r\n basket.basketItems[0].perItemPhoneNumber === undefined\r\n ) {\r\n // We're in approved state so we need to make sure we have the supplement stuff\r\n this.basketService\r\n .getBasket({ id: basket.id, withSupplemental: true })\r\n .subscribe((newBasket: UserBasketResult) => {\r\n this.next(newBasket);\r\n });\r\n return;\r\n }\r\n this.id = basket.id;\r\n this.title = basket.title;\r\n const toSend: BasketDetails = {\r\n ...basket,\r\n ...(basket.basketItems || []).reduce(\r\n (accum: BasketInformation, item: BasketItem, index: number) => {\r\n if (!accum.prices[item.currency]) {\r\n accum.prices[item.currency] = 0;\r\n }\r\n accum.prices[item.currency] += item.price;\r\n\r\n accum.suppInfo.push(\r\n new SupplementaryBookingInfoImpl(\r\n item,\r\n this.helpers,\r\n this.getUserFetcher\r\n )\r\n );\r\n if (item.miGroupsAvailable && item.miGroupsAvailable.length > 0) {\r\n accum.miGroups.push({\r\n type: item.service.type,\r\n options: item.miGroupsAvailable,\r\n basketItem: item,\r\n value: item.miGroupSelected || ''\r\n });\r\n }\r\n if (item.managementInfo?.length > 0 && item.users?.length > 0) {\r\n accum.basketInfoMiDetails.push(\r\n new BasketInfoMiDetailsImpl(\r\n item,\r\n this.basketService,\r\n this.helpers\r\n )\r\n );\r\n }\r\n return accum;\r\n },\r\n {\r\n prices: {},\r\n mixedCurrency: false,\r\n count: basket.basketItems?.length || 0,\r\n miGroups: [],\r\n basketInfoMiDetails: [],\r\n suppInfo: []\r\n }\r\n )\r\n };\r\n toSend.mixedCurrency = Object.keys(toSend.prices).length > 1;\r\n this.subject.next(toSend);\r\n }\r\n}\r\n\r\nexport abstract class BaseEnterpriseBasketService<\r\n ANPU_Q extends AcceptNewPriceFetcherType,\r\n AITB_Q extends AddItemToBasketFetcherType,\r\n AUTB_Q extends AddUserBasketFetcherType,\r\n CB_Q extends CreateBasketFetcherType,\r\n GB_Q extends GetBasketFetcherType,\r\n BB_Q extends BookBasketFetcherType,\r\n DB_Q extends DeleteBasketFetcherType,\r\n GAS_Q extends MiAutoSuggestFetcherType,\r\n RIB_Q extends DeleteBasketItemFetcherType,\r\n RVB_Q extends RevalidateBasketFetcherType,\r\n SBMI_Q extends SetBasketItMiGroupFetcherType,\r\n SVMI_Q extends SetBasketItMiFetcherType,\r\n VMI_Q extends ValidateMiFetcherType,\r\n SBA_Q extends SendBasketApprovalFetcherType,\r\n GU_Q extends SearchGetUserFetcherType,\r\n GUB_Q extends GetUserBasketsFetcherType,\r\n SBLP_Q extends SetBasketItemLeadPassengerFetcherType,\r\n MITDB_Q extends MoveItemToADifferentBasketType,\r\n UBN_Q extends BaseUpdateBasketNotesType,\r\n UBT_Q extends BaseUpdateBasketTitleType,\r\n SBM_Q extends SetBasketItemPaymentMethodType\r\n> implements EnterpriseBasketServiceInterface\r\n{\r\n private currentBaskets: InternalBasket<GU_Q>[] = [];\r\n\r\n highlightBasketItemsEmitter: Subject<GetUserBasketItemResult[]> = new Subject<\r\n GetUserBasketItemResult[]\r\n >();\r\n\r\n basketChangeEmitter: BehaviorSubject<string> = new BehaviorSubject<string>(\r\n ''\r\n );\r\n\r\n private get currentBasketID(): string {\r\n return this.basketChangeEmitter.value;\r\n }\r\n\r\n private set currentBasketID(value: string) {\r\n if (value !== this.currentBasketID) {\r\n // this prevents the emitter getting stuck in a loop - casuing browser overloads\r\n this.basketChangeEmitter.next(value);\r\n }\r\n }\r\n\r\n baskets = new BehaviorSubject<InternalBasket<GU_Q>[]>([]);\r\n\r\n basketList: BasketPricesList[] = [\r\n {\r\n type: ServiceType.Flight,\r\n text: 'FLIGHTS',\r\n price: 0\r\n },\r\n {\r\n type: ServiceType.Rail,\r\n text: 'RAIL',\r\n price: 0\r\n },\r\n {\r\n type: ServiceType.Hotel,\r\n text: 'HOTELS',\r\n price: 0\r\n },\r\n {\r\n type: ServiceType.Cab,\r\n text: 'TAXIS',\r\n price: 0\r\n },\r\n {\r\n type: ServiceType.Car,\r\n text: 'CARS',\r\n price: 0\r\n },\r\n {\r\n type: ServiceType.InternationalRail,\r\n text: 'EUROSTAR',\r\n price: 0\r\n },\r\n {\r\n type: ServiceType.Parking,\r\n text: 'PARKING',\r\n price: 0\r\n },\r\n {\r\n type: ServiceType.Lounge,\r\n text: 'LOUNGES',\r\n price: 0\r\n },\r\n {\r\n type: ServiceType.Coach,\r\n text: 'COACH',\r\n price: 0\r\n },\r\n {\r\n type: ServiceType.FastTrack,\r\n text: 'FAST_TRACK',\r\n price: 0\r\n }\r\n ];\r\n\r\n basketPrices: BehaviorSubject<BasketPrices> =\r\n new BehaviorSubject<BasketPrices>({ total: null, list: this.basketList });\r\n\r\n menuState = MenuSlideEnum.OUT;\r\n\r\n constructor(\r\n private acceptNewPriceUpdater: BaseAcceptNewPriceUpdater<ANPU_Q>,\r\n private addItemToBasketUpdater: BaseAddItemToBasketUpdater<AITB_Q>,\r\n private addUserToBasketItem: BaseAddUserToBasketItemUpdater<AUTB_Q>,\r\n private basketCreator: BaseCreateBasketUpdater<CB_Q>,\r\n public basketFetcher: BaseGetBasketFetcher<GB_Q>,\r\n private bookBasketUpdater: BaseBookBasketUpdater<BB_Q>,\r\n private deleteBasketUpdater: BaseDeleteBasketUpdater<DB_Q>,\r\n private getMiAutoSugestionFetcher: BaseGetMiAutoSugestionFetcher<GAS_Q>,\r\n private helpers: BaseHelperRoutines,\r\n private removeItemFromBasketUpdater: BaseRemoveItemFromBasketUpdater<RIB_Q>,\r\n private revalidateBasketUpdater: BaseRevalidateBasketUpdater<RVB_Q>,\r\n private setBasketItemMiGroupUpdater: BaseSetBasketItemMiGroupUpdater<SBMI_Q>,\r\n private setBasketItemMiValueUpdater: BaseSetBasketItemMiValueUpdater<SVMI_Q>,\r\n private validateMiFreeValue: BaseValidateMiFreeValueTester<VMI_Q>,\r\n private sendBasketForApprovalUpdater: BaseSendBasketForApprovalUpdater<SBA_Q>,\r\n private getUserFetcher: BaseGetUserFetcher<GU_Q>,\r\n private getUserBasketsFetcher: BaseGetUserBasketsFetcher<GUB_Q>,\r\n private SetBasketItemLeadPassenger: BaseSetBasketItemLeadPassengerUpdater<SBLP_Q>,\r\n private moveItemToADifferentBasket: BasemoveBasketItemToBasket<MITDB_Q>,\r\n private updateBasketNotesUpdater: BaseUpdateBasketNoteUpdater<UBN_Q>,\r\n private updateBasketTitleUpdater: BaseUpdateBasketTitleUpdater<UBT_Q>,\r\n private setPaymentMethodUpdater: BaseSetPaymentOptionUpdater<SBM_Q>,\r\n private userService: UserServiceInterface,\r\n private modalService: BaseModalOpenerService\r\n ) {\r\n this.userService.changeUser.subscribe({\r\n next: (userDetails: FullUserDetails) => {\r\n this.reset();\r\n }\r\n });\r\n }\r\n\r\n public reset() {\r\n if (this.userService.getfullUserDetails(false).userData.value) {\r\n this.getUserBasketsFetcher\r\n .fetchList({\r\n basketStatus: BasketStatus.Open,\r\n user: this.userService\r\n .getfullUserDetails(true)\r\n .userData.value.user_id.toString()\r\n })\r\n .pipe(take(1))\r\n .subscribe(\r\n (baskets: UserBasketResult[]) => {\r\n this.currentBaskets = baskets.map((basket: UserBasketResult) => {\r\n if (basket) {\r\n let intBasket = this.findBasket(basket.id);\r\n if (!intBasket) {\r\n intBasket = new InternalBasket(\r\n basket,\r\n this.helpers,\r\n this,\r\n this.getUserFetcher\r\n );\r\n\r\n this.currentBaskets.push(intBasket);\r\n }\r\n return intBasket;\r\n }\r\n });\r\n\r\n this.baskets.next(this.currentBaskets);\r\n\r\n if (this.currentBaskets.length > 0) {\r\n this.currentBasketID = this.currentBaskets[0].id;\r\n } else {\r\n this.currentBasketID = null;\r\n }\r\n\r\n this.basketChangeEmitter.next(this.currentBasketID);\r\n },\r\n (error: any) => {\r\n console.error(error);\r\n }\r\n );\r\n } else {\r\n this.currentBaskets.forEach((basket: InternalBasketInterface) =>\r\n basket.subject.unsubscribe()\r\n );\r\n this.currentBaskets = [];\r\n this.currentBasketID = null;\r\n this.baskets.next(this.currentBaskets);\r\n this.basketChangeEmitter.next(this.currentBasketID);\r\n }\r\n }\r\n\r\n public async getAllOpenBaskets(user_id: string): Promise<UserBasketResult[]> {\r\n // let intBasket = this.findBasket(user_id)\r\n return this.getUserBasketsFetcher\r\n .fetchList({ basketStatus: BasketStatus.Open, user: user_id })\r\n .pipe(\r\n take(1),\r\n map((results: UserBasketResult[]) => {\r\n if (results.length) {\r\n results.forEach((result: UserBasketResult) => {\r\n if (!this.findBasket(result.id)) {\r\n const intBasket = new InternalBasket(\r\n result,\r\n this.helpers,\r\n this,\r\n this.getUserFetcher\r\n );\r\n this.currentBaskets.push(intBasket);\r\n }\r\n });\r\n } else {\r\n const intBasket = new InternalBasket(\r\n {\r\n id: user_id,\r\n basketItems: []\r\n } as BasketDetails,\r\n this.helpers,\r\n this,\r\n this.getUserFetcher\r\n );\r\n this.currentBaskets.push(intBasket);\r\n }\r\n\r\n return results;\r\n })\r\n )\r\n .toPromise();\r\n }\r\n\r\n public async addToBasket(\r\n item: AddItemToBasket.Variables,\r\n intBasket: InternalBasket<GU_Q>,\r\n searchService: EnterpriseSearchServiceInterface,\r\n travellers: Traveller[] = []\r\n ): Promise<boolean> {\r\n if (travellers?.length > 0) {\r\n item.users = this.helpers.makeUsers(travellers);\r\n item.leadPassenger = item.users[0].id;\r\n }\r\n item = this.checkDetails(item);\r\n if (item && intBasket) {\r\n this.addItemToBasketUpdater\r\n .updateOne(item)\r\n .pipe(take(1))\r\n .subscribe(\r\n (newBasket: Partial<UserBasketResult>) => {\r\n intBasket.next({\r\n ...intBasket.subject.value,\r\n ...newBasket\r\n });\r\n const service = this.userService.findService(item.service).type;\r\n searchService.search_objects[service].booking_chosen = true;\r\n searchService.search_objects[service].chosen = false;\r\n const bi: GetUserBasketItemResult[] = newBasket.basketItems;\r\n this.highlightBasketItemsEmitter.next(bi);\r\n this.basketChangeEmitter.next(this.currentBasketID);\r\n },\r\n (error: any) => {\r\n console.error(error);\r\n intBasket.subject.next(intBasket.subject.value);\r\n }\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n loadBasket(id: string): void {\r\n let intBasket = this.findBasket(id);\r\n if (!intBasket) {\r\n intBasket = new InternalBasket(\r\n {\r\n id,\r\n basketItems: []\r\n } as BasketDetails,\r\n this.helpers,\r\n this,\r\n this.getUserFetcher\r\n );\r\n this.currentBaskets.push(intBasket);\r\n }\r\n this.basketFetcher\r\n .fetchOne({ id })\r\n .subscribe((newBasket: UserBasketResult) => {\r\n intBasket.next(newBasket);\r\n });\r\n }\r\n\r\n subsribeToBasket(id: string, observer: Observer<BasketDetails>): void {\r\n const intBasket = this.findBasket(id);\r\n if (intBasket) {\r\n intBasket.subject.subscribe(observer);\r\n }\r\n }\r\n\r\n removeExpiredItems(id: string): void {\r\n const intBasket = this.findBasket(id);\r\n intBasket.subject.value.basketItems\r\n .filter((basketItem: BasketItem): boolean => {\r\n return (\r\n basketItem.latestValidationPriceDifference !== 0 || basketItem.expired\r\n );\r\n })\r\n .forEach((basketItem: BasketItem) => {\r\n this.removeBasketItem(id, basketItem);\r\n });\r\n }\r\n\r\n removeBasketItem(basketId: string, item: BasketItem): void {\r\n const intBasket: InternalBasket<GU_Q> = this.findBasket(basketId);\r\n this.removeItemFromBasketUpdater\r\n .updateOne({ basketItem: item.id })\r\n .subscribe((newBasket: Basket) => {\r\n intBasket.next({\r\n ...intBasket.subject.value,\r\n ...newBasket\r\n });\r\n this.basketChangeEmitter.next(basketId);\r\n });\r\n }\r\n\r\n public async getDefaultBasket(\r\n getBookedBasket: boolean = false\r\n ): Promise<InternalBasket<GU_Q>> {\r\n const internalBasket: InternalBasket<GU_Q> = null;\r\n // console.log(this.currentBasketID);\r\n return await this.findOrCreateBasket(\r\n this.currentBasketID,\r\n getBookedBasket\r\n ).then((data) => {\r\n return data;\r\n });\r\n }\r\n\r\n private findBasket(id: string): InternalBasket<GU_Q> {\r\n return this.currentBaskets.find((basket: InternalBasket<GU_Q>) => {\r\n return basket.id === id || basket.tempid === id;\r\n });\r\n }\r\n\r\n private async findOrCreateBasket(\r\n id?: string,\r\n getBookedBasket: boolean = false\r\n ): Promise<InternalBasket<GU_Q>> {\r\n let basket: InternalBasket<GU_Q> = null;\r\n if (!id) {\r\n const allOpenBaskets = await this.getAllOpenBaskets(\r\n this.userService\r\n .getfullUserDetails(true)\r\n .userData.value.user_id.toString()\r\n );\r\n\r\n // find the last updated basket\r\n if (!allOpenBaskets?.length) {\r\n basket = await this.createBasket();\r\n this.currentBaskets.push(basket);\r\n this.baskets.next(this.currentBaskets);\r\n } else {\r\n // baskets are already sorted by last updated - return the last updated basket\r\n basket = this.findBasket(allOpenBaskets[0].id);\r\n\r\n if (basket.subject.value.status === 'BOOKED' && !getBookedBasket) {\r\n console.warn(\r\n '+++ Retrieved basket is in booked status - creating a new one +++'\r\n );\r\n basket = await this.createBasket();\r\n this.currentBaskets.push(basket);\r\n }\r\n this.baskets.next(this.currentBaskets);\r\n }\r\n } else {\r\n basket = this.findBasket(id);\r\n // console.log('+++ Found Basket: ', basket, ' +++');\r\n }\r\n\r\n return basket;\r\n }\r\n\r\n public async createBasket(): Promise<InternalBasket<GU_Q>> {\r\n const basket: UserBasketResult = {\r\n id: TEMPID + moment().unix().toString(),\r\n owner: null,\r\n reference: null,\r\n title: null,\r\n notes: null,\r\n createdAt: null,\r\n updatedAt: null,\r\n basketItems: [],\r\n status: null,\r\n validated: false\r\n };\r\n\r\n const intBasket = new InternalBasket<GU_Q>(\r\n basket,\r\n this.helpers,\r\n this,\r\n this.getUserFetcher\r\n );\r\n // { subject: new BehaviorSubject<Basket>(basket), tempid: basket.id, id: basket.id, title: basket.id };\r\n\r\n const toReturn = await this.createBasketOnDB(intBasket);\r\n this.currentBaskets.push(toReturn);\r\n this.baskets.next(this.currentBaskets);\r\n this.basketChangeEmitter.next(toReturn.id);\r\n return toReturn;\r\n }\r\n\r\n private createBasketOnDB(\r\n intBasket: InternalBasket<GU_Q>\r\n ): Promise<InternalBasket<GU_Q>> {\r\n return new Promise((resolve, reject) => {\r\n this.basketCreator\r\n .updateOne({})\r\n .pipe(take(1))\r\n .subscribe(\r\n (basket: UserBasketResult) => {\r\n intBasket.id = basket.id;\r\n intBasket.next(basket);\r\n resolve(intBasket);\r\n },\r\n (error: any) => {\r\n reject(error);\r\n },\r\n () => {}\r\n );\r\n });\r\n }\r\n\r\n toggleMenu(): void {\r\n if (\r\n this.menuState === MenuSlideEnum.IN ||\r\n this.menuState === MenuSlideEnum.FLAT\r\n ) {\r\n this.menuState = MenuSlideEnum.OUT;\r\n } else {\r\n this.menuState = MenuSlideEnum.IN;\r\n }\r\n }\r\n\r\n closeMenu(): void {\r\n this.menuState = MenuSlideEnum.IN;\r\n }\r\n\r\n getLatestBasketItemForTypes(\r\n basketItems: BasketItem[]\r\n ): Record<ServiceType, BasketItem> {\r\n return (basketItems || []).reduce(\r\n (\r\n latestItems: Record<ServiceType, BasketItem>,\r\n basketItem: BasketItem\r\n ) => {\r\n latestItems[basketItem.service.type] = basketItem;\r\n return latestItems;\r\n },\r\n {} as Record<ServiceType, BasketItem>\r\n );\r\n }\r\n\r\n private checkDetails(\r\n item: AddItemToBasket.Variables\r\n ): AddItemToBasket.Variables {\r\n const serviceToCheck: Service = this.userService.findService(item.service);\r\n if (!serviceToCheck) {\r\n console.error('Unable to find service for basket item : ' + item.service);\r\n return null;\r\n }\r\n\r\n // check the item.detail object against the relevant service detailSchema using Ajv\r\n const ajv = new Ajv();\r\n const validateDetailSchema = ajv.compile(serviceToCheck.detailSchema);\r\n const validateSearchSchema = ajv.compile(serviceToCheck.searchQuerySchema);\r\n\r\n // if there are any moment date objects in the searchQuery object convert these to date-time strings\r\n item.searchQuery = this.helpers.sanitizeMomentDates(item.searchQuery);\r\n\r\n if (!validateSearchSchema(item.searchQuery)) {\r\n const error = `Item searchQuery is not valid for ${serviceToCheck.name} search schema.`;\r\n console.warn('searchSchema', serviceToCheck.searchQuerySchema);\r\n console.warn('item.searchQuery', item.searchQuery);\r\n console.log(validateSearchSchema.errors);\r\n this.modalService.open(ModalTypes.ModalErrorComponent, {}, { error });\r\n return null;\r\n }\r\n\r\n if (!validateDetailSchema(item.detail)) {\r\n const error = `Item detail is not valid for ${serviceToCheck.name} detail schema.`;\r\n console.warn('detailSchema', serviceToCheck.detailSchema);\r\n console.warn('item.detail', item.detail);\r\n console.log('Schema errors', validateDetailSchema.errors);\r\n this.modalService.open(ModalTypes.ModalErrorComponent, {}, { error });\r\n return null;\r\n }\r\n return item;\r\n }\r\n\r\n getNumberItemsForBasket(basket: InternalBasket<GU_Q> = null): number {\r\n basket = basket || this.findBasket(this.currentBasketID);\r\n return basket?.subject.value.basketItems.length || 0;\r\n }\r\n\r\n async removeBasket(basketid: string) {\r\n if (basketid) {\r\n await this.deleteBasketUpdater\r\n .updateOne({ id: basketid })\r\n .pipe(\r\n take(1),\r\n switchMap((data: any): any => {\r\n this.findBasket(basketid)?.destructor();\r\n this.currentBaskets = this.currentBaskets.filter((intBa) => {\r\n return intBa.id !== basketid;\r\n });\r\n this.baskets.next(this.currentBaskets);\r\n if (basketid === this.currentBasketID) {\r\n this.currentBasketID = this.currentBaskets[0]?.id || null;\r\n this.basketChangeEmitter.next(this.currentBasketID);\r\n }\r\n return data;\r\n })\r\n )\r\n .toPromise();\r\n }\r\n }\r\n\r\n continueSearchAndBook(\r\n basketItems: any[],\r\n itiniaryUrl: string[],\r\n searchService: EnterpriseSearchServiceInterface\r\n ): string[] {\r\n const latestBasketItems = this.getLatestBasketItemForTypes(basketItems);\r\n const nextSearch: SearchObject =\r\n searchService.getHighestSearchPriorityObject(latestBasketItems);\r\n if (nextSearch) {\r\n (searchService.searches as any)[\r\n nextSearch.type\r\n ].updateFromPreviousSearches(latestBasketItems);\r\n return [nextSearch.searchUrl];\r\n } else {\r\n return itiniaryUrl;\r\n }\r\n }\r\n\r\n addTravellers(\r\n basketid: string,\r\n basketItem: BasketItem,\r\n travellers: Traveller[],\r\n index: number = 0\r\n ): void {\r\n const basket = this.findBasket(basketid);\r\n if (index < travellers.length) {\r\n const traveller = travellers[index];\r\n const passengerType: PassengerType = traveller.isChild\r\n ? PassengerType.Child\r\n : traveller.isInfant\r\n ? PassengerType.Infant\r\n : PassengerType.Adult;\r\n\r\n this.addUserToBasketItem\r\n .updateOne({\r\n basketItem: basketItem.id,\r\n users: [\r\n {\r\n id: traveller.id,\r\n passengerType\r\n }\r\n ],\r\n withSupplemental: false\r\n })\r\n .subscribe(\r\n () => {},\r\n () => {},\r\n () => {\r\n this.addTravellers(basket.id, basketItem, travellers, index + 1);\r\n }\r\n );\r\n } else {\r\n this.basketFetcher.fetchOne({ id: basket.id }).subscribe(\r\n (basket1: GetUserBasketResult) => {\r\n basket.subject.next({ ...basket.subject.value, ...basket1 });\r\n },\r\n (_) => {},\r\n () => {\r\n basket.next(basket.subject.value);\r\n }\r\n );\r\n }\r\n }\r\n\r\n setLeadPassenger(\r\n basketid: string,\r\n basketItem: BasketItem,\r\n travellers: Traveller,\r\n index: number = 0\r\n ): void {\r\n const basket = this.findBasket(basketid);\r\n if (index < 1) {\r\n this.SetBasketItemLeadPassenger.updateOne({\r\n id: basketItem.id,\r\n user: travellers.id,\r\n withSupplemental: false\r\n }).subscribe(\r\n () => {},\r\n () => {},\r\n () => {\r\n this.setLeadPassenger(basket.id, basketItem, travellers, index + 1);\r\n }\r\n );\r\n } else {\r\n this.basketFetcher.fetchOne({ id: basket.id }).subscribe(\r\n (basket1: GetUserBasketResult) => {\r\n basket.subject.next({ ...basket.subject.value, ...basket1 });\r\n },\r\n (_) => {},\r\n () => {\r\n basket.next(basket.subject.value);\r\n }\r\n );\r\n }\r\n }\r\n\r\n updateBasket(\r\n basketid: string,\r\n obs: Observable<BasketDetails>\r\n ): Promise<void> {\r\n return new Promise<void>((resolve, reject) => {\r\n obs.pipe(take(1)).subscribe(\r\n (basket: BasketDetails) => {\r\n const intBasket = this.findBasket(basketid);\r\n intBasket.next(basket);\r\n resolve();\r\n },\r\n (error: any) => {\r\n console.error(error);\r\n const intBasket = this.findBasket(basketid);\r\n intBasket.next(intBasket.subject.value);\r\n reject(error);\r\n },\r\n () => {}\r\n );\r\n });\r\n }\r\n\r\n revalidate(basketid: string): void {\r\n this.updateBasket(\r\n basketid,\r\n this.revalidateBasketUpdater.updateOne({ id: basketid })\r\n );\r\n }\r\n\r\n setBasketItemMiGroup(\r\n basketid: string,\r\n basketItemid: string,\r\n group: string\r\n ): void {\r\n this.updateBasket(\r\n basketid,\r\n this.setBasketItemMiGroupUpdater.updateOne({\r\n basketItem: basketItemid,\r\n group\r\n })\r\n );\r\n }\r\n\r\n acceptNewPrice(basketid: string, item: BasketItem): void {\r\n this.updateBasket(\r\n basketid,\r\n this.acceptNewPriceUpdater.updateOne({ id: item.id })\r\n );\r\n }\r\n\r\n validateFreeValeMi(\r\n miItem: ManagementInfo,\r\n freeValue: string\r\n ): Promise<boolean> {\r\n return new Promise((resolve, reject) => {\r\n this.validateMiFreeValue\r\n .test({ mi: miItem.id, freeValue })\r\n .subscribe(resolve, reject);\r\n });\r\n }\r\n\r\n setMiFreeValue(\r\n basketid: string,\r\n miItem: ManagementInfo,\r\n freeValue: string,\r\n userId: string = null\r\n ) {\r\n const intBasket = this.findBasket(basketid);\r\n const args: SetBasketItemMiValue.Variables = {\r\n mi: miItem.id,\r\n miFreeValue: freeValue\r\n };\r\n if (!!userId) {\r\n args.user = userId;\r\n }\r\n this.setBasketItemMiValueUpdater\r\n .updateOne(args)\r\n .pipe(take(1))\r\n .subscribe(\r\n (basket: BasketDetails) => {\r\n intBasket.next(basket);\r\n },\r\n (_) => {},\r\n () => {\r\n intBasket.next(intBasket.subject.value);\r\n }\r\n );\r\n }\r\n\r\n setMiSelectedValue(\r\n basketid: string,\r\n miItem: ManagementInfo,\r\n selectedValue: string,\r\n userId: string = null\r\n ) {\r\n const args: SetBasketItemMiValue.Variables = {\r\n mi: miItem.id,\r\n miValue: selectedValue\r\n };\r\n if (!!userId) {\r\n args.user = userId;\r\n }\r\n this.updateBasket(\r\n basketid,\r\n this.setBasketItemMiValueUpdater.updateOne(args)\r\n );\r\n }\r\n\r\n getMiAutoSugestions(\r\n miId: string,\r\n partialLabel: string,\r\n isLoading: BehaviorSubject<boolean>\r\n ): Observable<GetMiAutoSugestionArray> {\r\n isLoading?.next(true);\r\n\r\n return this.getMiAutoSugestionFetcher\r\n .fetchList({ mi: miId, partialLabel })\r\n .pipe(\r\n tap((_) => {\r\n isLoading?.next(false);\r\n })\r\n );\r\n }\r\n\r\n saveMiData(basketId: string, bmiArray: BasketItemManagementInfo[]) {\r\n bmiArray.forEach((bmi: BasketItemManagementInfo) => {\r\n bmi.miPerItem.forEach((item: ManagementInfoAndIsValid) => {\r\n item.save(basketId, null);\r\n });\r\n bmi.users.forEach((user: string) => {\r\n bmi.miPerUser[user].managementInfo.forEach(\r\n (item: ManagementInfoAndIsValid) => {\r\n item.save(basketId, user);\r\n }\r\n );\r\n });\r\n });\r\n }\r\n\r\n sendBasketForApproval(basketid: string) {\r\n this.updateBasket(\r\n basketid,\r\n this.sendBasketForApprovalUpdater\r\n .updateOne({ basket: basketid })\r\n .pipe(take(1))\r\n );\r\n }\r\n\r\n setBasketItemPaymentOption(\r\n basket: BasketDetails,\r\n basketItem: BasketItem,\r\n paymentMethod: string\r\n ): Promise<void> {\r\n return this.updateBasket(\r\n basket.id,\r\n this.setPaymentMethodUpdater.updateOne({\r\n basketItem: basketItem.id,\r\n paymentMethod\r\n })\r\n );\r\n }\r\n\r\n bookBasket(basketid: string, supplementaryInfo: SupplementaryBookingInfo[]) {\r\n this.updateBasket(\r\n basketid,\r\n this.bookBasketUpdater.updateOne({ id: basketid, supplementaryInfo })\r\n );\r\n }\r\n\r\n moveBasketItem(\r\n originalBasketId: string,\r\n basketItem: BasketItem,\r\n basketIdToMoveTo: string\r\n ): void {\r\n this.moveItemToADifferentBasket\r\n .updateOne({\r\n basketItem: basketItem.id,\r\n newBasket: basketIdToMoveTo\r\n })\r\n .subscribe(() => {\r\n this.loadBasket(originalBasketId);\r\n this.loadBasket(basketIdToMoveTo);\r\n });\r\n }\r\n\r\n updateBasketNotes(basketId: string, notes: string): void {\r\n this.updateBasket(\r\n basketId,\r\n this.updateBasketNotesUpdater.updateOne({ id: basketId, notes })\r\n );\r\n }\r\n\r\n updateBasketTitle(basketId: string, title: string): void {\r\n this.updateBasket(\r\n basketId,\r\n this.updateBasketTitleUpdater.updateOne({ id: basketId, newTitle: title })\r\n );\r\n }\r\n getBasket(query: {\r\n id: string;\r\n withSupplemental: true;\r\n }): Observable<GetUserBasketResult> {\r\n return this.basketFetcher.fetchOne(query);\r\n }\r\n\r\n atLeastOneSearchChosen(): boolean {\r\n const intBasket: InternalBasketInterface = this.findBasket(\r\n this.currentBasketID\r\n );\r\n return intBasket?.subject.value.basketItems.length > 0;\r\n }\r\n\r\n public getBasketStats(index: number): BehaviorSubject<BasketPrices> {\r\n const basketPricesObj =\r\n this.baskets.value[index]?.subject?.value?.prices || {};\r\n const basketPricesKey = Object.keys(basketPricesObj)[0];\r\n if (basketPricesKey) {\r\n this.basketPrices.value.currency = basketPricesKey;\r\n this.basketPrices.value.total =\r\n this.baskets.value[index].subject.value.prices[basketPricesKey];\r\n } else {\r\n this.basketPrices.value.total = 0;\r\n }\r\n\r\n this.basketPrices.value.list.forEach((keys) => {\r\n keys.price = this.baskets.value[index]?.subject?.value?.basketItems\r\n .filter((item) => item.service.type === keys.type)\r\n .reduce((sum, current) => sum + current.price, 0);\r\n });\r\n return this.basketPrices;\r\n }\r\n}\r\n\r\ninterface DetailSchemaProperties {\r\n type?: 'string' | 'number' | 'integer' | 'array';\r\n $ref?: string;\r\n format?: string;\r\n}\r\ninterface DetailSchema {\r\n $defs?: { [key: string]: DetailSchema };\r\n additionalProperties: boolean;\r\n properties: { [key: string]: DetailSchemaProperties };\r\n required: string[];\r\n}\r\n","import { BehaviorSubject } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\nimport { BaseEnvironment } from '../classes/enviroment';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport {\r\n BaseHotelAvalibilityQuoteFetcher,\r\n HotelAvalinilityFetcherType\r\n} from '../fetchers/hotel-avaliability-fetcher';\r\nimport { HotelDetails } from '../interfaces/Ihotel-enterprise-search';\r\nimport { QueryGetMultipleHotelsAvailabilityArgs } from '../types/graphql.types';\r\nimport {\r\n CurrencyDetails,\r\n HotelAvalibilityQuery,\r\n HotelAvalibilityQuoteResult,\r\n HotelAvalibilityQuoteResultArray,\r\n HotelRoomWithLocalPrice\r\n} from '../types/types';\r\n\r\nimport { BaseStorageService } from './storage.service';\r\n\r\ntype StoredData = { [key: string]: HotelAvalibilityQuoteResult };\r\n\r\nconst SESSION_NAME = 'results_hotel_avallibility';\r\n\r\nexport class BaseHotelAvalibilityService<\r\n Q extends HotelAvalinilityFetcherType\r\n> {\r\n private data: StoredData = null;\r\n private behaviours: {\r\n [key: string]: BehaviorSubject<HotelAvalibilityQuoteResult>;\r\n } = {};\r\n private timeout: number;\r\n private toFetch: HotelAvalibilityQuery[] = [];\r\n public fetching: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(\r\n false\r\n );\r\n currencies: CurrencyDetails = {};\r\n constructor(\r\n private avalibilityFethcer: BaseHotelAvalibilityQuoteFetcher<Q>,\r\n private sessionStorage: BaseStorageService,\r\n private helpers: BaseHelperRoutines,\r\n private environment: BaseEnvironment\r\n ) {}\r\n\r\n private readFromSession() {\r\n const data =\r\n this.sessionStorage.getSessionItem<StoredData>(SESSION_NAME) || {};\r\n Object.values(data).forEach((item: HotelAvalibilityQuoteResult) => {\r\n this.behaviours[item.hotelId] =\r\n new BehaviorSubject<HotelAvalibilityQuoteResult>(item);\r\n });\r\n return data;\r\n }\r\n\r\n reset() {\r\n this.data = {};\r\n this.currencies = {};\r\n this.sessionStorage.removeSessionItem(SESSION_NAME);\r\n Object.values(this.data).forEach((item: HotelAvalibilityQuoteResult) => {\r\n this.behaviours[item.hotelId].complete();\r\n delete this.behaviours[item.hotelId];\r\n });\r\n this.behaviours = {};\r\n }\r\n\r\n getAvailabilityForId(\r\n hotel: HotelAvalibilityQuery\r\n ): BehaviorSubject<HotelAvalibilityQuoteResult> {\r\n this.data = this.data || this.readFromSession();\r\n return (\r\n this.behaviours[hotel.hotel as string] ||\r\n this._getAvailabilityForId(hotel)\r\n );\r\n }\r\n\r\n getAvailabilityValue(hotel: HotelDetails): HotelAvalibilityQuoteResult {\r\n this.data = this.data || this.readFromSession();\r\n return (\r\n this.behaviours[hotel.id as string]?.value ||\r\n ({} as HotelAvalibilityQuoteResult)\r\n );\r\n }\r\n\r\n private _getAvailabilityForId(\r\n hotel: HotelAvalibilityQuery\r\n ): BehaviorSubject<HotelAvalibilityQuoteResult> {\r\n if (this.timeout) {\r\n window.clearTimeout(this.timeout);\r\n this.timeout = 0;\r\n }\r\n\r\n if (!this.fetching.value) {\r\n this.timeout = window.setTimeout(\r\n this.fetchAvalilbility.bind(this),\r\n this.environment.autoFetchHotelTimeout\r\n );\r\n }\r\n this.toFetch.push(hotel);\r\n if (\r\n !this.fetching.value &&\r\n this.toFetch.length >= this.environment.numberOfHotelsToFetch\r\n ) {\r\n this.fetchAvalilbility();\r\n }\r\n this.behaviours[hotel.hotel as string] =\r\n new BehaviorSubject<HotelAvalibilityQuoteResult>(null);\r\n return this.behaviours[hotel.hotel as string];\r\n }\r\n\r\n private fetchAvalilbility() {\r\n this.fetching.next(true);\r\n if (this.timeout) {\r\n window.clearTimeout(this.timeout);\r\n this.timeout = 0;\r\n }\r\n const toFetch = this.toFetch.slice(\r\n 0,\r\n this.environment.numberOfHotelsToFetch\r\n );\r\n this.toFetch = this.toFetch.slice(this.environment.numberOfHotelsToFetch);\r\n\r\n console.log('Hotels still to fetch', this.toFetch.length);\r\n\r\n const query: QueryGetMultipleHotelsAvailabilityArgs = {\r\n hotel: toFetch.map((hotel) => hotel.hotel) as string[],\r\n currency: toFetch[0].currency,\r\n endDate: toFetch[0].endDate,\r\n startDate: toFetch[0].startDate,\r\n occupants: toFetch[0].occupants,\r\n rooms: toFetch[0].rooms\r\n };\r\n\r\n this.avalibilityFethcer\r\n .fetchList(query)\r\n .pipe(take(1))\r\n .subscribe((hotels: HotelAvalibilityQuoteResultArray) => {\r\n hotels.forEach((hotel: HotelAvalibilityQuoteResult) => {\r\n hotel = this.helpers.clone(hotel);\r\n hotel.rooms = (hotel.rooms || [])\r\n .filter((room: HotelRoomWithLocalPrice) => {\r\n return room.total > 0;\r\n })\r\n .map((room: HotelRoomWithLocalPrice) => {\r\n room = this.helpers.clone<HotelRoomWithLocalPrice>(room);\r\n room.LocalPrice = room.currencyConversion\r\n ? room.currencyConversion.localTotal\r\n : room.total;\r\n room.LocalCurrency = room.currencyConversion\r\n ? room.currencyConversion.localCode\r\n : room.currencyCode;\r\n return room;\r\n });\r\n hotel.currencies = hotel.rooms.reduce(\r\n (details: CurrencyDetails, room: HotelRoomWithLocalPrice) => {\r\n if (room.currencyConversion) {\r\n details[room.currencyConversion.convertedCode] = details[\r\n room.currencyConversion.convertedCode\r\n ] || {\r\n maxprice: Number.MIN_VALUE,\r\n minprice: Number.MAX_VALUE\r\n };\r\n details[room.currencyConversion.convertedCode].maxprice =\r\n Math.max(\r\n details[room.currencyConversion.convertedCode].maxprice,\r\n room.currencyConversion.convertedTotal\r\n );\r\n details[room.currencyConversion.convertedCode].minprice =\r\n Math.min(\r\n details[room.currencyConversion.convertedCode].minprice,\r\n room.currencyConversion.convertedTotal\r\n );\r\n\r\n this.currencies[room.currencyConversion.convertedCode] = this\r\n .currencies[room.currencyConversion.convertedCode] || {\r\n maxprice: Number.MIN_VALUE,\r\n minprice: Number.MAX_VALUE\r\n };\r\n this.currencies[\r\n room.currencyConversion.convertedCode\r\n ].minprice = Math.ceil(\r\n Math.min(\r\n this.currencies[room.currencyConversion.convertedCode]\r\n .minprice,\r\n room.currencyConversion.convertedTotal\r\n )\r\n );\r\n this.currencies[\r\n room.currencyConversion.convertedCode\r\n ].maxprice = Math.ceil(\r\n Math.max(\r\n this.currencies[room.currencyConversion.convertedCode]\r\n .maxprice,\r\n room.currencyConversion.convertedTotal\r\n )\r\n );\r\n }\r\n return details;\r\n },\r\n {} as CurrencyDetails\r\n );\r\n const roomPrices = hotel.rooms.map(\r\n this.helpers.mapFieldFromObject<string, number>('total')\r\n );\r\n if (!roomPrices.length) roomPrices.push(0);\r\n hotel.minprice = Math.min(...roomPrices);\r\n hotel.maxprice = Math.max(...roomPrices);\r\n\r\n hotel.rooms = hotel.rooms;\r\n if (hotel?.hotelId) {\r\n this.data[hotel.hotelId] = hotel;\r\n this.behaviours[hotel.hotelId].next(hotel);\r\n }\r\n });\r\n\r\n // this.sessionStorage.setSessionItem(SESSION_NAME, this.data);\r\n this.sessionStorage.setSessionItem(SESSION_NAME, hotels);\r\n if (this.toFetch.length > 0) {\r\n setTimeout(() => {\r\n this.fetchAvalilbility();\r\n }, this.environment.hotelAvalibilityTimeout);\r\n } else {\r\n this.fetching.next(false);\r\n }\r\n });\r\n }\r\n\r\n maxPriceForCurrency(currency: string) {\r\n return (\r\n this.currencies[currency] || {\r\n maxprice: Number.MAX_VALUE,\r\n minprice: Number.MIN_VALUE\r\n }\r\n ).maxprice;\r\n }\r\n\r\n /**\r\n * @description - return the number of hotels that have a price (prpn value)\r\n */\r\n numberOfHotelsWithPrice(): number {\r\n let count = 0;\r\n if (this.data) {\r\n for (const [key, value] of Object.entries(this.data)) {\r\n if (value?.prpn) {\r\n count++;\r\n }\r\n }\r\n }\r\n return count;\r\n }\r\n\r\n}\r\n","import { Observable } from 'rxjs';\r\nimport { URLS } from './url.service';\r\n\r\nexport abstract class AbstractHttpCallService {\r\n abstract formEncodedPost(url: URLS, body?: any, responseType?: 'json' | 'text'): Observable<any>;\r\n\r\n abstract timeoutFormEncodedPost(\r\n url: URLS,\r\n body?: any,\r\n reTimeout?: number\r\n ): Observable<any>;\r\n\r\n abstract formEncodedPostNoErrorHandling(\r\n url: URLS,\r\n body?: any\r\n ): Observable<any>;\r\n\r\n /*\r\n\t\t@desc - call a url through post, with a Json Object as data (angular default)\r\n\t**/\r\n abstract post(url: URLS, data?: any): Observable<any>;\r\n /*\r\n\t\t@desc - call a Angular standard get request (application/json headers)\r\n\t**/\r\n abstract get(url: URLS, params?: any): Observable<any>;\r\n\r\n /*\r\n\t\t@desc - this will determine if there is a login error for the request or not, since this is a potential error for every call\r\n\t**/\r\n abstract handleResponse(data: any): any;\r\n abstract resetLogout(): void;\r\n /*\r\n\t\t@desc - handle any fatal errors 404's 500's other generic http errors\r\n\t**/\r\n abstract handleError(errorVal: any, skipTimeoutMessage?: boolean): any;\r\n\r\n /*\r\n * Using the keys of the given object as parameter names create a parameter string url encoding the values.\r\n * The function expects the values to be strings.\r\n * @param obj\r\n */\r\n public serialize(obj: { [key: string]: string }): string {\r\n return Object.keys(obj).reduce((toReturn: string, key: string) => {\r\n return (\r\n (toReturn.length ? toReturn + '&' : '') +\r\n key +\r\n '=' +\r\n encodeURIComponent(\r\n typeof obj[key] === 'object' ? JSON.stringify(obj[key]) : obj[key]\r\n )\r\n );\r\n }, '');\r\n }\r\n\r\n abstract getHeaders(): any;\r\n abstract makeUrl(url: URLS): string;\r\n}\r\n","import { BehaviorSubject, Observable } from 'rxjs';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\n\r\nimport { Suppliers, UserFavorurite } from '../classes/user-favourite.enum';\r\nimport {\r\n BaseUserMessagesFetcher,\r\n UserMessageFetcherType\r\n} from '../fetchers/user-message.fetcher';\r\nimport {\r\n BaseUserProductsFetcher,\r\n UserProductsFetcherType\r\n} from '../fetchers/user-products-fetcher';\r\nimport {\r\n BaseUserUiConfigsFetcher,\r\n UserUiConfigsFetcherType\r\n} from '../fetchers/user-ui-configs-fetcher';\r\nimport {\r\n FullUserDetails,\r\n UserServiceInterface,\r\n UserServices\r\n} from '../interfaces/Iuser.service';\r\nimport { UserData } from '../interfaces/user.data';\r\nimport { Traveller, TravellerObject } from '../models/traveller.object';\r\nimport {\r\n BookerType,\r\n Message,\r\n Service,\r\n ServiceType\r\n} from '../types/graphql.types';\r\nimport { ServiceProvider, Unpacked, UserUiConfigsResult } from '../types/types';\r\nimport { BaseStorageService } from './storage.service';\r\nexport const USER_SIGNEDOUT = 'USER_SIGNEDOUT';\r\nexport const USER_SIGNEDIN = 'USER_SIGNEDIN';\r\n\r\nexport class BaseUserService<\r\n UC_Q extends UserUiConfigsFetcherType,\r\n US_Q extends UserProductsFetcherType,\r\n UM_Q extends UserMessageFetcherType\r\n> implements UserServiceInterface\r\n{\r\n public fullUserDetails: FullUserDetails = {\r\n bookingAllowedFor: '',\r\n messages: new BehaviorSubject<Message[]>(null),\r\n travllerObject: new BehaviorSubject<Traveller>(null),\r\n userConfigs: new BehaviorSubject<{\r\n [key: string]: Unpacked<UserUiConfigsResult>;\r\n }>(null),\r\n userData: new BehaviorSubject<UserData>(null),\r\n userServices: new BehaviorSubject<UserServices>(null)\r\n };\r\n changeUser: BehaviorSubject<FullUserDetails> =\r\n new BehaviorSubject<FullUserDetails>(null);\r\n\r\n constructor(\r\n private userUiConfigsFetcher: BaseUserUiConfigsFetcher<UC_Q>,\r\n private userProductsFetcher: BaseUserProductsFetcher<US_Q>,\r\n private userMessagesFetcher: BaseUserMessagesFetcher<UM_Q>,\r\n private storageService: BaseStorageService,\r\n private helpers: BaseHelperRoutines\r\n ) {}\r\n\r\n setUser(user_data: UserData): void {\r\n const userdata = this.fullUserDetails.userData.value;\r\n if (!userdata || userdata.username !== user_data.username) {\r\n this.userUiConfigsFetcher.fetchKeyedObject('key').subscribe(\r\n (result1: { [key: string]: Unpacked<UserUiConfigsResult> }) => {\r\n this.fullUserDetails.userConfigs.next(result1);\r\n this.checkEmitUser();\r\n },\r\n (error) => {\r\n console.error(error);\r\n }\r\n );\r\n this.userProductsFetcher\r\n .fetchKeyedObjectArray('type')\r\n .subscribe((result2: UserServices) => {\r\n this.fullUserDetails.userServices.next(result2);\r\n\r\n this.checkEmitUser();\r\n });\r\n this.userMessagesFetcher.fetchList().subscribe(\r\n (result3: Message[]) => {\r\n this.fullUserDetails.messages.next(result3);\r\n this.checkEmitUser();\r\n },\r\n (error) => {\r\n console.error(error);\r\n }\r\n );\r\n\r\n this.fullUserDetails.travllerObject.next(\r\n TravellerObject.makeTravellerObjectFromUser(user_data)\r\n );\r\n }\r\n\r\n this.fullUserDetails.userData.next(user_data);\r\n\r\n this.storageService.setSessionItem('lightning_user_data', user_data);\r\n }\r\n\r\n checkEmitUser() {\r\n if (\r\n !!this.fullUserDetails.userConfigs.value &&\r\n !!this.fullUserDetails.userData.value &&\r\n !!this.fullUserDetails.userServices.value &&\r\n !!this.fullUserDetails.messages.value\r\n ) {\r\n this.changeUser.next(this.fullUserDetails);\r\n }\r\n }\r\n\r\n getfullUserDetails(admin: boolean = false): FullUserDetails | null {\r\n if (admin) {\r\n return this._getFullUserDetails();\r\n }\r\n\r\n return this._getFullUserDetails();\r\n // return this.onBehalfUser || this._getUserDetails();\r\n }\r\n\r\n _getFullUserDetails(): FullUserDetails {\r\n return (\r\n this.fullUserDetails ||\r\n this.storageService.getSessionItem('lightning_user_data')\r\n );\r\n }\r\n\r\n getUserDropdownInfo(): {\r\n name: string;\r\n email: string;\r\n account_type: BookerType | string;\r\n title: string;\r\n } {\r\n const dropdown_info = {\r\n name: 'Unable to retrieve name.',\r\n email: 'Unable to rerieve email',\r\n account_type: 'Unknown',\r\n title: ''\r\n };\r\n const name = this.getUsersFullname();\r\n const email = this.getUserEmail();\r\n const type = this.getUserBookingType();\r\n const title = this.getUserTitle();\r\n\r\n if (name) {\r\n dropdown_info.name = name;\r\n }\r\n\r\n if (email) {\r\n dropdown_info.email = email;\r\n }\r\n\r\n if (type) {\r\n dropdown_info.account_type = type;\r\n }\r\n\r\n if (title) {\r\n dropdown_info.title = title;\r\n }\r\n\r\n return dropdown_info;\r\n }\r\n\r\n getUserTitle(): string {\r\n const user: FullUserDetails = this.getfullUserDetails();\r\n return user && user.userData ? user.userData.value.title : '';\r\n }\r\n\r\n getUserEmail(): string {\r\n const user: FullUserDetails = this.getfullUserDetails();\r\n return user && user.userData ? user.userData.value.username : '';\r\n }\r\n\r\n getUserBookingType(): BookerType {\r\n const user: FullUserDetails = this.getfullUserDetails();\r\n return user && user.userData ? user.userData.value.booker_type : null;\r\n }\r\n\r\n getUsersFullname(): string | false {\r\n const user: FullUserDetails = this.getfullUserDetails();\r\n return user && user.userData\r\n ? user.userData.value.forename + ' ' + user.userData.value.surname\r\n : false;\r\n }\r\n\r\n getUsersTitleAndFullName(): string | false {\r\n const user: FullUserDetails = this.getfullUserDetails();\r\n return user && user.userData\r\n ? user.userData.value.title +\r\n ' ' +\r\n user.userData.value.forename +\r\n ' ' +\r\n user.userData.value.surname\r\n : false;\r\n }\r\n\r\n getUserFavoriteValue(\r\n uf: UserFavorurite,\r\n supplier: Suppliers = Suppliers.non\r\n ): string {\r\n const ufValue: Record<string, any> = this.fullUserDetails.userConfigs.value;\r\n\r\n return this.helpers.fromObject(ufValue, uf.value, 'config', uf.value);\r\n }\r\n\r\n getUserFavoriteNumber(\r\n uf: UserFavorurite,\r\n supplier: Suppliers = Suppliers.non\r\n ): string {\r\n const ufValue: Record<string, any> = this.fullUserDetails.userConfigs.value;\r\n\r\n return this.helpers.fromObject(ufValue, uf.value, 'config', 'value');\r\n }\r\n\r\n isUserFavoriteSet(\r\n uf: UserFavorurite,\r\n supplier: Suppliers = Suppliers.non\r\n ): boolean {\r\n const ufValue: Record<string, any> = this.fullUserDetails.userConfigs.value;\r\n\r\n return this.helpers.fromObject(ufValue, uf.value, 'config', 'value');\r\n }\r\n\r\n /**\r\n * @desc - create a dummy user for self bookers\r\n */\r\n createSelfTraveller(): Traveller {\r\n return this.fullUserDetails.travllerObject.value;\r\n }\r\n\r\n travellerIsUser(traveller: Traveller): boolean {\r\n // TODO check the traveller isn't the current user or agent book\r\n return false;\r\n }\r\n\r\n emptyUserData(): void {\r\n this.fullUserDetails.userData.next(null);\r\n this.fullUserDetails.userConfigs.next(null);\r\n this.fullUserDetails.userServices.next(null);\r\n this.fullUserDetails.messages.next(null);\r\n this.changeUser.next(this.fullUserDetails);\r\n }\r\n\r\n createGuestUser(\r\n title: string,\r\n forename: string,\r\n surname: string,\r\n email: string,\r\n guestMobileCountryNo: string,\r\n guestMobileNumber: string,\r\n guest_nationality: string,\r\n gender: string,\r\n isChild: boolean,\r\n isInfant: boolean,\r\n childDOB: Date\r\n ): Traveller {\r\n return {\r\n isChild,\r\n isInfant,\r\n childDOB,\r\n guest: true,\r\n id: '',\r\n forename,\r\n surname,\r\n email,\r\n title,\r\n name: [title, forename, surname].join(' ')\r\n };\r\n }\r\n\r\n userIsClient(): boolean {\r\n /* TODO\r\n const user = this.getUserDetails();\r\n return user && !this.isAgencyUser() && ['Traveller', 'Me', 'Others', 'Booker'].includes(user.BookingAllowedFor);\r\n */\r\n return true;\r\n }\r\n\r\n hasIgnorePolicy(): boolean {\r\n /* TODO\r\n const user = this.getUserDetails();\r\n return user && user.BookingPolicyOverride && user.BookingPolicyOverride === '9999-01-01 00:00:00';*/\r\n return false;\r\n }\r\n useAgentCanBookFor(): boolean {\r\n return true; // TODO\r\n }\r\n\r\n canBook(service: ServiceType): boolean {\r\n const services: UserServices = this.fullUserDetails.userServices.value;\r\n return services && !!services[service];\r\n }\r\n\r\n isTraveller(): boolean {\r\n return (\r\n this.fullUserDetails.userData.value.booker_type === BookerType.Traveller\r\n );\r\n }\r\n\r\n userIsAgent(): boolean {\r\n return (\r\n this.fullUserDetails.userData.value.booker_type === BookerType.Company\r\n );\r\n }\r\n\r\n userIsAdmin(): boolean {\r\n return this.fullUserDetails.userData.value.admin;\r\n }\r\n\r\n userIsCompanyAdmin(): boolean {\r\n return this.fullUserDetails.userData.value.company_admin;\r\n }\r\n\r\n isSelfBook(): boolean {\r\n return (\r\n this.fullUserDetails.userData.value.booker_type === BookerType.SelfBook\r\n );\r\n }\r\n\r\n isBooker(): boolean {\r\n return (\r\n this.fullUserDetails.userData.value.booker_type === BookerType.Booker\r\n );\r\n }\r\n\r\n getUserId(): number {\r\n return this.fullUserDetails.userData.value.user_id;\r\n }\r\n\r\n userHasServiceProvider(\r\n service: ServiceType,\r\n provider: ServiceProvider\r\n ): boolean {\r\n if (this.fullUserDetails.userServices.value) {\r\n return !!(this.fullUserDetails.userServices.value[service] || []).find(\r\n (value: Service) => {\r\n return value.name === (provider as string);\r\n }\r\n );\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n findService(id: string): Service {\r\n if (this.fullUserDetails.userServices.value) {\r\n return this.helpers.findService(\r\n this.fullUserDetails.userServices.value,\r\n id\r\n );\r\n }\r\n return null;\r\n }\r\n}\r\n","import { USER_SIGNEDOUT } from './user.service';\r\nimport { map, take } from 'rxjs/operators';\r\nimport { BaseModalOpenerService } from './modal-opener.service';\r\nimport { BaseStorageService } from './storage.service';\r\n\r\nimport { URLS } from './url.service';\r\nimport { UserFavorurite } from '../classes/user-favourite.enum';\r\nimport { Observable, of } from 'rxjs';\r\nimport { BaseEventMessenager } from '../classes/event-messenager';\r\nimport { BaseEnvironment } from '../classes/enviroment';\r\nimport { ModalTypes } from '../classes/modal-types.enum';\r\nimport { UserData } from '../interfaces/user.data';\r\nimport {\r\n AuthInfo,\r\n LoginResponse,\r\n PasswordChangeResponse\r\n} from '../models/login.model';\r\nimport { UserServiceInterface } from '../interfaces/Iuser.service';\r\nimport { AbstractHttpCallService } from './http-call.service';\r\nimport { Router } from '../types/types';\r\n\r\nexport class BaseLogonService {\r\n loading = false;\r\n isLoggedIn = false;\r\n redirectUrl = '';\r\n authInfo: AuthInfo;\r\n loginResponse: LoginResponse;\r\n timeoutSubscription: number;\r\n refreshPromise: Promise<boolean> = null;\r\n\r\n constructor(\r\n private userService: UserServiceInterface,\r\n private modalService: BaseModalOpenerService,\r\n private http: AbstractHttpCallService,\r\n private router: Router,\r\n private eventMessenager: BaseEventMessenager,\r\n private storageService: BaseStorageService,\r\n private environment: BaseEnvironment\r\n ) {}\r\n\r\n checkLogin(): Promise<boolean> {\r\n return this.refreshToken();\r\n }\r\n\r\n refreshToken(): Promise<boolean> {\r\n this.refreshPromise =\r\n this.refreshPromise ||\r\n new Promise(\r\n (resolve: (value: boolean) => void, reject: (error: any) => void) => {\r\n this.clearRefresh();\r\n this.http\r\n .formEncodedPostNoErrorHandling(URLS.Refresh, {})\r\n .pipe(\r\n take(1),\r\n map((data) => {\r\n return this.handleResponse(data);\r\n })\r\n )\r\n .subscribe(\r\n (data) => {\r\n if (typeof data === 'string') {\r\n resolve(false);\r\n if (this.router.url !== 'login') {\r\n const logoutDialog = this.modalService\r\n .open(\r\n ModalTypes.BaseModalComponent,\r\n {},\r\n {\r\n title: 'Auto Logout',\r\n body: '',\r\n isLoading: false,\r\n options: {\r\n buttonCancel: false,\r\n buttonOk: true,\r\n buttonOkText: 'Continue'\r\n }\r\n }\r\n )\r\n .then(() => {\r\n this.logout();\r\n resolve(false);\r\n });\r\n }\r\n } else {\r\n resolve(true);\r\n this.setRefresh();\r\n }\r\n },\r\n (error) => {\r\n resolve(false);\r\n }\r\n );\r\n }\r\n )\r\n .then((data: any) => {\r\n this.refreshPromise = null;\r\n return data;\r\n })\r\n .catch((error: any) => {\r\n this.refreshPromise = null;\r\n throw error;\r\n });\r\n\r\n return this.refreshPromise;\r\n }\r\n\r\n private clearRefresh() {\r\n if (this.timeoutSubscription) {\r\n clearTimeout(this.timeoutSubscription);\r\n this.timeoutSubscription = null;\r\n }\r\n }\r\n\r\n private setRefresh() {\r\n this.timeoutSubscription = window.setTimeout(\r\n this.refreshToken.bind(this),\r\n this.environment.authRefreshTimeout * 1000\r\n );\r\n }\r\n\r\n login(\r\n username: string,\r\n password: string,\r\n again?: boolean\r\n ): Observable<UserData> {\r\n this.userService.emptyUserData();\r\n\r\n this.storageService.clearSessionData();\r\n this.clearRefresh();\r\n return this.http\r\n .formEncodedPostNoErrorHandling(URLS.AccessToken, {\r\n username,\r\n password\r\n })\r\n .pipe(\r\n take(1),\r\n map((value: any, index: number) => {\r\n this.setRefresh();\r\n return this.handleResponse(value);\r\n })\r\n );\r\n }\r\n\r\n /*\r\n\t\t@desc - this will determine if there is a login error for the request or not, since this is a potential error for every call\r\n\t**/\r\n handleResponse(data: any): any {\r\n if (typeof data === 'object' && data.jwt) {\r\n this.userService.setUser(data.jwtObject);\r\n delete data.jwt;\r\n delete data.jwtObject;\r\n }\r\n return data;\r\n }\r\n\r\n cookieLogin(username: string): Observable<UserData> {\r\n // const sso = sessionStorage.getItem('sso_query');\r\n /*\r\n this.userService.emptyUserData();\r\n this.userService.setUserAgent(username);\r\n sessionStorage.setItem('sso_query', sso);\r\n this.authInfo = new AuthInfo(username, '', false);*/\r\n // return this.http.get(URLS.NUMBER_ONCE_TOKEN_URL);\r\n return of(null);\r\n }\r\n\r\n logout() {\r\n const isSSO = this.userService.isUserFavoriteSet(\r\n UserFavorurite.SSO_no_password\r\n );\r\n this.clearRefresh();\r\n this.isLoggedIn = false;\r\n this.userService.emptyUserData();\r\n\r\n this.storageService.clearSessionData();\r\n this.http.post(URLS.LOGOUT_URL).subscribe(\r\n (data) => {\r\n if (!data.LogoutSuccess) {\r\n // tslint:disable-next-line: quotemark\r\n console.warn(\"You're not logged in, cannot log out.\");\r\n }\r\n },\r\n () => {\r\n this.eventMessenager.emit(USER_SIGNEDOUT, {});\r\n\r\n if (\r\n this.userService.isUserFavoriteSet(UserFavorurite.SSO_no_password)\r\n ) {\r\n this.router.navigate(['logOutDigitsUser']);\r\n } else {\r\n this.router.navigate(['logon']);\r\n }\r\n }\r\n );\r\n }\r\n\r\n changePassword(authInfo: AuthInfo): Observable<PasswordChangeResponse> {\r\n // return this.http\r\n // .formEncodedPost(URLS.CHANGE_PASSWORD, authInfo.getChangePassTokenStr())\r\n // .pipe(\r\n // map((res: PasswordChangeResponse) => {\r\n // if (res.success) {\r\n // return res;\r\n // } else {\r\n // throw new LoginError(LoginErrorReason.PASSWORD_CHANGE, res);\r\n // }\r\n // })\r\n // );\r\n return of(null);\r\n }\r\n\r\n resetPassword(passwordResetToken: string, newPassword: string): Observable<PasswordChangeResponse> {\r\n return this.http.formEncodedPost(\r\n URLS.RESET_PASSWORD,\r\n {\r\n passwordResetToken,\r\n newPassword\r\n }\r\n );\r\n }\r\n\r\n /*\r\n\t\t@desc - actaually call the backend perl for recover pass\r\n\t**/\r\n recoverPassword(username: string): Observable<any> {\r\n return this.http.formEncodedPost(\r\n URLS.RECOVER_PASSWORD_URL,\r\n {\r\n username:`${username}`,\r\n },\r\n 'text'\r\n )\r\n }\r\n\r\n /*\r\n *\t@desc - error handling, opens a modal with the passed in error message\r\n **/\r\n handleError(error: string) {\r\n // this.userService.becomingUser = false;\r\n const modalValues = {\r\n error\r\n };\r\n this.modalService.open(ModalTypes.ModalErrorComponent, {}, modalValues);\r\n }\r\n}\r\n","import { Subject } from 'rxjs';\r\nimport { ModalTypes } from '../classes/modal-types.enum';\r\n\r\nexport interface ModalEvent {\r\n type: ModalTypes;\r\n data: any;\r\n options: object;\r\n results: (data: any) => void;\r\n}\r\n\r\nexport class BaseModalOpenerService {\r\n private openModalEvent = new Subject<ModalEvent>();\r\n\r\n constructor() {}\r\n\r\n open(type: ModalTypes, options: any = null, data: any = null): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n this.openModalEvent.next({\r\n type,\r\n data: data || {},\r\n options: options || {},\r\n results: resolve\r\n });\r\n });\r\n }\r\n\r\n subscribe(next: (data: any) => void) {\r\n return this.openModalEvent.subscribe(next);\r\n }\r\n}\r\n","import { BehaviorSubject, Observable, of } from 'rxjs';\r\nimport { map, take } from 'rxjs/operators';\r\nimport { EnterpriseMyBookingsServiceInterface } from '../interfaces/Imybookings.service';\r\nimport {\r\n BaseSearchUsersCanBookForFetcher,\r\n SearchUserCanBookForFetcherType\r\n} from '../fetchers/search-users-can-book-for-fetcher';\r\nimport {\r\n BaseGetUserBasketsFetcher,\r\n GetUserBasketsFetcherType\r\n} from '../fetchers/get-users-baskets-fetcher';\r\nimport { UserBasketResult } from '../types/types';\r\nimport {\r\n BasketItem,\r\n BasketItemStatus,\r\n BasketStatus,\r\n QueryGetUserBasketsArgs,\r\n ServiceType,\r\n User\r\n} from '../types/graphql.types';\r\nimport { EnterpriseSearchServiceInterface } from '../interfaces/Isearch.service';\r\n\r\nexport class BaseEnterpriseMyBookingsService<\r\n GUB_Q extends GetUserBasketsFetcherType,\r\n SUCBF_Q extends SearchUserCanBookForFetcherType\r\n> implements EnterpriseMyBookingsServiceInterface\r\n{\r\n public baskets: BehaviorSubject<UserBasketResult[]> = new BehaviorSubject<\r\n UserBasketResult[]\r\n >([]);\r\n\r\n private _basketStatusIconClasses: Record<BasketStatus, string> = {\r\n [BasketStatus.Approved]: 'ico-tick',\r\n [BasketStatus.AwaitingApproval]: 'ico-clock',\r\n [BasketStatus.BookingFailed]: 'ico-deny',\r\n [BasketStatus.Disapproved]: 'ico-deny',\r\n [BasketStatus.Open]: 'ico-calendar',\r\n [BasketStatus.PartiallyBooked]: 'ico-deny',\r\n [BasketStatus.Booked]: 'ico-deny'\r\n };\r\n\r\n private _serviceTypeIconClasses: Record<ServiceType, string> = {\r\n [ServiceType.Cab]: 'ico-m-taxi',\r\n [ServiceType.Car]: 'ico-car',\r\n [ServiceType.Coach]: 'ico-bus',\r\n [ServiceType.Flight]: 'ico-flight',\r\n [ServiceType.Hotel]: 'ico-bed',\r\n [ServiceType.FastTrack]: '',\r\n [ServiceType.InternationalRail]: 'ico-rail',\r\n [ServiceType.Lounge]: 'ico-material ico-lounge',\r\n [ServiceType.Parking]: 'ico-material ico-parking',\r\n [ServiceType.Rail]: 'ico-rail',\r\n [ServiceType.Eurostar]: 'ico-rail'\r\n };\r\n\r\n constructor(\r\n private getUserBasketsFetcher: BaseGetUserBasketsFetcher<GUB_Q>,\r\n private searchUserCanBookFor: BaseSearchUsersCanBookForFetcher<SUCBF_Q>\r\n ) {}\r\n\r\n getUserBaskets(\r\n query: QueryGetUserBasketsArgs,\r\n isLoading: BehaviorSubject<boolean>\r\n ): void {\r\n isLoading.next(true);\r\n this.getUserBasketsFetcher\r\n .fetchList(query)\r\n .pipe(take(1))\r\n .subscribe(\r\n (baskets: UserBasketResult[]) => {\r\n this.baskets.next(baskets);\r\n isLoading.next(false);\r\n },\r\n (error: any) => {\r\n console.error(error);\r\n isLoading.next(false);\r\n }\r\n );\r\n }\r\n\r\n getSearchUserCanBookFor(\r\n search: string,\r\n isLoading: BehaviorSubject<boolean>\r\n ): Observable<User[]> {\r\n if (search.length > 2) {\r\n isLoading.next(true);\r\n return this.searchUserCanBookFor\r\n .fetchList({\r\n email: search\r\n })\r\n .pipe(\r\n take(1),\r\n map((results: User[]) => {\r\n isLoading.next(false);\r\n return results;\r\n })\r\n );\r\n }\r\n return of([]);\r\n }\r\n\r\n getServiceTypeFilters(\r\n searchService: EnterpriseSearchServiceInterface\r\n ): string[] {\r\n const serviceTypeFilters: string[] = [];\r\n for (const [key] of Object.entries(searchService.search_objects)) {\r\n serviceTypeFilters.push(key);\r\n }\r\n return serviceTypeFilters;\r\n }\r\n\r\n getBasketStatusFilters(): string[] {\r\n const basketStatusFilters: string[] = [];\r\n Object.values(BasketStatus).forEach((basketStatus) =>\r\n basketStatusFilters.push(basketStatus)\r\n );\r\n return basketStatusFilters;\r\n }\r\n\r\n getServiceTypeFilterVanityName(serviceType: ServiceType): string {\r\n switch (serviceType) {\r\n case ServiceType.Cab:\r\n return 'Taxi';\r\n case ServiceType.InternationalRail:\r\n return 'European Rail';\r\n default:\r\n return serviceType;\r\n }\r\n }\r\n\r\n getBasketStatusIconClass(status: BasketStatus): string {\r\n return this._basketStatusIconClasses[status] || 'ico-exclamation';\r\n }\r\n\r\n getServiceTypeIconClass(basketItem: BasketItem): string {\r\n return (\r\n this._serviceTypeIconClasses[basketItem.service.type] || 'ico-exclamation'\r\n );\r\n }\r\n\r\n getTotalPriceForBasketItems(basketItems: BasketItem[]): number {\r\n return basketItems.reduce((total, basketItem) => {\r\n return total + basketItem.price;\r\n }, 0);\r\n }\r\n\r\n getTravellerNamesFromBasketItems(basketItems: BasketItem[]): string[] {\r\n let travellerNames: string[] = [];\r\n basketItems.map((basketItem) =>\r\n basketItem.users.map((user) =>\r\n travellerNames.push(`${user.forename} ${user.surname}`)\r\n )\r\n );\r\n travellerNames = [...new Set(travellerNames)]; // remove any duplicate traveller names\r\n return travellerNames;\r\n }\r\n\r\n allBasketItemsMatchStatus(\r\n basketItems: BasketItem[],\r\n basketItemStatus: BasketItemStatus\r\n ): boolean {\r\n return basketItems.every(\r\n (basketItem) => basketItem.status === basketItemStatus\r\n );\r\n }\r\n\r\n getHotelAddress(hotelAddress: { [key: string]: string }): string {\r\n const { county, postcode, streetName, town } = hotelAddress;\r\n const hotelAddressArr = [];\r\n if (streetName) hotelAddressArr.push(streetName);\r\n if (town) hotelAddressArr.push(town);\r\n if (county) hotelAddressArr.push(county);\r\n if (postcode) hotelAddressArr.push(postcode);\r\n return hotelAddressArr.join(', ');\r\n }\r\n\r\n getHotelLocation(hotelAddress: { [key: string]: string }): string {\r\n const { county, town } = hotelAddress;\r\n const hotelAddressArr = [];\r\n if (town) hotelAddressArr.push(town);\r\n if (county) hotelAddressArr.push(county);\r\n return hotelAddressArr.join(', ');\r\n }\r\n}\r\n","export abstract class BaseStorageService {\r\n abstract getSessionItem<T>(key: string): T;\r\n\r\n abstract getSessionItemAsList<T extends Array<any>>(key: string): T;\r\n\r\n abstract getLocalItem<T>(key: string): T;\r\n\r\n abstract setSessionItem(key: string, data: {}): void;\r\n\r\n abstract setLocalItem(key: string, data: {}): void;\r\n\r\n abstract removeSessionItem(key: string): void;\r\n\r\n abstract clearSessionData(): void;\r\n}\r\n","import moment from 'moment';\r\nimport { BaseEnvironment } from '../classes/enviroment';\r\nimport { ModalTypes } from '../classes/modal-types.enum';\r\nimport { LogoutEnum } from '../types/types';\r\nimport { BaseModalOpenerService } from './modal-opener.service';\r\n\r\nexport abstract class BaseWebTokenService {\r\n // tslint:disable-next-line: variable-name\r\n protected _jwtToken: string = null;\r\n protected timer: number = null;\r\n protected timeoutDuration: number = 60 * 60;\r\n protected lastUpdated: moment.Moment;\r\n autoLogoutConfig = {};\r\n\r\n /**\r\n * @param value: number // The time in minutes before hte user is auto logged out.\r\n */\r\n set timeOutDuration(value: number) {\r\n this.timeoutDuration = value * 60 - 60;\r\n }\r\n\r\n set jwtToken(value: string) {\r\n if (value !== this.jwtToken) {\r\n this._jwtToken = value;\r\n }\r\n }\r\n\r\n constructor(\r\n private modalOpenerService: BaseModalOpenerService,\r\n environment: BaseEnvironment\r\n ) {\r\n this.timeOutDuration = environment.autoLogoutTime;\r\n }\r\n\r\n protected _updateTimer() {\r\n window.clearTimeout(this.timer);\r\n this.timer = null;\r\n console.log('Resetting auto log out');\r\n this.timer = window.setTimeout(() => {\r\n this.checkToLogout();\r\n }, 60000);\r\n }\r\n\r\n protected checkToLogout() {\r\n const a = moment().unix();\r\n const b = this.lastUpdated.unix();\r\n const c = this.timeoutDuration;\r\n if (moment().unix() - this.lastUpdated.unix() > this.timeoutDuration) {\r\n this.timer = null;\r\n this.lastUpdated = moment();\r\n this.modalOpenerService\r\n .open(ModalTypes.AutoLogout, this.autoLogoutConfig, {})\r\n .then((logout: LogoutEnum) => {\r\n if (logout !== LogoutEnum.LOGOUT) {\r\n this._updateTimer();\r\n } else {\r\n this._jwtToken = null;\r\n }\r\n });\r\n } else {\r\n this._updateTimer();\r\n }\r\n }\r\n\r\n public abstract getHeaders(): object;\r\n}\r\n","import { BehaviorSubject } from 'rxjs';\r\nimport { BaseHelperRoutines } from '../classes/helpers';\r\nimport { Memorise } from '../classes/limited-cache.class';\r\nimport { UPA, Amenities } from '../classes/routehappy-request';\r\nimport { Included } from '../classes/routehappy-response';\r\nimport { AbstractHttpCallService } from './http-call.service';\r\n\r\nexport interface RouteHappyBandsUpas {\r\n brands: Brand[];\r\n upas: Upas[];\r\n}\r\n\r\nexport interface RouteHappyAmenities {\r\n seat: Amenities.Seat;\r\n wifi: Amenities.Wifi;\r\n power: Amenities.Power;\r\n entertainment: Amenities.Entertainment;\r\n fresh_food: Amenities.FreshFood;\r\n beverage: Amenities.Beverage;\r\n layout: Amenities.Layout;\r\n aircraft: Amenities.Aircraft;\r\n}\r\ninterface Brand {\r\n brand_name: string;\r\n brand_codes: string[];\r\n}\r\ninterface Upa {\r\n headline: string;\r\n description: string;\r\n small_icon_url: string;\r\n large_icon_url: string;\r\n cta_text: string;\r\n cta_url: string;\r\n categories: string[];\r\n fees: any[];\r\n}\r\n\r\ninterface Upas {\r\n [key: string]: Upa;\r\n}\r\n\r\nexport class BaseRouteHappyService {\r\n constructor(\r\n private httpService: AbstractHttpCallService,\r\n private helpers: BaseHelperRoutines\r\n ) {}\r\n\r\n @Memorise()\r\n public getAmenitiesForFlight(\r\n flight: any\r\n ): BehaviorSubject<RouteHappyAmenities[]> {\r\n const value = new BehaviorSubject<RouteHappyAmenities[]>([]);\r\n\r\n // const ids = flight.LegDetails\r\n // .map((leg: any) => {\r\n // return [\r\n // leg.depPoint,\r\n // leg.arrPoint,\r\n // leg.touropID,\r\n // leg.transNo.substr(leg.touropID.length), // Remove the touropId fdrom the beginning of the flight number\r\n // Helpers.formatIsoDateNoHyphans(Helpers.yymmddToMoment(leg.dateDep)),\r\n // this.convertClassString(leg.seatClassBasic.toUpperCase())\r\n // ].join('-');\r\n // })\r\n // .join(',');\r\n\r\n // this.httpService\r\n // .post(URLS.routeHappy, {\r\n // type: 'flight-get',\r\n // parameters:\r\n // 'include=' +\r\n // [\r\n // 'segments.aircraft',\r\n // 'segments.entertainment',\r\n // 'segments.fresh_food',\r\n // 'segments.layout',\r\n // 'segments.power',\r\n // 'segments.seat',\r\n // 'segments.wifi',\r\n // 'segments.beverage'\r\n // ].join(',') +\r\n // '&ids=' +\r\n // ids,\r\n // url: 'api-legs'\r\n // })\r\n // .pipe(take(1))\r\n // .subscribe((response: Amenities.AmenitiesResponse) => {\r\n // value.next(this.parseAmenities(response));\r\n // });\r\n\r\n return value;\r\n }\r\n\r\n parseAmenities(response: Amenities.AmenitiesResponse): RouteHappyAmenities[] {\r\n const linked = response.linked;\r\n\r\n const findId = (id: string, data: any[]) => {\r\n return data.find((item) => item.id == id);\r\n };\r\n return response.data.map((datum: Amenities.Datum) => {\r\n const currentSegment: Amenities.Segment = findId(\r\n datum.links.segments[0],\r\n linked.segments\r\n );\r\n return {\r\n seat: findId(currentSegment.links.seat.toString(), linked.seats),\r\n wifi: findId(currentSegment.links.wifi.toString(), linked.wifis),\r\n power: findId(\r\n currentSegment.links.power.toString(),\r\n linked.entertainments\r\n ),\r\n entertainment: findId(\r\n currentSegment.links.entertainment.toString(),\r\n linked.entertainments\r\n ),\r\n fresh_food: findId(\r\n currentSegment.links.fresh_food.toString(),\r\n linked.fresh_foods\r\n ),\r\n beverage: findId(\r\n currentSegment.links.beverage.toString(),\r\n linked.beverages\r\n ),\r\n layout: findId(currentSegment.links.layout.toString(), linked.layouts),\r\n aircraft: findId(\r\n currentSegment.links.aircraft.toString(),\r\n linked.aircrafts\r\n )\r\n };\r\n });\r\n }\r\n\r\n convertClassString(seatClass: string): string {\r\n switch (seatClass) {\r\n case 'ECONOMY':\r\n return 'ECON';\r\n case 'PREMIUM ECONOMY':\r\n return 'PREMECON';\r\n case 'BUSINESS':\r\n return 'BUSINESS';\r\n case 'FIRST':\r\n return 'FIRST';\r\n default:\r\n return 'ECON';\r\n }\r\n }\r\n\r\n @Memorise()\r\n public getUpasForFlight(flight: any): BehaviorSubject<RouteHappyBandsUpas[]> {\r\n const value = new BehaviorSubject<RouteHappyBandsUpas[]>([]);\r\n\r\n const data: UPA.UPARequest = {\r\n data: {\r\n type: 'legs_search',\r\n attributes: {\r\n fare_source: '1S',\r\n categories: ['brand', 'promotion'],\r\n legs: [\r\n {\r\n segments: []\r\n }\r\n ]\r\n }\r\n }\r\n };\r\n data.data.attributes.legs = flight.LegDetails.map((leg: any) => {\r\n return {\r\n segments: [\r\n {\r\n dep: leg.depPoint,\r\n arr: leg.arrPoint,\r\n carrier: leg.touropID,\r\n flt_no: leg.transNo.substr(leg.touropID.length), // Remove the touropId fdrom the beginning of the flight number\r\n dep_date: this.helpers.formatIsoDate(\r\n this.helpers.yymmddToMoment(leg.dateDep)\r\n ),\r\n cabin_id: this.convertClass(leg.seatClassBasic.toUpperCase())\r\n }\r\n ]\r\n };\r\n });\r\n\r\n // this.httpService\r\n // .post(URLS.routeHappy, {\r\n // type: 'flight',\r\n // payload: data,\r\n // parameters: 'include=legs.leg_fares.fare,legs.leg_fares.leg_fare_segments.upas',\r\n // url: 'hub-api-legssearch'\r\n // })\r\n // .pipe(take(1))\r\n // .subscribe((response: RouteHappyBandsUpas[]) => {\r\n // value.next(this.parseResponse(response));\r\n // });\r\n\r\n return value;\r\n }\r\n convertClass(seatClass: string): number {\r\n switch (seatClass) {\r\n case 'ECONOMY':\r\n return 1;\r\n case 'PREMIUM ECONOMY':\r\n return 2;\r\n case 'BUSINESS':\r\n return 3;\r\n case 'FIRST':\r\n return 4;\r\n default:\r\n return 1;\r\n }\r\n }\r\n\r\n private parseResponse(response: any): RouteHappyBandsUpas[] {\r\n const makeKey = (...args: string[]) => {\r\n return args.join('_');\r\n };\r\n\r\n const makeKeyFromData = (data: { type: string; id: string }) => {\r\n return makeKey(data.type, data.id);\r\n };\r\n\r\n const getAttributes = (data: { type: string; attributes: string }) => {\r\n return data.attributes;\r\n };\r\n\r\n const relationships = response.included.reduce(\r\n (details: { [key: string]: Included }, included: Included) => {\r\n details[makeKey(included.type, included.id)] = included;\r\n return details;\r\n },\r\n {}\r\n );\r\n\r\n const getRelationship = (data: { type: string; id: string }): any => {\r\n return relationships[makeKeyFromData(data)];\r\n };\r\n\r\n const toReturn = response.data.relationships.legs.data.map(\r\n (leg: { type: string; id: string }) => {\r\n const currentLeg = getRelationship(leg);\r\n const legFares = currentLeg.relationships.leg_fares.data\r\n .map(getRelationship)\r\n .filter((legFare: any) => !!legFare.relationships.fare.data);\r\n\r\n const brands = legFares\r\n .map((legFare: any) =>\r\n getRelationship(legFare.relationships.fare.data)\r\n )\r\n .map(getAttributes);\r\n const upas = legFares\r\n .map((legFare: any) =>\r\n legFare.relationships.leg_fare_segments.data.map(getRelationship)\r\n )\r\n .map((legFareSegment: any): any[] => {\r\n return legFareSegment.map((obj: any) =>\r\n obj.relationships.upas.data\r\n .map(getRelationship)\r\n .map((upa: any) => {\r\n return {\r\n id: upa.id,\r\n details: getAttributes(upa)\r\n };\r\n })\r\n .reduce((current: Upas, next: any): Upas => {\r\n current[next.id] = next.details;\r\n return current;\r\n }, {})\r\n );\r\n });\r\n\r\n return { brands, upas };\r\n }\r\n );\r\n return toReturn;\r\n }\r\n}\r\n","import { Observable } from 'rxjs';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { BaseNetworkCall } from '../classes/base-network-call';\r\nimport { ApolloQueryResult } from '@apollo/client/core';\r\n\r\nexport abstract class BaseTester<\r\n Q extends { fetch: (a: A) => Observable<ApolloQueryResult<R>> },\r\n A,\r\n R\r\n> extends BaseNetworkCall<Q, A, R, boolean> {\r\n constructor(private query: Q, modalService: BaseModalOpenerService) {\r\n super(modalService);\r\n }\r\n\r\n public test(queryArgs: A): Observable<boolean> {\r\n return this.processCall(this.query.fetch(queryArgs));\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseTester } from './base.tester';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { ValidateUserMiFreeValueQueryVariables } from '../types/graphql.types';\r\n\r\ntype A = ValidateUserMiFreeValueQueryVariables;\r\ntype R = { validateUserMIFreeValue: boolean };\r\n\r\nexport type ValidateMiFetcherType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<R>>;\r\n};\r\nexport class BaseValidateMiFreeValueTester<\r\n Q extends ValidateMiFetcherType\r\n> extends BaseTester<Q, A, R> {\r\n constructor(validateMiFreeValueGQL: Q, modalService: BaseModalOpenerService) {\r\n super(validateMiFreeValueGQL, modalService);\r\n }\r\n\r\n getDataFromResult(results: ApolloQueryResult<R>): boolean {\r\n return results.data.validateUserMIFreeValue;\r\n }\r\n}\r\n","import { ApolloQueryResult } from '@apollo/client/core';\r\nimport { BaseTester } from './base.tester';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { IsPostcodeValidQueryVariables } from '../types/graphql.types';\r\n\r\ntype A = IsPostcodeValidQueryVariables;\r\ntype R = { isPostcodeValid: boolean };\r\n\r\nexport type ValidateIsPostcodeValidType = {\r\n fetch: (a: A) => Observable<ApolloQueryResult<R>>;\r\n};\r\n\r\nexport class BaseValidateIsPostcodeValidTester<\r\n Q extends ValidateIsPostcodeValidType\r\n> extends BaseTester<Q, A, R> {\r\n constructor(isPostcodeValidGQL: Q, modalService: BaseModalOpenerService) {\r\n super(isPostcodeValidGQL, modalService);\r\n }\r\n\r\n getDataFromResult(results: ApolloQueryResult<R>): boolean {\r\n return results.data.isPostcodeValid;\r\n }\r\n}\r\n","import { FetchResult } from '@apollo/client/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseNetworkCall } from '../classes/base-network-call';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\n\r\nexport abstract class UpdateableObject<\r\n Q extends { mutate: (a: A) => Observable<FetchResult<M>> },\r\n A,\r\n R,\r\n P,\r\n M\r\n> extends BaseNetworkCall<Q, A, R, P> {\r\n constructor(private query: Q, modalService: BaseModalOpenerService) {\r\n super(modalService);\r\n }\r\n\r\n public updateOne(queryArgs: A): Observable<P> {\r\n return this.processCall(this.query.mutate(queryArgs));\r\n }\r\n}\r\n","import { ApolloQueryResult, FetchResult } from '@apollo/client/core';\r\nimport { UpdateableObject } from './object-updater-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n AcceptNewPriceMutation,\r\n AcceptNewPriceMutationVariables\r\n} from '../types/graphql.types';\r\nimport { GetUserBasketResult } from '../types/types';\r\nimport { BasketDetails } from '../services/enterprise-basket.service';\r\n\r\ntype R = { acceptNewPrice: P };\r\ntype P = BasketDetails;\r\ntype A = AcceptNewPriceMutationVariables;\r\ntype M = AcceptNewPriceMutation;\r\n\r\nexport type AcceptNewPriceFetcherType = {\r\n mutate: (a: A) => Observable<FetchResult<M>>;\r\n};\r\n\r\nexport class BaseAcceptNewPriceUpdater<\r\n Q extends AcceptNewPriceFetcherType\r\n> extends UpdateableObject<Q, A, R, P, M> {\r\n constructor(updater: Q, modalService: BaseModalOpenerService) {\r\n super(updater, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data.acceptNewPrice;\r\n }\r\n}\r\n","import { ApolloQueryResult, FetchResult } from '@apollo/client/core';\r\nimport { UpdateableObject } from './object-updater-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { GetUserBasketResult } from '../types/types';\r\nimport {\r\n AddItemToBasketMutation,\r\n AddItemToBasketMutationVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { addItemToBasket: P };\r\ntype P = GetUserBasketResult;\r\ntype A = AddItemToBasketMutationVariables;\r\ntype M = AddItemToBasketMutation;\r\n\r\nexport type AddItemToBasketFetcherType = {\r\n mutate: (a: A) => Observable<FetchResult<M>>;\r\n};\r\nexport class BaseAddItemToBasketUpdater<\r\n Q extends AddItemToBasketFetcherType\r\n> extends UpdateableObject<Q, A, R, P, M> {\r\n constructor(updater: Q, modalService: BaseModalOpenerService) {\r\n super(updater, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data.addItemToBasket;\r\n }\r\n}\r\n","import { ApolloQueryResult, FetchResult } from '@apollo/client/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport {\r\n AddUsersToBasketItemMutation,\r\n AddUsersToBasketItemMutationVariables\r\n} from '../types/graphql.types';\r\nimport { GetUserBasketResult } from '../types/types';\r\nimport { UpdateableObject } from './object-updater-enterprise';\r\n\r\ntype R = { addUserToBasketItem: P };\r\ntype P = GetUserBasketResult;\r\ntype A = AddUsersToBasketItemMutationVariables;\r\ntype M = AddUsersToBasketItemMutation;\r\n\r\nexport type AddUserBasketFetcherType = {\r\n mutate: (a: A) => Observable<FetchResult<M>>;\r\n};\r\n\r\nexport class BaseAddUserToBasketItemUpdater<\r\n Q extends AddUserBasketFetcherType\r\n> extends UpdateableObject<Q, A, R, P, M> {\r\n constructor(updater: Q, modalService: BaseModalOpenerService) {\r\n super(updater, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data.addUserToBasketItem;\r\n }\r\n}\r\n","import { ApolloQueryResult, FetchResult } from '@apollo/client/core';\r\nimport { UpdateableObject } from './object-updater-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n BookBasketMutation,\r\n BookBasketMutationVariables\r\n} from '../types/graphql.types';\r\nimport { BasketDetails } from '../services/enterprise-basket.service';\r\n\r\ntype R = { bookBasket: P };\r\ntype P = BasketDetails;\r\ntype A = BookBasketMutationVariables;\r\ntype M = BookBasketMutation;\r\nexport type BookBasketFetcherType = {\r\n mutate: (a: A) => Observable<FetchResult<M>>;\r\n};\r\nexport class BaseBookBasketUpdater<\r\n Q extends BookBasketFetcherType\r\n> extends UpdateableObject<Q, A, R, P, M> {\r\n constructor(createBasketGQL: Q, modalService: BaseModalOpenerService) {\r\n super(createBasketGQL, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.bookBasket;\r\n }\r\n}\r\n","import { ApolloQueryResult, FetchResult } from '@apollo/client/core';\r\nimport { UpdateableObject } from './object-updater-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { GetUserBasketResult } from '../types/types';\r\nimport {\r\n CreateBasketMutation,\r\n CreateBasketMutationVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { createBasket: P };\r\ntype P = GetUserBasketResult;\r\ntype A = CreateBasketMutationVariables;\r\ntype M = CreateBasketMutation;\r\n\r\nexport type CreateBasketFetcherType = {\r\n mutate: (a: A) => Observable<FetchResult<M>>;\r\n};\r\nexport class BaseCreateBasketUpdater<\r\n Q extends CreateBasketFetcherType\r\n> extends UpdateableObject<Q, A, R, P, M> {\r\n constructor(createBasketGQL: Q, modalService: BaseModalOpenerService) {\r\n super(createBasketGQL, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.createBasket;\r\n }\r\n}\r\n","import { ApolloQueryResult, FetchResult } from '@apollo/client/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BasketDetails } from '../services/enterprise-basket.service';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport {\r\n MoveItemToADifferentBasketMutationVariables,\r\n MoveItemToADifferentBasketMutation\r\n} from '../types/graphql.types';\r\nimport { UpdateableObject } from './object-updater-enterprise';\r\n\r\ntype R = { moveItemToADifferentBasket: P };\r\ntype P = BasketDetails;\r\ntype A = MoveItemToADifferentBasketMutationVariables;\r\ntype M = MoveItemToADifferentBasketMutation;\r\n\r\nexport type MoveItemToADifferentBasketType = {\r\n mutate: (a: A) => Observable<FetchResult<M>>;\r\n};\r\n\r\nexport class BasemoveBasketItemToBasket<\r\n Q extends MoveItemToADifferentBasketType\r\n> extends UpdateableObject<Q, A, R, P, M> {\r\n constructor(updater: Q, modalService: BaseModalOpenerService) {\r\n super(updater, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data.moveItemToADifferentBasket;\r\n }\r\n}\r\n","import { ApolloQueryResult, FetchResult } from '@apollo/client/core';\r\nimport { UpdateableObject } from './object-updater-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n DeleteBasketMutation,\r\n DeleteBasketMutationVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { deleteBasket: P };\r\ntype P = void;\r\ntype A = DeleteBasketMutationVariables;\r\ntype M = DeleteBasketMutation;\r\n\r\nexport type DeleteBasketFetcherType = {\r\n mutate: (a: A) => Observable<FetchResult<M>>;\r\n};\r\n\r\nexport class BaseDeleteBasketUpdater<\r\n Q extends DeleteBasketFetcherType\r\n> extends UpdateableObject<Q, A, R, P, M> {\r\n constructor(createBasketGQL: Q, modalService: BaseModalOpenerService) {\r\n super(createBasketGQL, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.deleteBasket;\r\n }\r\n}\r\n","import { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { UpdateableObject } from './object-updater-enterprise';\r\nimport { ApolloQueryResult, FetchResult } from '@apollo/client/core';\r\nimport { Observable } from 'rxjs';\r\nimport { GetUserBasketResult } from '../types/types';\r\nimport {\r\n RemoveItemFromBasketMutation,\r\n RemoveItemFromBasketMutationVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { removeItemFromBasket: P };\r\ntype P = GetUserBasketResult;\r\ntype A = RemoveItemFromBasketMutationVariables;\r\ntype M = RemoveItemFromBasketMutation;\r\n\r\nexport type DeleteBasketItemFetcherType = {\r\n mutate: (a: A) => Observable<FetchResult<M>>;\r\n};\r\nexport class BaseRemoveItemFromBasketUpdater<\r\n Q extends DeleteBasketItemFetcherType\r\n> extends UpdateableObject<Q, A, R, P, M> {\r\n constructor(removeItemFromBasket: Q, modalService: BaseModalOpenerService) {\r\n super(removeItemFromBasket, modalService);\r\n }\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data.removeItemFromBasket;\r\n }\r\n}\r\n","import { ApolloQueryResult, FetchResult } from '@apollo/client/core';\r\nimport { UpdateableObject } from './object-updater-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n DeleteUserAddressMutation,\r\n DeleteUserAddressMutationVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { deleteUserAddress: P };\r\ntype P = void;\r\ntype A = DeleteUserAddressMutationVariables;\r\ntype M = DeleteUserAddressMutation;\r\n\r\nexport type DeleteUserAddressFetcherType = {\r\n mutate: (a: A) => Observable<FetchResult<M>>;\r\n};\r\n\r\nexport class BaseDeleteUserAddressUpdater<\r\n Q extends DeleteUserAddressFetcherType\r\n> extends UpdateableObject<Q, A, R, P, M> {\r\n constructor(deleteUserAddressGQL: Q, modalService: BaseModalOpenerService) {\r\n super(deleteUserAddressGQL, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.deleteUserAddress;\r\n }\r\n}\r\n","import { ApolloQueryResult, FetchResult } from '@apollo/client/core';\r\nimport { UpdateableObject } from './object-updater-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n DeleteRecentSearchMutation,\r\n DeleteRecentSearchMutationVariables\r\n} from '../types/graphql.types';\r\n\r\ntype R = { deleteRecentSearch: P };\r\ntype P = void;\r\ntype A = DeleteRecentSearchMutationVariables;\r\ntype M = DeleteRecentSearchMutation;\r\n\r\nexport type DeleteRecentSearchFetcherType = {\r\n mutate: (a: A) => Observable<FetchResult<M>>;\r\n};\r\n\r\nexport class BaseDeleteRecentSearchUpdater<\r\n Q extends DeleteRecentSearchFetcherType\r\n> extends UpdateableObject<Q, A, R, P, M> {\r\n constructor(deleteRecentSearchGQL: Q, modalService: BaseModalOpenerService) {\r\n super(deleteRecentSearchGQL, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.deleteRecentSearch;\r\n }\r\n}\r\n","import { ApolloQueryResult, FetchResult } from '@apollo/client/core';\r\nimport { UpdateableObject } from './object-updater-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { GetUserBasketResult } from '../types/types';\r\nimport {\r\n RevalidateBasketMutation,\r\n RevalidateBasketMutationVariables\r\n} from '../types/graphql.types';\r\nimport { BasketDetails } from '../services/enterprise-basket.service';\r\n\r\ntype R = { revalidateBasket: P };\r\ntype P = BasketDetails;\r\ntype A = RevalidateBasketMutationVariables;\r\ntype M = RevalidateBasketMutation;\r\n\r\nexport type RevalidateBasketFetcherType = {\r\n mutate: (a: A) => Observable<FetchResult<M>>;\r\n};\r\nexport class BaseRevalidateBasketUpdater<\r\n Q extends RevalidateBasketFetcherType\r\n> extends UpdateableObject<Q, A, R, P, M> {\r\n constructor(revalidateBasketGQL: Q, modalService: BaseModalOpenerService) {\r\n super(revalidateBasketGQL, modalService);\r\n }\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data.revalidateBasket;\r\n }\r\n}\r\n","import { ApolloQueryResult, FetchResult } from '@apollo/client/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport {\r\n SaveUserAddressMutation,\r\n SaveUserAddressMutationVariables\r\n} from '../types/graphql.types';\r\nimport { SaveUserAddressResult } from '../types/types';\r\nimport { UpdateableObject } from './object-updater-enterprise';\r\n\r\ntype A = SaveUserAddressMutationVariables;\r\ntype R = { saveUserAddress: P };\r\ntype P = SaveUserAddressResult;\r\ntype M = SaveUserAddressMutation;\r\n\r\nexport type SaveUserAddressUpdaterType = {\r\n mutate: (a: A) => Observable<FetchResult<M>>;\r\n};\r\n\r\nexport class BaseSaveUserAddressUpdater<\r\n Q extends SaveUserAddressUpdaterType\r\n> extends UpdateableObject<Q, A, R, P, M> {\r\n constructor(updater: Q, modalService: BaseModalOpenerService) {\r\n super(updater, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data.saveUserAddress;\r\n }\r\n}\r\n","import { ApolloQueryResult, FetchResult } from '@apollo/client/core';\r\nimport { UpdateableObject } from './object-updater-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n SendBasketForApprovalMutation,\r\n SendBasketForApprovalMutationVariables\r\n} from '../types/graphql.types';\r\nimport { BasketDetails } from '../services/enterprise-basket.service';\r\n\r\ntype A = SendBasketForApprovalMutationVariables;\r\ntype P = BasketDetails;\r\ntype R = { sendBasketForApproval: P };\r\ntype M = SendBasketForApprovalMutation;\r\n\r\nexport type SendBasketApprovalFetcherType = {\r\n mutate: (a: A) => Observable<FetchResult<M>>;\r\n};\r\nexport class BaseSendBasketForApprovalUpdater<\r\n Q extends SendBasketApprovalFetcherType\r\n> extends UpdateableObject<Q, A, R, P, M> {\r\n constructor(\r\n SendBasketForApprovalMutationGQL: Q,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(SendBasketForApprovalMutationGQL, modalService);\r\n }\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data.sendBasketForApproval;\r\n }\r\n}\r\n","import { ApolloQueryResult, FetchResult } from '@apollo/client/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport {\r\n SetBasketItemLeadPassengerMutation,\r\n SetBasketItemLeadPassengerMutationVariables\r\n} from '../types/graphql.types';\r\nimport { GetUserBasketResult } from '../types/types';\r\nimport { UpdateableObject } from './object-updater-enterprise';\r\n\r\ntype R = { setBasketItemLeadPassenger: P };\r\ntype P = GetUserBasketResult;\r\ntype A = SetBasketItemLeadPassengerMutationVariables;\r\ntype M = SetBasketItemLeadPassengerMutation;\r\n\r\nexport type SetBasketItemLeadPassengerFetcherType = {\r\n mutate: (a: A) => Observable<FetchResult<M>>;\r\n};\r\n\r\nexport class BaseSetBasketItemLeadPassengerUpdater<\r\n Q extends SetBasketItemLeadPassengerFetcherType\r\n> extends UpdateableObject<Q, A, R, P, M> {\r\n constructor(updater: Q, modalService: BaseModalOpenerService) {\r\n super(updater, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data.setBasketItemLeadPassenger;\r\n }\r\n}\r\n","import { ApolloQueryResult, FetchResult } from '@apollo/client/core';\r\nimport { UpdateableObject } from './object-updater-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport { GetUserBasketResult } from '../types/types';\r\nimport {\r\n SetBasketItemMiGroupMutation,\r\n SetBasketItemMiGroupMutationVariables\r\n} from '../types/graphql.types';\r\nimport { BasketDetails } from '../services/enterprise-basket.service';\r\n\r\ntype A = SetBasketItemMiGroupMutationVariables;\r\ntype R = { setBasketItemMIGroup: P };\r\ntype P = BasketDetails;\r\ntype M = SetBasketItemMiGroupMutation;\r\n\r\nexport type SetBasketItMiGroupFetcherType = {\r\n mutate: (a: A) => Observable<FetchResult<M>>;\r\n};\r\nexport class BaseSetBasketItemMiGroupUpdater<\r\n Q extends SetBasketItMiGroupFetcherType\r\n> extends UpdateableObject<Q, A, R, P, M> {\r\n constructor(\r\n setBasketItemMiGroupMutationGQL: Q,\r\n modalService: BaseModalOpenerService\r\n ) {\r\n super(setBasketItemMiGroupMutationGQL, modalService);\r\n }\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data.setBasketItemMIGroup;\r\n }\r\n}\r\n","import { ApolloQueryResult, FetchResult } from '@apollo/client/core';\r\n\r\nimport { UpdateableObject } from './object-updater-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n SetBasketItemMiValueMutation,\r\n SetBasketItemMiValueMutationVariables\r\n} from '../types/graphql.types';\r\nimport { BasketDetails } from '../services/enterprise-basket.service';\r\n\r\ntype A = SetBasketItemMiValueMutationVariables;\r\ntype R = { setBasketItemMIValue: P };\r\ntype P = BasketDetails;\r\ntype M = SetBasketItemMiValueMutation;\r\n\r\nexport type SetBasketItMiFetcherType = {\r\n mutate: (a: A) => Observable<FetchResult<M>>;\r\n};\r\nexport class BaseSetBasketItemMiValueUpdater<\r\n Q extends SetBasketItMiFetcherType\r\n> extends UpdateableObject<Q, A, R, P, M> {\r\n constructor(updater: Q, modalService: BaseModalOpenerService) {\r\n super(updater, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data.setBasketItemMIValue;\r\n }\r\n}\r\n","import { ApolloQueryResult, FetchResult } from '@apollo/client/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BasketDetails } from '../services/enterprise-basket.service';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport {\r\n UpdateBasketTitleMutationVariables,\r\n UpdateBasketTitleMutation\r\n} from '../types/graphql.types';\r\nimport { UpdateableObject } from './object-updater-enterprise';\r\n\r\ntype R = { updateBasketTitle: P };\r\ntype P = BasketDetails;\r\ntype A = UpdateBasketTitleMutationVariables;\r\ntype M = UpdateBasketTitleMutation;\r\n\r\nexport type BaseUpdateBasketTitleType = {\r\n mutate: (a: A) => Observable<FetchResult<M>>;\r\n};\r\n\r\nexport class BaseUpdateBasketTitleUpdater<\r\n Q extends BaseUpdateBasketTitleType\r\n> extends UpdateableObject<Q, A, R, P, M> {\r\n constructor(updater: Q, modalService: BaseModalOpenerService) {\r\n super(updater, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data.updateBasketTitle;\r\n }\r\n}\r\n","import { ApolloQueryResult, FetchResult } from '@apollo/client/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BasketDetails } from '../services/enterprise-basket.service';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport {\r\n UpdateBasketNotesMutationVariables,\r\n UpdateBasketNotesMutation\r\n} from '../types/graphql.types';\r\nimport { UpdateableObject } from './object-updater-enterprise';\r\n\r\ntype R = { baseUpdateBasketNotes: P };\r\ntype P = BasketDetails;\r\ntype A = UpdateBasketNotesMutationVariables;\r\ntype M = UpdateBasketNotesMutation;\r\n\r\nexport type BaseUpdateBasketNotesType = {\r\n mutate: (a: A) => Observable<FetchResult<M>>;\r\n};\r\n\r\nexport class BaseUpdateBasketNoteUpdater<\r\n Q extends BaseUpdateBasketNotesType\r\n> extends UpdateableObject<Q, A, R, P, M> {\r\n constructor(updater: Q, modalService: BaseModalOpenerService) {\r\n super(updater, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data.baseUpdateBasketNotes;\r\n }\r\n}\r\n","import { ApolloQueryResult, FetchResult } from '@apollo/client/core';\r\nimport { UpdateableObject } from './object-updater-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n SaveRecentSearchMutation,\r\n SaveRecentSearchMutationVariables\r\n} from '../types/graphql.types';\r\nimport { SaveRecentSearchResult } from '../types/types';\r\n\r\ntype A = SaveRecentSearchMutationVariables;\r\ntype R = { saveRecentSearch: P };\r\ntype P = SaveRecentSearchResult;\r\ntype M = SaveRecentSearchMutation;\r\n\r\nexport type SaveRecentSearchFetcherType = {\r\n mutate: (a: A) => Observable<FetchResult<M>>;\r\n};\r\n\r\nexport class BaseSaveRecentSearchUpdater<\r\n Q extends SaveRecentSearchFetcherType\r\n> extends UpdateableObject<Q, A, R, P, M> {\r\n constructor(SaveRecentSearchGQL: Q, modalService: BaseModalOpenerService) {\r\n super(SaveRecentSearchGQL, modalService);\r\n }\r\n\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results?.data?.saveRecentSearch;\r\n }\r\n}\r\n","import { ApolloQueryResult, FetchResult } from '@apollo/client/core';\r\nimport { UpdateableObject } from './object-updater-enterprise';\r\nimport { BaseModalOpenerService } from '../services/modal-opener.service';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n SetBasketItemPaymentMethodMutation,\r\n SetBasketItemPaymentMethodMutationVariables\r\n} from '../types/graphql.types';\r\nimport { BasketDetails } from '../services/enterprise-basket.service';\r\n\r\ntype A = SetBasketItemPaymentMethodMutationVariables;\r\ntype R = { setBasketItemPaymentMethod: P };\r\ntype P = BasketDetails;\r\ntype M = SetBasketItemPaymentMethodMutation;\r\n\r\nexport type SetBasketItemPaymentMethodType = {\r\n mutate: (a: A) => Observable<FetchResult<M>>;\r\n};\r\nexport class BaseSetPaymentOptionUpdater<\r\n Q extends SetBasketItemPaymentMethodType\r\n> extends UpdateableObject<Q, A, R, P, M> {\r\n constructor(gql: Q, modalService: BaseModalOpenerService) {\r\n super(gql, modalService);\r\n }\r\n protected getDataFromResult(results: ApolloQueryResult<R>): P {\r\n return results.data.setBasketItemPaymentMethod;\r\n }\r\n}\r\n"]}