@qite/tide-booking-component 1.4.125 → 1.4.126
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 +74 -56
- package/build/build-cjs/src/booking-wizard/components/build-step-labels.d.ts +8 -0
- package/build/build-cjs/src/booking-wizard/features/booking/booking-slice.d.ts +1 -2
- package/build/build-cjs/src/booking-wizard/features/booking/selectors.d.ts +0 -1
- package/build/build-esm/index.js +74 -56
- package/build/build-esm/src/booking-wizard/components/build-step-labels.d.ts +8 -0
- package/build/build-esm/src/booking-wizard/features/booking/booking-slice.d.ts +1 -2
- package/build/build-esm/src/booking-wizard/features/booking/selectors.d.ts +0 -1
- package/package.json +1 -1
package/build/build-cjs/index.js
CHANGED
|
@@ -17658,14 +17658,14 @@ const updateBookingGroups = (groups, changedLines) => {
|
|
|
17658
17658
|
};
|
|
17659
17659
|
|
|
17660
17660
|
const fetchPriceDetails = toolkit.createAsyncThunk('priceDetails/fetchPriceDetails', async (_, { dispatch, getState, signal }) => {
|
|
17661
|
-
dispatch(setFetchingPriceDetails(true));
|
|
17662
|
-
dispatch(resetPriceDetails());
|
|
17663
17661
|
const state = getState();
|
|
17664
17662
|
const languageCode = selectLanguageCode(state);
|
|
17665
17663
|
const request = selectBookingPackageBookRequest(state);
|
|
17666
17664
|
if (!request) {
|
|
17667
17665
|
throw Error('Product not available.');
|
|
17668
17666
|
}
|
|
17667
|
+
dispatch(setFetchingPriceDetails(true));
|
|
17668
|
+
dispatch(resetPriceDetails());
|
|
17669
17669
|
const priceDetails = await priceDetailsApi.fetchPriceDetails(state.apiSettings, request, signal, languageCode);
|
|
17670
17670
|
dispatch(setFetchingPriceDetails(false));
|
|
17671
17671
|
const packageDetails = selectPackageDetails(state);
|
|
@@ -17702,6 +17702,9 @@ const priceDetailsSlice = toolkit.createSlice({
|
|
|
17702
17702
|
state.notifications = action.payload.notifications;
|
|
17703
17703
|
}
|
|
17704
17704
|
});
|
|
17705
|
+
builder.addCase(fetchPriceDetails.rejected, (state) => {
|
|
17706
|
+
state.isBusy = false;
|
|
17707
|
+
});
|
|
17705
17708
|
}
|
|
17706
17709
|
});
|
|
17707
17710
|
const { setFetchingPriceDetails } = priceDetailsSlice.actions;
|
|
@@ -17710,7 +17713,6 @@ const selectNotifications = (state) => state.priceDetails.notifications;
|
|
|
17710
17713
|
var priceDetailsReducer = priceDetailsSlice.reducer;
|
|
17711
17714
|
|
|
17712
17715
|
const selectHasMounted = (state) => state.booking.hasMounted;
|
|
17713
|
-
const selectIsFetching = (state) => state.booking.isFetching;
|
|
17714
17716
|
const selectGeneratePaymentUrl = (state) => state.booking.generatePaymentUrl;
|
|
17715
17717
|
const selectSkipPaymentWithAgent = (state) => state.booking.skipPaymentWithAgent;
|
|
17716
17718
|
const selectIsFetchingProductOptions = (state) => state.booking.isBusy;
|
|
@@ -18001,7 +18003,6 @@ const initialState$5 = {
|
|
|
18001
18003
|
currentStep: OPTIONS_FORM_STEP,
|
|
18002
18004
|
translations: undefined,
|
|
18003
18005
|
travelersFirstStep: false,
|
|
18004
|
-
isFetching: false,
|
|
18005
18006
|
hasMounted: false,
|
|
18006
18007
|
countries: undefined
|
|
18007
18008
|
};
|
|
@@ -18220,9 +18221,6 @@ const bookingSlice = toolkit.createSlice({
|
|
|
18220
18221
|
setHasMounted(state, action) {
|
|
18221
18222
|
state.hasMounted = action.payload;
|
|
18222
18223
|
},
|
|
18223
|
-
setIsFetching(state, action) {
|
|
18224
|
-
state.isFetching = action.payload;
|
|
18225
|
-
},
|
|
18226
18224
|
setOfficeId(state, action) {
|
|
18227
18225
|
state.officeId = action.payload;
|
|
18228
18226
|
},
|
|
@@ -18436,7 +18434,7 @@ const bookingSlice = toolkit.createSlice({
|
|
|
18436
18434
|
});
|
|
18437
18435
|
}
|
|
18438
18436
|
});
|
|
18439
|
-
const { setOfficeId, setLanguageCode, setTranslations, setBookingOptions, setBookingType, setProductAttributes, setBookingAttributes, setCalculateDeposit, setShowCommission, setBookingNumber: setBookingNumber$1, setIsRetry, setFetchingPackage,
|
|
18437
|
+
const { setOfficeId, setLanguageCode, setTranslations, setBookingOptions, setBookingType, setProductAttributes, setBookingAttributes, setCalculateDeposit, setShowCommission, setBookingNumber: setBookingNumber$1, setIsRetry, setFetchingPackage, setHasMounted, setPackage, setPackageRooms, setPackageOptionPax, setPackageOptionUnits, setPackageGroups, setSkipPayment, setGeneratePaymentUrl, setTagIds, setAgentAdressId, setBookingRemarks, setVoucherCodes, setCurrentStep: setCurrentStep$1, setPackageAirlineGroups, setPackageAirportGroups, setFlights, setAccommodationViewId, setIsOption, setTravelersFirstStep, setIsUnavailable } = bookingSlice.actions;
|
|
18440
18438
|
var bookingReducer = bookingSlice.reducer;
|
|
18441
18439
|
|
|
18442
18440
|
const SettingsContext = React__default["default"].createContext({
|
|
@@ -18508,18 +18506,19 @@ const StepIndicators$1 = ({ currentStep, stepLabels }) => {
|
|
|
18508
18506
|
React__default["default"].createElement("div", { className: "step-indicators__text" }, stepName)))))));
|
|
18509
18507
|
};
|
|
18510
18508
|
|
|
18511
|
-
|
|
18512
|
-
|
|
18513
|
-
|
|
18514
|
-
|
|
18509
|
+
// Single source of truth for the ordered step labels shown in the indicator and
|
|
18510
|
+
// the panel title. Kept in one place so step-route.tsx and step-indicator.tsx
|
|
18511
|
+
// can never drift out of sync. The ERROR step is intentionally excluded — it is
|
|
18512
|
+
// not part of the indicator sequence.
|
|
18513
|
+
const buildStepLabels = ({ travelersFirstStep, flightOptionsHidden, roomOptionsHidden, translations }) => {
|
|
18515
18514
|
const stepLabels = [];
|
|
18516
18515
|
if (travelersFirstStep) {
|
|
18517
18516
|
stepLabels.push(translations.STEPS.PERSONAL_DETAILS);
|
|
18518
18517
|
}
|
|
18519
|
-
if (!
|
|
18518
|
+
if (!flightOptionsHidden) {
|
|
18520
18519
|
stepLabels.push(translations.STEPS.FLIGHT_OPTIONS);
|
|
18521
18520
|
}
|
|
18522
|
-
if (!
|
|
18521
|
+
if (!roomOptionsHidden) {
|
|
18523
18522
|
stepLabels.push(translations.STEPS.ROOM_OPTIONS);
|
|
18524
18523
|
}
|
|
18525
18524
|
stepLabels.push(translations.STEPS.EXTRA_OPTIONS);
|
|
@@ -18528,6 +18527,19 @@ const StepIndicators = ({ currentStep }) => {
|
|
|
18528
18527
|
}
|
|
18529
18528
|
stepLabels.push(translations.STEPS.SUMMARY);
|
|
18530
18529
|
stepLabels.push(translations.STEPS.CONFIRMATION);
|
|
18530
|
+
return stepLabels;
|
|
18531
|
+
};
|
|
18532
|
+
|
|
18533
|
+
const StepIndicators = ({ currentStep }) => {
|
|
18534
|
+
const { flightOptions, roomOptions } = React.useContext(SettingsContext);
|
|
18535
|
+
const translations = reactRedux.useSelector(selectTranslations);
|
|
18536
|
+
const travelersFirstStep = reactRedux.useSelector(selectTravelersFirstStep);
|
|
18537
|
+
const stepLabels = buildStepLabels({
|
|
18538
|
+
travelersFirstStep,
|
|
18539
|
+
flightOptionsHidden: flightOptions.isHidden,
|
|
18540
|
+
roomOptionsHidden: roomOptions.isHidden,
|
|
18541
|
+
translations
|
|
18542
|
+
});
|
|
18531
18543
|
return React__default["default"].createElement(StepIndicators$1, { currentStep: currentStep, stepLabels: stepLabels });
|
|
18532
18544
|
};
|
|
18533
18545
|
|
|
@@ -18544,22 +18556,12 @@ const StepRoute = ({ number, title, component }) => {
|
|
|
18544
18556
|
const { flightOptions, roomOptions } = React.useContext(SettingsContext);
|
|
18545
18557
|
const translations = reactRedux.useSelector(selectTranslations);
|
|
18546
18558
|
const travelersFirstStep = reactRedux.useSelector(selectTravelersFirstStep);
|
|
18547
|
-
const stepLabels =
|
|
18548
|
-
|
|
18549
|
-
|
|
18550
|
-
|
|
18551
|
-
|
|
18552
|
-
|
|
18553
|
-
}
|
|
18554
|
-
if (!roomOptions.isHidden) {
|
|
18555
|
-
stepLabels.push(translations.STEPS.ROOM_OPTIONS);
|
|
18556
|
-
}
|
|
18557
|
-
stepLabels.push(translations.STEPS.EXTRA_OPTIONS);
|
|
18558
|
-
if (!travelersFirstStep) {
|
|
18559
|
-
stepLabels.push(translations.STEPS.PERSONAL_DETAILS);
|
|
18560
|
-
}
|
|
18561
|
-
stepLabels.push(translations.STEPS.SUMMARY);
|
|
18562
|
-
stepLabels.push(translations.STEPS.CONFIRMATION);
|
|
18559
|
+
const stepLabels = buildStepLabels({
|
|
18560
|
+
travelersFirstStep,
|
|
18561
|
+
flightOptionsHidden: flightOptions.isHidden,
|
|
18562
|
+
roomOptionsHidden: roomOptions.isHidden,
|
|
18563
|
+
translations
|
|
18564
|
+
});
|
|
18563
18565
|
return (React__default["default"].createElement(BookingPanel, { currentStep: number, stepLabels: stepLabels, StepIndicatorsComponent: StepIndicators, renderTitle: (step) => (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
18564
18566
|
step + 1,
|
|
18565
18567
|
". ",
|
|
@@ -21659,6 +21661,7 @@ const Summary = () => {
|
|
|
21659
21661
|
const [remarks, setRemarks] = React.useState('');
|
|
21660
21662
|
const [voucher, setVoucher] = React.useState({});
|
|
21661
21663
|
const bookingQueryString = reactRedux.useSelector(selectBookingQueryString);
|
|
21664
|
+
const travelersFirstStep = reactRedux.useSelector(selectTravelersFirstStep);
|
|
21662
21665
|
const travelerFormValues = reactRedux.useSelector(selectTravelersFormValues);
|
|
21663
21666
|
const packageDetails = reactRedux.useSelector(selectPackageDetails);
|
|
21664
21667
|
const activeOption = reactRedux.useSelector(selectActiveOption);
|
|
@@ -21808,7 +21811,7 @@ const Summary = () => {
|
|
|
21808
21811
|
dispatch(fetchPriceDetails());
|
|
21809
21812
|
};
|
|
21810
21813
|
const goPrevious = () => {
|
|
21811
|
-
dispatch(setCurrentStep$1(TRAVELERS_FORM_STEP));
|
|
21814
|
+
dispatch(setCurrentStep$1(travelersFirstStep ? OPTIONS_FORM_STEP : TRAVELERS_FORM_STEP));
|
|
21812
21815
|
};
|
|
21813
21816
|
const translations = reactRedux.useSelector(selectTranslations);
|
|
21814
21817
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
@@ -21968,7 +21971,7 @@ const Summary = () => {
|
|
|
21968
21971
|
__html: checkbox.text
|
|
21969
21972
|
} }))))))))))),
|
|
21970
21973
|
React__default["default"].createElement("div", { className: "booking__navigator" },
|
|
21971
|
-
settings.skipRouter ? (React__default["default"].createElement("button", { type: "button", title: translations.STEPS.PREVIOUS, onClick: () => goPrevious(), className: "cta cta--secondary" }, translations.STEPS.PREVIOUS)) : (React__default["default"].createElement(Link, { to: `${!settings.skipBasePathInRouting ? settings.basePath : ''}${settings.travellers.pathSuffix}?${bookingQueryString}`, title: translations.STEPS.PREVIOUS, className: "cta cta--secondary" }, translations.STEPS.PREVIOUS)),
|
|
21974
|
+
settings.skipRouter ? (React__default["default"].createElement("button", { type: "button", title: translations.STEPS.PREVIOUS, onClick: () => goPrevious(), className: "cta cta--secondary" }, translations.STEPS.PREVIOUS)) : (React__default["default"].createElement(Link, { to: `${!settings.skipBasePathInRouting ? settings.basePath : ''}${travelersFirstStep ? settings.options.pathSuffix : settings.travellers.pathSuffix}?${bookingQueryString}`, title: translations.STEPS.PREVIOUS, className: "cta cta--secondary" }, translations.STEPS.PREVIOUS)),
|
|
21972
21975
|
settings.allowOption && (React__default["default"].createElement("button", { title: translations.STEPS.SUBMIT_OPTION, className: buildClassName(['cta', !userValidated && 'cta--disabled']), disabled: !userValidated, name: "option" }, translations.STEPS.SUBMIT_OPTION)),
|
|
21973
21976
|
React__default["default"].createElement("button", { title: settings.isOffer ? translations.STEPS.SUBMIT_OFFER : translations.STEPS.SUBMIT_BOOKING, className: buildClassName(['cta', !userValidated && 'cta--disabled']), disabled: !userValidated, name: "default" }, settings.isOffer ? translations.STEPS.SUBMIT_OFFER : translations.STEPS.SUBMIT_BOOKING))))));
|
|
21974
21977
|
};
|
|
@@ -22610,9 +22613,10 @@ const TravelersForm = () => {
|
|
|
22610
22613
|
const travelersFirstStep = reactRedux.useSelector(selectTravelersFirstStep);
|
|
22611
22614
|
const isUnavailable = reactRedux.useSelector(selectIsUnavailable);
|
|
22612
22615
|
const bookingAttributes = reactRedux.useSelector(selectBookingAttributes);
|
|
22613
|
-
const isFetching = reactRedux.useSelector(selectIsFetching);
|
|
22614
22616
|
const hasMounted = reactRedux.useSelector(selectHasMounted);
|
|
22615
22617
|
const countries = reactRedux.useSelector(selectCountries);
|
|
22618
|
+
const inFlight = React.useRef(false);
|
|
22619
|
+
const pendingRefetch = React.useRef(false);
|
|
22616
22620
|
const useCompactForm = !!settings.travellers.compactForm && !!settings.agentAdressId;
|
|
22617
22621
|
const showAllCountries = !!settings.travellers.showAllCountries;
|
|
22618
22622
|
const initialValues = reactRedux.useSelector(selectTravelersFormValues) ??
|
|
@@ -22644,40 +22648,46 @@ const TravelersForm = () => {
|
|
|
22644
22648
|
dispatch(fetchPriceDetails());
|
|
22645
22649
|
}, [dispatch]);
|
|
22646
22650
|
React.useEffect(() => {
|
|
22647
|
-
if (!bookingAttributes?.rooms?.length
|
|
22651
|
+
if (!bookingAttributes?.rooms?.length)
|
|
22648
22652
|
return;
|
|
22649
22653
|
if (!hasMounted) {
|
|
22650
22654
|
dispatch(setHasMounted(true));
|
|
22651
22655
|
return;
|
|
22652
22656
|
}
|
|
22657
|
+
if (inFlight.current) {
|
|
22658
|
+
pendingRefetch.current = true;
|
|
22659
|
+
return;
|
|
22660
|
+
}
|
|
22653
22661
|
const fetchAll = async () => {
|
|
22654
|
-
|
|
22662
|
+
inFlight.current = true;
|
|
22655
22663
|
try {
|
|
22656
|
-
|
|
22657
|
-
|
|
22664
|
+
do {
|
|
22665
|
+
pendingRefetch.current = false;
|
|
22666
|
+
await dispatch(fetchPackage());
|
|
22667
|
+
await dispatch(fetchPriceDetails());
|
|
22668
|
+
} while (pendingRefetch.current);
|
|
22658
22669
|
}
|
|
22659
22670
|
finally {
|
|
22660
|
-
|
|
22671
|
+
inFlight.current = false;
|
|
22661
22672
|
}
|
|
22662
22673
|
};
|
|
22663
22674
|
fetchAll();
|
|
22664
|
-
}, [bookingAttributes?.rooms, dispatch, hasMounted
|
|
22675
|
+
}, [bookingAttributes?.rooms, dispatch, hasMounted]);
|
|
22676
|
+
const roomsQuery = React.useMemo(() => formik$1.values.rooms
|
|
22677
|
+
.map((room) => {
|
|
22678
|
+
const adults = room.adults ? room.adults.length : 0;
|
|
22679
|
+
const childAges = room.children?.length ? room.children.map((child) => child.age).join(',') : '';
|
|
22680
|
+
return `(adults:${adults},childAges:(${childAges}))`;
|
|
22681
|
+
})
|
|
22682
|
+
.join(','), [formik$1.values.rooms]);
|
|
22665
22683
|
React.useEffect(() => {
|
|
22666
|
-
if (settings.skipRouter || !travelersFirstStep)
|
|
22684
|
+
if (settings.skipRouter || !travelersFirstStep || !bookingQueryString)
|
|
22667
22685
|
return;
|
|
22668
22686
|
const params = new URLSearchParams(bookingQueryString);
|
|
22669
22687
|
params.delete('rooms');
|
|
22670
|
-
const
|
|
22671
|
-
.map((room) => {
|
|
22672
|
-
const adults = room.adults ? room.adults.length : 0;
|
|
22673
|
-
const childAges = room.children?.length ? room.children.map((child) => child.age).join(',') : '';
|
|
22674
|
-
return `adults:${adults},childAges:(${childAges})`;
|
|
22675
|
-
})
|
|
22676
|
-
.map((room) => `(${room})`)
|
|
22677
|
-
.join(',');
|
|
22678
|
-
const nextQuery = `${params.toString()}${params.toString() ? '&' : ''}rooms=(${roomsString})`;
|
|
22688
|
+
const nextQuery = `${params.toString()}${params.toString() ? '&' : ''}rooms=(${roomsQuery})`;
|
|
22679
22689
|
navigate(`${window.location.pathname}?${nextQuery}`, { replace: true });
|
|
22680
|
-
}, [
|
|
22690
|
+
}, [roomsQuery, bookingQueryString, navigate, settings.skipRouter, travelersFirstStep]);
|
|
22681
22691
|
React.useEffect(() => {
|
|
22682
22692
|
if (!agents || !settings.affiliateSlug)
|
|
22683
22693
|
return;
|
|
@@ -22892,10 +22902,17 @@ const Booking = ({ productCode, productName, thumbnailUrl }) => {
|
|
|
22892
22902
|
promise.abort();
|
|
22893
22903
|
};
|
|
22894
22904
|
}, [productAttributes]);
|
|
22895
|
-
let numberIndex =
|
|
22896
|
-
|
|
22897
|
-
|
|
22898
|
-
|
|
22905
|
+
let numberIndex = 0;
|
|
22906
|
+
const getFirstStep = () => {
|
|
22907
|
+
if (travelersFirstStep)
|
|
22908
|
+
return { path: travellers.pathSuffix, title: translations.STEPS.PERSONAL_DETAILS, component: React__default["default"].createElement(TravelersForm, null) };
|
|
22909
|
+
if (!flightOptions.isHidden && flightOptions.pathSuffix)
|
|
22910
|
+
return { path: flightOptions.pathSuffix, title: translations.STEPS.FLIGHT_OPTIONS, component: React__default["default"].createElement(FlightOptionsForm, null) };
|
|
22911
|
+
if (!roomOptions.isHidden && roomOptions.pathSuffix)
|
|
22912
|
+
return { path: roomOptions.pathSuffix, title: translations.STEPS.ROOM_OPTIONS, component: React__default["default"].createElement(RoomOptionsForm, null) };
|
|
22913
|
+
return { path: options.pathSuffix, title: translations.STEPS.EXTRA_OPTIONS, component: React__default["default"].createElement(OptionsForm, null) };
|
|
22914
|
+
};
|
|
22915
|
+
const firstStep = getFirstStep();
|
|
22899
22916
|
if (!translationsReady) {
|
|
22900
22917
|
return null;
|
|
22901
22918
|
}
|
|
@@ -22904,8 +22921,9 @@ const Booking = ({ productCode, productName, thumbnailUrl }) => {
|
|
|
22904
22921
|
React__default["default"].createElement("div", { className: "booking__content" },
|
|
22905
22922
|
React__default["default"].createElement("div", { className: "booking__panel" },
|
|
22906
22923
|
React__default["default"].createElement(reactRouter.Routes, null,
|
|
22907
|
-
|
|
22908
|
-
|
|
22924
|
+
firstStep.path !== '/' && React__default["default"].createElement(reactRouter.Route, { path: "/", element: React__default["default"].createElement(StepRoute, { number: 0, title: firstStep.title, component: firstStep.component }) }),
|
|
22925
|
+
travelersFirstStep && (React__default["default"].createElement(reactRouter.Route, { path: travellers.pathSuffix, element: React__default["default"].createElement(StepRoute, { number: numberIndex++, title: translations.STEPS.PERSONAL_DETAILS, component: React__default["default"].createElement(TravelersForm, null) }) })),
|
|
22926
|
+
!flightOptions.isHidden && flightOptions.pathSuffix && (React__default["default"].createElement(reactRouter.Route, { path: flightOptions.pathSuffix, element: React__default["default"].createElement(StepRoute, { number: numberIndex++, title: translations.STEPS.FLIGHT_OPTIONS, component: React__default["default"].createElement(FlightOptionsForm, null) }) })),
|
|
22909
22927
|
!roomOptions.isHidden && roomOptions.pathSuffix && (React__default["default"].createElement(reactRouter.Route, { path: roomOptions.pathSuffix, element: React__default["default"].createElement(StepRoute, { number: numberIndex++, title: translations.STEPS.ROOM_OPTIONS, component: React__default["default"].createElement(RoomOptionsForm, null) }) })),
|
|
22910
22928
|
React__default["default"].createElement(reactRouter.Route, { path: options.pathSuffix, element: React__default["default"].createElement(StepRoute, { number: numberIndex++, title: translations.STEPS.EXTRA_OPTIONS, component: React__default["default"].createElement(OptionsForm, null) }) }),
|
|
22911
22929
|
!travelersFirstStep && (React__default["default"].createElement(reactRouter.Route, { path: travellers.pathSuffix, element: React__default["default"].createElement(StepRoute, { number: numberIndex++, title: translations.STEPS.PERSONAL_DETAILS, component: React__default["default"].createElement(TravelersForm, null) }) })),
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface BuildStepLabelsParams {
|
|
2
|
+
travelersFirstStep: boolean;
|
|
3
|
+
flightOptionsHidden?: boolean | null;
|
|
4
|
+
roomOptionsHidden?: boolean | null;
|
|
5
|
+
translations: Record<string, any>;
|
|
6
|
+
}
|
|
7
|
+
export declare const buildStepLabels: ({ travelersFirstStep, flightOptionsHidden, roomOptionsHidden, translations }: BuildStepLabelsParams) => string[];
|
|
8
|
+
export {};
|
|
@@ -33,7 +33,6 @@ export interface BookingState {
|
|
|
33
33
|
};
|
|
34
34
|
isOption?: boolean;
|
|
35
35
|
travelersFirstStep: boolean;
|
|
36
|
-
isFetching?: boolean;
|
|
37
36
|
hasMounted: boolean;
|
|
38
37
|
countries?: CountryItem[];
|
|
39
38
|
}
|
|
@@ -57,6 +56,6 @@ export declare const fetchCountries: import("@reduxjs/toolkit").AsyncThunk<impor
|
|
|
57
56
|
fulfilledMeta?: unknown;
|
|
58
57
|
rejectedMeta?: unknown;
|
|
59
58
|
}>;
|
|
60
|
-
export declare const setOfficeId: import("@reduxjs/toolkit").ActionCreatorWithPayload<number, "booking/setOfficeId">, setLanguageCode: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "booking/setLanguageCode">, setTranslations: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, "booking/setTranslations">, setBookingOptions: import("@reduxjs/toolkit").ActionCreatorWithPayload<BookingOptions, "booking/setBookingOptions">, setBookingType: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "booking/setBookingType">, setProductAttributes: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<ProductAttributes | undefined, "booking/setProductAttributes">, setBookingAttributes: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<BookingAttributes | undefined, "booking/setBookingAttributes">, setCalculateDeposit: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setCalculateDeposit">, setShowCommission: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<boolean | undefined, "booking/setShowCommission">, setBookingNumber: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "booking/setBookingNumber">, setIsRetry: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setIsRetry">, setFetchingPackage: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setFetchingPackage">,
|
|
59
|
+
export declare const setOfficeId: import("@reduxjs/toolkit").ActionCreatorWithPayload<number, "booking/setOfficeId">, setLanguageCode: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "booking/setLanguageCode">, setTranslations: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, "booking/setTranslations">, setBookingOptions: import("@reduxjs/toolkit").ActionCreatorWithPayload<BookingOptions, "booking/setBookingOptions">, setBookingType: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "booking/setBookingType">, setProductAttributes: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<ProductAttributes | undefined, "booking/setProductAttributes">, setBookingAttributes: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<BookingAttributes | undefined, "booking/setBookingAttributes">, setCalculateDeposit: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setCalculateDeposit">, setShowCommission: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<boolean | undefined, "booking/setShowCommission">, setBookingNumber: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "booking/setBookingNumber">, setIsRetry: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setIsRetry">, setFetchingPackage: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setFetchingPackage">, setHasMounted: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setHasMounted">, setPackage: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<BookingPackage | undefined, "booking/setPackage">, setPackageRooms: import("@reduxjs/toolkit").ActionCreatorWithPayload<BookingPackageRoom[], "booking/setPackageRooms">, setPackageOptionPax: import("@reduxjs/toolkit").ActionCreatorWithPayload<BookingOptionPax[], "booking/setPackageOptionPax">, setPackageOptionUnits: import("@reduxjs/toolkit").ActionCreatorWithPayload<BookingOptionUnit[], "booking/setPackageOptionUnits">, setPackageGroups: import("@reduxjs/toolkit").ActionCreatorWithPayload<BookingOptionGroup<PerBookingPackageOption>[], "booking/setPackageGroups">, setSkipPayment: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setSkipPayment">, setGeneratePaymentUrl: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setGeneratePaymentUrl">, setTagIds: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<number[] | undefined, "booking/setTagIds">, setAgentAdressId: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<number | undefined, "booking/setAgentAdressId">, setBookingRemarks: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "booking/setBookingRemarks">, setVoucherCodes: import("@reduxjs/toolkit").ActionCreatorWithPayload<string[], "booking/setVoucherCodes">, setCurrentStep: import("@reduxjs/toolkit").ActionCreatorWithPayload<BookingStep, "booking/setCurrentStep">, setPackageAirlineGroups: import("@reduxjs/toolkit").ActionCreatorWithPayload<BookingAirlineGroup<AirlineBookingPackageOption>[], "booking/setPackageAirlineGroups">, setPackageAirportGroups: import("@reduxjs/toolkit").ActionCreatorWithPayload<BookingAirportGroup<AirportBookingPackageOption>[], "booking/setPackageAirportGroups">, setFlights: import("@reduxjs/toolkit").ActionCreatorWithPayload<GroupedFlights, "booking/setFlights">, setAccommodationViewId: import("@reduxjs/toolkit").ActionCreatorWithPayload<number, "booking/setAccommodationViewId">, setIsOption: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setIsOption">, setTravelersFirstStep: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setTravelersFirstStep">, setIsUnavailable: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setIsUnavailable">;
|
|
61
60
|
declare const _default: import("@reduxjs/toolkit").Reducer<BookingState>;
|
|
62
61
|
export default _default;
|
|
@@ -2,7 +2,6 @@ import { BookingPackageAddress, BookingPackageBookRequest, BookingPackagePax, Bo
|
|
|
2
2
|
import { RootState } from '../../store';
|
|
3
3
|
import { Room } from '../../types';
|
|
4
4
|
export declare const selectHasMounted: (state: RootState) => boolean;
|
|
5
|
-
export declare const selectIsFetching: (state: RootState) => boolean | undefined;
|
|
6
5
|
export declare const selectCurrentStep: (state: RootState) => import("./constants").BookingStep;
|
|
7
6
|
export declare const selectGeneratePaymentUrl: (state: RootState) => boolean;
|
|
8
7
|
export declare const selectSkipPaymentWithAgent: (state: RootState) => boolean;
|
package/build/build-esm/index.js
CHANGED
|
@@ -17629,14 +17629,14 @@ const updateBookingGroups = (groups, changedLines) => {
|
|
|
17629
17629
|
};
|
|
17630
17630
|
|
|
17631
17631
|
const fetchPriceDetails = createAsyncThunk('priceDetails/fetchPriceDetails', async (_, { dispatch, getState, signal }) => {
|
|
17632
|
-
dispatch(setFetchingPriceDetails(true));
|
|
17633
|
-
dispatch(resetPriceDetails());
|
|
17634
17632
|
const state = getState();
|
|
17635
17633
|
const languageCode = selectLanguageCode(state);
|
|
17636
17634
|
const request = selectBookingPackageBookRequest(state);
|
|
17637
17635
|
if (!request) {
|
|
17638
17636
|
throw Error('Product not available.');
|
|
17639
17637
|
}
|
|
17638
|
+
dispatch(setFetchingPriceDetails(true));
|
|
17639
|
+
dispatch(resetPriceDetails());
|
|
17640
17640
|
const priceDetails = await priceDetailsApi.fetchPriceDetails(state.apiSettings, request, signal, languageCode);
|
|
17641
17641
|
dispatch(setFetchingPriceDetails(false));
|
|
17642
17642
|
const packageDetails = selectPackageDetails(state);
|
|
@@ -17673,6 +17673,9 @@ const priceDetailsSlice = createSlice({
|
|
|
17673
17673
|
state.notifications = action.payload.notifications;
|
|
17674
17674
|
}
|
|
17675
17675
|
});
|
|
17676
|
+
builder.addCase(fetchPriceDetails.rejected, (state) => {
|
|
17677
|
+
state.isBusy = false;
|
|
17678
|
+
});
|
|
17676
17679
|
}
|
|
17677
17680
|
});
|
|
17678
17681
|
const { setFetchingPriceDetails } = priceDetailsSlice.actions;
|
|
@@ -17681,7 +17684,6 @@ const selectNotifications = (state) => state.priceDetails.notifications;
|
|
|
17681
17684
|
var priceDetailsReducer = priceDetailsSlice.reducer;
|
|
17682
17685
|
|
|
17683
17686
|
const selectHasMounted = (state) => state.booking.hasMounted;
|
|
17684
|
-
const selectIsFetching = (state) => state.booking.isFetching;
|
|
17685
17687
|
const selectGeneratePaymentUrl = (state) => state.booking.generatePaymentUrl;
|
|
17686
17688
|
const selectSkipPaymentWithAgent = (state) => state.booking.skipPaymentWithAgent;
|
|
17687
17689
|
const selectIsFetchingProductOptions = (state) => state.booking.isBusy;
|
|
@@ -17972,7 +17974,6 @@ const initialState$5 = {
|
|
|
17972
17974
|
currentStep: OPTIONS_FORM_STEP,
|
|
17973
17975
|
translations: undefined,
|
|
17974
17976
|
travelersFirstStep: false,
|
|
17975
|
-
isFetching: false,
|
|
17976
17977
|
hasMounted: false,
|
|
17977
17978
|
countries: undefined
|
|
17978
17979
|
};
|
|
@@ -18191,9 +18192,6 @@ const bookingSlice = createSlice({
|
|
|
18191
18192
|
setHasMounted(state, action) {
|
|
18192
18193
|
state.hasMounted = action.payload;
|
|
18193
18194
|
},
|
|
18194
|
-
setIsFetching(state, action) {
|
|
18195
|
-
state.isFetching = action.payload;
|
|
18196
|
-
},
|
|
18197
18195
|
setOfficeId(state, action) {
|
|
18198
18196
|
state.officeId = action.payload;
|
|
18199
18197
|
},
|
|
@@ -18407,7 +18405,7 @@ const bookingSlice = createSlice({
|
|
|
18407
18405
|
});
|
|
18408
18406
|
}
|
|
18409
18407
|
});
|
|
18410
|
-
const { setOfficeId, setLanguageCode, setTranslations, setBookingOptions, setBookingType, setProductAttributes, setBookingAttributes, setCalculateDeposit, setShowCommission, setBookingNumber: setBookingNumber$1, setIsRetry, setFetchingPackage,
|
|
18408
|
+
const { setOfficeId, setLanguageCode, setTranslations, setBookingOptions, setBookingType, setProductAttributes, setBookingAttributes, setCalculateDeposit, setShowCommission, setBookingNumber: setBookingNumber$1, setIsRetry, setFetchingPackage, setHasMounted, setPackage, setPackageRooms, setPackageOptionPax, setPackageOptionUnits, setPackageGroups, setSkipPayment, setGeneratePaymentUrl, setTagIds, setAgentAdressId, setBookingRemarks, setVoucherCodes, setCurrentStep: setCurrentStep$1, setPackageAirlineGroups, setPackageAirportGroups, setFlights, setAccommodationViewId, setIsOption, setTravelersFirstStep, setIsUnavailable } = bookingSlice.actions;
|
|
18411
18409
|
var bookingReducer = bookingSlice.reducer;
|
|
18412
18410
|
|
|
18413
18411
|
const SettingsContext = React__default.createContext({
|
|
@@ -18479,18 +18477,19 @@ const StepIndicators$1 = ({ currentStep, stepLabels }) => {
|
|
|
18479
18477
|
React__default.createElement("div", { className: "step-indicators__text" }, stepName)))))));
|
|
18480
18478
|
};
|
|
18481
18479
|
|
|
18482
|
-
|
|
18483
|
-
|
|
18484
|
-
|
|
18485
|
-
|
|
18480
|
+
// Single source of truth for the ordered step labels shown in the indicator and
|
|
18481
|
+
// the panel title. Kept in one place so step-route.tsx and step-indicator.tsx
|
|
18482
|
+
// can never drift out of sync. The ERROR step is intentionally excluded — it is
|
|
18483
|
+
// not part of the indicator sequence.
|
|
18484
|
+
const buildStepLabels = ({ travelersFirstStep, flightOptionsHidden, roomOptionsHidden, translations }) => {
|
|
18486
18485
|
const stepLabels = [];
|
|
18487
18486
|
if (travelersFirstStep) {
|
|
18488
18487
|
stepLabels.push(translations.STEPS.PERSONAL_DETAILS);
|
|
18489
18488
|
}
|
|
18490
|
-
if (!
|
|
18489
|
+
if (!flightOptionsHidden) {
|
|
18491
18490
|
stepLabels.push(translations.STEPS.FLIGHT_OPTIONS);
|
|
18492
18491
|
}
|
|
18493
|
-
if (!
|
|
18492
|
+
if (!roomOptionsHidden) {
|
|
18494
18493
|
stepLabels.push(translations.STEPS.ROOM_OPTIONS);
|
|
18495
18494
|
}
|
|
18496
18495
|
stepLabels.push(translations.STEPS.EXTRA_OPTIONS);
|
|
@@ -18499,6 +18498,19 @@ const StepIndicators = ({ currentStep }) => {
|
|
|
18499
18498
|
}
|
|
18500
18499
|
stepLabels.push(translations.STEPS.SUMMARY);
|
|
18501
18500
|
stepLabels.push(translations.STEPS.CONFIRMATION);
|
|
18501
|
+
return stepLabels;
|
|
18502
|
+
};
|
|
18503
|
+
|
|
18504
|
+
const StepIndicators = ({ currentStep }) => {
|
|
18505
|
+
const { flightOptions, roomOptions } = useContext(SettingsContext);
|
|
18506
|
+
const translations = useSelector(selectTranslations);
|
|
18507
|
+
const travelersFirstStep = useSelector(selectTravelersFirstStep);
|
|
18508
|
+
const stepLabels = buildStepLabels({
|
|
18509
|
+
travelersFirstStep,
|
|
18510
|
+
flightOptionsHidden: flightOptions.isHidden,
|
|
18511
|
+
roomOptionsHidden: roomOptions.isHidden,
|
|
18512
|
+
translations
|
|
18513
|
+
});
|
|
18502
18514
|
return React__default.createElement(StepIndicators$1, { currentStep: currentStep, stepLabels: stepLabels });
|
|
18503
18515
|
};
|
|
18504
18516
|
|
|
@@ -18515,22 +18527,12 @@ const StepRoute = ({ number, title, component }) => {
|
|
|
18515
18527
|
const { flightOptions, roomOptions } = useContext(SettingsContext);
|
|
18516
18528
|
const translations = useSelector(selectTranslations);
|
|
18517
18529
|
const travelersFirstStep = useSelector(selectTravelersFirstStep);
|
|
18518
|
-
const stepLabels =
|
|
18519
|
-
|
|
18520
|
-
|
|
18521
|
-
|
|
18522
|
-
|
|
18523
|
-
|
|
18524
|
-
}
|
|
18525
|
-
if (!roomOptions.isHidden) {
|
|
18526
|
-
stepLabels.push(translations.STEPS.ROOM_OPTIONS);
|
|
18527
|
-
}
|
|
18528
|
-
stepLabels.push(translations.STEPS.EXTRA_OPTIONS);
|
|
18529
|
-
if (!travelersFirstStep) {
|
|
18530
|
-
stepLabels.push(translations.STEPS.PERSONAL_DETAILS);
|
|
18531
|
-
}
|
|
18532
|
-
stepLabels.push(translations.STEPS.SUMMARY);
|
|
18533
|
-
stepLabels.push(translations.STEPS.CONFIRMATION);
|
|
18530
|
+
const stepLabels = buildStepLabels({
|
|
18531
|
+
travelersFirstStep,
|
|
18532
|
+
flightOptionsHidden: flightOptions.isHidden,
|
|
18533
|
+
roomOptionsHidden: roomOptions.isHidden,
|
|
18534
|
+
translations
|
|
18535
|
+
});
|
|
18534
18536
|
return (React__default.createElement(BookingPanel, { currentStep: number, stepLabels: stepLabels, StepIndicatorsComponent: StepIndicators, renderTitle: (step) => (React__default.createElement(React__default.Fragment, null,
|
|
18535
18537
|
step + 1,
|
|
18536
18538
|
". ",
|
|
@@ -21630,6 +21632,7 @@ const Summary = () => {
|
|
|
21630
21632
|
const [remarks, setRemarks] = useState('');
|
|
21631
21633
|
const [voucher, setVoucher] = useState({});
|
|
21632
21634
|
const bookingQueryString = useSelector(selectBookingQueryString);
|
|
21635
|
+
const travelersFirstStep = useSelector(selectTravelersFirstStep);
|
|
21633
21636
|
const travelerFormValues = useSelector(selectTravelersFormValues);
|
|
21634
21637
|
const packageDetails = useSelector(selectPackageDetails);
|
|
21635
21638
|
const activeOption = useSelector(selectActiveOption);
|
|
@@ -21779,7 +21782,7 @@ const Summary = () => {
|
|
|
21779
21782
|
dispatch(fetchPriceDetails());
|
|
21780
21783
|
};
|
|
21781
21784
|
const goPrevious = () => {
|
|
21782
|
-
dispatch(setCurrentStep$1(TRAVELERS_FORM_STEP));
|
|
21785
|
+
dispatch(setCurrentStep$1(travelersFirstStep ? OPTIONS_FORM_STEP : TRAVELERS_FORM_STEP));
|
|
21783
21786
|
};
|
|
21784
21787
|
const translations = useSelector(selectTranslations);
|
|
21785
21788
|
return (React__default.createElement(React__default.Fragment, null,
|
|
@@ -21939,7 +21942,7 @@ const Summary = () => {
|
|
|
21939
21942
|
__html: checkbox.text
|
|
21940
21943
|
} }))))))))))),
|
|
21941
21944
|
React__default.createElement("div", { className: "booking__navigator" },
|
|
21942
|
-
settings.skipRouter ? (React__default.createElement("button", { type: "button", title: translations.STEPS.PREVIOUS, onClick: () => goPrevious(), className: "cta cta--secondary" }, translations.STEPS.PREVIOUS)) : (React__default.createElement(Link, { to: `${!settings.skipBasePathInRouting ? settings.basePath : ''}${settings.travellers.pathSuffix}?${bookingQueryString}`, title: translations.STEPS.PREVIOUS, className: "cta cta--secondary" }, translations.STEPS.PREVIOUS)),
|
|
21945
|
+
settings.skipRouter ? (React__default.createElement("button", { type: "button", title: translations.STEPS.PREVIOUS, onClick: () => goPrevious(), className: "cta cta--secondary" }, translations.STEPS.PREVIOUS)) : (React__default.createElement(Link, { to: `${!settings.skipBasePathInRouting ? settings.basePath : ''}${travelersFirstStep ? settings.options.pathSuffix : settings.travellers.pathSuffix}?${bookingQueryString}`, title: translations.STEPS.PREVIOUS, className: "cta cta--secondary" }, translations.STEPS.PREVIOUS)),
|
|
21943
21946
|
settings.allowOption && (React__default.createElement("button", { title: translations.STEPS.SUBMIT_OPTION, className: buildClassName(['cta', !userValidated && 'cta--disabled']), disabled: !userValidated, name: "option" }, translations.STEPS.SUBMIT_OPTION)),
|
|
21944
21947
|
React__default.createElement("button", { title: settings.isOffer ? translations.STEPS.SUBMIT_OFFER : translations.STEPS.SUBMIT_BOOKING, className: buildClassName(['cta', !userValidated && 'cta--disabled']), disabled: !userValidated, name: "default" }, settings.isOffer ? translations.STEPS.SUBMIT_OFFER : translations.STEPS.SUBMIT_BOOKING))))));
|
|
21945
21948
|
};
|
|
@@ -22581,9 +22584,10 @@ const TravelersForm = () => {
|
|
|
22581
22584
|
const travelersFirstStep = useSelector(selectTravelersFirstStep);
|
|
22582
22585
|
const isUnavailable = useSelector(selectIsUnavailable);
|
|
22583
22586
|
const bookingAttributes = useSelector(selectBookingAttributes);
|
|
22584
|
-
const isFetching = useSelector(selectIsFetching);
|
|
22585
22587
|
const hasMounted = useSelector(selectHasMounted);
|
|
22586
22588
|
const countries = useSelector(selectCountries);
|
|
22589
|
+
const inFlight = useRef(false);
|
|
22590
|
+
const pendingRefetch = useRef(false);
|
|
22587
22591
|
const useCompactForm = !!settings.travellers.compactForm && !!settings.agentAdressId;
|
|
22588
22592
|
const showAllCountries = !!settings.travellers.showAllCountries;
|
|
22589
22593
|
const initialValues = useSelector(selectTravelersFormValues) ??
|
|
@@ -22615,40 +22619,46 @@ const TravelersForm = () => {
|
|
|
22615
22619
|
dispatch(fetchPriceDetails());
|
|
22616
22620
|
}, [dispatch]);
|
|
22617
22621
|
useEffect(() => {
|
|
22618
|
-
if (!bookingAttributes?.rooms?.length
|
|
22622
|
+
if (!bookingAttributes?.rooms?.length)
|
|
22619
22623
|
return;
|
|
22620
22624
|
if (!hasMounted) {
|
|
22621
22625
|
dispatch(setHasMounted(true));
|
|
22622
22626
|
return;
|
|
22623
22627
|
}
|
|
22628
|
+
if (inFlight.current) {
|
|
22629
|
+
pendingRefetch.current = true;
|
|
22630
|
+
return;
|
|
22631
|
+
}
|
|
22624
22632
|
const fetchAll = async () => {
|
|
22625
|
-
|
|
22633
|
+
inFlight.current = true;
|
|
22626
22634
|
try {
|
|
22627
|
-
|
|
22628
|
-
|
|
22635
|
+
do {
|
|
22636
|
+
pendingRefetch.current = false;
|
|
22637
|
+
await dispatch(fetchPackage());
|
|
22638
|
+
await dispatch(fetchPriceDetails());
|
|
22639
|
+
} while (pendingRefetch.current);
|
|
22629
22640
|
}
|
|
22630
22641
|
finally {
|
|
22631
|
-
|
|
22642
|
+
inFlight.current = false;
|
|
22632
22643
|
}
|
|
22633
22644
|
};
|
|
22634
22645
|
fetchAll();
|
|
22635
|
-
}, [bookingAttributes?.rooms, dispatch, hasMounted
|
|
22646
|
+
}, [bookingAttributes?.rooms, dispatch, hasMounted]);
|
|
22647
|
+
const roomsQuery = useMemo(() => formik.values.rooms
|
|
22648
|
+
.map((room) => {
|
|
22649
|
+
const adults = room.adults ? room.adults.length : 0;
|
|
22650
|
+
const childAges = room.children?.length ? room.children.map((child) => child.age).join(',') : '';
|
|
22651
|
+
return `(adults:${adults},childAges:(${childAges}))`;
|
|
22652
|
+
})
|
|
22653
|
+
.join(','), [formik.values.rooms]);
|
|
22636
22654
|
useEffect(() => {
|
|
22637
|
-
if (settings.skipRouter || !travelersFirstStep)
|
|
22655
|
+
if (settings.skipRouter || !travelersFirstStep || !bookingQueryString)
|
|
22638
22656
|
return;
|
|
22639
22657
|
const params = new URLSearchParams(bookingQueryString);
|
|
22640
22658
|
params.delete('rooms');
|
|
22641
|
-
const
|
|
22642
|
-
.map((room) => {
|
|
22643
|
-
const adults = room.adults ? room.adults.length : 0;
|
|
22644
|
-
const childAges = room.children?.length ? room.children.map((child) => child.age).join(',') : '';
|
|
22645
|
-
return `adults:${adults},childAges:(${childAges})`;
|
|
22646
|
-
})
|
|
22647
|
-
.map((room) => `(${room})`)
|
|
22648
|
-
.join(',');
|
|
22649
|
-
const nextQuery = `${params.toString()}${params.toString() ? '&' : ''}rooms=(${roomsString})`;
|
|
22659
|
+
const nextQuery = `${params.toString()}${params.toString() ? '&' : ''}rooms=(${roomsQuery})`;
|
|
22650
22660
|
navigate(`${window.location.pathname}?${nextQuery}`, { replace: true });
|
|
22651
|
-
}, [
|
|
22661
|
+
}, [roomsQuery, bookingQueryString, navigate, settings.skipRouter, travelersFirstStep]);
|
|
22652
22662
|
useEffect(() => {
|
|
22653
22663
|
if (!agents || !settings.affiliateSlug)
|
|
22654
22664
|
return;
|
|
@@ -22863,10 +22873,17 @@ const Booking = ({ productCode, productName, thumbnailUrl }) => {
|
|
|
22863
22873
|
promise.abort();
|
|
22864
22874
|
};
|
|
22865
22875
|
}, [productAttributes]);
|
|
22866
|
-
let numberIndex =
|
|
22867
|
-
|
|
22868
|
-
|
|
22869
|
-
|
|
22876
|
+
let numberIndex = 0;
|
|
22877
|
+
const getFirstStep = () => {
|
|
22878
|
+
if (travelersFirstStep)
|
|
22879
|
+
return { path: travellers.pathSuffix, title: translations.STEPS.PERSONAL_DETAILS, component: React__default.createElement(TravelersForm, null) };
|
|
22880
|
+
if (!flightOptions.isHidden && flightOptions.pathSuffix)
|
|
22881
|
+
return { path: flightOptions.pathSuffix, title: translations.STEPS.FLIGHT_OPTIONS, component: React__default.createElement(FlightOptionsForm, null) };
|
|
22882
|
+
if (!roomOptions.isHidden && roomOptions.pathSuffix)
|
|
22883
|
+
return { path: roomOptions.pathSuffix, title: translations.STEPS.ROOM_OPTIONS, component: React__default.createElement(RoomOptionsForm, null) };
|
|
22884
|
+
return { path: options.pathSuffix, title: translations.STEPS.EXTRA_OPTIONS, component: React__default.createElement(OptionsForm, null) };
|
|
22885
|
+
};
|
|
22886
|
+
const firstStep = getFirstStep();
|
|
22870
22887
|
if (!translationsReady) {
|
|
22871
22888
|
return null;
|
|
22872
22889
|
}
|
|
@@ -22875,8 +22892,9 @@ const Booking = ({ productCode, productName, thumbnailUrl }) => {
|
|
|
22875
22892
|
React__default.createElement("div", { className: "booking__content" },
|
|
22876
22893
|
React__default.createElement("div", { className: "booking__panel" },
|
|
22877
22894
|
React__default.createElement(Routes, null,
|
|
22878
|
-
|
|
22879
|
-
|
|
22895
|
+
firstStep.path !== '/' && React__default.createElement(Route, { path: "/", element: React__default.createElement(StepRoute, { number: 0, title: firstStep.title, component: firstStep.component }) }),
|
|
22896
|
+
travelersFirstStep && (React__default.createElement(Route, { path: travellers.pathSuffix, element: React__default.createElement(StepRoute, { number: numberIndex++, title: translations.STEPS.PERSONAL_DETAILS, component: React__default.createElement(TravelersForm, null) }) })),
|
|
22897
|
+
!flightOptions.isHidden && flightOptions.pathSuffix && (React__default.createElement(Route, { path: flightOptions.pathSuffix, element: React__default.createElement(StepRoute, { number: numberIndex++, title: translations.STEPS.FLIGHT_OPTIONS, component: React__default.createElement(FlightOptionsForm, null) }) })),
|
|
22880
22898
|
!roomOptions.isHidden && roomOptions.pathSuffix && (React__default.createElement(Route, { path: roomOptions.pathSuffix, element: React__default.createElement(StepRoute, { number: numberIndex++, title: translations.STEPS.ROOM_OPTIONS, component: React__default.createElement(RoomOptionsForm, null) }) })),
|
|
22881
22899
|
React__default.createElement(Route, { path: options.pathSuffix, element: React__default.createElement(StepRoute, { number: numberIndex++, title: translations.STEPS.EXTRA_OPTIONS, component: React__default.createElement(OptionsForm, null) }) }),
|
|
22882
22900
|
!travelersFirstStep && (React__default.createElement(Route, { path: travellers.pathSuffix, element: React__default.createElement(StepRoute, { number: numberIndex++, title: translations.STEPS.PERSONAL_DETAILS, component: React__default.createElement(TravelersForm, null) }) })),
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface BuildStepLabelsParams {
|
|
2
|
+
travelersFirstStep: boolean;
|
|
3
|
+
flightOptionsHidden?: boolean | null;
|
|
4
|
+
roomOptionsHidden?: boolean | null;
|
|
5
|
+
translations: Record<string, any>;
|
|
6
|
+
}
|
|
7
|
+
export declare const buildStepLabels: ({ travelersFirstStep, flightOptionsHidden, roomOptionsHidden, translations }: BuildStepLabelsParams) => string[];
|
|
8
|
+
export {};
|
|
@@ -33,7 +33,6 @@ export interface BookingState {
|
|
|
33
33
|
};
|
|
34
34
|
isOption?: boolean;
|
|
35
35
|
travelersFirstStep: boolean;
|
|
36
|
-
isFetching?: boolean;
|
|
37
36
|
hasMounted: boolean;
|
|
38
37
|
countries?: CountryItem[];
|
|
39
38
|
}
|
|
@@ -57,6 +56,6 @@ export declare const fetchCountries: import("@reduxjs/toolkit").AsyncThunk<impor
|
|
|
57
56
|
fulfilledMeta?: unknown;
|
|
58
57
|
rejectedMeta?: unknown;
|
|
59
58
|
}>;
|
|
60
|
-
export declare const setOfficeId: import("@reduxjs/toolkit").ActionCreatorWithPayload<number, "booking/setOfficeId">, setLanguageCode: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "booking/setLanguageCode">, setTranslations: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, "booking/setTranslations">, setBookingOptions: import("@reduxjs/toolkit").ActionCreatorWithPayload<BookingOptions, "booking/setBookingOptions">, setBookingType: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "booking/setBookingType">, setProductAttributes: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<ProductAttributes | undefined, "booking/setProductAttributes">, setBookingAttributes: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<BookingAttributes | undefined, "booking/setBookingAttributes">, setCalculateDeposit: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setCalculateDeposit">, setShowCommission: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<boolean | undefined, "booking/setShowCommission">, setBookingNumber: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "booking/setBookingNumber">, setIsRetry: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setIsRetry">, setFetchingPackage: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setFetchingPackage">,
|
|
59
|
+
export declare const setOfficeId: import("@reduxjs/toolkit").ActionCreatorWithPayload<number, "booking/setOfficeId">, setLanguageCode: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "booking/setLanguageCode">, setTranslations: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, "booking/setTranslations">, setBookingOptions: import("@reduxjs/toolkit").ActionCreatorWithPayload<BookingOptions, "booking/setBookingOptions">, setBookingType: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "booking/setBookingType">, setProductAttributes: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<ProductAttributes | undefined, "booking/setProductAttributes">, setBookingAttributes: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<BookingAttributes | undefined, "booking/setBookingAttributes">, setCalculateDeposit: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setCalculateDeposit">, setShowCommission: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<boolean | undefined, "booking/setShowCommission">, setBookingNumber: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "booking/setBookingNumber">, setIsRetry: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setIsRetry">, setFetchingPackage: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setFetchingPackage">, setHasMounted: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setHasMounted">, setPackage: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<BookingPackage | undefined, "booking/setPackage">, setPackageRooms: import("@reduxjs/toolkit").ActionCreatorWithPayload<BookingPackageRoom[], "booking/setPackageRooms">, setPackageOptionPax: import("@reduxjs/toolkit").ActionCreatorWithPayload<BookingOptionPax[], "booking/setPackageOptionPax">, setPackageOptionUnits: import("@reduxjs/toolkit").ActionCreatorWithPayload<BookingOptionUnit[], "booking/setPackageOptionUnits">, setPackageGroups: import("@reduxjs/toolkit").ActionCreatorWithPayload<BookingOptionGroup<PerBookingPackageOption>[], "booking/setPackageGroups">, setSkipPayment: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setSkipPayment">, setGeneratePaymentUrl: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setGeneratePaymentUrl">, setTagIds: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<number[] | undefined, "booking/setTagIds">, setAgentAdressId: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<number | undefined, "booking/setAgentAdressId">, setBookingRemarks: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "booking/setBookingRemarks">, setVoucherCodes: import("@reduxjs/toolkit").ActionCreatorWithPayload<string[], "booking/setVoucherCodes">, setCurrentStep: import("@reduxjs/toolkit").ActionCreatorWithPayload<BookingStep, "booking/setCurrentStep">, setPackageAirlineGroups: import("@reduxjs/toolkit").ActionCreatorWithPayload<BookingAirlineGroup<AirlineBookingPackageOption>[], "booking/setPackageAirlineGroups">, setPackageAirportGroups: import("@reduxjs/toolkit").ActionCreatorWithPayload<BookingAirportGroup<AirportBookingPackageOption>[], "booking/setPackageAirportGroups">, setFlights: import("@reduxjs/toolkit").ActionCreatorWithPayload<GroupedFlights, "booking/setFlights">, setAccommodationViewId: import("@reduxjs/toolkit").ActionCreatorWithPayload<number, "booking/setAccommodationViewId">, setIsOption: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setIsOption">, setTravelersFirstStep: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setTravelersFirstStep">, setIsUnavailable: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "booking/setIsUnavailable">;
|
|
61
60
|
declare const _default: import("@reduxjs/toolkit").Reducer<BookingState>;
|
|
62
61
|
export default _default;
|
|
@@ -2,7 +2,6 @@ import { BookingPackageAddress, BookingPackageBookRequest, BookingPackagePax, Bo
|
|
|
2
2
|
import { RootState } from '../../store';
|
|
3
3
|
import { Room } from '../../types';
|
|
4
4
|
export declare const selectHasMounted: (state: RootState) => boolean;
|
|
5
|
-
export declare const selectIsFetching: (state: RootState) => boolean | undefined;
|
|
6
5
|
export declare const selectCurrentStep: (state: RootState) => import("./constants").BookingStep;
|
|
7
6
|
export declare const selectGeneratePaymentUrl: (state: RootState) => boolean;
|
|
8
7
|
export declare const selectSkipPaymentWithAgent: (state: RootState) => boolean;
|
package/package.json
CHANGED