@qite/tide-booking-component 1.1.3 → 1.2.0

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 (63) hide show
  1. package/build/build-cjs/booking-product/components/multi-range-filter.d.ts +12 -0
  2. package/build/build-cjs/booking-wizard/features/booking/api.d.ts +4 -1
  3. package/build/build-cjs/booking-wizard/features/booking/booking-slice.d.ts +7 -3
  4. package/build/build-cjs/booking-wizard/features/booking/selectors.d.ts +23 -17
  5. package/build/build-cjs/booking-wizard/features/flight-options/flight-filter.d.ts +9 -0
  6. package/build/build-cjs/booking-wizard/features/flight-options/flight-option-flight.d.ts +8 -0
  7. package/build/build-cjs/booking-wizard/features/flight-options/flight-option-modal.d.ts +3 -0
  8. package/build/build-cjs/booking-wizard/features/flight-options/flight-option.d.ts +4 -9
  9. package/build/build-cjs/booking-wizard/features/flight-options/flight-utils.d.ts +6 -0
  10. package/build/build-cjs/booking-wizard/features/room-options/room-utils.d.ts +9 -0
  11. package/build/build-cjs/booking-wizard/features/room-options/room.d.ts +12 -0
  12. package/build/build-cjs/booking-wizard/features/room-options/traveler-rooms.d.ts +9 -0
  13. package/build/build-cjs/booking-wizard/types.d.ts +101 -0
  14. package/build/build-cjs/index.js +1563 -606
  15. package/build/build-cjs/shared/utils/localization-util.d.ts +30 -2
  16. package/build/build-esm/booking-product/components/multi-range-filter.d.ts +12 -0
  17. package/build/build-esm/booking-wizard/features/booking/api.d.ts +4 -1
  18. package/build/build-esm/booking-wizard/features/booking/booking-slice.d.ts +7 -3
  19. package/build/build-esm/booking-wizard/features/booking/selectors.d.ts +23 -17
  20. package/build/build-esm/booking-wizard/features/flight-options/flight-filter.d.ts +9 -0
  21. package/build/build-esm/booking-wizard/features/flight-options/flight-option-flight.d.ts +8 -0
  22. package/build/build-esm/booking-wizard/features/flight-options/flight-option-modal.d.ts +3 -0
  23. package/build/build-esm/booking-wizard/features/flight-options/flight-option.d.ts +4 -9
  24. package/build/build-esm/booking-wizard/features/flight-options/flight-utils.d.ts +6 -0
  25. package/build/build-esm/booking-wizard/features/room-options/room-utils.d.ts +9 -0
  26. package/build/build-esm/booking-wizard/features/room-options/room.d.ts +12 -0
  27. package/build/build-esm/booking-wizard/features/room-options/traveler-rooms.d.ts +9 -0
  28. package/build/build-esm/booking-wizard/types.d.ts +101 -0
  29. package/build/build-esm/index.js +1564 -607
  30. package/build/build-esm/shared/utils/localization-util.d.ts +30 -2
  31. package/package.json +3 -3
  32. package/rollup.config.js +23 -23
  33. package/src/booking-product/components/multi-range-filter.css +115 -0
  34. package/src/booking-product/components/multi-range-filter.tsx +114 -0
  35. package/src/booking-wizard/components/labeled-input.tsx +64 -64
  36. package/src/booking-wizard/components/labeled-select.tsx +69 -69
  37. package/src/booking-wizard/components/step-indicator.tsx +3 -3
  38. package/src/booking-wizard/features/booking/api.ts +12 -1
  39. package/src/booking-wizard/features/booking/booking-self-contained.tsx +50 -20
  40. package/src/booking-wizard/features/booking/booking-slice.ts +45 -9
  41. package/src/booking-wizard/features/booking/booking.tsx +67 -56
  42. package/src/booking-wizard/features/booking/selectors.ts +38 -11
  43. package/src/booking-wizard/features/flight-options/flight-filter.tsx +343 -0
  44. package/src/booking-wizard/features/flight-options/flight-option-flight.tsx +350 -0
  45. package/src/booking-wizard/features/flight-options/flight-option.tsx +30 -759
  46. package/src/booking-wizard/features/flight-options/flight-utils.ts +401 -0
  47. package/src/booking-wizard/features/flight-options/index.tsx +55 -368
  48. package/src/booking-wizard/features/price-details/util.ts +6 -6
  49. package/src/booking-wizard/features/product-options/option-room.tsx +3 -5
  50. package/src/booking-wizard/features/product-options/options-form.tsx +46 -54
  51. package/src/booking-wizard/features/room-options/index.tsx +48 -144
  52. package/src/booking-wizard/features/room-options/room-utils.ts +143 -0
  53. package/src/booking-wizard/features/room-options/room.tsx +124 -0
  54. package/src/booking-wizard/features/room-options/traveler-rooms.tsx +63 -0
  55. package/src/booking-wizard/features/sidebar/sidebar-util.ts +2 -2
  56. package/src/booking-wizard/features/summary/summary.tsx +2 -2
  57. package/src/booking-wizard/features/travelers-form/travelers-form.tsx +1 -1
  58. package/src/booking-wizard/types.ts +116 -0
  59. package/src/shared/components/rating.tsx +21 -21
  60. package/src/shared/translations/fr-BE.json +222 -192
  61. package/src/shared/translations/nl-BE.json +222 -192
  62. package/src/shared/utils/class-util.ts +9 -9
  63. package/tsconfig.json +24 -24
@@ -60,8 +60,8 @@ function __awaiter$1(thisArg, _arguments, P, generator) {
60
60
  }
61
61
 
