@roomstay/frontend 2.5.23 → 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/855.bundle.js +1 -1
- package/dist/873.bundle.js +1 -1
- package/dist/903.bundle.js +1 -1
- package/dist/972.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 +80 -34
- package/dist/src/components/generic/date/DatePicker.js.map +1 -1
- package/dist/src/components/generic/date/DatePickerDay.js +127 -9
- 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 +10 -3
- package/dist/src/components/steps/MinimumNightStayPill.js.map +1 -1
- package/dist/src/components/steps/date/StepDatePricePerRoom.js +2 -2
- package/dist/src/components/steps/date/StepDatePricePerRoom.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/AvailableUpgradesModal.js +2 -2
- package/dist/src/components/steps/room/AvailableUpgradesModal.js.map +1 -1
- package/dist/src/components/steps/room/MemberSignInModal/{Big4MemberModal.d.ts → ExternalMemberModal.d.ts} +2 -2
- package/dist/src/components/steps/room/MemberSignInModal/{Big4MemberModal.js → ExternalMemberModal.js} +20 -8
- package/dist/src/components/steps/room/MemberSignInModal/ExternalMemberModal.js.map +1 -0
- package/dist/src/components/steps/room/NoRoomsFoundBlock.js +2 -2
- package/dist/src/components/steps/room/NoRoomsFoundBlock.js.map +1 -1
- package/dist/src/components/steps/room/RoomListCrossSellBlock.js +2 -2
- package/dist/src/components/steps/room/RoomListCrossSellBlock.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/BasketContext/BasketContextWrapper.js +5 -5
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +1 -1
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +5 -5
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.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/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js +2 -2
- package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js.map +1 -1
- package/dist/src/hooks/RoomRateAvailabilityListFromApi.js +2 -2
- package/dist/src/hooks/RoomRateAvailabilityListFromApi.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/hooks/useExternalMember.d.ts +6 -0
- package/dist/src/hooks/useExternalMember.js +33 -0
- package/dist/src/hooks/useExternalMember.js.map +1 -0
- package/dist/src/models/Api/HotelDTO.d.ts +2 -1
- package/dist/src/models/Api/HotelDTO.js +1 -0
- package/dist/src/models/Api/HotelDTO.js.map +1 -1
- package/dist/src/translations/Translation.d.ts +15 -2
- package/dist/src/translations/Translation.js +18 -5
- package/dist/src/translations/Translation.js.map +1 -1
- package/dist/src/translations/languages/en-gb.js +15 -2
- package/dist/src/translations/languages/en-gb.js.map +1 -1
- package/dist/test.bundle.js +1 -1
- package/dist/vendors.bundle.js +1 -1
- package/package.json +1 -1
- package/dist/src/components/steps/room/MemberSignInModal/Big4MemberModal.js.map +0 -1
- package/dist/src/hooks/Big4.d.ts +0 -4
- package/dist/src/hooks/Big4.js +0 -22
- package/dist/src/hooks/Big4.js.map +0 -1
|
@@ -35,12 +35,14 @@ function FloatingDatePicker(props) {
|
|
|
35
35
|
const [isOpen, setIsOpen] = (0, react_1.useState)(false);
|
|
36
36
|
const [startDate, setStartDate] = (0, react_1.useState)(null);
|
|
37
37
|
const thisElement = (0, react_1.useRef)(null);
|
|
38
|
-
const selectedDateChanged = (endDate) => {
|
|
38
|
+
const selectedDateChanged = (endDate, selectionState) => {
|
|
39
39
|
DataLayer_1.default.instance.sendInteraction('Check Out Date', DataLayer_1.InteractionType.CALENDAR, DataLayer_1.InteractionStep.ROOMS);
|
|
40
40
|
if (props.selectedDateChanged && startDate) {
|
|
41
41
|
props.selectedDateChanged(startDate, endDate);
|
|
42
42
|
}
|
|
43
|
-
|
|
43
|
+
if (endDate) {
|
|
44
|
+
setIsOpen(!!(selectionState === null || selectionState === void 0 ? void 0 : selectionState.validationMinNightStay) || !!(selectionState === null || selectionState === void 0 ? void 0 : selectionState.validationMaxNightStay)); //Close popup after selecting end date
|
|
45
|
+
}
|
|
44
46
|
};
|
|
45
47
|
const onStartDateChangedHandler = (date) => {
|
|
46
48
|
DataLayer_1.default.instance.sendInteraction('Check In Date', DataLayer_1.InteractionType.CALENDAR, DataLayer_1.InteractionStep.ROOMS);
|
|
@@ -53,7 +55,7 @@ function FloatingDatePicker(props) {
|
|
|
53
55
|
setIsOpen(true);
|
|
54
56
|
};
|
|
55
57
|
const inner = (react_1.default.createElement("div", { className: "d-flex align-items-center flex-column" },
|
|
56
|
-
react_1.default.createElement(DatePicker_1.default, { showMonthOnLoad: props.startDate, showMultipleMonths: false, supportsMultiSelecting: true, onStartDateChanged: onStartDateChangedHandler, onEndDateChanged: selectedDateChanged, showMinNightStay: true, supportsWeek: false })));
|
|
58
|
+
react_1.default.createElement(DatePicker_1.default, { showMonthOnLoad: props.startDate, showMultipleMonths: false, supportsMultiSelecting: true, onStartDateChanged: onStartDateChangedHandler, onEndDateChanged: selectedDateChanged, showMinNightStay: true, supportsWeek: false, selectedStartDate: props.startDate, selectedEndDate: props.endDate })));
|
|
57
59
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
58
60
|
react_1.default.createElement("div", { ref: thisElement, className: props.className, onClick: onOverlayOpen }, props.children),
|
|
59
61
|
react_1.default.createElement(Overlay_1.Overlay, { open: isOpen, onClose: onOverlayClose, container: (_b = (_a = thisElement.current) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.parentElement, followElement: thisElement.current, className: "floating-roomstay-calendar", isAboveNav: props.isAboveNav }, inner)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloatingDatePicker.js","sourceRoot":"/","sources":["src/components/generic/date/FloatingDatePicker.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+CAAgD;AAEhD,sFAA8D;AAC9D,kEAA+D;AAC/D,8DAA+E;AAa/E,SAAwB,kBAAkB,CAAC,KAA8B;;IACrE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAE5C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAqB,IAAI,CAAC,CAAC;IAErE,MAAM,WAAW,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAEjD,MAAM,mBAAmB,GAAG,CAAC,OAAoB,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"FloatingDatePicker.js","sourceRoot":"/","sources":["src/components/generic/date/FloatingDatePicker.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+CAAgD;AAEhD,sFAA8D;AAC9D,kEAA+D;AAC/D,8DAA+E;AAa/E,SAAwB,kBAAkB,CAAC,KAA8B;;IACrE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAE5C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAqB,IAAI,CAAC,CAAC;IAErE,MAAM,WAAW,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAEjD,MAAM,mBAAmB,GAAG,CAAC,OAAoB,EAAE,cAAiG,EAAE,EAAE;QACpJ,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,gBAAgB,EAAE,2BAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QAEtG,IAAI,KAAK,CAAC,mBAAmB,IAAI,SAAS,EAAE;YACxC,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;SACjD;QAED,IAAI,OAAO,EAAE;YACT,SAAS,CAAC,CAAC,CAAC,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,sBAAsB,CAAA,IAAI,CAAC,CAAC,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,sBAAsB,CAAA,CAAC,CAAC,CAAC,sCAAsC;SAC1I;IACL,CAAC,CAAC;IAEF,MAAM,yBAAyB,GAAG,CAAC,IAAS,EAAE,EAAE;QAC5C,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,eAAe,EAAE,2BAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QACrG,YAAY,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,GAAG,EAAE;QACxB,SAAS,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE;QACvB,SAAS,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,CACV,uCAAK,SAAS,EAAC,uCAAuC;QAClD,8BAAC,oBAAU,IACP,eAAe,EAAE,KAAK,CAAC,SAAS,EAChC,kBAAkB,EAAE,KAAK,EACzB,sBAAsB,QACtB,kBAAkB,EAAE,yBAAyB,EAC7C,gBAAgB,EAAE,mBAAmB,EACrC,gBAAgB,QAChB,YAAY,EAAE,KAAK,EACnB,iBAAiB,EAAE,KAAK,CAAC,SAAS,EAClC,eAAe,EAAE,KAAK,CAAC,OAAO,GAChC,CACA,CACT,CAAC;IAEF,OAAO,CACH;QACI,uCAAK,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,IACpE,KAAK,CAAC,QAAQ,CACb;QACN,8BAAC,iBAAO,IACJ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAA,MAAA,WAAW,CAAC,OAAO,0CAAE,aAAa,0CAAE,aAAa,EAC5D,aAAa,EAAE,WAAW,CAAC,OAAO,EAClC,SAAS,EAAC,4BAA4B,EACtC,UAAU,EAAE,KAAK,CAAC,UAAU,IAE3B,KAAK,CACA,CACX,CACN,CAAC;AACN,CAAC;AAjED,qCAiEC","sourcesContent":["import dayjs from 'dayjs';\nimport React, { useRef, useState } from 'react';\n\nimport DatePicker from '@/components/generic/date/DatePicker';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\n\nexport interface FloatingDatePickerProps {\n children?: React.ReactNode;\n startDate?: dayjs.Dayjs;\n endDate?: dayjs.Dayjs;\n\n selectedDateChanged?: (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => void;\n\n className?: string;\n isAboveNav?: boolean;\n}\n\nexport default function FloatingDatePicker(props: FloatingDatePickerProps) {\n const [isOpen, setIsOpen] = useState(false);\n\n const [startDate, setStartDate] = useState<dayjs.Dayjs | null>(null);\n\n const thisElement = useRef<HTMLDivElement>(null);\n\n const selectedDateChanged = (endDate: dayjs.Dayjs, selectionState?: { validationMinNightStay: number | null; validationMaxNightStay: number | null }) => {\n DataLayer.instance.sendInteraction('Check Out Date', InteractionType.CALENDAR, InteractionStep.ROOMS);\n\n if (props.selectedDateChanged && startDate) {\n props.selectedDateChanged(startDate, endDate);\n }\n\n if (endDate) {\n setIsOpen(!!selectionState?.validationMinNightStay || !!selectionState?.validationMaxNightStay); //Close popup after selecting end date\n }\n };\n\n const onStartDateChangedHandler = (date: any) => {\n DataLayer.instance.sendInteraction('Check In Date', InteractionType.CALENDAR, InteractionStep.ROOMS);\n setStartDate(date);\n };\n\n const onOverlayClose = () => {\n setIsOpen(false);\n };\n\n const onOverlayOpen = () => {\n setIsOpen(true);\n };\n\n const inner = (\n <div className=\"d-flex align-items-center flex-column\">\n <DatePicker\n showMonthOnLoad={props.startDate}\n showMultipleMonths={false}\n supportsMultiSelecting\n onStartDateChanged={onStartDateChangedHandler}\n onEndDateChanged={selectedDateChanged}\n showMinNightStay\n supportsWeek={false}\n selectedStartDate={props.startDate}\n selectedEndDate={props.endDate}\n />\n </div>\n );\n\n return (\n <>\n <div ref={thisElement} className={props.className} onClick={onOverlayOpen}>\n {props.children}\n </div>\n <Overlay\n open={isOpen}\n onClose={onOverlayClose}\n container={thisElement.current?.parentElement?.parentElement}\n followElement={thisElement.current}\n className=\"floating-roomstay-calendar\"\n isAboveNav={props.isAboveNav}\n >\n {inner}\n </Overlay>\n </>\n );\n}\n"]}
|
|
@@ -32,12 +32,14 @@ const Color_1 = require("../../util/Color");
|
|
|
32
32
|
function DaysSelectedInformer() {
|
|
33
33
|
const dpContext = (0, react_1.useContext)(contexts_1.DatePickerContext);
|
|
34
34
|
const { t } = (0, react_i18next_1.useTranslation)();
|
|
35
|
-
const { startDate, endDate, hoveredMonth: hoveredDate } = dpContext;
|
|
35
|
+
const { startDate, endDate, hoveredMonth: hoveredDate, nightStayRequirements } = dpContext;
|
|
36
36
|
let daysPicked = 0;
|
|
37
37
|
const correctEndDate = hoveredDate !== null && hoveredDate !== void 0 ? hoveredDate : endDate;
|
|
38
38
|
if (startDate && correctEndDate) {
|
|
39
39
|
daysPicked = correctEndDate.diff(dpContext.startDate, 'day');
|
|
40
40
|
}
|
|
41
|
+
if (nightStayRequirements.length)
|
|
42
|
+
return react_1.default.createElement(react_1.default.Fragment, null);
|
|
41
43
|
return (react_1.default.createElement(Text_1.default, { bold: true, color: Color_1.Color.Success, type: Text_1.TextType.Small }, daysPicked > 0 ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
42
44
|
t(Translation_1.Translation.Step.Room.RoomInfo.Selected),
|
|
43
45
|
" ",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DaysSelectedInformer.js","sourceRoot":"/","sources":["src/components/steps/DaysSelectedInformer.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAuD;AACvD,+CAA0C;AAC1C,iDAA+C;AAE/C,kEAA2D;AAC3D,4DAAyD;AACzD,wCAAqC;AAErC,SAAwB,oBAAoB;IACxC,MAAM,SAAS,GAAG,IAAA,kBAAU,EAAC,4BAAiB,CAAC,CAAC;IAChD,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"DaysSelectedInformer.js","sourceRoot":"/","sources":["src/components/steps/DaysSelectedInformer.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAuD;AACvD,+CAA0C;AAC1C,iDAA+C;AAE/C,kEAA2D;AAC3D,4DAAyD;AACzD,wCAAqC;AAErC,SAAwB,oBAAoB;IACxC,MAAM,SAAS,GAAG,IAAA,kBAAU,EAAC,4BAAiB,CAAC,CAAC;IAChD,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,GAAG,SAAS,CAAC;IAE3F,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,cAAc,GAAG,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,OAAO,CAAC;IAE9C,IAAI,SAAS,IAAI,cAAc,EAAE;QAC7B,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;KAChE;IAED,IAAI,qBAAqB,CAAC,MAAM;QAAE,OAAO,6DAAK,CAAC;IAE/C,OAAO,CACH,8BAAC,cAAI,IAAC,IAAI,QAAC,KAAK,EAAE,aAAK,CAAC,OAAO,EAAE,IAAI,EAAE,eAAQ,CAAC,KAAK,IAChD,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CACd;QACK,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;;QAAG,UAAU;;QAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE;cAAI,SAAS,aAAT,SAAS;QAAT,SAAS,CAAE,MAAM,CAAC,OAAO,CAAC;;QAAG,GAAG;QAC5I,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;aAAG,cAAc,aAAd,cAAc;QAAd,cAAc,CAAE,MAAM,CAAC,OAAO,CAAC,CACxE,CACN,CAAC,CAAC,CAAC,CACA,8DAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAI,CACxD,CACE,CACV,CAAC;AACN,CAAC;AA3BD,uCA2BC","sourcesContent":["import { DatePickerContext } from '@frontend/contexts';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\nexport default function DaysSelectedInformer() {\n const dpContext = useContext(DatePickerContext);\n const { t } = useTranslation();\n\n const { startDate, endDate, hoveredMonth: hoveredDate, nightStayRequirements } = dpContext;\n\n let daysPicked = 0;\n const correctEndDate = hoveredDate ?? endDate;\n\n if (startDate && correctEndDate) {\n daysPicked = correctEndDate.diff(dpContext.startDate, 'day');\n }\n\n if (nightStayRequirements.length) return <></>;\n\n return (\n <Text bold color={Color.Success} type={TextType.Small}>\n {daysPicked > 0 ? (\n <>\n {t(Translation.Step.Room.RoomInfo.Selected)} {daysPicked} {t(Translation.Misc.Night_plural).toLowerCase()}, {startDate?.format('D MMM')},{' '}\n {t(Translation.Misc.To).toLowerCase()} {correctEndDate?.format('D MMM')}\n </>\n ) : (\n <>{t(Translation.Step.Date.PleaseSelectYourDates)}</>\n )}\n </Text>\n );\n}\n"]}
|
|
@@ -37,13 +37,17 @@ const BookingAPI_1 = __importDefault(require("../../api/BookingAPI"));
|
|
|
37
37
|
const Icon_1 = require("../generic/Icon/Icon");
|
|
38
38
|
const SmallSpinner_1 = __importDefault(require("../generic/loader/SmallSpinner"));
|
|
39
39
|
const Pill_1 = __importStar(require("../generic/Pill"));
|
|
40
|
-
const
|
|
40
|
+
const Text_1 = __importStar(require("../generic/Text"));
|
|
41
|
+
const useExternalMember_1 = require("../../hooks/useExternalMember");
|
|
42
|
+
const Color_1 = require("../../util/Color");
|
|
41
43
|
function MinimumNightStayPill() {
|
|
42
44
|
var _a;
|
|
43
45
|
const { hotel } = (0, hooks_1.useCurrentHotel)();
|
|
44
46
|
const basketContext = (0, react_1.useContext)(contexts_1.BasketContext);
|
|
47
|
+
const dpContext = (0, react_1.useContext)(contexts_1.DatePickerContext);
|
|
48
|
+
const { nightStayRequirements } = dpContext;
|
|
45
49
|
const { t } = (0, react_i18next_1.useTranslation)();
|
|
46
|
-
const { memberNumber } = (0,
|
|
50
|
+
const { memberNumber } = (0, useExternalMember_1.useExternalMember)();
|
|
47
51
|
const [isLoading, setIsLoading] = (0, react_1.useState)(false);
|
|
48
52
|
const [minNights, setMinNights] = (0, react_1.useState)(-1);
|
|
49
53
|
const [loadIndex, setLoadIndex] = (0, react_1.useState)(0);
|
|
@@ -83,7 +87,10 @@ function MinimumNightStayPill() {
|
|
|
83
87
|
if (!hotel) {
|
|
84
88
|
return null;
|
|
85
89
|
}
|
|
86
|
-
|
|
90
|
+
if (nightStayRequirements.length) {
|
|
91
|
+
return (react_1.default.createElement(Text_1.default, { bold: true, color: Color_1.Color.Alert, type: Text_1.TextType.Small }, nightStayRequirements.join(' ')));
|
|
92
|
+
}
|
|
93
|
+
return (react_1.default.createElement("div", null, isLoading ? (react_1.default.createElement(SmallSpinner_1.default, null)) : minNights !== -1 ? (react_1.default.createElement(Pill_1.default, { type: Pill_1.PillType.Primary, icon: Icon_1.IconType.Info }, t(Translation_1.Translation.Step.Room.NoRoomsFound.MinNightStay, { minNightStay: minNights }))) : (react_1.default.createElement(react_1.default.Fragment, null))));
|
|
87
94
|
}
|
|
88
95
|
exports.default = MinimumNightStayPill;
|
|
89
96
|
//# sourceMappingURL=MinimumNightStayPill.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MinimumNightStayPill.js","sourceRoot":"/","sources":["src/components/steps/MinimumNightStayPill.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"MinimumNightStayPill.js","sourceRoot":"/","sources":["src/components/steps/MinimumNightStayPill.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, DatePickerContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { captureException } from '@sentry/browser';\nimport { NoHotelSelectedError } from 'errors/NoHotelSelectedError';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport SmallSpinner from '@/components/generic/loader/SmallSpinner';\nimport Pill, { PillType } from '@/components/generic/Pill';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { useExternalMember } from '@/hooks/useExternalMember';\nimport { Color } from '@/util/Color';\n\nexport default function MinimumNightStayPill() {\n const { hotel } = useCurrentHotel();\n const basketContext = useContext(BasketContext);\n const dpContext = useContext(DatePickerContext);\n const { nightStayRequirements } = dpContext;\n const { t } = useTranslation();\n const { memberNumber } = useExternalMember();\n\n const [isLoading, setIsLoading] = useState(false);\n const [minNights, setMinNights] = useState(-1);\n\n const [loadIndex, setLoadIndex] = useState(0);\n\n const selectedBasketRow = basketContext.selectedBasketRow ?? basketContext.currentBasketRows[0];\n\n const startDate = selectedBasketRow?.getStartDate();\n const endDate = selectedBasketRow?.getEndDate();\n\n useEffect(() => {\n if (!hotel) {\n return;\n }\n\n let cancelled = false;\n setLoadIndex((oldLoadIndex) => oldLoadIndex + 1);\n\n if (endDate?.isValid()) {\n setIsLoading(true);\n\n API.Availability.fetchMinNightStayData(selectedBasketRow, hotel.hotelID, memberNumber)\n .then((response) => {\n if (!cancelled) {\n setIsLoading(false);\n if (response.Status === 'MinStay' && endDate?.diff(startDate, 'day') < response.Quantity) {\n setMinNights(response.Quantity);\n } else {\n setMinNights(-1);\n }\n }\n })\n .catch((ex) => {\n if (!(ex instanceof NoHotelSelectedError)) {\n captureException(ex);\n }\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, [selectedBasketRow, startDate, endDate, memberNumber]);\n\n if (!hotel) {\n return null;\n }\n\n if (nightStayRequirements.length) {\n return (\n <Text bold color={Color.Alert} type={TextType.Small}>\n {nightStayRequirements.join(' ')}\n </Text>\n );\n }\n\n return (\n <div>\n {isLoading ? (\n <SmallSpinner />\n ) : minNights !== -1 ? (\n <Pill type={PillType.Primary} icon={IconType.Info}>\n {t(Translation.Step.Room.NoRoomsFound.MinNightStay, { minNightStay: minNights })}\n </Pill>\n ) : (\n <></>\n )}\n </div>\n );\n}\n"]}
|
|
@@ -36,7 +36,7 @@ const Currency_1 = __importDefault(require("../../generic/Currency"));
|
|
|
36
36
|
const Headline_1 = __importDefault(require("../../generic/Headline"));
|
|
37
37
|
const Icon_1 = __importStar(require("../../generic/Icon/Icon"));
|
|
38
38
|
const Text_1 = __importStar(require("../../generic/Text"));
|
|
39
|
-
const
|
|
39
|
+
const useExternalMember_1 = require("../../../hooks/useExternalMember");
|
|
40
40
|
const Color_1 = require("../../../util/Color");
|
|
41
41
|
const TextAlignment_1 = require("../../../util/TextAlignment");
|
|
42
42
|
function StepDatePricePerRoom(props) {
|
|
@@ -45,7 +45,7 @@ function StepDatePricePerRoom(props) {
|
|
|
45
45
|
const { hotel } = (0, hooks_1.useCurrentHotel)();
|
|
46
46
|
const [pricePerRoom, setPricePerRoom] = (0, react_1.useState)(0);
|
|
47
47
|
const [isLoading, setIsLoading] = (0, react_1.useState)(false);
|
|
48
|
-
const { memberNumber } = (0,
|
|
48
|
+
const { memberNumber } = (0, useExternalMember_1.useExternalMember)();
|
|
49
49
|
(0, react_1.useEffect)(() => {
|
|
50
50
|
var _a;
|
|
51
51
|
let cancelled = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepDatePricePerRoom.js","sourceRoot":"/","sources":["src/components/steps/date/StepDatePricePerRoom.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmD;AACnD,2CAAkD;AAClD,+CAAwE;AACxE,iDAA+C;AAC/C,0DAAuD;AAEvD,kEAAmC;AACnC,6EAAqD;AACrD,6EAAqD;AACrD,uEAAgE;AAChE,kEAA2D;AAC3D,
|
|
1
|
+
{"version":3,"file":"StepDatePricePerRoom.js","sourceRoot":"/","sources":["src/components/steps/date/StepDatePricePerRoom.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\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';\nimport { TextAlign } from '@/util/TextAlignment';\n\ninterface StepDatePricePerRoomProps {\n isMobile: boolean;\n}\n\nexport default function StepDatePricePerRoom(props: StepDatePricePerRoomProps) {\n const { t } = useTranslation();\n const basketContext = useContext(BasketContext);\n const { hotel } = useCurrentHotel();\n\n const [pricePerRoom, setPricePerRoom] = useState(0);\n const [isLoading, setIsLoading] = useState(false);\n const { memberNumber } = useExternalMember();\n\n useEffect(() => {\n let cancelled = false;\n\n const selectedBasketRow = basketContext.selectedBasketRow ?? basketContext.currentBasketRows[basketContext.currentBasketRows.length - 1];\n\n if (basketContext.endDate) {\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 setIsLoading(true);\n setTimeout(() => {\n API.Availability.getCheapestPricePerDay(\n basketContext.startDate,\n basketContext.endDate.subtract(1, 'day'),\n adults,\n children,\n infants,\n promoCode,\n hotel?.hotelID as string,\n memberNumber\n ).then((dayPrices) => {\n const prices = Object.values(dayPrices);\n\n if (!cancelled) {\n let cheapestFromAPI = prices.length > 0 ? prices.reduce((prev, curr) => (!curr ? prev : Math.min(prev, curr))) : 0;\n\n if (isNaN(cheapestFromAPI)) {\n cheapestFromAPI = 0;\n }\n\n setPricePerRoom(cheapestFromAPI);\n setIsLoading(false);\n }\n });\n }, 250);\n }\n\n return () => {\n setIsLoading(false);\n\n cancelled = true;\n };\n }, [basketContext.endDate, basketContext.selectedBasketRow]);\n\n const isMobile = props.isMobile;\n\n return useMemo(() => {\n return (\n <div className=\"u-flex flex-column justify-content-end align-items-end h-100\">\n <Text type={isMobile ? TextType.Label : TextType.Small} align={TextAlign.Right} className=\"u-nowrap\">\n <span style={{ color: Color.DarkGrey }}>\n {t(Translation.Misc.From)} <span style={{ color: Color.Grey }}>({t(Translation.Misc.PerRoom)})</span>\n </span>\n </Text>\n {isMobile ? (\n <span className=\"u-ellip-w-100-deep\">\n <Text bold>\n {isLoading ? (\n <div className=\"u-inline-flex a-spin\">\n <Icon icon={IconType.Spinner} />\n </div>\n ) : (\n <Currency removeCurrencyAfterChar={6}>{pricePerRoom}</Currency>\n )}\n </Text>\n </span>\n ) : (\n <Headline bold size=\"large\" align={TextAlign.Right}>\n {isLoading ? (\n <div className=\"u-inline-flex a-spin\">\n <Icon icon={IconType.Spinner} />\n </div>\n ) : (\n <Currency>{pricePerRoom}</Currency>\n )}\n </Headline>\n )}\n </div>\n );\n }, [isLoading, pricePerRoom]);\n}\n"]}
|
|
@@ -36,6 +36,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
36
36
|
};
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
38
|
const contexts_1 = require("../../../contexts/index.js");
|
|
39
|
+
const hooks_1 = require("../../../hooks/index.js");
|
|
39
40
|
const react_1 = __importStar(require("react"));
|
|
40
41
|
const react_i18next_1 = require("react-i18next");
|
|
41
42
|
const Translation_1 = require("translations/Translation");
|
|
@@ -44,6 +45,14 @@ const DataLayer_1 = __importStar(require("../../../util/DataLayer"));
|
|
|
44
45
|
function StepOneNextStepButton() {
|
|
45
46
|
const { t } = (0, react_i18next_1.useTranslation)();
|
|
46
47
|
const context = (0, react_1.useContext)(contexts_1.BasketContext);
|
|
48
|
+
const { getLastValidDay } = (0, hooks_1.useCalendarNightStay)({ basketContext: context });
|
|
49
|
+
const [nightStayValidation, setNightStayValidation] = (0, react_1.useState)({
|
|
50
|
+
init: false,
|
|
51
|
+
arrivalMinNightStay: null,
|
|
52
|
+
arrivalMaxNightStay: null,
|
|
53
|
+
validationMinNightStay: null,
|
|
54
|
+
validationMaxNightStay: null,
|
|
55
|
+
});
|
|
47
56
|
let label = '';
|
|
48
57
|
if (!context.startDate) {
|
|
49
58
|
label = Translation_1.Translation.Step.Date.SelectStartDate;
|
|
@@ -68,7 +77,12 @@ function StepOneNextStepButton() {
|
|
|
68
77
|
}
|
|
69
78
|
return true;
|
|
70
79
|
});
|
|
71
|
-
|
|
80
|
+
(0, react_1.useEffect)(() => {
|
|
81
|
+
getLastValidDay(context.startDate, context.endDate).then((result) => {
|
|
82
|
+
setNightStayValidation(result === null || result === void 0 ? void 0 : result.nightStayValidation);
|
|
83
|
+
});
|
|
84
|
+
}, [context.startDate, context.endDate]);
|
|
85
|
+
return (react_1.default.createElement(NextStepButton_1.default, { text: t(label), disabled: !context.endDate || !!nightStayValidation.validationMinNightStay || !!nightStayValidation.validationMaxNightStay, hideIcon: !context.endDate, onClick: buttonOnClickHandler }));
|
|
72
86
|
}
|
|
73
87
|
exports.default = StepOneNextStepButton;
|
|
74
88
|
//# sourceMappingURL=StepOneNextStepButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepOneNextStepButton.js","sourceRoot":"/","sources":["src/components/steps/date/StepOneNextStepButton.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmD;AACnD,+
|
|
1
|
+
{"version":3,"file":"StepOneNextStepButton.js","sourceRoot":"/","sources":["src/components/steps/date/StepOneNextStepButton.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmD;AACnD,2CAA6E;AAC7E,+CAA+D;AAC/D,iDAA+C;AAC/C,0DAAuD;AAEvD,iGAAyE;AACzE,8DAA+E;AAE/E,SAAwB,qBAAqB;IACzC,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAC1C,MAAM,EAAE,eAAe,EAAE,GAAG,IAAA,4BAAoB,EAAC,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7E,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,IAAA,gBAAQ,EAAuB;QACjF,IAAI,EAAE,KAAK;QACX,mBAAmB,EAAE,IAAI;QACzB,mBAAmB,EAAE,IAAI;QACzB,sBAAsB,EAAE,IAAI;QAC5B,sBAAsB,EAAE,IAAI;KAC/B,CAAC,CAAC;IACH,IAAI,KAAK,GAAG,EAAE,CAAC;IAEf,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;QACpB,KAAK,GAAG,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;KACjD;SAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;QACzB,KAAK,GAAG,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;KACpD;SAAM;QACH,KAAK,GAAG,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;KACnD;IAED,MAAM,oBAAoB,GAAG,GAAS,EAAE;;QACpC,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,oBAAoB,EAAE,2BAAe,CAAC,MAAM,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QAExG,IAAI,MAAA,OAAO,CAAC,iBAAiB,0CAAE,YAAY,EAAE,EAAE;YAC3C,MAAM,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;YAExF,IAAI,gBAAgB,CAAC,MAAM,EAAE;gBACzB,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;oBAC7B,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC;oBAC3D,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;gBACjC,CAAC,CAAC,CAAC;aACN;SACJ;QAED,OAAO,IAAI,CAAC;IAChB,CAAC,CAAA,CAAC;IAEF,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YAChE,sBAAsB,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,mBAAmB,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAEzC,OAAO,CACH,8BAAC,wBAAc,IACX,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,EACd,QAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,mBAAmB,CAAC,sBAAsB,IAAI,CAAC,CAAC,mBAAmB,CAAC,sBAAsB,EAC1H,QAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,EAC1B,OAAO,EAAE,oBAAoB,GAC/B,CACL,CAAC;AACN,CAAC;AArDD,wCAqDC","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { INightStayValidation, useCalendarNightStay } from '@frontend/hooks';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport NextStepButton from '@/components/generic/buttons/NextStepButton';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\n\nexport default function StepOneNextStepButton() {\n const { t } = useTranslation();\n\n const context = useContext(BasketContext);\n const { getLastValidDay } = useCalendarNightStay({ basketContext: context });\n const [nightStayValidation, setNightStayValidation] = useState<INightStayValidation>({\n init: false,\n arrivalMinNightStay: null,\n arrivalMaxNightStay: null,\n validationMinNightStay: null,\n validationMaxNightStay: null,\n });\n let label = '';\n\n if (!context.startDate) {\n label = Translation.Step.Date.SelectStartDate;\n } else if (!context.endDate) {\n label = Translation.Step.Date.SelectCheckoutDate;\n } else {\n label = Translation.Step.Date.CheckAvailability;\n }\n\n const buttonOnClickHandler = async () => {\n DataLayer.instance.sendInteraction('Check Availability', InteractionType.BUTTON, InteractionStep.DATES);\n\n if (context.selectedBasketRow?.getPromoCode()) {\n const rowsWithoutPromo = context.currentBasketRows.filter((row) => !row.getPromoCode());\n\n if (rowsWithoutPromo.length) {\n rowsWithoutPromo.forEach((row) => {\n row.setPromoCode(context.selectedBasketRow.getPromoCode());\n context.updateBasketRow(row);\n });\n }\n }\n\n return true;\n };\n\n useEffect(() => {\n getLastValidDay(context.startDate, context.endDate).then((result) => {\n setNightStayValidation(result?.nightStayValidation);\n });\n }, [context.startDate, context.endDate]);\n\n return (\n <NextStepButton\n text={t(label)}\n disabled={!context.endDate || !!nightStayValidation.validationMinNightStay || !!nightStayValidation.validationMaxNightStay}\n hideIcon={!context.endDate}\n onClick={buttonOnClickHandler}\n />\n );\n}\n"]}
|
|
@@ -49,14 +49,14 @@ const SimpleModal_1 = __importDefault(require("../../generic/modal/SimpleModal")
|
|
|
49
49
|
const Text_1 = __importStar(require("../../generic/Text"));
|
|
50
50
|
const ImageGallerySlider_1 = __importDefault(require("./ImageGallerySlider"));
|
|
51
51
|
const LargeRoomCard_1 = __importDefault(require("./LargeRoomCard"));
|
|
52
|
-
const
|
|
52
|
+
const useExternalMember_1 = require("../../../hooks/useExternalMember");
|
|
53
53
|
const RoomUpsellFeature_1 = __importDefault(require("../../../providers/feature/RoomUpsellFeature"));
|
|
54
54
|
const Color_1 = require("../../../util/Color");
|
|
55
55
|
const DataLayer_1 = __importDefault(require("../../../util/DataLayer"));
|
|
56
56
|
const AvailableUpgradesModal = () => {
|
|
57
57
|
const { t } = (0, react_i18next_1.useTranslation)();
|
|
58
58
|
const { hotel } = (0, hooks_1.useCurrentHotel)();
|
|
59
|
-
const { memberNumber } = (0,
|
|
59
|
+
const { memberNumber } = (0, useExternalMember_1.useExternalMember)();
|
|
60
60
|
const [isOpen, setIsOpen] = (0, react_1.useState)(false);
|
|
61
61
|
const [row, setRow] = (0, react_1.useState)(null);
|
|
62
62
|
const basketContext = (0, react_1.useContext)(contexts_1.BasketContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AvailableUpgradesModal.js","sourceRoot":"/","sources":["src/components/steps/room/AvailableUpgradesModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { AddToCartEvent } from '@frontend/events';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport React, { FC, useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport SimpleModal from '@/components/generic/modal/SimpleModal';\nimport Text, { TextType } from '@/components/generic/Text';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport LargeRoomCard from '@/components/steps/room/LargeRoomCard';\nimport { useBig4 } from '@/hooks/Big4';\nimport BasketRow from '@/models/BasketRow';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport RoomUpsellFeature from '@/providers/feature/RoomUpsellFeature';\nimport { Color } from '@/util/Color';\nimport DataLayer from '@/util/DataLayer';\n\nconst AvailableUpgradesModal: FC = () => {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const { memberNumber } = useBig4();\n const [isOpen, setIsOpen] = useState(false);\n const [row, setRow] = useState<BasketRow | null>(null);\n\n const basketContext = useContext(BasketContext);\n\n const { on } = useEvent();\n\n const room = row?.getRoom();\n const selectedRate = row?.getRate();\n\n const [rates, setRates] = useState<RoomRate[]>();\n\n useEffect(() => {\n let cancelled = false;\n\n on(AddToCartEvent, async (event: AddToCartEvent): Promise<void | boolean> => {\n if (cancelled) return;\n\n setRow(event.basketRow);\n return true;\n });\n\n return () => {\n cancelled = true;\n };\n }, []);\n\n useEffect(() => {\n let cancelled = false;\n\n if (row) {\n API.Availability.fetchAvailabilityData(row, hotel?.hotelID as string, memberNumber).then((availableRooms) => {\n if (cancelled) return;\n\n const unfilteredRates: RoomRate[] = [];\n availableRooms\n ?.map((availableRoom) => {\n return availableRoom.getRates();\n })\n .forEach((fewRates) => {\n fewRates.forEach((oneRate) => {\n unfilteredRates.push(oneRate);\n });\n });\n const filteredRates = unfilteredRates\n .filter((rate) => {\n return rate.getAveragePrice() > (selectedRate?.getAveragePrice() as number) && rate.name === selectedRate?.name;\n })\n .sort((a: RoomRate, b: RoomRate) => {\n if (a.getAveragePrice() === selectedRate?.getAveragePrice()) return 1;\n if (b.getAveragePrice() === selectedRate?.getAveragePrice()) return -1;\n return a.getAveragePrice() - b.getAveragePrice();\n })\n .slice(0, 3);\n\n setRates(filteredRates);\n if (filteredRates.length === 0 && selectedRate) {\n // Proceed as if user clicked the nav.\n confirmRateOnClick();\n } else {\n setIsOpen(true);\n }\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, [row, memberNumber]);\n\n const closeModal = () => {\n setIsOpen(false);\n setRow(null);\n };\n\n const confirmRateOnClick = (rate?: RoomRate) => {\n if (row) {\n if (rate) {\n DataLayer.instance.sendUpsellConfirmed(row.getRate() as RoomRate, rate);\n\n row.setRate(rate);\n basketContext.updateBasketRow(row);\n closeModal();\n } else {\n DataLayer.instance.sendUpsellCancelled(row.getRate() as RoomRate);\n closeModal();\n }\n }\n };\n\n return RoomUpsellFeature.isActive() ? (\n <SimpleModal open={isOpen} onClose={closeModal} title={t(Translation.Step.Room.AvailableUpgrades)}>\n <div className=\"upgrades-room-modal\">\n <div className=\"current-room-block container\">\n <div className=\"u-flex u-flex-flex-start row\">\n <div className=\"image-wrapper col-md-3 col-12\">\n <ImageGallerySlider images={room?.getImages() || []} />\n </div>\n <div className=\"u-flex info-block col-md-7 col-sm-9\">\n <div>\n <Text color={Color.DarkGrey} bold>\n {t(Translation.Step.Room.CurrentSelectedRoom)}\n </Text>\n <Headline bold>{room?.name}</Headline>\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {selectedRate?.name}\n </Text>\n </div>\n <div>\n <div className=\"room-details--content-price flex-row\">\n <Headline bold>\n <Currency hideDecimals>{selectedRate?.getAveragePrice()}</Currency>\n </Headline>\n <Text color={Color.DarkGrey} inline>\n /{t(Translation.Misc.Night)}\n </Text>\n </div>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small} color={Color.Grey} inline className=\"u-nowrap\">\n {t(Translation.Step.Room.RoomInfo.IncludesTaxes)}\n </Text>\n </div>\n </div>\n </div>\n <div className=\"u-flex u-flex-align-center col-md-2 col-sm-3\">\n <BEButton wide filled primary onClick={() => confirmRateOnClick()}>\n {t(Translation.Step.Room.Confirm)}\n </BEButton>\n </div>\n </div>\n </div>\n <div className=\"container\" style={{ backgroundColor: Color.Snow }}>\n <div className=\"u-pad-top u-marg-bottom\">\n <div className=\"u-marg-bottom--heavy\">\n <Headline bold>{t(Translation.Step.Room.CheckOutOtherOptions)}</Headline>\n </div>\n <div className=\"row no-gutters\">\n {rates?.map((rate) => {\n const onSelectRate = () => {\n confirmRateOnClick(rate);\n };\n\n return (\n <div className=\"col-md-6 col-xl-4 u-marg-bottom u-pad-left--light u-pad-right--light\" key={rate.getRoom().name}>\n <LargeRoomCard selectedRate={selectedRate as RoomRate} rate={rate} onSelectRate={onSelectRate} />\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n </SimpleModal>\n ) : null;\n};\n\nexport default AvailableUpgradesModal;\n"]}
|
|
1
|
+
{"version":3,"file":"AvailableUpgradesModal.js","sourceRoot":"/","sources":["src/components/steps/room/AvailableUpgradesModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { AddToCartEvent } from '@frontend/events';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport React, { FC, useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport SimpleModal from '@/components/generic/modal/SimpleModal';\nimport Text, { TextType } from '@/components/generic/Text';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport LargeRoomCard from '@/components/steps/room/LargeRoomCard';\nimport { useExternalMember } from '@/hooks/useExternalMember';\nimport BasketRow from '@/models/BasketRow';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport RoomUpsellFeature from '@/providers/feature/RoomUpsellFeature';\nimport { Color } from '@/util/Color';\nimport DataLayer from '@/util/DataLayer';\n\nconst AvailableUpgradesModal: FC = () => {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const { memberNumber } = useExternalMember();\n const [isOpen, setIsOpen] = useState(false);\n const [row, setRow] = useState<BasketRow | null>(null);\n\n const basketContext = useContext(BasketContext);\n\n const { on } = useEvent();\n\n const room = row?.getRoom();\n const selectedRate = row?.getRate();\n\n const [rates, setRates] = useState<RoomRate[]>();\n\n useEffect(() => {\n let cancelled = false;\n\n on(AddToCartEvent, async (event: AddToCartEvent): Promise<void | boolean> => {\n if (cancelled) return;\n\n setRow(event.basketRow);\n return true;\n });\n\n return () => {\n cancelled = true;\n };\n }, []);\n\n useEffect(() => {\n let cancelled = false;\n\n if (row) {\n API.Availability.fetchAvailabilityData(row, hotel?.hotelID as string, memberNumber).then((availableRooms) => {\n if (cancelled) return;\n\n const unfilteredRates: RoomRate[] = [];\n availableRooms\n ?.map((availableRoom) => {\n return availableRoom.getRates();\n })\n .forEach((fewRates) => {\n fewRates.forEach((oneRate) => {\n unfilteredRates.push(oneRate);\n });\n });\n const filteredRates = unfilteredRates\n .filter((rate) => {\n return rate.getAveragePrice() > (selectedRate?.getAveragePrice() as number) && rate.name === selectedRate?.name;\n })\n .sort((a: RoomRate, b: RoomRate) => {\n if (a.getAveragePrice() === selectedRate?.getAveragePrice()) return 1;\n if (b.getAveragePrice() === selectedRate?.getAveragePrice()) return -1;\n return a.getAveragePrice() - b.getAveragePrice();\n })\n .slice(0, 3);\n\n setRates(filteredRates);\n if (filteredRates.length === 0 && selectedRate) {\n // Proceed as if user clicked the nav.\n confirmRateOnClick();\n } else {\n setIsOpen(true);\n }\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, [row, memberNumber]);\n\n const closeModal = () => {\n setIsOpen(false);\n setRow(null);\n };\n\n const confirmRateOnClick = (rate?: RoomRate) => {\n if (row) {\n if (rate) {\n DataLayer.instance.sendUpsellConfirmed(row.getRate() as RoomRate, rate);\n\n row.setRate(rate);\n basketContext.updateBasketRow(row);\n closeModal();\n } else {\n DataLayer.instance.sendUpsellCancelled(row.getRate() as RoomRate);\n closeModal();\n }\n }\n };\n\n return RoomUpsellFeature.isActive() ? (\n <SimpleModal open={isOpen} onClose={closeModal} title={t(Translation.Step.Room.AvailableUpgrades)}>\n <div className=\"upgrades-room-modal\">\n <div className=\"current-room-block container\">\n <div className=\"u-flex u-flex-flex-start row\">\n <div className=\"image-wrapper col-md-3 col-12\">\n <ImageGallerySlider images={room?.getImages() || []} />\n </div>\n <div className=\"u-flex info-block col-md-7 col-sm-9\">\n <div>\n <Text color={Color.DarkGrey} bold>\n {t(Translation.Step.Room.CurrentSelectedRoom)}\n </Text>\n <Headline bold>{room?.name}</Headline>\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {selectedRate?.name}\n </Text>\n </div>\n <div>\n <div className=\"room-details--content-price flex-row\">\n <Headline bold>\n <Currency hideDecimals>{selectedRate?.getAveragePrice()}</Currency>\n </Headline>\n <Text color={Color.DarkGrey} inline>\n /{t(Translation.Misc.Night)}\n </Text>\n </div>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small} color={Color.Grey} inline className=\"u-nowrap\">\n {t(Translation.Step.Room.RoomInfo.IncludesTaxes)}\n </Text>\n </div>\n </div>\n </div>\n <div className=\"u-flex u-flex-align-center col-md-2 col-sm-3\">\n <BEButton wide filled primary onClick={() => confirmRateOnClick()}>\n {t(Translation.Step.Room.Confirm)}\n </BEButton>\n </div>\n </div>\n </div>\n <div className=\"container\" style={{ backgroundColor: Color.Snow }}>\n <div className=\"u-pad-top u-marg-bottom\">\n <div className=\"u-marg-bottom--heavy\">\n <Headline bold>{t(Translation.Step.Room.CheckOutOtherOptions)}</Headline>\n </div>\n <div className=\"row no-gutters\">\n {rates?.map((rate) => {\n const onSelectRate = () => {\n confirmRateOnClick(rate);\n };\n\n return (\n <div className=\"col-md-6 col-xl-4 u-marg-bottom u-pad-left--light u-pad-right--light\" key={rate.getRoom().name}>\n <LargeRoomCard selectedRate={selectedRate as RoomRate} rate={rate} onSelectRate={onSelectRate} />\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n </SimpleModal>\n ) : null;\n};\n\nexport default AvailableUpgradesModal;\n"]}
|
|
@@ -3,5 +3,5 @@ interface Big4MemberModalProps {
|
|
|
3
3
|
isOpen: boolean;
|
|
4
4
|
onClose: () => void;
|
|
5
5
|
}
|
|
6
|
-
declare const
|
|
7
|
-
export default
|
|
6
|
+
declare const ExternalMemberModal: FC<Big4MemberModalProps>;
|
|
7
|
+
export default ExternalMemberModal;
|
|
@@ -48,15 +48,18 @@ const Text_1 = __importDefault(require("../../../generic/Text"));
|
|
|
48
48
|
const TextBox_1 = __importDefault(require("../../../generic/TextBox"));
|
|
49
49
|
const contexts_1 = require("../../../../contexts");
|
|
50
50
|
const hooks_1 = require("../../../../hooks");
|
|
51
|
+
const useExternalMember_1 = require("../../../../hooks/useExternalMember");
|
|
52
|
+
const HotelDTO_1 = require("../../../../models/Api/HotelDTO");
|
|
51
53
|
const RoomstayThemeEngine_1 = __importDefault(require("../../../../providers/RoomstayThemeEngine"));
|
|
52
54
|
const Translation_1 = require("../../../../translations/Translation");
|
|
53
55
|
const Color_1 = require("../../../../util/Color");
|
|
54
56
|
const Big4MemberModal_module_scss_1 = __importDefault(require("./Big4MemberModal.module.scss"));
|
|
55
|
-
const
|
|
57
|
+
const ExternalMemberModal = ({ isOpen, onClose }) => {
|
|
56
58
|
const { hotel } = (0, hooks_1.useCurrentHotel)();
|
|
57
59
|
const ccx = (0, react_1.useContext)(contexts_1.CompanyContext);
|
|
58
60
|
const [isLoading, setIsLoading] = (0, react_1.useState)(false);
|
|
59
61
|
const [errorMessage, setErrorMessage] = (0, react_1.useState)('');
|
|
62
|
+
const { externalMemberType } = (0, useExternalMember_1.useExternalMember)();
|
|
60
63
|
const { register, formState: { errors }, handleSubmit, } = (0, react_hook_form_1.useForm)({
|
|
61
64
|
mode: 'onChange',
|
|
62
65
|
});
|
|
@@ -89,20 +92,29 @@ const Big4MemberModal = ({ isOpen, onClose }) => {
|
|
|
89
92
|
}
|
|
90
93
|
});
|
|
91
94
|
const { t } = (0, react_i18next_1.useTranslation)();
|
|
95
|
+
const { title, image } = (() => {
|
|
96
|
+
switch (externalMemberType) {
|
|
97
|
+
default:
|
|
98
|
+
case HotelDTO_1.EIntegration.Big4:
|
|
99
|
+
return { title: t(Translation_1.Translation.ExternalMemberPopup.Big4Title), image: 'big4-login.svg' };
|
|
100
|
+
case HotelDTO_1.EIntegration.Top10:
|
|
101
|
+
return { title: t(Translation_1.Translation.ExternalMemberPopup.Top10Title), image: 'top10-login.jpeg' };
|
|
102
|
+
}
|
|
103
|
+
})();
|
|
92
104
|
return (react_1.default.createElement(SimpleModal_1.default, { open: isOpen, onClose: onClose, size: SimpleModal_1.SimpleModalSize.Normal, alignCenter: true, bodyClassName: Big4MemberModal_module_scss_1.default.root },
|
|
93
105
|
react_1.default.createElement("div", { className: Big4MemberModal_module_scss_1.default.container },
|
|
94
106
|
react_1.default.createElement("div", { className: Big4MemberModal_module_scss_1.default.logoSection },
|
|
95
|
-
react_1.default.createElement("img", { className: Big4MemberModal_module_scss_1.default.img, src: RoomstayThemeEngine_1.default.getImageAssetUrl(
|
|
107
|
+
react_1.default.createElement("img", { className: Big4MemberModal_module_scss_1.default.img, src: RoomstayThemeEngine_1.default.getImageAssetUrl(image), alt: `${externalMemberType} Logo` })),
|
|
96
108
|
react_1.default.createElement("div", null,
|
|
97
109
|
react_1.default.createElement("form", { onSubmit: handleSubmit(onSubmit) },
|
|
98
|
-
react_1.default.createElement(Headline_1.default, { bold: true, color: modalPrimaryColor },
|
|
110
|
+
react_1.default.createElement(Headline_1.default, { bold: true, color: modalPrimaryColor }, title),
|
|
99
111
|
react_1.default.createElement("div", { className: "u-marg-top" },
|
|
100
112
|
react_1.default.createElement(InputGroup_1.default, { dimensions: "1" },
|
|
101
113
|
react_1.default.createElement(TextBox_1.default, Object.assign({ iconProps: {
|
|
102
114
|
color: Color_1.Color.DarkGrey,
|
|
103
115
|
}, icon: Icon_1.IconType.Star, inputProps: {
|
|
104
116
|
disabled: isLoading,
|
|
105
|
-
}, wide: true, placeholder: t(Translation_1.Translation.
|
|
117
|
+
}, wide: true, placeholder: t(Translation_1.Translation.ExternalMemberPopup.Fields.MemberNumber), required: true, validationStatus: getValidationClass('memberNumber') }, register('memberNumber', {
|
|
106
118
|
required: true,
|
|
107
119
|
pattern: {
|
|
108
120
|
value: /^[0-9]*$/,
|
|
@@ -115,12 +127,12 @@ const Big4MemberModal = ({ isOpen, onClose }) => {
|
|
|
115
127
|
color: Color_1.Color.DarkGrey,
|
|
116
128
|
}, icon: Icon_1.IconType.Person, inputProps: {
|
|
117
129
|
disabled: isLoading,
|
|
118
|
-
}, wide: true, placeholder: t(Translation_1.Translation.
|
|
130
|
+
}, wide: true, placeholder: t(Translation_1.Translation.ExternalMemberPopup.Fields.FamilyName), required: true, validationStatus: getValidationClass('familyName') }, register('familyName', {
|
|
119
131
|
required: true,
|
|
120
132
|
})))))),
|
|
121
|
-
react_1.default.createElement(BEButton_1.default, { isLoading: isLoading, htmlType: "submit", className: "u-marg-top", size: "normal", filled: true, primary: hotel === null || hotel === void 0 ? void 0 : hotel.memberOnlyModalUsePrimaryColor, success: !(hotel === null || hotel === void 0 ? void 0 : hotel.memberOnlyModalUsePrimaryColor), stopIconAnimation: true, icon: Icon_1.IconType.ArrowRight, iconPosition: "right" }, t(Translation_1.Translation.
|
|
133
|
+
react_1.default.createElement(BEButton_1.default, { isLoading: isLoading, htmlType: "submit", className: "u-marg-top", size: "normal", filled: true, primary: hotel === null || hotel === void 0 ? void 0 : hotel.memberOnlyModalUsePrimaryColor, success: !(hotel === null || hotel === void 0 ? void 0 : hotel.memberOnlyModalUsePrimaryColor), stopIconAnimation: true, icon: Icon_1.IconType.ArrowRight, iconPosition: "right" }, t(Translation_1.Translation.ExternalMemberPopup.Submit)),
|
|
122
134
|
react_1.default.createElement("div", { className: "u-marg-top" },
|
|
123
135
|
react_1.default.createElement(Text_1.default, { bold: true, color: Color_1.Color.Danger }, errorMessage)))))));
|
|
124
136
|
};
|
|
125
|
-
exports.default =
|
|
126
|
-
//# sourceMappingURL=
|
|
137
|
+
exports.default = ExternalMemberModal;
|
|
138
|
+
//# sourceMappingURL=ExternalMemberModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExternalMemberModal.js","sourceRoot":"/","sources":["src/components/steps/room/MemberSignInModal/ExternalMemberModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { FC, useContext, useState } from 'react';\nimport { SubmitHandler, useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport InputGroup from '@/components/generic/InputGroup/InputGroup';\nimport SimpleModal, { SimpleModalSize } from '@/components/generic/modal/SimpleModal';\nimport Text from '@/components/generic/Text';\nimport TextBox from '@/components/generic/TextBox';\nimport { CompanyContext } from '@/contexts';\nimport { useCurrentHotel } from '@/hooks';\nimport { useExternalMember } from '@/hooks/useExternalMember';\nimport { EIntegration } from '@/models/Api/HotelDTO';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\nimport styles from './Big4MemberModal.module.scss';\n\ninterface Big4MemberModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\ninterface Big4MemberFormValues {\n memberNumber: string;\n familyName: string;\n}\n\nconst ExternalMemberModal: FC<Big4MemberModalProps> = ({ isOpen, onClose }) => {\n const { hotel } = useCurrentHotel();\n const ccx = useContext(CompanyContext);\n const [isLoading, setIsLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const { externalMemberType } = useExternalMember();\n\n const {\n register,\n formState: { errors },\n handleSubmit,\n } = useForm<Big4MemberFormValues>({\n mode: 'onChange',\n });\n\n const modalPrimaryColor = hotel?.memberOnlyModalUsePrimaryColor ? Color.Accent : Color.Success;\n const getValidationClass = (name: keyof Big4MemberFormValues) => {\n if (errors) {\n if (errors[name]) {\n return 'error';\n } else {\n return 'success';\n }\n }\n };\n const onSubmit: SubmitHandler<Big4MemberFormValues> = async ({ familyName, memberNumber }) => {\n setIsLoading(true);\n setErrorMessage('');\n try {\n const number = await API.Member.signInBig4Member(memberNumber, familyName, hotel?.hotelID as string);\n localStorage.setItem('hotel' + hotel?.hotelID + 'isFromBig4', number.memberId);\n ccx.signUserIn(number.memberId.toString(), true);\n } catch (e: any) {\n if (e.Message) {\n setErrorMessage(e.Message);\n }\n } finally {\n setIsLoading(false);\n }\n };\n\n const { t } = useTranslation();\n\n const { title, image } = (() => {\n switch (externalMemberType) {\n default:\n case EIntegration.Big4:\n return { title: t(Translation.ExternalMemberPopup.Big4Title), image: 'big4-login.svg' };\n case EIntegration.Top10:\n return { title: t(Translation.ExternalMemberPopup.Top10Title), image: 'top10-login.jpeg' };\n }\n })();\n\n return (\n <SimpleModal open={isOpen} onClose={onClose} size={SimpleModalSize.Normal} alignCenter bodyClassName={styles.root}>\n <div className={styles.container}>\n <div className={styles.logoSection}>\n <img className={styles.img} src={RoomstayThemeEngine.getImageAssetUrl(image)} alt={`${externalMemberType} Logo`} />\n </div>\n <div>\n <form onSubmit={handleSubmit(onSubmit)}>\n <Headline bold color={modalPrimaryColor}>\n {title}\n </Headline>\n <div className=\"u-marg-top\">\n <InputGroup dimensions=\"1\">\n <TextBox\n iconProps={{\n color: Color.DarkGrey,\n }}\n icon={IconType.Star}\n inputProps={{\n disabled: isLoading,\n }}\n wide\n placeholder={t(Translation.ExternalMemberPopup.Fields.MemberNumber)}\n required\n validationStatus={getValidationClass('memberNumber')}\n {...register('memberNumber', {\n required: true,\n pattern: {\n value: /^[0-9]*$/,\n message: 'Please enter a valid member number',\n },\n })}\n />\n </InputGroup>\n <div className=\"u-marg-top--light\">\n <InputGroup dimensions=\"1\">\n <TextBox\n iconProps={{\n color: Color.DarkGrey,\n }}\n icon={IconType.Person}\n inputProps={{\n disabled: isLoading,\n }}\n wide\n placeholder={t(Translation.ExternalMemberPopup.Fields.FamilyName)}\n required\n validationStatus={getValidationClass('familyName')}\n {...register('familyName', {\n required: true,\n })}\n />\n </InputGroup>\n </div>\n </div>\n <BEButton\n isLoading={isLoading}\n htmlType=\"submit\"\n className=\"u-marg-top\"\n size=\"normal\"\n filled\n primary={hotel?.memberOnlyModalUsePrimaryColor}\n success={!hotel?.memberOnlyModalUsePrimaryColor}\n stopIconAnimation\n icon={IconType.ArrowRight}\n iconPosition=\"right\"\n >\n {t(Translation.ExternalMemberPopup.Submit)}\n </BEButton>\n <div className=\"u-marg-top\">\n <Text bold color={Color.Danger}>\n {errorMessage}\n </Text>\n </div>\n </form>\n </div>\n </div>\n </SimpleModal>\n );\n};\n\nexport default ExternalMemberModal;\n"]}
|
|
@@ -40,7 +40,7 @@ const Headline_1 = __importDefault(require("../../generic/Headline"));
|
|
|
40
40
|
const Icon_1 = require("../../generic/Icon/Icon");
|
|
41
41
|
const SmallSpinner_1 = __importDefault(require("../../generic/loader/SmallSpinner"));
|
|
42
42
|
const Text_1 = __importStar(require("../../generic/Text"));
|
|
43
|
-
const
|
|
43
|
+
const useExternalMember_1 = require("../../../hooks/useExternalMember");
|
|
44
44
|
const CurrentHotelHook_1 = require("../../../hooks/CurrentHotelHook");
|
|
45
45
|
const DIProvider_1 = require("../../../providers/DIProvider");
|
|
46
46
|
const Color_1 = require("../../../util/Color");
|
|
@@ -48,7 +48,7 @@ const StepManager_1 = __importDefault(require("../../../util/StepManager"));
|
|
|
48
48
|
const TravelerNotfound_1 = __importDefault(require("../../generic/TravelerNotfound"));
|
|
49
49
|
function OriginalNoRoomsFoundBlock() {
|
|
50
50
|
const { hotel } = (0, CurrentHotelHook_1.useCurrentHotel)();
|
|
51
|
-
const { memberNumber } = (0,
|
|
51
|
+
const { memberNumber } = (0, useExternalMember_1.useExternalMember)();
|
|
52
52
|
const [isLoading, setIsLoading] = (0, react_1.useState)(false);
|
|
53
53
|
const [minNightStay, setMinNightStay] = (0, react_1.useState)(-1);
|
|
54
54
|
const basketContext = (0, react_1.useContext)(contexts_1.BasketContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NoRoomsFoundBlock.js","sourceRoot":"/","sources":["src/components/steps/room/NoRoomsFoundBlock.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmD;AACnD,+CAA+D;AAC/D,iDAA+C;AAC/C,uDAAwC;AACxC,0DAAuD;AAEvD,iFAAyD;AACzD,kEAAmC;AACnC,oEAA8D;AAC9D,6EAAqD;AACrD,6EAAqD;AACrD,yDAA0D;AAC1D,4FAAoE;AACpE,kEAA2D;AAC3D,
|
|
1
|
+
{"version":3,"file":"NoRoomsFoundBlock.js","sourceRoot":"/","sources":["src/components/steps/room/NoRoomsFoundBlock.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmD;AACnD,+CAA+D;AAC/D,iDAA+C;AAC/C,uDAAwC;AACxC,0DAAuD;AAEvD,iFAAyD;AACzD,kEAAmC;AACnC,oEAA8D;AAC9D,6EAAqD;AACrD,6EAAqD;AACrD,yDAA0D;AAC1D,4FAAoE;AACpE,kEAA2D;AAC3D,iEAA8D;AAC9D,+DAA2D;AAC3D,uDAAgD;AAChD,wCAAqC;AACrC,qEAA6C;AAE7C,sFAA8D;AAE9D,SAAS,yBAAyB;IAC9B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,kCAAe,GAAE,CAAC;IACpC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAA,qCAAiB,GAAE,CAAC;IAE7C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAC,CAAC,CAAC,CAAC,CAAC;IAErD,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAChD,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,IAAA,iBAAS,EAAC,GAAG,EAAE;;QACX,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,MAAM,SAAS,GAAG,MAAA,aAAa,CAAC,iBAAiB,mCAAI,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE;YACtB,OAAO;SACV;QAED,YAAY,CAAC,IAAI,CAAC,CAAC;QAEnB,oBAAG,CAAC,YAAY,CAAC,qBAAqB,CAAC,SAAS,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC9F,IAAI,CAAC,SAAS,EAAE;gBACZ,YAAY,CAAC,KAAK,CAAC,CAAC;gBAEpB,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE;oBAC/B,IAAI,SAAS,CAAC,eAAe,EAAE,GAAG,QAAQ,CAAC,QAAQ;wBAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;iBAC3F;qBAAM;oBACH,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvB;aACJ;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACR,SAAS,GAAG,IAAI,CAAC;YAEjB,YAAY,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC,CAAC;IACN,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACH,uCAAK,SAAS,EAAC,gBAAgB;QAC1B,SAAS,IAAI,8BAAC,sBAAY,OAAG;QAC9B,8BAAC,wBAAc,IAAC,IAAI,EAAE,YAAY,KAAK,CAAC,CAAC;YACrC,8BAAC,eAAK,IAAC,IAAI,EAAE,iBAAS,CAAC,OAAO,EAAE,IAAI,EAAE,eAAQ,CAAC,KAAK;gBAChD,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IACrB,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;oBAClC,YAAY;iBACf,CAAC,CACC,CACH,CACK;QACjB,uCAAK,SAAS,EAAC,sBAAsB;YAEjC,8BAAC,0BAAgB,OAAG,CAClB;QACN,uCAAK,SAAS,EAAC,eAAe;YAC1B,8BAAC,kBAAQ,IAAC,IAAI,EAAC,OAAO,EAAC,IAAI,UACtB,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAC5C,CACT;QACN,2CACK,SAAS,CAAC,CAAC,CAAC,8BAAC,sBAAY,OAAG,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,IAAI,8BAAC,cAAI,IAAC,KAAK,EAAE,aAAK,CAAC,QAAQ,IAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,CAAC,CAAQ,CAC/J;QACL,YAAY,KAAK,CAAC,CAAC,IAAI,8BAAC,cAAI,IAAC,KAAK,EAAE,aAAK,CAAC,QAAQ,IAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAQ;QAC/G,8BAAC,cAAI,IAAC,KAAK,EAAE,aAAK,CAAC,QAAQ,IAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAQ;QAChG,uCAAK,SAAS,EAAC,YAAY;YACvB,8BAAC,uBAAI,IAAC,EAAE,EAAE,qBAAW,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE;gBAC7C,8BAAC,kBAAQ,IAAC,MAAM,UAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAY,CAC1E,CACL,CACJ,CACT,CAAC;AACN,CAAC;AAEY,QAAA,uBAAuB,GAAG,qBAAqB,CAAC;AAE7D,SAAwB,iBAAiB;IACrC,OAAO,IAAA,mBAAM,EAAC,+BAAuB,EAAE,yBAAyB,EAAE,IAAI,CAAC,CAAC;AAC5E,CAAC;AAFD,oCAEC","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport API from '@/api/BookingAPI';\nimport Alert, { AlertType } from '@/components/generic/Alert';\nimport BEButton from '@/components/generic/BEButton';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport SmallSpinner from '@/components/generic/loader/SmallSpinner';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { useExternalMember } from '@/hooks/useExternalMember';\nimport { useCurrentHotel } from '@/hooks/CurrentHotelHook';\nimport { withDI } from '@/providers/DIProvider';\nimport { Color } from '@/util/Color';\nimport StepManager from '@/util/StepManager';\n\nimport TravelerNotfound from '../../generic/TravelerNotfound';\n\nfunction OriginalNoRoomsFoundBlock() {\n const { hotel } = useCurrentHotel();\n const { memberNumber } = useExternalMember();\n\n const [isLoading, setIsLoading] = useState(false);\n const [minNightStay, setMinNightStay] = useState(-1);\n\n const basketContext = useContext(BasketContext);\n const { t } = useTranslation();\n\n useEffect(() => {\n let cancelled = false;\n\n const basketRow = basketContext.selectedBasketRow ?? basketContext.currentBasketRows[0];\n if (!basketRow || !hotel) {\n return;\n }\n\n setIsLoading(true);\n\n API.Availability.fetchMinNightStayData(basketRow, hotel?.hotelID, memberNumber).then((response) => {\n if (!cancelled) {\n setIsLoading(false);\n\n if (response.Status === 'MinStay') {\n if (basketRow.getNumberOfDays() < response.Quantity) setMinNightStay(response.Quantity);\n } else {\n setMinNightStay(-1);\n }\n }\n });\n\n return () => {\n cancelled = true;\n\n setIsLoading(false);\n };\n }, []);\n\n return (\n <div className=\"u-align-center\">\n {isLoading && <SmallSpinner />}\n <AutoAutoHeight open={minNightStay !== -1}>\n <Alert type={AlertType.Accent1} icon={IconType.Error}>\n <Text type={TextType.Small}>\n {t(Translation.Step.Room.MinimumStay, {\n minNightStay,\n })}\n </Text>\n </Alert>\n </AutoAutoHeight>\n <div className=\"u-marg-bottom--heavy\">\n {/*BLANK SLATE IMAGE*/}\n <TravelerNotfound />\n </div>\n <div className=\"u-marg-bottom\">\n <Headline size=\"large\" bold>\n {t(Translation.Step.Room.NoRoomsFound.NoRoomsFound)}\n </Headline>\n </div>\n <div>\n {isLoading ? <SmallSpinner /> : minNightStay !== -1 && <Text color={Color.DarkGrey}>{t(Translation.Step.Room.NoRoomsFound.MinNightStay, { minNightStay })}</Text>}\n </div>\n {minNightStay === -1 && <Text color={Color.DarkGrey}>{t(Translation.Step.Room.NoRoomsFound.WeApologise)}</Text>}\n <Text color={Color.DarkGrey}>{t(Translation.Step.Room.NoRoomsFound.PleaseCheckYourDates)}</Text>\n <div className=\"u-marg-top\">\n <Link to={StepManager.getFirstStep().getStepUrl()}>\n <BEButton filled>{t(Translation.Step.Room.NoRoomsFound.NewSearch)}</BEButton>\n </Link>\n </div>\n </div>\n );\n}\n\nexport const BE_NO_ROOMS_FOUND_BLOCK = 'BENoRoomsFoundBlock';\n\nexport default function NoRoomsFoundBlock() {\n return withDI(BE_NO_ROOMS_FOUND_BLOCK, OriginalNoRoomsFoundBlock, null);\n}\n"]}
|
|
@@ -37,7 +37,7 @@ const Headline_1 = __importDefault(require("../../generic/Headline"));
|
|
|
37
37
|
const Icon_1 = __importStar(require("../../generic/Icon/Icon"));
|
|
38
38
|
const SmallSpinner_1 = __importDefault(require("../../generic/loader/SmallSpinner"));
|
|
39
39
|
const Text_1 = __importStar(require("../../generic/Text"));
|
|
40
|
-
const
|
|
40
|
+
const useExternalMember_1 = require("../../../hooks/useExternalMember");
|
|
41
41
|
const ImageProvider_1 = __importStar(require("../../../providers/ImageProvider"));
|
|
42
42
|
const Color_1 = require("../../../util/Color");
|
|
43
43
|
const ScreenSize_1 = __importDefault(require("../../../util/ScreenSize"));
|
|
@@ -53,7 +53,7 @@ function RoomListCrossSellBlock(props) {
|
|
|
53
53
|
const [description, setDescription] = (0, react_1.useState)('');
|
|
54
54
|
const [link, setLink] = (0, react_1.useState)('');
|
|
55
55
|
const [rooms, setRooms] = (0, react_1.useState)([]);
|
|
56
|
-
const { memberNumber } = (0,
|
|
56
|
+
const { memberNumber } = (0, useExternalMember_1.useExternalMember)();
|
|
57
57
|
(0, react_1.useEffect)(() => {
|
|
58
58
|
const row = basketContext.selectedBasketRow;
|
|
59
59
|
if (!row) {
|