@sabstravtech/obtservices 0.0.1 → 0.0.3

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 (528) hide show
  1. package/README.md +9 -12
  2. package/{dist/obtservices/angular → angular}/components/basket-panel.d.ts +1 -1
  3. package/{dist/obtservices/angular → angular}/lib/vendor/classes/environment.d.ts +1 -1
  4. package/{dist/obtservices/angular → angular}/lib/vendor/classes/event-messenager.d.ts +1 -1
  5. package/{dist/obtservices/angular → angular}/lib/vendor/classes/helpers.d.ts +1 -1
  6. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/basket-fetcher.d.ts +1 -1
  7. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/cabhire-quote-fetcher.d.ts +1 -1
  8. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/carhire-availability-detail.fetcher.d.ts +1 -1
  9. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/carhire-quote-fetcher.d.ts +1 -1
  10. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/conferma-office-names.fetcher.d.ts +1 -1
  11. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/conferma-quicklist.fetcher.d.ts +1 -1
  12. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/eurostar-quote.fetcher.d.ts +1 -1
  13. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/flight-quote.fetcher.d.ts +1 -1
  14. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/get-rail-cards.fetcher.d.ts +1 -1
  15. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/get-rail-station.fetcher.d.ts +1 -1
  16. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/get-risk-alerts.fetcher.d.ts +1 -1
  17. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/get-user-company-offices.fetcher.d.ts +1 -1
  18. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.d.ts +1 -1
  19. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/get-user-recent-searches.fetcher.d.ts +1 -1
  20. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/get-users-baskets-fetcher.d.ts +1 -1
  21. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/getMiAutoSugestions.fetcher.d.ts +1 -1
  22. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/hotel-avaliability-fetcher.d.ts +1 -1
  23. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/hotel-quote-fetcher.d.ts +1 -1
  24. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/irl-quote-fetcher.d.ts +1 -1
  25. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/lounge-quote.fetcher.d.ts +1 -1
  26. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/parking-quote-fetcher.d.ts +1 -1
  27. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/rail-quote-fetcher.d.ts +1 -1
  28. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/search-airlines-fetcher.d.ts +1 -1
  29. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/search-airports-fetcher.d.ts +1 -1
  30. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/search-cities.fetcher.d.ts +1 -1
  31. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/search-conferma-cities.fetcher.d.ts +1 -1
  32. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/search-depots.fetcher.d.ts +1 -1
  33. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/search-hotel-chains.fetcher.d.ts +1 -1
  34. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/search-postcodes.fetcher.d.ts +1 -1
  35. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/search-rail-stations.fetcher.d.ts +1 -1
  36. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/search-users-can-book-for-fetcher.d.ts +1 -1
  37. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/user-addresses.fetcher.d.ts +1 -1
  38. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/user-fetcher.d.ts +1 -1
  39. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/user-message.fetcher.d.ts +1 -1
  40. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/user-products-fetcher.d.ts +1 -1
  41. package/{dist/obtservices/angular → angular}/lib/vendor/fetchers/user-ui-configs-fetcher.d.ts +1 -1
  42. package/{dist/obtservices/angular → angular}/lib/vendor/services/enterprise-basket.service.d.ts +1 -1
  43. package/{dist/obtservices/angular → angular}/lib/vendor/services/hotel-avallibility.service.d.ts +1 -1
  44. package/{dist/obtservices/angular → angular}/lib/vendor/services/http-call.service.d.ts +1 -1
  45. package/{dist/obtservices/angular → angular}/lib/vendor/services/logon.service.d.ts +1 -1
  46. package/{dist/obtservices/angular → angular}/lib/vendor/services/modal-opener.service.d.ts +1 -1
  47. package/{dist/obtservices/angular → angular}/lib/vendor/services/my-bookings.service.d.ts +1 -1
  48. package/{dist/obtservices/angular → angular}/lib/vendor/services/route-happy.service.d.ts +1 -1
  49. package/{dist/obtservices/angular → angular}/lib/vendor/services/search.service.d.ts +1 -1
  50. package/{dist/obtservices/angular → angular}/lib/vendor/services/storage.service.d.ts +1 -1
  51. package/{dist/obtservices/angular → angular}/lib/vendor/services/user.service.d.ts +1 -1
  52. package/{dist/obtservices/angular → angular}/lib/vendor/services/webtoken.service.d.ts +1 -1
  53. package/{dist/obtservices/angular → angular}/lib/vendor/testers/postcode-validate.tester.d.ts +1 -1
  54. package/{dist/obtservices/angular → angular}/lib/vendor/testers/validate-mi-free-value.tester.d.ts +1 -1
  55. package/{dist/obtservices/angular → angular}/lib/vendor/updaters/accept-new-price.updater.d.ts +1 -1
  56. package/{dist/obtservices/angular → angular}/lib/vendor/updaters/add-item-to-basket.updater.d.ts +1 -1
  57. package/{dist/obtservices/angular → angular}/lib/vendor/updaters/addUserToBasketItem.d.ts +1 -1
  58. package/{dist/obtservices/angular → angular}/lib/vendor/updaters/book-basket-updater.d.ts +1 -1
  59. package/{dist/obtservices/angular → angular}/lib/vendor/updaters/create-basket-updater.d.ts +1 -1
  60. package/{dist/obtservices/angular → angular}/lib/vendor/updaters/move-basket-item-to-basket.d.ts +1 -1
  61. package/{dist/obtservices/angular → angular}/lib/vendor/updaters/remove-basket-updater.d.ts +1 -1
  62. package/{dist/obtservices/angular → angular}/lib/vendor/updaters/remove-item-from-basket.updater.d.ts +1 -1
  63. package/{dist/obtservices/angular → angular}/lib/vendor/updaters/remove-recent-search.updater.d.ts +1 -1
  64. package/{dist/obtservices/angular → angular}/lib/vendor/updaters/remove-user-address.updater.d.ts +1 -1
  65. package/{dist/obtservices/angular → angular}/lib/vendor/updaters/revalidate-basket-updater.d.ts +1 -1
  66. package/{dist/obtservices/angular → angular}/lib/vendor/updaters/save-recent-search.updater.d.ts +1 -1
  67. package/{dist/obtservices/angular → angular}/lib/vendor/updaters/save-user-address.updater.d.ts +1 -1
  68. package/{dist/obtservices/angular → angular}/lib/vendor/updaters/send-basket-for-approval.updater.d.ts +1 -1
  69. package/{dist/obtservices/angular → angular}/lib/vendor/updaters/set-basket-item-lead-passenger.updater.d.ts +1 -1
  70. package/{dist/obtservices/angular → angular}/lib/vendor/updaters/set-basket-item-mi-group.d.ts +1 -1
  71. package/{dist/obtservices/angular → angular}/lib/vendor/updaters/set-basket-item-mi-value-updater.d.ts +1 -1
  72. package/{dist/obtservices/angular → angular}/lib/vendor/updaters/set-payment-option.updater.d.ts +1 -1
  73. package/{dist/obtservices/angular → angular}/lib/vendor/updaters/update-basket-notes-updater.d.ts +1 -1
  74. package/{dist/obtservices/angular → angular}/lib/vendor/updaters/update-basket-title-updater.d.ts +1 -1
  75. package/{dist/obtservices/angular → angular}/obtservices.module.d.ts +1 -1
  76. package/angular/package.json +11 -0
  77. package/angular/sabstravtech-obtservices-angular.metadata.json +1 -0
  78. package/base/package.json +11 -0
  79. package/{dist/obtservices/base/obtservices-base.metadata.json → base/sabstravtech-obtservices-base.metadata.json} +1 -1
  80. package/{dist/obtservices/bundles/obtservices-angular.umd.js → bundles/sabstravtech-obtservices-angular.umd.js} +11 -10
  81. package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -0
  82. package/{dist/obtservices/bundles/obtservices-angular.umd.min.js → bundles/sabstravtech-obtservices-angular.umd.min.js} +2 -2
  83. package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -0
  84. package/{dist/obtservices/bundles/obtservices-base.umd.js → bundles/sabstravtech-obtservices-base.umd.js} +3 -3
  85. package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -0
  86. package/{dist/obtservices/bundles/obtservices-base.umd.min.js → bundles/sabstravtech-obtservices-base.umd.min.js} +2 -2
  87. package/{dist/obtservices/bundles/obtservices-base.umd.min.js.map → bundles/sabstravtech-obtservices-base.umd.min.js.map} +1 -1
  88. package/{dist/obtservices/bundles/obtservices.umd.js → bundles/sabstravtech-obtservices.umd.js} +3 -3
  89. package/bundles/sabstravtech-obtservices.umd.js.map +1 -0
  90. package/bundles/sabstravtech-obtservices.umd.min.js +2 -0
  91. package/bundles/sabstravtech-obtservices.umd.min.js.map +1 -0
  92. package/{dist/obtservices/esm2015 → esm2015}/angular/components/basket-panel.js +1 -1
  93. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/classes/environment.js +2 -2
  94. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/classes/event-messenager.js +2 -2
  95. package/esm2015/angular/lib/vendor/classes/helpers.js +82 -0
  96. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/basket-fetcher.js +2 -2
  97. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/cabhire-quote-fetcher.js +2 -2
  98. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/carhire-availability-detail.fetcher.js +2 -2
  99. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/carhire-quote-fetcher.js +2 -2
  100. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/conferma-office-names.fetcher.js +2 -2
  101. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/conferma-quicklist.fetcher.js +2 -2
  102. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/eurostar-quote.fetcher.js +2 -2
  103. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/flight-quote.fetcher.js +2 -2
  104. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/get-rail-cards.fetcher.js +2 -2
  105. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/get-rail-station.fetcher.js +2 -2
  106. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/get-risk-alerts.fetcher.js +2 -2
  107. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/get-user-company-offices.fetcher.js +2 -2
  108. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.js +2 -2
  109. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/get-user-recent-searches.fetcher.js +2 -2
  110. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/get-users-baskets-fetcher.js +2 -2
  111. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/getMiAutoSugestions.fetcher.js +2 -2
  112. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/hotel-avaliability-fetcher.js +2 -2
  113. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/hotel-quote-fetcher.js +2 -2
  114. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/irl-quote-fetcher.js +2 -2
  115. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/lounge-quote.fetcher.js +2 -2
  116. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/parking-quote-fetcher.js +2 -2
  117. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/rail-quote-fetcher.js +2 -2
  118. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/search-airlines-fetcher.js +2 -2
  119. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/search-airports-fetcher.js +2 -2
  120. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/search-cities.fetcher.js +2 -2
  121. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/search-conferma-cities.fetcher.js +2 -2
  122. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/search-depots.fetcher.js +2 -2
  123. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/search-hotel-chains.fetcher.js +2 -2
  124. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/search-postcodes.fetcher.js +2 -2
  125. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/search-rail-stations.fetcher.js +2 -2
  126. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/search-users-can-book-for-fetcher.js +2 -2
  127. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/user-addresses.fetcher.js +2 -2
  128. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/user-fetcher.js +2 -2
  129. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/user-message.fetcher.js +2 -2
  130. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/user-products-fetcher.js +2 -2
  131. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/fetchers/user-ui-configs-fetcher.js +2 -2
  132. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/services/enterprise-basket.service.js +2 -2
  133. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/services/hotel-avallibility.service.js +2 -2
  134. package/esm2015/angular/lib/vendor/services/http-call.service.js +220 -0
  135. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/services/logon.service.js +2 -2
  136. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/services/modal-opener.service.js +2 -2
  137. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/services/my-bookings.service.js +2 -2
  138. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/services/route-happy.service.js +2 -2
  139. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/services/search.service.js +2 -2
  140. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/services/storage.service.js +2 -2
  141. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/services/user.service.js +2 -2
  142. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/services/webtoken.service.js +2 -2
  143. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/testers/postcode-validate.tester.js +2 -2
  144. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/testers/validate-mi-free-value.tester.js +2 -2
  145. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/updaters/accept-new-price.updater.js +2 -2
  146. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/updaters/add-item-to-basket.updater.js +2 -2
  147. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/updaters/addUserToBasketItem.js +2 -2
  148. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/updaters/book-basket-updater.js +2 -2
  149. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/updaters/create-basket-updater.js +2 -2
  150. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/updaters/move-basket-item-to-basket.js +2 -2
  151. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/updaters/remove-basket-updater.js +2 -2
  152. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/updaters/remove-item-from-basket.updater.js +2 -2
  153. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/updaters/remove-recent-search.updater.js +2 -2
  154. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/updaters/remove-user-address.updater.js +2 -2
  155. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/updaters/revalidate-basket-updater.js +2 -2
  156. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/updaters/save-recent-search.updater.js +2 -2
  157. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/updaters/save-user-address.updater.js +2 -2
  158. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/updaters/send-basket-for-approval.updater.js +2 -2
  159. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/updaters/set-basket-item-lead-passenger.updater.js +2 -2
  160. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/updaters/set-basket-item-mi-group.js +2 -2
  161. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/updaters/set-basket-item-mi-value-updater.js +2 -2
  162. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/updaters/set-payment-option.updater.js +2 -2
  163. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/updaters/update-basket-notes-updater.js +2 -2
  164. package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/updaters/update-basket-title-updater.js +2 -2
  165. package/{dist/obtservices/esm2015 → esm2015}/angular/obtservices.module.js +3 -3
  166. package/esm2015/angular/sabstravtech-obtservices-angular.js +18 -0
  167. package/esm2015/base/sabstravtech-obtservices-base.js +9 -0
  168. package/esm2015/sabstravtech-obtservices.js +5 -0
  169. package/{dist/obtservices/fesm2015/obtservices-angular.js → fesm2015/sabstravtech-obtservices-angular.js} +7 -6
  170. package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -0
  171. package/{dist/obtservices/fesm2015/obtservices-base.js → fesm2015/sabstravtech-obtservices-base.js} +1 -1
  172. package/fesm2015/sabstravtech-obtservices-base.js.map +1 -0
  173. package/{dist/obtservices/fesm2015/obtservices.js → fesm2015/sabstravtech-obtservices.js} +1 -1
  174. package/fesm2015/sabstravtech-obtservices.js.map +1 -0
  175. package/package.json +23 -84
  176. package/{dist/obtservices/obtservices.metadata.json → sabstravtech-obtservices.metadata.json} +1 -1
  177. package/.editorconfig +0 -13
  178. package/.gitmodules +0 -0
  179. package/.vscode/settings.json +0 -4
  180. package/angular.json +0 -45
  181. package/audit.config.json +0 -6
  182. package/codegen.yml +0 -18
  183. package/dist/obtservices/README.md +0 -24
  184. package/dist/obtservices/angular/obtservices-angular.metadata.json +0 -1
  185. package/dist/obtservices/angular/package.json +0 -11
  186. package/dist/obtservices/base/package.json +0 -11
  187. package/dist/obtservices/bundles/obtservices-angular.umd.js.map +0 -1
  188. package/dist/obtservices/bundles/obtservices-angular.umd.min.js.map +0 -1
  189. package/dist/obtservices/bundles/obtservices-base.umd.js.map +0 -1
  190. package/dist/obtservices/bundles/obtservices.umd.js.map +0 -1
  191. package/dist/obtservices/bundles/obtservices.umd.min.js +0 -2
  192. package/dist/obtservices/bundles/obtservices.umd.min.js.map +0 -1
  193. package/dist/obtservices/esm2015/angular/lib/vendor/classes/helpers.js +0 -81
  194. package/dist/obtservices/esm2015/angular/lib/vendor/services/http-call.service.js +0 -220
  195. package/dist/obtservices/esm2015/angular/obtservices-angular.js +0 -18
  196. package/dist/obtservices/esm2015/base/obtservices-base.js +0 -9
  197. package/dist/obtservices/esm2015/obtservices.js +0 -5
  198. package/dist/obtservices/fesm2015/obtservices-angular.js.map +0 -1
  199. package/dist/obtservices/fesm2015/obtservices-base.js.map +0 -1
  200. package/dist/obtservices/fesm2015/obtservices.js.map +0 -1
  201. package/dist/obtservices/package.json +0 -23
  202. package/ng-package.json +0 -7
  203. package/tsconfig.json +0 -36
  204. package/tslint.json +0 -62
  205. /package/{dist/obtservices/angular → angular}/classes.d.ts +0 -0
  206. /package/{dist/obtservices/angular → angular}/components/with-component.d.ts +0 -0
  207. /package/{dist/obtservices/angular → angular}/components.d.ts +0 -0
  208. /package/{dist/obtservices/angular → angular}/data.d.ts +0 -0
  209. /package/{dist/obtservices/angular → angular}/fetchers.d.ts +0 -0
  210. /package/{dist/obtservices/angular → angular}/lib/vendor/types/graphql.angular.types.d.ts +0 -0
  211. /package/{dist/obtservices/angular → angular}/public_api.d.ts +0 -0
  212. /package/{dist/obtservices/angular/obtservices-angular.d.ts → angular/sabstravtech-obtservices-angular.d.ts} +0 -0
  213. /package/{dist/obtservices/angular → angular}/services.d.ts +0 -0
  214. /package/{dist/obtservices/angular → angular}/types.d.ts +0 -0
  215. /package/{dist/obtservices/angular → angular}/updaters.d.ts +0 -0
  216. /package/{dist/obtservices/base → base}/classes.d.ts +0 -0
  217. /package/{dist/obtservices/base → base}/fetchers.d.ts +0 -0
  218. /package/{dist/obtservices/base → base}/interfaces.d.ts +0 -0
  219. /package/{dist/obtservices/base → base}/lib/vendor/classes/base-enterprise.d.ts +0 -0
  220. /package/{dist/obtservices/base → base}/lib/vendor/classes/base-network-call.d.ts +0 -0
  221. /package/{dist/obtservices/base → base}/lib/vendor/classes/basket-info-mi-details.impl.d.ts +0 -0
  222. /package/{dist/obtservices/base → base}/lib/vendor/classes/bookable-basket.d.ts +0 -0
  223. /package/{dist/obtservices/base → base}/lib/vendor/classes/cabhire-enterprise-search.d.ts +0 -0
  224. /package/{dist/obtservices/base → base}/lib/vendor/classes/carhire-enterprise-search.d.ts +0 -0
  225. /package/{dist/obtservices/base → base}/lib/vendor/classes/enviroment.d.ts +0 -0
  226. /package/{dist/obtservices/base → base}/lib/vendor/classes/eurostar-enterprise-search.d.ts +0 -0
  227. /package/{dist/obtservices/base → base}/lib/vendor/classes/eurostar-search-type.enum.d.ts +0 -0
  228. /package/{dist/obtservices/base → base}/lib/vendor/classes/event-messenager.d.ts +0 -0
  229. /package/{dist/obtservices/base → base}/lib/vendor/classes/flight-enterprise-search.d.ts +0 -0
  230. /package/{dist/obtservices/base → base}/lib/vendor/classes/flight-search-type.enum.d.ts +0 -0
  231. /package/{dist/obtservices/base → base}/lib/vendor/classes/helpers.d.ts +0 -0
  232. /package/{dist/obtservices/base → base}/lib/vendor/classes/hotel-enterprise-search.d.ts +0 -0
  233. /package/{dist/obtservices/base → base}/lib/vendor/classes/irl-enterprise-search.d.ts +0 -0
  234. /package/{dist/obtservices/base → base}/lib/vendor/classes/limited-cache.class.d.ts +0 -0
  235. /package/{dist/obtservices/base → base}/lib/vendor/classes/lounges-enterprise-search.d.ts +0 -0
  236. /package/{dist/obtservices/base → base}/lib/vendor/classes/management-info-and-valid.d.ts +0 -0
  237. /package/{dist/obtservices/base → base}/lib/vendor/classes/modal-types.enum.d.ts +0 -0
  238. /package/{dist/obtservices/base → base}/lib/vendor/classes/parking-enterprise-search.d.ts +0 -0
  239. /package/{dist/obtservices/base → base}/lib/vendor/classes/rail-direction.enum.d.ts +0 -0
  240. /package/{dist/obtservices/base → base}/lib/vendor/classes/rail-enterprise-search.d.ts +0 -0
  241. /package/{dist/obtservices/base → base}/lib/vendor/classes/routehappy-request.d.ts +0 -0
  242. /package/{dist/obtservices/base → base}/lib/vendor/classes/routehappy-response.d.ts +0 -0
  243. /package/{dist/obtservices/base → base}/lib/vendor/classes/supplementary-booking-info-impl.d.ts +0 -0
  244. /package/{dist/obtservices/base → base}/lib/vendor/classes/user-favourite.enum.d.ts +0 -0
  245. /package/{dist/obtservices/base → base}/lib/vendor/classes/validator.checker.d.ts +0 -0
  246. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/basket-fetcher.d.ts +0 -0
  247. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/cabhire-quote-fetcher.d.ts +0 -0
  248. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/carhire-availability-detail.fetcher.d.ts +0 -0
  249. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/carhire-quote-fetcher.d.ts +0 -0
  250. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/conferma-office-names.fetcher.d.ts +0 -0
  251. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/conferma-quicklist.fetcher.d.ts +0 -0
  252. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/eurostar-quote.fetcher.d.ts +0 -0
  253. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/flight-quote.fetcher.d.ts +0 -0
  254. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/get-rail-cards.fetcher.d.ts +0 -0
  255. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/get-rail-station.fetcher.d.ts +0 -0
  256. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/get-risk-alerts.fetcher.d.ts +0 -0
  257. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/get-user-company-offices.fetcher.d.ts +0 -0
  258. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.d.ts +0 -0
  259. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/get-user-recent-searches.fetcher.d.ts +0 -0
  260. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/get-users-baskets-fetcher.d.ts +0 -0
  261. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/getMiAutoSugestions.fetcher.d.ts +0 -0
  262. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/hotel-avaliability-fetcher.d.ts +0 -0
  263. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/hotel-quote-fetcher.d.ts +0 -0
  264. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/irl-quote-fetcher.d.ts +0 -0
  265. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/list-fetchable-enterprise.d.ts +0 -0
  266. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/lounge-quote.fetcher.d.ts +0 -0
  267. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/object-fetchable-enterprise.d.ts +0 -0
  268. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/parking-quote-fetcher.d.ts +0 -0
  269. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/rail-quote-fetcher.d.ts +0 -0
  270. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/search-airlines.fetcher.d.ts +0 -0
  271. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/search-airports-fetcher.d.ts +0 -0
  272. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/search-cities.fetcher.d.ts +0 -0
  273. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/search-conferma-cities.fetcher.d.ts +0 -0
  274. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/search-depots.fetcher.d.ts +0 -0
  275. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/search-hotel-chains.fetcher.d.ts +0 -0
  276. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/search-postcodes.fetcher.d.ts +0 -0
  277. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/search-rail-stations.fetcher.d.ts +0 -0
  278. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/search-users-can-book-for-fetcher.d.ts +0 -0
  279. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/user-addresses.fetcher.d.ts +0 -0
  280. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/user-fetcher.d.ts +0 -0
  281. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/user-message.fetcher.d.ts +0 -0
  282. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/user-products-fetcher.d.ts +0 -0
  283. /package/{dist/obtservices/base → base}/lib/vendor/fetchers/user-ui-configs-fetcher.d.ts +0 -0
  284. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +0 -0
  285. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +0 -0
  286. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +0 -0
  287. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +0 -0
  288. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +0 -0
  289. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +0 -0
  290. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +0 -0
  291. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +0 -0
  292. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/Imybookings.service.d.ts +0 -0
  293. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +0 -0
  294. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/Irail-enterprise-search.d.ts +0 -0
  295. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/Isearch.service.d.ts +0 -0
  296. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/Isupplementary-booking-info-impl.d.ts +0 -0
  297. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/Iuser.service.d.ts +0 -0
  298. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/car-hire-classes.interface.d.ts +0 -0
  299. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/car-hire-filters.interface.d.ts +0 -0
  300. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/car-hire-sort.interface.d.ts +0 -0
  301. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/cheapest-price.d.ts +0 -0
  302. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/code-name.d.ts +0 -0
  303. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/flight-filters.interface.d.ts +0 -0
  304. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/flight-multi-destination.interface.d.ts +0 -0
  305. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/rail-airport-express-stations.interface.d.ts +0 -0
  306. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/rail-basket-item.interface.d.ts +0 -0
  307. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/rail-journey-leg.interface.d.ts +0 -0
  308. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/rail-recent-search-args.interface.d.ts +0 -0
  309. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/rail-selected-ticket.interface.d.ts +0 -0
  310. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/rail-ticket-group.interface.d.ts +0 -0
  311. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/rail-ticket-groups.interface.d.ts +0 -0
  312. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/search-objects.interface.d.ts +0 -0
  313. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/select-filter.interface.d.ts +0 -0
  314. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/user.data.d.ts +0 -0
  315. /package/{dist/obtservices/base → base}/lib/vendor/interfaces/value-display.d.ts +0 -0
  316. /package/{dist/obtservices/base → base}/lib/vendor/models/login.model.d.ts +0 -0
  317. /package/{dist/obtservices/base → base}/lib/vendor/models/regexp.model.d.ts +0 -0
  318. /package/{dist/obtservices/base → base}/lib/vendor/models/traveller.object.d.ts +0 -0
  319. /package/{dist/obtservices/base → base}/lib/vendor/services/enterprise-basket.service.d.ts +0 -0
  320. /package/{dist/obtservices/base → base}/lib/vendor/services/hotel-avallibility.service.d.ts +0 -0
  321. /package/{dist/obtservices/base → base}/lib/vendor/services/http-call.service.d.ts +0 -0
  322. /package/{dist/obtservices/base → base}/lib/vendor/services/logon.service.d.ts +0 -0
  323. /package/{dist/obtservices/base → base}/lib/vendor/services/modal-opener.service.d.ts +0 -0
  324. /package/{dist/obtservices/base → base}/lib/vendor/services/my-bookings.service.d.ts +0 -0
  325. /package/{dist/obtservices/base → base}/lib/vendor/services/routehappy.service.d.ts +0 -0
  326. /package/{dist/obtservices/base → base}/lib/vendor/services/search.service.d.ts +0 -0
  327. /package/{dist/obtservices/base → base}/lib/vendor/services/storage.service.d.ts +0 -0
  328. /package/{dist/obtservices/base → base}/lib/vendor/services/url.service.d.ts +0 -0
  329. /package/{dist/obtservices/base → base}/lib/vendor/services/user.service.d.ts +0 -0
  330. /package/{dist/obtservices/base → base}/lib/vendor/services/webtoken.service.d.ts +0 -0
  331. /package/{dist/obtservices/base → base}/lib/vendor/testers/base.tester.d.ts +0 -0
  332. /package/{dist/obtservices/base → base}/lib/vendor/testers/postcode-validate.tester.d.ts +0 -0
  333. /package/{dist/obtservices/base → base}/lib/vendor/testers/validate-mi-free-value.tester.d.ts +0 -0
  334. /package/{dist/obtservices/base → base}/lib/vendor/types/graphql.types.d.ts +0 -0
  335. /package/{dist/obtservices/base → base}/lib/vendor/types/types.d.ts +0 -0
  336. /package/{dist/obtservices/base → base}/lib/vendor/updaters/accept-new-price.updater.d.ts +0 -0
  337. /package/{dist/obtservices/base → base}/lib/vendor/updaters/add-item-to-basket.updater.d.ts +0 -0
  338. /package/{dist/obtservices/base → base}/lib/vendor/updaters/addUserToBasketItem.d.ts +0 -0
  339. /package/{dist/obtservices/base → base}/lib/vendor/updaters/book-basket-updater.d.ts +0 -0
  340. /package/{dist/obtservices/base → base}/lib/vendor/updaters/create-basket-updater.d.ts +0 -0
  341. /package/{dist/obtservices/base → base}/lib/vendor/updaters/move-basket-item-to-basket.d.ts +0 -0
  342. /package/{dist/obtservices/base → base}/lib/vendor/updaters/object-updater-enterprise.d.ts +0 -0
  343. /package/{dist/obtservices/base → base}/lib/vendor/updaters/remove-basket-updater.d.ts +0 -0
  344. /package/{dist/obtservices/base → base}/lib/vendor/updaters/remove-item-from-basket.updater.d.ts +0 -0
  345. /package/{dist/obtservices/base → base}/lib/vendor/updaters/remove-recent-search-updater.d.ts +0 -0
  346. /package/{dist/obtservices/base → base}/lib/vendor/updaters/remove-user-address-updater.d.ts +0 -0
  347. /package/{dist/obtservices/base → base}/lib/vendor/updaters/revalidate-basket-updater.d.ts +0 -0
  348. /package/{dist/obtservices/base → base}/lib/vendor/updaters/save-recent-search-updater.d.ts +0 -0
  349. /package/{dist/obtservices/base → base}/lib/vendor/updaters/save-user-address.updater.d.ts +0 -0
  350. /package/{dist/obtservices/base → base}/lib/vendor/updaters/send-basket-for-approval.updater.d.ts +0 -0
  351. /package/{dist/obtservices/base → base}/lib/vendor/updaters/set-basket-item-lead-passenger.updater.d.ts +0 -0
  352. /package/{dist/obtservices/base → base}/lib/vendor/updaters/set-basket-item-mi-group.d.ts +0 -0
  353. /package/{dist/obtservices/base → base}/lib/vendor/updaters/set-basket-item-mi-value-updater.d.ts +0 -0
  354. /package/{dist/obtservices/base → base}/lib/vendor/updaters/set-basket-item-paymenr-option.updater.d.ts +0 -0
  355. /package/{dist/obtservices/base → base}/lib/vendor/updaters/update-basket-notes-updater.d.ts +0 -0
  356. /package/{dist/obtservices/base → base}/lib/vendor/updaters/update-basket-title-updater.d.ts +0 -0
  357. /package/{dist/obtservices/base → base}/models.d.ts +0 -0
  358. /package/{dist/obtservices/base → base}/public_api.d.ts +0 -0
  359. /package/{dist/obtservices/base/obtservices-base.d.ts → base/sabstravtech-obtservices-base.d.ts} +0 -0
  360. /package/{dist/obtservices/base → base}/services.d.ts +0 -0
  361. /package/{dist/obtservices/base → base}/testers.d.ts +0 -0
  362. /package/{dist/obtservices/base → base}/types.d.ts +0 -0
  363. /package/{dist/obtservices/base → base}/updaters.d.ts +0 -0
  364. /package/{dist/obtservices/esm2015 → esm2015}/angular/classes.js +0 -0
  365. /package/{dist/obtservices/esm2015 → esm2015}/angular/components/with-component.js +0 -0
  366. /package/{dist/obtservices/esm2015 → esm2015}/angular/components.js +0 -0
  367. /package/{dist/obtservices/esm2015 → esm2015}/angular/data.js +0 -0
  368. /package/{dist/obtservices/esm2015 → esm2015}/angular/fetchers.js +0 -0
  369. /package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/data/airports.data.json +0 -0
  370. /package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/data/flight-booking.data.json +0 -0
  371. /package/{dist/obtservices/esm2015 → esm2015}/angular/lib/vendor/types/graphql.angular.types.js +0 -0
  372. /package/{dist/obtservices/esm2015 → esm2015}/angular/public_api.js +0 -0
  373. /package/{dist/obtservices/esm2015 → esm2015}/angular/services.js +0 -0
  374. /package/{dist/obtservices/esm2015 → esm2015}/angular/types.js +0 -0
  375. /package/{dist/obtservices/esm2015 → esm2015}/angular/updaters.js +0 -0
  376. /package/{dist/obtservices/esm2015 → esm2015}/base/classes.js +0 -0
  377. /package/{dist/obtservices/esm2015 → esm2015}/base/fetchers.js +0 -0
  378. /package/{dist/obtservices/esm2015 → esm2015}/base/interfaces.js +0 -0
  379. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/base-enterprise.js +0 -0
  380. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/base-network-call.js +0 -0
  381. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/basket-info-mi-details.impl.js +0 -0
  382. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/bookable-basket.js +0 -0
  383. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/cabhire-enterprise-search.js +0 -0
  384. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/carhire-enterprise-search.js +0 -0
  385. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/enviroment.js +0 -0
  386. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/eurostar-enterprise-search.js +0 -0
  387. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/eurostar-search-type.enum.js +0 -0
  388. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/event-messenager.js +0 -0
  389. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/flight-enterprise-search.js +0 -0
  390. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/flight-search-type.enum.js +0 -0
  391. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/helpers.js +0 -0
  392. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/hotel-enterprise-search.js +0 -0
  393. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/irl-enterprise-search.js +0 -0
  394. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/limited-cache.class.js +0 -0
  395. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/lounges-enterprise-search.js +0 -0
  396. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/management-info-and-valid.js +0 -0
  397. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/modal-types.enum.js +0 -0
  398. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/parking-enterprise-search.js +0 -0
  399. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/rail-direction.enum.js +0 -0
  400. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/rail-enterprise-search.js +0 -0
  401. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/routehappy-request.js +0 -0
  402. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/routehappy-response.js +0 -0
  403. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/supplementary-booking-info-impl.js +0 -0
  404. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/user-favourite.enum.js +0 -0
  405. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/classes/validator.checker.js +0 -0
  406. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/data/countries.json +0 -0
  407. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/data/euro-stations.json +0 -0
  408. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/basket-fetcher.js +0 -0
  409. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/cabhire-quote-fetcher.js +0 -0
  410. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/carhire-availability-detail.fetcher.js +0 -0
  411. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/carhire-quote-fetcher.js +0 -0
  412. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/conferma-office-names.fetcher.js +0 -0
  413. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/conferma-quicklist.fetcher.js +0 -0
  414. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/eurostar-quote.fetcher.js +0 -0
  415. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/flight-quote.fetcher.js +0 -0
  416. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/get-rail-cards.fetcher.js +0 -0
  417. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/get-rail-station.fetcher.js +0 -0
  418. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/get-risk-alerts.fetcher.js +0 -0
  419. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/get-user-company-offices.fetcher.js +0 -0
  420. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.js +0 -0
  421. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/get-user-recent-searches.fetcher.js +0 -0
  422. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/get-users-baskets-fetcher.js +0 -0
  423. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/getMiAutoSugestions.fetcher.js +0 -0
  424. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/hotel-avaliability-fetcher.js +0 -0
  425. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/hotel-quote-fetcher.js +0 -0
  426. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/irl-quote-fetcher.js +0 -0
  427. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/list-fetchable-enterprise.js +0 -0
  428. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/lounge-quote.fetcher.js +0 -0
  429. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/object-fetchable-enterprise.js +0 -0
  430. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/parking-quote-fetcher.js +0 -0
  431. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/rail-quote-fetcher.js +0 -0
  432. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/search-airlines.fetcher.js +0 -0
  433. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/search-airports-fetcher.js +0 -0
  434. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/search-cities.fetcher.js +0 -0
  435. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/search-conferma-cities.fetcher.js +0 -0
  436. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/search-depots.fetcher.js +0 -0
  437. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/search-hotel-chains.fetcher.js +0 -0
  438. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/search-postcodes.fetcher.js +0 -0
  439. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/search-rail-stations.fetcher.js +0 -0
  440. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.js +0 -0
  441. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/user-addresses.fetcher.js +0 -0
  442. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/user-fetcher.js +0 -0
  443. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/user-message.fetcher.js +0 -0
  444. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/user-products-fetcher.js +0 -0
  445. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/fetchers/user-ui-configs-fetcher.js +0 -0
  446. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +0 -0
  447. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +0 -0
  448. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/Ienterprise-basket.service.js +0 -0
  449. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +0 -0
  450. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/Iflight-enterprise-search.js +0 -0
  451. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +0 -0
  452. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/Iirl-enterprise-search.js +0 -0
  453. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/Ilounges-enterprise-search.js +0 -0
  454. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/Imybookings.service.js +0 -0
  455. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/Iparking-enterprise-search.js +0 -0
  456. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/Irail-enterprise-search.js +0 -0
  457. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/Isearch.service.js +0 -0
  458. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.js +0 -0
  459. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/Iuser.service.js +0 -0
  460. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/car-hire-classes.interface.js +0 -0
  461. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/car-hire-filters.interface.js +0 -0
  462. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/car-hire-sort.interface.js +0 -0
  463. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/cheapest-price.js +0 -0
  464. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/code-name.js +0 -0
  465. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/flight-filters.interface.js +0 -0
  466. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/flight-multi-destination.interface.js +0 -0
  467. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/rail-airport-express-stations.interface.js +0 -0
  468. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/rail-basket-item.interface.js +0 -0
  469. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/rail-journey-leg.interface.js +0 -0
  470. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/rail-recent-search-args.interface.js +0 -0
  471. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/rail-selected-ticket.interface.js +0 -0
  472. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/rail-ticket-group.interface.js +0 -0
  473. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/rail-ticket-groups.interface.js +0 -0
  474. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/search-objects.interface.js +0 -0
  475. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/select-filter.interface.js +0 -0
  476. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/user.data.js +0 -0
  477. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/interfaces/value-display.js +0 -0
  478. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/models/login.model.js +0 -0
  479. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/models/regexp.model.js +0 -0
  480. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/models/traveller.object.js +0 -0
  481. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/services/enterprise-basket.service.js +0 -0
  482. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/services/hotel-avallibility.service.js +0 -0
  483. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/services/http-call.service.js +0 -0
  484. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/services/logon.service.js +0 -0
  485. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/services/modal-opener.service.js +0 -0
  486. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/services/my-bookings.service.js +0 -0
  487. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/services/routehappy.service.js +0 -0
  488. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/services/search.service.js +0 -0
  489. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/services/storage.service.js +0 -0
  490. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/services/url.service.js +0 -0
  491. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/services/user.service.js +0 -0
  492. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/services/webtoken.service.js +0 -0
  493. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/testers/base.tester.js +0 -0
  494. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/testers/postcode-validate.tester.js +0 -0
  495. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/testers/validate-mi-free-value.tester.js +0 -0
  496. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/types/graphql.types.js +0 -0
  497. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/types/types.js +0 -0
  498. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/updaters/accept-new-price.updater.js +0 -0
  499. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/updaters/add-item-to-basket.updater.js +0 -0
  500. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/updaters/addUserToBasketItem.js +0 -0
  501. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/updaters/book-basket-updater.js +0 -0
  502. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/updaters/create-basket-updater.js +0 -0
  503. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/updaters/move-basket-item-to-basket.js +0 -0
  504. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/updaters/object-updater-enterprise.js +0 -0
  505. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/updaters/remove-basket-updater.js +0 -0
  506. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/updaters/remove-item-from-basket.updater.js +0 -0
  507. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/updaters/remove-recent-search-updater.js +0 -0
  508. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/updaters/remove-user-address-updater.js +0 -0
  509. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/updaters/revalidate-basket-updater.js +0 -0
  510. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/updaters/save-recent-search-updater.js +0 -0
  511. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/updaters/save-user-address.updater.js +0 -0
  512. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/updaters/send-basket-for-approval.updater.js +0 -0
  513. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/updaters/set-basket-item-lead-passenger.updater.js +0 -0
  514. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/updaters/set-basket-item-mi-group.js +0 -0
  515. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/updaters/set-basket-item-mi-value-updater.js +0 -0
  516. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/updaters/set-basket-item-paymenr-option.updater.js +0 -0
  517. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/updaters/update-basket-notes-updater.js +0 -0
  518. /package/{dist/obtservices/esm2015 → esm2015}/base/lib/vendor/updaters/update-basket-title-updater.js +0 -0
  519. /package/{dist/obtservices/esm2015 → esm2015}/base/models.js +0 -0
  520. /package/{dist/obtservices/esm2015 → esm2015}/base/public_api.js +0 -0
  521. /package/{dist/obtservices/esm2015 → esm2015}/base/services.js +0 -0
  522. /package/{dist/obtservices/esm2015 → esm2015}/base/testers.js +0 -0
  523. /package/{dist/obtservices/esm2015 → esm2015}/base/types.js +0 -0
  524. /package/{dist/obtservices/esm2015 → esm2015}/base/updaters.js +0 -0
  525. /package/{dist/obtservices/esm2015 → esm2015}/public_api.js +0 -0
  526. /package/{dist/obtservices/public_api.d.ts → public_api.d.ts} +0 -0
  527. /package/{dist/obtservices/obtservices.d.ts → sabstravtech-obtservices.d.ts} +0 -0
  528. /package/{dist/obtservices/tsconfig.lib.tsbuildinfo → tsconfig.lib.tsbuildinfo} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sabstravtech-obtservices-base.js","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","../../../projects/obtservices/base/src/lib/vendor/classes/validator.checker.ts","../../../projects/obtservices/base/src/lib/vendor/types/graphql.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/types/types.ts","../../../projects/obtservices/base/src/lib/vendor/classes/bookable-basket.ts","../../../projects/obtservices/base/src/lib/vendor/interfaces/Icabhire-enterprise-search.ts","../../../projects/obtservices/base/src/lib/vendor/classes/cabhire-enterprise-search.ts","../../../projects/obtservices/base/src/lib/vendor/classes/carhire-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/flight-search-type.enum.ts","../../../projects/obtservices/base/src/lib/vendor/classes/flight-enterprise-search.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/parking-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/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/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/search.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","../../../projects/obtservices/base/src/sabstravtech-obtservices-base.ts"],"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","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","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 { 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 {\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 } 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 { 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 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","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","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","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","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","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","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 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 { 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","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","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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {FetchableList as ɵd} from './lib/vendor/fetchers/list-fetchable-enterprise';\nexport {FetchableObject as ɵe} from './lib/vendor/fetchers/object-fetchable-enterprise';\nexport {BaseTester as ɵg} from './lib/vendor/testers/base.tester';\nexport {BasketItem as ɵa,ManagementInfo as ɵb,User as ɵc} from './lib/vendor/types/graphql.types';\nexport {UpdateableObject as ɵf} from './lib/vendor/updaters/object-updater-enterprise';"],"names":["_.cloneDeep"],"mappings":"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,YAAY;IACtB,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,2BAA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I,IAAI;YAAE,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,MAAM;YAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}