@qite/tide-booking-component 1.4.2 → 1.4.5

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 (132) hide show
  1. package/.vs/ProjectSettings.json +3 -3
  2. package/.vs/VSWorkspaceState.json +5 -5
  3. package/README.md +8 -8
  4. package/build/build-cjs/booking-wizard/components/phone-input.d.ts +17 -0
  5. package/build/build-cjs/booking-wizard/features/booking/selectors.d.ts +41 -12
  6. package/build/build-cjs/booking-wizard/features/summary/summary-flight.d.ts +2 -2
  7. package/build/build-cjs/booking-wizard/features/travelers-form/controls/gender-control.d.ts +5 -0
  8. package/build/build-cjs/booking-wizard/features/travelers-form/travelers-form-util.d.ts +7 -0
  9. package/build/build-cjs/booking-wizard/features/travelers-form/validate-form.d.ts +2 -2
  10. package/build/build-cjs/booking-wizard/types.d.ts +13 -0
  11. package/build/build-cjs/index.js +458 -273
  12. package/build/build-cjs/shared/utils/localization-util.d.ts +3 -0
  13. package/build/build-esm/booking-wizard/components/phone-input.d.ts +17 -0
  14. package/build/build-esm/booking-wizard/features/booking/selectors.d.ts +41 -12
  15. package/build/build-esm/booking-wizard/features/summary/summary-flight.d.ts +2 -2
  16. package/build/build-esm/booking-wizard/features/travelers-form/controls/gender-control.d.ts +5 -0
  17. package/build/build-esm/booking-wizard/features/travelers-form/travelers-form-util.d.ts +7 -0
  18. package/build/build-esm/booking-wizard/features/travelers-form/validate-form.d.ts +2 -2
  19. package/build/build-esm/booking-wizard/types.d.ts +13 -0
  20. package/build/build-esm/index.js +460 -275
  21. package/build/build-esm/shared/utils/localization-util.d.ts +3 -0
  22. package/package.json +1 -1
  23. package/rollup.config.js +23 -23
  24. package/src/booking-product/components/age-select.tsx +35 -35
  25. package/src/booking-product/components/amount-input.tsx +78 -78
  26. package/src/booking-product/components/date-range-picker/calendar-day.tsx +58 -58
  27. package/src/booking-product/components/date-range-picker/calendar.tsx +178 -178
  28. package/src/booking-product/components/date-range-picker/index.tsx +196 -196
  29. package/src/booking-product/components/dates.tsx +136 -136
  30. package/src/booking-product/components/footer.tsx +69 -69
  31. package/src/booking-product/components/header.tsx +79 -79
  32. package/src/booking-product/components/icon.tsx +251 -251
  33. package/src/booking-product/components/rating.tsx +21 -21
  34. package/src/booking-product/components/rooms.tsx +199 -199
  35. package/src/booking-product/index.tsx +30 -30
  36. package/src/booking-product/settings-context.ts +14 -14
  37. package/src/booking-product/types.ts +28 -28
  38. package/src/booking-product/utils/api.ts +25 -25
  39. package/src/booking-product/utils/price.ts +28 -28
  40. package/src/booking-wizard/api-settings-slice.ts +24 -24
  41. package/src/booking-wizard/components/icon.tsx +508 -508
  42. package/src/booking-wizard/components/labeled-input.tsx +64 -64
  43. package/src/booking-wizard/components/labeled-select.tsx +69 -69
  44. package/src/booking-wizard/components/message.tsx +34 -34
  45. package/src/booking-wizard/components/multi-range-filter.tsx +113 -113
  46. package/src/booking-wizard/components/phone-input.tsx +181 -0
  47. package/src/booking-wizard/components/product-card.tsx +37 -37
  48. package/src/booking-wizard/components/step-indicator.tsx +51 -51
  49. package/src/booking-wizard/components/step-route.tsx +27 -27
  50. package/src/booking-wizard/declarations.d.ts +4 -4
  51. package/src/booking-wizard/features/booking/api.ts +49 -49
  52. package/src/booking-wizard/features/booking/booking-slice.ts +2 -0
  53. package/src/booking-wizard/features/booking/booking.tsx +28 -28
  54. package/src/booking-wizard/features/booking/constants.ts +16 -16
  55. package/src/booking-wizard/features/booking/selectors.ts +17 -14
  56. package/src/booking-wizard/features/error/error.tsx +78 -78
  57. package/src/booking-wizard/features/flight-options/flight-filter.tsx +432 -432
  58. package/src/booking-wizard/features/flight-options/flight-option-flight.tsx +385 -385
  59. package/src/booking-wizard/features/flight-options/flight-option-modal.tsx +229 -229
  60. package/src/booking-wizard/features/flight-options/flight-option.tsx +80 -80
  61. package/src/booking-wizard/features/flight-options/index.tsx +196 -196
  62. package/src/booking-wizard/features/price-details/price-details-api.ts +24 -24
  63. package/src/booking-wizard/features/price-details/price-details-slice.ts +178 -178
  64. package/src/booking-wizard/features/price-details/util.ts +155 -155
  65. package/src/booking-wizard/features/product-options/no-options.tsx +21 -21
  66. package/src/booking-wizard/features/product-options/none-option.tsx +121 -121
  67. package/src/booking-wizard/features/product-options/option-booking-airline-group.tsx +64 -64
  68. package/src/booking-wizard/features/product-options/option-booking-group.tsx +216 -216
  69. package/src/booking-wizard/features/product-options/option-item.tsx +321 -321
  70. package/src/booking-wizard/features/product-options/option-pax-card.tsx +201 -201
  71. package/src/booking-wizard/features/product-options/option-pax-group.tsx +175 -175
  72. package/src/booking-wizard/features/product-options/option-unit-group.tsx +198 -198
  73. package/src/booking-wizard/features/product-options/option-units-card.tsx +185 -185
  74. package/src/booking-wizard/features/room-options/index.tsx +187 -187
  75. package/src/booking-wizard/features/room-options/room-utils.ts +190 -190
  76. package/src/booking-wizard/features/room-options/room.tsx +161 -161
  77. package/src/booking-wizard/features/room-options/traveler-rooms.tsx +75 -75
  78. package/src/booking-wizard/features/sidebar/sidebar-flight.tsx +4 -2
  79. package/src/booking-wizard/features/sidebar/sidebar-util.ts +2 -0
  80. package/src/booking-wizard/features/summary/summary-booking-option-unit.tsx +25 -25
  81. package/src/booking-wizard/features/summary/summary-flight.tsx +7 -6
  82. package/src/booking-wizard/features/summary/summary-per-booking-option-group.tsx +69 -69
  83. package/src/booking-wizard/features/summary/summary-per-pax-option-group.tsx +63 -63
  84. package/src/booking-wizard/features/summary/summary-per-unit-option-group.tsx +66 -66
  85. package/src/booking-wizard/features/summary/summary-slice.ts +28 -28
  86. package/src/booking-wizard/features/summary/summary.tsx +91 -62
  87. package/src/booking-wizard/features/travelers-form/controls/gender-control.tsx +70 -0
  88. package/src/booking-wizard/features/travelers-form/travelers-form-util.ts +11 -0
  89. package/src/booking-wizard/features/travelers-form/travelers-form.tsx +451 -313
  90. package/src/booking-wizard/features/travelers-form/type-ahead-input.tsx +101 -101
  91. package/src/booking-wizard/features/travelers-form/validate-form.ts +84 -98
  92. package/src/booking-wizard/index.tsx +36 -36
  93. package/src/booking-wizard/store.ts +31 -31
  94. package/src/booking-wizard/types.ts +15 -0
  95. package/src/index.ts +4 -4
  96. package/src/shared/components/loader.tsx +16 -16
  97. package/src/shared/translations/en-GB.json +3 -0
  98. package/src/shared/translations/fr-BE.json +3 -0
  99. package/src/shared/translations/nl-BE.json +3 -0
  100. package/src/shared/types.ts +4 -4
  101. package/src/shared/utils/class-util.ts +9 -9
  102. package/src/shared/utils/localization-util.ts +62 -62
  103. package/src/shared/utils/query-string-util.ts +119 -119
  104. package/styles/booking-product-variables.scss +394 -394
  105. package/styles/booking-product.scss +446 -446
  106. package/styles/booking-wizard.scss +1 -0
  107. package/styles/components/_animations.scss +39 -39
  108. package/styles/components/_base.scss +107 -107
  109. package/styles/components/_button.scss +238 -238
  110. package/styles/components/_checkbox.scss +219 -219
  111. package/styles/components/_cta.scss +208 -208
  112. package/styles/components/_date-list.scss +41 -41
  113. package/styles/components/_date-range-picker.scss +225 -225
  114. package/styles/components/_decrement-increment.scss +35 -35
  115. package/styles/components/_flight-option.scss +1429 -1429
  116. package/styles/components/_info-message.scss +71 -71
  117. package/styles/components/_input.scss +25 -25
  118. package/styles/components/_list.scss +187 -187
  119. package/styles/components/_loader.scss +72 -72
  120. package/styles/components/_mixins.scss +550 -550
  121. package/styles/components/_phone-input.scss +8 -0
  122. package/styles/components/_placeholders.scss +166 -166
  123. package/styles/components/_pricing-summary.scss +155 -155
  124. package/styles/components/_qsm.scss +17 -17
  125. package/styles/components/_radiobutton.scss +170 -170
  126. package/styles/components/_select-wrapper.scss +80 -80
  127. package/styles/components/_spinner.scss +29 -29
  128. package/styles/components/_table.scss +81 -81
  129. package/styles/components/_tree.scss +530 -530
  130. package/styles/components/_typeahead.scss +281 -281
  131. package/styles/components/_variables.scss +89 -89
  132. package/tsconfig.json +24 -24
