@qite/tide-booking-component 0.0.2-preview.72 → 0.0.2-preview.74

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.
@@ -27,6 +27,7 @@ export interface BookingState {
27
27
  isUnavailable?: boolean;
28
28
  tagIds?: number[];
29
29
  agentAdressId?: number;
30
+ remarks?: string;
30
31
  }
31
32
  export declare const fetchPackage: import("@reduxjs/toolkit").AsyncThunk<
32
33
  void,
@@ -112,6 +113,10 @@ export declare const setOfficeId: import("@reduxjs/toolkit").ActionCreatorWithPa
112
113
  setAgentAdressId: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<
113
114
  number | undefined,
114
115
  string
116
+ >,
117
+ setBookingRemarks: import("@reduxjs/toolkit").ActionCreatorWithPayload<
118
+ string,
119
+ string
115
120
  >;
116
121
  declare const _default: import("redux").Reducer<
117
122
  BookingState,
@@ -87,6 +87,9 @@ export declare const selectBookingNumber: (
87
87
  export declare const selectBookingRooms: (
88
88
  state: RootState
89
89
  ) => Room[] | undefined;
90
+ export declare const selectBookingRemarks: (
91
+ state: RootState
92
+ ) => string | undefined;
90
93
  export declare const selectCalculateDeposit: (state: RootState) => boolean;
91
94
  export declare const selectIsRetry: (state: RootState) => boolean;
92
95
  export declare const selectStartDate: (state: RootState) => string | undefined;
@@ -7247,6 +7247,9 @@ var selectBookingRooms = function (state) {
7247
7247
  ? void 0
7248
7248
  : _a.rooms;
7249
7249
  };
7250
+ var selectBookingRemarks = function (state) {
7251
+ return state.booking.remarks;
7252
+ };
7250
7253
  var selectCalculateDeposit = function (state) {
7251
7254
  return state.booking.calculateDeposit;
7252
7255
  };
@@ -7607,6 +7610,7 @@ var fetchPackageDetails = toolkit.createAsyncThunk(
7607
7610
  bookingAttributes,
7608
7611
  agentId,
7609
7612
  rooms,
7613
+ remarks,
7610
7614
  requestRooms,
7611
7615
  isAllotment,
7612
7616
  request;
@@ -7620,6 +7624,7 @@ var fetchPackageDetails = toolkit.createAsyncThunk(
7620
7624
  bookingAttributes = selectBookingAttributes(state);
7621
7625
  agentId = selectAgentId(state);
7622
7626
  rooms = selectBookingRooms(state);
7627
+ remarks = selectBookingRemarks(state);
7623
7628
  if (lodash.isNil(productAttributes)) {
7624
7629
  throw Error("productAttributes could not be found");
7625
7630
  }
@@ -7669,6 +7674,7 @@ var fetchPackageDetails = toolkit.createAsyncThunk(
7669
7674
  : [],
7670
7675
  tourCode: bookingAttributes.tourCode,
7671
7676
  rooms: requestRooms,
7677
+ remarks: remarks,
7672
7678
  },
7673
7679
  };
7674
7680
  return [4 /*yield*/, packageApi.fetchDetails(request, signal)];
@@ -7754,6 +7760,9 @@ var bookingSlice = toolkit.createSlice({
7754
7760
  setAgentAdressId: function (state, action) {
7755
7761
  state.agentAdressId = action.payload;
7756
7762
  },
7763
+ setBookingRemarks: function (state, action) {
7764
+ state.remarks = action.payload;
7765
+ },
7757
7766
  },
7758
7767
  extraReducers: function (builder) {
7759
7768
  builder.addCase(fetchPackageDetails.fulfilled, function (state, action) {
@@ -7831,7 +7840,8 @@ var setOfficeId = ((_a = bookingSlice.actions), _a.setOfficeId),
7831
7840
  setSkipPayment = _a.setSkipPayment,
7832
7841
  setGeneratePaymentUrl = _a.setGeneratePaymentUrl,
7833
7842
  setTagIds = _a.setTagIds,
7834
- setAgentAdressId = _a.setAgentAdressId;
7843
+ setAgentAdressId = _a.setAgentAdressId,
7844
+ setBookingRemarks = _a.setBookingRemarks;
7835
7845
  var bookingReducer = bookingSlice.reducer;
7836
7846
 
7837
7847
  var initialState = {
@@ -8061,6 +8071,7 @@ var SIDEBAR = {
8061
8071
  FLIGHT_DEPARTURE: "Vertrek",
8062
8072
  FLIGHT_ARRIVAL: "Aankomst",
8063
8073
  ON_REQUEST: "Op aanvraag",
8074
+ CHANGES: "overstappen",
8064
8075
  };
8065
8076
  var TRAVELERS_FORM = {
8066
8077
  PERSONS: "Personen",
@@ -8120,6 +8131,7 @@ var SUMMARY = {
8120
8131
  VALIDATE_TEXT:
8121
8132
  "Je staat op het punt je boeking te bevestigen. Contoleer of alle gegevens correct zijn. Deze zijn definitief en niet meer aanpasbaar.",
8122
8133
  OPTIONS: "Opties",
8134
+ REMARKS: "Opmerkingen",
8123
8135
  };
8124
8136
  var CONFIRMATION = {
8125
8137
  TITLE_TEXT1: "Je boeking met nummer ",
@@ -10487,9 +10499,18 @@ var SidebarFlight = function (_a) {
10487
10499
  React__default["default"].createElement(
10488
10500
  "div",
10489
10501
  { className: "pricing-summary__row" },
10490
- React__default["default"].createElement("div", {
10491
- className: "pricing-summary__property",
10492
- }),
10502
+ React__default["default"].createElement(
10503
+ "div",
10504
+ { className: "pricing-summary__property" },
10505
+ flight.flightMetaData.flightLines.length > 1 &&
10506
+ React__default["default"].createElement(
10507
+ "i",
10508
+ null,
10509
+ flight.flightMetaData.flightLines.length - 1,
10510
+ "x ",
10511
+ translations.SIDEBAR.CHANGES
10512
+ )
10513
+ ),
10493
10514
  React__default["default"].createElement(
10494
10515
  "div",
10495
10516
  { className: "pricing-summary__value" },
@@ -10666,6 +10687,13 @@ var Sidebar = function (_a) {
10666
10687
  ? void 0
10667
10688
  : option.accommodationName,
10668
10689
  isOnRequest
10690
+ ? " (".concat(translations.SIDEBAR.ON_REQUEST, ")")
10691
+ : "",
10692
+ (
10693
+ option === null || option === void 0
10694
+ ? void 0
10695
+ : option.isOnRequest
10696
+ )
10669
10697
  ? " (".concat(translations.SIDEBAR.ON_REQUEST, ")")
10670
10698
  : ""
10671
10699
  ),
@@ -11416,6 +11444,9 @@ var Summary = function () {
11416
11444
  var _b = React.useState(settings.summary.checkboxes),
11417
11445
  checkboxes = _b[0],
11418
11446
  setCheckboxes = _b[1];
11447
+ var _c = React.useState(""),
11448
+ remarks = _c[0],
11449
+ setRemarks = _c[1];
11419
11450
  var bookingQueryString = reactRedux.useSelector(selectBookingQueryString);
11420
11451
  var travelerFormValues = reactRedux.useSelector(selectTravelersFormValues);
11421
11452
  var packageDetails = reactRedux.useSelector(selectPackageDetails);
@@ -11526,6 +11557,10 @@ var Summary = function () {
11526
11557
  newCheckboxes[index].isSelected = !newCheckboxes[index].isSelected;
11527
11558
  setCheckboxes(newCheckboxes);
11528
11559
  };
11560
+ var handleRemarksChange = function (text) {
11561
+ dispatch(setBookingRemarks(text));
11562
+ setRemarks(text);
11563
+ };
11529
11564
  return React__default["default"].createElement(
11530
11565
  React__default["default"].Fragment,
11531
11566
  null,
@@ -11794,7 +11829,7 @@ var Summary = function () {
11794
11829
  ) &&
11795
11830
  (activeOption === null || activeOption === void 0
11796
11831
  ? void 0
11797
- : activeOption.groups.map(function (x) {
11832
+ : activeOption.groups.map(function (x, i) {
11798
11833
  if (
11799
11834
  !x.options.some(function (y) {
11800
11835
  return y.isSelected;
@@ -11803,7 +11838,7 @@ var Summary = function () {
11803
11838
  return;
11804
11839
  return React__default["default"].createElement(
11805
11840
  SummaryPerBookingOptionGroup,
11806
- { group: x }
11841
+ { key: i, group: x }
11807
11842
  );
11808
11843
  })),
11809
11844
  !lodash.isEmpty(
@@ -11839,10 +11874,11 @@ var Summary = function () {
11839
11874
  .filter(function (x) {
11840
11875
  return x.isSelected;
11841
11876
  })
11842
- .map(function (flight) {
11877
+ .map(function (flight, i) {
11843
11878
  return React__default["default"].createElement(
11844
11879
  SummaryFlight,
11845
11880
  {
11881
+ key: i,
11846
11882
  flight: flight,
11847
11883
  header: translations.SIDEBAR.DEPARTURE_FLIGHT,
11848
11884
  }
@@ -11855,10 +11891,11 @@ var Summary = function () {
11855
11891
  .filter(function (x) {
11856
11892
  return x.isSelected;
11857
11893
  })
11858
- .map(function (flight) {
11894
+ .map(function (flight, i) {
11859
11895
  return React__default["default"].createElement(
11860
11896
  SummaryFlight,
11861
11897
  {
11898
+ key: i,
11862
11899
  flight: flight,
11863
11900
  header: translations.SIDEBAR.ARRIVAL_FLIGHT,
11864
11901
  }
@@ -11969,6 +12006,42 @@ var Summary = function () {
11969
12006
  )
11970
12007
  )
11971
12008
  ),
12009
+ React__default["default"].createElement(
12010
+ "div",
12011
+ { className: "form__region" },
12012
+ React__default["default"].createElement(
12013
+ "div",
12014
+ { className: "form__row" },
12015
+ React__default["default"].createElement(
12016
+ "div",
12017
+ { className: "form__group" },
12018
+ React__default["default"].createElement(
12019
+ "div",
12020
+ { className: "form__region-header" },
12021
+ React__default["default"].createElement(
12022
+ "h5",
12023
+ { className: "form__region-heading" },
12024
+ translations.SUMMARY.REMARKS
12025
+ )
12026
+ )
12027
+ )
12028
+ ),
12029
+ React__default["default"].createElement(
12030
+ "div",
12031
+ { className: "form__row" },
12032
+ React__default["default"].createElement(
12033
+ "div",
12034
+ { className: "form__group" },
12035
+ React__default["default"].createElement("textarea", {
12036
+ className: "form__input",
12037
+ defaultValue: remarks,
12038
+ onChange: function (e) {
12039
+ return handleRemarksChange(e.target.value);
12040
+ },
12041
+ })
12042
+ )
12043
+ )
12044
+ ),
11972
12045
  React__default["default"].createElement(
11973
12046
  "div",
11974
12047
  { className: "form__region" },
@@ -27,6 +27,7 @@ export interface BookingState {
27
27
  isUnavailable?: boolean;
28
28
  tagIds?: number[];
29
29
  agentAdressId?: number;
30
+ remarks?: string;
30
31
  }
31
32
  export declare const fetchPackage: import("@reduxjs/toolkit").AsyncThunk<
32
33
  void,
@@ -112,6 +113,10 @@ export declare const setOfficeId: import("@reduxjs/toolkit").ActionCreatorWithPa
112
113
  setAgentAdressId: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<
113
114
  number | undefined,
114
115
  string
116
+ >,
117
+ setBookingRemarks: import("@reduxjs/toolkit").ActionCreatorWithPayload<
118
+ string,
119
+ string
115
120
  >;
116
121
  declare const _default: import("redux").Reducer<
117
122
  BookingState,
@@ -87,6 +87,9 @@ export declare const selectBookingNumber: (
87
87
  export declare const selectBookingRooms: (
88
88
  state: RootState
89
89
  ) => Room[] | undefined;
90
+ export declare const selectBookingRemarks: (
91
+ state: RootState
92
+ ) => string | undefined;
90
93
  export declare const selectCalculateDeposit: (state: RootState) => boolean;
91
94
  export declare const selectIsRetry: (state: RootState) => boolean;
92
95
  export declare const selectStartDate: (state: RootState) => string | undefined;
@@ -7250,6 +7250,9 @@ var selectBookingRooms = function (state) {
7250
7250
  ? void 0
7251
7251
  : _a.rooms;
7252
7252
  };
7253
+ var selectBookingRemarks = function (state) {
7254
+ return state.booking.remarks;
7255
+ };
7253
7256
  var selectCalculateDeposit = function (state) {
7254
7257
  return state.booking.calculateDeposit;
7255
7258
  };
@@ -7605,6 +7608,7 @@ var fetchPackageDetails = createAsyncThunk("booking/details", function (_, _a) {
7605
7608
  bookingAttributes,
7606
7609
  agentId,
7607
7610
  rooms,
7611
+ remarks,
7608
7612
  requestRooms,
7609
7613
  isAllotment,
7610
7614
  request;
@@ -7618,6 +7622,7 @@ var fetchPackageDetails = createAsyncThunk("booking/details", function (_, _a) {
7618
7622
  bookingAttributes = selectBookingAttributes(state);
7619
7623
  agentId = selectAgentId(state);
7620
7624
  rooms = selectBookingRooms(state);
7625
+ remarks = selectBookingRemarks(state);
7621
7626
  if (isNil(productAttributes)) {
7622
7627
  throw Error("productAttributes could not be found");
7623
7628
  }
@@ -7666,6 +7671,7 @@ var fetchPackageDetails = createAsyncThunk("booking/details", function (_, _a) {
7666
7671
  : [],
7667
7672
  tourCode: bookingAttributes.tourCode,
7668
7673
  rooms: requestRooms,
7674
+ remarks: remarks,
7669
7675
  },
7670
7676
  };
7671
7677
  return [4 /*yield*/, packageApi.fetchDetails(request, signal)];
@@ -7750,6 +7756,9 @@ var bookingSlice = createSlice({
7750
7756
  setAgentAdressId: function (state, action) {
7751
7757
  state.agentAdressId = action.payload;
7752
7758
  },
7759
+ setBookingRemarks: function (state, action) {
7760
+ state.remarks = action.payload;
7761
+ },
7753
7762
  },
7754
7763
  extraReducers: function (builder) {
7755
7764
  builder.addCase(fetchPackageDetails.fulfilled, function (state, action) {
@@ -7827,7 +7836,8 @@ var setOfficeId = ((_a = bookingSlice.actions), _a.setOfficeId),
7827
7836
  setSkipPayment = _a.setSkipPayment,
7828
7837
  setGeneratePaymentUrl = _a.setGeneratePaymentUrl,
7829
7838
  setTagIds = _a.setTagIds,
7830
- setAgentAdressId = _a.setAgentAdressId;
7839
+ setAgentAdressId = _a.setAgentAdressId,
7840
+ setBookingRemarks = _a.setBookingRemarks;
7831
7841
  var bookingReducer = bookingSlice.reducer;
7832
7842
 
7833
7843
  var initialState = {
@@ -8050,6 +8060,7 @@ var SIDEBAR = {
8050
8060
  FLIGHT_DEPARTURE: "Vertrek",
8051
8061
  FLIGHT_ARRIVAL: "Aankomst",
8052
8062
  ON_REQUEST: "Op aanvraag",
8063
+ CHANGES: "overstappen",
8053
8064
  };
8054
8065
  var TRAVELERS_FORM = {
8055
8066
  PERSONS: "Personen",
@@ -8109,6 +8120,7 @@ var SUMMARY = {
8109
8120
  VALIDATE_TEXT:
8110
8121
  "Je staat op het punt je boeking te bevestigen. Contoleer of alle gegevens correct zijn. Deze zijn definitief en niet meer aanpasbaar.",
8111
8122
  OPTIONS: "Opties",
8123
+ REMARKS: "Opmerkingen",
8112
8124
  };
8113
8125
  var CONFIRMATION = {
8114
8126
  TITLE_TEXT1: "Je boeking met nummer ",
@@ -10417,7 +10429,18 @@ var SidebarFlight = function (_a) {
10417
10429
  React.createElement(
10418
10430
  "div",
10419
10431
  { className: "pricing-summary__row" },
10420
- React.createElement("div", { className: "pricing-summary__property" }),
10432
+ React.createElement(
10433
+ "div",
10434
+ { className: "pricing-summary__property" },
10435
+ flight.flightMetaData.flightLines.length > 1 &&
10436
+ React.createElement(
10437
+ "i",
10438
+ null,
10439
+ flight.flightMetaData.flightLines.length - 1,
10440
+ "x ",
10441
+ translations.SIDEBAR.CHANGES
10442
+ )
10443
+ ),
10421
10444
  React.createElement(
10422
10445
  "div",
10423
10446
  { className: "pricing-summary__value" },
@@ -10592,6 +10615,13 @@ var Sidebar = function (_a) {
10592
10615
  ? void 0
10593
10616
  : option.accommodationName,
10594
10617
  isOnRequest
10618
+ ? " (".concat(translations.SIDEBAR.ON_REQUEST, ")")
10619
+ : "",
10620
+ (
10621
+ option === null || option === void 0
10622
+ ? void 0
10623
+ : option.isOnRequest
10624
+ )
10595
10625
  ? " (".concat(translations.SIDEBAR.ON_REQUEST, ")")
10596
10626
  : ""
10597
10627
  ),
@@ -11305,6 +11335,9 @@ var Summary = function () {
11305
11335
  var _b = useState(settings.summary.checkboxes),
11306
11336
  checkboxes = _b[0],
11307
11337
  setCheckboxes = _b[1];
11338
+ var _c = useState(""),
11339
+ remarks = _c[0],
11340
+ setRemarks = _c[1];
11308
11341
  var bookingQueryString = useSelector(selectBookingQueryString);
11309
11342
  var travelerFormValues = useSelector(selectTravelersFormValues);
11310
11343
  var packageDetails = useSelector(selectPackageDetails);
@@ -11413,6 +11446,10 @@ var Summary = function () {
11413
11446
  newCheckboxes[index].isSelected = !newCheckboxes[index].isSelected;
11414
11447
  setCheckboxes(newCheckboxes);
11415
11448
  };
11449
+ var handleRemarksChange = function (text) {
11450
+ dispatch(setBookingRemarks(text));
11451
+ setRemarks(text);
11452
+ };
11416
11453
  return React.createElement(
11417
11454
  React.Fragment,
11418
11455
  null,
@@ -11677,7 +11714,7 @@ var Summary = function () {
11677
11714
  ) &&
11678
11715
  (activeOption === null || activeOption === void 0
11679
11716
  ? void 0
11680
- : activeOption.groups.map(function (x) {
11717
+ : activeOption.groups.map(function (x, i) {
11681
11718
  if (
11682
11719
  !x.options.some(function (y) {
11683
11720
  return y.isSelected;
@@ -11686,7 +11723,7 @@ var Summary = function () {
11686
11723
  return;
11687
11724
  return React.createElement(
11688
11725
  SummaryPerBookingOptionGroup,
11689
- { group: x }
11726
+ { key: i, group: x }
11690
11727
  );
11691
11728
  })),
11692
11729
  !isEmpty(
@@ -11720,8 +11757,9 @@ var Summary = function () {
11720
11757
  .filter(function (x) {
11721
11758
  return x.isSelected;
11722
11759
  })
11723
- .map(function (flight) {
11760
+ .map(function (flight, i) {
11724
11761
  return React.createElement(SummaryFlight, {
11762
+ key: i,
11725
11763
  flight: flight,
11726
11764
  header: translations.SIDEBAR.DEPARTURE_FLIGHT,
11727
11765
  });
@@ -11733,8 +11771,9 @@ var Summary = function () {
11733
11771
  .filter(function (x) {
11734
11772
  return x.isSelected;
11735
11773
  })
11736
- .map(function (flight) {
11774
+ .map(function (flight, i) {
11737
11775
  return React.createElement(SummaryFlight, {
11776
+ key: i,
11738
11777
  flight: flight,
11739
11778
  header: translations.SIDEBAR.ARRIVAL_FLIGHT,
11740
11779
  });
@@ -11844,6 +11883,42 @@ var Summary = function () {
11844
11883
  )
11845
11884
  )
11846
11885
  ),
11886
+ React.createElement(
11887
+ "div",
11888
+ { className: "form__region" },
11889
+ React.createElement(
11890
+ "div",
11891
+ { className: "form__row" },
11892
+ React.createElement(
11893
+ "div",
11894
+ { className: "form__group" },
11895
+ React.createElement(
11896
+ "div",
11897
+ { className: "form__region-header" },
11898
+ React.createElement(
11899
+ "h5",
11900
+ { className: "form__region-heading" },
11901
+ translations.SUMMARY.REMARKS
11902
+ )
11903
+ )
11904
+ )
11905
+ ),
11906
+ React.createElement(
11907
+ "div",
11908
+ { className: "form__row" },
11909
+ React.createElement(
11910
+ "div",
11911
+ { className: "form__group" },
11912
+ React.createElement("textarea", {
11913
+ className: "form__input",
11914
+ defaultValue: remarks,
11915
+ onChange: function (e) {
11916
+ return handleRemarksChange(e.target.value);
11917
+ },
11918
+ })
11919
+ )
11920
+ )
11921
+ ),
11847
11922
  React.createElement(
11848
11923
  "div",
11849
11924
  { className: "form__region" },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qite/tide-booking-component",
3
- "version": "0.0.2-preview.72",
3
+ "version": "0.0.2-preview.74",
4
4
  "description": "React BookingWizard component for Tide",
5
5
  "main": "build/build-cjs/index.js",
6
6
  "module": "build/build-esm/index.js",
@@ -66,6 +66,6 @@
66
66
  "uuid": "^8.3.2"
67
67
  },
68
68
  "dependencies": {
69
- "@qite/tide-client": "1.0.94"
69
+ "@qite/tide-client": "1.0.96"
70
70
  }
71
71
  }
@@ -5,6 +5,7 @@ import { RootState } from "../../store";
5
5
  import { isNil, range } from "lodash";
6
6
  import {
7
7
  selectBookingAttributes,
8
+ selectBookingRemarks,
8
9
  selectBookingRooms,
9
10
  selectOfficeId,
10
11
  selectProductAttributes,
@@ -44,6 +45,7 @@ export interface BookingState {
44
45
  isUnavailable?: boolean;
45
46
  tagIds?: number[];
46
47
  agentAdressId?: number;
48
+ remarks?: string;
47
49
  }
48
50
 
49
51
  const initialState: BookingState = {
@@ -92,6 +94,7 @@ const fetchPackageDetails = createAsyncThunk(
92
94
  const bookingAttributes = selectBookingAttributes(state);
93
95
  const agentId = selectAgentId(state);
94
96
  const rooms = selectBookingRooms(state);
97
+ const remarks = selectBookingRemarks(state);
95
98
 
96
99
  if (isNil(productAttributes)) {
97
100
  throw Error("productAttributes could not be found");
@@ -139,6 +142,7 @@ const fetchPackageDetails = createAsyncThunk(
139
142
  allotmentIds: bookingAttributes.allotmentIds ?? [],
140
143
  tourCode: bookingAttributes.tourCode,
141
144
  rooms: requestRooms,
145
+ remarks: remarks,
142
146
  } as BookingPackageDetailsRequest,
143
147
  } as BookingPackageRequest<BookingPackageDetailsRequest>;
144
148
 
@@ -225,6 +229,9 @@ const bookingSlice = createSlice({
225
229
  setAgentAdressId(state, action: PayloadAction<number | undefined>) {
226
230
  state.agentAdressId = action.payload;
227
231
  },
232
+ setBookingRemarks(state, action: PayloadAction<string>) {
233
+ state.remarks = action.payload;
234
+ },
228
235
  },
229
236
  extraReducers: (builder) => {
230
237
  builder.addCase(fetchPackageDetails.fulfilled, (state, action) => {
@@ -299,6 +306,7 @@ export const {
299
306
  setGeneratePaymentUrl,
300
307
  setTagIds,
301
308
  setAgentAdressId,
309
+ setBookingRemarks,
302
310
  } = bookingSlice.actions;
303
311
 
304
312
  export default bookingSlice.reducer;
@@ -88,6 +88,8 @@ export const selectBookingNumber = (state: RootState) =>
88
88
  export const selectBookingRooms = (state: RootState) =>
89
89
  state.booking.bookingAttributes?.rooms;
90
90
 
91
+ export const selectBookingRemarks = (state: RootState) => state.booking.remarks;
92
+
91
93
  export const selectCalculateDeposit = (state: RootState) =>
92
94
  state.booking.calculateDeposit;
93
95
 
@@ -1,58 +1,65 @@
1
- import { BookingPackageFlight } from "@qite/tide-client/build/types";
2
- import { first, last } from "lodash";
3
- import React from "react";
4
- import { getAirlines, getDateText, parseFlightLines } from "./sidebar-util";
5
- import translations from "../../translations/translations.json";
6
-
7
- interface SidebarFlightProps {
8
- title: string;
9
- flight: BookingPackageFlight;
10
- }
11
-
12
- const SidebarFlight: React.FC<SidebarFlightProps> = ({ title, flight }) => {
13
- const flightLines = parseFlightLines(flight.flightMetaData);
14
- const firstFlight = first(flightLines);
15
- const lastFlight = last(flightLines);
16
-
17
- return (
18
- <div className="pricing-summary__group">
19
- <h6 className="pricing-summary__title">{title}</h6>
20
- <div className="pricing-summary__row">
21
- <div className="pricing-summary__property">
22
- {translations.SIDEBAR.FLIGHT_DEPARTURE}
23
- </div>
24
- <div className="pricing-summary__value">
25
- {firstFlight?.departureAirportDescription} (
26
- {firstFlight?.departureAirportIata})<br />
27
- {getDateText(firstFlight?.departureDate)} {firstFlight?.departureTime}
28
- </div>
29
- </div>
30
-
31
- <div className="pricing-summary__row">
32
- <div className="pricing-summary__property">
33
- {translations.SIDEBAR.FLIGHT_ARRIVAL}
34
- </div>
35
- <div className="pricing-summary__value">
36
- {lastFlight?.arrivalAirportDescription} (
37
- {lastFlight?.arrivalAirportIata})<br />
38
- {getDateText(lastFlight?.arrivalDate)} {lastFlight?.arrivalTime}
39
- </div>
40
- </div>
41
-
42
- <div className="pricing-summary__row">
43
- <div className="pricing-summary__property"></div>
44
- <div className="pricing-summary__value">{getAirlines(flightLines)}</div>
45
- </div>
46
- {flight.flightMetaData.luggageIncluded && (
47
- <div className="pricing-summary__row">
48
- <div className="pricing-summary__property"></div>
49
- <div className="pricing-summary__value">
50
- {translations.SIDEBAR.LUGGAGE_INCLUDED}
51
- </div>
52
- </div>
53
- )}
54
- </div>
55
- );
56
- };
57
-
58
- export default SidebarFlight;
1
+ import { BookingPackageFlight } from "@qite/tide-client/build/types";
2
+ import { first, last } from "lodash";
3
+ import React from "react";
4
+ import { getAirlines, getDateText, parseFlightLines } from "./sidebar-util";
5
+ import translations from "../../translations/translations.json";
6
+
7
+ interface SidebarFlightProps {
8
+ title: string;
9
+ flight: BookingPackageFlight;
10
+ }
11
+
12
+ const SidebarFlight: React.FC<SidebarFlightProps> = ({ title, flight }) => {
13
+ const flightLines = parseFlightLines(flight.flightMetaData);
14
+ const firstFlight = first(flightLines);
15
+ const lastFlight = last(flightLines);
16
+
17
+ return (
18
+ <div className="pricing-summary__group">
19
+ <h6 className="pricing-summary__title">{title}</h6>
20
+ <div className="pricing-summary__row">
21
+ <div className="pricing-summary__property">
22
+ {translations.SIDEBAR.FLIGHT_DEPARTURE}
23
+ </div>
24
+ <div className="pricing-summary__value">
25
+ {firstFlight?.departureAirportDescription} (
26
+ {firstFlight?.departureAirportIata})<br />
27
+ {getDateText(firstFlight?.departureDate)} {firstFlight?.departureTime}
28
+ </div>
29
+ </div>
30
+
31
+ <div className="pricing-summary__row">
32
+ <div className="pricing-summary__property">
33
+ {translations.SIDEBAR.FLIGHT_ARRIVAL}
34
+ </div>
35
+ <div className="pricing-summary__value">
36
+ {lastFlight?.arrivalAirportDescription} (
37
+ {lastFlight?.arrivalAirportIata})<br />
38
+ {getDateText(lastFlight?.arrivalDate)} {lastFlight?.arrivalTime}
39
+ </div>
40
+ </div>
41
+
42
+ <div className="pricing-summary__row">
43
+ <div className="pricing-summary__property">
44
+ {flight.flightMetaData.flightLines.length > 1 && (
45
+ <i>
46
+ {flight.flightMetaData.flightLines.length - 1}{"x "}
47
+ {translations.SIDEBAR.CHANGES}
48
+ </i>
49
+ )}
50
+ </div>
51
+ <div className="pricing-summary__value">{getAirlines(flightLines)}</div>
52
+ </div>
53
+ {flight.flightMetaData.luggageIncluded && (
54
+ <div className="pricing-summary__row">
55
+ <div className="pricing-summary__property"></div>
56
+ <div className="pricing-summary__value">
57
+ {translations.SIDEBAR.LUGGAGE_INCLUDED}
58
+ </div>
59
+ </div>
60
+ )}
61
+ </div>
62
+ );
63
+ };
64
+
65
+ export default SidebarFlight;
@@ -149,6 +149,9 @@ const Sidebar: React.FC<SidebarProps> = ({
149
149
  {isOnRequest
150
150
  ? ` (${translations.SIDEBAR.ON_REQUEST})`
151
151
  : ""}
152
+ {option?.isOnRequest
153
+ ? ` (${translations.SIDEBAR.ON_REQUEST})`
154
+ : ""}
152
155
  </div>
153
156
  <div className="pricing-summary__value">
154
157
  {option?.price && formatPrice(option?.price)}
@@ -5,7 +5,7 @@ import {
5
5
  selectTravelersFormValues,
6
6
  } from "../travelers-form/travelers-form-slice";
7
7
  import { selectUserValidated, setUserValidated } from "./summary-slice";
8
- import { setBookingNumber } from "../booking/booking-slice";
8
+ import { setBookingNumber, setBookingRemarks } from "../booking/booking-slice";
9
9
  import { useSelector } from "react-redux";
10
10
  import { useLocation } from "@reach/router";
11
11
  import Icon from "../../components/icon";
@@ -47,6 +47,7 @@ const Summary: React.FC<SummaryProps> = () => {
47
47
  const [checkboxes, setCheckboxes] = useState<
48
48
  SummaryCheckbox[] | undefined | null
49
49
  >(settings.summary.checkboxes);
50
+ const [remarks, setRemarks] = useState<string>("");
50
51
 
51
52
  const bookingQueryString = useSelector(selectBookingQueryString);
52
53
  const travelerFormValues = useSelector(selectTravelersFormValues);
@@ -140,6 +141,12 @@ const Summary: React.FC<SummaryProps> = () => {
140
141
  setCheckboxes(newCheckboxes);
141
142
  };
142
143
 
144
+ const handleRemarksChange = (text: string) => {
145
+ dispatch(setBookingRemarks(text));
146
+
147
+ setRemarks(text);
148
+ };
149
+
143
150
  return (
144
151
  <>
145
152
  {isSubmitting && settings.loaderComponent}
@@ -259,10 +266,10 @@ const Summary: React.FC<SummaryProps> = () => {
259
266
  </p>
260
267
  </li>
261
268
  {!isEmpty(activeOption?.groups) &&
262
- activeOption?.groups.map((x) => {
269
+ activeOption?.groups.map((x, i) => {
263
270
  if (!x.options.some((y) => y.isSelected)) return;
264
271
 
265
- return <SummaryBookingOption group={x} />;
272
+ return <SummaryBookingOption key={i} group={x} />;
266
273
  })}
267
274
  {!isEmpty(activeOption?.optionUnits) &&
268
275
  activeOption?.optionUnits.map((x) => (
@@ -275,8 +282,9 @@ const Summary: React.FC<SummaryProps> = () => {
275
282
  {packageDetails?.outwardFlights &&
276
283
  packageDetails.outwardFlights
277
284
  .filter((x) => x.isSelected)
278
- .map((flight) => (
285
+ .map((flight, i) => (
279
286
  <SummaryFlight
287
+ key={i}
280
288
  flight={flight}
281
289
  header={translations.SIDEBAR.DEPARTURE_FLIGHT}
282
290
  />
@@ -284,8 +292,9 @@ const Summary: React.FC<SummaryProps> = () => {
284
292
  {packageDetails?.returnFlights &&
285
293
  packageDetails.returnFlights
286
294
  .filter((x) => x.isSelected)
287
- .map((flight) => (
295
+ .map((flight, i) => (
288
296
  <SummaryFlight
297
+ key={i}
289
298
  flight={flight}
290
299
  header={translations.SIDEBAR.ARRIVAL_FLIGHT}
291
300
  />
@@ -354,6 +363,27 @@ const Summary: React.FC<SummaryProps> = () => {
354
363
  </div>
355
364
  )}
356
365
 
366
+ <div className="form__region">
367
+ <div className="form__row">
368
+ <div className="form__group">
369
+ <div className="form__region-header">
370
+ <h5 className="form__region-heading">
371
+ {translations.SUMMARY.REMARKS}
372
+ </h5>
373
+ </div>
374
+ </div>
375
+ </div>
376
+ <div className="form__row">
377
+ <div className="form__group">
378
+ <textarea
379
+ className="form__input"
380
+ defaultValue={remarks}
381
+ onChange={(e) => handleRemarksChange(e.target.value)}
382
+ ></textarea>
383
+ </div>
384
+ </div>
385
+ </div>
386
+
357
387
  <div className="form__region">
358
388
  <div className="form__row">
359
389
  <div className="form__group">
@@ -45,7 +45,8 @@
45
45
  "ARRIVAL_FLIGHT": "Vlucht terugreis",
46
46
  "FLIGHT_DEPARTURE": "Vertrek",
47
47
  "FLIGHT_ARRIVAL": "Aankomst",
48
- "ON_REQUEST": "Op aanvraag"
48
+ "ON_REQUEST": "Op aanvraag",
49
+ "CHANGES": "overstappen"
49
50
  },
50
51
  "TRAVELERS_FORM": {
51
52
  "PERSONS": "Personen",
@@ -102,7 +103,8 @@
102
103
  "NOTIFICATIONS_TITLE": "Aandacht",
103
104
  "VALIDATE_TITLE": "Controleer je gegevens",
104
105
  "VALIDATE_TEXT": "Je staat op het punt je boeking te bevestigen. Contoleer of alle gegevens correct zijn. Deze zijn definitief en niet meer aanpasbaar.",
105
- "OPTIONS": "Opties"
106
+ "OPTIONS": "Opties",
107
+ "REMARKS": "Opmerkingen"
106
108
  },
107
109
  "CONFIRMATION": {
108
110
  "TITLE_TEXT1": "Je boeking met nummer ",