@qite/tide-booking-component 1.4.28 → 1.4.29
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.
- package/build/build-cjs/index.js +66 -31
- package/build/build-cjs/qsm/store/qsm-slice.d.ts +0 -1
- package/build/build-esm/index.js +66 -31
- package/build/build-esm/qsm/store/qsm-slice.d.ts +0 -1
- package/package.json +1 -1
- package/src/qsm/components/QSMContainer/qsm-container.tsx +63 -2
- package/src/qsm/components/item-picker/index.tsx +1 -13
- package/src/qsm/store/qsm-slice.ts +0 -1
package/build/build-cjs/index.js
CHANGED
|
@@ -25325,11 +25325,7 @@ var ItemPicker$1 = function (_a) {
|
|
|
25325
25325
|
var _b = React.useState(false),
|
|
25326
25326
|
isDropdownOpen = _b[0],
|
|
25327
25327
|
setIsDropdownOpen = _b[1];
|
|
25328
|
-
var _c = React.useState('down'),
|
|
25329
|
-
openDirection = _c[0],
|
|
25330
|
-
setOpenDirection = _c[1];
|
|
25331
25328
|
var dropdownRef = React.useRef(null);
|
|
25332
|
-
var dropdownMenuRef = React.useRef(null);
|
|
25333
25329
|
var toggleButtonRef = React.useRef(null);
|
|
25334
25330
|
var handlePick = function (picked) {
|
|
25335
25331
|
setIsDropdownOpen(false);
|
|
@@ -25346,19 +25342,6 @@ var ItemPicker$1 = function (_a) {
|
|
|
25346
25342
|
document.removeEventListener('mousedown', handleClickOutside);
|
|
25347
25343
|
};
|
|
25348
25344
|
}, []);
|
|
25349
|
-
React.useEffect(
|
|
25350
|
-
function () {
|
|
25351
|
-
var _a, _b;
|
|
25352
|
-
if (isDropdownOpen && toggleButtonRef.current) {
|
|
25353
|
-
var buttonRect = toggleButtonRef.current.getBoundingClientRect();
|
|
25354
|
-
var spaceBelow = window.innerHeight - buttonRect.bottom;
|
|
25355
|
-
var spaceAbove = buttonRect.top;
|
|
25356
|
-
var dropdownHeight = (_b = (_a = dropdownMenuRef.current) === null || _a === void 0 ? void 0 : _a.offsetHeight) !== null && _b !== void 0 ? _b : 16;
|
|
25357
|
-
setOpenDirection(spaceBelow < dropdownHeight && spaceAbove > spaceBelow ? 'up' : 'down');
|
|
25358
|
-
}
|
|
25359
|
-
},
|
|
25360
|
-
[isDropdownOpen]
|
|
25361
|
-
);
|
|
25362
25345
|
return React__default['default'].createElement(
|
|
25363
25346
|
'div',
|
|
25364
25347
|
{ className: 'dropdown__input ' + classModifier },
|
|
@@ -25383,7 +25366,7 @@ var ItemPicker$1 = function (_a) {
|
|
|
25383
25366
|
isDropdownOpen &&
|
|
25384
25367
|
React__default['default'].createElement(
|
|
25385
25368
|
'ul',
|
|
25386
|
-
{ className: 'dropdown-menu
|
|
25369
|
+
{ className: 'dropdown-menu' },
|
|
25387
25370
|
items.map(function (_a) {
|
|
25388
25371
|
var label = _a.label,
|
|
25389
25372
|
icon = _a.icon;
|
|
@@ -25454,18 +25437,18 @@ var TravelNationalityPicker = function () {
|
|
|
25454
25437
|
var QSMContainer = function () {
|
|
25455
25438
|
var dispatch = reactRedux.useDispatch();
|
|
25456
25439
|
var isMobile = useMediaQuery('(max-width: 768px)');
|
|
25457
|
-
var
|
|
25458
|
-
|
|
25459
|
-
|
|
25460
|
-
|
|
25461
|
-
fromDate =
|
|
25462
|
-
toDate =
|
|
25463
|
-
var
|
|
25464
|
-
searchFields =
|
|
25465
|
-
askTravelers =
|
|
25466
|
-
submitIcon =
|
|
25467
|
-
submitLabel =
|
|
25468
|
-
onSubmit =
|
|
25440
|
+
var qsmState = reactRedux.useSelector(function (state) {
|
|
25441
|
+
return state.qsm;
|
|
25442
|
+
});
|
|
25443
|
+
var mobileFilterType = qsmState.mobileFilterType,
|
|
25444
|
+
fromDate = qsmState.fromDate,
|
|
25445
|
+
toDate = qsmState.toDate;
|
|
25446
|
+
var _a = React.useContext(QSMConfigurationContext),
|
|
25447
|
+
searchFields = _a.searchFields,
|
|
25448
|
+
askTravelers = _a.askTravelers,
|
|
25449
|
+
submitIcon = _a.submitIcon,
|
|
25450
|
+
submitLabel = _a.submitLabel,
|
|
25451
|
+
onSubmit = _a.onSubmit;
|
|
25469
25452
|
React.useEffect(
|
|
25470
25453
|
function () {
|
|
25471
25454
|
if (fromDate || toDate) return;
|
|
@@ -25491,6 +25474,58 @@ var QSMContainer = function () {
|
|
|
25491
25474
|
dispatch(setFromDate((_a = value.fromDate) === null || _a === void 0 ? void 0 : _a.toISOString()));
|
|
25492
25475
|
dispatch(setToDate((_b = value.toDate) === null || _b === void 0 ? void 0 : _b.toISOString()));
|
|
25493
25476
|
};
|
|
25477
|
+
var handleSubmit = function () {
|
|
25478
|
+
if (!onSubmit) return;
|
|
25479
|
+
var selectedOrigin = qsmState.selectedOrigin,
|
|
25480
|
+
selectedDestination = qsmState.selectedDestination,
|
|
25481
|
+
selectedAirport = qsmState.selectedAirport,
|
|
25482
|
+
fromDate = qsmState.fromDate,
|
|
25483
|
+
toDate = qsmState.toDate,
|
|
25484
|
+
travelers = qsmState.travelers,
|
|
25485
|
+
selectedTravelClass = qsmState.selectedTravelClass,
|
|
25486
|
+
selectedTravelType = qsmState.selectedTravelType,
|
|
25487
|
+
selectedNationality = qsmState.selectedNationality,
|
|
25488
|
+
adults = qsmState.adults,
|
|
25489
|
+
kids = qsmState.kids,
|
|
25490
|
+
babies = qsmState.babies,
|
|
25491
|
+
rooms = qsmState.rooms,
|
|
25492
|
+
selectedFlexRange = qsmState.selectedFlexRange,
|
|
25493
|
+
language = qsmState.language;
|
|
25494
|
+
var payload = {
|
|
25495
|
+
selectedOrigin: selectedOrigin,
|
|
25496
|
+
selectedDestination: selectedDestination,
|
|
25497
|
+
selectedAirport: selectedAirport,
|
|
25498
|
+
fromDate: fromDate,
|
|
25499
|
+
toDate: toDate,
|
|
25500
|
+
travelers: travelers,
|
|
25501
|
+
travelClass: selectedTravelClass,
|
|
25502
|
+
travelType: selectedTravelType,
|
|
25503
|
+
nationality: selectedNationality,
|
|
25504
|
+
adults: adults,
|
|
25505
|
+
kids: kids,
|
|
25506
|
+
babies: babies,
|
|
25507
|
+
rooms: rooms,
|
|
25508
|
+
dateFlexibility: selectedFlexRange,
|
|
25509
|
+
language: language
|
|
25510
|
+
};
|
|
25511
|
+
addSearchFieldsToPayload(payload, searchFields, qsmState);
|
|
25512
|
+
onSubmit(payload);
|
|
25513
|
+
};
|
|
25514
|
+
var addSearchFieldsToPayload = function (payload, fields, state) {
|
|
25515
|
+
fields.forEach(function (field) {
|
|
25516
|
+
if (field.type === 'single') {
|
|
25517
|
+
var key = field.fieldKey;
|
|
25518
|
+
payload[key] = state[key];
|
|
25519
|
+
}
|
|
25520
|
+
if (field.type === 'double' && field.fields) {
|
|
25521
|
+
// recursively add each nested field
|
|
25522
|
+
field.fields.forEach(function (nestedField) {
|
|
25523
|
+
var key = nestedField.fieldKey;
|
|
25524
|
+
payload[key] = state[key];
|
|
25525
|
+
});
|
|
25526
|
+
}
|
|
25527
|
+
});
|
|
25528
|
+
};
|
|
25494
25529
|
return React__default['default'].createElement(
|
|
25495
25530
|
'div',
|
|
25496
25531
|
{ className: 'qsm' },
|
|
@@ -25660,7 +25695,7 @@ var QSMContainer = function () {
|
|
|
25660
25695
|
askTravelers && React__default['default'].createElement(TravelInputGroup, null),
|
|
25661
25696
|
React__default['default'].createElement(
|
|
25662
25697
|
'button',
|
|
25663
|
-
{ type: 'button', className: 'cta', onClick:
|
|
25698
|
+
{ type: 'button', className: 'cta', onClick: handleSubmit },
|
|
25664
25699
|
submitIcon && submitIcon.toString().length > 0 && React__default['default'].createElement('span', null, submitIcon),
|
|
25665
25700
|
React__default['default'].createElement('span', null, submitLabel)
|
|
25666
25701
|
)
|
package/build/build-esm/index.js
CHANGED
|
@@ -25154,11 +25154,7 @@ var ItemPicker$1 = function (_a) {
|
|
|
25154
25154
|
var _b = useState(false),
|
|
25155
25155
|
isDropdownOpen = _b[0],
|
|
25156
25156
|
setIsDropdownOpen = _b[1];
|
|
25157
|
-
var _c = useState('down'),
|
|
25158
|
-
openDirection = _c[0],
|
|
25159
|
-
setOpenDirection = _c[1];
|
|
25160
25157
|
var dropdownRef = useRef(null);
|
|
25161
|
-
var dropdownMenuRef = useRef(null);
|
|
25162
25158
|
var toggleButtonRef = useRef(null);
|
|
25163
25159
|
var handlePick = function (picked) {
|
|
25164
25160
|
setIsDropdownOpen(false);
|
|
@@ -25175,19 +25171,6 @@ var ItemPicker$1 = function (_a) {
|
|
|
25175
25171
|
document.removeEventListener('mousedown', handleClickOutside);
|
|
25176
25172
|
};
|
|
25177
25173
|
}, []);
|
|
25178
|
-
useEffect(
|
|
25179
|
-
function () {
|
|
25180
|
-
var _a, _b;
|
|
25181
|
-
if (isDropdownOpen && toggleButtonRef.current) {
|
|
25182
|
-
var buttonRect = toggleButtonRef.current.getBoundingClientRect();
|
|
25183
|
-
var spaceBelow = window.innerHeight - buttonRect.bottom;
|
|
25184
|
-
var spaceAbove = buttonRect.top;
|
|
25185
|
-
var dropdownHeight = (_b = (_a = dropdownMenuRef.current) === null || _a === void 0 ? void 0 : _a.offsetHeight) !== null && _b !== void 0 ? _b : 16;
|
|
25186
|
-
setOpenDirection(spaceBelow < dropdownHeight && spaceAbove > spaceBelow ? 'up' : 'down');
|
|
25187
|
-
}
|
|
25188
|
-
},
|
|
25189
|
-
[isDropdownOpen]
|
|
25190
|
-
);
|
|
25191
25174
|
return React.createElement(
|
|
25192
25175
|
'div',
|
|
25193
25176
|
{ className: 'dropdown__input ' + classModifier },
|
|
@@ -25212,7 +25195,7 @@ var ItemPicker$1 = function (_a) {
|
|
|
25212
25195
|
isDropdownOpen &&
|
|
25213
25196
|
React.createElement(
|
|
25214
25197
|
'ul',
|
|
25215
|
-
{ className: 'dropdown-menu
|
|
25198
|
+
{ className: 'dropdown-menu' },
|
|
25216
25199
|
items.map(function (_a) {
|
|
25217
25200
|
var label = _a.label,
|
|
25218
25201
|
icon = _a.icon;
|
|
@@ -25283,18 +25266,18 @@ var TravelNationalityPicker = function () {
|
|
|
25283
25266
|
var QSMContainer = function () {
|
|
25284
25267
|
var dispatch = useDispatch();
|
|
25285
25268
|
var isMobile = useMediaQuery('(max-width: 768px)');
|
|
25286
|
-
var
|
|
25287
|
-
|
|
25288
|
-
|
|
25289
|
-
|
|
25290
|
-
fromDate =
|
|
25291
|
-
toDate =
|
|
25292
|
-
var
|
|
25293
|
-
searchFields =
|
|
25294
|
-
askTravelers =
|
|
25295
|
-
submitIcon =
|
|
25296
|
-
submitLabel =
|
|
25297
|
-
onSubmit =
|
|
25269
|
+
var qsmState = useSelector(function (state) {
|
|
25270
|
+
return state.qsm;
|
|
25271
|
+
});
|
|
25272
|
+
var mobileFilterType = qsmState.mobileFilterType,
|
|
25273
|
+
fromDate = qsmState.fromDate,
|
|
25274
|
+
toDate = qsmState.toDate;
|
|
25275
|
+
var _a = useContext(QSMConfigurationContext),
|
|
25276
|
+
searchFields = _a.searchFields,
|
|
25277
|
+
askTravelers = _a.askTravelers,
|
|
25278
|
+
submitIcon = _a.submitIcon,
|
|
25279
|
+
submitLabel = _a.submitLabel,
|
|
25280
|
+
onSubmit = _a.onSubmit;
|
|
25298
25281
|
useEffect(
|
|
25299
25282
|
function () {
|
|
25300
25283
|
if (fromDate || toDate) return;
|
|
@@ -25320,6 +25303,58 @@ var QSMContainer = function () {
|
|
|
25320
25303
|
dispatch(setFromDate((_a = value.fromDate) === null || _a === void 0 ? void 0 : _a.toISOString()));
|
|
25321
25304
|
dispatch(setToDate((_b = value.toDate) === null || _b === void 0 ? void 0 : _b.toISOString()));
|
|
25322
25305
|
};
|
|
25306
|
+
var handleSubmit = function () {
|
|
25307
|
+
if (!onSubmit) return;
|
|
25308
|
+
var selectedOrigin = qsmState.selectedOrigin,
|
|
25309
|
+
selectedDestination = qsmState.selectedDestination,
|
|
25310
|
+
selectedAirport = qsmState.selectedAirport,
|
|
25311
|
+
fromDate = qsmState.fromDate,
|
|
25312
|
+
toDate = qsmState.toDate,
|
|
25313
|
+
travelers = qsmState.travelers,
|
|
25314
|
+
selectedTravelClass = qsmState.selectedTravelClass,
|
|
25315
|
+
selectedTravelType = qsmState.selectedTravelType,
|
|
25316
|
+
selectedNationality = qsmState.selectedNationality,
|
|
25317
|
+
adults = qsmState.adults,
|
|
25318
|
+
kids = qsmState.kids,
|
|
25319
|
+
babies = qsmState.babies,
|
|
25320
|
+
rooms = qsmState.rooms,
|
|
25321
|
+
selectedFlexRange = qsmState.selectedFlexRange,
|
|
25322
|
+
language = qsmState.language;
|
|
25323
|
+
var payload = {
|
|
25324
|
+
selectedOrigin: selectedOrigin,
|
|
25325
|
+
selectedDestination: selectedDestination,
|
|
25326
|
+
selectedAirport: selectedAirport,
|
|
25327
|
+
fromDate: fromDate,
|
|
25328
|
+
toDate: toDate,
|
|
25329
|
+
travelers: travelers,
|
|
25330
|
+
travelClass: selectedTravelClass,
|
|
25331
|
+
travelType: selectedTravelType,
|
|
25332
|
+
nationality: selectedNationality,
|
|
25333
|
+
adults: adults,
|
|
25334
|
+
kids: kids,
|
|
25335
|
+
babies: babies,
|
|
25336
|
+
rooms: rooms,
|
|
25337
|
+
dateFlexibility: selectedFlexRange,
|
|
25338
|
+
language: language
|
|
25339
|
+
};
|
|
25340
|
+
addSearchFieldsToPayload(payload, searchFields, qsmState);
|
|
25341
|
+
onSubmit(payload);
|
|
25342
|
+
};
|
|
25343
|
+
var addSearchFieldsToPayload = function (payload, fields, state) {
|
|
25344
|
+
fields.forEach(function (field) {
|
|
25345
|
+
if (field.type === 'single') {
|
|
25346
|
+
var key = field.fieldKey;
|
|
25347
|
+
payload[key] = state[key];
|
|
25348
|
+
}
|
|
25349
|
+
if (field.type === 'double' && field.fields) {
|
|
25350
|
+
// recursively add each nested field
|
|
25351
|
+
field.fields.forEach(function (nestedField) {
|
|
25352
|
+
var key = nestedField.fieldKey;
|
|
25353
|
+
payload[key] = state[key];
|
|
25354
|
+
});
|
|
25355
|
+
}
|
|
25356
|
+
});
|
|
25357
|
+
};
|
|
25323
25358
|
return React.createElement(
|
|
25324
25359
|
'div',
|
|
25325
25360
|
{ className: 'qsm' },
|
|
@@ -25457,7 +25492,7 @@ var QSMContainer = function () {
|
|
|
25457
25492
|
askTravelers && React.createElement(TravelInputGroup, null),
|
|
25458
25493
|
React.createElement(
|
|
25459
25494
|
'button',
|
|
25460
|
-
{ type: 'button', className: 'cta', onClick:
|
|
25495
|
+
{ type: 'button', className: 'cta', onClick: handleSubmit },
|
|
25461
25496
|
submitIcon && submitIcon.toString().length > 0 && React.createElement('span', null, submitIcon),
|
|
25462
25497
|
React.createElement('span', null, submitLabel)
|
|
25463
25498
|
)
|
package/package.json
CHANGED
|
@@ -19,7 +19,8 @@ import { setFromDate, setToDate } from '../../store/qsm-slice';
|
|
|
19
19
|
const QSMContainer: React.FC = () => {
|
|
20
20
|
const dispatch = useDispatch();
|
|
21
21
|
const isMobile = useMediaQuery('(max-width: 768px)');
|
|
22
|
-
const
|
|
22
|
+
const qsmState = useSelector((state: QSMRootState) => state.qsm);
|
|
23
|
+
const { mobileFilterType, fromDate, toDate } = qsmState;
|
|
23
24
|
const { searchFields, askTravelers, submitIcon, submitLabel, onSubmit } = useContext(QSMConfigurationContext);
|
|
24
25
|
|
|
25
26
|
useEffect(() => {
|
|
@@ -46,6 +47,66 @@ const QSMContainer: React.FC = () => {
|
|
|
46
47
|
dispatch(setToDate(value.toDate?.toISOString()));
|
|
47
48
|
};
|
|
48
49
|
|
|
50
|
+
const handleSubmit = () => {
|
|
51
|
+
if (!onSubmit) return;
|
|
52
|
+
|
|
53
|
+
const {
|
|
54
|
+
selectedOrigin,
|
|
55
|
+
selectedDestination,
|
|
56
|
+
selectedAirport,
|
|
57
|
+
fromDate,
|
|
58
|
+
toDate,
|
|
59
|
+
travelers,
|
|
60
|
+
selectedTravelClass,
|
|
61
|
+
selectedTravelType,
|
|
62
|
+
selectedNationality,
|
|
63
|
+
adults,
|
|
64
|
+
kids,
|
|
65
|
+
babies,
|
|
66
|
+
rooms,
|
|
67
|
+
selectedFlexRange,
|
|
68
|
+
language
|
|
69
|
+
} = qsmState;
|
|
70
|
+
|
|
71
|
+
const payload = {
|
|
72
|
+
selectedOrigin,
|
|
73
|
+
selectedDestination,
|
|
74
|
+
selectedAirport,
|
|
75
|
+
fromDate,
|
|
76
|
+
toDate,
|
|
77
|
+
travelers,
|
|
78
|
+
travelClass: selectedTravelClass,
|
|
79
|
+
travelType: selectedTravelType,
|
|
80
|
+
nationality: selectedNationality,
|
|
81
|
+
adults,
|
|
82
|
+
kids,
|
|
83
|
+
babies,
|
|
84
|
+
rooms,
|
|
85
|
+
dateFlexibility: selectedFlexRange,
|
|
86
|
+
language
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
addSearchFieldsToPayload(payload, searchFields, qsmState);
|
|
90
|
+
onSubmit(payload);
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const addSearchFieldsToPayload = (payload: any, fields: typeof searchFields, state: any) => {
|
|
94
|
+
fields.forEach((field) => {
|
|
95
|
+
if (field.type === 'single') {
|
|
96
|
+
const key = field.fieldKey;
|
|
97
|
+
payload[key] = state[key];
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (field.type === 'double' && field.fields) {
|
|
101
|
+
// recursively add each nested field
|
|
102
|
+
field.fields.forEach((nestedField) => {
|
|
103
|
+
const key = nestedField.fieldKey;
|
|
104
|
+
payload[key] = state[key];
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
};
|
|
109
|
+
|
|
49
110
|
return (
|
|
50
111
|
<div className="qsm">
|
|
51
112
|
<div className="qsm__content">
|
|
@@ -159,7 +220,7 @@ const QSMContainer: React.FC = () => {
|
|
|
159
220
|
|
|
160
221
|
{askTravelers && <TravelInputGroup />}
|
|
161
222
|
|
|
162
|
-
<button type="button" className="cta" onClick={
|
|
223
|
+
<button type="button" className="cta" onClick={handleSubmit}>
|
|
163
224
|
{submitIcon && submitIcon.toString().length > 0 && <span>{submitIcon}</span>}
|
|
164
225
|
<span>{submitLabel}</span>
|
|
165
226
|
</button>
|
|
@@ -15,9 +15,7 @@ const ItemPicker: React.FC<ItemPickerProps> = ({ items, selection, label, placeh
|
|
|
15
15
|
const dispatch = useDispatch();
|
|
16
16
|
|
|
17
17
|
const [isDropdownOpen, setIsDropdownOpen] = useState(false);
|
|
18
|
-
const [openDirection, setOpenDirection] = useState<'down' | 'up'>('down');
|
|
19
18
|
const dropdownRef = useRef<HTMLDivElement | null>(null);
|
|
20
|
-
const dropdownMenuRef = useRef<HTMLUListElement | null>(null);
|
|
21
19
|
const toggleButtonRef = useRef<HTMLButtonElement | null>(null);
|
|
22
20
|
|
|
23
21
|
const handlePick = (picked: string) => {
|
|
@@ -38,16 +36,6 @@ const ItemPicker: React.FC<ItemPickerProps> = ({ items, selection, label, placeh
|
|
|
38
36
|
};
|
|
39
37
|
}, []);
|
|
40
38
|
|
|
41
|
-
useEffect(() => {
|
|
42
|
-
if (isDropdownOpen && toggleButtonRef.current) {
|
|
43
|
-
const buttonRect = toggleButtonRef.current.getBoundingClientRect();
|
|
44
|
-
const spaceBelow = window.innerHeight - buttonRect.bottom;
|
|
45
|
-
const spaceAbove = buttonRect.top;
|
|
46
|
-
const dropdownHeight = dropdownMenuRef.current?.offsetHeight ?? 16;
|
|
47
|
-
setOpenDirection(spaceBelow < dropdownHeight && spaceAbove > spaceBelow ? 'up' : 'down');
|
|
48
|
-
}
|
|
49
|
-
}, [isDropdownOpen]);
|
|
50
|
-
|
|
51
39
|
return (
|
|
52
40
|
<div className={'dropdown__input ' + classModifier}>
|
|
53
41
|
<span className="dropdown__label">{label}</span>
|
|
@@ -60,7 +48,7 @@ const ItemPicker: React.FC<ItemPickerProps> = ({ items, selection, label, placeh
|
|
|
60
48
|
<span className="arrow">▾</span>
|
|
61
49
|
</button>
|
|
62
50
|
{isDropdownOpen && (
|
|
63
|
-
<ul className=
|
|
51
|
+
<ul className="dropdown-menu">
|
|
64
52
|
{items.map(({ label, icon }) => (
|
|
65
53
|
<li
|
|
66
54
|
key={label}
|