@@ -1,69 +1,69 @@
1
- import {
2
- BookingOptionGroup,
3
- PerBookingPackageOption,
4
- } from "@qite/tide-client/build/types";
5
- import { isEmpty, isNil } from "lodash";
6
- import React from "react";
7
- import { getDateText } from "../sidebar/sidebar-util";
8
- import SummaryBookingOptionPax from "./summary-booking-option-pax";
9
- import SummaryBookingOptionUnit from "./summary-booking-option-unit";
10
-
11
- interface SummaryPerBookingOptionGroupProps {
12
- group: BookingOptionGroup<PerBookingPackageOption>;
13
- }
14
-
15
- const SummaryPerBookingOptionGroup: React.FC<
16
- SummaryPerBookingOptionGroupProps
17
- > = ({ group }) => {
18
- const groupOptions = group.options.filter((x) => x.isSelected);
19
-
20
- const renderOptions = () => (
21
- <>
22
- {groupOptions.map((opt) => (
23
- <li key={opt.line.entryLineGuid} className="list__item">
24
- {opt.line.productName}
25
- <ul>
26
- <li>
27
- {opt.line.accommodationName}
28
- {!isNil(opt.line?.regimeName) && ", "}
29
- {opt.line.regimeName}
30
- </li>
31
- </ul>
32
- {getDateText(opt.line.startDate)}
33
- {opt.line.startDate != opt.line.endDate
34
- ? ` > ${getDateText(opt.line.endDate)}`
35
- : ""}
36
-
37
- <ul>
38
- {!isEmpty(opt?.groups) &&
39
- opt?.groups.map((x) => {
40
- if (!x.options.some((y) => y.isSelected)) return;
41
-
42
- return <SummaryPerBookingOptionGroup group={x} />;
43
- })}
44
- {!isEmpty(opt?.units) &&
45
- opt?.units.map((x) => <SummaryBookingOptionUnit unit={x} />)}
46
- {!isEmpty(opt?.pax) &&
47
- opt?.pax.map((x) => <SummaryBookingOptionPax pax={x} />)}
48
- </ul>
49
- </li>
50
- ))}
51
- </>
52
- );
53
-
54
- return (
55
- <>
56
- {group.title ? (
57
- <li className="list__item">
58
- <h6>{group.title}</h6>
59
-
60
- <ul className="list">{renderOptions()}</ul>
61
- </li>
62
- ) : (
63
- <>{renderOptions()}</>
64
- )}
65
- </>
66
- );
67
- };
68
-
69
- export default SummaryPerBookingOptionGroup;
1
+ import {
2
+ BookingOptionGroup,
3
+ PerBookingPackageOption,
4
+ } from "@qite/tide-client/build/types";
5
+ import { isEmpty, isNil } from "lodash";
6
+ import React from "react";
7
+ import { getDateText } from "../sidebar/sidebar-util";
8
+ import SummaryBookingOptionPax from "./summary-booking-option-pax";
9
+ import SummaryBookingOptionUnit from "./summary-booking-option-unit";
10
+
11
+ interface SummaryPerBookingOptionGroupProps {
12
+ group: BookingOptionGroup<PerBookingPackageOption>;
13
+ }
14
+
15
+ const SummaryPerBookingOptionGroup: React.FC<
16
+ SummaryPerBookingOptionGroupProps
17
+ > = ({ group }) => {
18
+ const groupOptions = group.options.filter((x) => x.isSelected);
19
+
20
+ const renderOptions = () => (
21
+ <>
22
+ {groupOptions.map((opt) => (
23
+ <li key={opt.line.entryLineGuid} className="list__item">
24
+ {opt.line.productName}
25
+ <ul>
26
+ <li>
27
+ {opt.line.accommodationName}
28
+ {!isNil(opt.line?.regimeName) && ", "}
29
+ {opt.line.regimeName}
30
+ </li>
31
+ </ul>
32
+ {getDateText(opt.line.startDate)}
33
+ {opt.line.startDate != opt.line.endDate
34
+ ? ` > ${getDateText(opt.line.endDate)}`
35
+ : ""}
36
+
37
+ <ul>
38
+ {!isEmpty(opt?.groups) &&
39
+ opt?.groups.map((x) => {
40
+ if (!x.options.some((y) => y.isSelected)) return;
41
+
42
+ return <SummaryPerBookingOptionGroup group={x} />;
43
+ })}
44
+ {!isEmpty(opt?.units) &&
45
+ opt?.units.map((x) => <SummaryBookingOptionUnit unit={x} />)}
46
+ {!isEmpty(opt?.pax) &&
47
+ opt?.pax.map((x) => <SummaryBookingOptionPax pax={x} />)}
48
+ </ul>
49
+ </li>
50
+ ))}
51
+ </>
52
+ );
53
+
54
+ return (
55
+ <>
56
+ {group.title ? (
57
+ <li className="list__item">
58
+ <h6>{group.title}</h6>
59
+
60
+ <ul className="list">{renderOptions()}</ul>
61
+ </li>
62
+ ) : (
63
+ <>{renderOptions()}</>
64
+ )}
65
+ </>
66
+ );
67
+ };
68
+
69
+ export default SummaryPerBookingOptionGroup;
@@ -1,63 +1,63 @@
1
- import {
2
- BookingOptionGroup,
3
- PerPaxPackageOption,
4
- } from "@qite/tide-client/build/types";
5
- import { isEmpty, isNil } from "lodash";
6
- import React from "react";
7
- import { getDateText } from "../sidebar/sidebar-util";
8
-
9
- interface SummaryPerPaxOptionGroupProps {
10
- group: BookingOptionGroup<PerPaxPackageOption>;
11
- }
12
-
13
- const SummaryPerPaxOptionGroup: React.FC<SummaryPerPaxOptionGroupProps> = ({
14
- group,
15
- }) => {
16
- const groupOptions = group.options.filter((x) => x.isSelected);
17
-
18
- const renderOptions = () => (
19
- <>
20
- {groupOptions.map((opt) => (
21
- <li key={opt.line.entryLineGuid} className="list__item">
22
- {opt.line.productName}
23
- <ul>
24
- <li>
25
- {opt.line.accommodationName}
26
- {!isNil(opt.line?.regimeName) && ", "}
27
- {opt.line.regimeName}
28
- </li>
29
- </ul>
30
- {getDateText(opt.line.startDate)}
31
- {opt.line.startDate != opt.line.endDate
32
- ? ` > ${getDateText(opt.line.endDate)}`
33
- : ""}
34
-
35
- <ul className="list">
36
- {!isEmpty(opt?.groups) &&
37
- opt?.groups.map((x) => {
38
- if (!x.options.some((y) => y.isSelected)) return;
39
-
40
- return <SummaryPerPaxOptionGroup group={x} />;
41
- })}
42
- </ul>
43
- </li>
44
- ))}
45
- </>
46
- );
47
-
48
- return (
49
- <>
50
- {group.title ? (
51
- <li className="list__item">
52
- <h6>{group.title}</h6>
53
-
54
- <ul className="list">{renderOptions()}</ul>
55
- </li>
56
- ) : (
57
- <>{renderOptions()}</>
58
- )}
59
- </>
60
- );
61
- };
62
-
63
- export default SummaryPerPaxOptionGroup;
1
+ import {
2
+ BookingOptionGroup,
3
+ PerPaxPackageOption,
4
+ } from "@qite/tide-client/build/types";
5
+ import { isEmpty, isNil } from "lodash";
6
+ import React from "react";
7
+ import { getDateText } from "../sidebar/sidebar-util";
8
+
9
+ interface SummaryPerPaxOptionGroupProps {
10
+ group: BookingOptionGroup<PerPaxPackageOption>;
11
+ }
12
+
13
+ const SummaryPerPaxOptionGroup: React.FC<SummaryPerPaxOptionGroupProps> = ({
14
+ group,
15
+ }) => {
16
+ const groupOptions = group.options.filter((x) => x.isSelected);
17
+
18
+ const renderOptions = () => (
19
+ <>
20
+ {groupOptions.map((opt) => (
21
+ <li key={opt.line.entryLineGuid} className="list__item">
22
+ {opt.line.productName}
23
+ <ul>
24
+ <li>
25
+ {opt.line.accommodationName}
26
+ {!isNil(opt.line?.regimeName) && ", "}
27
+ {opt.line.regimeName}
28
+ </li>
29
+ </ul>
30
+ {getDateText(opt.line.startDate)}
31
+ {opt.line.startDate != opt.line.endDate
32
+ ? ` > ${getDateText(opt.line.endDate)}`
33
+ : ""}
34
+
35
+ <ul className="list">
36
+ {!isEmpty(opt?.groups) &&
37
+ opt?.groups.map((x) => {
38
+ if (!x.options.some((y) => y.isSelected)) return;
39
+
40
+ return <SummaryPerPaxOptionGroup group={x} />;
41
+ })}
42
+ </ul>
43
+ </li>
44
+ ))}
45
+ </>
46
+ );
47
+
48
+ return (
49
+ <>
50
+ {group.title ? (
51
+ <li className="list__item">
52
+ <h6>{group.title}</h6>
53
+
54
+ <ul className="list">{renderOptions()}</ul>
55
+ </li>
56
+ ) : (
57
+ <>{renderOptions()}</>
58
+ )}
59
+ </>
60
+ );
61
+ };
62
+
63
+ export default SummaryPerPaxOptionGroup;
@@ -1,66 +1,66 @@
1
- import {
2
- BookingOptionGroup,
3
- PerUnitPackageOption,
4
- } from "@qite/tide-client/build/types";
5
- import { isEmpty, isNil } from "lodash";
6
- import React from "react";
7
- import { getDateText } from "../sidebar/sidebar-util";
8
- import SummaryBookingOptionPax from "./summary-booking-option-pax";
9
-
10
- interface SummaryPerUnitOptionGroupProps {
11
- group: BookingOptionGroup<PerUnitPackageOption>;
12
- }
13
-
14
- const SummaryPerUnitOptionGroup: React.FC<SummaryPerUnitOptionGroupProps> = ({
15
- group,
16
- }) => {
17
- const groupOptions = group.options.filter((x) => x.isSelected);
18
-
19
- const renderOptions = () => (
20
- <>
21
- {groupOptions.map((opt) => (
22
- <li key={opt.line.entryLineGuid} className="list__item">
23
- {opt.line.productName}
24
- <ul>
25
- <li>
26
- {opt.line.accommodationName}
27
- {!isNil(opt.line?.regimeName) && ", "}
28
- {opt.line.regimeName}
29
- </li>
30
- </ul>
31
- {getDateText(opt.line.startDate)}
32
- {opt.line.startDate != opt.line.endDate
33
- ? ` > ${getDateText(opt.line.endDate)}`
34
- : ""}
35
-
36
- <ul>
37
- {!isEmpty(opt?.groups) &&
38
- opt?.groups.map((x) => {
39
- if (!x.options.some((y) => y.isSelected)) return;
40
-
41
- return <SummaryPerUnitOptionGroup group={x} />;
42
- })}
43
- {!isEmpty(opt?.pax) &&
44
- opt?.pax.map((x) => <SummaryBookingOptionPax pax={x} />)}
45
- </ul>
46
- </li>
47
- ))}
48
- </>
49
- );
50
-
51
- return (
52
- <>
53
- {group.title ? (
54
- <li className="list__item">
55
- <h6>{group.title}</h6>
56
-
57
- <ul className="list">{renderOptions()}</ul>
58
- </li>
59
- ) : (
60
- <>{renderOptions()}</>
61
- )}
62
- </>
63
- );
64
- };
65
-
66
- export default SummaryPerUnitOptionGroup;
1
+ import {
2
+ BookingOptionGroup,
3
+ PerUnitPackageOption,
4
+ } from "@qite/tide-client/build/types";
5
+ import { isEmpty, isNil } from "lodash";
6
+ import React from "react";
7
+ import { getDateText } from "../sidebar/sidebar-util";
8
+ import SummaryBookingOptionPax from "./summary-booking-option-pax";
9
+
10
+ interface SummaryPerUnitOptionGroupProps {
11
+ group: BookingOptionGroup<PerUnitPackageOption>;
12
+ }
13
+
14
+ const SummaryPerUnitOptionGroup: React.FC<SummaryPerUnitOptionGroupProps> = ({
15
+ group,
16
+ }) => {
17
+ const groupOptions = group.options.filter((x) => x.isSelected);
18
+
19
+ const renderOptions = () => (
20
+ <>
21
+ {groupOptions.map((opt) => (
22
+ <li key={opt.line.entryLineGuid} className="list__item">
23
+ {opt.line.productName}
24
+ <ul>
25
+ <li>
26
+ {opt.line.accommodationName}
27
+ {!isNil(opt.line?.regimeName) && ", "}
28
+ {opt.line.regimeName}
29
+ </li>
30
+ </ul>
31
+ {getDateText(opt.line.startDate)}
32
+ {opt.line.startDate != opt.line.endDate
33
+ ? ` > ${getDateText(opt.line.endDate)}`
34
+ : ""}
35
+
36
+ <ul>
37
+ {!isEmpty(opt?.groups) &&
38
+ opt?.groups.map((x) => {
39
+ if (!x.options.some((y) => y.isSelected)) return;
40
+
41
+ return <SummaryPerUnitOptionGroup group={x} />;
42
+ })}
43
+ {!isEmpty(opt?.pax) &&
44
+ opt?.pax.map((x) => <SummaryBookingOptionPax pax={x} />)}
45
+ </ul>
46
+ </li>
47
+ ))}
48
+ </>
49
+ );
50
+
51
+ return (
52
+ <>
53
+ {group.title ? (
54
+ <li className="list__item">
55
+ <h6>{group.title}</h6>
56
+
57
+ <ul className="list">{renderOptions()}</ul>
58
+ </li>
59
+ ) : (
60
+ <>{renderOptions()}</>
61
+ )}
62
+ </>
63
+ );
64
+ };
65
+
66
+ export default SummaryPerUnitOptionGroup;
@@ -1,28 +1,28 @@
1
- import { PayloadAction, createSlice } from "@reduxjs/toolkit";
2
-
3
- import { RootState } from "../../store";
4
-
5
- export interface SummaryState {
6
- userValidated: boolean;
7
- }
8
-
9
- const initialState: SummaryState = {
10
- userValidated: false,
11
- };
12
-
13
- const summarySlice = createSlice({
14
- name: "summary",
15
- initialState,
16
- reducers: {
17
- setUserValidated(state, action: PayloadAction<boolean>) {
18
- state.userValidated = action.payload;
19
- },
20
- },
21
- });
22
-
23
- export const { setUserValidated } = summarySlice.actions;
24
-
25
- export const selectUserValidated = (state: RootState) =>
26
- state.summary.userValidated;
27
-
28
- export default summarySlice.reducer;
1
+ import { PayloadAction, createSlice } from "@reduxjs/toolkit";
2
+
3
+ import { RootState } from "../../store";
4
+
5
+ export interface SummaryState {
6
+ userValidated: boolean;
7
+ }
8
+
9
+ const initialState: SummaryState = {
10
+ userValidated: false,
11
+ };
12
+
13
+ const summarySlice = createSlice({
14
+ name: "summary",
15
+ initialState,
16
+ reducers: {
17
+ setUserValidated(state, action: PayloadAction<boolean>) {
18
+ state.userValidated = action.payload;
19
+ },
20
+ },
21
+ });
22
+
23
+ export const { setUserValidated } = summarySlice.actions;
24
+
25
+ export const selectUserValidated = (state: RootState) =>
26
+ state.summary.userValidated;
27
+
28
+ export default summarySlice.reducer;
@@ -1,5 +1,5 @@
1
1
  import { book, validateVoucher, EntryStatus } from "@qite/tide-client";