62
62
  function __generator$1(thisArg, body) {
63
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
64
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
63
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
64
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
65
65
  function verb(n) { return function (v) { return step([n, v]); }; }
66
66
  function step(op) {
67
67
  if (f) throw new TypeError("Generator is already executing.");
@@ -121,10 +121,33 @@ var INPUT$1 = {
121
121
  };
122
122
  var FLIGHTS_FORM$1 = {
123
123
  OUTWARD_FLIGHTS: "",
124
+ OUTWARD_FLIGHT: "",
124
125
  RETURN_FLIGHTS: "",
126
+ RETURN_FLIGHT: "",
125
127
  DIRECT_FLIGHT: "",
128
+ STOP: "",
129
+ STOPS: "",
126
130
  FLIGHT_STOPS: "",
127
- DIFFERENT_OPTION_WARNING: ""
131
+ DIFFERENT_OPTION_WARNING: "",
132
+ FILTER_OPTIONS: "",
133
+ AIRLINES: "",
134
+ AIRPORTS: "",
135
+ NUMBER_OF_STOPS: "",
136
+ FLIGHT_OUTWARD: "",
137
+ DEPARTURE_TIME: "",
138
+ TRAVEL_DURATION: "",
139
+ CHANGE_TIME: "",
140
+ FLIGHT_RETURN: "",
141
+ NO_FLIGHTS_FOUND: "",
142
+ STARTING: "",
143
+ LOWEST_PRICE: "",
144
+ CHOOSE_YOUR_CLASS: "",
145
+ PLUS_ONE_DAY: "",
146
+ STOP_TIME: "",
147
+ NIGHT_DEPARTURE: "",
148
+ MORNING_DEPARTURE: "",
149
+ AFTERNOON_DEPARTURE: "",
150
+ EVENING_DEPARTURE: ""
128
151
  };
129
152
  var PRODUCT$1 = {
130
153
  STAY_INCLUDED: "",
@@ -157,7 +180,9 @@ var SHARED$1 = {
157
180
  ROOMS: "Chambres",
158
181
  TOTAL_PRICE: "Prix total",
159
182
  ADULTS: "Adultes",
160
- CHILDREN: "Enfants"
183
+ CHILDREN: "Enfants",
184
+ SELECT: "Selecteer",
185
+ SELECTED: "Geselecteerd"
161
186
  };
162
187
  var SIDEBAR$1 = {
163
188
  OVERVIEW: "Aperçu",
@@ -239,6 +264,11 @@ var TRAVELERS_FORM$1 = {
239
264
  AGENT_IS_REQUIRED: "Agent de voyage est requis"
240
265
  }
241
266
  };
267
+ var ROOM_OPTIONS_FORM$1 = {
268
+ TRAVELER_GROUP: "",
269
+ ALTERNATIVES_TRAVELER_GROUP: "",
270
+ SHOW_ALTERNATIVES: ""
271
+ };
242
272
  var OPTIONS_FORM$1 = {
243
273
  NO_OPTIONS_TITLE: "Aucune option",
244
274
  NO_OPTIONS_MESSAGE: "Ce voyage n'a pas d'options supplémentaires.",
@@ -301,6 +331,7 @@ var frJson = {
301
331
  SHARED: SHARED$1,
302
332
  SIDEBAR: SIDEBAR$1,
303
333
  TRAVELERS_FORM: TRAVELERS_FORM$1,
334
+ ROOM_OPTIONS_FORM: ROOM_OPTIONS_FORM$1,
304
335
  OPTIONS_FORM: OPTIONS_FORM$1,
305
336
  SUMMARY: SUMMARY$1,
306
337
  CONFIRMATION: CONFIRMATION$1,
@@ -326,10 +357,33 @@ var INPUT = {
326
357
  };
327
358
  var FLIGHTS_FORM = {
328
359
  OUTWARD_FLIGHTS: "Heenvluchten",
360
+ OUTWARD_FLIGHT: "Heenvlucht",
329
361
  RETURN_FLIGHTS: "Retourvluchten",
362
+ RETURN_FLIGHT: "Retourvlucht",
330
363
  DIRECT_FLIGHT: "Directe vlucht",
364
+ STOP: "stop",
365
+ STOPS: "stops",
331
366
  FLIGHT_STOPS: "tussenstop(s)",
332
- DIFFERENT_OPTION_WARNING: "Opgelet: Met deze vlucht veranderd de verblijfsduur."
367
+ DIFFERENT_OPTION_WARNING: "Opgelet: Met deze vlucht veranderd de verblijfsduur.",
368
+ FILTER_OPTIONS: "Filter opties",
369
+ AIRLINES: "Luchtvaartmaatschappijen",
370
+ AIRPORTS: "Luchthavens",
371
+ NUMBER_OF_STOPS: "Aantal stops",
372
+ FLIGHT_OUTWARD: "Vlucht heenrijs",
373
+ DEPARTURE_TIME: "Vertrektijd",
374
+ TRAVEL_DURATION: "Reisduur",
375
+ CHANGE_TIME: "Overstaptijd",
376
+ FLIGHT_RETURN: "Vlucht terugreis",
377
+ NO_FLIGHTS_FOUND: "Geen vluchten gevonden.",
378
+ STARTING: "Vanaf",
379
+ LOWEST_PRICE: "Laagste prijs",
380
+ CHOOSE_YOUR_CLASS: "Kies uw klasse:",
381
+ PLUS_ONE_DAY: "+1 dag",
382
+ STOP_TIME: "Stoptijd",
383
+ NIGHT_DEPARTURE: "Nacht (00:00 - 05:00)",
384
+ MORNING_DEPARTURE: "Ochtend (05:00 - 12:00)",
385
+ AFTERNOON_DEPARTURE: "Namiddag (12:00 - 18:00)",
386
+ EVENING_DEPARTURE: "Avond (18:00 - 00:00)"
333
387
  };
334
388
  var PRODUCT = {
335
389
  STAY_INCLUDED: "Inclusief verblijf",
@@ -362,7 +416,9 @@ var SHARED = {
362
416
  ROOMS: "Kamers",
363
417
  TOTAL_PRICE: "Totale prijs",
364
418
  ADULTS: "Volwassenen",
365
- CHILDREN: "Kinderen"
419
+ CHILDREN: "Kinderen",
420
+ SELECT: "Selecteer",
421
+ SELECTED: "Geselecteerd"
366
422
  };
367
423
  var SIDEBAR = {
368
424
  OVERVIEW: "Overzicht",
@@ -458,6 +514,11 @@ var OPTIONS_FORM = {
458
514
  PER_UNIT_TITLE: "Opties per gezelschap selecteren",
459
515
  NONE: "Geen"
460
516
  };
517
+ var ROOM_OPTIONS_FORM = {
518
+ TRAVELER_GROUP: "Reisgezelschap",
519
+ ALTERNATIVES_TRAVELER_GROUP: "Alternatieve kameropties voor reisgezelschap",
520
+ SHOW_ALTERNATIVES: "Toon alternatieve kameropties"
521
+ };
461
522
  var SUMMARY = {
462
523
  PERSONAL_DETAILS: "Persoonlijke gegevens",
463
524
  TRAVELERS: "reizigers",
@@ -507,6 +568,7 @@ var nlJson = {
507
568
  SIDEBAR: SIDEBAR,
508
569
  TRAVELERS_FORM: TRAVELERS_FORM,
509
570
  OPTIONS_FORM: OPTIONS_FORM,
571
+ ROOM_OPTIONS_FORM: ROOM_OPTIONS_FORM,
510
572
  SUMMARY: SUMMARY,
511
573
  CONFIRMATION: CONFIRMATION,
512
574
  ERROR: ERROR
@@ -740,9 +802,12 @@ var ServiceType = {
740
802
  restaurant: 23,
741
803
  event: 24,
742
804
  training: 25,
805
+ voucher: 26,
806
+ reduction: 27,
807
+ rocket: 28,
743
808
  };
744
809
 
745
- /*! *****************************************************************************
810
+ /******************************************************************************
746
811
  Copyright (c) Microsoft Corporation.
747
812
 
748
813
  Permission to use, copy, modify, and/or distribute this software for any
@@ -802,9 +867,13 @@ function __generator(thisArg, body) {
802
867
  f,
803
868
  y,
804
869
  t,
805
- g;
870
+ g = Object.create(
871
+ (typeof Iterator === "function" ? Iterator : Object).prototype
872
+ );
806
873
  return (
807
- (g = { next: verb(0), throw: verb(1), return: verb(2) }),
874
+ (g.next = verb(0)),
875
+ (g["throw"] = verb(1)),
876
+ (g["return"] = verb(2)),
808
877
  typeof Symbol === "function" &&
809
878
  (g[Symbol.iterator] = function () {
810
879
  return this;
@@ -818,7 +887,7 @@ function __generator(thisArg, body) {
818
887
  }
819
888
  function step(op) {
820
889
  if (f) throw new TypeError("Generator is already executing.");
821
- while (_)
890
+ while ((g && ((g = 0), op[0] && (_ = 0)), _))
822
891
  try {
823
892
  if (
824
893
  ((f = 1),
@@ -888,6 +957,18 @@ function __generator(thisArg, body) {
888
957
  }
889
958
  }
890
959
 
960
+ typeof SuppressedError === "function"
961
+ ? SuppressedError
962
+ : function (error, suppressed, message) {
963
+ var e = new Error(message);
964
+ return (
965
+ (e.name = "SuppressedError"),
966
+ (e.error = error),
967
+ (e.suppressed = suppressed),
968
+ e
969
+ );
970
+ };
971
+
891
972
  var post$1 = function (url, apiKey, body, token, signal, languageCode) {
892
973
  return __awaiter(void 0, void 0, void 0, function () {
893
974
  var response;
@@ -919,7 +1000,38 @@ var post$1 = function (url, apiKey, body, token, signal, languageCode) {
919
1000
  });
920
1001
  });
921
1002
  };
922
- var get$1 = function (url, apiKey, token, signal) {
1003
+ var patch$1 = function (url, apiKey, body, token, signal, languageCode) {
1004
+ return __awaiter(void 0, void 0, void 0, function () {
1005
+ var response;
1006
+ return __generator(this, function (_a) {
1007
+ switch (_a.label) {
1008
+ case 0:
1009
+ return [
1010
+ 4 /*yield*/,
1011
+ fetch(url, {
1012
+ method: "PATCH",
1013
+ headers: {
1014
+ "Content-Type": "application/json",
1015
+ "Api-Key": apiKey,
1016
+ Language: languageCode || "nl-BE",
1017
+ Authorization: token ? "Bearer " + token : "",
1018
+ },
1019
+ credentials: "include",
1020
+ body: body,
1021
+ signal: signal,
1022
+ }),
1023
+ ];
1024
+ case 1:
1025
+ response = _a.sent();
1026
+ if (!response.ok) {
1027
+ throw new Error(response.statusText);
1028
+ }
1029
+ return [2 /*return*/, response];
1030
+ }
1031
+ });
1032
+ });
1033
+ };
1034
+ var get$1 = function (url, apiKey, token, signal, languageCode) {
923
1035
  return __awaiter(void 0, void 0, void 0, function () {
924
1036
  var response;
925
1037
  return __generator(this, function (_a) {
@@ -932,6 +1044,8 @@ var get$1 = function (url, apiKey, token, signal) {
932
1044
  headers: {
933
1045
  "Content-Type": "application/json",
934
1046
  "Api-Key": apiKey,
1047
+ Language: languageCode || "nl-BE",
1048
+ "Accept-Language": languageCode || "nl-BE",
935
1049
  Authorization: token ? "Bearer " + token : "",
936
1050
  },
937
1051
  credentials: "include",
@@ -6637,20 +6751,6 @@ var reviver = function (_, value) {
6637
6751
  }
6638
6752
  return value;
6639
6753
  };
6640
- var replacer = function (_, value) {
6641
- if (typeof value === "string") {
6642
- if (Date.parse(value)) {
6643
- var date = new Date(value);
6644
- if (date.toISOString() === value) {
6645
- var year = date.getFullYear();
6646
- var month = date.getMonth() + 1;
6647
- var day = date.getDate();
6648
- return year + "-" + month + "-" + day;
6649
- }
6650
- }
6651
- }
6652
- return value;
6653
- };
6654
6754
 
6655
6755
  var post = function (
6656
6756
  url,
@@ -6676,29 +6776,31 @@ var post = function (
6676
6776
  case 2:
6677
6777
  responseBody = _a.sent();
6678
6778
  result = skipReviver
6679
- ? JSON.parse(
6680
- responseBody !== null && responseBody !== void 0
6681
- ? responseBody
6682
- : ""
6683
- )
6684
- : JSON.parse(
6685
- responseBody !== null && responseBody !== void 0
6686
- ? responseBody
6687
- : "",
6688
- reviver
6689
- );
6779
+ ? JSON.parse(responseBody)
6780
+ : JSON.parse(responseBody, reviver);
6690
6781
  return [2 /*return*/, result];
6691
6782
  }
6692
6783
  });
6693
6784
  });
6694
6785
  };
6695
- var get = function (url, apiKey, token, signal, skipReviver) {
6786
+ var patch = function (
6787
+ url,
6788
+ apiKey,
6789
+ body,
6790
+ token,
6791
+ signal,
6792
+ skipReviver,
6793
+ languageCode
6794
+ ) {
6696
6795
  return __awaiter(void 0, void 0, void 0, function () {
6697
6796
  var response, responseBody, result;
6698
6797
  return __generator(this, function (_a) {
6699
6798
  switch (_a.label) {
6700
6799
  case 0:
6701
- return [4 /*yield*/, get$1(url, apiKey, token, signal)];
6800
+ return [
6801
+ 4 /*yield*/,
6802
+ patch$1(url, apiKey, body, token, signal, languageCode),
6803
+ ];
6702
6804
  case 1:
6703
6805
  response = _a.sent();
6704
6806
  return [4 /*yield*/, response.text()];
@@ -6712,234 +6814,98 @@ var get = function (url, apiKey, token, signal, skipReviver) {
6712
6814
  });
6713
6815
  });
6714
6816
  };
6715
-
6716
- var ENDPOINT$8 = "/api/web/booking";
6717
- var ENDPOINT_AVAILABLE_PRODUCTS = ENDPOINT$8 + "/available-products";
6718
- var ENDPOINT_PACKAGE_SEARCH = ENDPOINT$8 + "/package-search";
6719
- var ENDPOINT_PACKAGE_PRICE_DETAILS = ENDPOINT$8 + "/package-price-details";
6720
- var ENDPOINT_CREATE_OFFER = ENDPOINT$8 + "/offer-entry";
6721
- var ENDPOINT_CREATE_ENTRY = ENDPOINT$8 + "/entry-multiroom";
6722
- var ENDPOINT_CREATE_PACKAGE_OFFER = ENDPOINT$8 + "/package-offer-entry";
6723
- var ENDPOINT_CREATE_PACKAGE_ENTRY = ENDPOINT$8 + "/package-entry";
6724
- var ENDPOINT_GET_BASE_PRICES = ENDPOINT$8 + "/base-prices";
6725
- var ENDPOINT_GET_BASE_PRICES_FROM_DATE = ENDPOINT$8 + "/base-prices-from-date";
6726
- /**
6727
- * api/web/booking/available-products
6728
- * @param config
6729
- * @param request
6730
- * @returns Availabilities (options) for the specified request.
6731
- * @deprecated Use V2: Search
6732
- */
6733
- var getAvailableProducts = function (config, request, signal) {
6734
- var url = "" + config.host + ENDPOINT_AVAILABLE_PRODUCTS;
6735
- var apiKey = config.apiKey;
6736
- var body = JSON.stringify(request);
6737
- return post(url, apiKey, body, config.token, signal);
6738
- };
6739
- /**
6740
- * api/web/booking/package-search
6741
- * @param config
6742
- * @param request
6743
- * @returns Travel options (excursions etc) for a specified product, accommodation and regime.
6744
- * @depracted Use V2: Search
6745
- */
6746
- var searchPackages = function (config, request, signal) {
6747
- var url = "" + config.host + ENDPOINT_PACKAGE_SEARCH;
6748
- var apiKey = config.apiKey;
6749
- var body = JSON.stringify(request);
6750
- return post(url, apiKey, body, config.token, signal);
6751
- };
6752
- /**
6753
- * api/web/booking/package-price-details
6754
- * @param config
6755
- * @param request
6756
- * @returns A price breakdown for a specified Package (= product and selected options).
6757
- * @deprecated Use V2: Price details
6758
- */
6759
- var getPackagePriceDetails = function (config, request, signal) {
6760
- var url = "" + config.host + ENDPOINT_PACKAGE_PRICE_DETAILS;
6761
- var apiKey = config.apiKey;
6762
- var body = JSON.stringify(request);
6763
- return post(url, apiKey, body, config.token, signal);
6764
- };
6765
- /**
6766
- * api/web/booking/offer-entry
6767
- * Creates an Tide Offer, based on the request.
6768
- * @param config
6769
- * @param request
6770
- * @returns The (full) created offer Entry.
6771
- * @deprecated Use V2: Book
6772
- */
6773
- var createOffer = function (config, request, signal) {
6774
- // Update request to use full response
6775
- request.useShortResponse = false;
6776
- var url = "" + config.host + ENDPOINT_CREATE_OFFER;
6777
- var apiKey = config.apiKey;
6778
- var body = JSON.stringify(request);
6779
- return post(url, apiKey, body, config.token, signal);
6780
- };
6781
- /**
6782
- * api/web/booking/offer-entry
6783
- * Creates a Tide Offer, based on the request.
6784
- * @param config
6785
- * @param request
6786
- * @returns The (short) created offer Entry.
6787
- * @deprecated Use V2: Book
6788
- */
6789
- var createOfferWithShortResponse = function (config, request, signal) {
6790
- // Update request to use short response
6791
- request.useShortResponse = true;
6792
- var url = "" + config.host + ENDPOINT_CREATE_OFFER;
6793
- var apiKey = config.apiKey;
6794
- var body = JSON.stringify(request, replacer);
6795
- return post(url, apiKey, body, config.token, signal);
6796
- };
6797
- /**
6798
- * api/web/booking/entry-multiroom
6799
- * Creates a Tide Booking, based on the request.
6800
- * @param config
6801
- * @param request
6802
- * @returns The (full) created booking Entry.
6803
- * @deprecated Use V2: Book
6804
- */
6805
- var createEntry = function (config, request, signal) {
6806
- // Update request to use full response
6807
- request.useShortResponse = false;
6808
- var url = "" + config.host + ENDPOINT_CREATE_ENTRY;
6809
- var apiKey = config.apiKey;
6810
- var body = JSON.stringify(request, replacer);
6811
- return post(url, apiKey, body, config.token, signal);
6812
- };
6813
- /**
6814
- * api/web/booking/entry-multiroom
6815
- * Creates a Tide Booking, based on the request.
6816
- * @param config
6817
- * @param request
6818
- * @returns The (short) created booking Entry.
6819
- * @deprecated Use V2: Book
6820
- */
6821
- var createEntryWithShortResponse = function (config, request, signal) {
6822
- // Update request to use short response
6823
- request.useShortResponse = true;
6824
- var url = "" + config.host + ENDPOINT_CREATE_ENTRY;
6825
- var apiKey = config.apiKey;
6826
- var body = JSON.stringify(request, replacer);
6827
- return post(url, apiKey, body, config.token, signal);
6828
- };
6829
- /**
6830
- * api/web/booking/package-offer-entry
6831
- * Creates a Tide Offer, based on the request.
6832
- * @param config
6833
- * @param request
6834
- * @returns The (full) created offer Entry.
6835
- * @depracted Use V2: Book
6836
- */
6837
- var createPackageOffer = function (config, request, signal) {
6838
- // Update request to use full response
6839
- request.useShortResponse = false;
6840
- var url = "" + config.host + ENDPOINT_CREATE_PACKAGE_OFFER;
6841
- var apiKey = config.apiKey;
6842
- var body = JSON.stringify(request, replacer);
6843
- return post(url, apiKey, body, config.token, signal);
6844
- };
6845
- /**
6846
- * api/web/booking/package-offer-entry
6847
- * Creates a Tide Offer, based on the request.
6848
- * @param config
6849
- * @param request
6850
- * @returns The (short) created offer Entry.
6851
- * @deprecated Use V2: Book
6852
- */
6853
- var createPackageOfferWithShortResponse = function (config, request, signal) {
6854
- // Update request to use short response
6855
- request.useShortResponse = true;
6856
- var url = "" + config.host + ENDPOINT_CREATE_PACKAGE_OFFER;
6857
- var apiKey = config.apiKey;
6858
- var body = JSON.stringify(request, replacer);
6859
- return post(url, apiKey, body, config.token, signal);
6860
- };
6861
- /**
6862
- * api/web/booking/package-entry
6863
- * Create a Tide Booking, based on the request.
6864
- * @param config
6865
- * @param request
6866
- * @returns The (full) created booking Entry.
6867
- * @deprecated Use V2: book
6868
- */
6869
- var createPackageEntry = function (config, request, signal) {
6870
- // Update request to use full response
6871
- request.useShortResponse = false;
6872
- var url = "" + config.host + ENDPOINT_CREATE_PACKAGE_ENTRY;
6873
- var apiKey = config.apiKey;
6874
- var body = JSON.stringify(request, replacer);
6875
- return post(url, apiKey, body, config.token, signal);
6876
- };
6877
- /**
6878
- * api/web/booking/package-entry
6879
- * Create a Tide Booking, based on the request.
6880
- * @param config
6881
- * @param request
6882
- * @returns The (short) created booking Entry.
6883
- * @deprecated Use V2: Book
6884
- */
6885
- var createPackageEntryWithShortResponse = function (config, request, signal) {
6886
- // Update request to use short response
6887
- request.useShortResponse = true;
6888
- var url = "" + config.host + ENDPOINT_CREATE_PACKAGE_ENTRY;
6889
- var apiKey = config.apiKey;
6890
- var body = JSON.stringify(request, replacer);
6891
- return post(url, apiKey, body, config.token, signal);
6892
- };
6893
- /**
6894
- * api/web/booking/base-prices
6895
- * Get base prices of a specific product and accommodation in a defined period.
6896
- * @param config
6897
- * @param request
6898
- * @returns The base prices of a specific product and accommodation during the defined period.
6899
- * @deprecated Use V2: Prices
6900
- */
6901
- var getBasePrices = function (config, request, signal) {
6902
- var url = "" + config.host + ENDPOINT_GET_BASE_PRICES;
6903
- var apiKey = config.apiKey;
6904
- var body = JSON.stringify(request, replacer);
6905
- return post(url, apiKey, body, config.token, signal);
6906
- };
6907
- /**
6908
- * api/web/booking/base-prices-from-date
6909
- * Get base prices of a specific product and accommodation starting from a specific date.
6910
- * @param config
6911
- * @param request
6912
- * @returns The base prices of a specific product and accommodationg starting from a specific date.
6913
- */
6914
- var getBasePricesFromDate = function (config, request, signal) {
6915
- var url = "" + config.host + ENDPOINT_GET_BASE_PRICES_FROM_DATE;
6916
- var apiKey = config.apiKey;
6917
- var body = JSON.stringify(request, replacer);
6918
- return post(url, apiKey, body, config.token, signal);
6817
+ var get = function (url, apiKey, token, signal, skipReviver, languageCode) {
6818
+ return __awaiter(void 0, void 0, void 0, function () {
6819
+ var response, responseBody, result;
6820
+ return __generator(this, function (_a) {
6821
+ switch (_a.label) {
6822
+ case 0:
6823
+ return [4 /*yield*/, get$1(url, apiKey, token, signal, languageCode)];
6824
+ case 1:
6825
+ response = _a.sent();
6826
+ return [4 /*yield*/, response.text()];
6827
+ case 2:
6828
+ responseBody = _a.sent();
6829
+ result = skipReviver
6830
+ ? JSON.parse(responseBody)
6831
+ : JSON.parse(responseBody, reviver);
6832
+ return [2 /*return*/, result];
6833
+ }
6834
+ });
6835
+ });
6919
6836
  };
6920
6837
 
6921
6838
  var ENDPOINT$7 = "/api/web/booking/v2";
6922
- var ENDPOINT_PACKAGE_SEARCH_LIST = ENDPOINT$7 + "/package-search-list";
6839
+ var ENDPOINT_AVAILABLE_FLIGHTS = ENDPOINT$7 + "/available-flights";
6840
+ var ENDPOINT_TRANSPORT_DATES = ENDPOINT$7 + "/transport-dates";
6841
+ var ENDPOINT_PRICES = ENDPOINT$7 + "/prices";
6842
+ var ENDPOINT_AVAILABLE_COUNTRIES = ENDPOINT$7 + "/available-countries";
6923
6843
  var ENDPOINT_SEARCH = ENDPOINT$7 + "/search";
6924
6844
  var ENDPOINT_SEARCH_WITH_ERROR_MAPPING =
6925
6845
  ENDPOINT$7 + "/search-with-error-mapping";
6846
+ // const ENDPOINT_ELASTIC = `${ENDPOINT}/elastic`; // TODO
6926
6847
  var ENDPOINT_DETAILS = ENDPOINT$7 + "/details";
6927
6848
  var ENDPOINT_VALIDATE_VOUCHER = ENDPOINT$7 + "/validate-voucher";
6928
- var ENDPOINT_ALTERNATE_HOTELS = "/alternate-hotels";
6929
- var ENDPOINT_ALTERNATE_FLIGHTS = "/alternate-flights";
6849
+ var ENDPOINT_ALTERNATE_HOTELS = function (transactionId, optionId) {
6850
+ return (
6851
+ ENDPOINT$7 + "/details/" + transactionId + "/alternate-hotels/" + optionId
6852
+ );
6853
+ };
6854
+ var ENDPOINT_ALTERNATE_FLIGHTS = function (transactionId) {
6855
+ return ENDPOINT$7 + "/details/" + transactionId + "/alternate-flights";
6856
+ };
6857
+ var ENDPOINT_BOOKABLE_DATES = ENDPOINT$7 + "/bookable-dates";
6930
6858
  var ENDPOINT_PRICE_DETAILS = ENDPOINT$7 + "/price-details";
6931
6859
  var ENDPOINT_BOOK = ENDPOINT$7 + "/book";
6932
6860
  var ENDPOINT_UPDATE = ENDPOINT$7 + "/update";
6933
6861
  var ENDPOINT_AGENTS = ENDPOINT$7 + "/agents";
6934
- var ENDPOINT_AVAILABLE_ALLOTMENTS = ENDPOINT$7 + "/get-allotment-availability";
6862
+ var ENDPOINT_AVAILABLE_ALLOTMENTS = function (eventId, productCode) {
6863
+ return (
6864
+ ENDPOINT$7 + "/get-allotment-availability/" + eventId + "/" + productCode
6865
+ );
6866
+ };
6935
6867
  var ENDPOINT_FLIGHT_POOL = ENDPOINT$7 + "/flight-pool";
6936
- var ENDPOINT_BOOKABLE_DATES = ENDPOINT$7 + "/bookable-dates";
6937
6868
  var ENDPOINT_TOUR_CODES = ENDPOINT$7 + "/tourcodes";
6938
- var readPackageSearchList = function (config, request, signal) {
6939
- var url = "" + config.host + ENDPOINT_PACKAGE_SEARCH_LIST;
6869
+ var ENDPOINT_CUSTOM_ENTRY_STATUS$1 = function (
6870
+ dossierNumber,
6871
+ customEntryStatusId
6872
+ ) {
6873
+ return (
6874
+ ENDPOINT$7 +
6875
+ "/custom-entry-status/" +
6876
+ dossierNumber +
6877
+ "/" +
6878
+ customEntryStatusId
6879
+ );
6880
+ };
6881
+ var ENDPOINT_ENTRY_STATUS = function (dossierNumber, entryStatus) {
6882
+ return (
6883
+ ENDPOINT$7 + "/custom-entry-status/" + dossierNumber + "/" + entryStatus
6884
+ );
6885
+ };
6886
+ var availableFlights = function (config, request, signal) {
6887
+ var url = "" + config.host + ENDPOINT_AVAILABLE_FLIGHTS;
6940
6888
  var apiKey = config.apiKey;
6941
6889
  var body = JSON.stringify(request);
6942
- return post(url, apiKey, body, config.token, signal);
6890
+ return post(url, apiKey, body, config.token, signal, true);
6891
+ };
6892
+ var transportDates = function (config, request, signal) {
6893
+ var url = "" + config.host + ENDPOINT_TRANSPORT_DATES;
6894
+ var apiKey = config.apiKey;
6895
+ var body = JSON.stringify(request);
6896
+ return post(url, apiKey, body, config.token, signal, true);
6897
+ };
6898
+ var prices = function (config, request, signal) {
6899
+ var url = "" + config.host + ENDPOINT_PRICES;
6900
+ var apiKey = config.apiKey;
6901
+ var body = JSON.stringify(request);
6902
+ return post(url, apiKey, body, config.token, signal, true);
6903
+ };
6904
+ var availableCountries = function (config, request, signal) {
6905
+ var url = "" + config.host + ENDPOINT_AVAILABLE_COUNTRIES;
6906
+ var apiKey = config.apiKey;
6907
+ var body = JSON.stringify(request);
6908
+ return post(url, apiKey, body, config.token, signal, true);
6943
6909
  };
6944
6910
  // PACKAGE SEARCH
6945
6911
  var search = function (config, request, signal) {
@@ -6966,28 +6932,23 @@ var validateVoucher = function (config, request, signal) {
6966
6932
  var body = JSON.stringify(request);
6967
6933
  return post(url, apiKey, body, config.token, signal, true);
6968
6934
  };
6969
- var alternateHotels = function (config, transactionId, signal) {
6935
+ var alternateHotels = function (config, transactionId, optionId, signal) {
6970
6936
  var url =
6971
- "" +
6972
- config.host +
6973
- ENDPOINT_DETAILS +
6974
- "/" +
6975
- transactionId +
6976
- ENDPOINT_ALTERNATE_HOTELS;
6937
+ "" + config.host + ENDPOINT_ALTERNATE_HOTELS(transactionId, optionId);
6977
6938
  var apiKey = config.apiKey;
6978
6939
  return get(url, apiKey, config.token, signal, true);
6979
6940
  };
6980
6941
  var alternateFlights = function (config, transactionId, signal) {
6981
- var url =
6982
- "" +
6983
- config.host +
6984
- ENDPOINT_DETAILS +
6985
- "/" +
6986
- transactionId +
6987
- ENDPOINT_ALTERNATE_FLIGHTS;
6942
+ var url = "" + config.host + ENDPOINT_ALTERNATE_FLIGHTS(transactionId);
6988
6943
  var apiKey = config.apiKey;
6989
6944
  return get(url, apiKey, config.token, signal, true);
6990
6945
  };
6946
+ var bookableDates = function (config, request, signal) {
6947
+ var url = "" + config.host + ENDPOINT_BOOKABLE_DATES;
6948
+ var apiKey = config.apiKey;
6949
+ var body = JSON.stringify(request);
6950
+ return post(url, apiKey, body, config.token, signal, true);
6951
+ };
6991
6952
  var priceDetails = function (config, request, signal, languageCode) {
6992
6953
  var url = "" + config.host + ENDPOINT_PRICE_DETAILS;
6993
6954
  var apiKey = config.apiKey;
@@ -7013,13 +6974,7 @@ var agents = function (config, signal) {
7013
6974
  };
7014
6975
  var getAllotmentAvailability = function (config, eventId, productCode, signal) {
7015
6976
  var url =
7016
- "" +
7017
- config.host +
7018
- ENDPOINT_AVAILABLE_ALLOTMENTS +
7019
- "/" +
7020
- eventId +
7021
- "/" +
7022
- productCode;
6977
+ "" + config.host + ENDPOINT_AVAILABLE_ALLOTMENTS(eventId, productCode);
7023
6978
  var apiKey = config.apiKey;
7024
6979
  return get(url, apiKey, config.token, signal, true);
7025
6980
  };
@@ -7029,18 +6984,31 @@ var searchFlightPool = function (config, request, signal) {
7029
6984
  var body = JSON.stringify(request);
7030
6985
  return post(url, apiKey, body, config.token, signal, true);
7031
6986
  };
7032
- var bookableDates = function (config, request, signal) {
7033
- var url = "" + config.host + ENDPOINT_BOOKABLE_DATES;
7034
- var apiKey = config.apiKey;
7035
- var body = JSON.stringify(request);
7036
- return post(url, apiKey, body, config.token, signal, true);
7037
- };
7038
6987
  var tourCodes = function (config, request, signal) {
7039
6988
  var url = "" + config.host + ENDPOINT_TOUR_CODES;
7040
6989
  var apiKey = config.apiKey;
7041
6990
  var body = JSON.stringify(request);
7042
6991
  return post(url, apiKey, body, config.token, signal, true);
7043
6992
  };
6993
+ var setCustomEntryStatus = function (
6994
+ config,
6995
+ dossierNumber,
6996
+ customEntryStatusId,
6997
+ signal
6998
+ ) {
6999
+ var url =
7000
+ "" +
7001
+ config.host +
7002
+ ENDPOINT_CUSTOM_ENTRY_STATUS$1(dossierNumber, customEntryStatusId);
7003
+ var apiKey = config.apiKey;
7004
+ return get(url, apiKey, config.token, signal, true);
7005
+ };
7006
+ var setEntryStatus = function (config, dossierNumber, entryStatus, signal) {
7007
+ var url =
7008
+ "" + config.host + ENDPOINT_ENTRY_STATUS(dossierNumber, entryStatus);
7009
+ var apiKey = config.apiKey;
7010
+ return patch(url, apiKey, null, config.token, signal, true);
7011
+ };
7044
7012
 
7045
7013
  var ENDPOINT$6 = "/api/member";
7046
7014
  var ENDPOINT_LOGIN = ENDPOINT$6 + "/login";
@@ -7270,6 +7238,8 @@ var ENDPOINT_GET_PRINT_ACTIONS = ENDPOINT$3 + "/print-action";
7270
7238
  var ENDPOINT_PRINT = ENDPOINT$3 + "/print-action";
7271
7239
  var ENDPOINT_CUSTOM_ENTRY_STATUS = ENDPOINT$3 + "/custom-entry-status";
7272
7240
  var ENDPOINT_ENUM_ENTRY_STATUS = ENDPOINT$3 + "/enum/entry-status";
7241
+ var ENDPOINT_CHANGE_ENTRY_AGENT_SURCHARGE =
7242
+ ENDPOINT$3 + "/entry/change-agent-surcharge";
7273
7243
  /**
7274
7244
  * api/web/agent/print-action/{print-action-group}
7275
7245
  * @param config
@@ -7329,20 +7299,28 @@ var getInvoiceList = function (config, filterItem, gridColumns, signal) {
7329
7299
  var apiKey = config.apiKey;
7330
7300
  return get(url, apiKey, config.token, signal, true);
7331
7301
  };
7332
- var getCustomEntryStatus = function (config, signal) {
7302
+ var getCustomEntryStatus = function (config, signal, languageCode) {
7333
7303
  var url = "" + config.host + ENDPOINT_CUSTOM_ENTRY_STATUS;
7334
7304
  var apiKey = config.apiKey;
7335
- return get(url, apiKey, config.token, signal, true);
7305
+ return get(url, apiKey, config.token, signal, true, languageCode);
7336
7306
  };
7337
- var getEntryStatus = function (config, signal) {
7307
+ var getEntryStatus = function (config, signal, languageCode) {
7338
7308
  var url = "" + config.host + ENDPOINT_ENUM_ENTRY_STATUS;
7339
7309
  var apiKey = config.apiKey;
7340
- return get(url, apiKey, config.token, signal, true);
7310
+ return get(url, apiKey, config.token, signal, true, languageCode);
7311
+ };
7312
+ var changeEntryAgentSurcharge = function (config, request, signal) {
7313
+ var url = "" + config.host + ENDPOINT_CHANGE_ENTRY_AGENT_SURCHARGE;
7314
+ var apiKey = config.apiKey;
7315
+ var body = JSON.stringify(request);
7316
+ return post$1(url, apiKey, body, config.token, signal);
7341
7317
  };
7342
7318
 
7343
7319
  var ENDPOINT$2 = "/api/web";
7344
7320
  var ENDPOINT_CREATE_CRM_CONTACT = ENDPOINT$2 + "/crmcontact";
7345
7321
  var ENDPOINT_CREATE_AFFILIATES = ENDPOINT$2 + "/affiliates";
7322
+ var ENDPOINT_TRANSLATION_DICTIONARY = ENDPOINT$2 + "/translation-dictionary";
7323
+ var ENDPOINT_BOOKING_ACCOMMODATION = ENDPOINT$2 + "/booking-accommodation";
7346
7324
  /**
7347
7325
  * api/web/crmcontact
7348
7326
  * Creates a CRM contact.
@@ -7355,7 +7333,7 @@ var createCrmContact = function (config, request, signal) {
7355
7333
  var url = "" + config.host + ENDPOINT_CREATE_CRM_CONTACT;
7356
7334
  var apiKey = config.apiKey;
7357
7335
  var body = JSON.stringify(request);
7358
- return post$1(url, apiKey, body, config.token, signal);
7336
+ return post(url, apiKey, body, config.token, signal);
7359
7337
  };
7360
7338
  /**
7361
7339
  * api/web/affiliates
@@ -7369,6 +7347,18 @@ var getAffiliates = function (config, signal) {
7369
7347
  var apiKey = config.apiKey;
7370
7348
  return get(url, apiKey, config.token, signal, true);
7371
7349
  };
7350
+ var getTranslationDictionary = function (config, segmentKey, signal) {
7351
+ var url =
7352
+ "" + config.host + ENDPOINT_TRANSLATION_DICTIONARY + "/" + segmentKey;
7353
+ var apiKey = config.apiKey;
7354
+ return get(url, apiKey, undefined, signal);
7355
+ };
7356
+ var generateBookingAccommodations = function (config, request, signal) {
7357
+ var url = "" + config.host + ENDPOINT_BOOKING_ACCOMMODATION;
7358
+ var apiKey = config.apiKey;
7359
+ var body = JSON.stringify(request);
7360
+ return post(url, apiKey, body, config.token, signal);
7361
+ };
7372
7362
 
7373
7363
  var ENDPOINT$1 = "/api/web/contact";
7374
7364
  var ENDPOINT_CONTACT_FORM = ENDPOINT$1 + "/contact-form";
@@ -7419,31 +7409,22 @@ build.ServiceType = ServiceType;
7419
7409
  var agents_1 = build.agents = agents;
7420
7410
  build.alternateFlights = alternateFlights;
7421
7411
  build.alternateHotels = alternateHotels;
7412
+ build.availableCountries = availableCountries;
7413
+ build.availableFlights = availableFlights;
7422
7414
  var book_1 = build.book = book;
7423
7415
  build.bookableDates = bookableDates;
7416
+ build.changeEntryAgentSurcharge = changeEntryAgentSurcharge;
7424
7417
  build.confirm = confirm;
7425
7418
  build.contactForm = contactForm;
7426
7419
  build.contactHasTag = contactHasTag;
7427
7420
  build.createCrmContact = createCrmContact;
7428
- build.createEntry = createEntry;
7429
- build.createEntryWithShortResponse = createEntryWithShortResponse;
7430
- build.createOffer = createOffer;
7431
- build.createOfferWithShortResponse = createOfferWithShortResponse;
7432
- build.createPackageEntry = createPackageEntry;
7433
- build.createPackageEntryWithShortResponse =
7434
- createPackageEntryWithShortResponse;
7435
- build.createPackageOffer = createPackageOffer;
7436
- build.createPackageOfferWithShortResponse =
7437
- createPackageOfferWithShortResponse;
7438
7421
  build.createParams = createParams;
7439
7422
  var details_1 = build.details = details;
7440
7423
  build.feedXml = feedXml;
7441
7424
  build.forgotPassword = forgotPassword;
7425
+ var generateBookingAccommodations_1 = build.generateBookingAccommodations = generateBookingAccommodations;
7442
7426
  build.getAffiliates = getAffiliates;
7443
7427
  build.getAllotmentAvailability = getAllotmentAvailability;
7444
- build.getAvailableProducts = getAvailableProducts;
7445
- build.getBasePrices = getBasePrices;
7446
- build.getBasePricesFromDate = getBasePricesFromDate;
7447
7428
  build.getCountries = getCountries;
7448
7429
  build.getCustomEntryStatus = getCustomEntryStatus;
7449
7430
  build.getEntryList = getEntryList;
@@ -7451,19 +7432,21 @@ build.getEntryStatus = getEntryStatus;
7451
7432
  build.getEntryTotals = getEntryTotals;
7452
7433
  build.getInvoiceList = getInvoiceList;
7453
7434
  build.getMolliePayment = getMolliePayment;
7454
- build.getPackagePriceDetails = getPackagePriceDetails;
7455
7435
  build.getPrintActions = getPrintActions;
7436
+ build.getTranslationDictionary = getTranslationDictionary;
7456
7437
  build.login = login;
7457
7438
  build.logout = logout;
7458
7439
  var priceDetails_1 = build.priceDetails = priceDetails;
7440
+ build.prices = prices;
7459
7441
  build.print = print;
7460
- build.readPackageSearchList = readPackageSearchList;
7461
7442
  build.resetPassword = resetPassword;
7462
7443
  build.search = search;
7463
7444
  build.searchFlightPool = searchFlightPool;
7464
- build.searchPackages = searchPackages;
7465
7445
  build.searchWithErrorMapping = searchWithErrorMapping;
7446
+ build.setCustomEntryStatus = setCustomEntryStatus;
7447
+ build.setEntryStatus = setEntryStatus;
7466
7448
  build.tourCodes = tourCodes;
7449
+ build.transportDates = transportDates;
7467
7450
  build.update = update;
7468
7451
  var validateVoucher_1 = build.validateVoucher = validateVoucher;
7469
7452
 
@@ -8290,14 +8273,26 @@ var fetchAgents$1 = function (signal, apiSettings) { return __awaiter$1(void 0,
8290
8273
  }
8291
8274
  });
8292
8275
  }); };
8293
- var packageApi = {
8294
- fetchDetails: fetchDetails,
8295
- fetchAgents: fetchAgents$1,
8296
- };
8297
-
8298
- var ROOM_OPTIONS_FORM_STEP = 1;
8299
- var FLIGHT_OPTIONS_FORM_STEP = 2;
8300
- var OPTIONS_FORM_STEP = 3;
8276
+ var fetchAccommodationViews$1 = function (request, signal, apiSettings) { return __awaiter$1(void 0, void 0, void 0, function () {
8277
+ var tideClientConfig;
8278
+ return __generator$1(this, function (_a) {
8279
+ switch (_a.label) {
8280
+ case 0:
8281
+ tideClientConfig = buildTideClientConfig(apiSettings);
8282
+ return [4 /*yield*/, generateBookingAccommodations_1(tideClientConfig, request, signal)];
8283
+ case 1: return [2 /*return*/, _a.sent()];
8284
+ }
8285
+ });
8286
+ }); };
8287
+ var packageApi = {
8288
+ fetchDetails: fetchDetails,
8289
+ fetchAgents: fetchAgents$1,
8290
+ fetchAccommodationViews: fetchAccommodationViews$1
8291
+ };
8292
+
8293
+ var ROOM_OPTIONS_FORM_STEP = 1;
8294
+ var FLIGHT_OPTIONS_FORM_STEP = 2;
8295
+ var OPTIONS_FORM_STEP = 3;
8301
8296
  var TRAVELERS_FORM_STEP = 4;
8302
8297
  var SUMMARY_STEP = 5;
8303
8298
  var CONFIRMATION_STEP = 6;
@@ -8488,6 +8483,7 @@ var selectIsFetchingProductOptions = function (state) {
8488
8483
  var selectDepartureFlight = function (state) { var _a, _b; return (_b = (_a = state.booking.package) === null || _a === void 0 ? void 0 : _a.outwardFlights) === null || _b === void 0 ? void 0 : _b.find(function (x) { return x.isSelected; }); };
8489
8484
  var selectReturnFlight = function (state) { var _a, _b; return (_b = (_a = state.booking.package) === null || _a === void 0 ? void 0 : _a.returnFlights) === null || _b === void 0 ? void 0 : _b.find(function (x) { return x.isSelected; }); };
8490
8485
  var selectPackageRooms = function (state) { var _a, _b; return (_b = (_a = state.booking.package) === null || _a === void 0 ? void 0 : _a.options.find(function (x) { return x.isSelected; })) === null || _b === void 0 ? void 0 : _b.rooms; };
8486
+ var selectAvailabilities = function (state) { var _a, _b; return (_b = (_a = state.booking.package) === null || _a === void 0 ? void 0 : _a.options.find(function (x) { return x.isSelected; })) === null || _b === void 0 ? void 0 : _b.availabilities; };
8491
8487
  var selectPackageTags = function (state) { var _a; return (_a = state.booking.package) === null || _a === void 0 ? void 0 : _a.tags; };
8492
8488
  var selectIsOnRequest = function (state) { var _a, _b; return (_b = (_a = state.booking.package) === null || _a === void 0 ? void 0 : _a.options.find(function (x) { return x.isSelected; })) === null || _b === void 0 ? void 0 : _b.isOnRequest; };
8493
8489
  var selectPackageOptionUnits = function (state) { var _a, _b; return (_b = (_a = state.booking.package) === null || _a === void 0 ? void 0 : _a.options.find(function (x) { return x.isSelected; })) === null || _b === void 0 ? void 0 : _b.optionUnits; };
@@ -8552,6 +8548,20 @@ var selectCalculateDeposit = function (state) {
8552
8548
  var selectIsRetry = function (state) { return state.booking.isRetry; };
8553
8549
  var selectStartDate = function (state) { var _a, _b; return (_b = (_a = state.booking.package) === null || _a === void 0 ? void 0 : _a.options.find(function (x) { return x.isSelected; })) === null || _b === void 0 ? void 0 : _b.fromDate; };
8554
8550
  var selectAgents = function (state) { return state.booking.agents; };
8551
+ var selectProductCode = function (state) { var _a; return (_a = state.booking.productAttributes) === null || _a === void 0 ? void 0 : _a.productCode; };
8552
+ var selectAccommodationCodes = function (state) {
8553
+ var _a;
8554
+ var accommodationCodes = [];
8555
+ (_a = state.booking.package) === null || _a === void 0 ? void 0 : _a.options.forEach(function (o) {
8556
+ o.rooms.forEach(function (r) { return r.options.forEach(function (ro) {
8557
+ if (!accommodationCodes.some(function (y) { return y === ro.accommodationCode; })) {
8558
+ accommodationCodes.push(ro.accommodationCode);
8559
+ }
8560
+ }); });
8561
+ });
8562
+ return accommodationCodes;
8563
+ };
8564
+ var selectAccommodationViews = function (state) { return state.booking.accommodationViews; };
8555
8565
  var selectBookingQuery = function (state) {
8556
8566
  var bookingAttributes = state.booking.bookingAttributes;
8557
8567
  if (!bookingAttributes) {
@@ -8568,11 +8578,16 @@ var selectBookingQuery = function (state) {
8568
8578
  AQF: true,
8569
8579
  });
8570
8580
  }
8571
- if (key === "flight") {
8581
+ if (key === "allotmentIds" && !value.length) {
8582
+ value = undefined;
8583
+ }
8584
+ if (key === "flight" && value) {
8572
8585
  var flightInfo = value;
8573
8586
  value = JsonURL__default["default"].stringify(flightInfo, { AQF: true });
8574
8587
  }
8575
- params[key] = value;
8588
+ if (value) {
8589
+ params[key] = value;
8590
+ }
8576
8591
  });
8577
8592
  return params;
8578
8593
  };
@@ -8764,6 +8779,9 @@ var fetchPackage = toolkit.createAsyncThunk("booking/fetchPackage", function (_,
8764
8779
  _b.sent();
8765
8780
  return [4 /*yield*/, dispatch(fetchPackageDetails())];
8766
8781
  case 2:
8782
+ _b.sent();
8783
+ return [4 /*yield*/, dispatch(fetchAccommodationViews())];
8784
+ case 3:
8767
8785
  _b.sent();
8768
8786
  dispatch(setFetchingPackage(false));
8769
8787
  return [2 /*return*/];
@@ -8848,6 +8866,34 @@ var fetchPackageDetails = toolkit.createAsyncThunk("booking/details", function (
8848
8866
  });
8849
8867
  });
8850
8868
  });
8869
+ var fetchAccommodationViews = toolkit.createAsyncThunk("booking/accommodationViews", function (_, _a) {
8870
+ _a.dispatch; var getState = _a.getState, signal = _a.signal;
8871
+ return __awaiter$1(void 0, void 0, void 0, function () {
8872
+ var state, languageCode, accommodationCodes, productCode, request;
8873
+ return __generator$1(this, function (_b) {
8874
+ switch (_b.label) {
8875
+ case 0:
8876
+ state = getState();
8877
+ if (!state.booking.accommodationViewId)
8878
+ return [2 /*return*/, Promise.resolve()];
8879
+ languageCode = selectLanguageCode(state);
8880
+ accommodationCodes = selectAccommodationCodes(state);
8881
+ productCode = selectProductCode(state);
8882
+ if (!productCode) {
8883
+ throw Error('No product selected');
8884
+ }
8885
+ request = {
8886
+ languageCode: languageCode,
8887
+ productCode: productCode,
8888
+ accommodationCodes: accommodationCodes,
8889
+ contentViewId: state.booking.accommodationViewId
8890
+ };
8891
+ return [4 /*yield*/, packageApi.fetchAccommodationViews(request, signal, state.apiSettings)];
8892
+ case 1: return [2 /*return*/, _b.sent()];
8893
+ }
8894
+ });
8895
+ });
8896
+ });
8851
8897
  var getActiveOption = function (state) {
8852
8898
  if (state.package)
8853
8899
  return state.package.options.find(function (x) { return x.isSelected; });
@@ -9029,17 +9075,15 @@ var bookingSlice = toolkit.createSlice({
9029
9075
  document.documentElement.scrollTop = 0; // For Chrome, Firefox, IE and Opera
9030
9076
  state.currentStep = action.payload;
9031
9077
  },
9032
- setOutwardFlight: function (state, action) {
9078
+ setFlights: function (state, action) {
9033
9079
  if (!state.package)
9034
9080
  return;
9035
- changeOutwardFlight(state.package, action.payload);
9081
+ changeOutwardFlight(state.package, action.payload.selectedOutward);
9082
+ changeReturnFlight(state.package, action.payload.selectedReturn);
9036
9083
  changePackageOption(state.package);
9037
9084
  },
9038
- setReturnFlight: function (state, action) {
9039
- if (!state.package)
9040
- return;
9041
- changeReturnFlight(state.package, action.payload);
9042
- changePackageOption(state.package);
9085
+ setAccommodationViewId: function (state, action) {
9086
+ state.accommodationViewId = action.payload;
9043
9087
  }
9044
9088
  },
9045
9089
  extraReducers: function (builder) {
@@ -9147,9 +9191,14 @@ var bookingSlice = toolkit.createSlice({
9147
9191
  state.agents = action.payload;
9148
9192
  }
9149
9193
  });
9194
+ builder.addCase(fetchAccommodationViews.fulfilled, function (state, action) {
9195
+ if (action.payload) {
9196
+ state.accommodationViews = action.payload;
9197
+ }
9198
+ });
9150
9199
  },
9151
9200
  });
9152
- var setOfficeId = (_a = bookingSlice.actions, _a.setOfficeId), setLanguageCode = _a.setLanguageCode, setTranslations = _a.setTranslations, setBookingOptions = _a.setBookingOptions, setBookingType = _a.setBookingType, setProductAttributes = _a.setProductAttributes, setBookingAttributes = _a.setBookingAttributes, setCalculateDeposit = _a.setCalculateDeposit, setBookingNumber = _a.setBookingNumber, setIsRetry = _a.setIsRetry, setFetchingPackage = _a.setFetchingPackage, setPackage = _a.setPackage, setPackageRooms = _a.setPackageRooms, setPackageOptionPax = _a.setPackageOptionPax, setPackageOptionUnits = _a.setPackageOptionUnits, setPackageGroups = _a.setPackageGroups, setSkipPayment = _a.setSkipPayment, setGeneratePaymentUrl = _a.setGeneratePaymentUrl, setTagIds = _a.setTagIds, setAgentAdressId = _a.setAgentAdressId, setBookingRemarks = _a.setBookingRemarks, setVoucherCodes = _a.setVoucherCodes, setCurrentStep = _a.setCurrentStep, setPackageAirlineGroups = _a.setPackageAirlineGroups, setPackageAirportGroups = _a.setPackageAirportGroups, setOutwardFlight = _a.setOutwardFlight, setReturnFlight = _a.setReturnFlight;
9201
+ var setOfficeId = (_a = bookingSlice.actions, _a.setOfficeId), setLanguageCode = _a.setLanguageCode, setTranslations = _a.setTranslations, setBookingOptions = _a.setBookingOptions, setBookingType = _a.setBookingType, setProductAttributes = _a.setProductAttributes, setBookingAttributes = _a.setBookingAttributes, setCalculateDeposit = _a.setCalculateDeposit, setBookingNumber = _a.setBookingNumber, setIsRetry = _a.setIsRetry, setFetchingPackage = _a.setFetchingPackage, setPackage = _a.setPackage, setPackageRooms = _a.setPackageRooms, setPackageOptionPax = _a.setPackageOptionPax, setPackageOptionUnits = _a.setPackageOptionUnits, setPackageGroups = _a.setPackageGroups, setSkipPayment = _a.setSkipPayment, setGeneratePaymentUrl = _a.setGeneratePaymentUrl, setTagIds = _a.setTagIds, setAgentAdressId = _a.setAgentAdressId, setBookingRemarks = _a.setBookingRemarks, setVoucherCodes = _a.setVoucherCodes, setCurrentStep = _a.setCurrentStep, setPackageAirlineGroups = _a.setPackageAirlineGroups, setPackageAirportGroups = _a.setPackageAirportGroups, setFlights = _a.setFlights, setAccommodationViewId = _a.setAccommodationViewId;
9153
9202
  var bookingReducer = bookingSlice.reducer;
9154
9203
 
9155
9204
  var initialState = {
@@ -9186,12 +9235,12 @@ var StepIndicators = function (_a) {
9186
9235
  var _b = React.useContext(SettingsContext), flightOptions = _b.flightOptions, roomOptions = _b.roomOptions;
9187
9236
  var translations = reactRedux.useSelector(selectTranslations);
9188
9237
  var allSteps = [];
9189
- if (!roomOptions.isHidden) {
9190
- allSteps.push(translations.STEPS.ROOM_OPTIONS);
9191
- }
9192
9238
  if (!flightOptions.isHidden) {
9193
9239
  allSteps.push(translations.STEPS.FLIGHT_OPTIONS);
9194
9240
  }
9241
+ if (!roomOptions.isHidden) {
9242
+ allSteps.push(translations.STEPS.ROOM_OPTIONS);
9243
+ }
9195
9244
  allSteps.push(translations.STEPS.EXTRA_OPTIONS);
9196
9245
  allSteps.push(translations.STEPS.PERSONAL_DETAILS);
9197
9246
  allSteps.push(translations.STEPS.SUMMARY);
@@ -9300,196 +9349,569 @@ var Error$1 = function () {
9300
9349
  translations.ERROR.ERROR_TEXT3)))))));
