@roomstay/frontend 2.6.77 → 2.6.79-0
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/430.bundle.js +1 -1
- package/dist/456.bundle.js +1 -0
- package/dist/537.bundle.js +1 -1
- package/dist/977.bundle.js +1 -0
- package/dist/978.bundle.js +1 -1
- package/dist/main.bundle.js +1 -1
- package/dist/src/api/BookingAPI.d.ts +2 -0
- package/dist/src/api/BookingAPI.js +2 -0
- package/dist/src/api/BookingAPI.js.map +1 -1
- package/dist/src/api/HotelAPI.d.ts +2 -0
- package/dist/src/api/HotelAPI.js +7 -0
- package/dist/src/api/HotelAPI.js.map +1 -1
- package/dist/src/api/ReservationAPI.js +12 -9
- package/dist/src/api/ReservationAPI.js.map +1 -1
- package/dist/src/api/TrueRewardsAPI.d.ts +4 -0
- package/dist/src/api/TrueRewardsAPI.js +37 -0
- package/dist/src/api/TrueRewardsAPI.js.map +1 -0
- package/dist/src/components/generic/BookingWizard/BookingWizard.d.ts +1 -0
- package/dist/src/components/generic/BookingWizard/BookingWizard.js +7 -1
- package/dist/src/components/generic/BookingWizard/BookingWizard.js.map +1 -1
- package/dist/src/components/generic/BookingWizard/BookingWizardBottomSheet/BookingWizardBottomSheet.js +0 -1
- package/dist/src/components/generic/BookingWizard/BookingWizardBottomSheet/BookingWizardBottomSheet.js.map +1 -1
- package/dist/src/components/generic/BookingWizard/BookingWizardContent.d.ts +13 -4
- package/dist/src/components/generic/BookingWizard/BookingWizardContent.js +24 -10
- package/dist/src/components/generic/BookingWizard/BookingWizardContent.js.map +1 -1
- package/dist/src/components/generic/BookingWizard/BookingWizardDateSelector/BookingWizardDateSelector.js +1 -1
- package/dist/src/components/generic/BookingWizard/BookingWizardDateSelector/BookingWizardDateSelector.js.map +1 -1
- package/dist/src/components/generic/BookingWizard/BookingWizardHotelSelector/BookingWizardHotelSelector.d.ts +9 -1
- package/dist/src/components/generic/BookingWizard/BookingWizardHotelSelector/BookingWizardHotelSelector.js +187 -22
- package/dist/src/components/generic/BookingWizard/BookingWizardHotelSelector/BookingWizardHotelSelector.js.map +1 -1
- package/dist/src/components/generic/Event/EventCard.js +16 -8
- package/dist/src/components/generic/Event/EventCard.js.map +1 -1
- package/dist/src/components/generic/Event/EventCarousel.js +3 -1
- package/dist/src/components/generic/Event/EventCarousel.js.map +1 -1
- package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.js +9 -2
- package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.js.map +1 -1
- package/dist/src/components/generic/Select/Select.d.ts +2 -1
- package/dist/src/components/generic/Select/Select.js +2 -2
- package/dist/src/components/generic/Select/Select.js.map +1 -1
- package/dist/src/components/steps/confirmation/StepConfirmationAcknowledgement.js +11 -10
- package/dist/src/components/steps/confirmation/StepConfirmationAcknowledgement.js.map +1 -1
- package/dist/src/components/steps/confirmation/StepConfirmationForm.js +11 -4
- package/dist/src/components/steps/confirmation/StepConfirmationForm.js.map +1 -1
- package/dist/src/components/steps/confirmation/StepConfirmationImportantInformation.d.ts +7 -0
- package/dist/src/components/steps/confirmation/StepConfirmationImportantInformation.js +54 -0
- package/dist/src/components/steps/confirmation/StepConfirmationImportantInformation.js.map +1 -0
- package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsLabel.d.ts +2 -0
- package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsLabel.js +53 -0
- package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsLabel.js.map +1 -0
- package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.d.ts +2 -0
- package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.js +115 -0
- package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.js.map +1 -0
- package/dist/src/components/steps/room/AvailableUpgradesModal.js +0 -5
- package/dist/src/components/steps/room/AvailableUpgradesModal.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.js +2 -2
- package/dist/src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.js.map +1 -1
- package/dist/src/components/summary/BESummaryRoomRow.js +1 -1
- package/dist/src/components/summary/BESummaryRoomRow.js.map +1 -1
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js +63 -11
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +3 -1
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +5 -2
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
- package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js +10 -2
- package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js.map +1 -1
- package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.d.ts +7 -0
- package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.js.map +1 -1
- package/dist/src/engines/BookingWizardEngine/BookingWizardEngineElement.js +1 -0
- package/dist/src/engines/BookingWizardEngine/BookingWizardEngineElement.js.map +1 -1
- package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js +3 -0
- package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js.map +1 -1
- package/dist/src/handlers/payment/TrueRewardsPaymentHandler.d.ts +2 -0
- package/dist/src/handlers/payment/TrueRewardsPaymentHandler.js +44 -0
- package/dist/src/handlers/payment/TrueRewardsPaymentHandler.js.map +1 -0
- package/dist/src/hooks/RoomRateAvailabilityListFromApi.js +1 -0
- package/dist/src/hooks/RoomRateAvailabilityListFromApi.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +4 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/models/Api/HotelDTO.d.ts +1 -0
- package/dist/src/models/Api/HotelDTO.js.map +1 -1
- package/dist/src/models/BasketRow.d.ts +2 -1
- package/dist/src/models/BasketRow.js +32 -2
- package/dist/src/models/BasketRow.js.map +1 -1
- package/dist/src/models/BookingWizard/BookingWizardProperty.d.ts +13 -0
- package/dist/src/models/BookingWizard/BookingWizardProperty.js.map +1 -1
- package/dist/src/models/Client/Hotel/Hotel.d.ts +1 -0
- package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
- package/dist/src/models/RoomstaySession.d.ts +1 -0
- package/dist/src/models/RoomstaySession.js.map +1 -1
- package/dist/src/providers/FeatureProvider.js +2 -0
- package/dist/src/providers/FeatureProvider.js.map +1 -1
- package/dist/src/providers/feature/ConfirmationImportantInformationFeature.d.ts +10 -0
- package/dist/src/providers/feature/ConfirmationImportantInformationFeature.js +13 -0
- package/dist/src/providers/feature/ConfirmationImportantInformationFeature.js.map +1 -0
- package/dist/src/providers/feature/Feature.d.ts +2 -0
- package/dist/src/providers/feature/Feature.js +4 -0
- package/dist/src/providers/feature/Feature.js.map +1 -1
- package/dist/src/providers/storage/SessionProvider.js +2 -0
- package/dist/src/providers/storage/SessionProvider.js.map +1 -1
- package/dist/src/translations/Translation.d.ts +20 -0
- package/dist/src/translations/Translation.js +20 -0
- package/dist/src/translations/Translation.js.map +1 -1
- package/dist/src/translations/languages/en-gb.js +20 -0
- package/dist/src/translations/languages/en-gb.js.map +1 -1
- package/dist/src/util/TotalCalculator.js.map +1 -1
- package/dist/test.bundle.js +1 -1
- package/dist/vendors.bundle.js +1 -1
- package/package.json +3 -3
- package/dist/659.bundle.js +0 -1
- package/dist/984.bundle.js +0 -1
|
@@ -22,6 +22,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
25
34
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
36
|
};
|
|
@@ -32,6 +41,7 @@ const classnames_1 = __importDefault(require("classnames"));
|
|
|
32
41
|
const react_1 = __importStar(require("react"));
|
|
33
42
|
const react_i18next_1 = require("react-i18next");
|
|
34
43
|
const AutoAutoHeight_1 = __importDefault(require("../../../../animations/AutoAutoHeight"));
|
|
44
|
+
const BookingAPI_1 = __importDefault(require("../../../../api/BookingAPI"));
|
|
35
45
|
const Text_1 = __importStar(require("../../Text"));
|
|
36
46
|
const Translation_1 = require("../../../../translations/Translation");
|
|
37
47
|
const Color_1 = require("../../../../util/Color");
|
|
@@ -39,6 +49,7 @@ const Select_1 = require("../../Select/Select");
|
|
|
39
49
|
const BookingWizard_1 = require("../BookingWizard");
|
|
40
50
|
const BookingWizard_module_scss_1 = __importDefault(require("../BookingWizard.module.scss"));
|
|
41
51
|
const BookingWizardBottomSheet_1 = __importStar(require("../BookingWizardBottomSheet/BookingWizardBottomSheet"));
|
|
52
|
+
const BookingWizardContent_1 = require("../BookingWizardContent");
|
|
42
53
|
const BookingWizardContext_1 = require("../BookingWizardContext");
|
|
43
54
|
const BookingWizardHotelSelector_module_scss_1 = __importDefault(require("./BookingWizardHotelSelector.module.scss"));
|
|
44
55
|
const BookingWizardHotelSelector = (props) => {
|
|
@@ -46,17 +57,127 @@ const BookingWizardHotelSelector = (props) => {
|
|
|
46
57
|
const { t } = (0, react_i18next_1.useTranslation)();
|
|
47
58
|
const [open, setOpen] = (0, react_1.useState)(false);
|
|
48
59
|
const [isOnlyProperty, setIsOnlyProperty] = (0, react_1.useState)(false);
|
|
49
|
-
const
|
|
60
|
+
const [finalProperties, setFinalProperties] = (0, react_1.useState)({});
|
|
61
|
+
const { selectedProperty, properties, contentClassName, followElement, searchConfig } = props;
|
|
62
|
+
const unGrouped = t(Translation_1.Translation.Misc.Ungrouped);
|
|
50
63
|
(0, react_1.useEffect)(() => {
|
|
51
64
|
if (stateSections && stateSections[BookingWizard_1.EBookingWizardSection.Property]) {
|
|
52
65
|
setOpen(stateSections[BookingWizard_1.EBookingWizardSection.Property].opening);
|
|
53
66
|
}
|
|
54
67
|
}, [stateSections]);
|
|
68
|
+
function getBookingWizardRegions(properties) {
|
|
69
|
+
return Array.from(new Set(properties.map((p) => p.bookingWizardRegion)));
|
|
70
|
+
}
|
|
71
|
+
const combineAddress = (address) => {
|
|
72
|
+
if (searchConfig === null || searchConfig === void 0 ? void 0 : searchConfig.combineAddress) {
|
|
73
|
+
return searchConfig.combineAddress(address);
|
|
74
|
+
}
|
|
75
|
+
const format = (vals) => vals.filter((v) => v && v !== '0').join(', ');
|
|
76
|
+
return [format([address === null || address === void 0 ? void 0 : address.line1, address === null || address === void 0 ? void 0 : address.city]), format([address === null || address === void 0 ? void 0 : address.postalCode, address === null || address === void 0 ? void 0 : address.state])].filter(Boolean).join(', ');
|
|
77
|
+
};
|
|
78
|
+
const fetchPropertyData = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
79
|
+
if (!(searchConfig === null || searchConfig === void 0 ? void 0 : searchConfig.companyId)) {
|
|
80
|
+
setFinalProperties(properties);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const fetchedData = yield BookingAPI_1.default.Hotel.fetchBookingWizardData(searchConfig.companyId);
|
|
84
|
+
const regions = getBookingWizardRegions(fetchedData);
|
|
85
|
+
let tmpFinalProperties = {};
|
|
86
|
+
if (regions.length > 1) {
|
|
87
|
+
// Build lookup for client properties
|
|
88
|
+
const clientMap = Object.fromEntries(Object.values(properties)
|
|
89
|
+
.flat()
|
|
90
|
+
.map((p) => [p.id, p]));
|
|
91
|
+
// Group by API-provided regions
|
|
92
|
+
for (const region of regions) {
|
|
93
|
+
const matches = fetchedData
|
|
94
|
+
.filter((fp) => fp.bookingWizardRegion === region)
|
|
95
|
+
.map((fp) => {
|
|
96
|
+
var _a;
|
|
97
|
+
const clientProp = clientMap[fp.id];
|
|
98
|
+
if (!clientProp)
|
|
99
|
+
return null;
|
|
100
|
+
return Object.assign(Object.assign({}, clientProp), { name: fp.name, address: fp.address, card: {
|
|
101
|
+
image: ((_a = clientProp.card) === null || _a === void 0 ? void 0 : _a.image) || fp.logo,
|
|
102
|
+
text: combineAddress(fp.address),
|
|
103
|
+
} });
|
|
104
|
+
})
|
|
105
|
+
.filter(Boolean);
|
|
106
|
+
if (matches.length > 0) {
|
|
107
|
+
tmpFinalProperties[region || unGrouped] = matches;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
const fetchedDataMap = Object.fromEntries(fetchedData.map((p) => [p.id, p]));
|
|
113
|
+
// Fallback: enrich clientProperties with address
|
|
114
|
+
for (const [region, hotels] of Object.entries(properties)) {
|
|
115
|
+
tmpFinalProperties[region] = hotels.map((hotel) => {
|
|
116
|
+
var _a, _b, _c;
|
|
117
|
+
return (Object.assign(Object.assign({}, hotel), { address: (_a = fetchedDataMap[hotel.id]) === null || _a === void 0 ? void 0 : _a.address, card: {
|
|
118
|
+
image: (_b = hotel.card) === null || _b === void 0 ? void 0 : _b.image,
|
|
119
|
+
text: combineAddress((_c = fetchedDataMap[hotel.id]) === null || _c === void 0 ? void 0 : _c.address),
|
|
120
|
+
} }));
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (searchConfig === null || searchConfig === void 0 ? void 0 : searchConfig.sortCompareFn) {
|
|
125
|
+
// Use custom comparator
|
|
126
|
+
tmpFinalProperties = Object.fromEntries(Object.entries(tmpFinalProperties)
|
|
127
|
+
.sort(([a], [b]) => searchConfig.sortCompareFn(a, b)) // Sort regions
|
|
128
|
+
.map(([region, props]) => [region, props.sort((p1, p2) => searchConfig.sortCompareFn(p1, p2))]) // Sort properties
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
// Default: Sort regions alphabetically, move unGrouped to the end,
|
|
133
|
+
// and also sort properties by name inside each region
|
|
134
|
+
tmpFinalProperties = Object.fromEntries(Object.entries(tmpFinalProperties)
|
|
135
|
+
.sort(([a], [b]) => {
|
|
136
|
+
if (a === unGrouped)
|
|
137
|
+
return 1;
|
|
138
|
+
if (b === unGrouped)
|
|
139
|
+
return -1;
|
|
140
|
+
return a.localeCompare(b);
|
|
141
|
+
})
|
|
142
|
+
.map(([region, props]) => [region, props.sort((p1, p2) => p1.name.localeCompare(p2.name))]));
|
|
143
|
+
}
|
|
144
|
+
setFinalProperties(tmpFinalProperties);
|
|
145
|
+
});
|
|
146
|
+
(0, react_1.useEffect)(() => {
|
|
147
|
+
fetchPropertyData();
|
|
148
|
+
}, [searchConfig === null || searchConfig === void 0 ? void 0 : searchConfig.companyId]);
|
|
149
|
+
const searchFilter = (bwProperties, searchQuery) => {
|
|
150
|
+
var _a, _b;
|
|
151
|
+
if (searchConfig === null || searchConfig === void 0 ? void 0 : searchConfig.searchFilter) {
|
|
152
|
+
// Use custom search
|
|
153
|
+
return searchConfig.searchFilter(bwProperties, searchQuery);
|
|
154
|
+
}
|
|
155
|
+
// Default search
|
|
156
|
+
const query = ((_a = searchQuery === null || searchQuery === void 0 ? void 0 : searchQuery.trim()) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || '';
|
|
157
|
+
if (!query || (query && selectedProperty && query === ((_b = selectedProperty === null || selectedProperty === void 0 ? void 0 : selectedProperty.name) === null || _b === void 0 ? void 0 : _b.toLowerCase()))) {
|
|
158
|
+
return bwProperties;
|
|
159
|
+
}
|
|
160
|
+
const filtered = {};
|
|
161
|
+
for (const [region, hotels] of Object.entries(bwProperties)) {
|
|
162
|
+
const matches = hotels.filter((hotel) => {
|
|
163
|
+
if (!hotel)
|
|
164
|
+
return false;
|
|
165
|
+
const { city = '', state = '' } = (hotel === null || hotel === void 0 ? void 0 : hotel.address) || {};
|
|
166
|
+
const keywords = [hotel.name, region, city, state].filter(Boolean).map((kw) => kw.toLowerCase());
|
|
167
|
+
return keywords.some((kw) => kw.includes(query));
|
|
168
|
+
});
|
|
169
|
+
if (matches.length > 0) {
|
|
170
|
+
filtered[region] = matches;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return filtered;
|
|
174
|
+
};
|
|
55
175
|
const optionedProperties = (0, react_1.useMemo)(() => {
|
|
56
176
|
let isOnly = false;
|
|
57
177
|
const options = [];
|
|
178
|
+
const filteredProperties = searchFilter(finalProperties, searchConfig === null || searchConfig === void 0 ? void 0 : searchConfig.searchQuery);
|
|
58
179
|
// Here we group each key as a new TOption Group to order hotels better.
|
|
59
|
-
const propertyKeys = Object.keys(
|
|
180
|
+
const propertyKeys = Object.keys(filteredProperties);
|
|
60
181
|
if (propertyKeys.length > 1) {
|
|
61
182
|
propertyKeys.forEach((propertyKey) => {
|
|
62
183
|
var _a;
|
|
@@ -66,30 +187,38 @@ const BookingWizardHotelSelector = (props) => {
|
|
|
66
187
|
options: [],
|
|
67
188
|
colors: {},
|
|
68
189
|
};
|
|
69
|
-
for (const property of
|
|
190
|
+
for (const property of filteredProperties[propertyKey]) {
|
|
70
191
|
(_a = option.options) === null || _a === void 0 ? void 0 : _a.push(property);
|
|
71
192
|
}
|
|
72
193
|
options.push(option);
|
|
73
194
|
});
|
|
74
195
|
}
|
|
75
196
|
else if (propertyKeys.length === 1) {
|
|
76
|
-
|
|
197
|
+
filteredProperties[propertyKeys[0]].forEach((option) => {
|
|
77
198
|
options.push(option);
|
|
78
199
|
});
|
|
79
|
-
if (
|
|
200
|
+
if (filteredProperties[propertyKeys[0]].length == 1 && filteredProperties[propertyKeys[0]][0].id === (selectedProperty === null || selectedProperty === void 0 ? void 0 : selectedProperty.id)) {
|
|
80
201
|
isOnly = true;
|
|
81
202
|
}
|
|
82
203
|
}
|
|
83
204
|
setIsOnlyProperty(isOnly);
|
|
84
205
|
return options;
|
|
85
|
-
}, [properties]);
|
|
206
|
+
}, [properties, searchConfig === null || searchConfig === void 0 ? void 0 : searchConfig.searchQuery, finalProperties]);
|
|
86
207
|
const onPropertyClick = (property) => {
|
|
87
208
|
var _a;
|
|
88
209
|
(_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, property);
|
|
210
|
+
searchConfig === null || searchConfig === void 0 ? void 0 : searchConfig.setSearchQuery((property === null || property === void 0 ? void 0 : property.name) || '');
|
|
89
211
|
if (!isImagesThemeMobile) {
|
|
90
212
|
setOpen(false);
|
|
91
213
|
}
|
|
92
214
|
};
|
|
215
|
+
const onClearAllHandler = (event) => {
|
|
216
|
+
var _a;
|
|
217
|
+
(_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props);
|
|
218
|
+
searchConfig === null || searchConfig === void 0 ? void 0 : searchConfig.setSearchQuery('');
|
|
219
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
220
|
+
event === null || event === void 0 ? void 0 : event.stopPropagation();
|
|
221
|
+
};
|
|
93
222
|
const getOption = (key) => {
|
|
94
223
|
const indexes = Object.keys(properties);
|
|
95
224
|
for (const index of indexes) {
|
|
@@ -101,16 +230,17 @@ const BookingWizardHotelSelector = (props) => {
|
|
|
101
230
|
}
|
|
102
231
|
};
|
|
103
232
|
const renderOptions = () => {
|
|
104
|
-
const
|
|
233
|
+
const filteredProperties = searchFilter(finalProperties, searchConfig === null || searchConfig === void 0 ? void 0 : searchConfig.searchQuery);
|
|
234
|
+
const indexes = Object.keys(filteredProperties);
|
|
105
235
|
if (indexes.length > 1) {
|
|
106
|
-
return indexes.map((indexName) => renderGroup(indexName,
|
|
236
|
+
return indexes.map((indexName) => renderGroup(indexName, filteredProperties[indexName]));
|
|
107
237
|
}
|
|
108
238
|
else if (indexes.length === 1) {
|
|
109
|
-
return
|
|
239
|
+
return filteredProperties[indexes[0]].map((property) => renderOption(property));
|
|
110
240
|
}
|
|
111
241
|
};
|
|
112
242
|
const renderGroup = (name, options) => {
|
|
113
|
-
return (react_1.default.createElement(
|
|
243
|
+
return (react_1.default.createElement("div", { key: name },
|
|
114
244
|
react_1.default.createElement("div", { className: (0, classnames_1.default)(BookingWizardHotelSelector_module_scss_1.default['container--suggest-list-hotel'], BookingWizardHotelSelector_module_scss_1.default['--group-title']) },
|
|
115
245
|
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, color: Color_1.Color.DarkGrey }, name)),
|
|
116
246
|
options.map((option) => renderOption(option))));
|
|
@@ -134,7 +264,7 @@ const BookingWizardHotelSelector = (props) => {
|
|
|
134
264
|
const onOpenDrawer = () => {
|
|
135
265
|
setOpen(true);
|
|
136
266
|
};
|
|
137
|
-
if (isOnlyProperty) {
|
|
267
|
+
if (isOnlyProperty && !searchConfig) {
|
|
138
268
|
return react_1.default.createElement(Text_1.default, null, selectedProperty === null || selectedProperty === void 0 ? void 0 : selectedProperty.name);
|
|
139
269
|
}
|
|
140
270
|
if (type === 'inline') {
|
|
@@ -146,24 +276,40 @@ const BookingWizardHotelSelector = (props) => {
|
|
|
146
276
|
const ItemDisplay = () => {
|
|
147
277
|
return (react_1.default.createElement("div", { className: (0, classnames_1.default)({
|
|
148
278
|
[BookingWizardHotelSelector_module_scss_1.default['--mini']]: !isImagesThemeMobile && layout === 'horizontal-condensed',
|
|
149
|
-
[BookingWizardHotelSelector_module_scss_1.default['item-display']]: isImagesThemeMobile,
|
|
279
|
+
[BookingWizardHotelSelector_module_scss_1.default['item-display']]: isImagesThemeMobile || !!searchConfig,
|
|
280
|
+
[BookingWizardHotelSelector_module_scss_1.default['--searchable']]: !!searchConfig,
|
|
150
281
|
}), onClick: onOpenDrawer },
|
|
151
|
-
react_1.default.createElement(Text_1.default, { className: (0, classnames_1.default)(BookingWizardHotelSelector_module_scss_1.default.optionLabel, {
|
|
152
|
-
|
|
282
|
+
react_1.default.createElement(Text_1.default, { className: (0, classnames_1.default)(BookingWizardHotelSelector_module_scss_1.default.optionLabel, {
|
|
283
|
+
[BookingWizardHotelSelector_module_scss_1.default.placeholder]: !(selectedProperty === null || selectedProperty === void 0 ? void 0 : selectedProperty.name),
|
|
284
|
+
[BookingWizardHotelSelector_module_scss_1.default['text-ellipsis-with-icon']]: !!searchConfig,
|
|
285
|
+
}), bold: true }, (selectedProperty === null || selectedProperty === void 0 ? void 0 : selectedProperty.name) || t(Translation_1.Translation.Misc.PleaseSelectHotelMobile)),
|
|
286
|
+
isImagesThemeMobile && !searchConfig ? react_1.default.createElement(ui_1.Icon, { icon: ui_1.IconType.Dropdown }) : null,
|
|
287
|
+
searchConfig && react_1.default.createElement(BookingWizardContent_1.BWClearButton, { show: !!searchConfig.searchQuery, onClick: onClearAllHandler, hasLabel: true, hasSearchInput: true }),
|
|
288
|
+
searchConfig && react_1.default.createElement(BookingWizardContent_1.BWSearchButton, { show: !searchConfig.searchQuery, hasLabel: true, hasSearchInput: true })));
|
|
153
289
|
};
|
|
154
|
-
return (react_1.default.createElement(
|
|
290
|
+
return (react_1.default.createElement("div", { className: (0, classnames_1.default)({
|
|
291
|
+
[BookingWizardHotelSelector_module_scss_1.default['container-searchable']]: !!searchConfig,
|
|
292
|
+
}) },
|
|
155
293
|
react_1.default.createElement(ItemDisplay, null),
|
|
156
|
-
react_1.default.createElement(BookingWizardBottomSheet_1.default, { className: (0, classnames_1.default)(BookingWizardHotelSelector_module_scss_1.default.container, BookingWizardHotelSelector_module_scss_1.default['--bottom-sheet'], {
|
|
294
|
+
react_1.default.createElement(BookingWizardBottomSheet_1.default, Object.assign({ className: (0, classnames_1.default)(BookingWizardHotelSelector_module_scss_1.default.container, BookingWizardHotelSelector_module_scss_1.default['--bottom-sheet'], {
|
|
157
295
|
[BookingWizardHotelSelector_module_scss_1.default['custom-overlay-images-theme']]: isImagesTheme,
|
|
158
296
|
}), open: open, onDismiss: () => {
|
|
159
297
|
if (!isImagesThemeMobile) {
|
|
160
298
|
setOpen(false);
|
|
161
299
|
}
|
|
162
|
-
}, header: react_1.default.createElement(
|
|
163
|
-
|
|
300
|
+
}, header: react_1.default.createElement(react_1.default.Fragment, null,
|
|
301
|
+
react_1.default.createElement(BookingWizardBottomSheet_1.BWBottomSheetHeader, { title: t(Translation_1.Translation.Misc.ChooseHotelMobile), onClose: () => setOpen(false) }),
|
|
302
|
+
searchConfig && (react_1.default.createElement("div", { className: BookingWizardHotelSelector_module_scss_1.default.header },
|
|
303
|
+
react_1.default.createElement(SelectorSearchBox, { option: selectedProperty, searchConfig: searchConfig, onClearAllHandler: onClearAllHandler })))), footer: react_1.default.createElement(BookingWizardBottomSheet_1.BWBottomSheetFooter, { hidePrev: stateSections[BookingWizard_1.EBookingWizardSection.Property].isFirst, onNext: () => onNextHandler(BookingWizard_1.EBookingWizardSection.Property), disabledNext: !selectedProperty }) }, (searchConfig
|
|
304
|
+
? {
|
|
305
|
+
snapPoints: () => [window.innerHeight],
|
|
306
|
+
defaultSnap: ({ maxHeight }) => maxHeight,
|
|
307
|
+
}
|
|
308
|
+
: {})),
|
|
309
|
+
react_1.default.createElement("div", { className: (0, classnames_1.default)(BookingWizardHotelSelector_module_scss_1.default.content, contentClassName) }, renderOptions() || react_1.default.createElement(Text_1.default, { className: (0, classnames_1.default)(BookingWizardHotelSelector_module_scss_1.default['input-no-options']) }, t(Translation_1.Translation.Misc.EmptySearchHotel))))));
|
|
164
310
|
}
|
|
165
311
|
return (react_1.default.createElement("div", { className: (0, classnames_1.default)({ [BookingWizardHotelSelector_module_scss_1.default['--mini']]: layout === 'horizontal-condensed' }) },
|
|
166
|
-
react_1.default.createElement(Select_1.Select, { target: followElement, offset: overlay === null || overlay === void 0 ? void 0 : overlay.offset, options: optionedProperties, value: selectedProperty === null || selectedProperty === void 0 ? void 0 : selectedProperty.id, onChange: (value) => onPropertyClick(getOption(value)), keyName: "id", labelName: "name", hideExpandIcon: layout === 'horizontal-condensed', disableNative: true, overlay: {
|
|
312
|
+
react_1.default.createElement(Select_1.Select, { target: followElement, offset: overlay === null || overlay === void 0 ? void 0 : overlay.offset, options: optionedProperties, value: selectedProperty === null || selectedProperty === void 0 ? void 0 : selectedProperty.id, onChange: (value) => onPropertyClick(getOption(value)), keyName: "id", labelName: "name", hideExpandIcon: layout === 'horizontal-condensed' || !!searchConfig, disableNative: true, overlay: {
|
|
167
313
|
containerClassName: (0, classnames_1.default)(BookingWizardHotelSelector_module_scss_1.default['custom-overlay'], {
|
|
168
314
|
[BookingWizardHotelSelector_module_scss_1.default['small-container']]: isSmallContainer,
|
|
169
315
|
[BookingWizardHotelSelector_module_scss_1.default['custom-overlay-images-theme']]: isImagesTheme,
|
|
@@ -177,9 +323,28 @@ const BookingWizardHotelSelector = (props) => {
|
|
|
177
323
|
if (property)
|
|
178
324
|
return renderOption(property);
|
|
179
325
|
return null;
|
|
180
|
-
}, renderLabel: (option) => {
|
|
181
|
-
|
|
182
|
-
|
|
326
|
+
}, renderLabel: (option) => react_1.default.createElement(SelectorSearchBox, { option: option, searchConfig: searchConfig, onClearAllHandler: onClearAllHandler }), renderNoOptions: (targetRef) => {
|
|
327
|
+
var _a;
|
|
328
|
+
const width = (_a = targetRef.current) === null || _a === void 0 ? void 0 : _a.clientWidth;
|
|
329
|
+
return (react_1.default.createElement(Text_1.default, { className: (0, classnames_1.default)(BookingWizardHotelSelector_module_scss_1.default['input-no-options']), style: {
|
|
330
|
+
width: width,
|
|
331
|
+
} }, t(Translation_1.Translation.Misc.EmptySearchHotel)));
|
|
332
|
+
}, open: searchConfig === null || searchConfig === void 0 ? void 0 : searchConfig.focused })));
|
|
183
333
|
};
|
|
184
334
|
exports.BookingWizardHotelSelector = BookingWizardHotelSelector;
|
|
335
|
+
const SelectorSearchBox = ({ option, searchConfig, onClearAllHandler, }) => {
|
|
336
|
+
const { t } = (0, react_i18next_1.useTranslation)();
|
|
337
|
+
(0, react_1.useEffect)(() => {
|
|
338
|
+
if ((searchConfig === null || searchConfig === void 0 ? void 0 : searchConfig.searchQuery.trim()) === '') {
|
|
339
|
+
onClearAllHandler();
|
|
340
|
+
}
|
|
341
|
+
}, [searchConfig === null || searchConfig === void 0 ? void 0 : searchConfig.searchQuery]);
|
|
342
|
+
if (!searchConfig) {
|
|
343
|
+
return (react_1.default.createElement(Text_1.default, { className: (0, classnames_1.default)(BookingWizardHotelSelector_module_scss_1.default.optionLabel, BookingWizard_module_scss_1.default['value']), bold: true }, (option === null || option === void 0 ? void 0 : option.name) || react_1.default.createElement("span", { className: (0, classnames_1.default)(BookingWizardHotelSelector_module_scss_1.default['hotel-dropdown-label'], BookingWizard_module_scss_1.default['value']) }, t(Translation_1.Translation.Misc.PleaseSelectHotel))));
|
|
344
|
+
}
|
|
345
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
346
|
+
react_1.default.createElement("input", { className: (0, classnames_1.default)(BookingWizardHotelSelector_module_scss_1.default['input-search'], BookingWizard_module_scss_1.default['text-ellipsis-with-icon'], BookingWizard_module_scss_1.default['value']), type: "text", value: searchConfig.searchQuery || (option === null || option === void 0 ? void 0 : option.name) || '', placeholder: t(Translation_1.Translation.Misc.PleaseSelectHotel), onChange: (e) => searchConfig.setSearchQuery(e.target.value), autoComplete: "off" }),
|
|
347
|
+
searchConfig && react_1.default.createElement(BookingWizardContent_1.BWClearButton, { show: !!searchConfig.searchQuery, onClick: onClearAllHandler, hasLabel: true, hasSearchInput: true }),
|
|
348
|
+
searchConfig && react_1.default.createElement(BookingWizardContent_1.BWSearchButton, { show: !searchConfig.searchQuery, hasLabel: true, hasSearchInput: true })));
|
|
349
|
+
};
|
|
185
350
|
//# sourceMappingURL=BookingWizardHotelSelector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BookingWizardHotelSelector.js","sourceRoot":"/","sources":["src/components/generic/BookingWizard/BookingWizardHotelSelector/BookingWizardHotelSelector.tsx"],"names":[],"mappings":"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","sourcesContent":["import { IHotelColorScheme } from '@roomstay/core';\nimport { Icon, IconType } from '@roomstay/ui';\nimport classNames from 'classnames';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { BookingWizardProperty } from '@/models/BookingWizard/BookingWizardProperty';\nimport { TBookingWizardProperties } from '@/models/BookingWizard/BookingWizardTypes';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\nimport { Select } from '../../Select/Select';\nimport { EBookingWizardSection } from '../BookingWizard';\nimport bookingWizardStyles from '../BookingWizard.module.scss';\nimport BookingWizardBottomSheet, { BWBottomSheetFooter, BWBottomSheetHeader } from '../BookingWizardBottomSheet/BookingWizardBottomSheet';\nimport { useBookingWizard } from '../BookingWizardContext';\nimport styles from './BookingWizardHotelSelector.module.scss';\ninterface BookingWizardHotelSelectorProps {\n disabled?: boolean;\n\n selectedProperty?: BookingWizardProperty;\n properties: TBookingWizardProperties;\n\n contentClassName?: string;\n followElement?: HTMLElement | null;\n\n onChange?: (hotel: BookingWizardProperty | null) => void;\n}\n\ninterface TOptionedProperties extends BookingWizardProperty {\n options?: BookingWizardProperty[];\n}\n\nexport const BookingWizardHotelSelector = (props: BookingWizardHotelSelectorProps) => {\n const { overlay, type, layout, isSmallContainer, stateSections, isImagesTheme, isImagesThemeMobile, onNextHandler } = useBookingWizard();\n const { t } = useTranslation();\n const [open, setOpen] = useState(false);\n const [isOnlyProperty, setIsOnlyProperty] = useState(false);\n\n const { selectedProperty, properties, contentClassName, followElement } = props;\n\n useEffect(() => {\n if (stateSections && stateSections[EBookingWizardSection.Property]) {\n setOpen(stateSections[EBookingWizardSection.Property].opening);\n }\n }, [stateSections]);\n\n const optionedProperties = useMemo(() => {\n let isOnly = false;\n\n const options: TOptionedProperties[] = [];\n\n // Here we group each key as a new TOption Group to order hotels better.\n const propertyKeys = Object.keys(properties);\n if (propertyKeys.length > 1) {\n propertyKeys.forEach((propertyKey: string) => {\n const option: TOptionedProperties = {\n name: propertyKey,\n id: '',\n options: [],\n colors: {} as IHotelColorScheme,\n };\n\n for (const property of properties[propertyKey]) {\n option.options?.push(property);\n }\n\n options.push(option);\n });\n } else if (propertyKeys.length === 1) {\n properties[propertyKeys[0]].forEach((option) => {\n options.push(option);\n });\n\n if (properties[propertyKeys[0]].length == 1 && properties[propertyKeys[0]][0].id === selectedProperty?.id) {\n isOnly = true;\n }\n }\n\n setIsOnlyProperty(isOnly);\n\n return options;\n }, [properties]);\n\n const onPropertyClick = (property: BookingWizardProperty): void => {\n props.onChange?.(property);\n\n if (!isImagesThemeMobile) {\n setOpen(false);\n }\n };\n\n const getOption = (key: BookingWizardProperty['id']): BookingWizardProperty | undefined => {\n const indexes = Object.keys(properties);\n\n for (const index of indexes) {\n for (const property of properties[index]) {\n if (key === property.id) {\n return property;\n }\n }\n }\n };\n\n const renderOptions = (): any => {\n const indexes = Object.keys(properties);\n\n if (indexes.length > 1) {\n return indexes.map((indexName) => renderGroup(indexName, properties[indexName]));\n } else if (indexes.length === 1) {\n return properties[indexes[0]].map((property) => renderOption(property));\n }\n };\n\n const renderGroup = (name: string, options: BookingWizardProperty[]) => {\n return (\n <>\n <div className={classNames(styles['container--suggest-list-hotel'], styles['--group-title'])}>\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {name}\n </Text>\n </div>\n {options.map((option) => renderOption(option))}\n </>\n );\n };\n\n const renderOption = (property: BookingWizardProperty) => {\n if (isImagesTheme) {\n return (\n <div\n key={property.id}\n className={classNames(styles['card'], { [styles['--selected']]: selectedProperty?.id === property.id })}\n onClick={() => onPropertyClick(property)}\n >\n <div className={styles['card-img']}>\n <img src={property?.card?.image} />\n </div>\n <div className={styles['card-body']}>\n <div className={styles['card-title']}>{property.name}</div>\n <div className={styles['card-sub-title']}>{property?.card?.text}</div>\n </div>\n </div>\n );\n } else {\n return (\n <div\n key={property.id}\n className={classNames(styles['container--suggest-list-hotel'], { [styles['--selected']]: selectedProperty?.id === property.id })}\n onClick={() => onPropertyClick(property)}\n >\n <div className={styles['container--suggest-list-hotel-name']}>{property.name}</div>\n <div className={styles.check}></div>\n </div>\n );\n }\n };\n\n const onOpenDrawer = () => {\n setOpen(true);\n };\n\n if (isOnlyProperty) {\n return <Text>{selectedProperty?.name}</Text>;\n }\n\n if (type === 'inline') {\n return (\n <div className={styles['inline-container']}>\n <AutoAutoHeight open={open}>\n <div className={styles['inline-box']}>{renderOptions()}</div>\n </AutoAutoHeight>\n </div>\n );\n }\n\n if (type === 'bottom-sheet') {\n const ItemDisplay = () => {\n return (\n <div\n className={classNames({\n [styles['--mini']]: !isImagesThemeMobile && layout === 'horizontal-condensed',\n [styles['item-display']]: isImagesThemeMobile,\n })}\n onClick={onOpenDrawer}\n >\n <Text className={classNames(styles.optionLabel, { [styles.placeholder]: !selectedProperty?.name })} bold>\n {selectedProperty?.name || t(Translation.Misc.PleaseSelectHotelMobile)}\n </Text>\n {isImagesThemeMobile ? <Icon icon={IconType.Dropdown} /> : null}\n </div>\n );\n };\n return (\n <>\n <ItemDisplay />\n <BookingWizardBottomSheet\n className={classNames(styles.container, styles['--bottom-sheet'], {\n [styles['custom-overlay-images-theme']]: isImagesTheme,\n })}\n open={open}\n onDismiss={() => {\n if (!isImagesThemeMobile) {\n setOpen(false);\n }\n }}\n header={<BWBottomSheetHeader title={t(Translation.Misc.ChooseHotelMobile)} onClose={() => setOpen(false)} />}\n footer={\n <BWBottomSheetFooter\n hidePrev={stateSections[EBookingWizardSection.Property].isFirst}\n onNext={() => onNextHandler(EBookingWizardSection.Property)}\n disabledNext={!selectedProperty}\n />\n }\n >\n <div className={classNames(styles.content, contentClassName)}>{renderOptions()}</div>\n </BookingWizardBottomSheet>\n </>\n );\n }\n\n return (\n <div className={classNames({ [styles['--mini']]: layout === 'horizontal-condensed' })}>\n <Select<BookingWizardProperty, 'id'>\n target={followElement}\n offset={overlay?.offset}\n options={optionedProperties}\n value={selectedProperty?.id}\n onChange={(value) => onPropertyClick(getOption(value) as BookingWizardProperty)}\n keyName=\"id\"\n labelName=\"name\"\n hideExpandIcon={layout === 'horizontal-condensed'}\n disableNative\n overlay={{\n containerClassName: classNames(styles['custom-overlay'], {\n [styles['small-container']]: isSmallContainer,\n [styles['custom-overlay-images-theme']]: isImagesTheme,\n }),\n strategy: 'absolute',\n usePortal: false,\n placement: overlay?.placement || 'bottom',\n fallbackPlacements: overlay?.fallbackPlacements || 'bottom',\n hideStyles: true,\n }}\n renderOption={(property) => {\n if (property) return renderOption(property);\n return null;\n }}\n renderLabel={(option) => {\n return (\n <Text className={classNames(styles.optionLabel, bookingWizardStyles['value'])} bold>\n {option?.name || (\n <span className={classNames(styles['hotel-dropdown-label'], bookingWizardStyles['value'])}>{t(Translation.Misc.PleaseSelectHotel)}</span>\n )}\n </Text>\n );\n }}\n />\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"BookingWizardHotelSelector.js","sourceRoot":"/","sources":["src/components/generic/BookingWizard/BookingWizardHotelSelector/BookingWizardHotelSelector.tsx"],"names":[],"mappings":"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","sourcesContent":["import { IHotelColorScheme } from '@roomstay/core';\nimport { Icon, IconType } from '@roomstay/ui';\nimport classNames from 'classnames';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport API from '@/api/BookingAPI';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { BookingWizardEngineConfig } from '@/engines/BookingWizardEngine/BookingWizardEngine';\nimport { BookingWizardProperty, IBookingWizardSearchProperty } from '@/models/BookingWizard/BookingWizardProperty';\nimport { TBookingWizardProperties } from '@/models/BookingWizard/BookingWizardTypes';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\nimport { Select } from '../../Select/Select';\nimport { EBookingWizardSection } from '../BookingWizard';\nimport bookingWizardStyles from '../BookingWizard.module.scss';\nimport BookingWizardBottomSheet, { BWBottomSheetFooter, BWBottomSheetHeader } from '../BookingWizardBottomSheet/BookingWizardBottomSheet';\nimport { BWClearButton, BWSearchButton } from '../BookingWizardContent';\nimport { useBookingWizard } from '../BookingWizardContext';\nimport styles from './BookingWizardHotelSelector.module.scss';\n\ninterface BookingWizardHotelSelectorProps {\n disabled?: boolean;\n searchable?: boolean;\n\n selectedProperty?: BookingWizardProperty;\n properties: TBookingWizardProperties;\n\n contentClassName?: string;\n followElement?: HTMLElement | null;\n\n onChange?: (hotel?: BookingWizardProperty) => void;\n\n // Search box properties\n searchConfig?: BookingWizardEngineConfig['searchConfig'] & {\n searchQuery: string;\n setSearchQuery: React.Dispatch<React.SetStateAction<string>>;\n focused: boolean;\n };\n}\n\ninterface TOptionedProperties extends BookingWizardProperty {\n options?: BookingWizardProperty[];\n}\n\nexport const BookingWizardHotelSelector = (props: BookingWizardHotelSelectorProps) => {\n const { overlay, type, layout, isSmallContainer, stateSections, isImagesTheme, isImagesThemeMobile, onNextHandler } = useBookingWizard();\n const { t } = useTranslation();\n const [open, setOpen] = useState(false);\n const [isOnlyProperty, setIsOnlyProperty] = useState(false);\n const [finalProperties, setFinalProperties] = useState<TBookingWizardProperties>({});\n const { selectedProperty, properties, contentClassName, followElement, searchConfig } = props;\n const unGrouped = t(Translation.Misc.Ungrouped);\n\n useEffect(() => {\n if (stateSections && stateSections[EBookingWizardSection.Property]) {\n setOpen(stateSections[EBookingWizardSection.Property].opening);\n }\n }, [stateSections]);\n\n function getBookingWizardRegions(properties: IBookingWizardSearchProperty[]): string[] {\n return Array.from(new Set(properties.map((p) => p.bookingWizardRegion)));\n }\n\n const combineAddress = (address: BookingWizardProperty['address']): string => {\n if (searchConfig?.combineAddress) {\n return searchConfig.combineAddress(address);\n }\n const format = (vals: (string | undefined)[]) => vals.filter((v) => v && v !== '0').join(', ');\n return [format([address?.line1, address?.city]), format([address?.postalCode, address?.state])].filter(Boolean).join(', ');\n };\n\n const fetchPropertyData = async () => {\n if (!searchConfig?.companyId) {\n setFinalProperties(properties);\n return;\n }\n\n const fetchedData = await API.Hotel.fetchBookingWizardData(searchConfig.companyId);\n const regions = getBookingWizardRegions(fetchedData);\n let tmpFinalProperties: TBookingWizardProperties = {};\n\n if (regions.length > 1) {\n // Build lookup for client properties\n const clientMap: {\n [k: string]: BookingWizardProperty;\n } = Object.fromEntries(\n Object.values(properties)\n .flat()\n .map((p) => [p.id, p])\n );\n // Group by API-provided regions\n for (const region of regions) {\n const matches = fetchedData\n .filter((fp) => fp.bookingWizardRegion === region)\n .map((fp) => {\n const clientProp = clientMap[fp.id];\n if (!clientProp) return null;\n\n return {\n ...clientProp,\n name: fp.name, // merge name\n address: fp.address, // merge address\n card: {\n image: clientProp.card?.image || fp.logo,\n text: combineAddress(fp.address),\n },\n };\n })\n .filter(Boolean);\n if (matches.length > 0) {\n tmpFinalProperties[region || unGrouped] = matches as BookingWizardProperty[];\n }\n }\n } else {\n const fetchedDataMap: {\n [k: string]: IBookingWizardSearchProperty;\n } = Object.fromEntries(fetchedData.map((p) => [p.id, p]));\n // Fallback: enrich clientProperties with address\n for (const [region, hotels] of Object.entries(properties)) {\n tmpFinalProperties[region] = hotels.map((hotel) => ({\n ...hotel,\n address: fetchedDataMap[hotel.id]?.address, // attach if found\n card: {\n image: hotel.card?.image,\n text: combineAddress(fetchedDataMap[hotel.id]?.address),\n },\n })) as BookingWizardProperty[];\n }\n }\n\n if (searchConfig?.sortCompareFn) {\n // Use custom comparator\n tmpFinalProperties = Object.fromEntries(\n Object.entries(tmpFinalProperties)\n .sort(([a], [b]) => searchConfig.sortCompareFn!(a, b)) // Sort regions\n .map(([region, props]) => [region, props.sort((p1, p2) => searchConfig.sortCompareFn!(p1, p2))]) // Sort properties\n );\n } else {\n // Default: Sort regions alphabetically, move unGrouped to the end,\n // and also sort properties by name inside each region\n tmpFinalProperties = Object.fromEntries(\n Object.entries(tmpFinalProperties)\n .sort(([a], [b]) => {\n if (a === unGrouped) return 1;\n if (b === unGrouped) return -1;\n return a.localeCompare(b);\n })\n .map(([region, props]) => [region, props.sort((p1, p2) => p1.name.localeCompare(p2.name))])\n );\n }\n setFinalProperties(tmpFinalProperties);\n };\n\n useEffect(() => {\n fetchPropertyData();\n }, [searchConfig?.companyId]);\n\n const searchFilter = (bwProperties: TBookingWizardProperties, searchQuery?: string): TBookingWizardProperties => {\n if (searchConfig?.searchFilter) {\n // Use custom search\n return searchConfig.searchFilter(bwProperties, searchQuery);\n }\n // Default search\n const query = searchQuery?.trim()?.toLowerCase() || '';\n\n if (!query || (query && selectedProperty && query === selectedProperty?.name?.toLowerCase())) {\n return bwProperties;\n }\n\n const filtered: TBookingWizardProperties = {};\n\n for (const [region, hotels] of Object.entries(bwProperties)) {\n const matches = hotels.filter((hotel) => {\n if (!hotel) return false;\n\n const { city = '', state = '' } = hotel?.address || {};\n const keywords = [hotel.name, region, city, state].filter(Boolean).map((kw) => kw.toLowerCase());\n\n return keywords.some((kw) => kw.includes(query));\n });\n\n if (matches.length > 0) {\n filtered[region] = matches;\n }\n }\n return filtered;\n };\n\n const optionedProperties = useMemo(() => {\n let isOnly = false;\n\n const options: TOptionedProperties[] = [];\n const filteredProperties = searchFilter(finalProperties, searchConfig?.searchQuery);\n\n // Here we group each key as a new TOption Group to order hotels better.\n const propertyKeys = Object.keys(filteredProperties);\n if (propertyKeys.length > 1) {\n propertyKeys.forEach((propertyKey: string) => {\n const option: TOptionedProperties = {\n name: propertyKey,\n id: '',\n options: [],\n colors: {} as IHotelColorScheme,\n };\n\n for (const property of filteredProperties[propertyKey]) {\n option.options?.push(property);\n }\n\n options.push(option);\n });\n } else if (propertyKeys.length === 1) {\n filteredProperties[propertyKeys[0]].forEach((option) => {\n options.push(option);\n });\n\n if (filteredProperties[propertyKeys[0]].length == 1 && filteredProperties[propertyKeys[0]][0].id === selectedProperty?.id) {\n isOnly = true;\n }\n }\n\n setIsOnlyProperty(isOnly);\n\n return options;\n }, [properties, searchConfig?.searchQuery, finalProperties]);\n\n const onPropertyClick = (property?: BookingWizardProperty): void => {\n props.onChange?.(property);\n searchConfig?.setSearchQuery(property?.name || '');\n\n if (!isImagesThemeMobile) {\n setOpen(false);\n }\n };\n\n const onClearAllHandler = (event?: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n props.onChange?.();\n searchConfig?.setSearchQuery('');\n event?.preventDefault();\n event?.stopPropagation();\n };\n\n const getOption = (key: BookingWizardProperty['id']): BookingWizardProperty | undefined => {\n const indexes = Object.keys(properties);\n\n for (const index of indexes) {\n for (const property of properties[index]) {\n if (key === property.id) {\n return property;\n }\n }\n }\n };\n\n const renderOptions = (): any => {\n const filteredProperties = searchFilter(finalProperties, searchConfig?.searchQuery);\n\n const indexes = Object.keys(filteredProperties);\n\n if (indexes.length > 1) {\n return indexes.map((indexName) => renderGroup(indexName, filteredProperties[indexName]));\n } else if (indexes.length === 1) {\n return filteredProperties[indexes[0]].map((property) => renderOption(property));\n }\n };\n\n const renderGroup = (name: string, options: BookingWizardProperty[]) => {\n return (\n <div key={name}>\n <div className={classNames(styles['container--suggest-list-hotel'], styles['--group-title'])}>\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {name}\n </Text>\n </div>\n {options.map((option) => renderOption(option))}\n </div>\n );\n };\n\n const renderOption = (property: BookingWizardProperty) => {\n if (isImagesTheme) {\n return (\n <div\n key={property.id}\n className={classNames(styles['card'], { [styles['--selected']]: selectedProperty?.id === property.id })}\n onClick={() => onPropertyClick(property)}\n >\n <div className={styles['card-img']}>\n <img src={property?.card?.image} />\n </div>\n <div className={styles['card-body']}>\n <div className={styles['card-title']}>{property.name}</div>\n <div className={styles['card-sub-title']}>{property?.card?.text}</div>\n </div>\n </div>\n );\n } else {\n return (\n <div\n key={property.id}\n className={classNames(styles['container--suggest-list-hotel'], { [styles['--selected']]: selectedProperty?.id === property.id })}\n onClick={() => onPropertyClick(property)}\n >\n <div className={styles['container--suggest-list-hotel-name']}>{property.name}</div>\n <div className={styles.check}></div>\n </div>\n );\n }\n };\n\n const onOpenDrawer = () => {\n setOpen(true);\n };\n\n if (isOnlyProperty && !searchConfig) {\n return <Text>{selectedProperty?.name}</Text>;\n }\n\n if (type === 'inline') {\n return (\n <div className={styles['inline-container']}>\n <AutoAutoHeight open={open}>\n <div className={styles['inline-box']}>{renderOptions()}</div>\n </AutoAutoHeight>\n </div>\n );\n }\n\n if (type === 'bottom-sheet') {\n const ItemDisplay = () => {\n return (\n <div\n className={classNames({\n [styles['--mini']]: !isImagesThemeMobile && layout === 'horizontal-condensed',\n [styles['item-display']]: isImagesThemeMobile || !!searchConfig,\n [styles['--searchable']]: !!searchConfig,\n })}\n onClick={onOpenDrawer}\n >\n <Text\n className={classNames(styles.optionLabel, {\n [styles.placeholder]: !selectedProperty?.name,\n [styles['text-ellipsis-with-icon']]: !!searchConfig,\n })}\n bold\n >\n {selectedProperty?.name || t(Translation.Misc.PleaseSelectHotelMobile)}\n </Text>\n {isImagesThemeMobile && !searchConfig ? <Icon icon={IconType.Dropdown} /> : null}\n {searchConfig && <BWClearButton show={!!searchConfig.searchQuery} onClick={onClearAllHandler} hasLabel hasSearchInput />}\n {searchConfig && <BWSearchButton show={!searchConfig.searchQuery} hasLabel hasSearchInput />}\n </div>\n );\n };\n return (\n <div\n className={classNames({\n [styles['container-searchable']]: !!searchConfig,\n })}\n >\n <ItemDisplay />\n <BookingWizardBottomSheet\n className={classNames(styles.container, styles['--bottom-sheet'], {\n [styles['custom-overlay-images-theme']]: isImagesTheme,\n })}\n open={open}\n onDismiss={() => {\n if (!isImagesThemeMobile) {\n setOpen(false);\n }\n }}\n header={\n <>\n <BWBottomSheetHeader title={t(Translation.Misc.ChooseHotelMobile)} onClose={() => setOpen(false)} />\n {searchConfig && (\n <div className={styles.header}>\n <SelectorSearchBox option={selectedProperty} searchConfig={searchConfig} onClearAllHandler={onClearAllHandler} />\n </div>\n )}\n </>\n }\n footer={\n <BWBottomSheetFooter\n hidePrev={stateSections[EBookingWizardSection.Property].isFirst}\n onNext={() => onNextHandler(EBookingWizardSection.Property)}\n disabledNext={!selectedProperty}\n />\n }\n {...(searchConfig\n ? {\n snapPoints: () => [window.innerHeight],\n defaultSnap: ({ maxHeight }: { maxHeight: number }) => maxHeight,\n }\n : {})}\n >\n <div className={classNames(styles.content, contentClassName)}>\n {renderOptions() || <Text className={classNames(styles['input-no-options'])}>{t(Translation.Misc.EmptySearchHotel)}</Text>}\n </div>\n </BookingWizardBottomSheet>\n </div>\n );\n }\n\n return (\n <div className={classNames({ [styles['--mini']]: layout === 'horizontal-condensed' })}>\n <Select<BookingWizardProperty, 'id'>\n target={followElement}\n offset={overlay?.offset}\n options={optionedProperties}\n value={selectedProperty?.id}\n onChange={(value) => onPropertyClick(getOption(value) as BookingWizardProperty)}\n keyName=\"id\"\n labelName=\"name\"\n hideExpandIcon={layout === 'horizontal-condensed' || !!searchConfig}\n disableNative\n overlay={{\n containerClassName: classNames(styles['custom-overlay'], {\n [styles['small-container']]: isSmallContainer,\n [styles['custom-overlay-images-theme']]: isImagesTheme,\n }),\n strategy: 'absolute',\n usePortal: false,\n placement: overlay?.placement || 'bottom',\n fallbackPlacements: overlay?.fallbackPlacements || 'bottom',\n hideStyles: true,\n }}\n renderOption={(property) => {\n if (property) return renderOption(property);\n return null;\n }}\n renderLabel={(option) => <SelectorSearchBox option={option} searchConfig={searchConfig} onClearAllHandler={onClearAllHandler} />}\n renderNoOptions={(targetRef: React.RefObject<HTMLSpanElement>) => {\n const width = targetRef.current?.clientWidth;\n return (\n <Text\n className={classNames(styles['input-no-options'])}\n style={{\n width: width,\n }}\n >\n {t(Translation.Misc.EmptySearchHotel)}\n </Text>\n );\n }}\n open={searchConfig?.focused}\n />\n </div>\n );\n};\n\nconst SelectorSearchBox = ({\n option,\n searchConfig,\n onClearAllHandler,\n}: {\n option?: BookingWizardProperty | null;\n onClearAllHandler: (event?: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;\n} & Pick<BookingWizardHotelSelectorProps, 'searchConfig'>) => {\n const { t } = useTranslation();\n useEffect(() => {\n if (searchConfig?.searchQuery.trim() === '') {\n onClearAllHandler();\n }\n }, [searchConfig?.searchQuery]);\n\n if (!searchConfig) {\n return (\n <Text className={classNames(styles.optionLabel, bookingWizardStyles['value'])} bold>\n {option?.name || <span className={classNames(styles['hotel-dropdown-label'], bookingWizardStyles['value'])}>{t(Translation.Misc.PleaseSelectHotel)}</span>}\n </Text>\n );\n }\n\n return (\n <>\n <input\n className={classNames(styles['input-search'], bookingWizardStyles['text-ellipsis-with-icon'], bookingWizardStyles['value'])}\n type=\"text\"\n value={searchConfig.searchQuery || option?.name || ''}\n placeholder={t(Translation.Misc.PleaseSelectHotel)}\n onChange={(e) => searchConfig.setSearchQuery(e.target.value)}\n autoComplete=\"off\"\n />\n {searchConfig && <BWClearButton show={!!searchConfig.searchQuery} onClick={onClearAllHandler} hasLabel hasSearchInput />}\n {searchConfig && <BWSearchButton show={!searchConfig.searchQuery} hasLabel hasSearchInput />}\n </>\n );\n};\n"]}
|
|
@@ -29,20 +29,28 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
29
29
|
const classnames_1 = __importDefault(require("classnames"));
|
|
30
30
|
const dayjs_1 = __importDefault(require("dayjs"));
|
|
31
31
|
const react_1 = __importStar(require("react"));
|
|
32
|
+
const react_i18next_1 = require("react-i18next");
|
|
32
33
|
const AutoAutoHeight_1 = __importDefault(require("../../../animations/AutoAutoHeight"));
|
|
33
34
|
const Icon_1 = __importStar(require("../Icon/Icon"));
|
|
34
35
|
const RatioImage_1 = __importDefault(require("../RatioImage/RatioImage"));
|
|
35
36
|
const Text_1 = __importStar(require("../Text"));
|
|
37
|
+
const Translation_1 = require("../../../translations/Translation");
|
|
36
38
|
const Color_1 = require("../../../util/Color");
|
|
37
39
|
const TextAlignment_1 = require("../../../util/TextAlignment");
|
|
38
40
|
const EventCard_module_scss_1 = __importDefault(require("./EventCard.module.scss"));
|
|
39
41
|
const EventCard = ({ event, ratio }) => {
|
|
40
42
|
var _a, _b, _c, _d, _e, _f;
|
|
43
|
+
const { t } = (0, react_i18next_1.useTranslation)();
|
|
41
44
|
const [collapsed, setCollapsed] = (0, react_1.useState)(true);
|
|
42
|
-
const
|
|
45
|
+
const onClickToggleCollapse = (buttonEvent) => {
|
|
43
46
|
setCollapsed(!collapsed);
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
buttonEvent.preventDefault();
|
|
48
|
+
buttonEvent.stopPropagation();
|
|
49
|
+
};
|
|
50
|
+
const onClickMoreLink = (buttonEvent) => {
|
|
51
|
+
window.open(event.url, '_blank', 'noreferrer');
|
|
52
|
+
buttonEvent.preventDefault();
|
|
53
|
+
buttonEvent.stopPropagation();
|
|
46
54
|
};
|
|
47
55
|
const displayEventTime = () => {
|
|
48
56
|
const startDate = event.startDate ? (0, dayjs_1.default)(event.startDate) : undefined;
|
|
@@ -66,22 +74,22 @@ const EventCard = ({ event, ratio }) => {
|
|
|
66
74
|
react_1.default.createElement("div", { className: EventCard_module_scss_1.default.categoryMask },
|
|
67
75
|
react_1.default.createElement(Text_1.default, { align: TextAlignment_1.TextAlign.Right, color: Color_1.Color.White, bold: true }, (_c = (_b = event.tags) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.display_name)),
|
|
68
76
|
react_1.default.createElement("div", { className: EventCard_module_scss_1.default.content },
|
|
69
|
-
react_1.default.createElement("div", { className: (0, classnames_1.default)(EventCard_module_scss_1.default.header
|
|
77
|
+
react_1.default.createElement("div", { className: (0, classnames_1.default)(EventCard_module_scss_1.default.header) },
|
|
70
78
|
react_1.default.createElement("div", null,
|
|
71
79
|
react_1.default.createElement(Text_1.default, { className: (0, classnames_1.default)({
|
|
72
80
|
'u-text-overflow-ellipsis-1': collapsed,
|
|
73
81
|
'u-text-overflow-ellipsis-2': !collapsed,
|
|
74
82
|
}), bold: true, color: Color_1.Color.Navy }, event.name),
|
|
75
83
|
react_1.default.createElement(Text_1.default, { color: Color_1.Color.Accent, bold: true }, event.eventTimeDescription ? event.eventTimeDescription : displayEventTime())),
|
|
76
|
-
react_1.default.createElement("
|
|
77
|
-
react_1.default.createElement(Icon_1.default, { color: Color_1.Color.Accent, icon: collapsed ? Icon_1.IconType.ArrowUp3 : Icon_1.IconType.ArrowDown3, size: "18px" }))),
|
|
84
|
+
react_1.default.createElement("button", { className: (0, classnames_1.default)(EventCard_module_scss_1.default.collapButton, 'u-cursor-pointer', '--no-icon-animate'), onClick: onClickToggleCollapse },
|
|
85
|
+
react_1.default.createElement(Icon_1.default, { className: (0, classnames_1.default)(EventCard_module_scss_1.default.buttonIcon), color: Color_1.Color.Accent, icon: collapsed ? Icon_1.IconType.ArrowUp3 : Icon_1.IconType.ArrowDown3, size: "18px" }))),
|
|
78
86
|
react_1.default.createElement(AutoAutoHeight_1.default, { open: !collapsed },
|
|
79
87
|
react_1.default.createElement("div", { className: "u-pad-top--light" },
|
|
80
88
|
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, color: Color_1.Color.Accent }, [(_d = event === null || event === void 0 ? void 0 : event.address) === null || _d === void 0 ? void 0 : _d.line1, (_e = event === null || event === void 0 ? void 0 : event.address) === null || _e === void 0 ? void 0 : _e.line2, (_f = event === null || event === void 0 ? void 0 : event.address) === null || _f === void 0 ? void 0 : _f.city].filter((item) => !!item).join(', ')),
|
|
81
89
|
react_1.default.createElement(Text_1.default, { className: "u-text-overflow-ellipsis-3", color: Color_1.Color.DarkGrey, type: Text_1.TextType.Small }, event.summary)),
|
|
82
|
-
event.url && (react_1.default.createElement("
|
|
90
|
+
event.url && (react_1.default.createElement("button", { className: (0, classnames_1.default)(EventCard_module_scss_1.default.linkButton, '--no-icon-animate'), onClick: onClickMoreLink },
|
|
83
91
|
react_1.default.createElement(Text_1.default, { className: (0, classnames_1.default)(EventCard_module_scss_1.default.footer, 'u-flex', 'u-flex-gap--light', 'u-flex-align-center'), type: Text_1.TextType.Label, color: Color_1.Color.Accent },
|
|
84
|
-
react_1.default.createElement("div", null,
|
|
92
|
+
react_1.default.createElement("div", null, t(Translation_1.Translation.Misc.MoreInfo)),
|
|
85
93
|
react_1.default.createElement(Icon_1.default, { icon: Icon_1.IconType.ArrowRight }))))))));
|
|
86
94
|
};
|
|
87
95
|
exports.default = EventCard;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventCard.js","sourceRoot":"/","sources":["src/components/generic/Event/EventCard.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,4DAAoC;AACpC,kDAA0B;AAC1B,+CAA4C;
|
|
1
|
+
{"version":3,"file":"EventCard.js","sourceRoot":"/","sources":["src/components/generic/Event/EventCard.tsx"],"names":[],"mappings":"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","sourcesContent":["import { IRoomstayEvent } from '@roomstay/core';\nimport classNames from 'classnames';\nimport dayjs from 'dayjs';\nimport React, { FC, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport RatioImage from '@/components/generic/RatioImage/RatioImage';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport styles from './EventCard.module.scss';\n\nexport interface EventCardInterface {\n ratio: number;\n event: IRoomstayEvent;\n}\n\nconst EventCard: FC<EventCardInterface> = ({ event, ratio }) => {\n const { t } = useTranslation();\n const [collapsed, setCollapsed] = useState<boolean>(true);\n\n const onClickToggleCollapse = (buttonEvent: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n setCollapsed(!collapsed);\n buttonEvent.preventDefault();\n buttonEvent.stopPropagation();\n };\n\n const onClickMoreLink = (buttonEvent: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n window.open(event.url, '_blank', 'noreferrer');\n buttonEvent.preventDefault();\n buttonEvent.stopPropagation();\n };\n\n const displayEventTime = () => {\n const startDate = event.startDate ? dayjs(event.startDate) : undefined;\n const endDate = event.endDate ? dayjs(event.endDate) : undefined;\n if ([startDate, endDate].some((date) => !date)) {\n return `${startDate ? startDate.format(`ddd, MMM D, h:mmA`) : 'Now'}${endDate ? ` - ${endDate.format(`ddd, MMM D, h:mmA`)}` : ''}`;\n } else {\n if (startDate!.isSame(endDate, 'date')) {\n return `${startDate!.format(`ddd, MMM D, h:mmA`)} - ${endDate!.format(`h:mmA`)}`;\n } else return `${startDate!.format(`ddd, MMM D, h:mmA`)} - ${endDate!.format(`ddd, MMM D, h:mmA`)}`;\n }\n };\n\n return (\n <div className={styles.root}>\n <RatioImage\n src={`${event?.image?.url}`}\n ratio={ratio}\n style={{\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'top center',\n }}\n />\n <div className={styles.categoryMask}>\n <Text align={TextAlign.Right} color={Color.White} bold>\n {event.tags?.[0]?.display_name}\n </Text>\n </div>\n <div className={styles.content}>\n <div className={classNames(styles.header)}>\n <div>\n <Text\n className={classNames({\n 'u-text-overflow-ellipsis-1': collapsed,\n 'u-text-overflow-ellipsis-2': !collapsed,\n })}\n bold\n color={Color.Navy}\n >\n {event.name}\n </Text>\n <Text color={Color.Accent} bold>\n {event.eventTimeDescription ? event.eventTimeDescription : displayEventTime()}\n </Text>\n </div>\n <button className={classNames(styles.collapButton, 'u-cursor-pointer', '--no-icon-animate')} onClick={onClickToggleCollapse}>\n <Icon className={classNames(styles.buttonIcon)} color={Color.Accent} icon={collapsed ? IconType.ArrowUp3 : IconType.ArrowDown3} size=\"18px\" />\n </button>\n </div>\n <AutoAutoHeight open={!collapsed}>\n <div className=\"u-pad-top--light\">\n <Text type={TextType.Small} color={Color.Accent}>\n {[event?.address?.line1, event?.address?.line2, event?.address?.city].filter((item) => !!item).join(', ')}\n </Text>\n <Text className=\"u-text-overflow-ellipsis-3\" color={Color.DarkGrey} type={TextType.Small}>\n {event.summary}\n </Text>\n </div>\n\n {event.url && (\n <button className={classNames(styles.linkButton, '--no-icon-animate')} onClick={onClickMoreLink}>\n <Text className={classNames(styles.footer, 'u-flex', 'u-flex-gap--light', 'u-flex-align-center')} type={TextType.Label} color={Color.Accent}>\n <div>{t(Translation.Misc.MoreInfo)}</div>\n <Icon icon={IconType.ArrowRight} />\n </Text>\n </button>\n )}\n </AutoAutoHeight>\n </div>\n </div>\n );\n};\n\nexport default EventCard;\n"]}
|
|
@@ -63,7 +63,9 @@ const EventCarousel = ({ small = false, data = [], defaultExpanded = false }) =>
|
|
|
63
63
|
react_1.default.createElement("div", { className: "u-pad-top--medium" },
|
|
64
64
|
react_1.default.createElement("div", { className: EventCarousel_module_scss_1.default.swiperContainer },
|
|
65
65
|
react_1.default.createElement("div", { className: "container" },
|
|
66
|
-
react_1.default.createElement(react_2.Swiper, { navigation: !small, modules: [swiper_1.Navigation], spaceBetween: small ? 20 : 30, slidesPerView: small ? 1.2 : 'auto'
|
|
66
|
+
react_1.default.createElement(react_2.Swiper, { navigation: !small, modules: [swiper_1.Navigation], spaceBetween: small ? 20 : 30, slidesPerView: small ? 1.2 : 'auto',
|
|
67
|
+
// Prevent Swiper Slide move on click event
|
|
68
|
+
noSwipingSelector: "button" }, data.map((event, index) => (react_1.default.createElement(react_2.SwiperSlide, { style: {
|
|
67
69
|
width: small ? undefined : 524,
|
|
68
70
|
}, key: index },
|
|
69
71
|
react_1.default.createElement(EventCard_1.default, { ratio: small ? 380 / 345 : 380 / 524, event: event })))))))))));
|