2
- import { BookingPackageRequest, BookingPackageVoucherRequest } from "@qite/tide-client/build/types";
2
+ import { BookingPackageRequest, BookingPackageVoucherRequest, ServiceType } from "@qite/tide-client";
3
3
  import { Link, navigate, useLocation } from "@reach/router";
4
4
  import { compact, findIndex, isEmpty, isNil, uniqBy } from "lodash";
5
5
  import React, { useContext, useEffect, useState } from "react";
@@ -28,9 +28,13 @@ import {
28
28
  selectApiSettings,
29
29
  selectBookingPackageBookRequest,
30
30
  selectBookingQueryString,
31
+ selectDepartureFlight,
31
32
  selectLanguageCode,
32
33
  selectOfficeId,
33
34
  selectPackageDetails,
35
+ selectReturnFlight,
36
+ selectRoomOptionDepartureFlightsMetaData,
37
+ selectRoomOptionReturnFlightsMetaData,
34
38
  selectTranslations,
35
39
  } from "../booking/selectors";
36
40
  import {
@@ -79,6 +83,10 @@ const Summary: React.FC<SummaryProps> = () => {
79
83
  const languageCode = useSelector(selectLanguageCode);
80
84
  const officeId = useSelector(selectOfficeId);
81
85
  const agentId = useSelector(selectAgentAdressId);
86
+ const departureFlight = useSelector(selectDepartureFlight);
87
+ const departureFlightMetaData = departureFlight?.flightMetaData ?? useSelector(selectRoomOptionDepartureFlightsMetaData)?.[0];
88
+ const returnFlight = useSelector(selectReturnFlight);
89
+ const returnFlightMetaData = returnFlight?.flightMetaData ?? useSelector(selectRoomOptionReturnFlightsMetaData)?.[0];
82
90
 
83
91
  if (!travelerFormValues) {
84
92
  if (settings.skipRouter) {
@@ -334,22 +342,28 @@ const Summary: React.FC<SummaryProps> = () => {
334
342
  <li className="list__item">
335
343
  {traveler.birthDate.split("-").reverse().join("/")}
336
344
  </li>
337
- {isMainBooker && travelerFormValues?.street && (
338
- <>
339
- <li className="list__item">{`${travelerFormValues?.street
340
- } ${compact([
341
- travelerFormValues?.houseNumber,
342
- travelerFormValues?.box,
343
- ]).join(" ")}, ${travelerFormValues?.zipCode} ${travelerFormValues?.place
344
- }`}</li>
345
+ {isMainBooker && (<>
346
+ {travelerFormValues?.street && (
347
+ <>
348
+ <li className="list__item">{`${travelerFormValues?.street
349
+ } ${compact([
350
+ travelerFormValues?.houseNumber,
351
+ travelerFormValues?.box,
352
+ ]).join(" ")}, ${travelerFormValues?.zipCode} ${travelerFormValues?.place
353
+ }`}</li>
354
+ </>
355
+ )}
356
+ {travelerFormValues?.phone && (
345
357
  <li className="list__item">
346
358
  {travelerFormValues?.phone}
347
359
  </li>
360
+ )}
361
+ {travelerFormValues?.email && (
348
362
  <li className="list__item">
349
363
  {travelerFormValues?.email}
350
364
  </li>
351
- </>
352
- )}
365
+ )}
366
+ </>)}
353
367
  </ul>
354
368
  </div>
355
369
  );
@@ -371,58 +385,73 @@ const Summary: React.FC<SummaryProps> = () => {
371
385
  <div className="form__row">
372
386
  <div className="form__group">
373
387
  <ul className="list list--booking-summary">
374
- {activeOption?.rooms.flatMap((r) => r.options).filter(x => x.isSelected).map((roomOption, roomOptionIndex) => (<>
375
- <li key={roomOptionIndex}>
376
- <h6>{roomOption?.productName}</h6>
377
- <ul>
378
- <li className="list__item">
379
- {roomOption?.accommodationName}
380
- {!isNil(roomOption?.regimeName) && ", "}
381
- {roomOption?.regimeName}
382
- </li>
383
- </ul>
384
- <p>
385
- ({roomOption?.from === roomOption?.to
386
- ? getDateText(roomOption?.from)
387
- : <>{getDateText(roomOption?.from)} &gt; {getDateText(roomOption?.to)}</>})
388
- </p>
389
- </li>
390
- {!isEmpty(activeOption?.groups) &&
391
- activeOption?.groups.map((x, i) => {
392
- if (!x.options.some((y) => y.isSelected)) return;
393
-
394
- return <SummaryBookingOption key={i} group={x} />;
395
- })}
396
- {!isEmpty(activeOption?.optionUnits) &&
397
- activeOption?.optionUnits.map((x, i) => (
398
- <SummaryBookingOptionUnit key={i} unit={x} />
399
- ))}
400
- {!isEmpty(activeOption?.optionPax) &&
401
- activeOption?.optionPax.map((x, i) => (
402
- <SummaryBookingOptionPax key={i} pax={x} />
403
- ))}
404
- {packageDetails?.outwardFlights &&
405
- packageDetails.outwardFlights
406
- .filter((x) => x.isSelected)
407
- .map((flight, i) => (
408
- <SummaryFlight
409
- key={i}
410
- flight={flight}
411
- header={translations.SIDEBAR.DEPARTURE_FLIGHT}
412
- />
388
+ {activeOption?.serviceType == ServiceType.flight && departureFlightMetaData && returnFlightMetaData
389
+ ? <>
390
+ <SummaryFlight
391
+ flightMetaData={departureFlightMetaData}
392
+ header={translations.SIDEBAR.DEPARTURE_FLIGHT}
393
+ />
394
+ <SummaryFlight
395
+ flightMetaData={returnFlightMetaData}
396
+ header={translations.SIDEBAR.ARRIVAL_FLIGHT}
397
+ />
398
+ </>
399
+ : <>
400
+ {activeOption?.rooms.flatMap((r) => r.options).filter(x => x.isSelected).map((roomOption, roomOptionIndex) => (
401
+ <React.Fragment key={roomOptionIndex}>
402
+ <li>
403
+ <h6>{roomOption?.productName}</h6>
404
+ <ul>
405
+ <li className="list__item">
406
+ {roomOption?.accommodationName}
407
+ {!isNil(roomOption?.regimeName) && ", "}
408
+ {roomOption?.regimeName}
409
+ </li>
410
+ </ul>
411
+ <p>
412
+ ({roomOption?.from === roomOption?.to
413
+ ? getDateText(roomOption?.from)
414
+ : <>{getDateText(roomOption?.from)} &gt; {getDateText(roomOption?.to)}</>})
415
+ </p>
416
+ </li>
417
+ {!isEmpty(activeOption?.groups) &&
418
+ activeOption?.groups.map((x, i) => {
419
+ if (!x.options.some((y) => y.isSelected)) return;
420
+
421
+ return <SummaryBookingOption key={i} group={x} />;
422
+ })}
423
+ {!isEmpty(activeOption?.optionUnits) &&
424
+ activeOption?.optionUnits.map((x, i) => (
425
+ <SummaryBookingOptionUnit key={i} unit={x} />
426
+ ))}
427
+ {!isEmpty(activeOption?.optionPax) &&
428
+ activeOption?.optionPax.map((x, i) => (
429
+ <SummaryBookingOptionPax key={i} pax={x} />
430
+ ))}
431
+ {packageDetails?.outwardFlights &&
432
+ packageDetails.outwardFlights
433
+ .filter((x) => x.isSelected)
434
+ .map((flight, i) => (
435
+ <SummaryFlight
436
+ key={i}
437
+ flightMetaData={flight.flightMetaData}
438
+ header={translations.SIDEBAR.DEPARTURE_FLIGHT}
439
+ />
440
+ ))}
441
+ {packageDetails?.returnFlights &&
442
+ packageDetails.returnFlights
443
+ .filter((x) => x.isSelected)
444
+ .map((flight, i) => (
445
+ <SummaryFlight
446
+ key={i}
447
+ flightMetaData={flight.flightMetaData}
448
+ header={translations.SIDEBAR.ARRIVAL_FLIGHT}
449
+ />
450
+ ))}
451
+ </React.Fragment>
413
452
  ))}
414
- {packageDetails?.returnFlights &&
415
- packageDetails.returnFlights
416
- .filter((x) => x.isSelected)
417
- .map((flight, i) => (
418
- <SummaryFlight
419
- key={i}
420
- flight={flight}
421
- header={translations.SIDEBAR.ARRIVAL_FLIGHT}
422
- />
423
- ))}
424
- </>
425
- ))}
453
+ </>
454
+ }
426
455
  </ul>
427
456
  </div>
428
457
  </div>