@roomstay/frontend 2.5.24 → 2.6.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/201.bundle.js +1 -1
- package/dist/279.bundle.js +1 -1
- package/dist/370.bundle.js +1 -1
- package/dist/449.bundle.js +1 -1
- package/dist/468.bundle.js +1 -1
- package/dist/537.bundle.js +1 -1
- package/dist/572.bundle.js +1 -1
- package/dist/736.bundle.js +1 -1
- package/dist/903.bundle.js +1 -1
- package/dist/main.bundle.js +1 -1
- package/dist/src/api/AvailabilityAPI.d.ts +20 -2
- package/dist/src/api/AvailabilityAPI.js +35 -16
- package/dist/src/api/AvailabilityAPI.js.map +1 -1
- package/dist/src/api/BaseAPI.js +2 -1
- package/dist/src/api/BaseAPI.js.map +1 -1
- package/dist/src/components/generic/Tooltip/Tooltip.d.ts +3 -0
- package/dist/src/components/generic/Tooltip/Tooltip.js +20 -4
- package/dist/src/components/generic/Tooltip/Tooltip.js.map +1 -1
- package/dist/src/components/generic/date/DatePicker.d.ts +4 -1
- package/dist/src/components/generic/date/DatePicker.js +78 -32
- package/dist/src/components/generic/date/DatePicker.js.map +1 -1
- package/dist/src/components/generic/date/DatePickerDay.js +125 -7
- package/dist/src/components/generic/date/DatePickerDay.js.map +1 -1
- package/dist/src/components/generic/date/FloatingDatePicker.js +5 -3
- package/dist/src/components/generic/date/FloatingDatePicker.js.map +1 -1
- package/dist/src/components/steps/DaysSelectedInformer.js +3 -1
- package/dist/src/components/steps/DaysSelectedInformer.js.map +1 -1
- package/dist/src/components/steps/MinimumNightStayPill.js +8 -1
- package/dist/src/components/steps/MinimumNightStayPill.js.map +1 -1
- package/dist/src/components/steps/date/StepOneNextStepButton.js +15 -1
- package/dist/src/components/steps/date/StepOneNextStepButton.js.map +1 -1
- package/dist/src/components/steps/room/MemberSignInModal/ExternalMemberModal.js +2 -2
- package/dist/src/components/steps/room/MemberSignInModal/ExternalMemberModal.js.map +1 -1
- package/dist/src/config.d.ts +4 -0
- package/dist/src/config.js +7 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +1 -1
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
- package/dist/src/contexts/DatePickerContext.d.ts +4 -0
- package/dist/src/contexts/DatePickerContext.js.map +1 -1
- package/dist/src/hooks/index.d.ts +1 -0
- package/dist/src/hooks/index.js +1 -0
- package/dist/src/hooks/index.js.map +1 -1
- package/dist/src/hooks/useCalendarNightStay.d.ts +39 -0
- package/dist/src/hooks/useCalendarNightStay.js +133 -0
- package/dist/src/hooks/useCalendarNightStay.js.map +1 -0
- package/dist/src/translations/Translation.d.ts +12 -0
- package/dist/src/translations/Translation.js +12 -0
- package/dist/src/translations/Translation.js.map +1 -1
- package/dist/src/translations/languages/en-gb.js +12 -0
- package/dist/src/translations/languages/en-gb.js.map +1 -1
- package/dist/test.bundle.js +1 -1
- package/package.json +1 -1
|
@@ -40,6 +40,8 @@ const hooks_1 = require("../../../hooks/index.js");
|
|
|
40
40
|
const classnames_1 = __importDefault(require("classnames"));
|
|
41
41
|
const dayjs_1 = __importDefault(require("dayjs"));
|
|
42
42
|
const react_1 = __importStar(require("react"));
|
|
43
|
+
const react_i18next_1 = require("react-i18next");
|
|
44
|
+
const Translation_1 = require("translations/Translation");
|
|
43
45
|
const BookingAPI_1 = __importDefault(require("../../../api/BookingAPI"));
|
|
44
46
|
const DatePickerMonth_1 = __importDefault(require("./DatePickerMonth"));
|
|
45
47
|
const Icon_1 = __importStar(require("../Icon/Icon"));
|
|
@@ -60,6 +62,7 @@ function DatePicker(props) {
|
|
|
60
62
|
var _a, _b;
|
|
61
63
|
const { hotel } = (0, hooks_1.useCurrentHotel)();
|
|
62
64
|
const { memberNumber } = (0, useExternalMember_1.useExternalMember)();
|
|
65
|
+
const { t } = (0, react_i18next_1.useTranslation)();
|
|
63
66
|
const [currentMonth, setCurrentMonth] = (0, react_1.useState)(props.showMonthOnLoad ? props.showMonthOnLoad : props.selectedStartDate ? props.selectedStartDate : (0, dayjs_1.default)());
|
|
64
67
|
const [selectedStartDate, setSelectedStartDate] = (0, react_1.useState)((_a = props.selectedStartDate) !== null && _a !== void 0 ? _a : null);
|
|
65
68
|
const [selectedEndDate, setSelectedEndDate] = (0, react_1.useState)((_b = props.selectedEndDate) !== null && _b !== void 0 ? _b : null);
|
|
@@ -72,6 +75,18 @@ function DatePicker(props) {
|
|
|
72
75
|
const [months, setMonths] = (0, react_1.useState)(props.showMultipleMonths ? [currentMonth, currentMonth.add(1, 'month')] : [currentMonth]);
|
|
73
76
|
const [maxPrice, setMaxPrice] = (0, react_1.useState)(0);
|
|
74
77
|
const basketContext = (0, react_1.useContext)(contexts_1.BasketContext);
|
|
78
|
+
const { getLastValidDay, getArrivalNightStay } = (0, hooks_1.useCalendarNightStay)({ basketContext });
|
|
79
|
+
const [nightStayValidation, setNightStayValidation] = (0, react_1.useState)({
|
|
80
|
+
init: false,
|
|
81
|
+
arrivalMinNightStay: null,
|
|
82
|
+
arrivalMaxNightStay: null,
|
|
83
|
+
validationMinNightStay: null,
|
|
84
|
+
validationMaxNightStay: null,
|
|
85
|
+
});
|
|
86
|
+
const [arrivalNightStay, setArrivalNightStay] = (0, react_1.useState)({
|
|
87
|
+
arrivalMinNightStay: null,
|
|
88
|
+
arrivalMaxNightStay: null,
|
|
89
|
+
});
|
|
75
90
|
const onClickDate = (newDate) => __awaiter(this, void 0, void 0, function* () {
|
|
76
91
|
let newPickingState = null;
|
|
77
92
|
const selectedBasketRow = basketContext.selectedBasketRow;
|
|
@@ -83,9 +98,11 @@ function DatePicker(props) {
|
|
|
83
98
|
switch (pickingState) {
|
|
84
99
|
default:
|
|
85
100
|
case DateRangePickingState.StartDate:
|
|
86
|
-
if (newDatePrice.price || !hotel) {
|
|
101
|
+
if ((newDatePrice === null || newDatePrice === void 0 ? void 0 : newDatePrice.price) || !hotel) {
|
|
87
102
|
newPickingState = DateRangePickingState.EndDate;
|
|
88
103
|
setSelectedStartDate(newDate);
|
|
104
|
+
const result = yield getArrivalNightStay(newDate);
|
|
105
|
+
setArrivalNightStay(result);
|
|
89
106
|
setSelectedEndDate(null);
|
|
90
107
|
}
|
|
91
108
|
break;
|
|
@@ -95,14 +112,17 @@ function DatePicker(props) {
|
|
|
95
112
|
newPickingState = DateRangePickingState.EndDate;
|
|
96
113
|
}
|
|
97
114
|
else {
|
|
115
|
+
const result = yield getLastValidDay(selectedStartDate, newDate);
|
|
116
|
+
setNightStayValidation(result.nightStayValidation);
|
|
117
|
+
if (!result.isValidNightStay)
|
|
118
|
+
break;
|
|
98
119
|
newPickingState = DateRangePickingState.StartDate;
|
|
99
120
|
setHoveringOverDate(null);
|
|
100
|
-
const nextAvailableDay = yield getLastValidDay(selectedStartDate, newDate);
|
|
101
121
|
if (newDate.isSame(selectedStartDate)) {
|
|
102
|
-
setSelectedEndDate(
|
|
122
|
+
setSelectedEndDate(result.lastValidDay.add(1, 'day'));
|
|
103
123
|
}
|
|
104
124
|
else {
|
|
105
|
-
setSelectedEndDate(
|
|
125
|
+
setSelectedEndDate(result.lastValidDay);
|
|
106
126
|
}
|
|
107
127
|
}
|
|
108
128
|
break;
|
|
@@ -111,31 +131,11 @@ function DatePicker(props) {
|
|
|
111
131
|
setPickingState(newPickingState);
|
|
112
132
|
}
|
|
113
133
|
});
|
|
114
|
-
const getLastValidDay = (fromDate, toDate) => new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
|
|
115
|
-
var _c;
|
|
116
|
-
const selectedBasketRow = basketContext.selectedBasketRow;
|
|
117
|
-
const adults = selectedBasketRow ? selectedBasketRow.getAdults() : 0;
|
|
118
|
-
const children = selectedBasketRow ? selectedBasketRow.getChildren() : 0;
|
|
119
|
-
const infants = selectedBasketRow ? selectedBasketRow.getInfants() : 0;
|
|
120
|
-
const promoCode = selectedBasketRow ? selectedBasketRow.getPromoCode() : '';
|
|
121
|
-
const diff = (_c = toDate === null || toDate === void 0 ? void 0 : toDate.diff) === null || _c === void 0 ? void 0 : _c.call(toDate, fromDate, 'day');
|
|
122
|
-
let nextMustBreak = false;
|
|
123
|
-
for (let i = 0; i <= diff; i++) {
|
|
124
|
-
const dayToCheck = fromDate.add(i, 'day');
|
|
125
|
-
const price = yield BookingAPI_1.default.Availability.getCheapestPriceForDay(dayToCheck, adults, children, infants, promoCode, hotel === null || hotel === void 0 ? void 0 : hotel.hotelID, memberNumber, false);
|
|
126
|
-
if (nextMustBreak) {
|
|
127
|
-
return resolve(dayToCheck.subtract(1, 'day'));
|
|
128
|
-
}
|
|
129
|
-
if (!price.price && hotel) {
|
|
130
|
-
nextMustBreak = true;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
resolve(toDate);
|
|
134
|
-
}));
|
|
135
134
|
const onHoveredOverDay = (day) => {
|
|
136
135
|
if (selectedStartDate && !selectedEndDate) {
|
|
137
|
-
getLastValidDay(selectedStartDate, day).then((
|
|
138
|
-
|
|
136
|
+
getLastValidDay(selectedStartDate, day).then((result) => {
|
|
137
|
+
setNightStayValidation(result.nightStayValidation);
|
|
138
|
+
setHoveringOverDate(result.lastValidDay);
|
|
139
139
|
});
|
|
140
140
|
}
|
|
141
141
|
};
|
|
@@ -171,9 +171,40 @@ function DatePicker(props) {
|
|
|
171
171
|
return;
|
|
172
172
|
}
|
|
173
173
|
if (props.onEndDateChanged) {
|
|
174
|
-
props.onEndDateChanged(selectedEndDate
|
|
174
|
+
props.onEndDateChanged(selectedEndDate, {
|
|
175
|
+
validationMinNightStay: nightStayValidation.validationMinNightStay,
|
|
176
|
+
validationMaxNightStay: nightStayValidation.validationMaxNightStay,
|
|
177
|
+
});
|
|
175
178
|
}
|
|
176
179
|
}, [selectedEndDate]);
|
|
180
|
+
const nightStayRequirements = (0, react_1.useMemo)(() => {
|
|
181
|
+
const check = {
|
|
182
|
+
MinNightStayRequired: false,
|
|
183
|
+
MaxNightStayRequired: false,
|
|
184
|
+
};
|
|
185
|
+
const options = {
|
|
186
|
+
minNightStay: arrivalNightStay.arrivalMinNightStay,
|
|
187
|
+
maxNightStay: arrivalNightStay.arrivalMaxNightStay,
|
|
188
|
+
};
|
|
189
|
+
if (selectedStartDate) {
|
|
190
|
+
if (((arrivalNightStay === null || arrivalNightStay === void 0 ? void 0 : arrivalNightStay.arrivalMinNightStay) && !selectedEndDate) || ((nightStayValidation === null || nightStayValidation === void 0 ? void 0 : nightStayValidation.validationMinNightStay) && selectedEndDate)) {
|
|
191
|
+
check.MinNightStayRequired = true;
|
|
192
|
+
}
|
|
193
|
+
if (((arrivalNightStay === null || arrivalNightStay === void 0 ? void 0 : arrivalNightStay.arrivalMaxNightStay) && !selectedEndDate) || ((nightStayValidation === null || nightStayValidation === void 0 ? void 0 : nightStayValidation.validationMaxNightStay) && selectedEndDate)) {
|
|
194
|
+
check.MaxNightStayRequired = true;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
if (check.MinNightStayRequired && check.MaxNightStayRequired) {
|
|
198
|
+
return [t(Translation_1.Translation.Step.Date.NightStayRequirement.BothMinMaxNightStayRequired, options)];
|
|
199
|
+
}
|
|
200
|
+
if (check.MinNightStayRequired) {
|
|
201
|
+
return [t(Translation_1.Translation.Step.Date.NightStayRequirement.MinNightStayRequired, options)];
|
|
202
|
+
}
|
|
203
|
+
if (check.MaxNightStayRequired) {
|
|
204
|
+
return [t(Translation_1.Translation.Step.Date.NightStayRequirement.MaxNightStayRequired, options)];
|
|
205
|
+
}
|
|
206
|
+
return [];
|
|
207
|
+
}, [selectedStartDate, selectedEndDate, arrivalNightStay, nightStayValidation]);
|
|
177
208
|
const context = {
|
|
178
209
|
today: (0, dayjs_1.default)(),
|
|
179
210
|
todayInUnix: (0, dayjs_1.default)().unix(),
|
|
@@ -187,6 +218,9 @@ function DatePicker(props) {
|
|
|
187
218
|
onClickDate(date);
|
|
188
219
|
},
|
|
189
220
|
setMaxPrice,
|
|
221
|
+
arrivalNightStay,
|
|
222
|
+
nightStayValidation,
|
|
223
|
+
nightStayRequirements,
|
|
190
224
|
};
|
|
191
225
|
const printMonths = (0, react_1.useMemo)(() => (react_1.default.createElement(react_1.default.Fragment, null, calendarStyle === 'Month' ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
192
226
|
react_1.default.createElement(DatePickerMonth_1.default, { small: props.small, showingMonth: currentMonth }),
|
|
@@ -214,6 +248,20 @@ function DatePicker(props) {
|
|
|
214
248
|
DataLayer_1.default.instance.sendInteraction('Set Calendar Style - Week', DataLayer_1.InteractionType.CALENDAR, DataLayer_1.InteractionStep.DATES);
|
|
215
249
|
setCalendarStyle('Week');
|
|
216
250
|
};
|
|
251
|
+
(0, react_1.useEffect)(() => {
|
|
252
|
+
if (props.selectedStartDate && props.selectedEndDate && !nightStayValidation.init) {
|
|
253
|
+
getLastValidDay(props.selectedStartDate, props.selectedEndDate).then((result) => {
|
|
254
|
+
setNightStayValidation(result.nightStayValidation);
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
}, [props.selectedStartDate, props.selectedEndDate]);
|
|
258
|
+
(0, react_1.useEffect)(() => {
|
|
259
|
+
if (props.selectedStartDate) {
|
|
260
|
+
getArrivalNightStay(props.selectedStartDate).then((result) => {
|
|
261
|
+
setArrivalNightStay(result);
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
}, [props.selectedStartDate]);
|
|
217
265
|
return (react_1.default.createElement(contexts_1.DatePickerContext.Provider, { value: context },
|
|
218
266
|
react_1.default.createElement("div", { ref: firstUpdate, className: calendarClassNames },
|
|
219
267
|
calendarStyle === 'Month' && (react_1.default.createElement("div", { className: "diji-calendar-navigation" },
|
|
@@ -225,12 +273,10 @@ function DatePicker(props) {
|
|
|
225
273
|
printMonths,
|
|
226
274
|
props.showMinNightStay && props.showMultipleMonths && (react_1.default.createElement("div", { className: "diji-calendar--min-night-stay u-flex u-flex-direction-column u-flex-align-center" },
|
|
227
275
|
react_1.default.createElement(DaysSelectedInformer_1.default, null),
|
|
228
|
-
react_1.default.createElement(
|
|
229
|
-
react_1.default.createElement(MinimumNightStayPill_1.default, null))))),
|
|
276
|
+
react_1.default.createElement(MinimumNightStayPill_1.default, null)))),
|
|
230
277
|
props.showMinNightStay && !props.showMultipleMonths && (react_1.default.createElement("div", { className: "diji-calendar--min-night-stay --small u-flex u-flex-direction-column u-flex-align-center u-marg-top" },
|
|
231
278
|
react_1.default.createElement(DaysSelectedInformer_1.default, null),
|
|
232
|
-
react_1.default.createElement(
|
|
233
|
-
react_1.default.createElement(MinimumNightStayPill_1.default, null))))));
|
|
279
|
+
react_1.default.createElement(MinimumNightStayPill_1.default, null)))));
|
|
234
280
|
}
|
|
235
281
|
exports.default = DatePicker;
|
|
236
282
|
//# sourceMappingURL=DatePicker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePicker.js","sourceRoot":"/","sources":["src/components/generic/date/DatePicker.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA0F;AAC1F,2CAAkD;AAClD,4DAAoC;AACpC,kDAAqC;AACrC,+CAAuG;AAEvG,kEAAmC;AACnC,gGAAwE;AACxE,uEAAgE;AAChE,mGAA2E;AAC3E,mGAA2E;AAC3E,iEAA8D;AAC9D,sGAA8E;AAC9E,wCAAqC;AACrC,8DAA+E;AAE/E,0EAAkD;AAElD,MAAM,cAAc,GAAG,IAAA,YAAI,EAAC,GAAG,EAAE,mDAAQ,0CAA0C,GAAC,CAAC,CAAC;AAqCtF,IAAK,qBAGJ;AAHD,WAAK,qBAAqB;IACtB,2EAAa,CAAA;IACb,uEAAW,CAAA;AACf,CAAC,EAHI,qBAAqB,KAArB,qBAAqB,QAGzB;AAED,SAAwB,UAAU,CAAC,KAAsB;;IACrD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IACpC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAA,qCAAiB,GAAE,CAAC;IAE7C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAA,eAAK,GAAE,CAAC,CAAC;IAE9J,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,IAAA,gBAAQ,EAAC,MAAA,KAAK,CAAC,iBAAiB,mCAAI,IAAI,CAAC,CAAC;IAC5F,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAAC,MAAA,KAAK,CAAC,eAAe,mCAAI,IAAI,CAAC,CAAC;IAEtF,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,IAAA,gBAAQ,EAAe,IAAI,CAAC,CAAC;IAE7E,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAClF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAmB,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,qBAAqB,EAAC,CAAC,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5I,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,gBAAgB,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,qBAAqB,EAAC,CAAC,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5F,CAAC,EAAE,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,qBAAqB,CAAC,CAAC,CAAC;IAEnC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IAC/H,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAC,CAAC,CAAC,CAAC;IAE5C,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAEhD,MAAM,WAAW,GAAG,CAAO,OAAoB,EAAE,EAAE;QAC/C,IAAI,eAAe,GAAiC,IAAI,CAAC;QAEzD,MAAM,iBAAiB,GAAG,aAAa,CAAC,iBAAiB,CAAC;QAC1D,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,MAAM,YAAY,GAAG,MAAM,oBAAG,CAAC,YAAY,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAiB,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QAEjK,QAAQ,YAAY,EAAE;YAClB,QAAQ;YACR,KAAK,qBAAqB,CAAC,SAAS;gBAChC,IAAI,YAAY,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;oBAC9B,eAAe,GAAG,qBAAqB,CAAC,OAAO,CAAC;oBAEhD,oBAAoB,CAAC,OAAO,CAAC,CAAC;oBAC9B,kBAAkB,CAAC,IAAI,CAAC,CAAC;iBAC5B;gBAED,MAAM;YACV,KAAK,qBAAqB,CAAC,OAAO;gBAC9B,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;oBACrC,oBAAoB,CAAC,OAAO,CAAC,CAAC;oBAC9B,eAAe,GAAG,qBAAqB,CAAC,OAAO,CAAC;iBACnD;qBAAM;oBACH,eAAe,GAAG,qBAAqB,CAAC,SAAS,CAAC;oBAElD,mBAAmB,CAAC,IAAI,CAAC,CAAC;oBAE1B,MAAM,gBAAgB,GAAG,MAAM,eAAe,CAAC,iBAA0B,EAAE,OAAO,CAAC,CAAC;oBAEpF,IAAI,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE;wBACnC,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;qBACtD;yBAAM;wBACH,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;qBACxC;iBACJ;gBAED,MAAM;SACb;QAED,IAAI,KAAK,CAAC,sBAAsB,EAAE;YAC9B,eAAe,CAAC,eAAwC,CAAC,CAAC;SAC7D;IACL,CAAC,CAAA,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,QAAqB,EAAE,MAAmB,EAAwB,EAAE,CACzF,IAAI,OAAO,CAAC,CAAO,OAAO,EAAE,EAAE;;QAC1B,MAAM,iBAAiB,GAAG,aAAa,CAAC,iBAAiB,CAAC;QAC1D,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAE5E,MAAM,IAAI,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,uDAAG,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE7C,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE;YAC5B,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,MAAM,oBAAG,CAAC,YAAY,CAAC,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAiB,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;YAE7J,IAAI,aAAa,EAAE;gBACf,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;aACjD;YAED,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,EAAE;gBACvB,aAAa,GAAG,IAAI,CAAC;aACxB;SACJ;QAED,OAAO,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC,CAAA,CAAC,CAAC;IAEP,MAAM,gBAAgB,GAAG,CAAC,GAAgB,EAAE,EAAE;QAC1C,IAAI,iBAAiB,IAAI,CAAC,eAAe,EAAE;YACvC,eAAe,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE;gBAC1D,mBAAmB,CAAC,YAAY,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;SACN;IACL,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,IAAA,cAAM,EAAwB,IAAI,CAAC,CAAC;IAExD,qEAAqE;IACrE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,CAAA,+BAAqB,aAArB,+BAAqB,uBAArB,+BAAqB,CAAE,QAAQ,EAAE,KAAI,KAAK,CAAC,YAAY,EAAE;YACzD,gBAAgB,CAAC,MAAM,CAAC,CAAC;SAC5B;IACL,CAAC,EAAE,CAAC,+BAAqB,aAArB,+BAAqB,uBAArB,+BAAqB,CAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAExC,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,KAAK,CAAC,eAAe,EAAE;YACvB,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;SAC1C;IACL,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IAE5B,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,KAAK,CAAC,kBAAkB,EAAE;YAC1B,SAAS,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;SAC3D;IACL,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAE7C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,WAAW,CAAC,OAAO,EAAE;YACrB,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;YAC3B,OAAO;SACV;QAED,IAAI,KAAK,CAAC,kBAAkB,EAAE;YAC1B,KAAK,CAAC,kBAAkB,CAAC,iBAA0B,CAAC,CAAC;SACxD;IACL,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,IAAA,uBAAe,EAAC,GAAG,EAAE;QACjB,IAAI,WAAW,CAAC,OAAO,EAAE;YACrB,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;YAC3B,OAAO;SACV;QAED,IAAI,KAAK,CAAC,gBAAgB,EAAE;YACxB,KAAK,CAAC,gBAAgB,CAAC,eAAwB,CAAC,CAAC;SACpD;IACL,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,MAAM,OAAO,GAAuB;QAChC,KAAK,EAAE,IAAA,eAAK,GAAE;QACd,WAAW,EAAE,IAAA,eAAK,GAAE,CAAC,IAAI,EAAE;QAC3B,SAAS,EAAE,iBAAiB;QAC5B,OAAO,EAAE,eAAe;QAExB,YAAY,EAAE,gBAAgB;QAC9B,QAAQ;QAER,WAAW,EAAE,gBAAgB;QAC7B,YAAY;QAEZ,YAAY,EAAE,CAAC,IAAiB,EAAE,EAAE;YAChC,WAAW,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,WAAW;KACd,CAAC;IAEF,MAAM,WAAW,GAAG,IAAA,eAAO,EACvB,GAAG,EAAE,CAAC,CACF,8DACK,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,CACzB;QACI,8BAAC,yBAAe,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,YAAY,GAAI;QAClE,KAAK,CAAC,kBAAkB,IAAI,8BAAC,yBAAe,IAAC,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAI,CAC7F,CACN,CAAC,CAAC,CAAC,CACA;QACI,8BAAC,eAAK,CAAC,QAAQ,IAAC,QAAQ,EAAE,8BAAC,0BAAgB,OAAG;YAC1C,8BAAC,cAAc,OAAG,CACL,CAClB,CACN,CACF,CACN,EACD,CAAC,YAAY,EAAE,KAAK,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAC1D,CAAC;IAEF,MAAM,kBAAkB,GAAG,IAAA,oBAAU,EAAC,eAAe,EAAE;QACnD,UAAU,EAAE,CAAC,KAAK,CAAC,kBAAkB;QACrC,SAAS,EAAE,KAAK,CAAC,KAAK;QACtB,QAAQ,EAAE,aAAa,KAAK,MAAM;KACrC,CAAC,CAAC;IACH,MAAM,oBAAoB,GAAG,GAAG,EAAE;QAC9B,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,qBAAqB,EAAE,2BAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QAC3G,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC;IACF,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC1B,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,iBAAiB,EAAE,2BAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QACvG,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC;IACF,MAAM,uBAAuB,GAAG,GAAG,EAAE;QACjC,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,2BAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QAClH,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC;IACF,MAAM,sBAAsB,GAAG,GAAG,EAAE;QAChC,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,2BAA2B,EAAE,2BAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QACjH,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC,CAAC;IAEF,OAAO,CACH,8BAAC,4BAAiB,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO;QACtC,uCAAK,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,kBAAkB;YAC/C,aAAa,KAAK,OAAO,IAAI,CAC1B,uCAAK,SAAS,EAAC,0BAA0B;gBACrC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,aAAK,CAAC,KAAK,EAAE,eAAe,EAAE,aAAK,CAAC,IAAI,EAAE,YAAY,EAAC,OAAO,EAAC,IAAI,EAAC,MAAM,GAAG;gBACpJ,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,aAAK,CAAC,KAAK,EAAE,eAAe,EAAE,aAAK,CAAC,IAAI,EAAE,YAAY,EAAC,OAAO,EAAC,IAAI,EAAC,MAAM,GAAG,CAC/I,CACT;YACA,KAAK,CAAC,YAAY,IAAI,CACnB,uCAAK,SAAS,EAAC,2BAA2B;gBACtC,8BAAC,cAAI,IACD,IAAI,EAAC,yBAAyB,EAC9B,IAAI,EAAE,eAAQ,CAAC,SAAS,EACxB,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,aAAK,CAAC,IAAI,CAAC,CAAC,CAAC,aAAK,CAAC,IAAI,EAC1D,OAAO,EAAE,uBAAuB,GAClC;gBACF,8BAAC,cAAI,IACD,IAAI,EAAC,yBAAyB,EAC9B,IAAI,EAAE,eAAQ,CAAC,QAAQ,EACvB,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,aAAK,CAAC,IAAI,CAAC,CAAC,CAAC,aAAK,CAAC,IAAI,EACzD,OAAO,EAAE,sBAAsB,GACjC,CACA,CACT;YACA,WAAW;YACX,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,kBAAkB,IAAI,CACnD,uCAAK,SAAS,EAAC,kFAAkF;gBAC7F,8BAAC,8BAAoB,OAAG;gBACxB,uCAAK,SAAS,EAAC,mBAAmB;oBAC9B,8BAAC,8BAAoB,OAAG,CACtB,CACJ,CACT,CACC;QAEL,KAAK,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,CACpD,uCAAK,SAAS,EAAC,qGAAqG;YAChH,8BAAC,8BAAoB,OAAG;YACxB,uCAAK,SAAS,EAAC,mBAAmB;gBAC9B,8BAAC,8BAAoB,OAAG,CACtB,CACJ,CACT,CACwB,CAChC,CAAC;AACN,CAAC;AA/PD,6BA+PC","sourcesContent":["import { BasketContext, DatePickerContext, IDatePickerContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport dayjs, { Dayjs } from 'dayjs';\nimport React, { lazy, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport API from '@/api/BookingAPI';\nimport DatePickerMonth from '@/components/generic/date/DatePickerMonth';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport DaysSelectedInformer from '@/components/steps/DaysSelectedInformer';\nimport MinimumNightStayPill from '@/components/steps/MinimumNightStayPill';\nimport { useExternalMember } from '@/hooks/useExternalMember';\nimport DatePickerTypeFeature from '@/providers/feature/DatePickerTypeFeature';\nimport { Color } from '@/util/Color';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\n\nimport WeekViewSkeleton from './WeekViewSkeleton';\n\nconst DatePickerWeek = lazy(() => import('@/components/generic/date/DatePickerWeek'));\n\nexport interface DatePickerProps {\n showMonthOnLoad?: dayjs.Dayjs;\n\n selectedStartDate?: dayjs.Dayjs;\n selectedEndDate?: dayjs.Dayjs;\n\n canSelect?: boolean;\n // Includes default navigation arrows\n showArrows?: boolean;\n // Displays two side by side\n showMultipleMonths?: boolean;\n\n // Used for tight spaces\n small?: boolean;\n\n // is there support for start / end dates\n supportsMultiSelecting?: boolean;\n\n // Do or don't show mininmum night stay block\n showMinNightStay?: boolean;\n\n supportsWeek?: boolean;\n\n onDateClicked?: (date: dayjs.Dayjs) => void;\n onStartDateChanged?: (date: dayjs.Dayjs) => void;\n onEndDateChanged?: (date: dayjs.Dayjs) => void;\n}\n\ninterface DatePickerDayObject {\n value: string;\n dateObj: dayjs.Dayjs | null;\n price?: string;\n hovered: boolean;\n}\n\nenum DateRangePickingState {\n StartDate = 1,\n EndDate = 2,\n}\n\nexport default function DatePicker(props: DatePickerProps) {\n const { hotel } = useCurrentHotel();\n const { memberNumber } = useExternalMember();\n\n const [currentMonth, setCurrentMonth] = useState(props.showMonthOnLoad ? props.showMonthOnLoad : props.selectedStartDate ? props.selectedStartDate : dayjs());\n\n const [selectedStartDate, setSelectedStartDate] = useState(props.selectedStartDate ?? null);\n const [selectedEndDate, setSelectedEndDate] = useState(props.selectedEndDate ?? null);\n\n const [hoveringOverDate, setHoveringOverDate] = useState<Dayjs | null>(null);\n\n const [pickingState, setPickingState] = useState(DateRangePickingState.StartDate);\n const [calendarStyle, setCalendarStyle] = useState<'Month' | 'Week'>(hotel?.defaultDatepickerType ? hotel?.defaultDatepickerType : 'Month');\n useEffect(() => {\n setCalendarStyle(hotel?.defaultDatepickerType ? hotel?.defaultDatepickerType : 'Month');\n }, [hotel?.defaultDatepickerType]);\n\n const [months, setMonths] = useState(props.showMultipleMonths ? [currentMonth, currentMonth.add(1, 'month')] : [currentMonth]);\n const [maxPrice, setMaxPrice] = useState(0);\n\n const basketContext = useContext(BasketContext);\n\n const onClickDate = async (newDate: dayjs.Dayjs) => {\n let newPickingState: DateRangePickingState | null = null;\n\n const selectedBasketRow = basketContext.selectedBasketRow;\n const adults = selectedBasketRow ? selectedBasketRow.getAdults() : 0;\n const children = selectedBasketRow ? selectedBasketRow.getChildren() : 0;\n const infants = selectedBasketRow ? selectedBasketRow.getInfants() : 0;\n const promoCode = selectedBasketRow ? selectedBasketRow.getPromoCode() : '';\n const newDatePrice = await API.Availability.getCheapestPriceForDay(newDate, adults, children, infants, promoCode, hotel?.hotelID as string, memberNumber, false);\n\n switch (pickingState) {\n default:\n case DateRangePickingState.StartDate:\n if (newDatePrice.price || !hotel) {\n newPickingState = DateRangePickingState.EndDate;\n\n setSelectedStartDate(newDate);\n setSelectedEndDate(null);\n }\n\n break;\n case DateRangePickingState.EndDate:\n if (newDate.isBefore(selectedStartDate)) {\n setSelectedStartDate(newDate);\n newPickingState = DateRangePickingState.EndDate;\n } else {\n newPickingState = DateRangePickingState.StartDate;\n\n setHoveringOverDate(null);\n\n const nextAvailableDay = await getLastValidDay(selectedStartDate as Dayjs, newDate);\n\n if (newDate.isSame(selectedStartDate)) {\n setSelectedEndDate(nextAvailableDay.add(1, 'day'));\n } else {\n setSelectedEndDate(nextAvailableDay);\n }\n }\n\n break;\n }\n\n if (props.supportsMultiSelecting) {\n setPickingState(newPickingState as DateRangePickingState);\n }\n };\n\n const getLastValidDay = (fromDate: dayjs.Dayjs, toDate: dayjs.Dayjs): Promise<dayjs.Dayjs> =>\n new Promise(async (resolve) => {\n const selectedBasketRow = basketContext.selectedBasketRow;\n const adults = selectedBasketRow ? selectedBasketRow.getAdults() : 0;\n const children = selectedBasketRow ? selectedBasketRow.getChildren() : 0;\n const infants = selectedBasketRow ? selectedBasketRow.getInfants() : 0;\n const promoCode = selectedBasketRow ? selectedBasketRow.getPromoCode() : '';\n\n const diff = toDate?.diff?.(fromDate, 'day');\n\n let nextMustBreak = false;\n for (let i = 0; i <= diff; i++) {\n const dayToCheck = fromDate.add(i, 'day');\n const price = await API.Availability.getCheapestPriceForDay(dayToCheck, adults, children, infants, promoCode, hotel?.hotelID as string, memberNumber, false);\n\n if (nextMustBreak) {\n return resolve(dayToCheck.subtract(1, 'day'));\n }\n\n if (!price.price && hotel) {\n nextMustBreak = true;\n }\n }\n\n resolve(toDate);\n });\n\n const onHoveredOverDay = (day: dayjs.Dayjs) => {\n if (selectedStartDate && !selectedEndDate) {\n getLastValidDay(selectedStartDate, day).then((lastValidDay) => {\n setHoveringOverDate(lastValidDay);\n });\n }\n };\n\n const firstUpdate = useRef<HTMLDivElement | null>(null);\n\n // TODO: Perhaps refactor this later to not depend on non-state items\n useEffect(() => {\n if (DatePickerTypeFeature?.isActive() && props.supportsWeek) {\n setCalendarStyle('Week');\n }\n }, [DatePickerTypeFeature?.isActive()]);\n\n useEffect(() => {\n if (props.showMonthOnLoad) {\n setCurrentMonth(props.showMonthOnLoad);\n }\n }, [props.showMonthOnLoad]);\n\n useEffect(() => {\n if (props.showMultipleMonths) {\n setMonths([currentMonth, currentMonth.add(1, 'month')]);\n }\n }, [currentMonth, props.showMultipleMonths]);\n\n useEffect(() => {\n if (firstUpdate.current) {\n firstUpdate.current = null;\n return;\n }\n\n if (props.onStartDateChanged) {\n props.onStartDateChanged(selectedStartDate as Dayjs);\n }\n }, [selectedStartDate]);\n\n useLayoutEffect(() => {\n if (firstUpdate.current) {\n firstUpdate.current = null;\n return;\n }\n\n if (props.onEndDateChanged) {\n props.onEndDateChanged(selectedEndDate as Dayjs);\n }\n }, [selectedEndDate]);\n\n const context: IDatePickerContext = {\n today: dayjs(),\n todayInUnix: dayjs().unix(),\n startDate: selectedStartDate,\n endDate: selectedEndDate,\n\n hoveredMonth: hoveringOverDate,\n maxPrice,\n\n onHoverOver: onHoveredOverDay,\n currentMonth,\n\n onDayClicked: (date: dayjs.Dayjs) => {\n onClickDate(date);\n },\n setMaxPrice,\n };\n\n const printMonths = useMemo(\n () => (\n <>\n {calendarStyle === 'Month' ? (\n <>\n <DatePickerMonth small={props.small} showingMonth={currentMonth} />\n {props.showMultipleMonths && <DatePickerMonth showingMonth={currentMonth.add(1, 'month')} />}\n </>\n ) : (\n <>\n <React.Suspense fallback={<WeekViewSkeleton />}>\n <DatePickerWeek />\n </React.Suspense>\n </>\n )}\n </>\n ),\n [currentMonth, props.showMultipleMonths, calendarStyle]\n );\n\n const calendarClassNames = classNames('diji-calendar', {\n '--single': !props.showMultipleMonths,\n '--small': props.small,\n '--week': calendarStyle === 'Week',\n });\n const previousMonthOnClick = () => {\n DataLayer.instance.sendInteraction('Show Previous Month', InteractionType.CALENDAR, InteractionStep.DATES);\n setCurrentMonth(currentMonth.subtract(1, 'month'));\n };\n const nextMonthOnClick = () => {\n DataLayer.instance.sendInteraction('Show Next Month', InteractionType.CALENDAR, InteractionStep.DATES);\n setCurrentMonth(currentMonth.add(1, 'month'));\n };\n const setCalendarStyleAsMonth = () => {\n DataLayer.instance.sendInteraction('Set Calendar Style - Month', InteractionType.CALENDAR, InteractionStep.DATES);\n setCalendarStyle('Month');\n };\n const setCalendarStyleAsWeek = () => {\n DataLayer.instance.sendInteraction('Set Calendar Style - Week', InteractionType.CALENDAR, InteractionStep.DATES);\n setCalendarStyle('Week');\n };\n\n return (\n <DatePickerContext.Provider value={context}>\n <div ref={firstUpdate} className={calendarClassNames}>\n {calendarStyle === 'Month' && (\n <div className=\"diji-calendar-navigation\">\n <Icon icon={IconType.ArrowLeft2} onClick={previousMonthOnClick} color={Color.White} backgroundColor={Color.Navy} borderRadius=\"round\" size=\"24px\" />\n <Icon icon={IconType.ArrowRight2} onClick={nextMonthOnClick} color={Color.White} backgroundColor={Color.Navy} borderRadius=\"round\" size=\"24px\" />\n </div>\n )}\n {props.supportsWeek && (\n <div className=\"diji-calendar-picker-type\">\n <Icon\n name=\"Calendar_MothViewButton\"\n icon={IconType.ViewMonth}\n size=\"32px\"\n color={calendarStyle === 'Month' ? Color.Navy : Color.Grey}\n onClick={setCalendarStyleAsMonth}\n />\n <Icon\n name=\"Calendar_WeekViewButton\"\n icon={IconType.ViewWeek}\n size=\"32px\"\n color={calendarStyle === 'Week' ? Color.Navy : Color.Grey}\n onClick={setCalendarStyleAsWeek}\n />\n </div>\n )}\n {printMonths}\n {props.showMinNightStay && props.showMultipleMonths && (\n <div className=\"diji-calendar--min-night-stay u-flex u-flex-direction-column u-flex-align-center\">\n <DaysSelectedInformer />\n <div className=\"u-marg-top--light\">\n <MinimumNightStayPill />\n </div>\n </div>\n )}\n </div>\n\n {props.showMinNightStay && !props.showMultipleMonths && (\n <div className=\"diji-calendar--min-night-stay --small u-flex u-flex-direction-column u-flex-align-center u-marg-top\">\n <DaysSelectedInformer />\n <div className=\"u-marg-top--light\">\n <MinimumNightStayPill />\n </div>\n </div>\n )}\n </DatePickerContext.Provider>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DatePicker.js","sourceRoot":"/","sources":["src/components/generic/date/DatePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, DatePickerContext, IDatePickerContext } from '@frontend/contexts';\nimport { IArrivalNightStay, INightStayValidation, useCalendarNightStay, useCurrentHotel } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport dayjs, { Dayjs } from 'dayjs';\nimport React, { lazy, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport DatePickerMonth from '@/components/generic/date/DatePickerMonth';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport DaysSelectedInformer from '@/components/steps/DaysSelectedInformer';\nimport MinimumNightStayPill from '@/components/steps/MinimumNightStayPill';\nimport { useExternalMember } from '@/hooks/useExternalMember';\nimport DatePickerTypeFeature from '@/providers/feature/DatePickerTypeFeature';\nimport { Color } from '@/util/Color';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\n\nimport WeekViewSkeleton from './WeekViewSkeleton';\n\nconst DatePickerWeek = lazy(() => import('@/components/generic/date/DatePickerWeek'));\n\nexport interface DatePickerProps {\n showMonthOnLoad?: dayjs.Dayjs;\n\n selectedStartDate?: dayjs.Dayjs;\n selectedEndDate?: dayjs.Dayjs;\n\n canSelect?: boolean;\n // Includes default navigation arrows\n showArrows?: boolean;\n // Displays two side by side\n showMultipleMonths?: boolean;\n\n // Used for tight spaces\n small?: boolean;\n\n // is there support for start / end dates\n supportsMultiSelecting?: boolean;\n\n // Do or don't show mininmum night stay block\n showMinNightStay?: boolean;\n\n supportsWeek?: boolean;\n\n onDateClicked?: (date: dayjs.Dayjs) => void;\n onStartDateChanged?: (date: dayjs.Dayjs) => void;\n onEndDateChanged?: (date: dayjs.Dayjs, selectionState?: { validationMinNightStay: number | null; validationMaxNightStay: number | null }) => void;\n}\n\ninterface DatePickerDayObject {\n value: string;\n dateObj: dayjs.Dayjs | null;\n price?: string;\n hovered: boolean;\n}\n\nenum DateRangePickingState {\n StartDate = 1,\n EndDate = 2,\n}\n\nexport default function DatePicker(props: DatePickerProps) {\n const { hotel } = useCurrentHotel();\n const { memberNumber } = useExternalMember();\n const { t } = useTranslation();\n\n const [currentMonth, setCurrentMonth] = useState(props.showMonthOnLoad ? props.showMonthOnLoad : props.selectedStartDate ? props.selectedStartDate : dayjs());\n\n const [selectedStartDate, setSelectedStartDate] = useState(props.selectedStartDate ?? null);\n const [selectedEndDate, setSelectedEndDate] = useState(props.selectedEndDate ?? null);\n\n const [hoveringOverDate, setHoveringOverDate] = useState<Dayjs | null>(null);\n\n const [pickingState, setPickingState] = useState(DateRangePickingState.StartDate);\n const [calendarStyle, setCalendarStyle] = useState<'Month' | 'Week'>(hotel?.defaultDatepickerType ? hotel?.defaultDatepickerType : 'Month');\n useEffect(() => {\n setCalendarStyle(hotel?.defaultDatepickerType ? hotel?.defaultDatepickerType : 'Month');\n }, [hotel?.defaultDatepickerType]);\n\n const [months, setMonths] = useState(props.showMultipleMonths ? [currentMonth, currentMonth.add(1, 'month')] : [currentMonth]);\n const [maxPrice, setMaxPrice] = useState(0);\n\n const basketContext = useContext(BasketContext);\n const { getLastValidDay, getArrivalNightStay } = useCalendarNightStay({ basketContext });\n const [nightStayValidation, setNightStayValidation] = useState<INightStayValidation>({\n init: false,\n arrivalMinNightStay: null,\n arrivalMaxNightStay: null,\n validationMinNightStay: null,\n validationMaxNightStay: null,\n });\n const [arrivalNightStay, setArrivalNightStay] = useState<IArrivalNightStay>({\n arrivalMinNightStay: null,\n arrivalMaxNightStay: null,\n });\n\n const onClickDate = async (newDate: dayjs.Dayjs) => {\n let newPickingState: DateRangePickingState | null = null;\n\n const selectedBasketRow = basketContext.selectedBasketRow;\n const adults = selectedBasketRow ? selectedBasketRow.getAdults() : 0;\n const children = selectedBasketRow ? selectedBasketRow.getChildren() : 0;\n const infants = selectedBasketRow ? selectedBasketRow.getInfants() : 0;\n const promoCode = selectedBasketRow ? selectedBasketRow.getPromoCode() : '';\n const newDatePrice = await API.Availability.getCheapestPriceForDay(newDate, adults, children, infants, promoCode, hotel?.hotelID as string, memberNumber, false);\n\n switch (pickingState) {\n default:\n case DateRangePickingState.StartDate:\n if (newDatePrice?.price || !hotel) {\n newPickingState = DateRangePickingState.EndDate;\n\n setSelectedStartDate(newDate);\n const result = await getArrivalNightStay(newDate);\n setArrivalNightStay(result);\n setSelectedEndDate(null);\n }\n\n break;\n case DateRangePickingState.EndDate:\n if (newDate.isBefore(selectedStartDate)) {\n setSelectedStartDate(newDate);\n newPickingState = DateRangePickingState.EndDate;\n } else {\n const result = await getLastValidDay(selectedStartDate as Dayjs, newDate);\n setNightStayValidation(result.nightStayValidation);\n if (!result.isValidNightStay) break;\n\n newPickingState = DateRangePickingState.StartDate;\n setHoveringOverDate(null);\n\n if (newDate.isSame(selectedStartDate)) {\n setSelectedEndDate(result.lastValidDay.add(1, 'day'));\n } else {\n setSelectedEndDate(result.lastValidDay);\n }\n }\n\n break;\n }\n\n if (props.supportsMultiSelecting) {\n setPickingState(newPickingState as DateRangePickingState);\n }\n };\n\n const onHoveredOverDay = (day: dayjs.Dayjs) => {\n if (selectedStartDate && !selectedEndDate) {\n getLastValidDay(selectedStartDate, day).then((result) => {\n setNightStayValidation(result.nightStayValidation);\n setHoveringOverDate(result.lastValidDay);\n });\n }\n };\n\n const firstUpdate = useRef<HTMLDivElement | null>(null);\n\n // TODO: Perhaps refactor this later to not depend on non-state items\n useEffect(() => {\n if (DatePickerTypeFeature?.isActive() && props.supportsWeek) {\n setCalendarStyle('Week');\n }\n }, [DatePickerTypeFeature?.isActive()]);\n\n useEffect(() => {\n if (props.showMonthOnLoad) {\n setCurrentMonth(props.showMonthOnLoad);\n }\n }, [props.showMonthOnLoad]);\n\n useEffect(() => {\n if (props.showMultipleMonths) {\n setMonths([currentMonth, currentMonth.add(1, 'month')]);\n }\n }, [currentMonth, props.showMultipleMonths]);\n\n useEffect(() => {\n if (firstUpdate.current) {\n firstUpdate.current = null;\n return;\n }\n\n if (props.onStartDateChanged) {\n props.onStartDateChanged(selectedStartDate as Dayjs);\n }\n }, [selectedStartDate]);\n\n useLayoutEffect(() => {\n if (firstUpdate.current) {\n firstUpdate.current = null;\n return;\n }\n\n if (props.onEndDateChanged) {\n props.onEndDateChanged(selectedEndDate as Dayjs, {\n validationMinNightStay: nightStayValidation.validationMinNightStay,\n validationMaxNightStay: nightStayValidation.validationMaxNightStay,\n });\n }\n }, [selectedEndDate]);\n\n const nightStayRequirements: string[] = useMemo(() => {\n const check: {\n MinNightStayRequired: boolean;\n MaxNightStayRequired: boolean;\n } = {\n MinNightStayRequired: false,\n MaxNightStayRequired: false,\n };\n const options = {\n minNightStay: arrivalNightStay.arrivalMinNightStay,\n maxNightStay: arrivalNightStay.arrivalMaxNightStay,\n };\n if (selectedStartDate) {\n if ((arrivalNightStay?.arrivalMinNightStay && !selectedEndDate) || (nightStayValidation?.validationMinNightStay && selectedEndDate)) {\n check.MinNightStayRequired = true;\n }\n if ((arrivalNightStay?.arrivalMaxNightStay && !selectedEndDate) || (nightStayValidation?.validationMaxNightStay && selectedEndDate)) {\n check.MaxNightStayRequired = true;\n }\n }\n if (check.MinNightStayRequired && check.MaxNightStayRequired) {\n return [t(Translation.Step.Date.NightStayRequirement.BothMinMaxNightStayRequired, options)];\n }\n if (check.MinNightStayRequired) {\n return [t(Translation.Step.Date.NightStayRequirement.MinNightStayRequired, options)];\n }\n if (check.MaxNightStayRequired) {\n return [t(Translation.Step.Date.NightStayRequirement.MaxNightStayRequired, options)];\n }\n return [];\n }, [selectedStartDate, selectedEndDate, arrivalNightStay, nightStayValidation]);\n\n const context: IDatePickerContext = {\n today: dayjs(),\n todayInUnix: dayjs().unix(),\n startDate: selectedStartDate,\n endDate: selectedEndDate,\n\n hoveredMonth: hoveringOverDate,\n maxPrice,\n\n onHoverOver: onHoveredOverDay,\n currentMonth,\n\n onDayClicked: (date: dayjs.Dayjs) => {\n onClickDate(date);\n },\n setMaxPrice,\n arrivalNightStay,\n nightStayValidation,\n nightStayRequirements,\n };\n\n const printMonths = useMemo(\n () => (\n <>\n {calendarStyle === 'Month' ? (\n <>\n <DatePickerMonth small={props.small} showingMonth={currentMonth} />\n {props.showMultipleMonths && <DatePickerMonth showingMonth={currentMonth.add(1, 'month')} />}\n </>\n ) : (\n <>\n <React.Suspense fallback={<WeekViewSkeleton />}>\n <DatePickerWeek />\n </React.Suspense>\n </>\n )}\n </>\n ),\n [currentMonth, props.showMultipleMonths, calendarStyle]\n );\n\n const calendarClassNames = classNames('diji-calendar', {\n '--single': !props.showMultipleMonths,\n '--small': props.small,\n '--week': calendarStyle === 'Week',\n });\n const previousMonthOnClick = () => {\n DataLayer.instance.sendInteraction('Show Previous Month', InteractionType.CALENDAR, InteractionStep.DATES);\n setCurrentMonth(currentMonth.subtract(1, 'month'));\n };\n const nextMonthOnClick = () => {\n DataLayer.instance.sendInteraction('Show Next Month', InteractionType.CALENDAR, InteractionStep.DATES);\n setCurrentMonth(currentMonth.add(1, 'month'));\n };\n const setCalendarStyleAsMonth = () => {\n DataLayer.instance.sendInteraction('Set Calendar Style - Month', InteractionType.CALENDAR, InteractionStep.DATES);\n setCalendarStyle('Month');\n };\n const setCalendarStyleAsWeek = () => {\n DataLayer.instance.sendInteraction('Set Calendar Style - Week', InteractionType.CALENDAR, InteractionStep.DATES);\n setCalendarStyle('Week');\n };\n\n useEffect(() => {\n if (props.selectedStartDate && props.selectedEndDate && !nightStayValidation.init) {\n getLastValidDay(props.selectedStartDate, props.selectedEndDate).then((result) => {\n setNightStayValidation(result.nightStayValidation);\n });\n }\n }, [props.selectedStartDate, props.selectedEndDate]);\n\n useEffect(() => {\n if (props.selectedStartDate) {\n getArrivalNightStay(props.selectedStartDate).then((result) => {\n setArrivalNightStay(result);\n });\n }\n }, [props.selectedStartDate]);\n\n return (\n <DatePickerContext.Provider value={context}>\n <div ref={firstUpdate} className={calendarClassNames}>\n {calendarStyle === 'Month' && (\n <div className=\"diji-calendar-navigation\">\n <Icon icon={IconType.ArrowLeft2} onClick={previousMonthOnClick} color={Color.White} backgroundColor={Color.Navy} borderRadius=\"round\" size=\"24px\" />\n <Icon icon={IconType.ArrowRight2} onClick={nextMonthOnClick} color={Color.White} backgroundColor={Color.Navy} borderRadius=\"round\" size=\"24px\" />\n </div>\n )}\n {props.supportsWeek && (\n <div className=\"diji-calendar-picker-type\">\n <Icon\n name=\"Calendar_MothViewButton\"\n icon={IconType.ViewMonth}\n size=\"32px\"\n color={calendarStyle === 'Month' ? Color.Navy : Color.Grey}\n onClick={setCalendarStyleAsMonth}\n />\n <Icon\n name=\"Calendar_WeekViewButton\"\n icon={IconType.ViewWeek}\n size=\"32px\"\n color={calendarStyle === 'Week' ? Color.Navy : Color.Grey}\n onClick={setCalendarStyleAsWeek}\n />\n </div>\n )}\n {printMonths}\n {props.showMinNightStay && props.showMultipleMonths && (\n <div className=\"diji-calendar--min-night-stay u-flex u-flex-direction-column u-flex-align-center\">\n <DaysSelectedInformer />\n <MinimumNightStayPill />\n </div>\n )}\n </div>\n\n {props.showMinNightStay && !props.showMultipleMonths && (\n <div className=\"diji-calendar--min-night-stay --small u-flex u-flex-direction-column u-flex-align-center u-marg-top\">\n <DaysSelectedInformer />\n <MinimumNightStayPill />\n </div>\n )}\n </DatePickerContext.Provider>\n );\n}\n"]}
|
|
@@ -31,11 +31,14 @@ const contexts_1 = require("../../../contexts/index.js");
|
|
|
31
31
|
const hooks_1 = require("../../../hooks/index.js");
|
|
32
32
|
const classnames_1 = __importDefault(require("classnames"));
|
|
33
33
|
const react_1 = __importStar(require("react"));
|
|
34
|
+
const react_i18next_1 = require("react-i18next");
|
|
35
|
+
const Translation_1 = require("translations/Translation");
|
|
34
36
|
const AvailabilityAPI_1 = __importDefault(require("../../../api/AvailabilityAPI"));
|
|
35
37
|
const BookingAPI_1 = __importDefault(require("../../../api/BookingAPI"));
|
|
36
38
|
const Currency_1 = __importDefault(require("../Currency"));
|
|
37
39
|
const Icon_1 = __importStar(require("../Icon/Icon"));
|
|
38
40
|
const Text_1 = __importStar(require("../Text"));
|
|
41
|
+
const Tooltip_1 = __importDefault(require("../Tooltip/Tooltip"));
|
|
39
42
|
const useExternalMember_1 = require("../../../hooks/useExternalMember");
|
|
40
43
|
const Color_1 = require("../../../util/Color");
|
|
41
44
|
var DatePickerDayStatus;
|
|
@@ -48,8 +51,10 @@ var DatePickerDayStatus;
|
|
|
48
51
|
function DatePickerDay(props) {
|
|
49
52
|
const { hotel } = (0, hooks_1.useCurrentHotel)();
|
|
50
53
|
const { memberNumber } = (0, useExternalMember_1.useExternalMember)();
|
|
54
|
+
const { t } = (0, react_i18next_1.useTranslation)();
|
|
51
55
|
const datePickerContext = (0, react_1.useContext)(contexts_1.DatePickerContext);
|
|
52
56
|
const basketContext = (0, react_1.useContext)(contexts_1.BasketContext);
|
|
57
|
+
const { checkAvailableNightStay } = (0, hooks_1.useCalendarNightStay)({ basketContext });
|
|
53
58
|
const [price, setPrice] = (0, react_1.useState)();
|
|
54
59
|
const [isLoading, setIsLoading] = (0, react_1.useState)(false);
|
|
55
60
|
const [isHovering, setIsHovering] = (0, react_1.useState)(false);
|
|
@@ -129,7 +134,7 @@ function DatePickerDay(props) {
|
|
|
129
134
|
setIsLast(false);
|
|
130
135
|
}, [datePickerContext.startDate, datePickerContext.endDate, props.day]);
|
|
131
136
|
const memo = (0, react_1.useMemo)(() => {
|
|
132
|
-
var _a, _b;
|
|
137
|
+
var _a, _b, _c, _d;
|
|
133
138
|
const onHoverIn = (e) => {
|
|
134
139
|
datePickerContext.onHoverOver(props.day);
|
|
135
140
|
setIsHovering(true);
|
|
@@ -137,15 +142,45 @@ function DatePickerDay(props) {
|
|
|
137
142
|
const onHoverOut = (e) => {
|
|
138
143
|
setIsHovering(false);
|
|
139
144
|
};
|
|
145
|
+
const isSelectable = () => {
|
|
146
|
+
return !!(props.day && props.selectable && !isLoading && !isPast && (price || !hotel));
|
|
147
|
+
};
|
|
140
148
|
const onClick = (e) => {
|
|
141
149
|
datePickerContext.onDayClicked(props.day);
|
|
142
150
|
};
|
|
143
|
-
const
|
|
144
|
-
|
|
151
|
+
const availableNightStay = checkAvailableNightStay({
|
|
152
|
+
arrivalNightStay: datePickerContext === null || datePickerContext === void 0 ? void 0 : datePickerContext.arrivalNightStay,
|
|
153
|
+
startDate: datePickerContext.startDate,
|
|
154
|
+
dateToCheck: props.day,
|
|
155
|
+
});
|
|
156
|
+
const isDateInSelectedRange = () => {
|
|
157
|
+
if (props.day && datePickerContext.startDate && datePickerContext.endDate) {
|
|
158
|
+
if (props.day <= datePickerContext.endDate && props.day >= datePickerContext.startDate) {
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return false;
|
|
145
163
|
};
|
|
146
|
-
const
|
|
164
|
+
const isDateBeforeArrivalDate = props.day && datePickerContext.startDate && datePickerContext.startDate.isAfter(props.day);
|
|
165
|
+
const isNightStayAvailable = () => {
|
|
166
|
+
if (datePickerContext.endDate && datePickerContext.startDate) {
|
|
167
|
+
//selected both Arrival/Departure date
|
|
168
|
+
return datePickerContext.startDate.isAfter(props.day) || datePickerContext.endDate.isBefore(props.day);
|
|
169
|
+
}
|
|
170
|
+
else if (datePickerContext.startDate) {
|
|
171
|
+
//selected Arrival date only
|
|
172
|
+
return availableNightStay.available && !isDateBeforeArrivalDate;
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
//no selected date
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
// This is insane, needs to be re-worked
|
|
180
|
+
const hovered = isHovering && isSelectable() && !isDateInSelectedRange() && ((_b = (_a = datePickerContext.hoveredMonth) === null || _a === void 0 ? void 0 : _a.isSame) === null || _b === void 0 ? void 0 : _b.call(_a, props.day, 'date'));
|
|
181
|
+
const classes = (0, classnames_1.default)(`diji-calendar-${(_c = props.displayType) !== null && _c !== void 0 ? _c : 'month'}--item`, {
|
|
147
182
|
'--selectable': isSelectable(),
|
|
148
|
-
'--hovered':
|
|
183
|
+
'--hovered': hovered,
|
|
149
184
|
'--past': !isSelectable(),
|
|
150
185
|
'--current': isCurrent,
|
|
151
186
|
'--first': isFirst,
|
|
@@ -153,14 +188,85 @@ function DatePickerDay(props) {
|
|
|
153
188
|
'--loading': isLoading,
|
|
154
189
|
'--selected': isSelected,
|
|
155
190
|
'--selecting': isSelecting && !isSelected,
|
|
191
|
+
'--night-stay-unavailable': !isNightStayAvailable(),
|
|
156
192
|
});
|
|
157
193
|
const events = {};
|
|
158
194
|
events.onMouseEnter = onHoverIn;
|
|
159
195
|
events.onMouseLeave = onHoverOut;
|
|
160
196
|
events.onClick = onClick;
|
|
161
|
-
const
|
|
197
|
+
const getTooltipTitleSetting = () => {
|
|
198
|
+
let titleTooltip = {
|
|
199
|
+
BlockedDate: t(Translation_1.Translation.Step.Date.NightStayRequirement.BlockedDate),
|
|
200
|
+
DateBeforeArrivalDate: t(Translation_1.Translation.Step.Date.NightStayRequirement.DateBeforeArrivalDate),
|
|
201
|
+
ArrivalDate: '',
|
|
202
|
+
BetweenArrivalDateMinDepartureDate: t(Translation_1.Translation.Step.Date.NightStayRequirement.BetweenArrivalDateMinDepartureDate),
|
|
203
|
+
AvailableDate: '',
|
|
204
|
+
DateInSelectedRange: '',
|
|
205
|
+
DateAfterMaxDepartureDate: t(Translation_1.Translation.Step.Date.NightStayRequirement.DateAfterMaxDepartureDate),
|
|
206
|
+
};
|
|
207
|
+
if (datePickerContext === null || datePickerContext === void 0 ? void 0 : datePickerContext.endDate) {
|
|
208
|
+
const ChangeArrivalDate = t(Translation_1.Translation.Step.Date.NightStayRequirement.ChangeArrivalDate);
|
|
209
|
+
titleTooltip = {
|
|
210
|
+
BlockedDate: '',
|
|
211
|
+
DateBeforeArrivalDate: ChangeArrivalDate,
|
|
212
|
+
ArrivalDate: t(Translation_1.Translation.Step.Date.NightStayRequirement.PickAgain),
|
|
213
|
+
BetweenArrivalDateMinDepartureDate: ChangeArrivalDate,
|
|
214
|
+
AvailableDate: ChangeArrivalDate,
|
|
215
|
+
DateInSelectedRange: ChangeArrivalDate,
|
|
216
|
+
DateAfterMaxDepartureDate: ChangeArrivalDate,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
return titleTooltip;
|
|
220
|
+
};
|
|
221
|
+
const getTooltipTitle = () => {
|
|
222
|
+
var _a, _b, _c, _d, _e;
|
|
223
|
+
const setting = getTooltipTitleSetting();
|
|
224
|
+
if (!price) {
|
|
225
|
+
//Blocked dates
|
|
226
|
+
return setting.BlockedDate;
|
|
227
|
+
}
|
|
228
|
+
if (availableNightStay.minDate) {
|
|
229
|
+
if ((props === null || props === void 0 ? void 0 : props.day.isAfter(datePickerContext.startDate)) && ((_a = availableNightStay.minDate) === null || _a === void 0 ? void 0 : _a.isAfter(props.day))) {
|
|
230
|
+
//Dates between Arrival date and Min Departure Date
|
|
231
|
+
return setting.BetweenArrivalDateMinDepartureDate;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
if (availableNightStay.available) {
|
|
235
|
+
//Available dates
|
|
236
|
+
if (isDateBeforeArrivalDate) {
|
|
237
|
+
//Date before Arrival date (case when hotel have no min./max. nights stay)
|
|
238
|
+
return setting.DateBeforeArrivalDate;
|
|
239
|
+
}
|
|
240
|
+
return setting.AvailableDate;
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
//unavailable dates
|
|
244
|
+
if ((_b = datePickerContext.startDate) === null || _b === void 0 ? void 0 : _b.isAfter(props.day)) {
|
|
245
|
+
//Date before Arrival date
|
|
246
|
+
return setting.DateBeforeArrivalDate;
|
|
247
|
+
}
|
|
248
|
+
if ((_c = datePickerContext.startDate) === null || _c === void 0 ? void 0 : _c.isSame(props.day)) {
|
|
249
|
+
//Date is Arrival date
|
|
250
|
+
return setting.ArrivalDate;
|
|
251
|
+
}
|
|
252
|
+
if (availableNightStay.minDate) {
|
|
253
|
+
if ((_d = availableNightStay.minDate) === null || _d === void 0 ? void 0 : _d.isAfter(props.day)) {
|
|
254
|
+
//Dates before Min Departure Date
|
|
255
|
+
return setting.BetweenArrivalDateMinDepartureDate;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
if (availableNightStay.maxDate) {
|
|
259
|
+
if ((_e = availableNightStay.maxDate) === null || _e === void 0 ? void 0 : _e.isBefore(props.day)) {
|
|
260
|
+
// //Dates after Max Departure Date
|
|
261
|
+
return setting.DateAfterMaxDepartureDate;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return null;
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
const priceBlock = props.day && props.selectable && !isPast && (price || (isLoading && !price)) && price >= 0 ? (react_1.default.createElement("div", { className: `diji-calendar-${(_d = props.displayType) !== null && _d !== void 0 ? _d : 'month'}--item-cost` }, isLoading ? (react_1.default.createElement("div", { className: "u-inline-flex a-spin" },
|
|
162
268
|
react_1.default.createElement(Icon_1.default, { color: Color_1.Color.Accent, icon: Icon_1.IconType.Spinner, size: "14px" }))) : (react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Label },
|
|
163
|
-
react_1.default.createElement(Currency_1.default, { shortenThousandsAfter: 6, removeCurrencyAfterChar: 5, hideDecimals: true, disableLocalization: true }, price)))));
|
|
269
|
+
react_1.default.createElement(Currency_1.default, { shortenThousandsAfter: 6, removeCurrencyAfterChar: 5, hideDecimals: true, disableLocalization: true }, price))))) : (react_1.default.createElement(react_1.default.Fragment, null));
|
|
164
270
|
if (props.displayType === 'week') {
|
|
165
271
|
let height = 0;
|
|
166
272
|
const range = (price / AvailabilityAPI_1.default.maxNightPrice) * 100;
|
|
@@ -190,6 +296,15 @@ function DatePickerDay(props) {
|
|
|
190
296
|
priceBlock));
|
|
191
297
|
}
|
|
192
298
|
else {
|
|
299
|
+
if (datePickerContext.startDate) {
|
|
300
|
+
const tooltipTitle = getTooltipTitle();
|
|
301
|
+
if (tooltipTitle) {
|
|
302
|
+
return (react_1.default.createElement("div", Object.assign({ className: classes }, events),
|
|
303
|
+
react_1.default.createElement(Tooltip_1.default, { title: tooltipTitle, usePortal: true, open: hovered, preventMouseInteraction: true },
|
|
304
|
+
react_1.default.createElement(Text_1.default, null, props.text),
|
|
305
|
+
priceBlock)));
|
|
306
|
+
}
|
|
307
|
+
}
|
|
193
308
|
return (react_1.default.createElement("div", Object.assign({ className: classes }, events),
|
|
194
309
|
react_1.default.createElement(Text_1.default, null, props.text),
|
|
195
310
|
priceBlock));
|
|
@@ -208,6 +323,9 @@ function DatePickerDay(props) {
|
|
|
208
323
|
basketContext,
|
|
209
324
|
datePickerContext.maxPrice,
|
|
210
325
|
hotel,
|
|
326
|
+
datePickerContext === null || datePickerContext === void 0 ? void 0 : datePickerContext.arrivalNightStay,
|
|
327
|
+
datePickerContext === null || datePickerContext === void 0 ? void 0 : datePickerContext.nightStayValidation,
|
|
328
|
+
props.day,
|
|
211
329
|
]);
|
|
212
330
|
return memo;
|
|
213
331
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePickerDay.js","sourceRoot":"/","sources":["src/components/generic/date/DatePickerDay.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, DatePickerContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport dayjs, { Dayjs } from 'dayjs';\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\n\nimport AvailabilityAPI from '@/api/AvailabilityAPI';\nimport API from '@/api/BookingAPI';\nimport Currency from '@/components/generic/Currency';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { useExternalMember } from '@/hooks/useExternalMember';\nimport { Color } from '@/util/Color';\n\ninterface DatePickerDayProps {\n text: any;\n day?: dayjs.Dayjs | any;\n unix: number;\n price?: Promise<number>;\n statuses?: DatePickerDayStatus[];\n selectable?: boolean;\n onClick?: (day: string) => void;\n onHover?: (day: string, status: boolean) => void;\n displayType?: 'month' | 'week';\n}\n\nexport enum DatePickerDayStatus {\n Inactive = 0,\n Selecting = '--selecting',\n Loading = '--loading',\n Selected = '--selected',\n}\n\nexport default function DatePickerDay(props: DatePickerDayProps) {\n const { hotel } = useCurrentHotel();\n const { memberNumber } = useExternalMember();\n\n const datePickerContext = useContext(DatePickerContext);\n const basketContext = useContext(BasketContext);\n\n const [price, setPrice] = useState<number>();\n\n const [isLoading, setIsLoading] = useState(false);\n const [isHovering, setIsHovering] = useState(false);\n const [isSelected, setIsSelected] = useState(false);\n const [isSelecting, setIsSelecting] = useState(false);\n\n const [isFirst, setIsFirst] = useState(false);\n const [isLast, setIsLast] = useState(false);\n\n const isCurrent = props.day && (datePickerContext.today as Dayjs).isSame(props.day, 'date');\n const isPast = props.unix < datePickerContext.todayInUnix && !isCurrent;\n\n const { selectedBasketRow } = basketContext;\n\n useEffect(() => {\n let cancelled = false;\n\n const adults = selectedBasketRow ? selectedBasketRow.getAdults() : 1;\n const children = selectedBasketRow ? selectedBasketRow.getChildren() : 0;\n const infants = selectedBasketRow ? selectedBasketRow.getInfants() : 0;\n const promoCode = selectedBasketRow ? selectedBasketRow.getPromoCode() : '';\n\n if (props.day && !isPast) {\n if (hotel) {\n setPrice(0);\n setIsLoading(true);\n API.Availability.getCheapestPriceForDay(props.day, adults, children, infants, promoCode, hotel.hotelID, memberNumber).then((foundedPrice) => {\n if (!cancelled) {\n if (foundedPrice) {\n setPrice(foundedPrice.price);\n if (datePickerContext.maxPrice < AvailabilityAPI.maxNightPrice) {\n datePickerContext.setMaxPrice(AvailabilityAPI.maxNightPrice);\n }\n }\n\n setIsLoading(false);\n }\n });\n } else {\n datePickerContext.setMaxPrice(-1);\n setPrice(-1);\n setIsLoading(false);\n }\n }\n\n return () => {\n cancelled = true;\n };\n }, [props.day, selectedBasketRow?.getAdults(), selectedBasketRow?.getChildren(), selectedBasketRow?.getInfants(), selectedBasketRow?.getPromoCode(), memberNumber]);\n\n useEffect(() => {\n if (datePickerContext.hoveredMonth) {\n if (props.unix && (datePickerContext.startDate as Dayjs).isBefore(props.day, 'date') && datePickerContext.hoveredMonth.isSameOrAfter(props.day, 'date')) {\n setIsSelecting(true);\n\n if (datePickerContext.hoveredMonth.isSame(props.day, 'date') || (datePickerContext.endDate && datePickerContext.endDate.isSame(props.day))) {\n setIsLast(true);\n } else {\n setIsLast(false);\n }\n return;\n }\n }\n\n setIsSelecting(false);\n setIsLast(false);\n }, [datePickerContext.hoveredMonth, props.day]);\n\n useEffect(() => {\n if (props.unix && datePickerContext.startDate) {\n if (datePickerContext.startDate?.isSameOrBefore(props.day, 'date') && datePickerContext.endDate?.isSameOrAfter(props.day, 'date')) {\n setIsSelected(true);\n\n if (datePickerContext.endDate?.isSame(props.day, 'date')) {\n setIsLast(true);\n }\n\n return;\n }\n\n if (datePickerContext.startDate.isSame(props.day, 'date')) {\n setIsFirst(true);\n setIsSelected(true);\n\n return;\n }\n }\n\n setIsSelected(false);\n setIsFirst(false);\n setIsLast(false);\n }, [datePickerContext.startDate, datePickerContext.endDate, props.day]);\n\n const memo = useMemo(() => {\n const onHoverIn = (e: React.MouseEvent) => {\n datePickerContext.onHoverOver(props.day);\n setIsHovering(true);\n };\n\n const onHoverOut = (e: React.MouseEvent) => {\n setIsHovering(false);\n };\n\n const onClick = (e: React.MouseEvent) => {\n datePickerContext.onDayClicked(props.day);\n };\n\n const isSelectable = () => {\n return props.day && props.selectable && !isLoading && !isPast && (price || !hotel);\n };\n\n const classes = classNames(`diji-calendar-${props.displayType ?? 'month'}--item`, {\n '--selectable': isSelectable(),\n '--hovered': isHovering && isSelectable(),\n '--past': !isSelectable(),\n '--current': isCurrent,\n '--first': isFirst,\n '--last': isLast,\n '--loading': isLoading,\n '--selected': isSelected,\n '--selecting': isSelecting && !isSelected,\n });\n\n const events: any = {};\n\n events.onMouseEnter = onHoverIn;\n events.onMouseLeave = onHoverOut;\n events.onClick = onClick;\n\n const priceBlock = props.day && props.selectable && !isPast && (price || (isLoading && !price)) && (price as number) >= 0 && (\n <div className={`diji-calendar-${props.displayType ?? 'month'}--item-cost`}>\n {isLoading ? (\n <div className=\"u-inline-flex a-spin\">\n <Icon color={Color.Accent} icon={IconType.Spinner} size=\"14px\" />\n </div>\n ) : (\n <Text type={TextType.Label}>\n <Currency shortenThousandsAfter={6} removeCurrencyAfterChar={5} hideDecimals disableLocalization>\n {price}\n </Currency>\n </Text>\n )}\n </div>\n );\n\n if (props.displayType === 'week') {\n let height = 0;\n const range = ((price as number) / AvailabilityAPI.maxNightPrice) * 100;\n\n if (isSelectable()) {\n if (range < 10) {\n height = 10;\n } else if (range > 90) {\n height = 90;\n } else {\n height = range;\n }\n } else {\n if (!isLoading) {\n height = 95;\n }\n }\n\n return (\n <div className={classes} {...events}>\n {props.text === '1' && <div className=\"diji-calendar-week--month-indicator\">{props.day.format('MMMM')}</div>}\n <div className=\"diji-calendar-week--day-label\">{props.day.format('dd')}</div>\n <div className=\"diji-calendar-week--day-digit\">\n <Text>{props.text}</Text>\n </div>\n <div className=\"diji-calendar-week--price-indicator\">\n <div className=\"diji-calendar-week--price-indicator-block\" style={{ maxHeight: `${height}%` }} />\n </div>\n {priceBlock}\n </div>\n );\n } else {\n return (\n <div className={classes} {...events}>\n <Text>{props.text}</Text>\n {priceBlock}\n </div>\n );\n }\n }, [\n isFirst,\n isLast,\n isSelecting,\n isSelected,\n isHovering,\n isLoading,\n props.unix,\n datePickerContext.hoveredMonth,\n datePickerContext.startDate,\n datePickerContext.endDate,\n basketContext,\n datePickerContext.maxPrice,\n hotel,\n ]);\n\n return memo;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DatePickerDay.js","sourceRoot":"/","sources":["src/components/generic/date/DatePickerDay.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, DatePickerContext } from '@frontend/contexts';\nimport { IAvailableNightStay, useCalendarNightStay, useCurrentHotel } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport dayjs, { Dayjs } from 'dayjs';\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport AvailabilityAPI from '@/api/AvailabilityAPI';\nimport API from '@/api/BookingAPI';\nimport Currency from '@/components/generic/Currency';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport { useExternalMember } from '@/hooks/useExternalMember';\nimport { Color } from '@/util/Color';\ninterface DatePickerDayProps {\n text: any;\n day?: dayjs.Dayjs | any;\n unix: number;\n price?: Promise<number>;\n statuses?: DatePickerDayStatus[];\n selectable?: boolean;\n onClick?: (day: string) => void;\n onHover?: (day: string, status: boolean) => void;\n displayType?: 'month' | 'week';\n}\n\nexport enum DatePickerDayStatus {\n Inactive = 0,\n Selecting = '--selecting',\n Loading = '--loading',\n Selected = '--selected',\n}\n\nexport default function DatePickerDay(props: DatePickerDayProps) {\n const { hotel } = useCurrentHotel();\n const { memberNumber } = useExternalMember();\n const { t } = useTranslation();\n\n const datePickerContext = useContext(DatePickerContext);\n const basketContext = useContext(BasketContext);\n const { checkAvailableNightStay } = useCalendarNightStay({ basketContext });\n\n const [price, setPrice] = useState<number>();\n\n const [isLoading, setIsLoading] = useState(false);\n const [isHovering, setIsHovering] = useState(false);\n const [isSelected, setIsSelected] = useState(false);\n const [isSelecting, setIsSelecting] = useState(false);\n\n const [isFirst, setIsFirst] = useState(false);\n const [isLast, setIsLast] = useState(false);\n\n const isCurrent = props.day && (datePickerContext.today as Dayjs).isSame(props.day, 'date');\n const isPast = props.unix < datePickerContext.todayInUnix && !isCurrent;\n\n const { selectedBasketRow } = basketContext;\n\n useEffect(() => {\n let cancelled = false;\n\n const adults = selectedBasketRow ? selectedBasketRow.getAdults() : 1;\n const children = selectedBasketRow ? selectedBasketRow.getChildren() : 0;\n const infants = selectedBasketRow ? selectedBasketRow.getInfants() : 0;\n const promoCode = selectedBasketRow ? selectedBasketRow.getPromoCode() : '';\n\n if (props.day && !isPast) {\n if (hotel) {\n setPrice(0);\n\n setIsLoading(true);\n API.Availability.getCheapestPriceForDay(props.day, adults, children, infants, promoCode, hotel.hotelID, memberNumber).then((foundedPrice) => {\n if (!cancelled) {\n if (foundedPrice) {\n setPrice(foundedPrice.price);\n\n if (datePickerContext.maxPrice < AvailabilityAPI.maxNightPrice) {\n datePickerContext.setMaxPrice(AvailabilityAPI.maxNightPrice);\n }\n }\n\n setIsLoading(false);\n }\n });\n } else {\n datePickerContext.setMaxPrice(-1);\n setPrice(-1);\n setIsLoading(false);\n }\n }\n\n return () => {\n cancelled = true;\n };\n }, [props.day, selectedBasketRow?.getAdults(), selectedBasketRow?.getChildren(), selectedBasketRow?.getInfants(), selectedBasketRow?.getPromoCode(), memberNumber]);\n\n useEffect(() => {\n if (datePickerContext.hoveredMonth) {\n if (props.unix && (datePickerContext.startDate as Dayjs).isBefore(props.day, 'date') && datePickerContext.hoveredMonth.isSameOrAfter(props.day, 'date')) {\n setIsSelecting(true);\n\n if (datePickerContext.hoveredMonth.isSame(props.day, 'date') || (datePickerContext.endDate && datePickerContext.endDate.isSame(props.day))) {\n setIsLast(true);\n } else {\n setIsLast(false);\n }\n return;\n }\n }\n\n setIsSelecting(false);\n setIsLast(false);\n }, [datePickerContext.hoveredMonth, props.day]);\n\n useEffect(() => {\n if (props.unix && datePickerContext.startDate) {\n if (datePickerContext.startDate?.isSameOrBefore(props.day, 'date') && datePickerContext.endDate?.isSameOrAfter(props.day, 'date')) {\n setIsSelected(true);\n\n if (datePickerContext.endDate?.isSame(props.day, 'date')) {\n setIsLast(true);\n }\n\n return;\n }\n\n if (datePickerContext.startDate.isSame(props.day, 'date')) {\n setIsFirst(true);\n setIsSelected(true);\n\n return;\n }\n }\n\n setIsSelected(false);\n setIsFirst(false);\n setIsLast(false);\n }, [datePickerContext.startDate, datePickerContext.endDate, props.day]);\n\n const memo = useMemo(() => {\n const onHoverIn = (e: React.MouseEvent) => {\n datePickerContext.onHoverOver(props.day);\n setIsHovering(true);\n };\n\n const onHoverOut = (e: React.MouseEvent) => {\n setIsHovering(false);\n };\n\n const isSelectable = (): boolean => {\n return !!(props.day && props.selectable && !isLoading && !isPast && (price || !hotel));\n };\n\n const onClick = (e: React.MouseEvent) => {\n datePickerContext.onDayClicked(props.day);\n };\n\n const availableNightStay: IAvailableNightStay = checkAvailableNightStay({\n arrivalNightStay: datePickerContext?.arrivalNightStay,\n startDate: datePickerContext.startDate,\n dateToCheck: props.day,\n });\n\n const isDateInSelectedRange = (): boolean => {\n if (props.day && datePickerContext.startDate && datePickerContext.endDate) {\n if (props.day <= datePickerContext.endDate && props.day >= datePickerContext.startDate) {\n return true;\n }\n }\n return false;\n };\n const isDateBeforeArrivalDate: boolean = props.day && datePickerContext.startDate && datePickerContext.startDate.isAfter(props.day);\n const isNightStayAvailable = (): boolean => {\n if (datePickerContext.endDate && datePickerContext.startDate) {\n //selected both Arrival/Departure date\n return datePickerContext.startDate.isAfter(props.day) || datePickerContext.endDate.isBefore(props.day);\n } else if (datePickerContext.startDate) {\n //selected Arrival date only\n return availableNightStay.available && !isDateBeforeArrivalDate;\n } else {\n //no selected date\n return true;\n }\n };\n\n // This is insane, needs to be re-worked\n const hovered = isHovering && isSelectable() && !isDateInSelectedRange() && datePickerContext.hoveredMonth?.isSame?.(props.day, 'date');\n\n const classes = classNames(`diji-calendar-${props.displayType ?? 'month'}--item`, {\n '--selectable': isSelectable(),\n '--hovered': hovered,\n '--past': !isSelectable(),\n '--current': isCurrent,\n '--first': isFirst,\n '--last': isLast,\n '--loading': isLoading,\n '--selected': isSelected,\n '--selecting': isSelecting && !isSelected,\n '--night-stay-unavailable': !isNightStayAvailable(),\n });\n\n const events: any = {};\n\n events.onMouseEnter = onHoverIn;\n events.onMouseLeave = onHoverOut;\n events.onClick = onClick;\n\n const getTooltipTitleSetting = () => {\n let titleTooltip = {\n BlockedDate: t(Translation.Step.Date.NightStayRequirement.BlockedDate),\n DateBeforeArrivalDate: t(Translation.Step.Date.NightStayRequirement.DateBeforeArrivalDate),\n ArrivalDate: '',\n BetweenArrivalDateMinDepartureDate: t(Translation.Step.Date.NightStayRequirement.BetweenArrivalDateMinDepartureDate),\n AvailableDate: '',\n DateInSelectedRange: '',\n DateAfterMaxDepartureDate: t(Translation.Step.Date.NightStayRequirement.DateAfterMaxDepartureDate),\n };\n if (datePickerContext?.endDate) {\n const ChangeArrivalDate = t(Translation.Step.Date.NightStayRequirement.ChangeArrivalDate);\n titleTooltip = {\n BlockedDate: '',\n DateBeforeArrivalDate: ChangeArrivalDate,\n ArrivalDate: t(Translation.Step.Date.NightStayRequirement.PickAgain),\n BetweenArrivalDateMinDepartureDate: ChangeArrivalDate,\n AvailableDate: ChangeArrivalDate,\n DateInSelectedRange: ChangeArrivalDate,\n DateAfterMaxDepartureDate: ChangeArrivalDate,\n };\n }\n return titleTooltip;\n };\n\n const getTooltipTitle = () => {\n const setting = getTooltipTitleSetting();\n if (!price) {\n //Blocked dates\n return setting.BlockedDate;\n }\n\n if (availableNightStay.minDate) {\n if (props?.day.isAfter(datePickerContext.startDate) && availableNightStay.minDate?.isAfter(props.day)) {\n //Dates between Arrival date and Min Departure Date\n return setting.BetweenArrivalDateMinDepartureDate;\n }\n }\n\n if (availableNightStay.available) {\n //Available dates\n if (isDateBeforeArrivalDate) {\n //Date before Arrival date (case when hotel have no min./max. nights stay)\n return setting.DateBeforeArrivalDate;\n }\n return setting.AvailableDate;\n } else {\n //unavailable dates\n if (datePickerContext.startDate?.isAfter(props.day)) {\n //Date before Arrival date\n return setting.DateBeforeArrivalDate;\n }\n if (datePickerContext.startDate?.isSame(props.day)) {\n //Date is Arrival date\n return setting.ArrivalDate;\n }\n if (availableNightStay.minDate) {\n if (availableNightStay.minDate?.isAfter(props.day)) {\n //Dates before Min Departure Date\n return setting.BetweenArrivalDateMinDepartureDate;\n }\n }\n\n if (availableNightStay.maxDate) {\n if (availableNightStay.maxDate?.isBefore(props.day)) {\n // //Dates after Max Departure Date\n return setting.DateAfterMaxDepartureDate;\n }\n }\n return null;\n }\n };\n\n const priceBlock =\n props.day && props.selectable && !isPast && (price || (isLoading && !price)) && (price as number) >= 0 ? (\n <div className={`diji-calendar-${props.displayType ?? 'month'}--item-cost`}>\n {isLoading ? (\n <div className=\"u-inline-flex a-spin\">\n <Icon color={Color.Accent} icon={IconType.Spinner} size=\"14px\" />\n </div>\n ) : (\n <Text type={TextType.Label}>\n <Currency shortenThousandsAfter={6} removeCurrencyAfterChar={5} hideDecimals disableLocalization>\n {price}\n </Currency>\n </Text>\n )}\n </div>\n ) : (\n <></>\n );\n\n if (props.displayType === 'week') {\n let height = 0;\n const range = ((price as number) / AvailabilityAPI.maxNightPrice) * 100;\n\n if (isSelectable()) {\n if (range < 10) {\n height = 10;\n } else if (range > 90) {\n height = 90;\n } else {\n height = range;\n }\n } else {\n if (!isLoading) {\n height = 95;\n }\n }\n\n return (\n <div className={classes} {...events}>\n {props.text === '1' && <div className=\"diji-calendar-week--month-indicator\">{props.day.format('MMMM')}</div>}\n <div className=\"diji-calendar-week--day-label\">{props.day.format('dd')}</div>\n <div className=\"diji-calendar-week--day-digit\">\n <Text>{props.text}</Text>\n </div>\n <div className=\"diji-calendar-week--price-indicator\">\n <div className=\"diji-calendar-week--price-indicator-block\" style={{ maxHeight: `${height}%` }} />\n </div>\n {priceBlock}\n </div>\n );\n } else {\n if (datePickerContext.startDate) {\n const tooltipTitle = getTooltipTitle();\n if (tooltipTitle) {\n return (\n <div className={classes} {...events}>\n {/* Use hovered to fix the confict events's onMouseLeave/onMouseLeave with (Tooltip) */}\n <Tooltip title={tooltipTitle} usePortal open={hovered} preventMouseInteraction>\n <Text>{props.text}</Text>\n {priceBlock}\n </Tooltip>\n </div>\n );\n }\n }\n\n return (\n <div className={classes} {...events}>\n <Text>{props.text}</Text>\n {priceBlock}\n </div>\n );\n }\n }, [\n isFirst,\n isLast,\n isSelecting,\n isSelected,\n isHovering,\n isLoading,\n props.unix,\n datePickerContext.hoveredMonth,\n datePickerContext.startDate,\n datePickerContext.endDate,\n basketContext,\n datePickerContext.maxPrice,\n hotel,\n datePickerContext?.arrivalNightStay,\n datePickerContext?.nightStayValidation,\n props.day,\n ]);\n\n return memo;\n}\n"]}
|