9301
9350
  };
9302
9351
 
9303
- var FlightOption = function (_a) {
9304
- var item = _a.item, isSelected = _a.isSelected, group = _a.group, selectedOutward = _a.selectedOutward, selectedReturn = _a.selectedReturn, currentPrice = _a.currentPrice, relatedFlight = _a.relatedFlight, isSameOption = _a.isSameOption, onChange = _a.onChange;
9305
- var translations = reactRedux.useSelector(selectTranslations);
9306
- var airline = item.flightMetaData.flightLines[0].airline;
9307
- var isDisabled = selectedOutward
9308
- ? selectedOutward.externalGuid !== item.externalGuid
9309
- : false;
9310
- var selectedPair = selectedOutward !== null && selectedOutward !== void 0 ? selectedOutward : selectedReturn;
9311
- var ownTotalPrice = relatedFlight
9312
- ? relatedFlight.price + item.price
9313
- : selectedPair.price + item.price;
9314
- var priceDifference = item.isSelected
9315
- ? 0
9316
- : ownTotalPrice - currentPrice;
9317
- var flightLabel = item.flightMetaData.flightLines.length === 1
9318
- ? translations.FLIGHTS_FORM.DIRECT_FLIGHT
9319
- : "".concat(item.flightMetaData.flightLines.length - 1, " ").concat(translations.FLIGHTS_FORM.FLIGHT_STOPS);
9320
- return (React__default["default"].createElement("div", { className: "flight__option" },
9321
- React__default["default"].createElement("div", { className: "radiobutton" },
9322
- React__default["default"].createElement("div", { className: "radiobutton__label" },
9323
- React__default["default"].createElement("input", { type: "radio", value: item.entryLineGuid, id: "".concat(group, "_").concat(item.entryLineGuid), name: group, className: "radiobutton__input", disabled: isDisabled, onChange: function () { return onChange(item); }, checked: isSelected }),
9324
- React__default["default"].createElement("span", null,
9325
- airline,
9326
- " ",
9327
- flightLabel,
9328
- " - ",
9329
- item.class),
9330
- priceDifference !== 0 && (React__default["default"].createElement("span", { className: buildClassName([
9331
- "price",
9332
- priceDifference > 0 && "price--increase",
9333
- priceDifference < 0 && "price--decrease",
9334
- ]) }, getPriceDifferenceText(priceDifference))),
9335
- !isSameOption && (React__default["default"].createElement(Icon$1, { name: "ui-warning", title: translations.FLIGHTS_FORM.DIFFERENT_OPTION_WARNING })))),
9336
- item.flightMetaData && (React__default["default"].createElement("div", null, item.flightMetaData.flightLines.map(function (fl, i) { return (React__default["default"].createElement("div", { key: i },
9337
- React__default["default"].createElement("span", null,
9338
- fl.departureAirportDescription,
9339
- " ",
9340
- dateFns.format(new Date(fl.departureDate), "dd/MM/yyyy"),
9341
- " ",
9342
- fl.departureTime),
9343
- React__default["default"].createElement("span", null,
9344
- ">> ",
9345
- fl.airlineCode,
9346
- fl.number,
9347
- " >>"),
9348
- React__default["default"].createElement("span", null,
9349
- fl.arrivalAirportDescription,
9350
- " ",
9351
- dateFns.format(new Date(fl.arrivalDate), "dd/MM/yyyy"),
9352
- " ",
9353
- fl.arrivalTime))); })))));
9354
- };
9355
-
9356
- var FlightOptionsForm = function () {
9357
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
9358
- var settings = React.useContext(SettingsContext);
9359
- var translations = reactRedux.useSelector(selectTranslations);
9360
- var dispatch = useAppDispatch();
9361
- var packageDetails = reactRedux.useSelector(selectPackageDetails);
9362
- var bookingQueryString = reactRedux.useSelector(selectBookingQueryString);
9363
- var isLoading = reactRedux.useSelector(selectIsFetchingProductOptions);
9364
- var flights = reactRedux.useSelector(selectPackageFlights);
9365
- var handleSubmit = function (e) {
9366
- if (settings.skipRouter) {
9367
- dispatch(setCurrentStep(OPTIONS_FORM_STEP));
9352
+ var MultiRangeFilter = function (_a) {
9353
+ var min = _a.min, max = _a.max, selectedMin = _a.selectedMin, selectedMax = _a.selectedMax, valueFormatter = _a.valueFormatter, onChange = _a.onChange;
9354
+ var _b = React.useState(false), isDragging = _b[0], setIsDragging = _b[1];
9355
+ var _c = React.useState(0), leftPercentage = _c[0], setLeftPercentage = _c[1];
9356
+ var _d = React.useState(0), rightPercentage = _d[0], setRightPercentage = _d[1];
9357
+ var _e = React.useState(min), minVal = _e[0], setMinVal = _e[1];
9358
+ var _f = React.useState(max), maxVal = _f[0], setMaxVal = _f[1];
9359
+ var minGap = 5;
9360
+ React.useEffect(function () {
9361
+ setSliderTrack();
9362
+ }, [minVal, maxVal]);
9363
+ var slideMin = function (e) {
9364
+ var value = parseInt(e.target.value, 10);
9365
+ if (value >= min && selectedMax - value >= minGap) {
9366
+ setMinVal(value);
9368
9367
  }
9369
- else {
9370
- router.navigate("".concat(settings.basePath).concat(settings.options.pathSuffix, "?").concat(bookingQueryString));
9368
+ };
9369
+ var slideMax = function (e) {
9370
+ var value = parseInt(e.target.value, 10);
9371
+ if (value <= max && value - selectedMin >= minGap) {
9372
+ setMaxVal(value);
9371
9373
  }
9372
- e.preventDefault();
9373
9374
  };
9374
- var goPrevious = function () {
9375
- dispatch(setCurrentStep(ROOM_OPTIONS_FORM_STEP));
9375
+ var setSliderTrack = function () {
9376
+ var range = document.querySelector(".slider-track");
9377
+ if (range) {
9378
+ var minPercent = ((minVal - min) / (max - min)) * 100;
9379
+ var maxPercent = ((maxVal - min) / (max - min)) * 100;
9380
+ setLeftPercentage(minPercent);
9381
+ setRightPercentage(100 - maxPercent);
9382
+ }
9376
9383
  };
9377
- var selectedOptionGuid = (_a = packageDetails === null || packageDetails === void 0 ? void 0 : packageDetails.options.find(function (x) { return x.isSelected; })) === null || _a === void 0 ? void 0 : _a.id;
9378
- var selectedOutwardFlight = (_b = flights.outward) === null || _b === void 0 ? void 0 : _b.find(function (x) { return x.isSelected; });
9379
- var selectedReturnFlight = (_c = flights.return) === null || _c === void 0 ? void 0 : _c.find(function (x) { return x.isSelected; });
9380
- var currentFlightPrice = (((_e = (_d = flights.outward) === null || _d === void 0 ? void 0 : _d.find(function (x) { return x.isSelected; })) === null || _e === void 0 ? void 0 : _e.price) || 0)
9381
- + (((_g = (_f = flights.return) === null || _f === void 0 ? void 0 : _f.find(function (x) { return x.isSelected; })) === null || _g === void 0 ? void 0 : _g.price) || 0);
9382
- React.useEffect(function () {
9383
- var _a, _b;
9384
- if (packageDetails && settings.roomOptions.isHidden) {
9385
- var params = new URLSearchParams(location.search);
9386
- var outwardFlight_1 = (_a = params.get("outwardflight")) !== null && _a !== void 0 ? _a : undefined;
9387
- var returnFlight_1 = (_b = params.get("returnflight")) !== null && _b !== void 0 ? _b : undefined;
9388
- if (outwardFlight_1 && returnFlight_1) {
9389
- var desiredOutwardFlight_1 = packageDetails.outwardFlights.find(function (x) { return x.entryLineGuid == outwardFlight_1; });
9390
- var desiredReturnFlight_1 = packageDetails.returnFlights.find(function (x) { return x.entryLineGuid == returnFlight_1; });
9391
- if (desiredOutwardFlight_1 && desiredReturnFlight_1) {
9392
- dispatch(setPackage(__assign(__assign({}, packageDetails), { outwardFlights: packageDetails.outwardFlights.map(function (flight) {
9393
- return __assign(__assign({}, flight), { isSelected: flight.entryLineGuid == desiredOutwardFlight_1.entryLineGuid
9394
- ? true
9395
- : false });
9396
- }), returnFlights: packageDetails.returnFlights.map(function (flight) {
9397
- return __assign(__assign({}, flight), { isSelected: flight.entryLineGuid == desiredReturnFlight_1.entryLineGuid
9398
- ? true
9399
- : false });
9400
- }) })));
9401
- }
9384
+ var startDrag = function () {
9385
+ setIsDragging(true);
9386
+ };
9387
+ var stopDrag = function () {
9388
+ setIsDragging(false);
9389
+ onChange(minVal, maxVal);
9390
+ };
9391
+ return (React__default["default"].createElement("div", { className: "double-slider-box" },
9392
+ React__default["default"].createElement("div", { className: "input-box" },
9393
+ React__default["default"].createElement("div", { className: "min-box" }, valueFormatter(min)),
9394
+ React__default["default"].createElement("div", { className: "max-box" }, valueFormatter(max))),
9395
+ React__default["default"].createElement("div", { className: "range-slider" },
9396
+ React__default["default"].createElement("div", { className: "slider-track", style: { 'left': leftPercentage + '%', right: rightPercentage + '%' } }),
9397
+ React__default["default"].createElement("input", { type: "range", min: min, max: max, value: minVal, onChange: slideMin, onMouseDown: startDrag, onMouseUp: stopDrag, onTouchStart: startDrag, onTouchEnd: stopDrag, className: "min-val" }),
9398
+ React__default["default"].createElement("input", { type: "range", min: min, max: max, value: maxVal, onChange: slideMax, onMouseDown: startDrag, onMouseUp: stopDrag, onTouchStart: startDrag, onTouchEnd: stopDrag, className: "max-val" }),
9399
+ isDragging && React__default["default"].createElement("div", { className: "min-tooltip" }, valueFormatter(minVal)),
9400
+ isDragging && React__default["default"].createElement("div", { className: "max-tooltip" }, valueFormatter(maxVal)))));
9401
+ };
9402
+
9403
+ /*interface FlightGroup {
9404
+ code: string;
9405
+ startDate: Date,
9406
+ endDate: Date;
9407
+ options: BookingPackageFlight[];
9408
+ }*/
9409
+ var buildGroupedFlights = function (outwardFlights, returnFlights) {
9410
+ if (!outwardFlights || !returnFlights)
9411
+ return [];
9412
+ // let outwardGroups = groupFlights(outwardFlights);
9413
+ // let returnGroups = groupFlights(returnFlights);
9414
+ var pairs = [];
9415
+ outwardFlights.forEach(function (outwardFlight) {
9416
+ if (outwardFlight.externalGuid) {
9417
+ var returnFlight = returnFlights.find(function (x) { return x.externalGuid === outwardFlight.externalGuid; });
9418
+ pairs.push({ outward: outwardFlight, return: returnFlight });
9419
+ }
9420
+ else {
9421
+ var outwardCode = outwardFlight.code.substring(0, 7);
9422
+ var returnCode_1 = outwardCode.split(" ").reduce(function (a, b) { return "".concat(b, " ").concat(a); });
9423
+ returnFlights.filter(function (x) { return x.code.startsWith(returnCode_1); }).forEach(function (returnFlight) {
9424
+ pairs.push({ outward: outwardFlight, return: returnFlight });
9425
+ });
9426
+ }
9427
+ });
9428
+ var results = pairs.map(function (x) {
9429
+ var outwardFlightDetails = getFlightDetails(x.outward);
9430
+ var returnFlightDetails = getFlightDetails(x.return);
9431
+ return {
9432
+ isSelected: x.outward.isSelected && x.return.isSelected,
9433
+ price: x.outward.price + x.return.price,
9434
+ outward: outwardFlightDetails,
9435
+ return: returnFlightDetails,
9436
+ selectedOutward: x.outward,
9437
+ selectedReturn: x.return
9438
+ };
9439
+ });
9440
+ return results;
9441
+ };
9442
+ var buildFilterOptions = function (outwardFlights, returnFlights, translations) {
9443
+ if (!outwardFlights || !returnFlights)
9444
+ return undefined;
9445
+ var airports = [];
9446
+ var airlines = [];
9447
+ var numberOfStops = [];
9448
+ var outwardDeparturePeriods = [];
9449
+ var returnDeparturePeriods = [];
9450
+ var lowestDepartureTravelDuration = 9999;
9451
+ var highestDepartureTravelDuration = 0;
9452
+ var lowestDepartureChangeDuration = 9999;
9453
+ var highestDepartureChangeDuration = 0;
9454
+ outwardFlights.forEach(function (flight) {
9455
+ var _a;
9456
+ var airlineCode = flight.code.split('/')[1];
9457
+ if ((_a = flight.flightMetaData.flightLines) === null || _a === void 0 ? void 0 : _a.length) {
9458
+ var firstLine_1 = flight.flightMetaData.flightLines[0];
9459
+ if (!airports.some(function (x) { return x.value === firstLine_1.departureAirport; })) {
9460
+ airports.push({
9461
+ value: firstLine_1 === null || firstLine_1 === void 0 ? void 0 : firstLine_1.departureAirport,
9462
+ label: firstLine_1.departureAirportDescription,
9463
+ count: 0,
9464
+ isSelected: false
9465
+ });
9402
9466
  }
9403
9467
  }
9404
- dispatch(fetchPriceDetails());
9405
- }, []);
9406
- return (React__default["default"].createElement(React__default["default"].Fragment, null,
9407
- React__default["default"].createElement("form", { className: "form", name: "booking--flights", id: "booking--flights", noValidate: true, onSubmit: handleSubmit },
9408
- isLoading && settings.loaderComponent,
9409
- !isLoading && (React__default["default"].createElement("div", { className: "form__region" },
9410
- React__default["default"].createElement("div", { className: "form__group" },
9411
- React__default["default"].createElement("div", { className: "booking-card" },
9412
- React__default["default"].createElement("div", { className: "booking-card__header" },
9413
- React__default["default"].createElement("h2", { className: "booking-card__header-heading" }, translations.FLIGHTS_FORM.OUTWARD_FLIGHTS)),
9414
- React__default["default"].createElement("div", { className: "booking-card__body" },
9415
- React__default["default"].createElement("div", { className: "booking-card__group" },
9416
- React__default["default"].createElement("div", { className: "outward__flights" }, (_h = flights.outward) === null || _h === void 0 ? void 0 : _h.map(function (flight, index) {
9417
- var _a;
9418
- return (React__default["default"].createElement(FlightOption, { key: index, item: flight, isSelected: flight.isSelected, group: "outward", selectedReturn: selectedReturnFlight, currentPrice: currentFlightPrice, isSameOption: flight.validOptions.some(function (y) { return y === selectedOptionGuid; }), relatedFlight: flight.externalGuid ? (_a = flights.return) === null || _a === void 0 ? void 0 : _a.find(function (x) { return x.externalGuid === flight.externalGuid; }) : null, onChange: function (item) {
9419
- dispatch(setOutwardFlight(item));
9420
- dispatch(fetchPriceDetails());
9421
- } }));
9422
- }))))),
9423
- React__default["default"].createElement("div", { className: "booking-card" },
9424
- React__default["default"].createElement("div", { className: "booking-card__header" },
9425
- React__default["default"].createElement("h2", { className: "booking-card__header-heading" }, translations.FLIGHTS_FORM.RETURN_FLIGHTS)),
9426
- React__default["default"].createElement("div", { className: "booking-card__body" },
9427
- React__default["default"].createElement("div", { className: "booking-card__group" },
9428
- React__default["default"].createElement("div", { className: "return__flights" }, (_j = flights.return) === null || _j === void 0 ? void 0 : _j.map(function (flight, index) {
9429
- var _a;
9430
- return (React__default["default"].createElement(FlightOption, { key: index, item: flight, isSelected: flight.isSelected, group: "return", selectedOutward: selectedOutwardFlight, currentPrice: currentFlightPrice, isSameOption: flight.validOptions.some(function (y) { return y === selectedOptionGuid; }), relatedFlight: flight.externalGuid ? (_a = flights.outward) === null || _a === void 0 ? void 0 : _a.find(function (x) { return x.externalGuid === flight.externalGuid; }) : null, onChange: function (item) {
9431
- dispatch(setReturnFlight(item));
9432
- dispatch(fetchPriceDetails());
9433
- } }));
9434
- })))))))),
9435
- React__default["default"].createElement("div", { className: "booking__navigator" },
9436
- !settings.roomOptions.isHidden && (React__default["default"].createElement(React__default["default"].Fragment, null, settings.skipRouter ? (React__default["default"].createElement("button", { type: "button", title: translations.STEPS.PREVIOUS, onClick: function () { return goPrevious(); }, className: "cta cta--secondary" }, translations.STEPS.PREVIOUS)) : (React__default["default"].createElement(router.Link, { to: "".concat(settings.basePath).concat(settings.roomOptions.pathSuffix, "?").concat(bookingQueryString), title: translations.STEPS.PREVIOUS, className: "cta cta--secondary" }, translations.STEPS.PREVIOUS)))),
9437
- React__default["default"].createElement("button", { type: "submit", title: translations.STEPS.NEXT, disabled: isLoading, className: buildClassName(["cta", isLoading && "cta--disabled"]) }, translations.STEPS.NEXT)))));
9438
- };
9439
-
9440
- var NoOptions = function () {
9441
- var translations = reactRedux.useSelector(selectTranslations);
9442
- return (React__default["default"].createElement("div", { className: "form__group" },
9443
- React__default["default"].createElement(Message, { type: "success", title: translations.OPTIONS_FORM.NO_OPTIONS_TITLE },
9444
- React__default["default"].createElement("p", null, translations.OPTIONS_FORM.NO_OPTIONS_MESSAGE))));
9468
+ if (!airlines.some(function (x) { return x.value === airlineCode; })) {
9469
+ airlines.push({
9470
+ value: airlineCode,
9471
+ label: flight.airlineDescription,
9472
+ count: 0,
9473
+ isSelected: false
9474
+ });
9475
+ }
9476
+ var stopCount = flight.flightMetaData.flightLines.length - 1;
9477
+ if (!numberOfStops.some(function (x) { return x.value === (stopCount + ''); })) {
9478
+ numberOfStops.push({
9479
+ value: (stopCount + ''),
9480
+ label: stopCount === 0
9481
+ ? translations.FLIGHTS_FORM.DIRECT_FLIGHT
9482
+ : stopCount == 1
9483
+ ? "".concat(stopCount, " ").concat(translations.FLIGHTS_FORM.STOP)
9484
+ : "".concat(stopCount, " ").concat(translations.FLIGHTS_FORM.STOPS),
9485
+ count: 0,
9486
+ isSelected: false
9487
+ });
9488
+ }
9489
+ var departureTime = flight.flightMetaData.flightLines[0].departureTime;
9490
+ var timeBracket = determineTimeBracket(departureTime);
9491
+ if (!outwardDeparturePeriods.some(function (x) { return x.value === timeBracket; })) {
9492
+ outwardDeparturePeriods.push({
9493
+ value: timeBracket,
9494
+ label: getBracketTranslation(timeBracket, translations),
9495
+ count: 0,
9496
+ isSelected: false
9497
+ });
9498
+ }
9499
+ var travelDurationInMinutes = minutesFromTicks(flight.flightMetaData.durationInTicks);
9500
+ if (travelDurationInMinutes > highestDepartureTravelDuration)
9501
+ highestDepartureTravelDuration = travelDurationInMinutes;
9502
+ if (travelDurationInMinutes < lowestDepartureTravelDuration)
9503
+ lowestDepartureTravelDuration = travelDurationInMinutes;
9504
+ var changeDurationInMinutes = getTotalChangeDuration(flight);
9505
+ if (changeDurationInMinutes > highestDepartureChangeDuration)
9506
+ highestDepartureChangeDuration = changeDurationInMinutes;
9507
+ if (changeDurationInMinutes < lowestDepartureChangeDuration)
9508
+ lowestDepartureChangeDuration = changeDurationInMinutes;
9509
+ });
9510
+ var lowestReturnTravelDuration = 9999;
9511
+ var highestReturnTravelDuration = 0;
9512
+ var lowestReturnChangeDuration = 9999;
9513
+ var highestReturnChangeDuration = 0;
9514
+ returnFlights.forEach(function (flight) {
9515
+ var durationInMinutes = minutesFromTicks(flight.flightMetaData.durationInTicks);
9516
+ if (durationInMinutes > highestReturnTravelDuration)
9517
+ highestReturnTravelDuration = durationInMinutes;
9518
+ if (durationInMinutes < lowestReturnTravelDuration)
9519
+ lowestReturnTravelDuration = durationInMinutes;
9520
+ var changeDurationInMinutes = getTotalChangeDuration(flight);
9521
+ if (changeDurationInMinutes > highestReturnChangeDuration)
9522
+ highestReturnChangeDuration = changeDurationInMinutes;
9523
+ if (changeDurationInMinutes < lowestReturnChangeDuration)
9524
+ lowestReturnChangeDuration = changeDurationInMinutes;
9525
+ var departureTime = flight.flightMetaData.flightLines[0].departureTime;
9526
+ var timeBracket = determineTimeBracket(departureTime);
9527
+ if (!returnDeparturePeriods.some(function (x) { return x.value === timeBracket; })) {
9528
+ returnDeparturePeriods.push({
9529
+ value: timeBracket,
9530
+ label: getBracketTranslation(timeBracket, translations),
9531
+ count: 0,
9532
+ isSelected: false
9533
+ });
9534
+ }
9535
+ });
9536
+ return {
9537
+ airports: airports,
9538
+ airlines: airlines,
9539
+ numberOfStops: numberOfStops,
9540
+ outward: {
9541
+ departurePeriod: outwardDeparturePeriods,
9542
+ travelDuration: {
9543
+ min: lowestDepartureTravelDuration,
9544
+ max: highestDepartureTravelDuration,
9545
+ selectedMin: lowestDepartureTravelDuration,
9546
+ selectedMax: highestDepartureTravelDuration
9547
+ },
9548
+ changeDuration: {
9549
+ min: lowestDepartureChangeDuration,
9550
+ max: highestDepartureChangeDuration,
9551
+ selectedMin: lowestDepartureChangeDuration,
9552
+ selectedMax: highestDepartureChangeDuration
9553
+ }
9554
+ },
9555
+ return: {
9556
+ departurePeriod: returnDeparturePeriods,
9557
+ travelDuration: {
9558
+ min: lowestReturnTravelDuration,
9559
+ max: highestReturnTravelDuration,
9560
+ selectedMin: lowestReturnTravelDuration,
9561
+ selectedMax: highestReturnTravelDuration
9562
+ },
9563
+ changeDuration: {
9564
+ min: lowestReturnChangeDuration,
9565
+ max: highestReturnChangeDuration,
9566
+ selectedMin: lowestReturnChangeDuration,
9567
+ selectedMax: highestReturnChangeDuration
9568
+ }
9569
+ }
9570
+ };
9571
+ };
9572
+ var filterGroupedFlights = function (groups, filterOptions) {
9573
+ if (!groups.length || !filterOptions)
9574
+ return [];
9575
+ var filteredGroups = groups;
9576
+ if (filterOptions.airlines.some(function (x) { return x.isSelected; })) {
9577
+ var selectedAirlineCodes_1 = filterOptions.airlines.filter(function (x) { return x.isSelected; });
9578
+ filteredGroups = filteredGroups.filter(function (x) { return selectedAirlineCodes_1.some(function (y) { return y.value === x.outward.airlineCode; }); });
9579
+ }
9580
+ if (filterOptions.airports.some(function (x) { return x.isSelected; })) {
9581
+ var selectedAirlineCodes_2 = filterOptions.airports.filter(function (x) { return x.isSelected; });
9582
+ filteredGroups = filteredGroups.filter(function (x) { return selectedAirlineCodes_2.some(function (y) { return y.value === x.outward.departureAirportCode; }); });
9583
+ }
9584
+ if (filterOptions.numberOfStops.some(function (x) { return x.isSelected; })) {
9585
+ var selectedNumberOfStops_1 = filterOptions.airlines.filter(function (x) { return x.isSelected; });
9586
+ filteredGroups = filteredGroups.filter(function (x) { return selectedNumberOfStops_1.some(function (y) { return parseInt(y.value) === (x.outward.flightLines.length - 1); }); });
9587
+ }
9588
+ filteredGroups = filterGroupedFlightByDirection(filteredGroups, true, filterOptions.outward);
9589
+ filteredGroups = filterGroupedFlightByDirection(filteredGroups, false, filterOptions.return);
9590
+ return filteredGroups;
9591
+ };
9592
+ var filterGroupedFlightByDirection = function (groups, isOutward, directionFilter) {
9593
+ var filteredGroups = groups;
9594
+ if (directionFilter.departurePeriod.some(function (x) { return x.isSelected; })) {
9595
+ var selectedDeparturePeriods_1 = directionFilter.departurePeriod.filter(function (x) { return x.isSelected; });
9596
+ filteredGroups = filteredGroups.filter(function (x) { return selectedDeparturePeriods_1.some(function (y) { return y.value === determineTimeBracket((isOutward ? x.outward : x.return).departureTime); }); });
9597
+ }
9598
+ filteredGroups = filteredGroups.filter(function (x) { return directionFilter.travelDuration.selectedMin <= (isOutward ? x.outward : x.return).travelDurationMinutes && (isOutward ? x.outward : x.return).travelDurationMinutes <= directionFilter.travelDuration.selectedMax; });
9599
+ return filteredGroups.filter(function (x) { return directionFilter.changeDuration.selectedMin <= (isOutward ? x.outward : x.return).changeDurationMinutes && (isOutward ? x.outward : x.return).changeDurationMinutes <= directionFilter.changeDuration.selectedMax; });
9600
+ };
9601
+ var formatMinutes = function (minutes) {
9602
+ var hh = Math.floor(minutes / 60);
9603
+ var mm = Math.floor(minutes % 60);
9604
+ return pad(hh, 2) + ":" + pad(mm, 2);
9605
+ };
9606
+ var getFlightDetails = function (flight) {
9607
+ var firstLine = flight.flightMetaData.flightLines[0];
9608
+ var lastLine = flight.flightMetaData.flightLines[flight.flightMetaData.flightLines.length - 1];
9609
+ var airlineCode = flight.code.split('/')[1];
9610
+ var waitDurations = getWaitDurations(flight.flightMetaData.flightLines);
9611
+ return {
9612
+ airline: flight.airlineDescription,
9613
+ airlineCode: airlineCode,
9614
+ departureDate: firstLine.departureDate,
9615
+ departureTime: firstLine.departureTime,
9616
+ departureAirportCode: firstLine.departureAirport,
9617
+ departureAirport: firstLine.departureAirportDescription,
9618
+ arrivalDate: lastLine.arrivalDate,
9619
+ arrivalTime: lastLine.arrivalTime,
9620
+ arrivalAirport: lastLine.arrivalAirportDescription,
9621
+ travelDuration: formatDuration(flight.flightMetaData.durationInTicks),
9622
+ travelDurationMinutes: minutesFromTicks(flight.flightMetaData.durationInTicks),
9623
+ changeDurationMinutes: getTotalChangeDuration(flight),
9624
+ numberOfStops: flight.flightMetaData.flightLines.length - 1,
9625
+ isNextDay: isNextDay(firstLine.departureDate, lastLine.arrivalDate),
9626
+ travelClass: firstLine.travelClass,
9627
+ flightLines: flight.flightMetaData.flightLines.map(function (x, i) { return ({
9628
+ airline: x.operatingAirlineDescription,
9629
+ departureDate: x.departureDate,
9630
+ departureTime: x.departureTime,
9631
+ departureAirport: x.departureAirportDescription,
9632
+ arrivalDate: x.arrivalDate,
9633
+ arrivalTime: x.arrivalTime,
9634
+ arrivalAirport: x.arrivalAirportDescription,
9635
+ number: "".concat(x.airlineCode, " ").concat(x.number),
9636
+ travelDuration: formatDuration(x.durationInTicks),
9637
+ waitDuration: waitDurations.length - 1 <= i ? waitDurations[i] : undefined,
9638
+ }); })
9639
+ };
9640
+ };
9641
+ var isNextDay = function (startDateString, endDateString) {
9642
+ var startDate = dateFns.parseISO(startDateString);
9643
+ var endDate = dateFns.parseISO(endDateString);
9644
+ return !dateFns.isEqual(startDate, endDate);
9645
+ };
9646
+ var getWaitDurations = function (lines) {
9647
+ if (lines.length <= 1)
9648
+ return [];
9649
+ var arrivalDate = lines[0].arrivalDate;
9650
+ var arrivalTime = lines[0].arrivalTime;
9651
+ var waitDurations = [];
9652
+ for (var i = 1; i < lines.length; i++) {
9653
+ var line = lines[i];
9654
+ var waitDuration = getWaitDuration(arrivalDate, arrivalTime, line.departureDate, line.departureTime);
9655
+ waitDurations.push(waitDuration);
9656
+ arrivalDate = line.arrivalDate;
9657
+ arrivalTime = line.arrivalTime;
9658
+ }
9659
+ return waitDurations;
9660
+ };
9661
+ var getWaitDuration = function (arrivalDateString, arrivalTime, departureDateString, departureTime) {
9662
+ var minutes = getWaitDurationInMinutes(arrivalDateString, arrivalTime, departureDateString, departureTime);
9663
+ var hh = Math.floor(minutes / 60);
9664
+ var mm = Math.floor(minutes % 60);
9665
+ return pad(hh, 2) + ":" + pad(mm, 2);
9666
+ };
9667
+ var getWaitDurationInMinutes = function (arrivalDateString, arrivalTime, departureDateString, departureTime) {
9668
+ var arrivalDate = dateFns.parseISO(arrivalDateString);
9669
+ var arrivalTimeParts = arrivalTime.split(':');
9670
+ arrivalDate.setHours(parseInt(arrivalTimeParts[0]));
9671
+ arrivalDate.setMinutes(parseInt(arrivalTimeParts[1]));
9672
+ var departureDate = dateFns.parseISO(departureDateString);
9673
+ var departureTimeParts = departureTime.split(':');
9674
+ departureDate.setHours(parseInt(departureTimeParts[0]));
9675
+ departureDate.setMinutes(parseInt(departureTimeParts[1]));
9676
+ return dateFns.differenceInMinutes(departureDate, arrivalDate);
9677
+ };
9678
+ /*const groupFlights = (flights: BookingPackageFlight[]) => {
9679
+ let flightsPool = [...flights];
9680
+ let groups = [] as FlightGroup[];
9681
+ for (var i = 0; i < flightsPool.length; i++) {
9682
+ const flight = flightsPool[i];
9683
+
9684
+ const relatedFlights = flightsPool.filter(x => x != flight
9685
+ && x.code === flight.code
9686
+ && isDateEqual(x.startDateTime, flight.startDateTime)
9687
+ && isDateEqual(x.endDateTime, flight.endDateTime)
9688
+ );
9689
+
9690
+ flightsPool = flightsPool.filter(x => x != flight
9691
+ && relatedFlights.some(y => y != x));
9692
+
9693
+ groups.push({
9694
+ code: flight.code,
9695
+ startDate: parseISO(flight.startDateTime),
9696
+ endDate: parseISO(flight.endDateTime),
9697
+ options: [flight, ...relatedFlights]
9698
+ });
9699
+ }
9700
+ }
9701
+
9702
+ const isDateEqual = (first: string, second: string) => {
9703
+ const firstDate = parseISO(first);
9704
+ const secondDate = parseISO(second);
9705
+
9706
+ return isEqual(firstDate, secondDate);
9707
+ }*/
9708
+ var minutesFromTicks = function (ticks) {
9709
+ var totalSeconds = ticks / 10000000;
9710
+ return Math.floor(totalSeconds / 60);
9711
+ };
9712
+ var formatDuration = function (ticks) {
9713
+ if (!ticks)
9714
+ return '';
9715
+ var totalSeconds = ticks / 10000000;
9716
+ var hh = Math.floor(totalSeconds / 3600);
9717
+ var mm = Math.floor((totalSeconds % 3600) / 60);
9718
+ return pad(hh, 2) + ":" + pad(mm, 2);
9719
+ };
9720
+ var pad = function (input, width) {
9721
+ var n = input + '';
9722
+ return n.length >= width ? n : new Array(width - n.length + 1).join('0') + n;
9723
+ };
9724
+ var determineTimeBracket = function (input) {
9725
+ var time = parseInt(input.replace(':', ''));
9726
+ if (time <= 500)
9727
+ return '0000-0500';
9728
+ if (time > 500 && time <= 1200)
9729
+ return '0500-1200';
9730
+ if (time > 1200 && time <= 1800)
9731
+ return '1201-1800';
9732
+ return '1800-2400';
9733
+ };
9734
+ var getBracketTranslation = function (input, translations) {
9735
+ if (input === '0000-0500')
9736
+ return translations.FLIGHTS_FORM.NIGHT_DEPARTURE;
9737
+ if (input === '0500-1200')
9738
+ return translations.FLIGHTS_FORM.MORNING_DEPARTURE;
9739
+ if (input === '1200-1800')
9740
+ return translations.FLIGHTS_FORM.AFTERNOON_DEPARTURE;
9741
+ return translations.FLIGHTS_FORM.EVENING_DEPARTURE;
9742
+ };
9743
+ var getTotalChangeDuration = function (flight) {
9744
+ var lines = flight.flightMetaData.flightLines;
9745
+ if (lines.length <= 1)
9746
+ return 0;
9747
+ var arrivalDate = lines[0].arrivalDate;
9748
+ var arrivalTime = lines[0].arrivalTime;
9749
+ var waitDuration = 0;
9750
+ for (var i = 1; i < lines.length; i++) {
9751
+ var line = lines[i];
9752
+ waitDuration += getWaitDurationInMinutes(arrivalDate, arrivalTime, line.departureDate, line.departureTime);
9753
+ }
9754
+ return waitDuration;
9445
9755
  };
9446
9756
 
9447
- var NoneOption = function (_a) {
9448
- var group = _a.group, parentId = _a.parentId, handleNoneSelectionChanged = _a.handleNoneSelectionChanged;
9757
+ var FlightFilter = function (_a) {
9758
+ var filterOptions = _a.filterOptions, resultCount = _a.resultCount, applyFilter = _a.applyFilter;
9449
9759
  var translations = reactRedux.useSelector(selectTranslations);
9450
- var selectedOption = group.options.find(function (x) { return x.isSelected; });
9451
- var showNoneOption = group.options.some(function (x) { return x.requirementType === 2; });
9452
- var noneSelected = !selectedOption;
9453
- var priceDifferencetext = selectedOption
9454
- ? "- ".concat(formatPrice(Math.abs(selectedOption.line.price)))
9455
- : "";
9456
- return (React__default["default"].createElement(React__default["default"].Fragment, null, showNoneOption && (React__default["default"].createElement("tr", null,
9457
- React__default["default"].createElement("td", null,
9458
- React__default["default"].createElement("div", { className: buildClassName([
9459
- "tree",
9460
- noneSelected && "tree--selected",
9461
- ]) },
9462
- React__default["default"].createElement("div", { className: "tree__level" },
9463
- React__default["default"].createElement("div", { className: "tree__header" },
9464
- React__default["default"].createElement("div", { className: "tree__description-collapse" },
9465
- React__default["default"].createElement("div", { className: "radiobutton" },
9466
- React__default["default"].createElement("div", { className: "radiobutton__label" },
9467
- React__default["default"].createElement("input", { type: "radio", value: undefined, id: "".concat(parentId, "_NONE"), name: parentId, className: buildClassName([
9468
- "radiobutton__input",
9469
- "radiobutton__input--parent",
9470
- ]), defaultChecked: noneSelected, onChange: handleNoneSelectionChanged }),
9760
+ var _b = React.useState(false), filtersVisible = _b[0], setFiltersVisible = _b[1];
9761
+ var updateAirportFilter = function (code) {
9762
+ var updatedFilterOptions = __assign(__assign({}, filterOptions), { airports: filterOptions.airports.map(function (x) {
9763
+ if (x.value !== code)
9764
+ return x;
9765
+ return __assign(__assign({}, x), { isSelected: !x.isSelected });
9766
+ }) });
9767
+ applyFilter(updatedFilterOptions);
9768
+ };
9769
+ var updateAirlineFilter = function (code) {
9770
+ var updatedFilterOptions = __assign(__assign({}, filterOptions), { airlines: filterOptions.airlines.map(function (x) {
9771
+ if (x.value !== code)
9772
+ return x;
9773
+ return __assign(__assign({}, x), { isSelected: !x.isSelected });
9774
+ }) });
9775
+ applyFilter(updatedFilterOptions);
9776
+ };
9777
+ var updateStopsFilter = function (count) {
9778
+ var updatedFilterOptions = __assign(__assign({}, filterOptions), { numberOfStops: filterOptions.airlines.map(function (x) {
9779
+ if (x.value !== count)
9780
+ return x;
9781
+ return __assign(__assign({}, x), { isSelected: !x.isSelected });
9782
+ }) });
9783
+ applyFilter(updatedFilterOptions);
9784
+ };
9785
+ var updateOutwardDeparture = function (period) {
9786
+ var updatedFilterOptions = __assign(__assign({}, filterOptions), { outward: __assign(__assign({}, filterOptions.outward), { departurePeriod: filterOptions.outward.departurePeriod.map(function (x) {
9787
+ if (x.value !== period)
9788
+ return x;
9789
+ return __assign(__assign({}, x), { isSelected: !x.isSelected });
9790
+ }) }) });
9791
+ applyFilter(updatedFilterOptions);
9792
+ };
9793
+ var updateOutwardTravelDuration = function (min, max) {
9794
+ var updatedFilterOptions = __assign(__assign({}, filterOptions), { outward: __assign(__assign({}, filterOptions.outward), { travelDuration: __assign(__assign({}, filterOptions.outward.travelDuration), { selectedMin: min, selectedMax: max }) }) });
9795
+ applyFilter(updatedFilterOptions);
9796
+ };
9797
+ var updateOutwardChangeDuration = function (min, max) {
9798
+ var updatedFilterOptions = __assign(__assign({}, filterOptions), { outward: __assign(__assign({}, filterOptions.outward), { changeDuration: __assign(__assign({}, filterOptions.outward.changeDuration), { selectedMin: min, selectedMax: max }) }) });
9799
+ applyFilter(updatedFilterOptions);
9800
+ };
9801
+ var updateReturnDeparture = function (period) {
9802
+ var updatedFilterOptions = __assign(__assign({}, filterOptions), { return: __assign(__assign({}, filterOptions.return), { departurePeriod: filterOptions.return.departurePeriod.map(function (x) {
9803
+ if (x.value !== period)
9804
+ return x;
9805
+ return __assign(__assign({}, x), { isSelected: !x.isSelected });
9806
+ }) }) });
9807
+ applyFilter(updatedFilterOptions);
9808
+ };
9809
+ var updateReturnTravelDuration = function (min, max) {
9810
+ var updatedFilterOptions = __assign(__assign({}, filterOptions), { return: __assign(__assign({}, filterOptions.return), { travelDuration: __assign(__assign({}, filterOptions.return.travelDuration), { selectedMin: min, selectedMax: max }) }) });
9811
+ applyFilter(updatedFilterOptions);
9812
+ };
9813
+ var updateReturnChangeDuration = function (min, max) {
9814
+ var updatedFilterOptions = __assign(__assign({}, filterOptions), { return: __assign(__assign({}, filterOptions.return), { changeDuration: __assign(__assign({}, filterOptions.return.changeDuration), { selectedMin: min, selectedMax: max }) }) });
9815
+ applyFilter(updatedFilterOptions);
9816
+ };
9817
+ return (React__default["default"].createElement(React__default["default"].Fragment, null,
9818
+ React__default["default"].createElement("button", { type: "button", className: "cta cta--filter", onClick: function () { return setFiltersVisible(!filtersVisible); } },
9819
+ React__default["default"].createElement("svg", { width: 11, height: 10 },
9820
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#filter" })),
9821
+ React__default["default"].createElement("span", null, translations.FLIGHTS_FORM.FILTER_OPTIONS),
9822
+ filtersVisible),
9823
+ React__default["default"].createElement("div", { className: buildClassName(["flight__filter", filtersVisible && "flight__filter--active"]) },
9824
+ React__default["default"].createElement("div", { className: "flight__filter__header" },
9825
+ React__default["default"].createElement("div", { className: "flight__filter__header__title" },
9826
+ React__default["default"].createElement("h3", null, translations.FLIGHTS_FORM.FILTER_OPTIONS),
9827
+ React__default["default"].createElement("p", null,
9828
+ "er zijn ",
9829
+ React__default["default"].createElement("strong", null,
9830
+ resultCount,
9831
+ " vluchten"),
9832
+ " gevonden"))),
9833
+ React__default["default"].createElement("div", { className: "flight__filter__body" },
9834
+ React__default["default"].createElement("div", { className: "flight__filter__group" },
9835
+ React__default["default"].createElement("div", { className: "flight__filter__group__title" }, translations.FLIGHTS_FORM.AIRLINES),
9836
+ React__default["default"].createElement("div", { className: "flight__filter__group__wrapper" }, filterOptions.airlines.map(function (option, k) { return (React__default["default"].createElement("div", { className: "tree", key: k },
9837
+ React__default["default"].createElement("div", { className: "checkbox flight__filter__checkbox" },
9838
+ React__default["default"].createElement("label", { htmlFor: 'airline_' + option.value, className: "checkbox__label" },
9839
+ React__default["default"].createElement("input", { type: "checkbox", id: 'airline_' + option.value, className: "checkbox__input checkbox__input--parent", onClick: function () { return updateAirlineFilter(option.value); } }),
9840
+ React__default["default"].createElement("span", { className: "radiobutton__label-text" },
9841
+ option.label,
9842
+ " ",
9843
+ option.count > 0 && (React__default["default"].createElement("span", { className: "amount" },
9844
+ "(",
9845
+ option.count,
9846
+ ")"))))))); }))),
9847
+ React__default["default"].createElement("div", { className: "flight__filter__group" },
9848
+ React__default["default"].createElement("div", { className: "flight__filter__group__title" }, translations.FLIGHTS_FORM.AIRPORTS),
9849
+ React__default["default"].createElement("div", { className: "flight__filter__group__wrapper" }, filterOptions.airports.map(function (option, k) { return (React__default["default"].createElement("div", { className: "tree", key: k },
9850
+ React__default["default"].createElement("div", { className: "checkbox flight__filter__checkbox" },
9851
+ React__default["default"].createElement("label", { htmlFor: 'airport_' + option.value, className: "checkbox__label" },
9852
+ React__default["default"].createElement("input", { type: "checkbox", id: 'airport_' + option.value, className: "checkbox__input checkbox__input--parent", onClick: function () { return updateAirportFilter(option.value); } }),
9853
+ React__default["default"].createElement("span", { className: "radiobutton__label-text" },
9854
+ option.label,
9855
+ " ",
9856
+ option.count > 0 && (React__default["default"].createElement("span", { className: "amount" },
9857
+ "(",
9858
+ option.count,
9859
+ ")"))))))); }))),
9860
+ React__default["default"].createElement("div", { className: "flight__filter__group" },
9861
+ React__default["default"].createElement("div", { className: "flight__filter__group__title" }, translations.FLIGHTS_FORM.NUMBER_OF_STOPS),
9862
+ React__default["default"].createElement("div", { className: "flight__filter__group__wrapper" }, filterOptions.numberOfStops.map(function (option, k) { return (React__default["default"].createElement("div", { className: "tree", key: k },
9863
+ React__default["default"].createElement("div", { className: "checkbox flight__filter__checkbox" },
9864
+ React__default["default"].createElement("label", { htmlFor: 'stops_' + option.value, className: "checkbox__label" },
9865
+ React__default["default"].createElement("input", { type: "checkbox", id: 'stops_' + option.value, className: "checkbox__input checkbox__input--parent", onClick: function () { return updateStopsFilter(option.value); } }),
9866
+ React__default["default"].createElement("span", { className: "radiobutton__label-text" },
9867
+ option.label,
9868
+ " ",
9869
+ option.count > 0 && (React__default["default"].createElement("span", { className: "amount" },
9870
+ "(",
9871
+ option.count,
9872
+ ")"))))))); }))),
9873
+ React__default["default"].createElement("div", { className: "flight__filter__group" },
9874
+ React__default["default"].createElement("div", { className: "flight__filter__group__title" }, translations.FLIGHTS_FORM.FLIGHT_OUTWARD),
9875
+ React__default["default"].createElement("div", { className: "flight__filter__group__wrapper" },
9876
+ React__default["default"].createElement("p", null, translations.FLIGHTS_FORM.DEPARTURE_TIME),
9877
+ filterOptions.outward.departurePeriod.map(function (option, k) { return (React__default["default"].createElement("div", { className: "tree", key: k },
9878
+ React__default["default"].createElement("div", { className: "checkbox flight__filter__checkbox" },
9879
+ React__default["default"].createElement("label", { htmlFor: 'outward_time_' + option.value, className: "checkbox__label" },
9880
+ React__default["default"].createElement("input", { type: "checkbox", id: 'outward_time_' + option.value, className: "checkbox__input checkbox__input--parent", onClick: function () { return updateOutwardDeparture(option.value); } }),
9471
9881
  React__default["default"].createElement("span", { className: "radiobutton__label-text" },
9472
- React__default["default"].createElement("div", { className: "date-list" },
9473
- React__default["default"].createElement("span", { className: buildClassName([
9474
- "date-list__item",
9475
- "date-list__item--none",
9476
- ]) }))),
9477
- React__default["default"].createElement("div", { className: "tree__columns-actions" },
9478
- React__default["default"].createElement("div", { className: "tree__columns" },
9479
- React__default["default"].createElement("div", { className: "tree__column" },
9480
- React__default["default"].createElement("label", { htmlFor: "".concat(parentId, "_NONE"), className: buildClassName([
9481
- "tree__product-name",
9482
- "tree__product-name--none",
9483
- ]) }, translations.OPTIONS_FORM.NONE)),
9484
- React__default["default"].createElement("div", { className: "tree__column" }),
9485
- React__default["default"].createElement("div", { className: "tree__column" }),
9486
- React__default["default"].createElement("div", { className: buildClassName([
9487
- "tree__column",
9488
- "tree__column--price",
9489
- ]) }, !noneSelected && (React__default["default"].createElement("span", { className: buildClassName([
9490
- "price",
9491
- "price--decrease",
9492
- ]) }, priceDifferencetext))))))))))))))));
9882
+ option.label,
9883
+ " ",
9884
+ option.count > 0 && (React__default["default"].createElement("span", { className: "amount" },
9885
+ "(",
9886
+ option.count,
9887
+ ")"))))))); })),
9888
+ React__default["default"].createElement("div", { className: "flight__filter__group__wrapper" },
9889
+ React__default["default"].createElement("p", null, translations.FLIGHTS_FORM.TRAVEL_DURATION),
9890
+ React__default["default"].createElement(MultiRangeFilter, { min: filterOptions.outward.travelDuration.min, max: filterOptions.outward.travelDuration.max, selectedMin: filterOptions.outward.travelDuration.selectedMin, selectedMax: filterOptions.outward.travelDuration.selectedMax, valueFormatter: formatMinutes, onChange: updateOutwardTravelDuration })),
9891
+ React__default["default"].createElement("div", { className: "flight__filter__group__wrapper" },
9892
+ React__default["default"].createElement("p", null, translations.FLIGHTS_FORM.CHANGE_TIME),
9893
+ React__default["default"].createElement(MultiRangeFilter, { min: filterOptions.outward.changeDuration.min, max: filterOptions.outward.changeDuration.max, selectedMin: filterOptions.outward.changeDuration.selectedMin, selectedMax: filterOptions.outward.changeDuration.selectedMax, valueFormatter: formatMinutes, onChange: updateOutwardChangeDuration }))),
9894
+ React__default["default"].createElement("div", { className: "flight__filter__group" },
9895
+ React__default["default"].createElement("div", { className: "flight__filter__group__title" }, translations.FLIGHTS_FORM.FLIGHT_RETURN),
9896
+ React__default["default"].createElement("div", { className: "flight__filter__group__wrapper" },
9897
+ React__default["default"].createElement("p", null, translations.FLIGHTS_FORM.DEPARTURE_TIME),
9898
+ filterOptions.return.departurePeriod.map(function (option, k) { return (React__default["default"].createElement("div", { className: "tree", key: k },
9899
+ React__default["default"].createElement("div", { className: "checkbox flight__filter__checkbox" },
9900
+ React__default["default"].createElement("label", { htmlFor: 'return_time_' + option.value, className: "checkbox__label" },
9901
+ React__default["default"].createElement("input", { type: "checkbox", id: 'return_time_' + option.value, className: "checkbox__input checkbox__input--parent", onClick: function () { return updateReturnDeparture(option.value); } }),
9902
+ React__default["default"].createElement("span", { className: "radiobutton__label-text" },
9903
+ option.label,
9904
+ " ",
9905
+ option.count > 0 && (React__default["default"].createElement("span", { className: "amount" },
9906
+ "(",
9907
+ option.count,
9908
+ ")"))))))); })),
9909
+ React__default["default"].createElement("div", { className: "flight__filter__group__wrapper" },
9910
+ React__default["default"].createElement("p", null, translations.FLIGHTS_FORM.TRAVEL_DURATION),
9911
+ React__default["default"].createElement(MultiRangeFilter, { min: filterOptions.return.travelDuration.min, max: filterOptions.return.travelDuration.max, selectedMin: filterOptions.return.travelDuration.selectedMin, selectedMax: filterOptions.return.travelDuration.selectedMax, valueFormatter: formatMinutes, onChange: updateReturnTravelDuration })),
9912
+ React__default["default"].createElement("div", { className: "flight__filter__group__wrapper" },
9913
+ React__default["default"].createElement("p", null, translations.FLIGHTS_FORM.CHANGE_TIME),
9914
+ React__default["default"].createElement(MultiRangeFilter, { min: filterOptions.return.changeDuration.min, max: filterOptions.return.changeDuration.max, selectedMin: filterOptions.return.changeDuration.selectedMin, selectedMax: filterOptions.return.changeDuration.selectedMax, valueFormatter: formatMinutes, onChange: updateReturnChangeDuration })))))));
9493
9915
  };
9494
9916
 
9495
9917
  var getTravelersText = function (rooms) {
@@ -9575,7 +9997,7 @@ var parseFlightLines = function (metaDatas) {
9575
9997
  var parseFlightLineDateTime = function (date, time) {
9576
9998
  try {
9577
9999
  // Parse date
9578
- var parsedDate = new Date(date);
10000
+ var parsedDate = dateFns.parseISO(date);
9579
10001
  // Parse time
9580
10002
  var parsedTimeHours = parseInt(time.substring(0, 2));
9581
10003
  var parsedTimeMinutes = parseInt(time.substring(3, 5));
@@ -9590,6 +10012,521 @@ var parseFlightLineDateTime = function (date, time) {
9590
10012
  }
9591
10013
  };
9592
10014
 
10015
+ var FlightOptionFlight = function (_a) {
10016
+ var details = _a.details, isOptionsVisible = _a.isOptionsVisible;
10017
+ var translations = reactRedux.useSelector(selectTranslations);
10018
+ var _b = React.useState(false), isDetailVisible = _b[0], setIsDetailVisible = _b[1];
10019
+ return (React__default["default"].createElement("div", { className: "flight__flight" },
10020
+ React__default["default"].createElement("div", { className: "flight__flight__container" },
10021
+ React__default["default"].createElement("div", { className: "flight__flight__wrapper" },
10022
+ React__default["default"].createElement("div", { className: "flight__logo__wrapper" },
10023
+ React__default["default"].createElement("img", { src: "https://media.tidesoftware.be/media/shared/Airlines/".concat(details.airlineCode, ".png?height=30"), alt: "", className: "flight__logo" }),
10024
+ React__default["default"].createElement("span", null, details.airline)),
10025
+ React__default["default"].createElement("div", { className: "flight__info" },
10026
+ React__default["default"].createElement("div", { className: "flight__info__times" },
10027
+ React__default["default"].createElement("strong", null,
10028
+ details.departureTime,
10029
+ " ",
10030
+ details.departureAirport),
10031
+ React__default["default"].createElement("p", null, getDateText(details.departureDate))),
10032
+ React__default["default"].createElement("div", { className: "flight__info__duration" },
10033
+ React__default["default"].createElement("p", null, details.travelDuration),
10034
+ React__default["default"].createElement("div", { className: "flight__info__duration__stops" },
10035
+ React__default["default"].createElement("div", { className: "flight__info__duration__stop" })),
10036
+ details.numberOfStops > 0 && (React__default["default"].createElement("span", null,
10037
+ details.numberOfStops,
10038
+ " ",
10039
+ translations.FLIGHTS_FORM.FLIGHT_STOPS))),
10040
+ React__default["default"].createElement("div", { className: "flight__info__times flight__info__times--arrival" },
10041
+ React__default["default"].createElement("strong", null,
10042
+ details.arrivalTime,
10043
+ " ",
10044
+ details.arrivalAirport),
10045
+ React__default["default"].createElement("p", null, getDateText(details.arrivalDate)),
10046
+ details.isNextDay && (React__default["default"].createElement("span", { className: "flight__info__times__days" }, translations.FLIGHTS_FORM.PLUS_ONE_DAY))))),
10047
+ React__default["default"].createElement("div", { className: "flight__detail__btn__wrapper" },
10048
+ React__default["default"].createElement("div", { className: buildClassName(["flight__detail__btn", isDetailVisible && "flight__detail__btn--active"]), onClick: function () { return setIsDetailVisible(!isDetailVisible); } },
10049
+ React__default["default"].createElement("svg", { width: 16, height: 16, className: "flight__detail__btn__arrow" },
10050
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#chevron" }))))),
10051
+ React__default["default"].createElement("div", { className: buildClassName(["flight__detail", isDetailVisible && "flight__detail--active"]) }, details.flightLines.map(function (flightLine, flightLineIndex) { return (React__default["default"].createElement(React__default["default"].Fragment, { key: flightLineIndex },
10052
+ React__default["default"].createElement("div", { className: "flight__info" },
10053
+ React__default["default"].createElement("div", { className: "flight__info__times__wrapper" },
10054
+ React__default["default"].createElement("div", { className: "flight__info__times" },
10055
+ React__default["default"].createElement("strong", null,
10056
+ flightLine.departureTime,
10057
+ " ",
10058
+ flightLine.departureAirport),
10059
+ React__default["default"].createElement("p", null, getDateText(flightLine.departureDate))),
10060
+ React__default["default"].createElement("div", null,
10061
+ React__default["default"].createElement("svg", { width: 30, height: 20 },
10062
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#plane-depart" })))),
10063
+ React__default["default"].createElement("div", { className: "flight__info__duration" },
10064
+ React__default["default"].createElement("p", null, flightLine.travelDuration),
10065
+ React__default["default"].createElement("div", { className: "flight__info__duration__stops" }),
10066
+ React__default["default"].createElement("span", null, flightLine.airline),
10067
+ React__default["default"].createElement("strong", null, flightLine.number)),
10068
+ React__default["default"].createElement("div", { className: "flight__info__times__wrapper flight__info__times__wrapper--arrival" },
10069
+ React__default["default"].createElement("div", null,
10070
+ React__default["default"].createElement("svg", { width: 35, height: 25 },
10071
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#plane-arive" }))),
10072
+ React__default["default"].createElement("div", { className: "flight__info__times flight__info__times--arrival" },
10073
+ React__default["default"].createElement("strong", null,
10074
+ flightLine.arrivalTime,
10075
+ " ",
10076
+ flightLine.arrivalAirport),
10077
+ React__default["default"].createElement("p", null, getDateText(flightLine.arrivalDate))))),
10078
+ flightLine.waitDuration && (React__default["default"].createElement("div", { className: "flight__info" },
10079
+ React__default["default"].createElement("div", { className: "flight__info__times" }),
10080
+ React__default["default"].createElement("div", { className: "flight__info__duration flight__info__duration--waittime" },
10081
+ React__default["default"].createElement("div", { className: "flight__info__duration__stops flight__info__duration__stops--stoptime" },
10082
+ React__default["default"].createElement("svg", { width: 20, height: 20 },
10083
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#clock" }))),
10084
+ React__default["default"].createElement("div", { className: "flight__info__duration__stoptime" },
10085
+ React__default["default"].createElement("span", null, translations.FLIGHTS_FORM.STOP_TIME),
10086
+ React__default["default"].createElement("strong", null, flightLine.waitDuration))),
10087
+ React__default["default"].createElement("div", { className: "flight__info__times flight__info__times--arrival" }))))); })),
10088
+ React__default["default"].createElement("div", { className: buildClassName(["flight__rate", isOptionsVisible && "flight__rate--active"]) })));
10089
+ };
10090
+
10091
+ var FlightOption = function (_a) {
10092
+ var item = _a.item, isSelected = _a.isSelected, currentPrice = _a.currentPrice, onChange = _a.onChange;
10093
+ var translations = reactRedux.useSelector(selectTranslations);
10094
+ var ownTotalPrice = item.selectedOutward.price + item.selectedReturn.price;
10095
+ var priceDifference = item.isSelected
10096
+ ? 0
10097
+ : ownTotalPrice - currentPrice;
10098
+ var outwardVisible = React.useState(false)[0];
10099
+ var returnVisible = React.useState(false)[0];
10100
+ var handleButtonClick = function () {
10101
+ if (!item.isSelected)
10102
+ onChange(item);
10103
+ };
10104
+ return (React__default["default"].createElement("div", { className: "flight__option" },
10105
+ React__default["default"].createElement("div", { className: "flight__content" },
10106
+ React__default["default"].createElement("div", { className: "flight__flights" },
10107
+ React__default["default"].createElement("div", { className: "flight__flight" },
10108
+ React__default["default"].createElement("div", { className: "flight__flight__header" },
10109
+ React__default["default"].createElement("div", { className: "flight__status__container" }),
10110
+ React__default["default"].createElement("div", { className: "flight__price" },
10111
+ !isSelected && (React__default["default"].createElement("span", { className: buildClassName(["price",
10112
+ priceDifference > 0 && "price--increase",
10113
+ priceDifference < 0 && "price--decrease"
10114
+ ]) }, getPriceDifferenceText(priceDifference))),
10115
+ React__default["default"].createElement("button", { type: "button", className: "cta ".concat(isSelected ? 'cta--selected' : 'cta--secondary'), onClick: handleButtonClick }, isSelected ? translations.SHARED.SELECTED : translations.SHARED.SELECT)))),
10116
+ React__default["default"].createElement(FlightOptionFlight, { details: item.outward, isOptionsVisible: outwardVisible }),
10117
+ React__default["default"].createElement(FlightOptionFlight, { details: item.return, isOptionsVisible: returnVisible })))));
10118
+ };
10119
+
10120
+ var FlightOptionModal = function (_a) {
10121
+ return (React__default["default"].createElement("div", { className: "flight__rate__modal__container" },
10122
+ " ",
10123
+ React__default["default"].createElement("div", { className: "flight__rate__modal" },
10124
+ React__default["default"].createElement("div", { className: "flight__rate__modal__header" },
10125
+ React__default["default"].createElement("h3", { className: "flight__rate__modal__header__title" }, "Selecteer een tarief"),
10126
+ React__default["default"].createElement("button", { className: "flight__rate__modal__header__close" },
10127
+ React__default["default"].createElement("svg", { width: 18, height: 18 },
10128
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#close" })))),
10129
+ React__default["default"].createElement("div", { className: "flight__rate__modal__tabs" },
10130
+ React__default["default"].createElement("button", { className: "flight__rate__modal__tab flight__rate__modal__tab--active" }, "Economy / Economy premium"),
10131
+ React__default["default"].createElement("button", { className: "flight__rate__modal__tab" }, "Business / Business premium")),
10132
+ React__default["default"].createElement("div", { className: "flight__rate__modal__content" },
10133
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card" },
10134
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__wrapper" },
10135
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__header" },
10136
+ React__default["default"].createElement("h3", { className: "flight__rate__modal__card__header__title" }, "Economy Basic"),
10137
+ React__default["default"].createElement("p", { className: "flight__rate__modal__card__header__class" }, "Klasse: Economy")),
10138
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__items flight__rate__modal__card__items--top" },
10139
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item flight__rate__modal__card__item--disabled" },
10140
+ React__default["default"].createElement("svg", { width: 20, height: 20 },
10141
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#ticket" })),
10142
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item__wrapper" },
10143
+ React__default["default"].createElement("strong", null, "Wijzigingen in het ticket"),
10144
+ React__default["default"].createElement("p", null, "Wijzigingen toestaan"))),
10145
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item flight__rate__modal__card__item--disabled" },
10146
+ React__default["default"].createElement("svg", { width: 20, height: 20 },
10147
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#payback" })),
10148
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item__wrapper" },
10149
+ React__default["default"].createElement("strong", null, "Terugbetaling van ticket"),
10150
+ React__default["default"].createElement("p", null, "Ticket retourneerbaar")))),
10151
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__items" },
10152
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item" },
10153
+ React__default["default"].createElement("svg", { width: 20, height: 20 },
10154
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#shopping-bag" })),
10155
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item__wrapper" },
10156
+ React__default["default"].createElement("strong", null, "persoonlijke items"),
10157
+ React__default["default"].createElement("p", null, "Gratis"))),
10158
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item" },
10159
+ React__default["default"].createElement("svg", { width: 20, height: 20 },
10160
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#backpack" })),
10161
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item__wrapper" },
10162
+ React__default["default"].createElement("strong", null, "Handbagage"),
10163
+ React__default["default"].createElement("p", null, "Gratis: 2 x 8kg"))),
10164
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item" },
10165
+ React__default["default"].createElement("svg", { width: 20, height: 20 },
10166
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#suitcase" })),
10167
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item__wrapper" },
10168
+ React__default["default"].createElement("strong", null, "Ingecheckte bagage"),
10169
+ React__default["default"].createElement("p", null, "Gratis: 2 x 32kg"))))),
10170
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__footer" },
10171
+ React__default["default"].createElement("button", { className: "cta cta--secondary" }, "Selecteer"),
10172
+ React__default["default"].createElement("span", { className: "price price--increase" }, "+ \u20AC2460,00"))),
10173
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card flight__rate__modal__card--premium" },
10174
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__wrapper" },
10175
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__header" },
10176
+ React__default["default"].createElement("h3", { className: "flight__rate__modal__card__header__title" }, "Premium Economy Basic Plus"),
10177
+ React__default["default"].createElement("p", { className: "flight__rate__modal__card__header__class" }, "Klasse: Economy")),
10178
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__items flight__rate__modal__card__items--top" },
10179
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item" },
10180
+ React__default["default"].createElement("svg", { width: 20, height: 20 },
10181
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#ticket" })),
10182
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item__wrapper" },
10183
+ React__default["default"].createElement("strong", null, "Wijzigingen in het ticket"),
10184
+ React__default["default"].createElement("p", null, "Wijzigingen toestaan"))),
10185
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item" },
10186
+ React__default["default"].createElement("svg", { width: 20, height: 20 },
10187
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#payback" })),
10188
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item__wrapper" },
10189
+ React__default["default"].createElement("strong", null, "Terugbetaling van ticket"),
10190
+ React__default["default"].createElement("p", null, "Ticket retourneerbaar")))),
10191
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__items" },
10192
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item" },
10193
+ React__default["default"].createElement("svg", { width: 20, height: 20 },
10194
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#shopping-bag" })),
10195
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item__wrapper" },
10196
+ React__default["default"].createElement("strong", null, "persoonlijke items"),
10197
+ React__default["default"].createElement("p", null, "Gratis"))),
10198
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item" },
10199
+ React__default["default"].createElement("svg", { width: 20, height: 20 },
10200
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#backpack" })),
10201
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item__wrapper" },
10202
+ React__default["default"].createElement("strong", null, "Handbagage"),
10203
+ React__default["default"].createElement("p", null, "Gratis: 2 x 8kg"))),
10204
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item" },
10205
+ React__default["default"].createElement("svg", { width: 20, height: 20 },
10206
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#suitcase" })),
10207
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item__wrapper" },
10208
+ React__default["default"].createElement("strong", null, "Ingecheckte bagage"),
10209
+ React__default["default"].createElement("p", null, "Gratis: 2 x 32kg"))))),
10210
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__footer" },
10211
+ React__default["default"].createElement("button", { className: "cta cta--secondary" }, "Selecteer"),
10212
+ React__default["default"].createElement("span", { className: "price price--increase" }, "+ \u20AC2460,00"))),
10213
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card flight__rate__modal__card--business" },
10214
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__wrapper" },
10215
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__header" },
10216
+ React__default["default"].createElement("h3", { className: "flight__rate__modal__card__header__title" }, "Business Basic Plus"),
10217
+ React__default["default"].createElement("p", { className: "flight__rate__modal__card__header__class" }, "Klasse: Economy")),
10218
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__items flight__rate__modal__card__items--top" },
10219
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item" },
10220
+ React__default["default"].createElement("svg", { width: 20, height: 20 },
10221
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#ticket" })),
10222
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item__wrapper" },
10223
+ React__default["default"].createElement("strong", null, "Wijzigingen in het ticket"),
10224
+ React__default["default"].createElement("p", null, "Wijzigingen toestaan"))),
10225
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item flight__rate__modal__card__item--disabled" },
10226
+ React__default["default"].createElement("svg", { width: 20, height: 20 },
10227
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#payback" })),
10228
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item__wrapper" },
10229
+ React__default["default"].createElement("strong", null, "Terugbetaling van ticket"),
10230
+ React__default["default"].createElement("p", null, "Ticket retourneerbaar")))),
10231
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__items" },
10232
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item" },
10233
+ React__default["default"].createElement("svg", { width: 20, height: 20 },
10234
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#shopping-bag" })),
10235
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item__wrapper" },
10236
+ React__default["default"].createElement("strong", null, "persoonlijke items"),
10237
+ React__default["default"].createElement("p", null, "Gratis"))),
10238
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item" },
10239
+ React__default["default"].createElement("svg", { width: 20, height: 20 },
10240
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#backpack" })),
10241
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item__wrapper" },
10242
+ React__default["default"].createElement("strong", null, "Handbagage"),
10243
+ React__default["default"].createElement("p", null, "Gratis: 2 x 8kg"))),
10244
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item" },
10245
+ React__default["default"].createElement("svg", { width: 20, height: 20 },
10246
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#suitcase" })),
10247
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item__wrapper" },
10248
+ React__default["default"].createElement("strong", null, "Ingecheckte bagage"),
10249
+ React__default["default"].createElement("p", null, "Gratis: 2 x 32kg"))),
10250
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item" },
10251
+ React__default["default"].createElement("svg", { width: 20, height: 20 },
10252
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#seat-selection" })),
10253
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item__wrapper" },
10254
+ React__default["default"].createElement("strong", null, "Stoelselectie"),
10255
+ React__default["default"].createElement("p", null, "kies uw stoel in het vliegtijg"))),
10256
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item" },
10257
+ React__default["default"].createElement("svg", { width: 20, height: 20 },
10258
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#check-in" })),
10259
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item__wrapper" },
10260
+ React__default["default"].createElement("strong", null, "Sneller inchecken"),
10261
+ React__default["default"].createElement("p", null, "Sla de wachtrijen voor de veiligheidscontrole over"))),
10262
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item" },
10263
+ React__default["default"].createElement("svg", { width: 20, height: 20 },
10264
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#business-lounge" })),
10265
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item__wrapper" },
10266
+ React__default["default"].createElement("strong", null, "Zakenlunge"),
10267
+ React__default["default"].createElement("p", null, "Ontspan voor uw vlucht"))),
10268
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item" },
10269
+ React__default["default"].createElement("svg", { width: 20, height: 20 },
10270
+ React__default["default"].createElement("use", { href: "/icons/svg-sprite.svg#priority" })),
10271
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__item__wrapper" },
10272
+ React__default["default"].createElement("strong", null, "Prioriteit"),
10273
+ React__default["default"].createElement("p", null, "Stap voor anderen aan boord"))))),
10274
+ React__default["default"].createElement("div", { className: "flight__rate__modal__card__footer" },
10275
+ React__default["default"].createElement("button", { className: "cta cta--secondary" }, "Selecteer"),
10276
+ React__default["default"].createElement("span", { className: "price price--increase" }, "+ \u20AC2460,00")))),
10277
+ React__default["default"].createElement("div", { className: "flight__rate__modal__footer" },
10278
+ React__default["default"].createElement("button", { className: "cta cta--secondary" }, "Toepassen")))));
10279
+ };
10280
+
10281
+ var FlightOptionsForm = function () {
10282
+ var _a, _b, _c, _d;
10283
+ var settings = React.useContext(SettingsContext);
10284
+ var translations = reactRedux.useSelector(selectTranslations);
10285
+ var dispatch = useAppDispatch();
10286
+ var packageDetails = reactRedux.useSelector(selectPackageDetails);
10287
+ var bookingQueryString = reactRedux.useSelector(selectBookingQueryString);
10288
+ var isLoading = reactRedux.useSelector(selectIsFetchingProductOptions);
10289
+ var flights = reactRedux.useSelector(selectPackageFlights);
10290
+ var _e = React.useState(), filterOptions = _e[0], setFilterOptions = _e[1];
10291
+ var _f = React.useState([]), flightGroups = _f[0], setFlightGroups = _f[1];
10292
+ var handleSubmit = function (e) {
10293
+ if (settings.skipRouter) {
10294
+ dispatch(setCurrentStep(ROOM_OPTIONS_FORM_STEP));
10295
+ }
10296
+ else {
10297
+ if (settings.roomOptions.isHidden) {
10298
+ router.navigate("".concat(settings.basePath).concat(settings.options.pathSuffix, "?").concat(bookingQueryString));
10299
+ }
10300
+ else {
10301
+ router.navigate("".concat(settings.basePath).concat(settings.roomOptions.pathSuffix, "?").concat(bookingQueryString));
10302
+ }
10303
+ }
10304
+ e.preventDefault();
10305
+ };
10306
+ var currentFlightPrice = (((_b = (_a = flights.outward) === null || _a === void 0 ? void 0 : _a.find(function (x) { return x.isSelected; })) === null || _b === void 0 ? void 0 : _b.price) || 0)
10307
+ + (((_d = (_c = flights.return) === null || _c === void 0 ? void 0 : _c.find(function (x) { return x.isSelected; })) === null || _d === void 0 ? void 0 : _d.price) || 0);
10308
+ React.useEffect(function () {
10309
+ var _a, _b;
10310
+ if (packageDetails && settings.roomOptions.isHidden) {
10311
+ var params = new URLSearchParams(location.search);
10312
+ var outwardFlight_1 = (_a = params.get("outwardflight")) !== null && _a !== void 0 ? _a : undefined;
10313
+ var returnFlight_1 = (_b = params.get("returnflight")) !== null && _b !== void 0 ? _b : undefined;
10314
+ if (outwardFlight_1 && returnFlight_1) {
10315
+ var desiredOutwardFlight_1 = packageDetails.outwardFlights.find(function (x) { return x.entryLineGuid == outwardFlight_1; });
10316
+ var desiredReturnFlight_1 = packageDetails.returnFlights.find(function (x) { return x.entryLineGuid == returnFlight_1; });
10317
+ if (desiredOutwardFlight_1 && desiredReturnFlight_1) {
10318
+ dispatch(setPackage(__assign(__assign({}, packageDetails), { outwardFlights: packageDetails.outwardFlights.map(function (flight) {
10319
+ return __assign(__assign({}, flight), { isSelected: flight.entryLineGuid == desiredOutwardFlight_1.entryLineGuid
10320
+ ? true
10321
+ : false });
10322
+ }), returnFlights: packageDetails.returnFlights.map(function (flight) {
10323
+ return __assign(__assign({}, flight), { isSelected: flight.entryLineGuid == desiredReturnFlight_1.entryLineGuid
10324
+ ? true
10325
+ : false });
10326
+ }) })));
10327
+ }
10328
+ }
10329
+ }
10330
+ dispatch(fetchPriceDetails());
10331
+ var filters = buildFilterOptions(flights.outward, flights.return, translations);
10332
+ setFilterOptions(filters);
10333
+ }, []);
10334
+ React.useEffect(function () {
10335
+ var groups = buildGroupedFlights(flights.outward, flights.return);
10336
+ setFlightGroups(groups);
10337
+ }, [flights]);
10338
+ var filteredGroups = filterGroupedFlights(flightGroups, filterOptions);
10339
+ var resultCount = filteredGroups.length;
10340
+ return (React__default["default"].createElement(React__default["default"].Fragment, null,
10341
+ React__default["default"].createElement(FlightOptionModal, null),
10342
+ React__default["default"].createElement("form", { className: "form", name: "booking--flights", id: "booking--flights", noValidate: true, onSubmit: handleSubmit },
10343
+ isLoading && settings.loaderComponent,
10344
+ !isLoading && (React__default["default"].createElement("div", { className: "form__group" },
10345
+ React__default["default"].createElement("div", { className: "booking-card" },
10346
+ React__default["default"].createElement("div", { className: "booking-card__body" },
10347
+ filterOptions && (React__default["default"].createElement(FlightFilter, { filterOptions: filterOptions, resultCount: resultCount, applyFilter: setFilterOptions })),
10348
+ React__default["default"].createElement("div", { className: "booking-card__group" },
10349
+ React__default["default"].createElement("div", { className: "flight outward__flights" },
10350
+ lodash.isEmpty(filteredGroups) && (React__default["default"].createElement("p", null, translations.FLIGHTS_FORM.NO_FLIGHTS_FOUND)),
10351
+ !lodash.isEmpty(filteredGroups) && filteredGroups.map(function (flight, index) { return (React__default["default"].createElement(FlightOption, { key: index, item: flight, isSelected: flight.isSelected, currentPrice: currentFlightPrice, onChange: function (item) {
10352
+ dispatch(setFlights(item));
10353
+ dispatch(fetchPriceDetails());
10354
+ } })); }))))))),
10355
+ React__default["default"].createElement("div", { className: "booking__navigator" },
10356
+ React__default["default"].createElement("button", { type: "submit", title: translations.STEPS.NEXT, disabled: isLoading, className: buildClassName(["cta", isLoading && "cta--disabled"]) }, translations.STEPS.NEXT)))));
10357
+ };
10358
+
10359
+ var buildSelectableRooms = function (packageRooms, accommodations, regimes, accommodationViews) {
10360
+ return packageRooms.map(function (x) {
10361
+ var _a, _b;
10362
+ var selectedOption = x.options.find(function (x) { return x.isSelected; });
10363
+ var alternativeOptions = x.options
10364
+ .filter(function (x) { return x.accommodationCode !== selectedOption.accommodationCode && !x.isLocked; })
10365
+ .sort(function (a, b) { return a.price - b.price; });
10366
+ var alternativeAccommodations = [];
10367
+ alternativeOptions.forEach(function (x) {
10368
+ var _a, _b, _c, _d;
10369
+ var alternativeAccommodation = alternativeAccommodations.find(function (y) { return y.code === x.accommodationCode; });
10370
+ if (alternativeAccommodation) {
10371
+ var regime = regimes === null || regimes === void 0 ? void 0 : regimes.find(function (y) { return y.code === x.regimeCode; });
10372
+ alternativeAccommodation.regimes.push({
10373
+ code: x.regimeCode,
10374
+ title: (_a = regime === null || regime === void 0 ? void 0 : regime.title) !== null && _a !== void 0 ? _a : x.regimeName,
10375
+ price: x.price
10376
+ });
10377
+ }
10378
+ else {
10379
+ var accommodation_1 = accommodations === null || accommodations === void 0 ? void 0 : accommodations.find(function (y) { return y.code === x.accommodationCode; });
10380
+ var regime = regimes === null || regimes === void 0 ? void 0 : regimes.find(function (y) { return y.code === x.regimeCode; });
10381
+ alternativeAccommodations.push({
10382
+ code: x.accommodationCode,
10383
+ regimeCode: x.regimeCode,
10384
+ from: x.from,
10385
+ to: x.to,
10386
+ price: x.price,
10387
+ regimes: [{
10388
+ code: x.regimeCode,
10389
+ title: (_b = regime === null || regime === void 0 ? void 0 : regime.title) !== null && _b !== void 0 ? _b : x.regimeName,
10390
+ price: x.price
10391
+ }],
10392
+ title: (_c = accommodation_1 === null || accommodation_1 === void 0 ? void 0 : accommodation_1.title) !== null && _c !== void 0 ? _c : x.accommodationName,
10393
+ image: accommodation_1 === null || accommodation_1 === void 0 ? void 0 : accommodation_1.imageUrl,
10394
+ usps: (_d = accommodation_1 === null || accommodation_1 === void 0 ? void 0 : accommodation_1.usps) !== null && _d !== void 0 ? _d : [],
10395
+ description: accommodation_1 === null || accommodation_1 === void 0 ? void 0 : accommodation_1.description,
10396
+ viewHtml: accommodationViews === null || accommodationViews === void 0 ? void 0 : accommodationViews[x.accommodationCode]
10397
+ });
10398
+ }
10399
+ });
10400
+ var accommodation = accommodations === null || accommodations === void 0 ? void 0 : accommodations.find(function (y) { return y.code === selectedOption.accommodationCode; });
10401
+ return {
10402
+ index: x.index,
10403
+ selected: {
10404
+ code: selectedOption.accommodationCode,
10405
+ regimeCode: selectedOption.regimeCode,
10406
+ price: selectedOption.price,
10407
+ from: selectedOption.from,
10408
+ to: selectedOption.to,
10409
+ regimes: x.options
10410
+ .filter(function (x) { return x.accommodationCode === selectedOption.accommodationCode; })
10411
+ .sort(function (a, b) { return a.price - b.price; })
10412
+ .map(function (o) {
10413
+ var _a;
10414
+ var regime = regimes === null || regimes === void 0 ? void 0 : regimes.find(function (y) { return y.code === o.regimeCode; });
10415
+ return {
10416
+ code: o.regimeCode,
10417
+ title: (_a = regime === null || regime === void 0 ? void 0 : regime.title) !== null && _a !== void 0 ? _a : o.regimeName,
10418
+ price: o.price
10419
+ };
10420
+ }),
10421
+ title: (_a = accommodation === null || accommodation === void 0 ? void 0 : accommodation.title) !== null && _a !== void 0 ? _a : selectedOption.accommodationName,
10422
+ image: accommodation === null || accommodation === void 0 ? void 0 : accommodation.imageUrl,
10423
+ usps: (_b = accommodation === null || accommodation === void 0 ? void 0 : accommodation.usps) !== null && _b !== void 0 ? _b : [],
10424
+ description: accommodation === null || accommodation === void 0 ? void 0 : accommodation.description,
10425
+ viewHtml: accommodationViews === null || accommodationViews === void 0 ? void 0 : accommodationViews[selectedOption.accommodationCode]
10426
+ },
10427
+ showAlternatives: false,
10428
+ alternatives: alternativeAccommodations
10429
+ };
10430
+ });
10431
+ };
10432
+ var updatePackageRooms = function (rooms, index, accommodationCode, regimeCode, availabilities) {
10433
+ var updatedRooms = rooms.map(function (room) {
10434
+ if (room.index !== index)
10435
+ return room;
10436
+ return __assign(__assign({}, room), { options: room.options.map(function (option) {
10437
+ return __assign(__assign({}, option), { isSelected: option.accommodationCode === accommodationCode &&
10438
+ (option.regimeCode === regimeCode || (option.regimeCode === null && regimeCode === '')) });
10439
+ }) });
10440
+ });
10441
+ var selectedAccommodations = new Map();
10442
+ updatedRooms.map(function (x) { return x.options.find(function (x) { return x.isSelected; }); }).forEach(function (x) {
10443
+ if (selectedAccommodations.has(x.accommodationCode)) {
10444
+ selectedAccommodations.set(x.accommodationCode, selectedAccommodations.get(x.accommodationCode) + 1);
10445
+ }
10446
+ else {
10447
+ selectedAccommodations.set(x.accommodationCode, 1);
10448
+ }
10449
+ });
10450
+ var accoCounter = availabilities.map(function (x) { return ({ code: x.code, count: x.count }); });
10451
+ return updatedRooms.map(function (room) {
10452
+ var selectedOption = room.options.find(function (x) { return x.isSelected; });
10453
+ return __assign(__assign({}, room), { options: room.options.map(function (option) {
10454
+ var _a, _b, _c;
10455
+ var isCurrentOption = selectedOption.accommodationCode === option.accommodationCode;
10456
+ var usedCount = (_a = selectedAccommodations.get(option.accommodationCode)) !== null && _a !== void 0 ? _a : 0;
10457
+ var availability = availabilities.find(function (x) { return x.code === option.accommodationCode; });
10458
+ if (availability) {
10459
+ var accoCount = accoCounter.find(function (x) { return x.code === option.accommodationCode; });
10460
+ var roomsLeft = availability.count - usedCount;
10461
+ var isOnRequest = isCurrentOption
10462
+ ? accoCount.count < 0 && ((_b = availability === null || availability === void 0 ? void 0 : availability.onRequestPossible) !== null && _b !== void 0 ? _b : false)
10463
+ : roomsLeft < 0 && ((_c = availability === null || availability === void 0 ? void 0 : availability.onRequestPossible) !== null && _c !== void 0 ? _c : false);
10464
+ if (isCurrentOption)
10465
+ accoCount.count--;
10466
+ return __assign(__assign({}, option), { isLocked: !option.isSelected && !isOnRequest && roomsLeft < 0 && !availability.isExternal, isOnRequest: isOnRequest });
10467
+ }
10468
+ else {
10469
+ return option;
10470
+ }
10471
+ }) });
10472
+ });
10473
+ };
10474
+
10475
+ var NoOptions = function () {
10476
+ var translations = reactRedux.useSelector(selectTranslations);
10477
+ return (React__default["default"].createElement("div", { className: "form__group" },
10478
+ React__default["default"].createElement(Message, { type: "success", title: translations.OPTIONS_FORM.NO_OPTIONS_TITLE },
10479
+ React__default["default"].createElement("p", null, translations.OPTIONS_FORM.NO_OPTIONS_MESSAGE))));
10480
+ };
10481
+
10482
+ var NoneOption = function (_a) {
10483
+ var group = _a.group, parentId = _a.parentId, handleNoneSelectionChanged = _a.handleNoneSelectionChanged;
10484
+ var translations = reactRedux.useSelector(selectTranslations);
10485
+ var selectedOption = group.options.find(function (x) { return x.isSelected; });
10486
+ var showNoneOption = group.options.some(function (x) { return x.requirementType === 2; });
10487
+ var noneSelected = !selectedOption;
10488
+ var priceDifferencetext = selectedOption
10489
+ ? "- ".concat(formatPrice(Math.abs(selectedOption.line.price)))
10490
+ : "";
10491
+ return (React__default["default"].createElement(React__default["default"].Fragment, null, showNoneOption && (React__default["default"].createElement("tr", null,
10492
+ React__default["default"].createElement("td", null,
10493
+ React__default["default"].createElement("div", { className: buildClassName([
10494
+ "tree",
10495
+ noneSelected && "tree--selected",
10496
+ ]) },
10497
+ React__default["default"].createElement("div", { className: "tree__level" },
10498
+ React__default["default"].createElement("div", { className: "tree__header" },
10499
+ React__default["default"].createElement("div", { className: "tree__description-collapse" },
10500
+ React__default["default"].createElement("div", { className: "radiobutton" },
10501
+ React__default["default"].createElement("div", { className: "radiobutton__label" },
10502
+ React__default["default"].createElement("input", { type: "radio", value: undefined, id: "".concat(parentId, "_NONE"), name: parentId, className: buildClassName([
10503
+ "radiobutton__input",
10504
+ "radiobutton__input--parent",
10505
+ ]), defaultChecked: noneSelected, onChange: handleNoneSelectionChanged }),
10506
+ React__default["default"].createElement("span", { className: "radiobutton__label-text" },
10507
+ React__default["default"].createElement("div", { className: "date-list" },
10508
+ React__default["default"].createElement("span", { className: buildClassName([
10509
+ "date-list__item",
10510
+ "date-list__item--none",
10511
+ ]) }))),
10512
+ React__default["default"].createElement("div", { className: "tree__columns-actions" },
10513
+ React__default["default"].createElement("div", { className: "tree__columns" },
10514
+ React__default["default"].createElement("div", { className: "tree__column" },
10515
+ React__default["default"].createElement("label", { htmlFor: "".concat(parentId, "_NONE"), className: buildClassName([
10516
+ "tree__product-name",
10517
+ "tree__product-name--none",
10518
+ ]) }, translations.OPTIONS_FORM.NONE)),
10519
+ React__default["default"].createElement("div", { className: "tree__column" }),
10520
+ React__default["default"].createElement("div", { className: "tree__column" }),
10521
+ React__default["default"].createElement("div", { className: buildClassName([
10522
+ "tree__column",
10523
+ "tree__column--price",
10524
+ ]) }, !noneSelected && (React__default["default"].createElement("span", { className: buildClassName([
10525
+ "price",
10526
+ "price--decrease",
10527
+ ]) }, priceDifferencetext))))))))))))))));
10528
+ };
10529
+
9593
10530
  var OptionItem = function (_a) {
9594
10531
  var _b;
9595
10532
  var option = _a.option, parentId = _a.parentId, index = _a.index, selectedPrice = _a.selectedPrice, onOptionChange = _a.onOptionChange;
@@ -10085,10 +11022,9 @@ var OptionRoom = function (_a) {
10085
11022
  }
10086
11023
  }
