mautourco-components 0.2.93 → 0.2.95
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/dist/components/organisms/DateTimePicker/DateTimePicker.js +10 -2
- package/dist/components/organisms/RoundTrip/RoundTrip.js +17 -5
- package/dist/components/organisms/SearchBarTransfer/SearchBarTransfer.js +5 -5
- package/package.json +1 -1
- package/src/components/organisms/DateTimePicker/DateTimePicker.tsx +8 -5
- package/src/components/organisms/RoundTrip/RoundTrip.tsx +17 -5
- package/src/components/organisms/SearchBarTransfer/SearchBarTransfer.tsx +6 -5
|
@@ -38,7 +38,6 @@ var DateTimePicker = function (_a) {
|
|
|
38
38
|
var date = new Date(defaultValue);
|
|
39
39
|
var dateRange = { from: date, to: date };
|
|
40
40
|
var displayValue = format(date, 'dd/MM/yyyy');
|
|
41
|
-
console.log('defaultValue', defaultValue, selectionMode, displayValue);
|
|
42
41
|
return { value: displayValue, dateRange: dateRange };
|
|
43
42
|
}
|
|
44
43
|
}
|
|
@@ -82,7 +81,16 @@ var DateTimePicker = function (_a) {
|
|
|
82
81
|
}
|
|
83
82
|
}
|
|
84
83
|
}
|
|
85
|
-
if (!payload.dateRange && payload.time) {
|
|
84
|
+
else if (!payload.dateRange && !payload.time) {
|
|
85
|
+
// Handle clearing: return empty string for single mode, empty array for range mode
|
|
86
|
+
if (selectionMode === 'range') {
|
|
87
|
+
onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange([]);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange('');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else if (!payload.dateRange && payload.time) {
|
|
86
94
|
var timeStr = "".concat(payload.time.hour, ":").concat(payload.time.minute, " ").concat(payload.time.meridiem);
|
|
87
95
|
onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(timeStr);
|
|
88
96
|
}
|
|
@@ -168,10 +168,10 @@ var RoundTrip = function (_a) {
|
|
|
168
168
|
onPaxChange === null || onPaxChange === void 0 ? void 0 : onPaxChange(newPaxData);
|
|
169
169
|
};
|
|
170
170
|
var handleDateRangeChange = function (dates) {
|
|
171
|
-
if (Array.isArray(dates)
|
|
172
|
-
setInternalArrivalDate(dates[0]);
|
|
173
|
-
setInternalDepartureDate(dates[1]);
|
|
174
|
-
onDatesChange === null || onDatesChange === void 0 ? void 0 : onDatesChange(dates[0], dates[1]);
|
|
171
|
+
if (Array.isArray(dates)) {
|
|
172
|
+
setInternalArrivalDate(dates === null || dates === void 0 ? void 0 : dates[0]);
|
|
173
|
+
setInternalDepartureDate(dates === null || dates === void 0 ? void 0 : dates[1]);
|
|
174
|
+
onDatesChange === null || onDatesChange === void 0 ? void 0 : onDatesChange(dates === null || dates === void 0 ? void 0 : dates[0], dates === null || dates === void 0 ? void 0 : dates[1]);
|
|
175
175
|
}
|
|
176
176
|
};
|
|
177
177
|
// Helper to convert LocationData to LocationOption
|
|
@@ -216,8 +216,20 @@ var RoundTrip = function (_a) {
|
|
|
216
216
|
internalPaxData.teens === 0 &&
|
|
217
217
|
internalPaxData.children === 0 &&
|
|
218
218
|
(internalPaxData.infants === undefined || internalPaxData.infants === 0)));
|
|
219
|
+
// Show error if checkEmpty is true and either date is missing
|
|
219
220
|
var isDateEmpty = checkEmpty && (!internalArrivalDate || !internalDepartureDate ||
|
|
220
221
|
internalArrivalDate === '' || internalDepartureDate === '');
|
|
222
|
+
// Check if user filled one date but not the other (even without checkEmpty)
|
|
223
|
+
var hasPartialDates = function () {
|
|
224
|
+
if (!checkEmpty)
|
|
225
|
+
return false;
|
|
226
|
+
if (!internalArrivalDate || !internalDepartureDate)
|
|
227
|
+
return true;
|
|
228
|
+
return internalArrivalDate === internalDepartureDate;
|
|
229
|
+
};
|
|
230
|
+
var isDateError = function () {
|
|
231
|
+
return isDateEmpty || hasPartialDates();
|
|
232
|
+
};
|
|
221
233
|
var isPickupDropoffEmpty = checkEmpty && !internalPickupDropoffPoint;
|
|
222
234
|
var isAccommodationEmpty = checkEmpty && !internalAccommodation;
|
|
223
235
|
var pickupDropoffOptions = getPickupDropoffOptions();
|
|
@@ -237,6 +249,6 @@ var RoundTrip = function (_a) {
|
|
|
237
249
|
};
|
|
238
250
|
var defaultPickupDropoffOption = findLocationOption(pickupDropoffPoint, 'pickup-dropoff');
|
|
239
251
|
var defaultAccommodationOption = findLocationOption(accommodation, 'accommodation');
|
|
240
|
-
return (_jsx("div", { className: "round-trip ".concat(className), "data-round-trip-id": id, children: _jsxs("div", { className: "round-trip__content", children: [_jsx("div", { className: "round-trip__field round-trip__field--pax ".concat(isPaxEmpty ? 'round-trip__field--error' : ''), children: _jsx(PaxSelector, { label: "Number of pax", value: internalPaxData, onChange: handlePaxChange, placeholder: "2 pax", className: isPaxEmpty ? 'pax-selector--error' : '', scrollOnOpen: scrollOnOpen, checkEmpty: checkEmpty }) }), _jsxs("div", { className: "round-trip__field round-trip__field--dates", children: [_jsx(Text, { size: "sm", variant: "regular", className: "round-trip__field-label", children: "Arrival date - Departure date" }), _jsx(DateTimePicker, { placeholder: "DD/MM/YYYY - DD/MM/YYYY", mode: "calendar", iconPosition: "left", numberOfMonths: 2, iconBGFull: false, showChevron: true, onValueChange: handleDateRangeChange, selectionMode: "range", defaultValue: internalArrivalDate && internalDepartureDate ? [internalArrivalDate, internalDepartureDate] : undefined, inputClassName: "round-trip__date-picker--input", state:
|
|
252
|
+
return (_jsx("div", { className: "round-trip ".concat(className), "data-round-trip-id": id, children: _jsxs("div", { className: "round-trip__content", children: [_jsx("div", { className: "round-trip__field round-trip__field--pax ".concat(isPaxEmpty ? 'round-trip__field--error' : ''), children: _jsx(PaxSelector, { label: "Number of pax", value: internalPaxData, onChange: handlePaxChange, placeholder: "2 pax", className: isPaxEmpty ? 'pax-selector--error' : '', scrollOnOpen: scrollOnOpen, checkEmpty: checkEmpty }) }), _jsxs("div", { className: "round-trip__field round-trip__field--dates", children: [_jsx(Text, { size: "sm", variant: "regular", className: "round-trip__field-label", children: "Arrival date - Departure date" }), _jsx(DateTimePicker, { placeholder: "DD/MM/YYYY - DD/MM/YYYY", mode: "calendar", iconPosition: "left", numberOfMonths: 2, iconBGFull: false, showChevron: true, onValueChange: handleDateRangeChange, selectionMode: "range", defaultValue: internalArrivalDate && internalDepartureDate ? [internalArrivalDate, internalDepartureDate] : undefined, inputClassName: "round-trip__date-picker--input", state: isDateError() ? 'error' : undefined, scrollOnOpen: scrollOnOpen })] }), _jsx("div", { className: "round-trip__field round-trip__field--pickup-dropoff", children: _jsx(LocationDropdown, { label: "Pick up / Drop-off point", options: pickupDropoffOptions.options, groups: pickupDropoffOptions.groups, selectedValue: (internalPickupDropoffPoint === null || internalPickupDropoffPoint === void 0 ? void 0 : internalPickupDropoffPoint.id) || null, onSelectionChange: handlePickupDropoffChange, placeholder: "Select pick-up / drop-off point", direction: undefined, type: "airport-port", showGroupTitles: true, error: isPickupDropoffEmpty, scrollOnOpen: scrollOnOpen, defaultValue: defaultPickupDropoffOption }) }), _jsx("div", { className: "round-trip__field round-trip__field--accommodation", children: _jsx(LocationDropdown, { label: "Accommodation", options: accommodationOptions.options, groups: accommodationOptions.groups, selectedValue: (internalAccommodation === null || internalAccommodation === void 0 ? void 0 : internalAccommodation.id) || null, onSelectionChange: handleAccommodationChange, placeholder: "Select accommodation", direction: "dropoff", type: "accommodation", showGroupTitles: false, error: isAccommodationEmpty, scrollOnOpen: scrollOnOpen, defaultValue: defaultAccommodationOption }) })] }) }));
|
|
241
253
|
};
|
|
242
254
|
export default RoundTrip;
|
|
@@ -49,6 +49,7 @@ var SearchBarTransfer = function (_a) {
|
|
|
49
49
|
var _j = useState(defaultRoundTripData), roundTripData = _j[0], setRoundTripData = _j[1];
|
|
50
50
|
var _k = useState(initializeTransferLines(defaultTransferLines)), transferLines = _k[0], setTransferLines = _k[1];
|
|
51
51
|
var _l = useState(null), error = _l[0], setError = _l[1];
|
|
52
|
+
var _m = useState(0), validationTrigger = _m[0], setValidationTrigger = _m[1];
|
|
52
53
|
// Notify parent of changes
|
|
53
54
|
useEffect(function () {
|
|
54
55
|
var data = {
|
|
@@ -156,7 +157,6 @@ var SearchBarTransfer = function (_a) {
|
|
|
156
157
|
// Find the last transfer line that has pax data
|
|
157
158
|
for (var i = transferLines.length - 1; i >= 0; i--) {
|
|
158
159
|
if (transferLines[i].paxData) {
|
|
159
|
-
console.log({ i: i });
|
|
160
160
|
return transferLines[i].paxData;
|
|
161
161
|
}
|
|
162
162
|
}
|
|
@@ -327,8 +327,7 @@ var SearchBarTransfer = function (_a) {
|
|
|
327
327
|
}
|
|
328
328
|
// Check if required fields are filled
|
|
329
329
|
if (!roundTripData.paxData ||
|
|
330
|
-
|
|
331
|
-
!roundTripData.departureDate ||
|
|
330
|
+
roundTripData.arrivalDate === roundTripData.departureDate ||
|
|
332
331
|
!roundTripData.pickupDropoffPoint ||
|
|
333
332
|
!roundTripData.accommodation) {
|
|
334
333
|
setError("Please fill in all the transfer details.");
|
|
@@ -367,6 +366,7 @@ var SearchBarTransfer = function (_a) {
|
|
|
367
366
|
};
|
|
368
367
|
// Handle search
|
|
369
368
|
var handleSearch = function () {
|
|
369
|
+
setValidationTrigger(function (prev) { return prev + 1; });
|
|
370
370
|
if (validateData()) {
|
|
371
371
|
var data = {
|
|
372
372
|
mode: mode,
|
|
@@ -377,7 +377,7 @@ var SearchBarTransfer = function (_a) {
|
|
|
377
377
|
onSearch === null || onSearch === void 0 ? void 0 : onSearch(data);
|
|
378
378
|
}
|
|
379
379
|
};
|
|
380
|
-
return (_jsxs("div", { className: "search-bar-transfer ".concat(className), children: [_jsxs("div", { className: "search-bar-transfer__header", children: [_jsx(Heading, { level: 5, variant: "bold", color: "accent", children: "Select your transfer details" }), _jsx("div", { className: "search-bar-transfer__mode-selector", children: _jsx(SegmentedButton, { options: modeOptions, value: mode, onChange: handleModeChange, name: "transfer-mode" }) })] }), mode === "roundtrip" ? (_jsxs(_Fragment, { children: [_jsx(RoundTrip, { id: "roundtrip-main", locations: locations, paxData: roundTripData === null || roundTripData === void 0 ? void 0 : roundTripData.paxData, arrivalDate: roundTripData === null || roundTripData === void 0 ? void 0 : roundTripData.arrivalDate, departureDate: roundTripData === null || roundTripData === void 0 ? void 0 : roundTripData.departureDate, pickupDropoffPoint: roundTripData === null || roundTripData === void 0 ? void 0 : roundTripData.pickupDropoffPoint, accommodation: roundTripData === null || roundTripData === void 0 ? void 0 : roundTripData.accommodation, onChange: setRoundTripData, checkEmpty: error !== null, scrollOnOpen: scrollOnOpen }), _jsx("div", { className: "search-bar-transfer__transfer-type", children: renderTransferTypeButtons(handleAddTransferFromRoundTrip) })] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "search-bar-transfer__transfer-type", children: [_jsx(Text, { size: "lg", variant: "bold", color: "subtle", as: "div", className: "search-bar-transfer__transfer-type-label", children: "Select a transfer type you want to add" }), renderTransferTypeButtons(handleAddTransfer)] }), transferLines.length === 0 && (_jsx(TransferLine, { id: "placeholder-transfer", type: "inter-hotel", locations: locations, onDataChange: function () { }, showDelete: false, disabled: true, scrollOnOpen: scrollOnOpen })), transferLines.length > 0 && (_jsx("div", { className: "search-bar-transfer__transfer-lines", children: (function () {
|
|
380
|
+
return (_jsxs("div", { className: "search-bar-transfer ".concat(className), children: [_jsxs("div", { className: "search-bar-transfer__header", children: [_jsx(Heading, { level: 5, variant: "bold", color: "accent", children: "Select your transfer details" }), _jsx("div", { className: "search-bar-transfer__mode-selector", children: _jsx(SegmentedButton, { options: modeOptions, value: mode, onChange: handleModeChange, name: "transfer-mode" }) })] }), mode === "roundtrip" ? (_jsxs(_Fragment, { children: [_jsx(RoundTrip, { id: "roundtrip-main", locations: locations, paxData: roundTripData === null || roundTripData === void 0 ? void 0 : roundTripData.paxData, arrivalDate: roundTripData === null || roundTripData === void 0 ? void 0 : roundTripData.arrivalDate, departureDate: roundTripData === null || roundTripData === void 0 ? void 0 : roundTripData.departureDate, pickupDropoffPoint: roundTripData === null || roundTripData === void 0 ? void 0 : roundTripData.pickupDropoffPoint, accommodation: roundTripData === null || roundTripData === void 0 ? void 0 : roundTripData.accommodation, onChange: setRoundTripData, checkEmpty: error !== null, scrollOnOpen: scrollOnOpen }, "roundtrip-".concat(validationTrigger)), _jsx("div", { className: "search-bar-transfer__transfer-type", children: renderTransferTypeButtons(handleAddTransferFromRoundTrip) })] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "search-bar-transfer__transfer-type", children: [_jsx(Text, { size: "lg", variant: "bold", color: "subtle", as: "div", className: "search-bar-transfer__transfer-type-label", children: "Select a transfer type you want to add" }), renderTransferTypeButtons(handleAddTransfer)] }), transferLines.length === 0 && (_jsx(TransferLine, { id: "placeholder-transfer", type: "inter-hotel", locations: locations, onDataChange: function () { }, showDelete: false, disabled: true, scrollOnOpen: scrollOnOpen })), transferLines.length > 0 && (_jsx("div", { className: "search-bar-transfer__transfer-lines", children: (function () {
|
|
381
381
|
// Group transfers by type
|
|
382
382
|
var groupedTransfers = {
|
|
383
383
|
arrival: [],
|
|
@@ -396,7 +396,7 @@ var SearchBarTransfer = function (_a) {
|
|
|
396
396
|
departure: { label: "Departure", icon: "departure" },
|
|
397
397
|
"inter-hotel": { label: "Inter-Hotel", icon: "building" },
|
|
398
398
|
};
|
|
399
|
-
return nonEmptyGroups.map(function (type, groupIndex) { return (_jsxs(React.Fragment, { children: [_jsxs("div", { className: "search-bar-transfer__category-header", children: [_jsx(Icon, { name: categoryInfo[type].icon, size: "md" }), _jsx(Text, { size: "md", variant: "bold", color: "default", as: "span", children: categoryInfo[type].label })] }), groupedTransfers[type].map(function (line) { return (_jsx(TransferLine, { id: line.id, type: line.type, paxData: line.paxData, transferDate: line.transferDate, pickupPoint: line.pickupPoint, dropoffPoint: line.dropoffPoint, locations: locations, onDataChange: function (data) { return handleTransferLineChange(line.id, data); }, onDelete: function () { return handleDeleteTransferLine(line.id); }, showDelete: transferLines.length > 1, checkEmpty: error !== null, scrollOnOpen: scrollOnOpen }, line.id)); }), groupIndex < nonEmptyGroups.length - 1 && (_jsx("svg", { className: "search-bar-transfer__divider", xmlns: "http://www.w3.org/2000/svg", width: "100%", height: "1", viewBox: "0 0 1076 1", fill: "none", preserveAspectRatio: "none", children: _jsx("path", { d: "M0 0.5L1076 0.499906", stroke: "var(--color-border-medium, #A3A3A3)", strokeWidth: "1", strokeDasharray: "10 10" }) }))] }, type)); });
|
|
399
|
+
return nonEmptyGroups.map(function (type, groupIndex) { return (_jsxs(React.Fragment, { children: [_jsxs("div", { className: "search-bar-transfer__category-header", children: [_jsx(Icon, { name: categoryInfo[type].icon, size: "md" }), _jsx(Text, { size: "md", variant: "bold", color: "default", as: "span", children: categoryInfo[type].label })] }), groupedTransfers[type].map(function (line) { return (_jsx(TransferLine, { id: line.id, type: line.type, paxData: line.paxData, transferDate: line.transferDate, pickupPoint: line.pickupPoint, dropoffPoint: line.dropoffPoint, locations: locations, onDataChange: function (data) { return handleTransferLineChange(line.id, data); }, onDelete: function () { return handleDeleteTransferLine(line.id); }, showDelete: transferLines.length > 1, checkEmpty: error !== null, scrollOnOpen: scrollOnOpen }, "".concat(line.id, "-").concat(validationTrigger))); }), groupIndex < nonEmptyGroups.length - 1 && (_jsx("svg", { className: "search-bar-transfer__divider", xmlns: "http://www.w3.org/2000/svg", width: "100%", height: "1", viewBox: "0 0 1076 1", fill: "none", preserveAspectRatio: "none", children: _jsx("path", { d: "M0 0.5L1076 0.499906", stroke: "var(--color-border-medium, #A3A3A3)", strokeWidth: "1", strokeDasharray: "10 10" }) }))] }, type)); });
|
|
400
400
|
})() }))] })), _jsxs("div", { className: "search-bar-transfer__actions", children: [_jsx(Checkbox, { checked: sameVehicle, onChange: setSameVehicle, label: "Use the same vehicle for all your transfers" }), _jsxs("div", { className: "search-bar-transfer__cta", children: [error && (_jsx(Toast, { text: error, type: "danger" })), _jsx(Button, { variant: "primary", size: "lg", onClick: handleSearch, children: "Search" })] })] })] }));
|
|
401
401
|
};
|
|
402
402
|
export default SearchBarTransfer;
|
package/package.json
CHANGED
|
@@ -80,8 +80,6 @@ const DateTimePicker: React.FC<DateTimePickerProps> = ({
|
|
|
80
80
|
const date = new Date(defaultValue);
|
|
81
81
|
const dateRange = { from: date, to: date };
|
|
82
82
|
const displayValue = format(date, 'dd/MM/yyyy');
|
|
83
|
-
console.log('defaultValue', defaultValue, selectionMode, displayValue);
|
|
84
|
-
|
|
85
83
|
return { value: displayValue, dateRange };
|
|
86
84
|
}
|
|
87
85
|
} catch (error) {
|
|
@@ -132,9 +130,14 @@ const DateTimePicker: React.FC<DateTimePickerProps> = ({
|
|
|
132
130
|
onValueChange?.(dateStr);
|
|
133
131
|
}
|
|
134
132
|
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
|
|
133
|
+
} else if (!payload.dateRange && !payload.time) {
|
|
134
|
+
// Handle clearing: return empty string for single mode, empty array for range mode
|
|
135
|
+
if (selectionMode === 'range') {
|
|
136
|
+
onValueChange?.([]);
|
|
137
|
+
} else {
|
|
138
|
+
onValueChange?.('');
|
|
139
|
+
}
|
|
140
|
+
} else if (!payload.dateRange && payload.time) {
|
|
138
141
|
const timeStr = `${payload.time.hour}:${payload.time.minute} ${payload.time.meridiem}`;
|
|
139
142
|
onValueChange?.(timeStr);
|
|
140
143
|
}
|
|
@@ -271,10 +271,10 @@ const RoundTrip: React.FC<RoundTripProps> = ({
|
|
|
271
271
|
};
|
|
272
272
|
|
|
273
273
|
const handleDateRangeChange = (dates: string | string[]) => {
|
|
274
|
-
if (Array.isArray(dates)
|
|
275
|
-
setInternalArrivalDate(dates[0]);
|
|
276
|
-
setInternalDepartureDate(dates[1]);
|
|
277
|
-
onDatesChange?.(dates[0], dates[1]);
|
|
274
|
+
if (Array.isArray(dates)) {
|
|
275
|
+
setInternalArrivalDate(dates?.[0]);
|
|
276
|
+
setInternalDepartureDate(dates?.[1]);
|
|
277
|
+
onDatesChange?.(dates?.[0], dates?.[1]);
|
|
278
278
|
}
|
|
279
279
|
};
|
|
280
280
|
|
|
@@ -324,8 +324,20 @@ const RoundTrip: React.FC<RoundTripProps> = ({
|
|
|
324
324
|
internalPaxData.children === 0 &&
|
|
325
325
|
(internalPaxData.infants === undefined || internalPaxData.infants === 0)));
|
|
326
326
|
|
|
327
|
+
// Show error if checkEmpty is true and either date is missing
|
|
327
328
|
const isDateEmpty = checkEmpty && (!internalArrivalDate || !internalDepartureDate ||
|
|
328
329
|
internalArrivalDate === '' || internalDepartureDate === '');
|
|
330
|
+
|
|
331
|
+
// Check if user filled one date but not the other (even without checkEmpty)
|
|
332
|
+
const hasPartialDates = (): boolean => {
|
|
333
|
+
if (!checkEmpty) return false;
|
|
334
|
+
if (!internalArrivalDate || !internalDepartureDate) return true;
|
|
335
|
+
return internalArrivalDate === internalDepartureDate;
|
|
336
|
+
};
|
|
337
|
+
|
|
338
|
+
const isDateError = (): boolean => {
|
|
339
|
+
return isDateEmpty || hasPartialDates();
|
|
340
|
+
};
|
|
329
341
|
|
|
330
342
|
const isPickupDropoffEmpty = checkEmpty && !internalPickupDropoffPoint;
|
|
331
343
|
|
|
@@ -382,7 +394,7 @@ const RoundTrip: React.FC<RoundTripProps> = ({
|
|
|
382
394
|
selectionMode="range"
|
|
383
395
|
defaultValue={internalArrivalDate && internalDepartureDate ? [internalArrivalDate, internalDepartureDate] : undefined}
|
|
384
396
|
inputClassName="round-trip__date-picker--input"
|
|
385
|
-
state={
|
|
397
|
+
state={isDateError() ? 'error' : undefined}
|
|
386
398
|
scrollOnOpen={scrollOnOpen}
|
|
387
399
|
/>
|
|
388
400
|
</div>
|
|
@@ -85,6 +85,7 @@ const SearchBarTransfer: React.FC<SearchBarTransferProps> = ({
|
|
|
85
85
|
initializeTransferLines(defaultTransferLines)
|
|
86
86
|
);
|
|
87
87
|
const [error, setError] = useState<string | null>(null);
|
|
88
|
+
const [validationTrigger, setValidationTrigger] = useState<number>(0);
|
|
88
89
|
|
|
89
90
|
// Notify parent of changes
|
|
90
91
|
useEffect(() => {
|
|
@@ -207,8 +208,6 @@ const SearchBarTransfer: React.FC<SearchBarTransferProps> = ({
|
|
|
207
208
|
|
|
208
209
|
for (let i = transferLines.length - 1; i >= 0; i--) {
|
|
209
210
|
if (transferLines[i].paxData) {
|
|
210
|
-
console.log({i});
|
|
211
|
-
|
|
212
211
|
return transferLines[i].paxData;
|
|
213
212
|
}
|
|
214
213
|
}
|
|
@@ -425,8 +424,7 @@ const SearchBarTransfer: React.FC<SearchBarTransferProps> = ({
|
|
|
425
424
|
// Check if required fields are filled
|
|
426
425
|
if (
|
|
427
426
|
!roundTripData.paxData ||
|
|
428
|
-
|
|
429
|
-
!roundTripData.departureDate ||
|
|
427
|
+
roundTripData.arrivalDate === roundTripData.departureDate ||
|
|
430
428
|
!roundTripData.pickupDropoffPoint ||
|
|
431
429
|
!roundTripData.accommodation
|
|
432
430
|
) {
|
|
@@ -467,6 +465,8 @@ const SearchBarTransfer: React.FC<SearchBarTransferProps> = ({
|
|
|
467
465
|
|
|
468
466
|
// Handle search
|
|
469
467
|
const handleSearch = () => {
|
|
468
|
+
setValidationTrigger(prev => prev + 1);
|
|
469
|
+
|
|
470
470
|
if (validateData()) {
|
|
471
471
|
const data: SearchBarTransferData = {
|
|
472
472
|
mode,
|
|
@@ -501,6 +501,7 @@ const SearchBarTransfer: React.FC<SearchBarTransferProps> = ({
|
|
|
501
501
|
{mode === "roundtrip" ? (
|
|
502
502
|
<>
|
|
503
503
|
<RoundTrip
|
|
504
|
+
key={`roundtrip-${validationTrigger}`}
|
|
504
505
|
id="roundtrip-main"
|
|
505
506
|
locations={locations}
|
|
506
507
|
paxData={roundTripData?.paxData}
|
|
@@ -579,7 +580,7 @@ const SearchBarTransfer: React.FC<SearchBarTransferProps> = ({
|
|
|
579
580
|
{/* Transfer lines in this category */}
|
|
580
581
|
{groupedTransfers[type].map((line) => (
|
|
581
582
|
<TransferLine
|
|
582
|
-
key={line.id}
|
|
583
|
+
key={`${line.id}-${validationTrigger}`}
|
|
583
584
|
id={line.id}
|
|
584
585
|
type={line.type}
|
|
585
586
|
paxData={line.paxData}
|