@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,199 +1,199 @@
1
- import { range } from "lodash";
2
- import React, { useContext, useEffect, useState } from "react";
3
- import { buildClassName } from "../../shared/utils/class-util";
4
- import { getTranslations } from "../../shared/utils/localization-util";
5
- import SettingsContext from "../settings-context";
6
- import { ProductRoom } from "../types";
7
- import AgeSelect from "./age-select";
8
- import AmountInput from "./amount-input";
9
- import Icon from "./icon";
10
-
11
- interface RoomsProps {
12
- rooms: ProductRoom[];
13
- isDisabled: boolean;
14
- setIsDisabled: (isOpen: boolean) => void;
15
- onChange: (rooms: ProductRoom[]) => void;
16
- }
17
-
18
- const Rooms: React.FC<RoomsProps> = ({
19
- rooms,
20
- isDisabled,
21
- setIsDisabled,
22
- onChange,
23
- }) => {
24
- const [isTouched, setIsTouched] = useState<boolean>(false);
25
- const [currentRooms, setRoomState] = useState<ProductRoom[]>(rooms);
26
-
27
- useEffect(() => {
28
- setRoomState(rooms);
29
- }, [rooms])
30
-
31
- const { language } = useContext(SettingsContext);
32
- const translations = getTranslations(language);
33
-
34
- const handleCloseClick = () => {
35
- setIsDisabled(true);
36
- if (isTouched) onChange(currentRooms);
37
- };
38
-
39
- return (
40
- <div className="booking-product__rooms">
41
- <div className="booking-product__rooms-title">
42
- <Icon name="ui-user" width={25} height={25} />
43
- {translations.PRODUCT.WHO_YOU_TRAVELING_WITH}
44
- </div>
45
- <div className="booking-product__rooms__container">
46
- <div className="booking-product__rooms__wrapper">
47
- <div className="booking-product__rooms__header">
48
- <div className="booking-product__rooms__heading">
49
- {translations.SHARED.ROOMS}
50
- </div>
51
- <div className="booking-product__rooms__actions">
52
- <AmountInput
53
- label={translations.PRODUCT.NUMBER_OF_ROOMS}
54
- value={currentRooms.length}
55
- disabled={isDisabled}
56
- min={1}
57
- onChange={(value) => {
58
- setRoomState(
59
- range(0, value).map(
60
- (roomIndex) =>
61
- currentRooms[roomIndex] ?? {
62
- adults: 2,
63
- children: 0,
64
- childAges: [],
65
- }
66
- )
67
- );
68
-
69
- setIsTouched(true);
70
- }}
71
- />
72
- </div>
73
- </div>
74
- <div className="booking-product__rooms-body">
75
- {currentRooms.map((room, roomIndex) => (
76
- <div className="booking-product__room" key={roomIndex}>
77
- <div className="booking-product__room__header">
78
- <h3 className="booking-product__room__heading">
79
- {translations.SHARED.ROOM + " " + (roomIndex + 1)}
80
- </h3>
81
- <div className="booking-product__room__actions">
82
- <AmountInput
83
- label={translations.SHARED.ADULTS}
84
- value={room.adults}
85
- disabled={isDisabled}
86
- min={1}
87
- onChange={(value) => {
88
- setRoomState(
89
- currentRooms.map((room, i) =>
90
- i === roomIndex ? { ...room, adults: value } : room
91
- )
92
- );
93
-
94
- setIsTouched(true);
95
- }}
96
- />
97
- <AmountInput
98
- label={translations.SHARED.CHILDREN}
99
- value={room.children}
100
- disabled={isDisabled}
101
- onChange={(value) => {
102
- setRoomState(
103
- currentRooms.map((room, i) =>
104
- i === roomIndex
105
- ? {
106
- ...room,
107
- children: value,
108
- childAges: range(0, value).map(
109
- (childIndex) =>
110
- room.childAges[childIndex] ?? 0
111
- ),
112
- }
113
- : room
114
- )
115
- );
116
-
117
- setIsTouched(true);
118
- }}
119
- />
120
- </div>
121
- </div>
122
- {room.children > 0 && (
123
- <div className="booking-product__room-children">
124
- <label className="booking-product__room-children-label">
125
- {translations.PRODUCT.AGE_BY_DEPARTURE_DATE}
126
- </label>
127
- <div className="booking-product__room-children-ages">
128
- {range(0, room.children).map((childIndex) => (
129
- <AgeSelect
130
- key={childIndex}
131
- value={room.childAges[childIndex]}
132
- disabled={isDisabled}
133
- onChange={(value) => {
134
- setRoomState(
135
- currentRooms.map((room, selectorRoomIndex) =>
136
- roomIndex === selectorRoomIndex
137
- ? {
138
- ...room,
139
- childAges: room.childAges
140
- .map((age, i) =>
141
- childIndex === i ? value : age
142
- )
143
- .sort((a, b) => b - a),
144
- }
145
- : room
146
- )
147
- );
148
-
149
- setIsTouched(true);
150
- }}
151
- />
152
- ))}
153
- </div>
154
- </div>
155
- )}
156
- </div>
157
- ))}
158
- </div>
159
- </div>
160
- <div className="booking-product__rooms-footer">
161
- {isDisabled ? (
162
- <button
163
- type="button"
164
- className={buildClassName(["cta--secondary", "cta--add"])}
165
- title={translations.PRODUCT.EDIT}
166
- onClick={() => {
167
- setIsDisabled(false);
168
- setIsTouched(false);
169
- }}
170
- >
171
- <span>
172
- <Icon name="ui-pencil" width={25} height={25} />
173
- {translations.PRODUCT.EDIT}
174
- </span>
175
- </button>
176
- ) : (
177
- <button
178
- type="button"
179
- className={buildClassName([
180
- "cta",
181
- isTouched ? "cta--secondary" : "cta--secondary",
182
- "cta--add",
183
- ])}
184
- title={translations.PRODUCT.APPLY}
185
- onClick={handleCloseClick}
186
- >
187
- <span>
188
- <Icon name="ui-check" />
189
- {translations.PRODUCT.APPLY}
190
- </span>
191
- </button>
192
- )}
193
- </div>
194
- </div>
195
- </div>
196
- );
197
- };
198
-
199
- export default Rooms;
1
+ import { range } from "lodash";
2
+ import React, { useContext, useEffect, useState } from "react";
3
+ import { buildClassName } from "../../shared/utils/class-util";
4
+ import { getTranslations } from "../../shared/utils/localization-util";
5
+ import SettingsContext from "../settings-context";
6
+ import { ProductRoom } from "../types";
7
+ import AgeSelect from "./age-select";
8
+ import AmountInput from "./amount-input";
9
+ import Icon from "./icon";
10
+
11
+ interface RoomsProps {
12
+ rooms: ProductRoom[];
13
+ isDisabled: boolean;
14
+ setIsDisabled: (isOpen: boolean) => void;
15
+ onChange: (rooms: ProductRoom[]) => void;
16
+ }
17
+
18
+ const Rooms: React.FC<RoomsProps> = ({
19
+ rooms,
20
+ isDisabled,
21
+ setIsDisabled,
22
+ onChange,
23
+ }) => {
24
+ const [isTouched, setIsTouched] = useState<boolean>(false);
25
+ const [currentRooms, setRoomState] = useState<ProductRoom[]>(rooms);
26
+
27
+ useEffect(() => {
28
+ setRoomState(rooms);
29
+ }, [rooms])
30
+
31
+ const { language } = useContext(SettingsContext);
32
+ const translations = getTranslations(language);
33
+
34
+ const handleCloseClick = () => {
35
+ setIsDisabled(true);
36
+ if (isTouched) onChange(currentRooms);
37
+ };
38
+
39
+ return (
40
+ <div className="booking-product__rooms">
41
+ <div className="booking-product__rooms-title">
42
+ <Icon name="ui-user" width={25} height={25} />
43
+ {translations.PRODUCT.WHO_YOU_TRAVELING_WITH}
44
+ </div>
45
+ <div className="booking-product__rooms__container">
46
+ <div className="booking-product__rooms__wrapper">
47
+ <div className="booking-product__rooms__header">
48
+ <div className="booking-product__rooms__heading">
49
+ {translations.SHARED.ROOMS}
50
+ </div>
51
+ <div className="booking-product__rooms__actions">
52
+ <AmountInput
53
+ label={translations.PRODUCT.NUMBER_OF_ROOMS}
54
+ value={currentRooms.length}
55
+ disabled={isDisabled}
56
+ min={1}
57
+ onChange={(value) => {
58
+ setRoomState(
59
+ range(0, value).map(
60
+ (roomIndex) =>
61
+ currentRooms[roomIndex] ?? {
62
+ adults: 2,
63
+ children: 0,
64
+ childAges: [],
65
+ }
66
+ )
67
+ );
68
+
69
+ setIsTouched(true);
70
+ }}
71
+ />
72
+ </div>
73
+ </div>
74
+ <div className="booking-product__rooms-body">
75
+ {currentRooms.map((room, roomIndex) => (
76
+ <div className="booking-product__room" key={roomIndex}>
77
+ <div className="booking-product__room__header">
78
+ <h3 className="booking-product__room__heading">
79
+ {translations.SHARED.ROOM + " " + (roomIndex + 1)}
80
+ </h3>
81
+ <div className="booking-product__room__actions">
82
+ <AmountInput
83
+ label={translations.SHARED.ADULTS}
84
+ value={room.adults}
85
+ disabled={isDisabled}
86
+ min={1}
87
+ onChange={(value) => {
88
+ setRoomState(
89
+ currentRooms.map((room, i) =>
90
+ i === roomIndex ? { ...room, adults: value } : room
91
+ )
92
+ );
93
+
94
+ setIsTouched(true);
95
+ }}
96
+ />
97
+ <AmountInput
98
+ label={translations.SHARED.CHILDREN}
99
+ value={room.children}
100
+ disabled={isDisabled}
101
+ onChange={(value) => {
102
+ setRoomState(
103
+ currentRooms.map((room, i) =>
104
+ i === roomIndex
105
+ ? {
106
+ ...room,
107
+ children: value,
108
+ childAges: range(0, value).map(
109
+ (childIndex) =>
110
+ room.childAges[childIndex] ?? 0
111
+ ),
112
+ }
113
+ : room
114
+ )
115
+ );
116
+
117
+ setIsTouched(true);
118
+ }}
119
+ />
120
+ </div>
121
+ </div>
122
+ {room.children > 0 && (
123
+ <div className="booking-product__room-children">
124
+ <label className="booking-product__room-children-label">
125
+ {translations.PRODUCT.AGE_BY_DEPARTURE_DATE}
126
+ </label>
127
+ <div className="booking-product__room-children-ages">
128
+ {range(0, room.children).map((childIndex) => (
129
+ <AgeSelect
130
+ key={childIndex}
131
+ value={room.childAges[childIndex]}
132
+ disabled={isDisabled}
133
+ onChange={(value) => {
134
+ setRoomState(
135
+ currentRooms.map((room, selectorRoomIndex) =>
136
+ roomIndex === selectorRoomIndex
137
+ ? {
138
+ ...room,
139
+ childAges: room.childAges
140
+ .map((age, i) =>
141
+ childIndex === i ? value : age
142
+ )
143
+ .sort((a, b) => b - a),
144
+ }
145
+ : room
146
+ )
147
+ );
148
+
149
+ setIsTouched(true);
150
+ }}
151
+ />
152
+ ))}
153
+ </div>
154
+ </div>
155
+ )}
156
+ </div>
157
+ ))}
158
+ </div>
159
+ </div>
160
+ <div className="booking-product__rooms-footer">
161
+ {isDisabled ? (
162
+ <button
163
+ type="button"
164
+ className={buildClassName(["cta--secondary", "cta--add"])}
165
+ title={translations.PRODUCT.EDIT}
166
+ onClick={() => {
167
+ setIsDisabled(false);
168
+ setIsTouched(false);
169
+ }}
170
+ >
171
+ <span>
172
+ <Icon name="ui-pencil" width={25} height={25} />
173
+ {translations.PRODUCT.EDIT}
174
+ </span>
175
+ </button>
176
+ ) : (
177
+ <button
178
+ type="button"
179
+ className={buildClassName([
180
+ "cta",
181
+ isTouched ? "cta--secondary" : "cta--secondary",
182
+ "cta--add",
183
+ ])}
184
+ title={translations.PRODUCT.APPLY}
185
+ onClick={handleCloseClick}
186
+ >
187
+ <span>
188
+ <Icon name="ui-check" />
189
+ {translations.PRODUCT.APPLY}
190
+ </span>
191
+ </button>
192
+ )}
193
+ </div>
194
+ </div>
195
+ </div>
196
+ );
197
+ };
198
+
199
+ export default Rooms;
@@ -1,30 +1,30 @@
1
- import React from "react";
2
- import Product from "./components/product";
3
- import SettingsContext from "./settings-context";
4
- import { Settings } from "./types";
5
-
6
- interface BookingProductProps {
7
- productCode: string;
8
- productName: string;
9
- rating?: number;
10
- settings: Settings;
11
- }
12
-
13
- const BookingProduct: React.FC<BookingProductProps> = ({
14
- productCode,
15
- productName,
16
- rating,
17
- settings,
18
- }) => {
19
- return (
20
- <SettingsContext.Provider value={settings}>
21
- <Product
22
- productCode={productCode}
23
- productName={productName}
24
- rating={rating}
25
- ></Product>
26
- </SettingsContext.Provider>
27
- );
28
- };
29
-
30
- export default BookingProduct;
1
+ import React from "react";
2
+ import Product from "./components/product";
3
+ import SettingsContext from "./settings-context";
4
+ import { Settings } from "./types";
5
+
6
+ interface BookingProductProps {
7
+ productCode: string;
8
+ productName: string;
9
+ rating?: number;
10
+ settings: Settings;
11
+ }
12
+
13
+ const BookingProduct: React.FC<BookingProductProps> = ({
14
+ productCode,
15
+ productName,
16
+ rating,
17
+ settings,
18
+ }) => {
19
+ return (
20
+ <SettingsContext.Provider value={settings}>
21
+ <Product
22
+ productCode={productCode}
23
+ productName={productName}
24
+ rating={rating}
25
+ ></Product>
26
+ </SettingsContext.Provider>
27
+ );
28
+ };
29
+
30
+ export default BookingProduct;
@@ -1,14 +1,14 @@
1
- import React from "react";
2
- import { Settings } from "./types";
3
-
4
- interface ProductSettingsContextProps extends Settings {}
5
-
6
- const SettingsContext = React.createContext<ProductSettingsContextProps>({
7
- officeId: 1,
8
- catalogueId: 1,
9
- language: "nl-BE",
10
- basePath: "boeken",
11
- priceMode: 0,
12
- });
13
-
14
- export default SettingsContext;
1
+ import React from "react";
2
+ import { Settings } from "./types";
3
+
4
+ interface ProductSettingsContextProps extends Settings {}
5
+
6
+ const SettingsContext = React.createContext<ProductSettingsContextProps>({
7
+ officeId: 1,
8
+ catalogueId: 1,
9
+ language: "nl-BE",
10
+ basePath: "boeken",
11
+ priceMode: 0,
12
+ });
13
+
14
+ export default SettingsContext;
@@ -1,28 +1,28 @@
1
- export interface Settings {
2
- officeId: number;
3
- catalogueId: number;
4
- agentId?: number;
5
- basePath: string;
6
- language: string;
7
- includeFlights?: boolean;
8
- priceMode: number;
9
- icons?: string;
10
- apiUrl?: string;
11
- apiKey?: string;
12
- addProductToQuery?: boolean;
13
- isOffer?: boolean;
14
-
15
- alternativeActionText?: string;
16
- alternativeAction?: () => void;
17
- }
18
-
19
- export interface ProductRoom {
20
- adults: number;
21
- children: number;
22
- childAges: number[];
23
- }
24
-
25
- export interface DateRange {
26
- fromDate?: Date;
27
- toDate?: Date;
28
- }
1
+ export interface Settings {
2
+ officeId: number;
3
+ catalogueId: number;
4
+ agentId?: number;
5
+ basePath: string;
6
+ language: string;
7
+ includeFlights?: boolean;
8
+ priceMode: number;
9
+ icons?: string;
10
+ apiUrl?: string;
11
+ apiKey?: string;
12
+ addProductToQuery?: boolean;
13
+ isOffer?: boolean;
14
+
15
+ alternativeActionText?: string;
16
+ alternativeAction?: () => void;
17
+ }
18
+
19
+ export interface ProductRoom {
20
+ adults: number;
21
+ children: number;
22
+ childAges: number[];
23
+ }
24
+
25
+ export interface DateRange {
26
+ fromDate?: Date;
27
+ toDate?: Date;
28
+ }
@@ -1,25 +1,25 @@
1
- import { details } from "@qite/tide-client";
2
- import {
3
- BookingPackage,
4
- BookingPackageDetailsRequest,
5
- BookingPackageRequest,
6
- TideResponse,
7
- } from "@qite/tide-client/build/types";
8
- import { ApiSettingsState } from "../../shared/types";
9
- import { buildTideClientConfig } from "../../shared/utils/tide-api-utils";
10
-
11
- const fetchDetails = async (
12
- request: BookingPackageRequest<BookingPackageDetailsRequest>,
13
- signal: AbortSignal,
14
- languageCode?: string,
15
- apiSettings?: ApiSettingsState
16
- ): Promise<TideResponse<BookingPackage>> => {
17
- const tideClientConfig = buildTideClientConfig(apiSettings);
18
- return await details(tideClientConfig, request, signal, languageCode);
19
- };
20
-
21
- const packageApi = {
22
- fetchDetails,
23
- };
24
-
25
- export default packageApi;
1
+ import { details } from "@qite/tide-client";
2
+ import {
3
+ BookingPackage,
4
+ BookingPackageDetailsRequest,
5
+ BookingPackageRequest,
6
+ TideResponse,
7
+ } from "@qite/tide-client/build/types";
8
+ import { ApiSettingsState } from "../../shared/types";
9
+ import { buildTideClientConfig } from "../../shared/utils/tide-api-utils";
10
+
11
+ const fetchDetails = async (
12
+ request: BookingPackageRequest<BookingPackageDetailsRequest>,
13
+ signal: AbortSignal,
14
+ languageCode?: string,
15
+ apiSettings?: ApiSettingsState
16
+ ): Promise<TideResponse<BookingPackage>> => {
17
+ const tideClientConfig = buildTideClientConfig(apiSettings);
18
+ return await details(tideClientConfig, request, signal, languageCode);
19
+ };
20
+
21
+ const packageApi = {
22
+ fetchDetails,
23
+ };
24
+
25
+ export default packageApi;
@@ -1,28 +1,28 @@
1
- import { formatPrice } from "../../shared/utils/localization-util";
2
-
3
- export const formatPriceByMode = (
4
- price: number | undefined,
5
- priceMode: number,
6
- personCount: number,
7
- duration: number,
8
- perPersonLabel: string,
9
- perNightLabel: string,
10
- perPersonPerNightLabel: string,
11
- currencyCode: string
12
- ) => {
13
- if (!price) return "";
14
-
15
- switch (priceMode) {
16
- case 0:
17
- return `${formatPrice(price, currencyCode)}`;
18
- case 1:
19
- const perPersonPrice = price / personCount;
20
- return `${formatPrice(perPersonPrice, currencyCode)} / ${perPersonLabel}`;
21
- case 2:
22
- const perNightPrice = price / duration;
23
- return `${formatPrice(perNightPrice, currencyCode)} / ${perNightLabel}`;
24
- case 3:
25
- const perPersonPerNightPrice = price / duration;
26
- return `${formatPrice(perPersonPerNightPrice, currencyCode)} / ${perPersonPerNightLabel}`;
27
- }
28
- };
1
+ import { formatPrice } from "../../shared/utils/localization-util";
2
+
3
+ export const formatPriceByMode = (
4
+ price: number | undefined,
5
+ priceMode: number,
6
+ personCount: number,
7
+ duration: number,
8
+ perPersonLabel: string,
9
+ perNightLabel: string,
10
+ perPersonPerNightLabel: string,
11
+ currencyCode: string
12
+ ) => {
13
+ if (!price) return "";
14
+
15
+ switch (priceMode) {
16
+ case 0:
17
+ return `${formatPrice(price, currencyCode)}`;
18
+ case 1:
19
+ const perPersonPrice = price / personCount;
20
+ return `${formatPrice(perPersonPrice, currencyCode)} / ${perPersonLabel}`;
21
+ case 2:
22
+ const perNightPrice = price / duration;
23
+ return `${formatPrice(perNightPrice, currencyCode)} / ${perNightLabel}`;
24
+ case 3:
25
+ const perPersonPerNightPrice = price / duration;
26
+ return `${formatPrice(perPersonPerNightPrice, currencyCode)} / ${perPersonPerNightLabel}`;
27
+ }
28
+ };