@roomstay/frontend 2.6.79 → 2.6.80
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/177.bundle.js +1 -1
- package/dist/288.bundle.js +1 -1
- package/dist/380.bundle.js +1 -0
- package/dist/430.bundle.js +1 -1
- package/dist/449.bundle.js +1 -1
- package/dist/537.bundle.js +1 -1
- package/dist/978.bundle.js +1 -1
- package/dist/main.bundle.js +1 -1
- package/dist/src/api/AvailabilityAPI.d.ts +3 -1
- package/dist/src/api/AvailabilityAPI.js +97 -81
- package/dist/src/api/AvailabilityAPI.js.map +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/ReservationAPI.d.ts +1 -2
- 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/BEButton.d.ts +1 -0
- package/dist/src/components/generic/BEButton.js +2 -1
- package/dist/src/components/generic/BEButton.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/PromoCodeInput.d.ts +2 -0
- package/dist/src/components/generic/PromoCodeInput.js +2 -4
- package/dist/src/components/generic/PromoCodeInput.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/members/InlineSignUpSection.d.ts +1 -1
- package/dist/src/components/members/InlineSignUpSection.js.map +1 -1
- package/dist/src/components/steps/common/CommonAddonSummary/CommonAddonSummary.d.ts +1 -1
- package/dist/src/components/steps/common/CommonAddonSummary/CommonAddonSummary.js +2 -2
- package/dist/src/components/steps/common/CommonAddonSummary/CommonAddonSummary.js.map +1 -1
- package/dist/src/components/steps/common/ItemisedFeesSummary/ItemisedFeesSummary.d.ts +1 -1
- package/dist/src/components/steps/common/ItemisedFeesSummary/ItemisedFeesSummary.js.map +1 -1
- 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/date/PeoplePicker.js +2 -2
- package/dist/src/components/steps/date/PeoplePicker.js.map +1 -1
- package/dist/src/components/steps/hotel/HotelSearchParameters.js +5 -13
- package/dist/src/components/steps/hotel/HotelSearchParameters.js.map +1 -1
- package/dist/src/components/steps/room/UserSearchSummary/PromoCodeVerificationAlert.d.ts +1 -1
- package/dist/src/components/steps/room/UserSearchSummary/PromoCodeVerificationAlert.js +2 -1
- package/dist/src/components/steps/room/UserSearchSummary/PromoCodeVerificationAlert.js.map +1 -1
- package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryPromocodeInput.js +3 -13
- package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryPromocodeInput.js.map +1 -1
- package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js +5 -15
- package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js.map +1 -1
- package/dist/src/components/summary/BESummaryAddonRow.js +1 -1
- package/dist/src/components/summary/BESummaryAddonRow.js.map +1 -1
- package/dist/src/components/summary/BESummaryPerkBlock.js.map +1 -1
- package/dist/src/contexts/BasketContext/BasketContextType.d.ts +1 -1
- package/dist/src/contexts/BasketContext/BasketContextType.js.map +1 -1
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js +37 -20
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextTypes.d.ts +1 -1
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextTypes.js.map +1 -1
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +2 -0
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
- package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.d.ts +3 -1
- package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js +10 -21
- package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js.map +1 -1
- package/dist/src/events/actions/PlacedBookingEvent.d.ts +1 -1
- package/dist/src/events/actions/PlacedBookingEvent.js.map +1 -1
- package/dist/src/events/views/CommittedBookingEvent.d.ts +1 -1
- package/dist/src/events/views/CommittedBookingEvent.js.map +1 -1
- package/dist/src/events/views/RolledBackBookingEvent.d.ts +1 -1
- package/dist/src/events/views/RolledBackBookingEvent.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/mockApi/ReservationAPI.d.ts +1 -1
- package/dist/src/mockApi/ReservationAPI.js.map +1 -1
- package/dist/src/models/Addon/Addon.d.ts +0 -24
- package/dist/src/models/Addon/Addon.js.map +1 -1
- package/dist/src/models/BasketAddonRow.js +3 -5
- package/dist/src/models/BasketAddonRow.js.map +1 -1
- package/dist/src/models/BasketRow.d.ts +60 -4
- package/dist/src/models/BasketRow.js +78 -9
- package/dist/src/models/BasketRow.js.map +1 -1
- package/dist/src/models/Fee.d.ts +1 -9
- package/dist/src/models/Fee.js.map +1 -1
- package/dist/src/models/Room/RoomRateNight.d.ts +1 -1
- package/dist/src/models/Room/RoomRateNight.js.map +1 -1
- package/dist/src/models/RoomstaySession.d.ts +1 -2
- package/dist/src/models/RoomstaySession.js.map +1 -1
- package/dist/src/pages/findReservation/FindReservationResults.js +2 -2
- package/dist/src/pages/findReservation/FindReservationResults.js.map +1 -1
- package/dist/src/pages/findReservation/ReservationRow.d.ts +1 -1
- package/dist/src/pages/findReservation/ReservationRow.js.map +1 -1
- package/dist/src/pages/findReservation/ReservationRowModal.d.ts +1 -1
- package/dist/src/pages/findReservation/ReservationRowModal.js.map +1 -1
- package/dist/src/pages/steps/StepThanks/StepThanksComponent.js +2 -2
- package/dist/src/pages/steps/StepThanks/StepThanksComponent.js.map +1 -1
- package/dist/src/translations/Translation.d.ts +14 -0
- package/dist/src/translations/Translation.js +14 -0
- package/dist/src/translations/Translation.js.map +1 -1
- package/dist/src/translations/languages/en-gb.js +14 -0
- package/dist/src/translations/languages/en-gb.js.map +1 -1
- package/dist/src/util/Analytics/Analytics.d.ts +1 -1
- package/dist/src/util/Analytics/Analytics.js.map +1 -1
- package/dist/src/util/Analytics/GoogleAnalytics4.d.ts +2 -2
- package/dist/src/util/Analytics/GoogleAnalytics4.js.map +1 -1
- package/dist/src/util/Analytics/UniversalAnalytics.d.ts +1 -1
- package/dist/src/util/Analytics/UniversalAnalytics.js.map +1 -1
- package/dist/src/util/DataLayer.d.ts +1 -1
- package/dist/src/util/DataLayer.js.map +1 -1
- package/dist/src/util/DerbysoftPixel.d.ts +1 -1
- package/dist/src/util/DerbysoftPixel.js.map +1 -1
- package/dist/test.bundle.js +1 -1
- package/dist/vendors.bundle.js +1 -1
- package/package.json +2 -2
- package/dist/659.bundle.js +0 -1
- package/dist/src/models/Api/ReservationsDTO.d.ts +0 -80
- package/dist/src/models/Api/ReservationsDTO.js +0 -3
- package/dist/src/models/Api/ReservationsDTO.js.map +0 -1
- package/dist/src/util/TotalCalculator.d.ts +0 -24
- package/dist/src/util/TotalCalculator.js +0 -157
- package/dist/src/util/TotalCalculator.js.map +0 -1
package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsLabel.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrueRewardsLabel.js","sourceRoot":"/","sources":["src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsLabel.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,iDAA+C;AAE/C,kEAA2D;AAC3D,yCAAuC;AACvC,gEAA2C;AAC3C,4DAAyD;AACzD,wCAAqC;AACrC,wDAAiD;AAEjD,kGAAoD;AAEpD,MAAM,gBAAgB,GAAG,GAAG,EAAE;IAC1B,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,EAAE,cAAc,EAAE,GAAG,IAAA,oBAAS,GAAE,CAAC;IACvC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAA,kBAAW,EAAC;QACxC,QAAQ,EAAE,WAAW;KACxB,CAAC,CAAC;IAEH,OAAO,CACH,uCAAK,SAAS,EAAC,yDAAyD;QACpE,uCAAK,SAAS,EAAE,sCAAM,CAAC,IAAI;YACvB,8BAAC,cAAI,IAAC,KAAK,EAAE,yBAAS,CAAC,IAAI,EAAE,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,IAAI,IAC/D,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CACvC,CACL;QACN,8BAAC,cAAI,IAAC,IAAI,QAAC,SAAS,EAAC,QAAQ,EAAC,KAAK,EAAE,aAAK,CAAC,IAAI,EAAE,IAAI,EAAE,eAAQ,CAAC,KAAK;YAChE,MAAM;YACN,WAAW,CACT,CACL,CACT,CAAC;AACN,CAAC,CAAC;AAEF,kBAAe,gBAAgB,CAAC","sourcesContent":["import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport Text, { TextType } from '@/components/generic/Text';\nimport { useBasket } from '@/contexts';\nimport useCurrency from '@/hooks/Currency';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport styles from './TrueRewardsLabel.module.scss';\n\nconst TrueRewardsLabel = () => {\n const { t } = useTranslation();\n const { getTotalPayNow } = useBasket();\n const totalPayNow = getTotalPayNow();\n const { symbol, prettyValue } = useCurrency({\n children: totalPayNow,\n });\n\n return (\n <div className=\"u-flex u-flex-justify-between w-100 u-flex-align-center\">\n <div className={styles.root}>\n <Text align={TextAlign.Left} type={TextType.Small} color={Color.Navy}>\n {t(Translation.Step.Confirmation.GiftCard)}\n </Text>\n </div>\n <Text bold className=\"u-flex\" color={Color.Navy} type={TextType.Small}>\n {symbol}\n {prettyValue}\n </Text>\n </div>\n );\n};\n\nexport default TrueRewardsLabel;\n"]}
|
package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.js
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
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
|
+
};
|
|
34
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
+
};
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.TrueRewardsPaymentMethod = void 0;
|
|
39
|
+
const react_1 = __importStar(require("react"));
|
|
40
|
+
const react_i18next_1 = require("react-i18next");
|
|
41
|
+
const BEButton_1 = __importDefault(require("../../../generic/BEButton"));
|
|
42
|
+
const Icon_1 = require("../../../generic/Icon/Icon");
|
|
43
|
+
const Text_1 = __importStar(require("../../../generic/Text"));
|
|
44
|
+
const TextBox_1 = __importDefault(require("../../../generic/TextBox"));
|
|
45
|
+
const Currency_1 = __importDefault(require("../../../../hooks/Currency"));
|
|
46
|
+
const index_1 = require("../../../../index");
|
|
47
|
+
const Translation_1 = require("../../../../translations/Translation");
|
|
48
|
+
const Color_1 = require("../../../../util/Color");
|
|
49
|
+
const TrueRewardsPaymentMethod_module_scss_1 = __importDefault(require("./TrueRewardsPaymentMethod.module.scss"));
|
|
50
|
+
const TrueRewardsPaymentMethod = () => {
|
|
51
|
+
const { t } = (0, react_i18next_1.useTranslation)();
|
|
52
|
+
const { hotel } = (0, index_1.useCurrentHotel)();
|
|
53
|
+
const { getTotalPayNow } = (0, index_1.useBasket)();
|
|
54
|
+
const totalPayNow = getTotalPayNow();
|
|
55
|
+
const [cardReference, setCardReference] = (0, react_1.useState)('');
|
|
56
|
+
const [cardBalance, setCardBalance] = (0, react_1.useState)(null);
|
|
57
|
+
const [errorMessage, setErrorMessage] = (0, react_1.useState)('');
|
|
58
|
+
const [isLoading, setIsLoading] = (0, react_1.useState)(false);
|
|
59
|
+
const trimmedReference = cardReference.trim();
|
|
60
|
+
const canSubmit = trimmedReference.length > 6;
|
|
61
|
+
const remaining = cardBalance !== null ? cardBalance - totalPayNow : 0;
|
|
62
|
+
const { symbol, prettyValue: remainingPrettyValue, isLoading: isRemainingLoading } = (0, Currency_1.default)({ children: remaining });
|
|
63
|
+
const { prettyValue: cardBalancePrettyValue, isLoading: isCardBalanceLoading } = (0, Currency_1.default)({ children: cardBalance });
|
|
64
|
+
const onSubmit = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
65
|
+
setErrorMessage('');
|
|
66
|
+
setCardBalance(null);
|
|
67
|
+
if (hotel === null || hotel === void 0 ? void 0 : hotel.hotelID) {
|
|
68
|
+
try {
|
|
69
|
+
setIsLoading(true);
|
|
70
|
+
const balance = yield index_1.API.TrueRewards.fetchBalance(trimmedReference, hotel.hotelID);
|
|
71
|
+
if (balance === null) {
|
|
72
|
+
setErrorMessage(t(Translation_1.Translation.Step.Confirmation.TrueRewardsInvalid));
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
setCardBalance(balance);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
console.error(e);
|
|
80
|
+
setErrorMessage(t(Translation_1.Translation.Step.Confirmation.TrueRewardsFailed));
|
|
81
|
+
}
|
|
82
|
+
finally {
|
|
83
|
+
setIsLoading(false);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
return (react_1.default.createElement("div", { className: TrueRewardsPaymentMethod_module_scss_1.default.container },
|
|
88
|
+
react_1.default.createElement("div", { className: TrueRewardsPaymentMethod_module_scss_1.default.inputRow },
|
|
89
|
+
react_1.default.createElement(TextBox_1.default, { value: cardReference, onChange: (val) => {
|
|
90
|
+
setCardReference(val.target.value);
|
|
91
|
+
setErrorMessage('');
|
|
92
|
+
}, placeholder: t(Translation_1.Translation.Step.Confirmation.EnterCode) }),
|
|
93
|
+
react_1.default.createElement(BEButton_1.default, { className: TrueRewardsPaymentMethod_module_scss_1.default.applyCodeButton, isLoading: isLoading, size: "small", onClick: onSubmit, disabled: !canSubmit, icon: cardBalance !== null ? Icon_1.IconType.Check : Icon_1.IconType.ArrowRight, iconPosition: "right", iconSize: "18px", rounded: true }, cardBalance !== null ? t(Translation_1.Translation.Step.Confirmation.CodeApplied) : t(Translation_1.Translation.Step.Confirmation.ApplyCode))),
|
|
94
|
+
cardBalance !== null && !isCardBalanceLoading && !isRemainingLoading ? (react_1.default.createElement("div", { className: TrueRewardsPaymentMethod_module_scss_1.default.infoBlock },
|
|
95
|
+
react_1.default.createElement("div", { className: TrueRewardsPaymentMethod_module_scss_1.default.leftContent },
|
|
96
|
+
react_1.default.createElement(Text_1.default, { bold: true, type: Text_1.TextType.Small }, cardBalance >= totalPayNow ? t(Translation_1.Translation.Step.Confirmation.TrueRewardsCoversFullBooking) : t(Translation_1.Translation.Step.Confirmation.TrueRewardsInsufficient)),
|
|
97
|
+
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, cardBalance >= totalPayNow
|
|
98
|
+
? t(Translation_1.Translation.Step.Confirmation.TrueRewardsCoversFullInstructions)
|
|
99
|
+
: t(Translation_1.Translation.Step.Confirmation.TrueRewardsInsufficientInstructions))),
|
|
100
|
+
react_1.default.createElement("div", { className: TrueRewardsPaymentMethod_module_scss_1.default.rightContent },
|
|
101
|
+
react_1.default.createElement("div", { className: TrueRewardsPaymentMethod_module_scss_1.default.card },
|
|
102
|
+
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, t(Translation_1.Translation.Step.Confirmation.YourBalance)),
|
|
103
|
+
react_1.default.createElement(Text_1.default, { bold: true, color: Color_1.Color.Navy },
|
|
104
|
+
symbol,
|
|
105
|
+
cardBalancePrettyValue)),
|
|
106
|
+
react_1.default.createElement("div", { className: TrueRewardsPaymentMethod_module_scss_1.default.card },
|
|
107
|
+
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, t(Translation_1.Translation.Step.Confirmation.Remaining)),
|
|
108
|
+
react_1.default.createElement(Text_1.default, { bold: true, color: remaining < 0 ? Color_1.Color.Danger : Color_1.Color.Navy },
|
|
109
|
+
symbol,
|
|
110
|
+
remainingPrettyValue))))) : (react_1.default.createElement(react_1.default.Fragment, null,
|
|
111
|
+
errorMessage && (react_1.default.createElement(Text_1.default, { color: Color_1.Color.Danger, type: Text_1.TextType.Small, style: { marginTop: '8px' } }, errorMessage)),
|
|
112
|
+
react_1.default.createElement(Text_1.default, { color: Color_1.Color.DarkGrey, type: Text_1.TextType.Small, style: { marginTop: '8px' } }, t(Translation_1.Translation.Step.Confirmation.TrueRewardsInputHelperText))))));
|
|
113
|
+
};
|
|
114
|
+
exports.TrueRewardsPaymentMethod = TrueRewardsPaymentMethod;
|
|
115
|
+
//# sourceMappingURL=TrueRewardsPaymentMethod.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrueRewardsPaymentMethod.js","sourceRoot":"/","sources":["src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { FC, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport BEButton from '@/components/generic/BEButton';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport Text, { TextType } from '@/components/generic/Text';\nimport TextBox from '@/components/generic/TextBox';\nimport useCurrency from '@/hooks/Currency';\nimport { API, useBasket, useCurrentHotel } from '@/index';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\nimport styles from './TrueRewardsPaymentMethod.module.scss';\n\nexport const TrueRewardsPaymentMethod: FC = () => {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const { getTotalPayNow } = useBasket();\n const totalPayNow = getTotalPayNow();\n\n const [cardReference, setCardReference] = useState('');\n const [cardBalance, setCardBalance] = useState<number | null>(null);\n const [errorMessage, setErrorMessage] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n\n const trimmedReference = cardReference.trim();\n const canSubmit = trimmedReference.length > 6;\n const remaining = cardBalance !== null ? cardBalance - totalPayNow : 0;\n\n const { symbol, prettyValue: remainingPrettyValue, isLoading: isRemainingLoading } = useCurrency({ children: remaining });\n const { prettyValue: cardBalancePrettyValue, isLoading: isCardBalanceLoading } = useCurrency({ children: cardBalance });\n\n const onSubmit = async () => {\n setErrorMessage('');\n setCardBalance(null);\n\n if (hotel?.hotelID) {\n try {\n setIsLoading(true);\n const balance = await API.TrueRewards.fetchBalance(trimmedReference, hotel.hotelID);\n\n if (balance === null) {\n setErrorMessage(t(Translation.Step.Confirmation.TrueRewardsInvalid));\n } else {\n setCardBalance(balance);\n }\n } catch (e) {\n console.error(e);\n setErrorMessage(t(Translation.Step.Confirmation.TrueRewardsFailed));\n } finally {\n setIsLoading(false);\n }\n }\n };\n\n return (\n <div className={styles.container}>\n <div className={styles.inputRow}>\n <TextBox\n value={cardReference}\n onChange={(val) => {\n setCardReference(val.target.value);\n setErrorMessage('');\n }}\n placeholder={t(Translation.Step.Confirmation.EnterCode)}\n />\n <BEButton\n className={styles.applyCodeButton}\n isLoading={isLoading}\n size=\"small\"\n onClick={onSubmit}\n disabled={!canSubmit}\n icon={cardBalance !== null ? IconType.Check : IconType.ArrowRight}\n iconPosition=\"right\"\n iconSize=\"18px\"\n rounded\n >\n {cardBalance !== null ? t(Translation.Step.Confirmation.CodeApplied) : t(Translation.Step.Confirmation.ApplyCode)}\n </BEButton>\n </div>\n {cardBalance !== null && !isCardBalanceLoading && !isRemainingLoading ? (\n <div className={styles.infoBlock}>\n <div className={styles.leftContent}>\n <Text bold type={TextType.Small}>\n {cardBalance >= totalPayNow ? t(Translation.Step.Confirmation.TrueRewardsCoversFullBooking) : t(Translation.Step.Confirmation.TrueRewardsInsufficient)}\n </Text>\n <Text type={TextType.Small}>\n {cardBalance >= totalPayNow\n ? t(Translation.Step.Confirmation.TrueRewardsCoversFullInstructions)\n : t(Translation.Step.Confirmation.TrueRewardsInsufficientInstructions)}\n </Text>\n </div>\n <div className={styles.rightContent}>\n <div className={styles.card}>\n <Text type={TextType.Small}>{t(Translation.Step.Confirmation.YourBalance)}</Text>\n <Text bold color={Color.Navy}>\n {symbol}\n {cardBalancePrettyValue}\n </Text>\n </div>\n <div className={styles.card}>\n <Text type={TextType.Small}>{t(Translation.Step.Confirmation.Remaining)}</Text>\n <Text bold color={remaining < 0 ? Color.Danger : Color.Navy}>\n {symbol}\n {remainingPrettyValue}\n </Text>\n </div>\n </div>\n </div>\n ) : (\n <>\n {errorMessage && (\n <Text color={Color.Danger} type={TextType.Small} style={{ marginTop: '8px' }}>\n {errorMessage}\n </Text>\n )}\n <Text color={Color.DarkGrey} type={TextType.Small} style={{ marginTop: '8px' }}>\n {t(Translation.Step.Confirmation.TrueRewardsInputHelperText)}\n </Text>\n </>\n )}\n </div>\n );\n};\n"]}
|
|
@@ -36,7 +36,7 @@ const Icon_1 = require("../../generic/Icon/Icon");
|
|
|
36
36
|
const PromoCodeInput_1 = __importDefault(require("../../generic/PromoCodeInput"));
|
|
37
37
|
const OccupancyWarningBlock_1 = __importDefault(require("./OccupancyWarningBlock"));
|
|
38
38
|
const PeoplePickerRow_1 = __importDefault(require("./PeoplePickerRow"));
|
|
39
|
-
const BasketRow_1 =
|
|
39
|
+
const BasketRow_1 = __importStar(require("../../../models/BasketRow"));
|
|
40
40
|
const DataLayer_1 = __importStar(require("../../../util/DataLayer"));
|
|
41
41
|
function PeoplePicker() {
|
|
42
42
|
var _a, _b;
|
|
@@ -102,7 +102,7 @@ function PeoplePicker() {
|
|
|
102
102
|
}, onChange: changeRoomValues, onRemove: removeBasketRowHandler })));
|
|
103
103
|
}),
|
|
104
104
|
react_1.default.createElement("div", { className: "u-marg-bottom" },
|
|
105
|
-
react_1.default.createElement(PromoCodeInput_1.default, { value: promocode, onChange: changePromoCode, valid: !promocode || promoCodeStatus === null || promoCodeStatus ===
|
|
105
|
+
react_1.default.createElement(PromoCodeInput_1.default, { value: promocode, onChange: changePromoCode, valid: !promocode || promoCodeStatus === null || promoCodeStatus === BasketRow_1.EPromoCodeStatus.New ? undefined : promoCodeStatus === BasketRow_1.EPromoCodeStatus.Valid, variant: "outlined", row: context.selectedBasketRow })),
|
|
106
106
|
react_1.default.createElement(BEButton_1.default, { isText: true, primary: true, icon: Icon_1.IconType.Add, stopIconAnimation: true, onClick: addAnotherRoomOnClickHandler }, t(Translation_1.Translation.Misc.AddAnotherRoom)),
|
|
107
107
|
react_1.default.createElement(OccupancyWarningBlock_1.default, null)));
|
|
108
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PeoplePicker.js","sourceRoot":"/","sources":["src/components/steps/date/PeoplePicker.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmD;AACnD,2CAAkD;AAClD,+CAA0C;AAC1C,iDAA+C;AAC/C,0DAAuD;AAEvD,6EAAqD;AACrD,yDAA0D;AAC1D,yFAAiE;AACjE,0GAAkF;AAClF,8FAA+F;AAC/F,
|
|
1
|
+
{"version":3,"file":"PeoplePicker.js","sourceRoot":"/","sources":["src/components/steps/date/PeoplePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport PromoCodeInput from '@/components/generic/PromoCodeInput';\nimport OccupancyWarningBlock from '@/components/steps/date/OccupancyWarningBlock';\nimport PeoplePickerRow, { PeoplePickerDetails } from '@/components/steps/date/PeoplePickerRow';\nimport BasketRow, { EPromoCodeStatus } from '@/models/BasketRow';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\n\nexport default function PeoplePicker() {\n const context = useContext(BasketContext);\n const { hotel } = useCurrentHotel();\n\n const updateRoomValues = (row: BasketRow, values: PeoplePickerDetails) => {\n const { adults, children, infants, promoCode } = values;\n\n if (adults !== row.getAdults()) {\n row.setAdults(adults);\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.DATES);\n }\n if (children !== row.getChildren()) {\n row.setChildren(children);\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.DATES);\n }\n\n if (infants !== row.getInfants()) {\n row.setInfants(infants);\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.DATES);\n }\n\n if (promoCode !== row.getPromoCode()) {\n DataLayer.instance.sendInteraction('Promo Code', InteractionType.FORM_FIELD, InteractionStep.DATES);\n row.setPromoCode(promoCode);\n }\n\n context.updateBasketRow(row);\n };\n\n const basketRows = context.currentBasketRows;\n const { t } = useTranslation();\n\n const addNewBasketRow = () => {\n context.addBasketRow(new BasketRow());\n };\n\n const updatePromoCode = (code: string) => {\n if (context.selectedBasketRow) {\n context.selectedBasketRow.setManualInputPromoCode(!!true);\n context.selectedBasketRow.setPromoCode(code);\n context.updateBasketRow(context.selectedBasketRow);\n }\n };\n\n const selectedRow = context.selectedBasketRow;\n\n const promoCodeStatus = selectedRow?.getPromoCodeStatus() ?? null;\n const addAnotherRoomOnClickHandler = () => {\n DataLayer.instance.sendInteraction('Add Another Room', InteractionType.BUTTON, InteractionStep.DATES);\n addNewBasketRow();\n };\n const changePromoCode = (val: any) => {\n updatePromoCode(val);\n };\n\n const promocode = context.selectedBasketRow?.getPromoCode(hotel?.memberOnlyPromoCode);\n\n return (\n <div className=\"people-picker--items\">\n {basketRows.map((item, index) => {\n const changeRoomValues = (val: any) => {\n updateRoomValues(item, val);\n };\n const removeBasketRowHandler = () => {\n context.removeBasketRow(item);\n };\n return (\n <div key={item.getID()}>\n <PeoplePickerRow\n number={index}\n details={{\n adults: item.getAdults(),\n children: item.getChildren(),\n infants: item.getInfants(),\n promoCode: item.getPromoCode(),\n roomCode: item.getRoomCode(),\n }}\n onChange={changeRoomValues}\n onRemove={removeBasketRowHandler}\n />\n </div>\n );\n })}\n <div className=\"u-marg-bottom\">\n <PromoCodeInput\n value={promocode}\n onChange={changePromoCode}\n valid={!promocode || promoCodeStatus === null || promoCodeStatus === EPromoCodeStatus.New ? undefined : promoCodeStatus === EPromoCodeStatus.Valid}\n variant=\"outlined\"\n row={context.selectedBasketRow}\n />\n </div>\n\n <BEButton isText primary icon={IconType.Add} stopIconAnimation onClick={addAnotherRoomOnClickHandler}>\n {t(Translation.Misc.AddAnotherRoom)}\n </BEButton>\n <OccupancyWarningBlock />\n </div>\n );\n}\n"]}
|
|
@@ -39,6 +39,7 @@ const Select_1 = require("../../generic/Select/Select");
|
|
|
39
39
|
const Text_1 = __importStar(require("../../generic/Text"));
|
|
40
40
|
const Tooltip_1 = __importDefault(require("../../generic/Tooltip/Tooltip"));
|
|
41
41
|
const useSearchScopeHook_1 = require("../../../hooks/useSearchScopeHook");
|
|
42
|
+
const BasketRow_1 = require("../../../models/BasketRow");
|
|
42
43
|
const Color_1 = require("../../../util/Color");
|
|
43
44
|
const DataLayer_1 = __importStar(require("../../../util/DataLayer"));
|
|
44
45
|
const ScreenSize_1 = __importDefault(require("../../../util/ScreenSize"));
|
|
@@ -52,18 +53,7 @@ const HotelSearchParameters = () => {
|
|
|
52
53
|
const { t } = (0, react_i18next_1.useTranslation)();
|
|
53
54
|
const engineContext = (0, react_1.useContext)(contexts_1.BookingEngineContext);
|
|
54
55
|
const { showChildren } = (0, useSearchScopeHook_1.useSearchScopeHook)();
|
|
55
|
-
|
|
56
|
-
if ((row === null || row === void 0 ? void 0 : row.getPromoCodeStatus()) === 'new') {
|
|
57
|
-
promoCodeTooltip = row.getPromoCode() ? t(Translation_1.Translation.Step.Date.PromoCodeTooltip.Checking) : t(Translation_1.Translation.Step.Date.PromoCodeTooltip.NoValue);
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
if ((row === null || row === void 0 ? void 0 : row.getPromoCodeStatus()) === 'valid') {
|
|
61
|
-
promoCodeTooltip = t(Translation_1.Translation.Step.Date.PromoCodeTooltip.Valid);
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
promoCodeTooltip = t(Translation_1.Translation.Step.Date.PromoCodeTooltip.Invalid);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
56
|
+
const promoCodeTooltip = (row === null || row === void 0 ? void 0 : row.getPromoCodeTooltip(t, Translation_1.Translation)) || '';
|
|
67
57
|
const updateDateValues = (startDate, endDate) => {
|
|
68
58
|
if (startDate) {
|
|
69
59
|
row.setStartDate(startDate);
|
|
@@ -178,7 +168,9 @@ const HotelSearchParameters = () => {
|
|
|
178
168
|
react_1.default.createElement(Overlay_1.Overlay, { open: isPromoModalOpen, followElement: thisElement.current, onClose: setPromoCodeOnClose },
|
|
179
169
|
react_1.default.createElement("div", { className: "u-pad--heavy" },
|
|
180
170
|
react_1.default.createElement("div", null,
|
|
181
|
-
react_1.default.createElement(PromoCodeInput_1.default, { value: (_e = context.selectedBasketRow) === null || _e === void 0 ? void 0 : _e.getPromoCode(), onChange: changePromoCode, valid: ((_f = context.selectedBasketRow) === null || _f === void 0 ? void 0 : _f.getPromoCodeStatus()) !==
|
|
171
|
+
react_1.default.createElement(PromoCodeInput_1.default, { value: (_e = context.selectedBasketRow) === null || _e === void 0 ? void 0 : _e.getPromoCode(), onChange: changePromoCode, valid: ((_f = context.selectedBasketRow) === null || _f === void 0 ? void 0 : _f.getPromoCodeStatus()) !== BasketRow_1.EPromoCodeStatus.New
|
|
172
|
+
? ((_g = context.selectedBasketRow) === null || _g === void 0 ? void 0 : _g.getPromoCodeStatus()) === BasketRow_1.EPromoCodeStatus.Valid
|
|
173
|
+
: undefined, row: context.selectedBasketRow })),
|
|
182
174
|
react_1.default.createElement("div", { className: "u-flex justify-content-end align-items-center u-marg-top" },
|
|
183
175
|
react_1.default.createElement(BEButton_1.default, { isText: true, size: "small", onClick: cancelPromoPopupOnClick }, t(Translation_1.Translation.Misc.Cancel)))))))))));
|
|
184
176
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HotelSearchParameters.js","sourceRoot":"/","sources":["src/components/steps/hotel/HotelSearchParameters.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport dayjs from 'dayjs';\nimport React, { useContext, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport FloatingDatePicker from '@/components/generic/date/FloatingDatePicker';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\nimport PromoCodeInput from '@/components/generic/PromoCodeInput';\nimport { IDefaultSelectOption, Select } from '@/components/generic/Select/Select';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport { useSearchScopeHook } from '@/hooks/useSearchScopeHook';\nimport { Color } from '@/util/Color';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\nimport ScreenSize from '@/util/ScreenSize';\nimport StringHelper from '@/util/StringHelper';\n\nimport { useCurrentHotel } from '../../../hooks';\n\nconst HotelSearchParameters = () => {\n const { hotel } = useCurrentHotel();\n const context = useContext(BasketContext);\n const row = context.currentBasketRows[0];\n\n const { t } = useTranslation();\n const engineContext = useContext(BookingEngineContext);\n const { showChildren } = useSearchScopeHook();\n let promoCodeTooltip = '';\n\n if (row?.getPromoCodeStatus() === 'new') {\n promoCodeTooltip = row.getPromoCode() ? t(Translation.Step.Date.PromoCodeTooltip.Checking) : t(Translation.Step.Date.PromoCodeTooltip.NoValue);\n } else {\n if (row?.getPromoCodeStatus() === 'valid') {\n promoCodeTooltip = t(Translation.Step.Date.PromoCodeTooltip.Valid);\n } else {\n promoCodeTooltip = t(Translation.Step.Date.PromoCodeTooltip.Invalid);\n }\n }\n const updateDateValues = (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => {\n if (startDate) {\n row.setStartDate(startDate);\n }\n\n if (endDate) {\n row.setEndDate(endDate);\n }\n\n context.updateBasketRow(row);\n };\n const updatePeopleValues = ({ adults, children, infants, updatedPromoCode }: { adults?: number; children?: number; infants?: number; updatedPromoCode?: string }) => {\n if (adults && adults !== row.getAdults()) {\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.ROOMS);\n row.setAdults(adults);\n }\n\n if ((children || children === 0) && children !== row.getChildren()) {\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.ROOMS);\n row.setChildren(children);\n }\n\n if ((infants || infants === 0) && infants !== row.getInfants()) {\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.ROOMS);\n row.setInfants(infants);\n }\n\n if ((updatedPromoCode || updatedPromoCode === '') && updatedPromoCode !== row.getPromoCode()) {\n DataLayer.instance.sendInteraction('Promo Code', InteractionType.FORM_FIELD, InteractionStep.ROOMS);\n row.setPromoCode(updatedPromoCode);\n }\n\n context.updateBasketRow(row);\n };\n\n const [isPromoModalOpen, setIsPromoModalOpen] = useState(false);\n const [promoCode, setPromoCode] = useState(row.getPromoCode());\n const updatePromoCode = (code: string) => {\n DataLayer.instance.sendInteraction('Promo Code', InteractionType.FORM_FIELD, InteractionStep.ROOMS);\n\n if (context.selectedBasketRow) {\n context.selectedBasketRow.setPromoCode(code);\n context.updateBasketRow(context.selectedBasketRow);\n\n if (code) {\n setIsPromoModalOpen(false);\n }\n }\n };\n const thisElement = useRef<HTMLDivElement | null>(null);\n const openPromoModalOnClick = () => {\n return setIsPromoModalOpen(true);\n };\n const setPromoCodeOnClose = () => {\n setPromoCode(row.getPromoCode());\n setIsPromoModalOpen(false);\n };\n const cancelPromoPopupOnClick = () => {\n DataLayer.instance.sendInteraction('Cancel Promo Popup', InteractionType.BUTTON, InteractionStep.ROOMS);\n setPromoCode(row.getPromoCode());\n setIsPromoModalOpen(false);\n };\n const changePromoCode = (val: any) => {\n updatePromoCode(val);\n };\n const updateNumberOfAdultsOnChange = (value: string) => {\n updatePeopleValues({ adults: +value });\n };\n const updateNumberOfChildrenOnChange = (value: string) => {\n updatePeopleValues({ children: +value });\n };\n const updateNumberOfInfantsOnChange = (value: string) => {\n updatePeopleValues({ infants: +value });\n };\n\n return (\n <div className=\"u-pad u-rounded hotel-search-parameters u-marg-bottom--heavy\">\n <div>\n <div className=\"u-flex w-100\">\n <div className=\"u-flex flex-wrap flex-xl-nowrap flex-row u-w-100@xl-\">\n <div className={engineContext.screenSize <= ScreenSize.Large ? 'u-marg-bottom--light' : ''}>\n <Text>\n <strong className=\"u-nowrap\">{t(Translation.Step.Date.SelectYourDate)}</strong>\n </Text>\n </div>\n <>\n <Tooltip title={t(Translation.Step.Date.UpdateAdults)} wrapperClasses=\"u-w-100@xl-\">\n <div className=\"room-builder-progress--value\">\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={[...Array(15)].map((v: any, value: number) => {\n value += 1;\n return {\n text: StringHelper.pluralWithDictAndCount(value, Translation.Step.Date.Adult, t),\n value: value.toString(),\n };\n })}\n value={row.getAdults()?.toString()}\n onChange={updateNumberOfAdultsOnChange}\n keyName=\"value\"\n labelName=\"text\"\n />\n </div>\n </Tooltip>\n {showChildren ? (\n <Tooltip title={t(Translation.Step.Date.UpdateChildren)} wrapperClasses=\"u-w-100@xl-\">\n <div className=\"room-builder-progress--value\">\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={[...Array(15)].map((v: any, value: number) => {\n return {\n text: StringHelper.pluralWithDictAndCount(value, Translation.Step.Date.Child, t),\n value: value.toString(),\n };\n })}\n value={row.getChildren()?.toString()}\n onChange={updateNumberOfChildrenOnChange}\n keyName=\"value\"\n labelName=\"text\"\n />\n </div>\n </Tooltip>\n ) : null}\n {hotel?.childConfiguration?.supportInfants ? (\n <Tooltip title={t(Translation.Step.Date.UpdateInfants)} wrapperClasses=\"u-w-100@xl-\">\n <div className=\"room-builder-progress--value\">\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={[...Array(15)].map((v: any, value: number) => {\n return {\n text: StringHelper.pluralWithDictAndCount(value, Translation.Step.Date.Infant, t),\n value: value.toString(),\n };\n })}\n value={row.getInfants()?.toString()}\n onChange={updateNumberOfInfantsOnChange}\n keyName=\"value\"\n labelName=\"text\"\n />\n </div>\n </Tooltip>\n ) : null}\n <>\n <div className=\"room-builder-progress--value\">\n <FloatingDatePicker\n startDate={row.getStartDate()}\n selectedDateChanged={updateDateValues}\n className=\"u-w-100@xl- d-flex align-items-center justify-content-center\"\n >\n <Tooltip title={t(Translation.Step.Date.SelectArrivalAndDepartureDatesByClickingHere)}>\n <div className=\"u-flex align-items-center justify-content-center u-w-100@xl- u-cursor-pointer\">\n <Text color={Color.Accent} bold>\n {row.getArrivalDate()}\n </Text>\n <Icon icon={IconType.ArrowRight2} />\n <Text color={Color.Accent} bold>\n {row.getDepartureDate()}\n </Text>\n </div>\n </Tooltip>\n </FloatingDatePicker>\n </div>\n\n <Tooltip title={promoCodeTooltip} wrapperClasses=\"u-w-100@xl-\">\n <div className=\"room-builder-progress--value u-cursor-pointer\" ref={thisElement} onClick={openPromoModalOnClick}>\n <div className=\"u-flex align-items-center justify-content-center u-w-100@xl-\">\n <Text className=\"u-pad-right--light\" type={TextType.Body} color={row.getPromoCode() ? row.getPromoCodeColour() : Color.Navy}>\n {row.getPromoCode() ? row.getPromoCode() : 'Promo Code'}\n </Text>\n <Icon icon={IconType.Dropdown} color={Color.DarkGrey} />\n </div>\n </div>\n </Tooltip>\n </>\n\n <Overlay open={isPromoModalOpen} followElement={thisElement.current} onClose={setPromoCodeOnClose}>\n <div className=\"u-pad--heavy\">\n <div>\n <PromoCodeInput\n value={context.selectedBasketRow?.getPromoCode()}\n onChange={changePromoCode}\n valid={\n context.selectedBasketRow?.getPromoCodeStatus() !== 'new' ? context.selectedBasketRow?.getPromoCodeStatus() === 'valid' : undefined\n }\n />\n </div>\n <div className=\"u-flex justify-content-end align-items-center u-marg-top\">\n <BEButton isText size=\"small\" onClick={cancelPromoPopupOnClick}>\n {t(Translation.Misc.Cancel)}\n </BEButton>\n </div>\n </div>\n </Overlay>\n </>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default HotelSearchParameters;\n"]}
|
|
1
|
+
{"version":3,"file":"HotelSearchParameters.js","sourceRoot":"/","sources":["src/components/steps/hotel/HotelSearchParameters.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport dayjs from 'dayjs';\nimport React, { useContext, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport FloatingDatePicker from '@/components/generic/date/FloatingDatePicker';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\nimport PromoCodeInput from '@/components/generic/PromoCodeInput';\nimport { IDefaultSelectOption, Select } from '@/components/generic/Select/Select';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport { useSearchScopeHook } from '@/hooks/useSearchScopeHook';\nimport { EPromoCodeStatus } from '@/models/BasketRow';\nimport { Color } from '@/util/Color';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\nimport ScreenSize from '@/util/ScreenSize';\nimport StringHelper from '@/util/StringHelper';\n\nimport { useCurrentHotel } from '../../../hooks';\n\nconst HotelSearchParameters = () => {\n const { hotel } = useCurrentHotel();\n const context = useContext(BasketContext);\n const row = context.currentBasketRows[0];\n\n const { t } = useTranslation();\n const engineContext = useContext(BookingEngineContext);\n const { showChildren } = useSearchScopeHook();\n const promoCodeTooltip = row?.getPromoCodeTooltip(t, Translation) || '';\n const updateDateValues = (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => {\n if (startDate) {\n row.setStartDate(startDate);\n }\n\n if (endDate) {\n row.setEndDate(endDate);\n }\n\n context.updateBasketRow(row);\n };\n const updatePeopleValues = ({ adults, children, infants, updatedPromoCode }: { adults?: number; children?: number; infants?: number; updatedPromoCode?: string }) => {\n if (adults && adults !== row.getAdults()) {\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.ROOMS);\n row.setAdults(adults);\n }\n\n if ((children || children === 0) && children !== row.getChildren()) {\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.ROOMS);\n row.setChildren(children);\n }\n\n if ((infants || infants === 0) && infants !== row.getInfants()) {\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.ROOMS);\n row.setInfants(infants);\n }\n\n if ((updatedPromoCode || updatedPromoCode === '') && updatedPromoCode !== row.getPromoCode()) {\n DataLayer.instance.sendInteraction('Promo Code', InteractionType.FORM_FIELD, InteractionStep.ROOMS);\n row.setPromoCode(updatedPromoCode);\n }\n\n context.updateBasketRow(row);\n };\n\n const [isPromoModalOpen, setIsPromoModalOpen] = useState(false);\n const [promoCode, setPromoCode] = useState(row.getPromoCode());\n const updatePromoCode = (code: string) => {\n DataLayer.instance.sendInteraction('Promo Code', InteractionType.FORM_FIELD, InteractionStep.ROOMS);\n\n if (context.selectedBasketRow) {\n context.selectedBasketRow.setPromoCode(code);\n context.updateBasketRow(context.selectedBasketRow);\n\n if (code) {\n setIsPromoModalOpen(false);\n }\n }\n };\n const thisElement = useRef<HTMLDivElement | null>(null);\n const openPromoModalOnClick = () => {\n return setIsPromoModalOpen(true);\n };\n const setPromoCodeOnClose = () => {\n setPromoCode(row.getPromoCode());\n setIsPromoModalOpen(false);\n };\n const cancelPromoPopupOnClick = () => {\n DataLayer.instance.sendInteraction('Cancel Promo Popup', InteractionType.BUTTON, InteractionStep.ROOMS);\n setPromoCode(row.getPromoCode());\n setIsPromoModalOpen(false);\n };\n const changePromoCode = (val: any) => {\n updatePromoCode(val);\n };\n const updateNumberOfAdultsOnChange = (value: string) => {\n updatePeopleValues({ adults: +value });\n };\n const updateNumberOfChildrenOnChange = (value: string) => {\n updatePeopleValues({ children: +value });\n };\n const updateNumberOfInfantsOnChange = (value: string) => {\n updatePeopleValues({ infants: +value });\n };\n\n return (\n <div className=\"u-pad u-rounded hotel-search-parameters u-marg-bottom--heavy\">\n <div>\n <div className=\"u-flex w-100\">\n <div className=\"u-flex flex-wrap flex-xl-nowrap flex-row u-w-100@xl-\">\n <div className={engineContext.screenSize <= ScreenSize.Large ? 'u-marg-bottom--light' : ''}>\n <Text>\n <strong className=\"u-nowrap\">{t(Translation.Step.Date.SelectYourDate)}</strong>\n </Text>\n </div>\n <>\n <Tooltip title={t(Translation.Step.Date.UpdateAdults)} wrapperClasses=\"u-w-100@xl-\">\n <div className=\"room-builder-progress--value\">\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={[...Array(15)].map((v: any, value: number) => {\n value += 1;\n return {\n text: StringHelper.pluralWithDictAndCount(value, Translation.Step.Date.Adult, t),\n value: value.toString(),\n };\n })}\n value={row.getAdults()?.toString()}\n onChange={updateNumberOfAdultsOnChange}\n keyName=\"value\"\n labelName=\"text\"\n />\n </div>\n </Tooltip>\n {showChildren ? (\n <Tooltip title={t(Translation.Step.Date.UpdateChildren)} wrapperClasses=\"u-w-100@xl-\">\n <div className=\"room-builder-progress--value\">\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={[...Array(15)].map((v: any, value: number) => {\n return {\n text: StringHelper.pluralWithDictAndCount(value, Translation.Step.Date.Child, t),\n value: value.toString(),\n };\n })}\n value={row.getChildren()?.toString()}\n onChange={updateNumberOfChildrenOnChange}\n keyName=\"value\"\n labelName=\"text\"\n />\n </div>\n </Tooltip>\n ) : null}\n {hotel?.childConfiguration?.supportInfants ? (\n <Tooltip title={t(Translation.Step.Date.UpdateInfants)} wrapperClasses=\"u-w-100@xl-\">\n <div className=\"room-builder-progress--value\">\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={[...Array(15)].map((v: any, value: number) => {\n return {\n text: StringHelper.pluralWithDictAndCount(value, Translation.Step.Date.Infant, t),\n value: value.toString(),\n };\n })}\n value={row.getInfants()?.toString()}\n onChange={updateNumberOfInfantsOnChange}\n keyName=\"value\"\n labelName=\"text\"\n />\n </div>\n </Tooltip>\n ) : null}\n <>\n <div className=\"room-builder-progress--value\">\n <FloatingDatePicker\n startDate={row.getStartDate()}\n selectedDateChanged={updateDateValues}\n className=\"u-w-100@xl- d-flex align-items-center justify-content-center\"\n >\n <Tooltip title={t(Translation.Step.Date.SelectArrivalAndDepartureDatesByClickingHere)}>\n <div className=\"u-flex align-items-center justify-content-center u-w-100@xl- u-cursor-pointer\">\n <Text color={Color.Accent} bold>\n {row.getArrivalDate()}\n </Text>\n <Icon icon={IconType.ArrowRight2} />\n <Text color={Color.Accent} bold>\n {row.getDepartureDate()}\n </Text>\n </div>\n </Tooltip>\n </FloatingDatePicker>\n </div>\n\n <Tooltip title={promoCodeTooltip} wrapperClasses=\"u-w-100@xl-\">\n <div className=\"room-builder-progress--value u-cursor-pointer\" ref={thisElement} onClick={openPromoModalOnClick}>\n <div className=\"u-flex align-items-center justify-content-center u-w-100@xl-\">\n <Text className=\"u-pad-right--light\" type={TextType.Body} color={row.getPromoCode() ? row.getPromoCodeColour() : Color.Navy}>\n {row.getPromoCode() ? row.getPromoCode() : 'Promo Code'}\n </Text>\n <Icon icon={IconType.Dropdown} color={Color.DarkGrey} />\n </div>\n </div>\n </Tooltip>\n </>\n\n <Overlay open={isPromoModalOpen} followElement={thisElement.current} onClose={setPromoCodeOnClose}>\n <div className=\"u-pad--heavy\">\n <div>\n <PromoCodeInput\n value={context.selectedBasketRow?.getPromoCode()}\n onChange={changePromoCode}\n valid={\n context.selectedBasketRow?.getPromoCodeStatus() !== EPromoCodeStatus.New\n ? context.selectedBasketRow?.getPromoCodeStatus() === EPromoCodeStatus.Valid\n : undefined\n }\n row={context.selectedBasketRow}\n />\n </div>\n <div className=\"u-flex justify-content-end align-items-center u-marg-top\">\n <BEButton isText size=\"small\" onClick={cancelPromoPopupOnClick}>\n {t(Translation.Misc.Cancel)}\n </BEButton>\n </div>\n </div>\n </Overlay>\n </>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default HotelSearchParameters;\n"]}
|
|
@@ -32,13 +32,14 @@ const react_1 = __importStar(require("react"));
|
|
|
32
32
|
const Icon_1 = require("../../../generic/Icon/Icon");
|
|
33
33
|
const SimpleModal_1 = __importStar(require("../../../generic/modal/SimpleModal"));
|
|
34
34
|
const Text_1 = __importDefault(require("../../../generic/Text"));
|
|
35
|
+
const BasketRow_1 = require("../../../../models/BasketRow");
|
|
35
36
|
const generateWarning = (promoCode) => `Invalid promo code: ${promoCode}`;
|
|
36
37
|
const PromoCodeVerificationAlert = ({ selectedBasketRow }) => {
|
|
37
38
|
const notifications = (0, react_1.useContext)(contexts_1.NotificationContext);
|
|
38
39
|
const { showPromoCodeAlert, promoCodeAlertType } = (0, react_1.useContext)(contexts_1.HotelOverridesContext);
|
|
39
40
|
const [showPromoCodeAlertPopup, setShowPromoCodeAlertPopup] = (0, react_1.useState)(false);
|
|
40
41
|
const invalidPromoCodes = (0, react_1.useMemo)(() => {
|
|
41
|
-
if ((selectedBasketRow === null || selectedBasketRow === void 0 ? void 0 : selectedBasketRow.getPromoCodeStatus()) ===
|
|
42
|
+
if ((selectedBasketRow === null || selectedBasketRow === void 0 ? void 0 : selectedBasketRow.getPromoCodeStatus()) === BasketRow_1.EPromoCodeStatus.Invalid) {
|
|
42
43
|
return [selectedBasketRow.getPromoCode()];
|
|
43
44
|
}
|
|
44
45
|
return [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromoCodeVerificationAlert.js","sourceRoot":"/","sources":["src/components/steps/room/UserSearchSummary/PromoCodeVerificationAlert.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAgF;AAChF,+CAAwE;AAExE,yDAA0D;AAC1D,sFAAsF;AACtF,qEAA6C;
|
|
1
|
+
{"version":3,"file":"PromoCodeVerificationAlert.js","sourceRoot":"/","sources":["src/components/steps/room/UserSearchSummary/PromoCodeVerificationAlert.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAgF;AAChF,+CAAwE;AAExE,yDAA0D;AAC1D,sFAAsF;AACtF,qEAA6C;AAC7C,kDAAiE;AAEjE,MAAM,eAAe,GAAG,CAAC,SAAiB,EAAE,EAAE,CAAC,uBAAuB,SAAS,EAAE,CAAC;AAE3E,MAAM,0BAA0B,GAAG,CAAC,EAAE,iBAAiB,EAA2C,EAAE,EAAE;IACzG,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,8BAAmB,CAAC,CAAC;IACtD,MAAM,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,GAAG,IAAA,kBAAU,EAAC,gCAAqB,CAAC,CAAC;IACrF,MAAM,CAAC,uBAAuB,EAAE,0BAA0B,CAAC,GAAG,IAAA,gBAAQ,EAAU,KAAK,CAAC,CAAC;IAEvF,MAAM,iBAAiB,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QACnC,IAAI,CAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,kBAAkB,EAAE,MAAK,4BAAgB,CAAC,OAAO,EAAE;YACtE,OAAO,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC;SAC7C;QACD,OAAO,EAAE,CAAC;IACd,CAAC,EAAE,CAAC,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;IAE9C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,kBAAkB,KAAK,cAAc,EAAE;YACvC,iBAAiB,CAAC,OAAO,CAAC,CAAC,SAAiB,EAAE,EAAE;gBAC5C,aAAa,CAAC,eAAe,CAAC;oBAC1B,IAAI,EAAE,eAAQ,CAAC,KAAK;oBACpB,QAAQ,EAAE,8BAAC,cAAI,IAAC,MAAM,UAAE,eAAe,CAAC,SAAS,CAAC,CAAQ;iBAC7D,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;SACN;QACD,IAAI,kBAAkB,KAAK,OAAO,IAAI,iBAAiB,CAAC,MAAM,EAAE;YAC5D,0BAA0B,CAAC,IAAI,CAAC,CAAC;SACpC;IACL,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAExC,IAAI,CAAC,kBAAkB,IAAI,CAAC,iBAAiB;QAAE,OAAO,6DAAK,CAAC;IAE5D,OAAO,CACH,8DACK,kBAAkB,KAAK,OAAO,IAAI,CAC/B,8BAAC,qBAAW,IAAC,IAAI,EAAE,uBAAuB,EAAE,WAAW,QAAC,IAAI,EAAE,6BAAe,CAAC,UAAU,EAAE,KAAK,EAAC,SAAS,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,0BAA0B,CAAC,KAAK,CAAC;QACtJ,uCAAK,SAAS,EAAC,wBAAwB;YACnC,uCAAK,SAAS,EAAC,eAAe,IACzB,iBAAiB,CAAC,GAAG,CAAC,CAAC,SAAiB,EAAE,EAAE;gBACzC,OAAO,8BAAC,cAAI,IAAC,GAAG,EAAE,SAAS,IAAG,eAAe,CAAC,SAAS,CAAC,CAAQ,CAAC;YACrE,CAAC,CAAC,CACA,CACJ,CACI,CACjB,CACF,CACN,CAAC;AACN,CAAC,CAAC;AA3CW,QAAA,0BAA0B,8BA2CrC","sourcesContent":["import { HotelOverridesContext, NotificationContext } from '@frontend/contexts';\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\n\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport SimpleModal, { SimpleModalSize } from '@/components/generic/modal/SimpleModal';\nimport Text from '@/components/generic/Text';\nimport BasketRow, { EPromoCodeStatus } from '@/models/BasketRow';\n\nconst generateWarning = (promoCode: string) => `Invalid promo code: ${promoCode}`;\n\nexport const PromoCodeVerificationAlert = ({ selectedBasketRow }: { selectedBasketRow: BasketRow | null }) => {\n const notifications = useContext(NotificationContext);\n const { showPromoCodeAlert, promoCodeAlertType } = useContext(HotelOverridesContext);\n const [showPromoCodeAlertPopup, setShowPromoCodeAlertPopup] = useState<boolean>(false);\n\n const invalidPromoCodes = useMemo(() => {\n if (selectedBasketRow?.getPromoCodeStatus() === EPromoCodeStatus.Invalid) {\n return [selectedBasketRow.getPromoCode()];\n }\n return [];\n }, [selectedBasketRow?.getPromoCodeStatus()]);\n\n useEffect(() => {\n if (promoCodeAlertType === 'notification') {\n invalidPromoCodes.forEach((promoCode: string) => {\n notifications.addNotification({\n icon: IconType.Error,\n children: <Text inline>{generateWarning(promoCode)}</Text>,\n });\n });\n }\n if (promoCodeAlertType === 'popup' && invalidPromoCodes.length) {\n setShowPromoCodeAlertPopup(true);\n }\n }, [JSON.stringify(invalidPromoCodes)]);\n\n if (!showPromoCodeAlert || !selectedBasketRow) return <></>;\n\n return (\n <>\n {promoCodeAlertType === 'popup' && (\n <SimpleModal open={showPromoCodeAlertPopup} alignCenter size={SimpleModalSize.ExtraSmall} title=\"Warning\" onClose={() => setShowPromoCodeAlertPopup(false)}>\n <div className=\"u-marg-heavy u-marg@m-\">\n <div className=\"u-marg-bottom\">\n {invalidPromoCodes.map((promoCode: string) => {\n return <Text key={promoCode}>{generateWarning(promoCode)}</Text>;\n })}\n </div>\n </div>\n </SimpleModal>\n )}\n </>\n );\n};\n"]}
|
|
@@ -33,24 +33,14 @@ const react_1 = __importStar(require("react"));
|
|
|
33
33
|
const react_i18next_1 = require("react-i18next");
|
|
34
34
|
const PromoCodeInput_1 = __importDefault(require("../../../generic/PromoCodeInput"));
|
|
35
35
|
const Tooltip_1 = __importDefault(require("../../../generic/Tooltip/Tooltip"));
|
|
36
|
+
const BasketRow_1 = require("../../../../models/BasketRow");
|
|
36
37
|
const Translation_1 = require("../../../../translations/Translation");
|
|
37
38
|
const Color_1 = require("../../../../util/Color");
|
|
38
39
|
const UserSearchSummaryRow_module_scss_1 = __importDefault(require("./UserSearchSummaryRow.module.scss"));
|
|
39
40
|
const UserSearchSummaryPromocodeInput = ({ row, disabled = false, onChange, promocodeTextColor = Color_1.Color.Navy, useUpdatedDesign = false, }) => {
|
|
40
41
|
const { t } = (0, react_i18next_1.useTranslation)();
|
|
41
42
|
const { hotel } = (0, hooks_1.useCurrentHotel)();
|
|
42
|
-
|
|
43
|
-
if (row.getPromoCodeStatus() === 'new') {
|
|
44
|
-
promoCodeTooltip = row.getPromoCode() ? t(Translation_1.Translation.Step.Date.PromoCodeTooltip.Checking) : t(Translation_1.Translation.Step.Date.PromoCodeTooltip.NoValue);
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
if (row.getPromoCodeStatus() === 'valid') {
|
|
48
|
-
promoCodeTooltip = t(Translation_1.Translation.Step.Date.PromoCodeTooltip.Valid);
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
promoCodeTooltip = t(Translation_1.Translation.Step.Date.PromoCodeTooltip.Invalid);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
43
|
+
const promoCodeTooltip = (row === null || row === void 0 ? void 0 : row.getPromoCodeTooltip(t, Translation_1.Translation)) || '';
|
|
54
44
|
const thisElement = (0, react_1.useRef)(null);
|
|
55
45
|
const _onChangePromoCode = (code) => {
|
|
56
46
|
onChange(code);
|
|
@@ -71,7 +61,7 @@ const UserSearchSummaryPromocodeInput = ({ row, disabled = false, onChange, prom
|
|
|
71
61
|
react_1.default.createElement("div", { className: "u-flex align-items-center justify-content-center u-w-100@xl- room-builder-progress--promo", style: { width: '100%' } },
|
|
72
62
|
react_1.default.createElement("div", { style: { width: '100%' } },
|
|
73
63
|
react_1.default.createElement("div", { className: UserSearchSummaryRow_module_scss_1.default['user-search-summary-card-label'] }, t(Translation_1.Translation.Step.Date.PromoCode)),
|
|
74
|
-
react_1.default.createElement(PromoCodeInput_1.default, { value: promoCode, onChange: _onChangePromoCode, valid: (row === null || row === void 0 ? void 0 : row.getPromoCodeStatus()) !==
|
|
64
|
+
react_1.default.createElement(PromoCodeInput_1.default, { value: promoCode, onChange: _onChangePromoCode, valid: (row === null || row === void 0 ? void 0 : row.getPromoCodeStatus()) !== BasketRow_1.EPromoCodeStatus.New ? (row === null || row === void 0 ? void 0 : row.getPromoCodeStatus()) === BasketRow_1.EPromoCodeStatus.Valid : undefined, variant: "text", hideValidText: true, row: row })))))));
|
|
75
65
|
};
|
|
76
66
|
exports.UserSearchSummaryPromocodeInput = UserSearchSummaryPromocodeInput;
|
|
77
67
|
//# sourceMappingURL=UserSearchSummaryPromocodeInput.js.map
|
package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryPromocodeInput.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserSearchSummaryPromocodeInput.js","sourceRoot":"/","sources":["src/components/steps/room/UserSearchSummary/UserSearchSummaryPromocodeInput.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAkD;AAClD,4DAA2C;AAC3C,+CAA+C;AAC/C,iDAA+C;AAE/C,yFAAiE;AACjE,mFAA2D;
|
|
1
|
+
{"version":3,"file":"UserSearchSummaryPromocodeInput.js","sourceRoot":"/","sources":["src/components/steps/room/UserSearchSummary/UserSearchSummaryPromocodeInput.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAkD;AAClD,4DAA2C;AAC3C,+CAA+C;AAC/C,iDAA+C;AAE/C,yFAAiE;AACjE,mFAA2D;AAC3D,kDAAiE;AACjE,4DAAyD;AACzD,wCAAqC;AAErC,0GAAwD;AAWjD,MAAM,+BAA+B,GAAG,CAAC,EAC5C,GAAG,EACH,QAAQ,GAAG,KAAK,EAChB,QAAQ,EACR,kBAAkB,GAAG,aAAK,CAAC,IAAI,EAC/B,gBAAgB,GAAG,KAAK,GACW,EAAE,EAAE;IACvC,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IAEpC,MAAM,gBAAgB,GAAG,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,mBAAmB,CAAC,CAAC,EAAE,yBAAW,CAAC,KAAI,EAAE,CAAC;IAExE,MAAM,WAAW,GAAG,IAAA,cAAM,EAAwB,IAAI,CAAC,CAAC;IAExD,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,EAAE;QACxC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAC3B,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACpB,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QAEtB,IAAI,KAAK,CAAC,mBAAmB,KAAK,GAAG,CAAC,YAAY,EAAE;YAAE,OAAO,EAAE,CAAC;QAEhE,OAAO,GAAG,CAAC,YAAY,EAAE,CAAC;IAC9B,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAEjB,kBAAkB,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAE/E,OAAO,CACH;QACI,8BAAC,iBAAO,IAAC,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAC,oBAAoB,EAAC,QAAQ,EAAE,QAAQ;YACpF,uCAAK,SAAS,EAAE,IAAA,oBAAE,EAAC,kBAAkB,EAAE,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;gBACjH,uCAAK,SAAS,EAAC,2FAA2F,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;oBAC/H,uCAAK,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;wBACzB,uCAAK,SAAS,EAAE,0CAAM,CAAC,gCAAgC,CAAC,IAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAO;wBACpG,8BAAC,wBAAc,IACX,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,kBAAkB,EAAE,MAAK,4BAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,kBAAkB,EAAE,MAAK,4BAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAC5H,OAAO,EAAC,MAAM,EACd,aAAa,QACb,GAAG,EAAE,GAAG,GACV,CACA,CACJ,CACJ,CACA,CACX,CACN,CAAC;AACN,CAAC,CAAC;AAlDW,QAAA,+BAA+B,mCAkD1C","sourcesContent":["import { useCurrentHotel } from '@frontend/hooks';\nimport { default as cx } from 'classnames';\nimport React, { useMemo, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport PromoCodeInput from '@/components/generic/PromoCodeInput';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport BasketRow, { EPromoCodeStatus } from '@/models/BasketRow';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\nimport styles from './UserSearchSummaryRow.module.scss';\n\ntype UserSearchSummaryPromocodeInputProps = {\n row: BasketRow;\n onChange: (code: string) => void;\n\n disabled?: boolean;\n promocodeTextColor?: Color;\n useUpdatedDesign?: boolean;\n};\n\nexport const UserSearchSummaryPromocodeInput = ({\n row,\n disabled = false,\n onChange,\n promocodeTextColor = Color.Navy,\n useUpdatedDesign = false,\n}: UserSearchSummaryPromocodeInputProps) => {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n\n const promoCodeTooltip = row?.getPromoCodeTooltip(t, Translation) || '';\n\n const thisElement = useRef<HTMLDivElement | null>(null);\n\n const _onChangePromoCode = (code: string) => {\n onChange(code);\n };\n\n const promoCode = useMemo(() => {\n if (!row) return '';\n if (!hotel) return '';\n\n if (hotel.memberOnlyPromoCode === row.getPromoCode()) return '';\n\n return row.getPromoCode();\n }, [row, hotel]);\n\n promocodeTextColor = promoCode ? row.getPromoCodeColour() : promocodeTextColor;\n\n return (\n <>\n <Tooltip title={promoCodeTooltip} wrapperClasses=\"u-w-100@xl- d-flex\" disabled={disabled}>\n <div className={cx('u-cursor-pointer', { '--updated': useUpdatedDesign })} ref={thisElement} style={{ width: '100%' }}>\n <div className=\"u-flex align-items-center justify-content-center u-w-100@xl- room-builder-progress--promo\" style={{ width: '100%' }}>\n <div style={{ width: '100%' }}>\n <div className={styles['user-search-summary-card-label']}>{t(Translation.Step.Date.PromoCode)}</div>\n <PromoCodeInput\n value={promoCode}\n onChange={_onChangePromoCode}\n valid={row?.getPromoCodeStatus() !== EPromoCodeStatus.New ? row?.getPromoCodeStatus() === EPromoCodeStatus.Valid : undefined}\n variant=\"text\"\n hideValidText\n row={row}\n />\n </div>\n </div>\n </div>\n </Tooltip>\n </>\n );\n};\n"]}
|
|
@@ -45,6 +45,7 @@ const NumberOfAdultsPicker_1 = __importDefault(require("./NumberOfAdultsPicker")
|
|
|
45
45
|
const NumberOfChildrenPicker_1 = __importDefault(require("./NumberOfChildrenPicker"));
|
|
46
46
|
const useSearchScopeHook_1 = require("../../../../hooks/useSearchScopeHook");
|
|
47
47
|
const WindowSize_1 = require("../../../../hooks/WindowSize");
|
|
48
|
+
const BasketRow_1 = require("../../../../models/BasketRow");
|
|
48
49
|
const Color_1 = require("../../../../util/Color");
|
|
49
50
|
const DataLayer_1 = __importStar(require("../../../../util/DataLayer"));
|
|
50
51
|
const ScreenSize_1 = __importDefault(require("../../../../util/ScreenSize"));
|
|
@@ -135,18 +136,7 @@ function RoomBuilderProgressRow(props) {
|
|
|
135
136
|
const roomLabel = (0, react_1.useMemo)(() => {
|
|
136
137
|
return context.currentBasketRows.length !== 1 ? props.number + 1 : '';
|
|
137
138
|
}, [context.currentBasketRows.length, props.number]);
|
|
138
|
-
|
|
139
|
-
if (row.getPromoCodeStatus() === 'new') {
|
|
140
|
-
promoCodeTooltip = row.getPromoCode() ? t(Translation_1.Translation.Step.Date.PromoCodeTooltip.Checking) : t(Translation_1.Translation.Step.Date.PromoCodeTooltip.NoValue);
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
if (row.getPromoCodeStatus() === 'valid') {
|
|
144
|
-
promoCodeTooltip = t(Translation_1.Translation.Step.Date.PromoCodeTooltip.Valid);
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
promoCodeTooltip = t(Translation_1.Translation.Step.Date.PromoCodeTooltip.Invalid);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
139
|
+
const promoCodeTooltip = (row === null || row === void 0 ? void 0 : row.getPromoCodeTooltip(t, Translation_1.Translation)) || '';
|
|
150
140
|
const openPromoModalOnClick = () => {
|
|
151
141
|
setIsPromoModalOpen(true);
|
|
152
142
|
};
|
|
@@ -245,9 +235,9 @@ function RoomBuilderProgressRow(props) {
|
|
|
245
235
|
react_1.default.createElement(Overlay_1.Overlay, { open: isPromoModalOpen, followElement: thisElement.current, onClose: setPromoCodeOnClose },
|
|
246
236
|
react_1.default.createElement("div", { className: "u-pad--heavy" },
|
|
247
237
|
react_1.default.createElement("div", null,
|
|
248
|
-
react_1.default.createElement(PromoCodeInput_1.default, { value: promocode, onChange: changePromoCode, valid: ((_b = context.selectedBasketRow) === null || _b === void 0 ? void 0 : _b.getPromoCodeStatus()) !==
|
|
249
|
-
? ((_c = context.selectedBasketRow) === null || _c === void 0 ? void 0 : _c.getPromoCodeStatus()) ===
|
|
250
|
-
: undefined })),
|
|
238
|
+
react_1.default.createElement(PromoCodeInput_1.default, { value: promocode, onChange: changePromoCode, valid: ((_b = context.selectedBasketRow) === null || _b === void 0 ? void 0 : _b.getPromoCodeStatus()) !== BasketRow_1.EPromoCodeStatus.New && promocode
|
|
239
|
+
? ((_c = context.selectedBasketRow) === null || _c === void 0 ? void 0 : _c.getPromoCodeStatus()) === BasketRow_1.EPromoCodeStatus.Valid
|
|
240
|
+
: undefined, row: context.selectedBasketRow })),
|
|
251
241
|
react_1.default.createElement("div", { className: "u-flex justify-content-end align-items-center u-marg-top" },
|
|
252
242
|
react_1.default.createElement(BEButton_1.default, { isText: true, size: "small", onClick: cancelPromoPopupOnClick }, t(Translation_1.Translation.Misc.Cancel))))),
|
|
253
243
|
!isLargerThanLarge && row.isValid() && (react_1.default.createElement(BEButton_1.default, { wide: true, primary: true, filled: true, onClick: saveRoomChangesOnClick }, t(Translation_1.Translation.Misc.Save))))) : (react_1.default.createElement("div", { className: "w-100" },
|