10087
11024
  var accommodations = lodash.uniqBy(lodash.compact(packageRoom &&
10088
- packageRoom.options.map(function (option) {
10089
- if (!option.accommodationCode) {
10090
- return undefined;
10091
- }
11025
+ packageRoom.options
11026
+ .filter(function (x) { return x.accommodationCode && !x.isLocked; })
11027
+ .map(function (option) {
10092
11028
  return {
10093
11029
  accommodationCode: option.accommodationCode,
10094
11030
  accommodationName: option.accommodationName,
@@ -10244,6 +11180,7 @@ var OptionsForm = function () {
10244
11180
  var airportGroups = reactRedux.useSelector(selectPackageAirportGroups);
10245
11181
  var optionUnits = reactRedux.useSelector(selectPackageOptionUnits);
10246
11182
  var optionPax = reactRedux.useSelector(selectPackageOptionPax);
11183
+ var availabilities = reactRedux.useSelector(selectAvailabilities);
10247
11184
  // ROOMS
10248
11185
  var showRoomOptions = settings.roomOptions.isHidden;
10249
11186
  var packageRooms = reactRedux.useSelector(selectPackageRooms);
@@ -10259,14 +11196,7 @@ var OptionsForm = function () {
10259
11196
  var handleOnRoomChange = function (index, accommodationCode, regimeCode) {
10260
11197
  if (!packageRooms)
10261
11198
  return;
10262
- var updatedPackageRooms = packageRooms.map(function (room) {
10263
- if (room.index !== index)
10264
- return room;
10265
- return __assign(__assign({}, room), { options: room.options.map(function (option) {
10266
- return __assign(__assign({}, option), { isSelected: option.accommodationCode === accommodationCode &&
10267
- option.regimeCode === regimeCode });
10268
- }) });
10269
- });
11199
+ var updatedPackageRooms = updatePackageRooms(packageRooms, index, accommodationCode, regimeCode, availabilities);
10270
11200
  dispatch(setPackageRooms(updatedPackageRooms));
10271
11201
  dispatch(fetchPriceDetails());
10272
11202
  };
@@ -10355,22 +11285,23 @@ var OptionsForm = function () {
10355
11285
  dispatch(fetchPriceDetails());
10356
11286
  }, []);
10357
11287
  var goPrevious = function () {
10358
- if (settings.flightOptions.isHidden) {
10359
- dispatch(setCurrentStep(ROOM_OPTIONS_FORM_STEP));
11288
+ if (settings.roomOptions.isHidden) {
11289
+ dispatch(setCurrentStep(FLIGHT_OPTIONS_FORM_STEP));
10360
11290
  }
10361
11291
  else {
10362
- dispatch(setCurrentStep(FLIGHT_OPTIONS_FORM_STEP));
11292
+ dispatch(setCurrentStep(ROOM_OPTIONS_FORM_STEP));
10363
11293
  }
10364
11294
  };
10365
- var previousUrl = settings.flightOptions.isHidden
10366
- ? "".concat(settings.basePath).concat(settings.roomOptions.pathSuffix, "?").concat(bookingQueryString)
10367
- : "".concat(settings.basePath).concat(settings.flightOptions.pathSuffix, "?").concat(bookingQueryString);
11295
+ var previousUrl = settings.roomOptions.isHidden
11296
+ ? "".concat(settings.basePath).concat(settings.flightOptions.pathSuffix, "?").concat(bookingQueryString)
11297
+ : "".concat(settings.basePath).concat(settings.roomOptions.pathSuffix, "?").concat(bookingQueryString);
10368
11298
  var hasPrevious = !settings.roomOptions.isHidden || !settings.flightOptions.isHidden;
11299
+ var showPackageTagsOrRoomoptions = showRoomOptions || (packageTags && !lodash.isEmpty(packageTags));
10369
11300
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
10370
11301
  React__default["default"].createElement("form", { className: "form", name: "booking--options", id: "booking--options", noValidate: true, onSubmit: handleSubmit },
10371
11302
  isLoading && settings.loaderComponent,
10372
11303
  !isLoading && (React__default["default"].createElement("div", { className: "form__region" },
10373
- packageTags && (React__default["default"].createElement("div", { className: "form__group" },
11304
+ showPackageTagsOrRoomoptions && (React__default["default"].createElement("div", { className: "form__group" },
10374
11305
  React__default["default"].createElement("div", { className: "booking-card" },
10375
11306
  React__default["default"].createElement("div", { className: "booking-card__body" },
10376
11307
  React__default["default"].createElement("div", { className: buildClassName([
@@ -10382,14 +11313,14 @@ var OptionsForm = function () {
10382
11313
  showRoomOptions && (React__default["default"].createElement("table", { className: "table table--striped" },
10383
11314
  React__default["default"].createElement("tbody", null, packageRooms &&
10384
11315
  packageRooms.map(function (room) { return (React__default["default"].createElement(OptionRoom, { key: room.index, packageRoom: room, pax: getRoomPax(room.index), optionPax: optionPax, onRoomChange: handleOnRoomChange })); })))),
10385
- React__default["default"].createElement("div", { className: "booking-card__tag-translations" }, packageTags.map(function (tag, index) { return (React__default["default"].createElement("label", { key: index, htmlFor: "tag-translation-".concat(index, "-").concat(tag.title), className: "checkbox__label tag-translation" },
11316
+ packageTags && !lodash.isEmpty(packageTags) && (React__default["default"].createElement("div", { className: "booking-card__tag-translations" }, packageTags.map(function (tag, index) { return (React__default["default"].createElement("label", { key: index, htmlFor: "tag-translation-".concat(index, "-").concat(tag.title), className: "checkbox__label tag-translation" },
10386
11317
  React__default["default"].createElement("div", { className: "tag-translation-input__container" },
10387
11318
  React__default["default"].createElement("input", { type: "checkbox", id: "tag-translation-".concat(index, "-").concat(tag.title), name: "tag-translation-".concat(index, "-").concat(tag.title), className: "checkbox__input", checked: tagIds === null || tagIds === void 0 ? void 0 : tagIds.includes(tag.id), onChange: function (e) {
10388
11319
  return handleOnTagChange(tag.id, e.target.checked);
10389
11320
  } })),
10390
11321
  React__default["default"].createElement("span", { className: "tag-translation__title" }, tag.title),
10391
11322
  "\u00A0",
10392
- React__default["default"].createElement("span", { className: "tag-translation__description" }, tag.description))); })))))))),
11323
+ React__default["default"].createElement("span", { className: "tag-translation__description" }, tag.description))); }))))))))),
10393
11324
  optionUnits && !lodash.isEmpty(optionUnits) && (React__default["default"].createElement("div", { className: "form__group" },
10394
11325
  React__default["default"].createElement("div", { className: "booking-card" },
10395
11326
  React__default["default"].createElement("div", { className: "booking-card__header" },
@@ -10417,28 +11348,112 @@ var OptionsForm = function () {
10417
11348
  React__default["default"].createElement("button", { type: "submit", title: translations.STEPS.NEXT, disabled: isLoading, className: buildClassName(["cta", isLoading && "cta--disabled"]) }, translations.STEPS.NEXT)))));
10418
11349
  };
10419
11350
 
11351
+ var RoomOption = function (_a) {
11352
+ var room = _a.room, hasAlternatives = _a.hasAlternatives, selectedRoomPrice = _a.selectedRoomPrice, onAcommodationChange = _a.onAcommodationChange, onRegimeChange = _a.onRegimeChange, onToggleAlternatives = _a.onToggleAlternatives;
11353
+ var translations = reactRedux.useSelector(selectTranslations);
11354
+ var _b = React.useState(0), roomPrice = _b[0], setRoomPrice = _b[1];
11355
+ var _c = React.useState(room.regimeCode), roomRegimeCode = _c[0], setRoomRegimeCode = _c[1];
11356
+ React.useEffect(function () {
11357
+ setRoomPrice(room.price);
11358
+ }, [room.code, room.regimeCode]);
11359
+ var getPriceDifference = function (selectedPrice, currentPrice) {
11360
+ var priceDifference = (selectedPrice !== null && selectedPrice !== void 0 ? selectedPrice : 0) - currentPrice;
11361
+ if (priceDifference !== 0) {
11362
+ return "(".concat(getPriceDifferenceText(priceDifference), ")");
11363
+ }
11364
+ else {
11365
+ return "";
11366
+ }
11367
+ };
11368
+ var selectAccommodation = function () {
11369
+ if (onAcommodationChange) {
11370
+ onAcommodationChange(room.code, roomRegimeCode);
11371
+ }
11372
+ };
11373
+ var handleRegimeChange = function (e) {
11374
+ var regimeCode = e.currentTarget.value;
11375
+ var option = room.regimes.find(function (x) { return x.code === regimeCode || (x.code === null && regimeCode === ''); });
11376
+ setRoomRegimeCode(option.code);
11377
+ setRoomPrice(option.price);
11378
+ if (onRegimeChange) {
11379
+ onRegimeChange(regimeCode);
11380
+ }
11381
+ e.preventDefault();
11382
+ };
11383
+ return (React__default["default"].createElement(React__default["default"].Fragment, null,
11384
+ React__default["default"].createElement("div", { className: "form__room" },
11385
+ room.viewHtml && (React__default["default"].createElement("div", { className: "form__room__wrapper", dangerouslySetInnerHTML: { __html: room.viewHtml } })),
11386
+ !room.viewHtml && (React__default["default"].createElement("div", { className: "form__room__wrapper" },
11387
+ room.image && (React__default["default"].createElement("div", { className: "form__room__image" },
11388
+ React__default["default"].createElement("img", { src: room.image, alt: "", className: "form__room__img" }))),
11389
+ React__default["default"].createElement("div", { className: "form__room__body" },
11390
+ React__default["default"].createElement("div", { className: "" },
11391
+ React__default["default"].createElement("h3", { className: "form__room__title" }, room.title),
11392
+ room.description && (React__default["default"].createElement("p", { className: "form__room__text" }, room.description)),
11393
+ React__default["default"].createElement("ul", { className: "list--usps form__room__usps" }, room.usps.map(function (usp, uspIndex) { return (React__default["default"].createElement("li", { key: uspIndex, className: "list__item" }, usp)); })))))),
11394
+ React__default["default"].createElement("div", { className: "form__room__footer" },
11395
+ React__default["default"].createElement("div", { className: "form__room__footer__top" },
11396
+ React__default["default"].createElement("p", { className: "form__room__dates" },
11397
+ getDateText(room.from),
11398
+ " - ",
11399
+ getDateText(room.to)),
11400
+ React__default["default"].createElement("span", { className: "form__room__days" }, getDatePeriodText(room.from, room.to))),
11401
+ React__default["default"].createElement("div", { className: "form__room__footer__bottom" },
11402
+ selectedRoomPrice != undefined && (React__default["default"].createElement("p", { className: "form__room__price form__room__price--increase" },
11403
+ React__default["default"].createElement("span", null, getPriceDifference(roomPrice, selectedRoomPrice)))),
11404
+ hasAlternatives && onToggleAlternatives && (React__default["default"].createElement("button", { type: "button", onClick: onToggleAlternatives, className: "form__room__alternatives__btn" }, translations.ROOM_OPTIONS_FORM.SHOW_ALTERNATIVES)),
11405
+ React__default["default"].createElement("div", { className: "select-wrapper" },
11406
+ React__default["default"].createElement("div", { className: "select-wrapper__select" },
11407
+ React__default["default"].createElement("select", { defaultValue: roomRegimeCode, onChange: handleRegimeChange }, room.regimes.map(function (regime) {
11408
+ var _a;
11409
+ return (React__default["default"].createElement("option", { key: regime.code, value: (_a = regime.code) !== null && _a !== void 0 ? _a : "" },
11410
+ regime.title,
11411
+ " ",
11412
+ getPriceDifference(regime.price, roomPrice)));
11413
+ })))),
11414
+ React__default["default"].createElement("button", { type: "button", onClick: selectAccommodation, className: buildClassName(['cta', selectedRoomPrice ? 'cta--secondary' : 'cta--selected']) }, selectedRoomPrice ? translations.SHARED.SELECT : translations.SHARED.SELECTED))))));
11415
+ };
11416
+
11417
+ var TravelerRooms = function (_a) {
11418
+ var index = _a.index, room = _a.room, onRoomChange = _a.onRoomChange;
11419
+ var translations = reactRedux.useSelector(selectTranslations);
11420
+ var _b = React.useState(false), showAlternatives = _b[0], setShowAlternatives = _b[1];
11421
+ var selectedAccommodationCode = room.selected.code;
11422
+ return (React__default["default"].createElement("div", { key: room.index },
11423
+ React__default["default"].createElement("div", { className: "form__room__header" },
11424
+ React__default["default"].createElement("h5", null,
11425
+ translations.ROOM_OPTIONS_FORM.TRAVELER_GROUP,
11426
+ " ",
11427
+ room.index + 1)),
11428
+ React__default["default"].createElement(RoomOption, { room: room.selected, hasAlternatives: !lodash.isEmpty(room.alternatives), onRegimeChange: function (regimeCode) { return onRoomChange(index, selectedAccommodationCode, regimeCode); }, onToggleAlternatives: function () { return setShowAlternatives(!showAlternatives); } }),
11429
+ !lodash.isEmpty(room.alternatives) && showAlternatives && (React__default["default"].createElement("div", { className: "form__room__alternatives" },
11430
+ React__default["default"].createElement("div", { className: "form__room__alternatives__header" },
11431
+ translations.ROOM_OPTIONS_FORM.ALTERNATIVES_TRAVELER_GROUP,
11432
+ " ",
11433
+ room.index + 1),
11434
+ showAlternatives && (React__default["default"].createElement(React__default["default"].Fragment, null, room.alternatives.map(function (alternative, alternativeIndex) { return (React__default["default"].createElement(RoomOption, { key: alternativeIndex, room: alternative, selectedRoomPrice: room.selected.price, onAcommodationChange: function (accommodationCode, regimeCode) {
11435
+ setShowAlternatives(false);
11436
+ onRoomChange(index, accommodationCode, regimeCode);
11437
+ } })); })))))));
11438
+ };
11439
+
10420
11440
  var RoomOptionsForm = function () {
10421
- var _a = React.useContext(SettingsContext), basePath = _a.basePath, flightOptions = _a.flightOptions, options = _a.options, loaderComponent = _a.loaderComponent, skipRouter = _a.skipRouter;
11441
+ var settings = React.useContext(SettingsContext);
10422
11442
  var translations = reactRedux.useSelector(selectTranslations);
10423
11443
  var dispatch = useAppDispatch();
10424
11444
  var packageDetails = reactRedux.useSelector(selectPackageDetails);
10425
- var requestRooms = reactRedux.useSelector(selectRequestRooms);
10426
- var pax = reactRedux.useSelector(selectBookingPackagePax);
10427
11445
  var packageRooms = reactRedux.useSelector(selectPackageRooms);
11446
+ var availabilities = reactRedux.useSelector(selectAvailabilities);
10428
11447
  var bookingQueryString = reactRedux.useSelector(selectBookingQueryString);
11448
+ var accommodationViews = reactRedux.useSelector(selectAccommodationViews);
10429
11449
  var isLoading = reactRedux.useSelector(selectIsFetchingProductOptions);
10430
- var optionPax = reactRedux.useSelector(selectPackageOptionPax);
10431
- var getRoomPax = function (index) {
10432
- var _a;
10433
- var room = requestRooms === null || requestRooms === void 0 ? void 0 : requestRooms.find(function (x) { return x.index == index; });
10434
- var bookingPackagePax = pax.filter(function (x) {
10435
- return room === null || room === void 0 ? void 0 : room.pax.some(function (y) { return y.id == x.id; });
10436
- });
10437
- return bookingPackagePax.length > 0 ? bookingPackagePax : (_a = room === null || room === void 0 ? void 0 : room.pax) !== null && _a !== void 0 ? _a : [];
11450
+ var rooms = buildSelectableRooms(packageRooms, settings.accommodations, settings.regimes, accommodationViews);
11451
+ var goPrevious = function () {
11452
+ dispatch(setCurrentStep(FLIGHT_OPTIONS_FORM_STEP));
10438
11453
  };
10439
11454
  var handleSubmit = function (e) {
10440
- if (skipRouter) {
10441
- if (flightOptions.isHidden) {
11455
+ if (settings.skipRouter) {
11456
+ if (settings.flightOptions.isHidden) {
10442
11457
  dispatch(setCurrentStep(OPTIONS_FORM_STEP));
10443
11458
  }
10444
11459
  else {
@@ -10446,26 +11461,14 @@ var RoomOptionsForm = function () {
10446
11461
  }
10447
11462
  }
10448
11463
  else {
10449
- if (flightOptions.isHidden) {
10450
- router.navigate("".concat(basePath).concat(options.pathSuffix, "?").concat(bookingQueryString));
10451
- }
10452
- else {
10453
- router.navigate("".concat(basePath).concat(flightOptions.pathSuffix, "?").concat(bookingQueryString));
10454
- }
11464
+ router.navigate("".concat(settings.basePath).concat(settings.options.pathSuffix, "?").concat(bookingQueryString));
10455
11465
  }
10456
11466
  e.preventDefault();
10457
11467
  };
10458
11468
  var handleOnRoomChange = function (index, accommodationCode, regimeCode) {
10459
11469
  if (!packageRooms)
10460
11470
  return;
10461
- var updatedPackageRooms = packageRooms.map(function (room) {
10462
- if (room.index !== index)
10463
- return room;
10464
- return __assign(__assign({}, room), { options: room.options.map(function (option) {
10465
- return __assign(__assign({}, option), { isSelected: option.accommodationCode === accommodationCode &&
10466
- option.regimeCode === regimeCode });
10467
- }) });
10468
- });
11471
+ var updatedPackageRooms = updatePackageRooms(packageRooms, index, accommodationCode, regimeCode, availabilities);
10469
11472
  dispatch(setPackageRooms(updatedPackageRooms));
10470
11473
  dispatch(fetchPriceDetails());
10471
11474
  };
@@ -10493,61 +11496,11 @@ var RoomOptionsForm = function () {
10493
11496
  }
10494
11497
  dispatch(fetchPriceDetails());
10495
11498
  }, []);
10496
- // const [active, setActive] = useState(false)
10497
11499
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
10498
11500
  React__default["default"].createElement("form", { className: "form", name: "booking--options", id: "booking--options", noValidate: true, onSubmit: handleSubmit },
10499
- React__default["default"].createElement("div", { className: "form__wrapper" },
10500
- isLoading && loaderComponent,
10501
- !isLoading && (React__default["default"].createElement("div", { className: "form__region" },
10502
- React__default["default"].createElement("div", { className: "form__group" },
10503
- React__default["default"].createElement("div", { className: "booking-card" },
10504
- React__default["default"].createElement("div", { className: "booking-card__body" },
10505
- React__default["default"].createElement("div", { className: buildClassName([
10506
- "booking-card__group",
10507
- "booking-card__group--package",
10508
- ]) },
10509
- React__default["default"].createElement("span", { className: "booking-card__tag" }, translations.OPTIONS_FORM.PACKAGE),
10510
- React__default["default"].createElement("div", { className: "booking-card__group-body" },
10511
- React__default["default"].createElement("table", { className: "table table--striped" },
10512
- React__default["default"].createElement("tbody", null, packageRooms &&
10513
- packageRooms.map(function (room) { return (React__default["default"].createElement(OptionRoom, { key: room.index, packageRoom: room, pax: getRoomPax(room.index), optionPax: optionPax, onRoomChange: handleOnRoomChange })); })))))))))),
10514
- React__default["default"].createElement("div", { className: "form__room" },
10515
- React__default["default"].createElement("div", { className: "form__room__wrapper" },
10516
- React__default["default"].createElement("div", { className: "form__room__image" },
10517
- React__default["default"].createElement("img", { src: "https://picsum.photos/1920/1080", alt: "", className: "form__room__img" }),
10518
- React__default["default"].createElement("div", { className: "form__room__favorite" },
10519
- React__default["default"].createElement("i", { className: "fa-regular fa-heart" }))),
10520
- React__default["default"].createElement("div", { className: "form__room__body" },
10521
- React__default["default"].createElement("div", { className: "" },
10522
- React__default["default"].createElement("h3", { className: "form__room__title" }, "Tara Penthouse suite frontal seaview"),
10523
- React__default["default"].createElement("p", null,
10524
- " Carrer de Nicaragua, 146, Les Corts, 08029 Barcelona, Spanje \u2013 ",
10525
- React__default["default"].createElement("a", { href: "#" }, "Toon kaart")),
10526
- React__default["default"].createElement("ul", { className: "list--usps form__room__usps" },
10527
- React__default["default"].createElement("li", { className: "list__item" }, "1 tweepersoonsbed"),
10528
- React__default["default"].createElement("li", { className: "list__item" }, "Max. 2 personen"),
10529
- React__default["default"].createElement("li", { className: "list__item" }, "Gratis WiFi"),
10530
- React__default["default"].createElement("li", { className: "list__item" }, "Airconditioning"),
10531
- React__default["default"].createElement("li", { className: "list__item" }, "Eigen badkamer")),
10532
- React__default["default"].createElement("div", { className: "form__room__select" },
10533
- React__default["default"].createElement("div", { className: "select-wrapper" },
10534
- React__default["default"].createElement("div", { className: "select-wrapper__select" },
10535
- React__default["default"].createElement("select", null,
10536
- React__default["default"].createElement("option", { value: "KO" }, "Kamer & Ontbijt "),
10537
- React__default["default"].createElement("option", { value: "LU" }, "Lunch (+ \u20AC\u00A0354,38)"),
10538
- React__default["default"].createElement("option", { value: "HB" }, "Half Pension (+ \u20AC\u00A0740,25)"),
10539
- React__default["default"].createElement("option", { value: "FB" }, "Vol Pension (+ \u20AC\u00A01.094,63)")))))))),
10540
- React__default["default"].createElement("div", { className: "form__room__footer" },
10541
- React__default["default"].createElement("div", { className: "form__room__footer__top" },
10542
- React__default["default"].createElement("p", { className: "form__room__dates" }, "01/11 - 08/11"),
10543
- React__default["default"].createElement("span", { className: "form__room__days" }, "8 dagen, 7nachten")),
10544
- React__default["default"].createElement("div", { className: "form__room__footer__bottom" },
10545
- React__default["default"].createElement("p", { className: "form__room__price form__room__price--increase" },
10546
- "+ ",
10547
- React__default["default"].createElement("span", null, "\u20AC 216,00"),
10548
- " p.p."),
10549
- React__default["default"].createElement("button", { className: "cta cta--secondary" }, "Selecteer"))))),
11501
+ React__default["default"].createElement("div", { className: "form__wrapper" }, rooms.map(function (room) { return (React__default["default"].createElement(TravelerRooms, { key: room.index, index: room.index, room: room, onRoomChange: handleOnRoomChange })); })),
10550
11502
  React__default["default"].createElement("div", { className: "booking__navigator" },
11503
+ !settings.flightOptions.isHidden && (React__default["default"].createElement(React__default["default"].Fragment, null, settings.skipRouter ? (React__default["default"].createElement("button", { type: "button", title: translations.STEPS.PREVIOUS, onClick: function () { return goPrevious(); }, className: "cta cta--secondary" }, translations.STEPS.PREVIOUS)) : (React__default["default"].createElement(router.Link, { to: "".concat(settings.basePath).concat(settings.flightOptions.pathSuffix, "?").concat(bookingQueryString), title: translations.STEPS.PREVIOUS, className: "cta cta--secondary" }, translations.STEPS.PREVIOUS)))),
10551
11504
  React__default["default"].createElement("button", { type: "submit", title: translations.STEPS.NEXT, disabled: isLoading, className: buildClassName(["cta", isLoading && "cta--disabled"]) }, translations.STEPS.NEXT)))));
10552
11505
  };
10553
11506
 
@@ -11016,8 +11969,8 @@ var Summary = function () {
11016
11969
  return [4 /*yield*/, validateVoucher_1(tideClientConfig, request)];
11017
11970
  case 1:
11018
11971
  result = _b.sent();
11019
- if (result === null || result === void 0 ? void 0 : result.payload) {
11020
- setVoucher(__assign(__assign({}, voucher), { isValidated: true, isValid: result.payload.isValid }));
11972
+ if (result) {
11973
+ setVoucher(__assign(__assign({}, voucher), { isValidated: true, isValid: result.isValid }));
11021
11974
  }
11022
11975
  return [2 /*return*/];
11023
11976
  }
@@ -11549,7 +12502,7 @@ var TravelersForm = function () {
11549
12502
  var hasVisibleError = function (key) {
11550
12503
  return lodash.get(formik$1.errors, key) && lodash.get(formik$1.touched, key);
11551
12504
  };
11552
- return (React__default["default"].createElement("form", { className: "form", name: "booking--travellers", id: "booking--travellers", noValidate: true, onSubmit: formik$1.handleSubmit, onReset: formik$1.handleReset },
12505
+ return (React__default["default"].createElement("form", { className: "form form__travelers", name: "booking--travellers", id: "booking--travellers", noValidate: true, onSubmit: formik$1.handleSubmit, onReset: formik$1.handleReset },
11553
12506
  formik$1.values.rooms.map(function (room, rIndex) { return (React__default["default"].createElement("div", { key: rIndex },
11554
12507
  React__default["default"].createElement("div", { className: "form__region" },
11555
12508
  React__default["default"].createElement("div", { className: "form__region-header" },
@@ -11717,7 +12670,7 @@ var TravelersForm = function () {
11717
12670
 
11718
12671
  var Booking = function (_a) {
11719
12672
  var productCode = _a.productCode, productName = _a.productName, thumbnailUrl = _a.thumbnailUrl;
11720
- var _b = React.useContext(SettingsContext), officeId = _b.officeId, bookingOptions = _b.bookingOptions, basePath = _b.basePath, roomOptions = _b.roomOptions, flightOptions = _b.flightOptions, options = _b.options, travellers = _b.travellers, summary = _b.summary, confirmation = _b.confirmation, error = _b.error, showSidebarDeposit = _b.showSidebarDeposit, includeFlights = _b.includeFlights, loaderComponent = _b.loaderComponent, skipPaymentWithAgent = _b.skipPaymentWithAgent, generatePaymentUrl = _b.generatePaymentUrl, tagIds = _b.tagIds, agentAdressId = _b.agentAdressId, language = _b.language, translationFiles = _b.translationFiles;
12673
+ var _b = React.useContext(SettingsContext), officeId = _b.officeId, bookingOptions = _b.bookingOptions, basePath = _b.basePath, roomOptions = _b.roomOptions, flightOptions = _b.flightOptions, options = _b.options, travellers = _b.travellers, summary = _b.summary, confirmation = _b.confirmation, error = _b.error, showSidebarDeposit = _b.showSidebarDeposit, includeFlights = _b.includeFlights, loaderComponent = _b.loaderComponent, skipPaymentWithAgent = _b.skipPaymentWithAgent, generatePaymentUrl = _b.generatePaymentUrl, tagIds = _b.tagIds, agentAdressId = _b.agentAdressId, language = _b.language, translationFiles = _b.translationFiles, accommodationViewId = _b.accommodationViewId;
11721
12674
  var dispatch = useAppDispatch();
11722
12675
  var location = router.useLocation();
11723
12676
  var productAttributes = reactRedux.useSelector(selectProductAttributes);
@@ -11741,7 +12694,7 @@ var Booking = function (_a) {
11741
12694
  var rooms = getRoomsFromParams(params, "rooms");
11742
12695
  var flight = getFlightsFromParams(params, "flight");
11743
12696
  var allotmentName = getStringFromParams(params, "allotmentName");
11744
- var allotmentIds = getNumbersFromParams(params, "allotementId");
12697
+ var allotmentIds = getNumbersFromParams(params, "allotmentId");
11745
12698
  var tourCode = getStringFromParams(params, "tourCode");
11746
12699
  var bookingNumber = (_a = params.get("bookingNr")) !== null && _a !== void 0 ? _a : undefined;
11747
12700
  if (typeof window !== "undefined") {
@@ -11838,6 +12791,9 @@ var Booking = function (_a) {
11838
12791
  if (agentAdressId && agentAdressId != 0) {
11839
12792
  dispatch(setBookingType("b2b"));
11840
12793
  }
12794
+ if (accommodationViewId && accommodationViewId != 0) {
12795
+ dispatch(setAccommodationViewId(accommodationViewId));
12796
+ }
11841
12797
  }, [
11842
12798
  officeId,
11843
12799
  language,
@@ -11848,6 +12804,7 @@ var Booking = function (_a) {
11848
12804
  setCalculateDeposit,
11849
12805
  tagIds,
11850
12806
  agentAdressId,
12807
+ accommodationViewId
11851
12808
  ]);
11852
12809
  React.useEffect(function () {
11853
12810
  if (!productAttributes ||
@@ -11876,8 +12833,8 @@ var Booking = function (_a) {
11876
12833
  React__default["default"].createElement("div", { className: "booking__content" },
11877
12834
  React__default["default"].createElement("div", { className: "booking__panel" },
11878
12835
  React__default["default"].createElement(router.Router, { basepath: basePath },
11879
- !roomOptions.isHidden && roomOptions.pathSuffix && (React__default["default"].createElement(StepRoute, { path: roomOptions.pathSuffix, number: numberIndex++, title: translations.STEPS.ROOM_OPTIONS, component: React__default["default"].createElement(RoomOptionsForm, null) })),
11880
12836
  !flightOptions.isHidden && flightOptions.pathSuffix && (React__default["default"].createElement(StepRoute, { path: flightOptions.pathSuffix, number: numberIndex++, title: translations.STEPS.FLIGHT_OPTIONS, component: React__default["default"].createElement(FlightOptionsForm, null) })),
12837
+ !roomOptions.isHidden && roomOptions.pathSuffix && (React__default["default"].createElement(StepRoute, { path: roomOptions.pathSuffix, number: numberIndex++, title: translations.STEPS.ROOM_OPTIONS, component: React__default["default"].createElement(RoomOptionsForm, null) })),
11881
12838
  React__default["default"].createElement(StepRoute, { path: options.pathSuffix, number: numberIndex++, title: translations.STEPS.EXTRA_OPTIONS, component: React__default["default"].createElement(OptionsForm, null) }),
11882
12839
  React__default["default"].createElement(StepRoute, { path: travellers.pathSuffix, number: numberIndex++, title: translations.STEPS.PERSONAL_DETAILS, component: React__default["default"].createElement(TravelersForm, null) }),
11883
12840
  React__default["default"].createElement(StepRoute, { path: summary.pathSuffix, number: numberIndex++, title: translations.STEPS.SUMMARY, component: React__default["default"].createElement(Summary, null) }),