@roomstay/frontend 2.6.57 → 2.6.59
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/493.bundle.js +1 -1
- package/dist/537.bundle.js +1 -0
- package/dist/903.bundle.js +1 -1
- package/dist/main.bundle.js +1 -1
- package/dist/src/api/AvailabilityAPI.js +8 -6
- package/dist/src/api/AvailabilityAPI.js.map +1 -1
- package/dist/src/components/generic/BookNowPayLaterInfoBlock.js +1 -1
- package/dist/src/components/generic/BookNowPayLaterInfoBlock.js.map +1 -1
- package/dist/src/components/generic/BookingWizard/BookingWizard.d.ts +9 -1
- package/dist/src/components/generic/BookingWizard/BookingWizard.js +86 -1
- package/dist/src/components/generic/BookingWizard/BookingWizard.js.map +1 -1
- package/dist/src/components/generic/BookingWizard/BookingWizardBottomSheet/BookingWizardBottomSheet.d.ts +14 -1
- package/dist/src/components/generic/BookingWizard/BookingWizardBottomSheet/BookingWizardBottomSheet.js +27 -0
- package/dist/src/components/generic/BookingWizard/BookingWizardBottomSheet/BookingWizardBottomSheet.js.map +1 -1
- package/dist/src/components/generic/BookingWizard/BookingWizardContent.d.ts +19 -0
- package/dist/src/components/generic/BookingWizard/BookingWizardContent.js +116 -30
- package/dist/src/components/generic/BookingWizard/BookingWizardContent.js.map +1 -1
- package/dist/src/components/generic/BookingWizard/BookingWizardContext.d.ts +12 -1
- package/dist/src/components/generic/BookingWizard/BookingWizardContext.js.map +1 -1
- package/dist/src/components/generic/BookingWizard/BookingWizardDateSelector/BookingWizardDateSelector.d.ts +6 -2
- package/dist/src/components/generic/BookingWizard/BookingWizardDateSelector/BookingWizardDateSelector.js +96 -29
- package/dist/src/components/generic/BookingWizard/BookingWizardDateSelector/BookingWizardDateSelector.js.map +1 -1
- package/dist/src/components/generic/BookingWizard/BookingWizardGuestSelector/BookingWizardGuestSelector.d.ts +18 -3
- package/dist/src/components/generic/BookingWizard/BookingWizardGuestSelector/BookingWizardGuestSelector.js +118 -27
- package/dist/src/components/generic/BookingWizard/BookingWizardGuestSelector/BookingWizardGuestSelector.js.map +1 -1
- package/dist/src/components/generic/BookingWizard/BookingWizardHotelSelector/BookingWizardHotelSelector.js +53 -18
- package/dist/src/components/generic/BookingWizard/BookingWizardHotelSelector/BookingWizardHotelSelector.js.map +1 -1
- package/dist/src/components/generic/BookingWizard/BookingWizardPromoCode/BookingWizardPromoCode.js +5 -2
- package/dist/src/components/generic/BookingWizard/BookingWizardPromoCode/BookingWizardPromoCode.js.map +1 -1
- package/dist/src/components/generic/DateRangePicker/DateRangePicker.d.ts +6 -0
- package/dist/src/components/generic/DateRangePicker/DateRangePicker.js +8 -7
- package/dist/src/components/generic/DateRangePicker/DateRangePicker.js.map +1 -1
- package/dist/src/components/generic/DateRangePicker/FloatingDateRangePicker.d.ts +2 -0
- package/dist/src/components/generic/DateRangePicker/FloatingDateRangePicker.js +11 -2
- package/dist/src/components/generic/DateRangePicker/FloatingDateRangePicker.js.map +1 -1
- package/dist/src/components/generic/Event/EventCard.js +6 -2
- package/dist/src/components/generic/Event/EventCard.js.map +1 -1
- package/dist/src/components/generic/PaymentCard/PaymentCardInput.js +19 -4
- package/dist/src/components/generic/PaymentCard/PaymentCardInput.js.map +1 -1
- package/dist/src/components/generic/RadioButtonGroup/RadioButton.d.ts +1 -0
- package/dist/src/components/generic/RadioButtonGroup/RadioButton.js +2 -2
- package/dist/src/components/generic/RadioButtonGroup/RadioButton.js.map +1 -1
- package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.d.ts +3 -2
- package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.js +10 -10
- package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.js.map +1 -1
- package/dist/src/components/generic/date/DatePicker.d.ts +5 -0
- package/dist/src/components/generic/date/DatePicker.js +7 -3
- package/dist/src/components/generic/date/DatePicker.js.map +1 -1
- package/dist/src/components/generic/date/DatePickerDay.js +13 -3
- package/dist/src/components/generic/date/DatePickerDay.js.map +1 -1
- package/dist/src/components/reservation/ReservationItem.js +5 -2
- package/dist/src/components/reservation/ReservationItem.js.map +1 -1
- package/dist/src/components/reservation/ReservationList.js +1 -1
- package/dist/src/components/reservation/ReservationList.js.map +1 -1
- package/dist/src/components/steps/confirmation/PaymentInformation.js +4 -1
- package/dist/src/components/steps/confirmation/PaymentInformation.js.map +1 -1
- package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryRow.js +7 -1
- package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryRow.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.js +7 -4
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRatePills.js +3 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRatePills.js.map +1 -1
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js +1 -1
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +1 -0
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +9 -7
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
- package/dist/src/contexts/DatePickerContext.d.ts +1 -0
- package/dist/src/contexts/DatePickerContext.js.map +1 -1
- package/dist/src/contexts/Members/AuthenticationContext/AuthenticationContextProvider.js +3 -0
- package/dist/src/contexts/Members/AuthenticationContext/AuthenticationContextProvider.js.map +1 -1
- package/dist/src/contexts/Members/RoomstayMemberContext/RoomstayMemberContextProvider.js +3 -3
- package/dist/src/contexts/Members/RoomstayMemberContext/RoomstayMemberContextProvider.js.map +1 -1
- package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.d.ts +9 -2
- package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.js.map +1 -1
- package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js +10 -10
- package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js.map +1 -1
- package/dist/src/handlers/payment/PaymentHandler.d.ts +1 -0
- package/dist/src/handlers/payment/PaymentHandler.js.map +1 -1
- package/dist/src/handlers/payment/VGSMemberPaymentHandler.js +13 -35
- package/dist/src/handlers/payment/VGSMemberPaymentHandler.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +5 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/models/Api/HotelDTO.d.ts +1 -1
- package/dist/src/models/Api/HotelDTO.js.map +1 -1
- package/dist/src/models/BasketRow.d.ts +3 -6
- package/dist/src/models/BasketRow.js +11 -15
- package/dist/src/models/BasketRow.js.map +1 -1
- package/dist/src/models/BookingWizard/BookingWizardProperty.d.ts +4 -0
- package/dist/src/models/BookingWizard/BookingWizardProperty.js.map +1 -1
- package/dist/src/models/Client/Hotel/Hotel.d.ts +4 -0
- package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
- package/dist/src/models/Confirmation.d.ts +1 -2
- package/dist/src/models/Confirmation.js.map +1 -1
- package/dist/src/models/Room/Room.d.ts +7 -0
- package/dist/src/models/Room/Room.js +13 -0
- package/dist/src/models/Room/Room.js.map +1 -1
- package/dist/src/models/Room/RoomRate.js +3 -0
- package/dist/src/models/Room/RoomRate.js.map +1 -1
- package/dist/src/pages/account/Reservations/AccountReservationSinglePage.js.map +1 -1
- package/dist/src/pages/findReservation/FindReservationResults.js +12 -8
- package/dist/src/pages/findReservation/FindReservationResults.js.map +1 -1
- package/dist/src/providers/RoomstayThemeEngine.d.ts +1 -1
- package/dist/src/providers/RoomstayThemeEngine.js +20 -5
- package/dist/src/providers/RoomstayThemeEngine.js.map +1 -1
- package/dist/src/stories/RadioButtonGroup.stories.d.ts +1 -1
- package/dist/src/translations/Translation.d.ts +7 -1
- package/dist/src/translations/Translation.js +7 -1
- package/dist/src/translations/Translation.js.map +1 -1
- package/dist/src/translations/languages/en-gb.js +7 -1
- package/dist/src/translations/languages/en-gb.js.map +1 -1
- package/dist/src/util/Analytics/GoogleAnalytics4.js +27 -12
- package/dist/src/util/Analytics/GoogleAnalytics4.js.map +1 -1
- package/dist/src/util/Analytics/UniversalAnalytics.js +3 -3
- package/dist/src/util/Analytics/UniversalAnalytics.js.map +1 -1
- package/dist/src/util/DataLayer.d.ts +5 -1
- package/dist/src/util/DataLayer.js +9 -2
- package/dist/src/util/DataLayer.js.map +1 -1
- package/dist/src/util/EventsHelper.d.ts +4 -1
- package/dist/src/util/EventsHelper.js +15 -4
- package/dist/src/util/EventsHelper.js.map +1 -1
- package/dist/test.bundle.js +1 -1
- package/dist/tests/offline/entry/config/hotelSpecDefault.js +1 -1
- package/dist/tests/offline/entry/config/hotelSpecDefault.js.map +1 -1
- package/dist/vendors.bundle.js +1 -1
- package/package.json +2 -2
- package/dist/586.bundle.js +0 -1
- package/dist/850.bundle.js +0 -1
|
@@ -35,9 +35,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
35
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
36
|
};
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.BookingWizardContent = void 0;
|
|
38
|
+
exports.BWClearButton = exports.BWPromoCodeSection = exports.BookingWizardContent = void 0;
|
|
39
39
|
require("react-spring-bottom-sheet/dist/style.css");
|
|
40
40
|
const contexts_1 = require("../../../contexts/index.js");
|
|
41
|
+
const ui_1 = require("@roomstay/ui");
|
|
41
42
|
const classnames_1 = __importDefault(require("classnames"));
|
|
42
43
|
const dayjs_1 = __importDefault(require("dayjs"));
|
|
43
44
|
const react_1 = __importStar(require("react"));
|
|
@@ -46,14 +47,15 @@ const AvailabilityAPI_1 = __importDefault(require("../../../api/AvailabilityAPI"
|
|
|
46
47
|
const RoomstayThemeEngine_1 = __importDefault(require("../../../providers/RoomstayThemeEngine"));
|
|
47
48
|
const Translation_1 = require("../../../translations/Translation");
|
|
48
49
|
const BEButton_1 = __importDefault(require("../BEButton"));
|
|
50
|
+
const BookingWizard_1 = require("./BookingWizard");
|
|
49
51
|
const BookingWizard_module_scss_1 = __importDefault(require("./BookingWizard.module.scss"));
|
|
50
52
|
const BookingWizardContext_1 = require("./BookingWizardContext");
|
|
51
53
|
const BookingWizardDateSelector_1 = require("./BookingWizardDateSelector/BookingWizardDateSelector");
|
|
52
54
|
const BookingWizardGuestSelector_1 = require("./BookingWizardGuestSelector/BookingWizardGuestSelector");
|
|
53
55
|
const BookingWizardHotelSelector_1 = require("./BookingWizardHotelSelector/BookingWizardHotelSelector");
|
|
54
56
|
const BookingWizardPromoCode_1 = require("./BookingWizardPromoCode/BookingWizardPromoCode");
|
|
55
|
-
const BookingWizardContent = ({ properties, selectedProperty: defaultProperty, defaultColors, classname, maxAdults, disableChild, showInfants, disableRoom,
|
|
56
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
57
|
+
const BookingWizardContent = ({ properties, selectedProperty: defaultProperty, defaultColors, classname, maxAdults, disableChild, showInfants, disableRoom, defaultValues, dateFormat, }) => {
|
|
58
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
57
59
|
const bwContext = (0, react_1.useContext)(BookingWizardContext_1.BookingWizardContext);
|
|
58
60
|
const beContext = (0, react_1.useContext)(contexts_1.BookingEngineContext);
|
|
59
61
|
const { t } = (0, react_i18next_1.useTranslation)();
|
|
@@ -77,6 +79,7 @@ const BookingWizardContent = ({ properties, selectedProperty: defaultProperty, d
|
|
|
77
79
|
}
|
|
78
80
|
}, [selectedProperty]);
|
|
79
81
|
const engineConfig = beContext.engine.getConfig();
|
|
82
|
+
const guestAgeConfig = engineConfig.guestAgeConfig;
|
|
80
83
|
const yearDisplayOption = (0, react_1.useMemo)(() => {
|
|
81
84
|
var _a, _b;
|
|
82
85
|
return (_b = (_a = selectedProperty === null || selectedProperty === void 0 ? void 0 : selectedProperty.yearDisplayOption) !== null && _a !== void 0 ? _a : engineConfig.yearDisplayOption) !== null && _b !== void 0 ? _b : '';
|
|
@@ -96,13 +99,15 @@ const BookingWizardContent = ({ properties, selectedProperty: defaultProperty, d
|
|
|
96
99
|
setCheckOutDate(endDate);
|
|
97
100
|
};
|
|
98
101
|
const isValid = () => {
|
|
99
|
-
|
|
102
|
+
const isPropertyHidden = bwContext.stateSections[BookingWizard_1.EBookingWizardSection.Property].hidden;
|
|
103
|
+
const isGuestSelectHidden = bwContext.stateSections[BookingWizard_1.EBookingWizardSection.Guest].hidden;
|
|
104
|
+
if (!isPropertyHidden && !selectedProperty)
|
|
100
105
|
return false;
|
|
101
106
|
if (!checkInDate)
|
|
102
107
|
return false;
|
|
103
108
|
if (!checkOutDate)
|
|
104
109
|
return false;
|
|
105
|
-
if (adults + children <= 0)
|
|
110
|
+
if (!isGuestSelectHidden && adults + children <= 0)
|
|
106
111
|
return false;
|
|
107
112
|
return true;
|
|
108
113
|
};
|
|
@@ -131,7 +136,7 @@ const BookingWizardContent = ({ properties, selectedProperty: defaultProperty, d
|
|
|
131
136
|
if (!value) {
|
|
132
137
|
setPromoCodeValid(undefined);
|
|
133
138
|
}
|
|
134
|
-
else if (isValid() && selectedProperty && checkInDate && checkOutDate) {
|
|
139
|
+
else if (isValid() && selectedProperty && (selectedProperty === null || selectedProperty === void 0 ? void 0 : selectedProperty.id) !== 'All' && checkInDate && checkOutDate) {
|
|
135
140
|
const result = yield new AvailabilityAPI_1.default().fetchAvailability({
|
|
136
141
|
fromDate: checkInDate,
|
|
137
142
|
toDate: checkOutDate,
|
|
@@ -152,30 +157,111 @@ const BookingWizardContent = ({ properties, selectedProperty: defaultProperty, d
|
|
|
152
157
|
[BookingWizard_module_scss_1.default['--vertical']]: bwContext.layout === 'button',
|
|
153
158
|
[BookingWizard_module_scss_1.default.inline]: bwContext.type === 'inline',
|
|
154
159
|
}, classname) },
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
160
|
+
react_1.default.createElement(BWPropertySelectorSection, { hidden: bwContext.stateSections[BookingWizard_1.EBookingWizardSection.Property].hidden, inactive: bwContext.stateSections[BookingWizard_1.EBookingWizardSection.Property].inactive, withLabel: !bwContext.isImagesThemeMobile, divider: !bwContext.isImagesThemeMobile, containerRef: hotelContainerRef, setContainerRef: setHotelContainerRef, properties: properties, selectedProperty: selectedProperty, setSelectedProperty: setSelectedProperty, classname: classname, t: t }),
|
|
161
|
+
react_1.default.createElement(BookingWizardDateSelector_1.BookingWizardDateSelector, { hidden: bwContext.stateSections[BookingWizard_1.EBookingWizardSection.Date].hidden, inactive: bwContext.stateSections[BookingWizard_1.EBookingWizardSection.Date].inactive, onChange: setDate, defaultStartDate: checkInDate ? (0, dayjs_1.default)(checkInDate) : undefined, defaultEndDate: checkOutDate ? (0, dayjs_1.default)(checkOutDate) : undefined, dateFormat: dateFormat, showYearOnCalendar: showYearOnCalendar, yearDisplayOption: yearDisplayOption, notes: bwContext.isImagesTheme ? (_j = engineConfig === null || engineConfig === void 0 ? void 0 : engineConfig.notes) === null || _j === void 0 ? void 0 : _j.date : undefined }),
|
|
162
|
+
react_1.default.createElement(BWGuestSelectorSection, { hidden: bwContext.stateSections[BookingWizard_1.EBookingWizardSection.Guest].hidden, inactive: bwContext.stateSections[BookingWizard_1.EBookingWizardSection.Guest].inactive, divider: !bwContext.isImagesThemeMobile, isImagesTheme: bwContext.isImagesTheme, containerRef: guestsContainerRef, setContainerRef: setGuestContainerRef, onChange: setGuest, maxAdults: maxAdults, disableChild: disableChild, showInfants: showInfants, disableRoom: disableRoom, config: guestAgeConfig, notes: bwContext.isImagesTheme ? (_k = engineConfig === null || engineConfig === void 0 ? void 0 : engineConfig.notes) === null || _k === void 0 ? void 0 : _k.guest : undefined, defaultValue: {
|
|
163
|
+
adults: adults,
|
|
164
|
+
children: children,
|
|
165
|
+
room: room,
|
|
166
|
+
infants: infants,
|
|
167
|
+
}, defaultGuestConfig: {
|
|
168
|
+
adults: (_l = defaultValues === null || defaultValues === void 0 ? void 0 : defaultValues.guests) === null || _l === void 0 ? void 0 : _l.adults,
|
|
169
|
+
children: (_m = defaultValues === null || defaultValues === void 0 ? void 0 : defaultValues.guests) === null || _m === void 0 ? void 0 : _m.children,
|
|
170
|
+
room: (_o = defaultValues === null || defaultValues === void 0 ? void 0 : defaultValues.guests) === null || _o === void 0 ? void 0 : _o.room,
|
|
171
|
+
infants: (_p = defaultValues === null || defaultValues === void 0 ? void 0 : defaultValues.guests) === null || _p === void 0 ? void 0 : _p.infants,
|
|
172
|
+
}, promoCodeConfig: {
|
|
173
|
+
divider: false,
|
|
174
|
+
withLabel: true,
|
|
175
|
+
promoCode,
|
|
176
|
+
setPromoCode,
|
|
177
|
+
onChange: _onPromoCodeChange,
|
|
178
|
+
valid: promoCodeValid,
|
|
179
|
+
hideTooltip: engineConfig.hideTooltips,
|
|
180
|
+
}, submitConfig: {
|
|
181
|
+
onSubmit: _onSubmit,
|
|
182
|
+
disabledNext: !isValid(),
|
|
183
|
+
} }),
|
|
184
|
+
react_1.default.createElement(exports.BWPromoCodeSection, { hidden: bwContext.stateSections[BookingWizard_1.EBookingWizardSection.Promo].hidden, inactive: bwContext.stateSections[BookingWizard_1.EBookingWizardSection.Promo].inactive, isImagesTheme: bwContext.isImagesTheme, setPromoCode: setPromoCode, promoCode: promoCode, onChange: _onPromoCodeChange, valid: promoCodeValid, hideTooltip: engineConfig.hideTooltips, t: t, divider: true, withLabel: true }),
|
|
185
|
+
bwContext.layout !== 'horizontal-condensed' && !bwContext.isImagesThemeMobile && react_1.default.createElement(SubmitButtonSection, { button: submitButton })),
|
|
186
|
+
bwContext.layout === 'horizontal-condensed' && !bwContext.isImagesThemeMobile && (react_1.default.createElement("div", { className: (0, classnames_1.default)(BookingWizard_module_scss_1.default.content, classname) },
|
|
187
|
+
react_1.default.createElement("div", { className: (0, classnames_1.default)(BookingWizard_module_scss_1.default.action, BookingWizard_module_scss_1.default.centerItems, 'u-marg-top u-marg-top--light@l-') }, submitButton)))));
|
|
179
188
|
};
|
|
180
189
|
exports.BookingWizardContent = BookingWizardContent;
|
|
190
|
+
const BWPropertySelectorSection = ({ inactive, hidden, containerRef, setContainerRef, properties, selectedProperty, setSelectedProperty, classname, t, divider = true, withLabel = true, }) => {
|
|
191
|
+
if (hidden)
|
|
192
|
+
return null;
|
|
193
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
194
|
+
react_1.default.createElement("div", { ref: setContainerRef, className: (0, classnames_1.default)(BookingWizard_module_scss_1.default.item, BookingWizard_module_scss_1.default['item-hotel'], {
|
|
195
|
+
[BookingWizard_module_scss_1.default['inactive']]: inactive,
|
|
196
|
+
}) },
|
|
197
|
+
react_1.default.createElement("div", { className: (0, classnames_1.default)(BookingWizard_module_scss_1.default['item-ellipsis-wrapper']) },
|
|
198
|
+
withLabel && react_1.default.createElement("label", { className: BookingWizard_module_scss_1.default.label }, t(Translation_1.Translation.Misc.ChooseHotel)),
|
|
199
|
+
react_1.default.createElement(BookingWizardHotelSelector_1.BookingWizardHotelSelector, { followElement: containerRef, onChange: (value) => {
|
|
200
|
+
setSelectedProperty(value || undefined);
|
|
201
|
+
}, properties: properties, selectedProperty: selectedProperty, contentClassName: (0, classnames_1.default)(classname) }))),
|
|
202
|
+
divider ? (react_1.default.createElement("div", { className: (0, classnames_1.default)(BookingWizard_module_scss_1.default.divider, {
|
|
203
|
+
[BookingWizard_module_scss_1.default['inactive']]: inactive,
|
|
204
|
+
}) })) : null));
|
|
205
|
+
};
|
|
206
|
+
const BWGuestSelectorSection = ({ inactive, hidden, containerRef, setContainerRef, defaultValue: _defaultValue, onChange, maxAdults, disableChild, showInfants, disableRoom, config, notes, defaultGuestConfig, divider, promoCodeConfig, submitConfig, isImagesTheme, }) => {
|
|
207
|
+
if (hidden)
|
|
208
|
+
return null;
|
|
209
|
+
const { t } = (0, react_i18next_1.useTranslation)();
|
|
210
|
+
const [isOverlayOpen, setIsOverlayOpen] = (0, react_1.useState)(false);
|
|
211
|
+
const [defaultValue, setDefaultValue] = (0, react_1.useState)(_defaultValue);
|
|
212
|
+
const onOverlayOpenChange = (isOpen) => {
|
|
213
|
+
setIsOverlayOpen(isOpen);
|
|
214
|
+
};
|
|
215
|
+
const onClearHandler = () => {
|
|
216
|
+
const emptyValues = {
|
|
217
|
+
adults: 0,
|
|
218
|
+
children: 0,
|
|
219
|
+
room: 0,
|
|
220
|
+
infants: 0,
|
|
221
|
+
};
|
|
222
|
+
onChange(Object.assign({}, emptyValues));
|
|
223
|
+
setDefaultValue(Object.assign({}, emptyValues));
|
|
224
|
+
};
|
|
225
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
226
|
+
divider ? (react_1.default.createElement("div", { className: (0, classnames_1.default)(BookingWizard_module_scss_1.default.divider, {
|
|
227
|
+
[BookingWizard_module_scss_1.default['inactive']]: inactive,
|
|
228
|
+
}) })) : null,
|
|
229
|
+
react_1.default.createElement("div", { ref: setContainerRef, className: (0, classnames_1.default)(BookingWizard_module_scss_1.default.item, {
|
|
230
|
+
[BookingWizard_module_scss_1.default['inactive']]: inactive,
|
|
231
|
+
}) },
|
|
232
|
+
react_1.default.createElement("div", { className: BookingWizard_module_scss_1.default['item-with-icon'] },
|
|
233
|
+
react_1.default.createElement("div", { className: (0, classnames_1.default)(BookingWizard_module_scss_1.default['item-fullwidth'], BookingWizard_module_scss_1.default['item-ellipsis-wrapper']) },
|
|
234
|
+
react_1.default.createElement("label", { className: BookingWizard_module_scss_1.default.label }, t(Translation_1.Translation.Misc.Guests)),
|
|
235
|
+
react_1.default.createElement(BookingWizardGuestSelector_1.BookingWizardGuestSelector, Object.assign({ defaultValue: defaultValue, onChange: onChange, maxAdults: maxAdults, disableChild: disableChild, showInfants: showInfants, disableRoom: disableRoom, followElement: containerRef }, config, { notes: isImagesTheme ? notes : undefined, onOverlayOpenChange: onOverlayOpenChange, promoCodeConfig: promoCodeConfig, submitConfig: submitConfig }))),
|
|
236
|
+
isImagesTheme && react_1.default.createElement(exports.BWClearButton, { hidden: isOverlayOpen, onClick: onClearHandler })))));
|
|
237
|
+
};
|
|
238
|
+
const BWPromoCodeSection = ({ inactive, hidden, setPromoCode, promoCode, onChange, valid, hideTooltip, t, isImagesTheme, divider = true, withLabel = true, }) => {
|
|
239
|
+
if (hidden)
|
|
240
|
+
return null;
|
|
241
|
+
const onClearHandler = (event) => {
|
|
242
|
+
setPromoCode('');
|
|
243
|
+
event.preventDefault();
|
|
244
|
+
event.stopPropagation();
|
|
245
|
+
};
|
|
246
|
+
const [focused, setFocused] = react_1.default.useState(false);
|
|
247
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
248
|
+
divider ? (react_1.default.createElement("div", { className: (0, classnames_1.default)(BookingWizard_module_scss_1.default.divider, {
|
|
249
|
+
[BookingWizard_module_scss_1.default['inactive']]: inactive,
|
|
250
|
+
}) })) : null,
|
|
251
|
+
react_1.default.createElement("div", { className: (0, classnames_1.default)(BookingWizard_module_scss_1.default.item, BookingWizard_module_scss_1.default['item-promo-code-wrapper'], {
|
|
252
|
+
[BookingWizard_module_scss_1.default['inactive']]: inactive,
|
|
253
|
+
}), onFocus: () => setFocused(true), onBlur: () => setFocused(false) },
|
|
254
|
+
react_1.default.createElement("div", { className: BookingWizard_module_scss_1.default['item-with-icon'] },
|
|
255
|
+
react_1.default.createElement("div", { className: (0, classnames_1.default)(BookingWizard_module_scss_1.default['item-fullwidth'], BookingWizard_module_scss_1.default['item-ellipsis-wrapper']) },
|
|
256
|
+
withLabel && react_1.default.createElement("label", { className: BookingWizard_module_scss_1.default.label }, t(Translation_1.Translation.Misc.Promocode)),
|
|
257
|
+
react_1.default.createElement(BookingWizardPromoCode_1.BookingWizardPromoCode, { promoCode: promoCode, onChange: onChange, valid: valid, hideTooltip: hideTooltip })),
|
|
258
|
+
isImagesTheme && react_1.default.createElement(exports.BWClearButton, { hidden: focused, onClick: onClearHandler })))));
|
|
259
|
+
};
|
|
260
|
+
exports.BWPromoCodeSection = BWPromoCodeSection;
|
|
261
|
+
const SubmitButtonSection = ({ button }) => react_1.default.createElement("div", { className: BookingWizard_module_scss_1.default.action }, button);
|
|
262
|
+
const BWClearButton = ({ hidden, onClick }) => {
|
|
263
|
+
return hidden ? (react_1.default.createElement("div", { onMouseDown: (e) => e.preventDefault(), className: BookingWizard_module_scss_1.default['clear-button'], onClick: onClick },
|
|
264
|
+
react_1.default.createElement(ui_1.Icon, { icon: ui_1.IconType.Close, name: "Clear" }))) : (react_1.default.createElement(react_1.default.Fragment, null));
|
|
265
|
+
};
|
|
266
|
+
exports.BWClearButton = BWClearButton;
|
|
181
267
|
//# sourceMappingURL=BookingWizardContent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BookingWizardContent.js","sourceRoot":"/","sources":["src/components/generic/BookingWizard/BookingWizardContent.tsx"],"names":[],"mappings":"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","sourcesContent":["import 'react-spring-bottom-sheet/dist/style.css';\n\nimport { BookingEngineContext } from '@frontend/contexts';\nimport classNames from 'classnames';\nimport dayjs, { Dayjs } from 'dayjs';\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport AvailabilityAPI from '@/api/AvailabilityAPI';\nimport { BookingWizardEngineConfig } from '@/engines/BookingWizardEngine/BookingWizardEngine';\nimport { BookingWizardProperty } from '@/models/BookingWizard/BookingWizardProperty';\nimport { TBookingWizardProperties } from '@/models/BookingWizard/BookingWizardTypes';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport { Translation } from '@/translations/Translation';\n\nimport BEButton from '../BEButton';\nimport styles from './BookingWizard.module.scss';\nimport { BookingWizardContext, BookingWizardOnBooking } from './BookingWizardContext';\nimport { BookingWizardDateSelector } from './BookingWizardDateSelector/BookingWizardDateSelector';\nimport { BookingWizardGuestSelector } from './BookingWizardGuestSelector/BookingWizardGuestSelector';\nimport { BookingWizardHotelSelector } from './BookingWizardHotelSelector/BookingWizardHotelSelector';\nimport { BookingWizardPromoCode } from './BookingWizardPromoCode/BookingWizardPromoCode';\n\nexport interface BookingWizardContentProps {\n defaultColors: BookingWizardProperty['colors'];\n properties: TBookingWizardProperties;\n selectedProperty?: BookingWizardProperty;\n classname?: string;\n maxAdults?: number;\n disableChild?: boolean;\n showInfants?: boolean;\n disableRoom?: boolean;\n hideGuestSelect?: boolean;\n hidePromocode?: boolean;\n hideProperty?: boolean;\n defaultValues?: Partial<Omit<BookingWizardOnBooking, 'id' | 'checkIn' | 'checkout'>> & { checkIn?: string; checkout?: string };\n dateFormat?: string;\n}\n\nexport const BookingWizardContent: React.FC<BookingWizardContentProps> = ({\n properties,\n selectedProperty: defaultProperty,\n defaultColors,\n classname,\n maxAdults,\n disableChild,\n showInfants,\n disableRoom,\n hideGuestSelect,\n hidePromocode,\n hideProperty,\n defaultValues,\n dateFormat,\n}) => {\n const bwContext = useContext(BookingWizardContext);\n const beContext = useContext(BookingEngineContext);\n\n const { t } = useTranslation();\n\n const [checkInDate, setCheckInDate] = useState<Dayjs | null>(defaultValues?.checkIn ? dayjs(defaultValues?.checkIn) : dayjs());\n const [checkOutDate, setCheckOutDate] = useState<Dayjs | null>(defaultValues?.checkout ? dayjs(defaultValues?.checkout) : dayjs().add(1, 'days'));\n const [adults, setAdults] = useState<number>(defaultValues?.guests?.adults ?? 1);\n const [children, setChildren] = useState<number>(defaultValues?.guests?.children ?? 0);\n const [infants, setInfants] = useState<number>(defaultValues?.guests?.infants ?? 0);\n const [room, setRoom] = useState<number>(defaultValues?.guests?.room ?? 1);\n const [promoCode, setPromoCode] = useState<string>(defaultValues?.promoCode || '');\n const [promoCodeValid, setPromoCodeValid] = useState<boolean>();\n const [selectedProperty, setSelectedProperty] = useState<BookingWizardProperty | undefined>(defaultProperty);\n const [hotelContainerRef, setHotelContainerRef] = useState<HTMLDivElement | null>(null);\n const [guestsContainerRef, setGuestContainerRef] = useState<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (selectedProperty?.colors) {\n RoomstayThemeEngine.changeTheme(selectedProperty.colors);\n } else if (defaultColors) {\n RoomstayThemeEngine.changeTheme(defaultColors);\n }\n }, [selectedProperty]);\n\n const engineConfig = beContext.engine.getConfig() as BookingWizardEngineConfig;\n\n const yearDisplayOption = useMemo(() => {\n return selectedProperty?.yearDisplayOption ?? engineConfig.yearDisplayOption ?? '';\n }, [selectedProperty]);\n\n const showYearOnCalendar = useMemo(() => {\n return !!(selectedProperty?.showYearOnCalendar ?? engineConfig.showYearOnCalendar ?? '');\n }, [selectedProperty]);\n\n const setGuest = (guests: BookingWizardOnBooking['guests']) => {\n setAdults(guests.adults);\n setChildren(guests.children);\n setInfants(guests.infants);\n setRoom(guests.room);\n };\n\n const setDate = (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => {\n setCheckInDate(startDate);\n setCheckOutDate(endDate);\n };\n\n const isValid = () => {\n if (!selectedProperty) return false;\n if (!checkInDate) return false;\n if (!checkOutDate) return false;\n if (adults + children <= 0) return false;\n\n return true;\n };\n\n const _onSubmit = () => {\n if (!isValid()) return false;\n\n // After passing validation, we pass the function up the chain for the engine\n // Implementor to decide where the user should be redirected to\n // This is to give the hotel team a chance to add tracking, or modify the request on their end.\n bwContext.onSubmit?.({\n id: selectedProperty?.id as string,\n checkIn: checkInDate as Dayjs,\n checkout: checkOutDate as Dayjs,\n promoCode,\n guests: {\n adults,\n children,\n infants,\n room,\n },\n });\n };\n\n const _onPromoCodeChange = async (value?: string) => {\n setPromoCode?.(value || '');\n if (!value) {\n setPromoCodeValid(undefined);\n } else if (isValid() && selectedProperty && checkInDate && checkOutDate) {\n const result = await new AvailabilityAPI().fetchAvailability({\n fromDate: checkInDate,\n toDate: checkOutDate,\n adults,\n children,\n infants,\n promoCode: value,\n hotelId: selectedProperty?.id,\n promoOnly: true,\n });\n\n const rate = Object.values(result.ratePlans).find((rate: any) => rate.promoCode === value);\n setPromoCodeValid(!!rate);\n }\n };\n\n const submitButton = (\n <BEButton disabled={!isValid()} className={styles.bookNowBtn} onClick={_onSubmit}>\n {t(Translation.Misc.BookNow)}\n </BEButton>\n );\n\n return (\n <>\n <div\n className={classNames(\n styles.content,\n styles[`--${bwContext.layout}`],\n {\n [styles['--vertical']]: bwContext.layout === 'button',\n [styles.inline]: bwContext.type === 'inline',\n },\n classname\n )}\n >\n {hideProperty ? null : (\n <>\n <div ref={setHotelContainerRef} className={styles.item}>\n <label className={styles.label}>{t(Translation.Misc.ChooseHotel)}</label>\n <BookingWizardHotelSelector\n followElement={hotelContainerRef}\n onChange={(value) => {\n setSelectedProperty(value || undefined);\n }}\n properties={properties}\n selectedProperty={selectedProperty}\n contentClassName={classname}\n />\n </div>\n <div className={styles.divider} />\n </>\n )}\n <BookingWizardDateSelector\n onChange={setDate}\n defaultStartDate={defaultValues?.checkIn ? dayjs(defaultValues?.checkIn) : undefined}\n defaultEndDate={defaultValues?.checkout ? dayjs(defaultValues?.checkout) : undefined}\n dateFormat={dateFormat}\n showYearOnCalendar={showYearOnCalendar}\n yearDisplayOption={yearDisplayOption}\n />\n\n {hideGuestSelect ? null : (\n <>\n <div className={styles.divider} />\n <div ref={setGuestContainerRef} className={styles.item}>\n <label className={styles.label}>{t(Translation.Misc.Guests)}</label>\n <BookingWizardGuestSelector\n defaultValue={{\n adults,\n children,\n room,\n }}\n onChange={setGuest}\n maxAdults={maxAdults}\n disableChild={disableChild}\n showInfants={showInfants}\n disableRoom={disableRoom}\n followElement={guestsContainerRef}\n hideTooltip={engineConfig.hideTooltips}\n />\n </div>\n </>\n )}\n <div className={styles.divider} />\n {hidePromocode || bwContext.layout === 'horizontal-condensed' ? null : (\n <div className={styles.item}>\n <label className={styles.label}>{t(Translation.Misc.Promocode)}</label>\n <BookingWizardPromoCode promoCode={promoCode} onChange={_onPromoCodeChange} valid={promoCodeValid} hideTooltip={engineConfig.hideTooltips} />\n </div>\n )}\n {!(bwContext.layout === 'horizontal-condensed') ? <div className={styles.action}>{submitButton}</div> : null}\n </div>\n\n {bwContext.layout === 'horizontal-condensed' ? (\n <div className={classNames(styles.content, classname)}>\n <div className={classNames(styles.action, styles.centerItems, 'u-marg-top u-marg-top--light@l-')}>{submitButton}</div>\n </div>\n ) : null}\n </>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"BookingWizardContent.js","sourceRoot":"/","sources":["src/components/generic/BookingWizard/BookingWizardContent.tsx"],"names":[],"mappings":"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","sourcesContent":["import 'react-spring-bottom-sheet/dist/style.css';\n\nimport { BookingEngineContext } from '@frontend/contexts';\nimport { Icon, IconType } from '@roomstay/ui';\nimport classNames from 'classnames';\nimport dayjs, { Dayjs } from 'dayjs';\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport AvailabilityAPI from '@/api/AvailabilityAPI';\nimport { BookingWizardEngineConfig } from '@/engines/BookingWizardEngine/BookingWizardEngine';\nimport { BookingWizardProperty } from '@/models/BookingWizard/BookingWizardProperty';\nimport { TBookingWizardProperties } from '@/models/BookingWizard/BookingWizardTypes';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport { Translation } from '@/translations/Translation';\n\nimport BEButton from '../BEButton';\nimport { EBookingWizardSection } from './BookingWizard';\nimport styles from './BookingWizard.module.scss';\nimport { BookingWizardContext, BookingWizardOnBooking } from './BookingWizardContext';\nimport { BookingWizardDateSelector } from './BookingWizardDateSelector/BookingWizardDateSelector';\nimport { BookingWizardGuestSelector, BookingWizardGuestSelectorProps } from './BookingWizardGuestSelector/BookingWizardGuestSelector';\nimport { BookingWizardHotelSelector } from './BookingWizardHotelSelector/BookingWizardHotelSelector';\nimport { BookingWizardPromoCode } from './BookingWizardPromoCode/BookingWizardPromoCode';\n\nexport interface BookingWizardContentProps {\n defaultColors: BookingWizardProperty['colors'];\n properties: TBookingWizardProperties;\n selectedProperty?: BookingWizardProperty;\n classname?: string;\n maxAdults?: number;\n disableChild?: boolean;\n showInfants?: boolean;\n disableRoom?: boolean;\n hideGuestSelect?: boolean;\n hidePromocode?: boolean;\n hideProperty?: boolean;\n defaultValues?: Partial<Omit<BookingWizardOnBooking, 'id' | 'checkIn' | 'checkout'>> & { checkIn?: string; checkout?: string };\n dateFormat?: string;\n}\n\nexport const BookingWizardContent: React.FC<BookingWizardContentProps> = ({\n properties,\n selectedProperty: defaultProperty,\n defaultColors,\n classname,\n maxAdults,\n disableChild,\n showInfants,\n disableRoom,\n defaultValues,\n dateFormat,\n}) => {\n const bwContext = useContext(BookingWizardContext);\n const beContext = useContext(BookingEngineContext);\n\n const { t } = useTranslation();\n\n const [checkInDate, setCheckInDate] = useState<Dayjs | null>(defaultValues?.checkIn ? dayjs(defaultValues?.checkIn) : dayjs());\n const [checkOutDate, setCheckOutDate] = useState<Dayjs | null>(defaultValues?.checkout ? dayjs(defaultValues?.checkout) : dayjs().add(1, 'days'));\n const [adults, setAdults] = useState<number>(defaultValues?.guests?.adults ?? 1);\n const [children, setChildren] = useState<number>(defaultValues?.guests?.children ?? 0);\n const [infants, setInfants] = useState<number>(defaultValues?.guests?.infants ?? 0);\n const [room, setRoom] = useState<number>(defaultValues?.guests?.room ?? 1);\n const [promoCode, setPromoCode] = useState<string>(defaultValues?.promoCode || '');\n const [promoCodeValid, setPromoCodeValid] = useState<boolean>();\n const [selectedProperty, setSelectedProperty] = useState<BookingWizardProperty | undefined>(defaultProperty);\n const [hotelContainerRef, setHotelContainerRef] = useState<HTMLDivElement | null>(null);\n const [guestsContainerRef, setGuestContainerRef] = useState<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (selectedProperty?.colors) {\n RoomstayThemeEngine.changeTheme(selectedProperty.colors);\n } else if (defaultColors) {\n RoomstayThemeEngine.changeTheme(defaultColors);\n }\n }, [selectedProperty]);\n\n const engineConfig = beContext.engine.getConfig() as BookingWizardEngineConfig;\n const guestAgeConfig = engineConfig.guestAgeConfig;\n\n const yearDisplayOption = useMemo(() => {\n return selectedProperty?.yearDisplayOption ?? engineConfig.yearDisplayOption ?? '';\n }, [selectedProperty]);\n\n const showYearOnCalendar = useMemo(() => {\n return !!(selectedProperty?.showYearOnCalendar ?? engineConfig.showYearOnCalendar ?? '');\n }, [selectedProperty]);\n\n const setGuest = (guests: BookingWizardOnBooking['guests']) => {\n setAdults(guests.adults);\n setChildren(guests.children);\n setInfants(guests.infants);\n setRoom(guests.room);\n };\n\n const setDate = (startDate: dayjs.Dayjs | null, endDate: dayjs.Dayjs | null) => {\n setCheckInDate(startDate);\n setCheckOutDate(endDate);\n };\n\n const isValid = () => {\n const isPropertyHidden = bwContext.stateSections[EBookingWizardSection.Property].hidden;\n const isGuestSelectHidden = bwContext.stateSections[EBookingWizardSection.Guest].hidden;\n\n if (!isPropertyHidden && !selectedProperty) return false;\n if (!checkInDate) return false;\n if (!checkOutDate) return false;\n if (!isGuestSelectHidden && adults + children <= 0) return false;\n\n return true;\n };\n\n const _onSubmit = () => {\n if (!isValid()) return false;\n\n // After passing validation, we pass the function up the chain for the engine\n // Implementor to decide where the user should be redirected to\n // This is to give the hotel team a chance to add tracking, or modify the request on their end.\n bwContext.onSubmit?.({\n id: selectedProperty?.id as string,\n checkIn: checkInDate as Dayjs,\n checkout: checkOutDate as Dayjs,\n promoCode,\n guests: {\n adults,\n children,\n infants,\n room,\n },\n });\n };\n\n const _onPromoCodeChange = async (value?: string) => {\n setPromoCode?.(value || '');\n if (!value) {\n setPromoCodeValid(undefined);\n } else if (isValid() && selectedProperty && selectedProperty?.id !== 'All' && checkInDate && checkOutDate) {\n const result = await new AvailabilityAPI().fetchAvailability({\n fromDate: checkInDate,\n toDate: checkOutDate,\n adults,\n children,\n infants,\n promoCode: value,\n hotelId: selectedProperty?.id,\n promoOnly: true,\n });\n\n const rate = Object.values(result.ratePlans).find((rate: any) => rate.promoCode === value);\n setPromoCodeValid(!!rate);\n }\n };\n\n const submitButton = (\n <BEButton disabled={!isValid()} className={styles.bookNowBtn} onClick={_onSubmit}>\n {t(Translation.Misc.BookNow)}\n </BEButton>\n );\n\n return (\n <>\n <div\n className={classNames(\n styles.content,\n styles[`--${bwContext.layout}`],\n {\n [styles['--vertical']]: bwContext.layout === 'button',\n [styles.inline]: bwContext.type === 'inline',\n },\n classname\n )}\n >\n <BWPropertySelectorSection\n hidden={bwContext.stateSections[EBookingWizardSection.Property].hidden}\n inactive={bwContext.stateSections[EBookingWizardSection.Property].inactive}\n withLabel={!bwContext.isImagesThemeMobile}\n divider={!bwContext.isImagesThemeMobile}\n containerRef={hotelContainerRef}\n setContainerRef={setHotelContainerRef}\n properties={properties}\n selectedProperty={selectedProperty}\n setSelectedProperty={setSelectedProperty}\n classname={classname}\n t={t}\n />\n\n <BookingWizardDateSelector\n hidden={bwContext.stateSections[EBookingWizardSection.Date].hidden}\n inactive={bwContext.stateSections[EBookingWizardSection.Date].inactive}\n onChange={setDate}\n defaultStartDate={checkInDate ? dayjs(checkInDate) : undefined}\n defaultEndDate={checkOutDate ? dayjs(checkOutDate) : undefined}\n dateFormat={dateFormat}\n showYearOnCalendar={showYearOnCalendar}\n yearDisplayOption={yearDisplayOption}\n notes={bwContext.isImagesTheme ? engineConfig?.notes?.date : undefined}\n />\n\n <BWGuestSelectorSection\n hidden={bwContext.stateSections[EBookingWizardSection.Guest].hidden}\n inactive={bwContext.stateSections[EBookingWizardSection.Guest].inactive}\n divider={!bwContext.isImagesThemeMobile}\n isImagesTheme={bwContext.isImagesTheme}\n containerRef={guestsContainerRef}\n setContainerRef={setGuestContainerRef}\n onChange={setGuest}\n maxAdults={maxAdults}\n disableChild={disableChild}\n showInfants={showInfants}\n disableRoom={disableRoom}\n config={guestAgeConfig}\n notes={bwContext.isImagesTheme ? engineConfig?.notes?.guest : undefined}\n defaultValue={{\n adults: adults,\n children: children,\n room: room,\n infants: infants,\n }}\n defaultGuestConfig={{\n adults: defaultValues?.guests?.adults,\n children: defaultValues?.guests?.children,\n room: defaultValues?.guests?.room,\n infants: defaultValues?.guests?.infants,\n }}\n promoCodeConfig={{\n divider: false,\n withLabel: true,\n promoCode,\n setPromoCode,\n onChange: _onPromoCodeChange,\n valid: promoCodeValid,\n hideTooltip: engineConfig.hideTooltips,\n }}\n submitConfig={{\n onSubmit: _onSubmit,\n disabledNext: !isValid(),\n }}\n />\n\n <BWPromoCodeSection\n hidden={bwContext.stateSections[EBookingWizardSection.Promo].hidden}\n inactive={bwContext.stateSections[EBookingWizardSection.Promo].inactive}\n isImagesTheme={bwContext.isImagesTheme}\n setPromoCode={setPromoCode}\n promoCode={promoCode}\n onChange={_onPromoCodeChange}\n valid={promoCodeValid}\n hideTooltip={engineConfig.hideTooltips}\n t={t}\n divider\n withLabel\n />\n\n {bwContext.layout !== 'horizontal-condensed' && !bwContext.isImagesThemeMobile && <SubmitButtonSection button={submitButton} />}\n </div>\n\n {bwContext.layout === 'horizontal-condensed' && !bwContext.isImagesThemeMobile && (\n <div className={classNames(styles.content, classname)}>\n <div className={classNames(styles.action, styles.centerItems, 'u-marg-top u-marg-top--light@l-')}>{submitButton}</div>\n </div>\n )}\n </>\n );\n};\n\nconst BWPropertySelectorSection = ({\n inactive,\n hidden,\n containerRef,\n setContainerRef,\n properties,\n selectedProperty,\n setSelectedProperty,\n classname,\n t,\n divider = true,\n withLabel = true,\n}: BWPropertySelectorSectionProps) => {\n if (hidden) return null;\n return (\n <>\n <div\n ref={setContainerRef}\n className={classNames(styles.item, styles['item-hotel'], {\n [styles['inactive']]: inactive,\n })}\n >\n <div className={classNames(styles['item-ellipsis-wrapper'])}>\n {withLabel && <label className={styles.label}>{t(Translation.Misc.ChooseHotel)}</label>}\n <BookingWizardHotelSelector\n followElement={containerRef}\n onChange={(value) => {\n setSelectedProperty(value || undefined);\n }}\n properties={properties}\n selectedProperty={selectedProperty}\n contentClassName={classNames(classname)}\n />\n </div>\n </div>\n {divider ? (\n <div\n className={classNames(styles.divider, {\n [styles['inactive']]: inactive,\n })}\n />\n ) : null}\n </>\n );\n};\n\nconst BWGuestSelectorSection = ({\n inactive,\n hidden,\n containerRef,\n setContainerRef,\n defaultValue: _defaultValue,\n onChange,\n maxAdults,\n disableChild,\n showInfants,\n disableRoom,\n config,\n notes,\n defaultGuestConfig,\n divider,\n promoCodeConfig,\n submitConfig,\n isImagesTheme,\n}: BWGuestSelectorSectionProps) => {\n if (hidden) return null;\n const { t } = useTranslation();\n const [isOverlayOpen, setIsOverlayOpen] = useState<boolean>(false);\n const [defaultValue, setDefaultValue] = useState<BookingWizardGuestSelectorProps['defaultValue']>(_defaultValue);\n\n const onOverlayOpenChange = (isOpen: boolean) => {\n setIsOverlayOpen(isOpen);\n };\n const onClearHandler = () => {\n const emptyValues: BookingWizardOnBooking['guests'] = {\n adults: 0,\n children: 0,\n room: 0,\n infants: 0,\n };\n onChange({ ...emptyValues });\n setDefaultValue({ ...emptyValues });\n };\n\n return (\n <>\n {divider ? (\n <div\n className={classNames(styles.divider, {\n [styles['inactive']]: inactive,\n })}\n />\n ) : null}\n <div\n ref={setContainerRef}\n className={classNames(styles.item, {\n [styles['inactive']]: inactive,\n })}\n >\n <div className={styles['item-with-icon']}>\n <div className={classNames(styles['item-fullwidth'], styles['item-ellipsis-wrapper'])}>\n <label className={styles.label}>{t(Translation.Misc.Guests)}</label>\n <BookingWizardGuestSelector\n defaultValue={defaultValue}\n onChange={onChange}\n maxAdults={maxAdults}\n disableChild={disableChild}\n showInfants={showInfants}\n disableRoom={disableRoom}\n followElement={containerRef}\n {...config}\n notes={isImagesTheme ? notes : undefined}\n onOverlayOpenChange={onOverlayOpenChange}\n promoCodeConfig={promoCodeConfig}\n submitConfig={submitConfig}\n />\n </div>\n {isImagesTheme && <BWClearButton hidden={isOverlayOpen} onClick={onClearHandler} />}\n </div>\n </div>\n </>\n );\n};\n\nexport const BWPromoCodeSection = ({\n inactive,\n hidden,\n setPromoCode,\n promoCode,\n onChange,\n valid,\n hideTooltip,\n t,\n isImagesTheme,\n divider = true,\n withLabel = true,\n}: BWPromoCodeSectionProps) => {\n if (hidden) return null;\n const onClearHandler = (event: MouseEvent) => {\n setPromoCode('');\n event.preventDefault();\n event.stopPropagation();\n };\n const [focused, setFocused] = React.useState<boolean>(false);\n return (\n <>\n {divider ? (\n <div\n className={classNames(styles.divider, {\n [styles['inactive']]: inactive,\n })}\n />\n ) : null}\n <div\n className={classNames(styles.item, styles['item-promo-code-wrapper'], {\n [styles['inactive']]: inactive,\n })}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n >\n <div className={styles['item-with-icon']}>\n <div className={classNames(styles['item-fullwidth'], styles['item-ellipsis-wrapper'])}>\n {withLabel && <label className={styles.label}>{t(Translation.Misc.Promocode)}</label>}\n <BookingWizardPromoCode promoCode={promoCode} onChange={onChange} valid={valid} hideTooltip={hideTooltip} />\n </div>\n\n {isImagesTheme && <BWClearButton hidden={focused} onClick={onClearHandler} />}\n </div>\n </div>\n </>\n );\n};\n\nconst SubmitButtonSection = ({ button }: { button: React.ReactNode }) => <div className={styles.action}>{button}</div>;\n\nexport const BWClearButton = ({ hidden, onClick }: { hidden: boolean; onClick: any }) => {\n return hidden ? (\n <div onMouseDown={(e) => e.preventDefault()} className={styles['clear-button']} onClick={onClick}>\n {/* Add onMouseDown to Prevent blur when clicking this button */}\n <Icon icon={IconType.Close} name=\"Clear\" />\n </div>\n ) : (\n <></>\n );\n};\n\n// Interface\ninterface GuestValue {\n adults?: number;\n children?: number;\n infants?: number;\n room?: number;\n}\n\ninterface GuestAgeConfig {\n minAdultAge?: number;\n maxAdultAge?: number;\n ageRange?: {\n child?: { min?: number; max?: number };\n infant?: { min?: number; max?: number };\n };\n}\ninterface BWGuestSelectorSectionProps {\n hidden?: boolean;\n inactive?: boolean;\n isImagesTheme?: boolean;\n containerRef?: HTMLDivElement | null;\n setContainerRef?: React.Dispatch<React.SetStateAction<HTMLDivElement | null>>;\n onChange: (guests: BookingWizardOnBooking['guests']) => void;\n maxAdults?: number | undefined;\n disableChild?: boolean;\n showInfants?: boolean;\n disableRoom?: boolean;\n config?: GuestAgeConfig;\n notes?: React.ReactNode | undefined;\n defaultValue?: GuestValue;\n defaultGuestConfig?: GuestValue;\n divider: boolean;\n promoCodeConfig?: BookingWizardGuestSelectorProps['promoCodeConfig'];\n submitConfig?: BookingWizardGuestSelectorProps['submitConfig'];\n}\ninterface BWPromoCodeSectionProps {\n inactive: boolean;\n hidden: boolean;\n setPromoCode: React.Dispatch<React.SetStateAction<string>>;\n promoCode: string;\n onChange: (value?: string) => Promise<void>;\n valid?: boolean;\n hideTooltip?: boolean;\n t: (key: string) => string;\n isImagesTheme: boolean;\n divider: boolean;\n withLabel: boolean;\n}\ninterface BWPropertySelectorSectionProps {\n inactive?: boolean;\n hidden?: boolean;\n containerRef?: HTMLDivElement | null;\n setContainerRef?: React.Dispatch<React.SetStateAction<HTMLDivElement | null>>;\n properties: TBookingWizardProperties;\n selectedProperty?: BookingWizardProperty | undefined;\n setSelectedProperty: React.Dispatch<React.SetStateAction<BookingWizardProperty | undefined>>;\n classname?: string;\n t: (key: string) => string;\n divider?: boolean;\n withLabel?: boolean;\n}\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import type { Placement } from '@popperjs/core';
|
|
3
3
|
import dayjs from 'dayjs';
|
|
4
4
|
import type ColorProfile from '../../../models/Client/Hotel/ColorProfile';
|
|
5
|
-
import { EBookingWizardTheme } from './BookingWizard';
|
|
5
|
+
import { EBookingWizardSection, EBookingWizardTheme } from './BookingWizard';
|
|
6
6
|
export type BookingWizardLayout = 'vertical' | 'horizontal' | 'button' | 'horizontal-condensed' | 'booking-summary';
|
|
7
7
|
export type BookingWizardOverlayType = 'popup' | 'inline' | 'bottom-sheet' | 'top-sheet';
|
|
8
8
|
export type BookingWizardTheme = EBookingWizardTheme;
|
|
@@ -34,6 +34,17 @@ export interface BookingWizardContextType {
|
|
|
34
34
|
fallbackPlacements?: Placement;
|
|
35
35
|
dateOffset?: [number, number];
|
|
36
36
|
};
|
|
37
|
+
isImagesTheme: boolean;
|
|
38
|
+
isImagesThemeMobile: boolean;
|
|
39
|
+
activeSection: EBookingWizardSection | null;
|
|
40
|
+
onNextHandler: (currentSection: EBookingWizardSection) => void;
|
|
41
|
+
onPrevHandler: (currentSection: EBookingWizardSection) => void;
|
|
42
|
+
stateSections: Record<EBookingWizardSection, {
|
|
43
|
+
opening: boolean;
|
|
44
|
+
isFirst: boolean;
|
|
45
|
+
hidden: boolean;
|
|
46
|
+
inactive: boolean;
|
|
47
|
+
}>;
|
|
37
48
|
}
|
|
38
49
|
export declare const BookingWizardContext: import("react").Context<BookingWizardContextType>;
|
|
39
50
|
export declare const useBookingWizard: () => BookingWizardContextType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BookingWizardContext.js","sourceRoot":"/","sources":["src/components/generic/BookingWizard/BookingWizardContext.ts"],"names":[],"mappings":";;;AAEA,iCAAkD;
|
|
1
|
+
{"version":3,"file":"BookingWizardContext.js","sourceRoot":"/","sources":["src/components/generic/BookingWizard/BookingWizardContext.ts"],"names":[],"mappings":";;;AAEA,iCAAkD;AAyDrC,QAAA,oBAAoB,GAAG,IAAA,qBAAa,EAA2B,EAA8B,CAAC,CAAC;AAErG,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,IAAA,kBAAU,EAAC,4BAAoB,CAAC,CAAC;AAA1D,QAAA,gBAAgB,oBAA0C","sourcesContent":["import type { Placement } from '@popperjs/core';\nimport dayjs from 'dayjs';\nimport { createContext, useContext } from 'react';\n\nimport type ColorProfile from '@/models/Client/Hotel/ColorProfile';\n\nimport { EBookingWizardSection, EBookingWizardTheme } from './BookingWizard';\n\nexport type BookingWizardLayout = 'vertical' | 'horizontal' | 'button' | 'horizontal-condensed' | 'booking-summary';\nexport type BookingWizardOverlayType = 'popup' | 'inline' | 'bottom-sheet' | 'top-sheet';\nexport type BookingWizardTheme = EBookingWizardTheme;\n\nexport interface BookingWizardOnBooking {\n id: string;\n checkIn: dayjs.Dayjs;\n checkout: dayjs.Dayjs;\n promoCode?: string;\n guests: {\n adults: number;\n children: number;\n infants: number;\n room: number;\n };\n}\n\nexport interface BookingWizardContextType {\n layout: BookingWizardLayout;\n type: BookingWizardOverlayType;\n theme: BookingWizardTheme;\n className?: string;\n style?: any;\n color?: ColorProfile;\n isMobile?: boolean;\n isSmallContainer?: boolean;\n\n onSubmit?: (result: BookingWizardOnBooking) => void;\n\n overlay?: {\n offset?: [number, number];\n placement?: Placement;\n fallbackPlacements?: Placement;\n dateOffset?: [number, number];\n };\n isImagesTheme: boolean;\n isImagesThemeMobile: boolean;\n activeSection: EBookingWizardSection | null; // Currently active section in the wizard\n onNextHandler: (currentSection: EBookingWizardSection) => void; // Called when proceeding to the next section\n onPrevHandler: (currentSection: EBookingWizardSection) => void; // Called when returning to the previous section\n stateSections: Record<\n EBookingWizardSection,\n {\n opening: boolean; // Indicates if the section is currently expanding/animating\n isFirst: boolean; // Marks the first enabled/available section in the flow\n hidden: boolean; // Whether the section is excluded (unsupported/disabled)\n inactive: boolean; // Whether the section is currently inactive (not rendered/visible)\n }\n >;\n}\n\nexport const BookingWizardContext = createContext<BookingWizardContextType>({} as BookingWizardContextType);\n\nexport const useBookingWizard = () => useContext(BookingWizardContext);\n"]}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import dayjs from 'dayjs';
|
|
2
|
-
import React from 'react';
|
|
2
|
+
import React, { ReactNode } from 'react';
|
|
3
3
|
import { ShowYearOnCalendarProps } from '../../../../models/Api/HotelOverrideDTO';
|
|
4
4
|
export interface BookingWizardDateSelectorProps extends ShowYearOnCalendarProps {
|
|
5
5
|
open?: boolean;
|
|
6
6
|
defaultStartDate?: dayjs.Dayjs;
|
|
7
7
|
defaultEndDate?: dayjs.Dayjs;
|
|
8
8
|
dateFormat?: string;
|
|
9
|
-
onChange?: (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => void;
|
|
9
|
+
onChange?: (startDate: dayjs.Dayjs | null, endDate: dayjs.Dayjs | null) => void;
|
|
10
|
+
notes?: ReactNode;
|
|
11
|
+
divider?: boolean;
|
|
12
|
+
hidden?: boolean;
|
|
13
|
+
inactive?: boolean;
|
|
10
14
|
}
|
|
11
15
|
export declare const BookingWizardDateSelector: React.FC<BookingWizardDateSelectorProps>;
|