@roomstay/frontend 2.6.53 → 2.6.54
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/288.bundle.js +1 -1
- package/dist/493.bundle.js +1 -1
- package/dist/839.bundle.js +1 -1
- package/dist/main.bundle.js +1 -1
- package/dist/src/components/generic/date/FloatingDatePicker.d.ts +1 -0
- package/dist/src/components/generic/date/FloatingDatePicker.js +8 -0
- package/dist/src/components/generic/date/FloatingDatePicker.js.map +1 -1
- package/dist/src/components/steps/room/AvailableUpgradesModal.js +5 -0
- package/dist/src/components/steps/room/AvailableUpgradesModal.js.map +1 -1
- package/dist/src/components/steps/room/RoomList.js +18 -4
- package/dist/src/components/steps/room/RoomList.js.map +1 -1
- package/dist/src/components/steps/room/RoomModal.js +18 -10
- package/dist/src/components/steps/room/RoomModal.js.map +1 -1
- package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js +4 -1
- package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/RoomDetailsBedsBlock.js +1 -1
- package/dist/src/components/steps/room/roomDetails/RoomDetailsBedsBlock.js.map +1 -1
- package/dist/src/contexts/BasketContext/BasketContextType.d.ts +7 -1
- package/dist/src/contexts/BasketContext/BasketContextType.js.map +1 -1
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js +9 -2
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +1 -1
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
- package/dist/src/contexts/HotelOverridesContext.js +4 -0
- package/dist/src/contexts/HotelOverridesContext.js.map +1 -1
- package/dist/src/hooks/EventHook.d.ts +1 -1
- package/dist/src/hooks/EventHook.js +1 -1
- package/dist/src/hooks/EventHook.js.map +1 -1
- package/dist/src/models/Api/HotelOverrideDTO.d.ts +4 -0
- package/dist/src/models/Api/HotelOverrideDTO.js.map +1 -1
- package/dist/src/translations/languages/en-gb.js +1 -1
- package/dist/src/translations/languages/en-gb.js.map +1 -1
- package/dist/src/util/DerbysoftPixel.js +37 -0
- package/dist/src/util/DerbysoftPixel.js.map +1 -1
- package/dist/test.bundle.js +1 -1
- package/package.json +1 -1
|
@@ -7,5 +7,6 @@ export interface FloatingDatePickerProps {
|
|
|
7
7
|
selectedDateChanged?: (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => void;
|
|
8
8
|
className?: string;
|
|
9
9
|
isAboveNav?: boolean;
|
|
10
|
+
onDatePickerOpenChange?: (isOpen: boolean) => void;
|
|
10
11
|
}
|
|
11
12
|
export default function FloatingDatePicker(props: FloatingDatePickerProps): JSX.Element;
|
|
@@ -54,6 +54,14 @@ function FloatingDatePicker(props) {
|
|
|
54
54
|
const onOverlayOpen = () => {
|
|
55
55
|
setIsOpen(true);
|
|
56
56
|
};
|
|
57
|
+
(0, react_1.useEffect)(() => {
|
|
58
|
+
var _a;
|
|
59
|
+
(_a = props === null || props === void 0 ? void 0 : props.onDatePickerOpenChange) === null || _a === void 0 ? void 0 : _a.call(props, isOpen);
|
|
60
|
+
return () => {
|
|
61
|
+
var _a;
|
|
62
|
+
(_a = props === null || props === void 0 ? void 0 : props.onDatePickerOpenChange) === null || _a === void 0 ? void 0 : _a.call(props, false);
|
|
63
|
+
};
|
|
64
|
+
}, [isOpen]);
|
|
57
65
|
const inner = (react_1.default.createElement("div", { className: "d-flex align-items-center flex-column" },
|
|
58
66
|
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 })));
|
|
59
67
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloatingDatePicker.js","sourceRoot":"/","sources":["src/components/generic/date/FloatingDatePicker.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+
|
|
1
|
+
{"version":3,"file":"FloatingDatePicker.js","sourceRoot":"/","sources":["src/components/generic/date/FloatingDatePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import dayjs from 'dayjs';\nimport React, { useEffect, 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 onDatePickerOpenChange?: (isOpen: boolean) => void;\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 useEffect(() => {\n props?.onDatePickerOpenChange?.(isOpen);\n return () => {\n props?.onDatePickerOpenChange?.(false);\n };\n }, [isOpen]);\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"]}
|
|
@@ -132,6 +132,11 @@ const AvailableUpgradesModal = () => {
|
|
|
132
132
|
DataLayer_1.default.instance.sendUpsellConfirmed({ from: row.getStartDate(), to: row.getEndDate() }, row.getRate(), rate);
|
|
133
133
|
row.setRate(rate, RoomUpsellFeature_1.default.isActive());
|
|
134
134
|
basketContext.updateBasketRow(row);
|
|
135
|
+
// TODO: RE-2211 - Look to refactor globally how we're loading the quote details to account for all other changes.
|
|
136
|
+
// This is a workaround to force the quote details to be reloaded
|
|
137
|
+
if (hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit) {
|
|
138
|
+
basketContext.getBasketQuoteDetails(() => true);
|
|
139
|
+
}
|
|
135
140
|
closeModal();
|
|
136
141
|
}
|
|
137
142
|
else {
|
|
@@ -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 { useSignedInMember } from '@/hooks/useSignedInMember';\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 } = useSignedInMember();\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, true).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 cancelUpsell = () => {\n if (row) {\n DataLayer.instance.sendUpsellCancelled({ from: row.getStartDate(), to: row.getEndDate() }, row.getRate() as RoomRate);\n }\n\n closeModal();\n };\n\n const confirmRateOnClick = (rate?: RoomRate) => {\n if (row) {\n if (rate) {\n DataLayer.instance.sendUpsellConfirmed({ from: row.getStartDate(), to: row.getEndDate() }, row.getRate() as RoomRate, rate);\n\n row.setRate(rate, RoomUpsellFeature.isActive());\n basketContext.updateBasketRow(row);\n closeModal();\n } else {\n cancelUpsell();\n }\n }\n };\n\n return RoomUpsellFeature.isActive() ? (\n <SimpleModal open={isOpen} onClose={cancelUpsell} 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} className=\"u-nowrap\">\n <span dangerouslySetInnerHTML={{ __html: t(Translation.Step.Room.RoomInfo.IncludesTaxes) }}></span>\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 { useSignedInMember } from '@/hooks/useSignedInMember';\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 } = useSignedInMember();\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, true).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 cancelUpsell = () => {\n if (row) {\n DataLayer.instance.sendUpsellCancelled({ from: row.getStartDate(), to: row.getEndDate() }, row.getRate() as RoomRate);\n }\n\n closeModal();\n };\n\n const confirmRateOnClick = (rate?: RoomRate) => {\n if (row) {\n if (rate) {\n DataLayer.instance.sendUpsellConfirmed({ from: row.getStartDate(), to: row.getEndDate() }, row.getRate() as RoomRate, rate);\n\n row.setRate(rate, RoomUpsellFeature.isActive());\n basketContext.updateBasketRow(row);\n\n // TODO: RE-2211 - Look to refactor globally how we're loading the quote details to account for all other changes.\n // This is a workaround to force the quote details to be reloaded\n if (hotel?.requireDeposit) {\n basketContext.getBasketQuoteDetails(() => true);\n }\n\n closeModal();\n } else {\n cancelUpsell();\n }\n }\n };\n\n return RoomUpsellFeature.isActive() ? (\n <SimpleModal open={isOpen} onClose={cancelUpsell} 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} className=\"u-nowrap\">\n <span dangerouslySetInnerHTML={{ __html: t(Translation.Step.Room.RoomInfo.IncludesTaxes) }}></span>\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"]}
|
|
@@ -46,6 +46,7 @@ function RoomList() {
|
|
|
46
46
|
const { hotel } = (0, hooks_1.useCurrentHotel)();
|
|
47
47
|
const { rooms, loadingAttempted, isLoading, openRoom, apiHasError, retargetingRoom } = (0, RoomRateAvailabilityListFromApi_1.useRoomRateAvailabilityListFromApi)();
|
|
48
48
|
const roomListRef = (0, react_1.useRef)(null);
|
|
49
|
+
const timeoutRef = (0, react_1.useRef)(null);
|
|
49
50
|
const sortBy = beContext.currentRoomSort;
|
|
50
51
|
let listWhenLastScrolled = null;
|
|
51
52
|
const scrollIntoView = () => {
|
|
@@ -58,15 +59,28 @@ function RoomList() {
|
|
|
58
59
|
});
|
|
59
60
|
}
|
|
60
61
|
};
|
|
62
|
+
(0, react_1.useEffect)(() => {
|
|
63
|
+
return () => {
|
|
64
|
+
// Clear timeout on unmount or before next effect
|
|
65
|
+
if (timeoutRef.current) {
|
|
66
|
+
clearTimeout(timeoutRef.current);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}, []);
|
|
61
70
|
return (0, react_1.useMemo)(() => {
|
|
62
71
|
var _a;
|
|
63
72
|
const sortedRooms = [...rooms];
|
|
64
73
|
if (sortedRooms.length !== 0) {
|
|
65
74
|
sortedRooms.sort(RoomSortProvider_1.default.getSortByFunction(sortBy));
|
|
66
75
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
76
|
+
if (!basketContext.isDatePickerOpen && !isLoading && sortedRooms.length > 0) {
|
|
77
|
+
if (timeoutRef.current) {
|
|
78
|
+
clearTimeout(timeoutRef.current);
|
|
79
|
+
}
|
|
80
|
+
timeoutRef.current = setTimeout(() => {
|
|
81
|
+
scrollIntoView();
|
|
82
|
+
}, 100);
|
|
83
|
+
}
|
|
70
84
|
const elements = (react_1.default.createElement("div", { ref: roomListRef }, isLoading || !loadingAttempted ? (react_1.default.createElement(LargeLoader_1.default, null)) : sortedRooms.length ? (sortedRooms.map((room, index) => react_1.default.createElement(RoomDetails_1.default, { key: room.code, room: room, disableMarginBottom: index === sortedRooms.length - 1 }))) : (react_1.default.createElement(react_1.default.Fragment, null,
|
|
71
85
|
apiHasError ? react_1.default.createElement(StepRoomErrorForm_1.StepRoomErrorForm, null) : react_1.default.createElement(NoRoomsFoundBlock_1.default, null), (_a = hotel === null || hotel === void 0 ? void 0 : hotel.crossSellHotelIds) === null || _a === void 0 ? void 0 :
|
|
72
86
|
_a.map((hotelId) => (react_1.default.createElement(RoomListCrossSellBlock_1.default, { key: hotelId, hotelId: hotelId })))))));
|
|
@@ -74,7 +88,7 @@ function RoomList() {
|
|
|
74
88
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
75
89
|
react_1.default.createElement(RoomListAlert_1.RoomListAlert, null, !isLoading && retargetingRoom ? react_1.default.createElement(RoomDetailsRetargeting_1.RoomDetailsRetargeting, { key: retargetingRoom.code, room: retargetingRoom }) : null),
|
|
76
90
|
elements));
|
|
77
|
-
}, [rooms, isLoading, loadingAttempted, openRoom, sortBy, beContext.currentFilters, basketContext.loadedPromotion]);
|
|
91
|
+
}, [rooms, isLoading, loadingAttempted, openRoom, sortBy, beContext.currentFilters, basketContext.loadedPromotion, basketContext.isDatePickerOpen]);
|
|
78
92
|
}
|
|
79
93
|
exports.default = RoomList;
|
|
80
94
|
//# sourceMappingURL=RoomList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomList.js","sourceRoot":"/","sources":["src/components/steps/room/RoomList.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAyE;AACzE,2CAAkD;AAClD,+
|
|
1
|
+
{"version":3,"file":"RoomList.js","sourceRoot":"/","sources":["src/components/steps/room/RoomList.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext, useEffect, useMemo, useRef } from 'react';\n\nimport LargeLoader from '@/components/generic/loader/LargeLoader';\nimport RoomDetails from '@/components/steps/room/roomDetails/RoomDetails';\nimport RoomListCrossSellBlock from '@/components/steps/room/RoomListCrossSellBlock';\nimport { useRoomRateAvailabilityListFromApi } from '@/hooks/RoomRateAvailabilityListFromApi';\nimport { Room } from '@/models/Room/Room';\nimport RoomSortProvider from '@/providers/RoomSortProvider';\nimport DataLayer from '@/util/DataLayer';\nimport ScreenSize from '@/util/ScreenSize';\n\nimport NoRoomsFoundBlock from './NoRoomsFoundBlock';\nimport { RoomDetailsRetargeting } from './roomDetails/RoomDetailsRetargeting';\nimport { RoomListAlert } from './RoomListAlert';\nimport { StepRoomErrorForm } from './StepRoomErrorForm';\n\nexport default function RoomList() {\n const basketContext = useContext(BasketContext);\n const beContext = useContext(BookingEngineContext);\n\n const { hotel } = useCurrentHotel();\n const { rooms, loadingAttempted, isLoading, openRoom, apiHasError, retargetingRoom } = useRoomRateAvailabilityListFromApi();\n const roomListRef = useRef<HTMLDivElement | null>(null);\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n const sortBy = beContext.currentRoomSort;\n let listWhenLastScrolled: Room[] | null = null;\n\n const scrollIntoView = () => {\n if (roomListRef.current && listWhenLastScrolled !== rooms) {\n listWhenLastScrolled = rooms;\n const offset = beContext.screenSize <= ScreenSize.Medium ? 185 : 350;\n\n window.scrollTo({\n top: window.scrollY + (roomListRef.current.getBoundingClientRect().top - offset),\n behavior: 'smooth',\n });\n }\n };\n\n useEffect(() => {\n return () => {\n // Clear timeout on unmount or before next effect\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n return useMemo(() => {\n const sortedRooms = [...rooms];\n if (sortedRooms.length !== 0) {\n sortedRooms.sort(RoomSortProvider.getSortByFunction(sortBy));\n }\n\n if (!basketContext.isDatePickerOpen && !isLoading && sortedRooms.length > 0) {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = setTimeout(() => {\n scrollIntoView();\n }, 100);\n }\n\n const elements = (\n <div ref={roomListRef}>\n {isLoading || !loadingAttempted ? (\n <LargeLoader />\n ) : sortedRooms.length ? (\n sortedRooms.map((room, index) => <RoomDetails key={room.code} room={room} disableMarginBottom={index === sortedRooms.length - 1} />)\n ) : (\n <>\n {apiHasError ? <StepRoomErrorForm /> : <NoRoomsFoundBlock />}\n {hotel?.crossSellHotelIds?.map((hotelId) => (\n <RoomListCrossSellBlock key={hotelId} hotelId={hotelId} />\n ))}\n </>\n )}\n </div>\n );\n\n DataLayer.instance.sendRoomImpressions();\n\n return (\n <>\n <RoomListAlert>{!isLoading && retargetingRoom ? <RoomDetailsRetargeting key={retargetingRoom.code} room={retargetingRoom} /> : null}</RoomListAlert>\n {elements}\n </>\n );\n }, [rooms, isLoading, loadingAttempted, openRoom, sortBy, beContext.currentFilters, basketContext.loadedPromotion, basketContext.isDatePickerOpen]);\n}\n"]}
|
|
@@ -26,8 +26,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
const contexts_1 = require("../../../contexts/index.js");
|
|
29
30
|
const hooks_1 = require("../../../hooks/index.js");
|
|
30
|
-
const react_1 =
|
|
31
|
+
const react_1 = __importStar(require("react"));
|
|
31
32
|
const react_i18next_1 = require("react-i18next");
|
|
32
33
|
const Translation_1 = require("translations/Translation");
|
|
33
34
|
const Headline_1 = __importDefault(require("../../generic/Headline"));
|
|
@@ -42,6 +43,7 @@ const Color_1 = require("../../../util/Color");
|
|
|
42
43
|
const RoomModalPerkRow_1 = __importDefault(require("./RoomModalPerkRow"));
|
|
43
44
|
function RoomModal(props) {
|
|
44
45
|
var _a;
|
|
46
|
+
const { roomModalDescSideBySide } = (0, react_1.useContext)(contexts_1.HotelOverridesContext);
|
|
45
47
|
const { t } = (0, react_i18next_1.useTranslation)();
|
|
46
48
|
const { hotel } = (0, hooks_1.useCurrentHotel)();
|
|
47
49
|
const { rooms } = hotel;
|
|
@@ -55,18 +57,26 @@ function RoomModal(props) {
|
|
|
55
57
|
});
|
|
56
58
|
}
|
|
57
59
|
const cleanPerkDisclaimer = (prePerkDisclaimer === null || prePerkDisclaimer === void 0 ? void 0 : prePerkDisclaimer.replace(/<br(\/|)>/g, '')) || '';
|
|
60
|
+
const LongDescription = () => {
|
|
61
|
+
return (react_1.default.createElement("div", { className: "u-marg-bottom--heavy rs-room-modal-long-description" },
|
|
62
|
+
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, color: Color_1.Color.Graphite },
|
|
63
|
+
react_1.default.createElement("span", { dangerouslySetInnerHTML: { __html: props.room.getLongDescription() || '' } }))));
|
|
64
|
+
};
|
|
58
65
|
return (react_1.default.createElement(SimpleModal_1.default, { title: props.room.name + ' ' + t(Translation_1.Translation.Step.Room.RoomInfo.Information), open: props.open, size: SimpleModal_1.SimpleModalSize.Small, onClose: props.onClose },
|
|
59
|
-
react_1.default.createElement("div",
|
|
66
|
+
react_1.default.createElement("div", { className: "rs-room-modal" },
|
|
60
67
|
react_1.default.createElement("div", { style: { height: '350px' } },
|
|
61
68
|
react_1.default.createElement(ImageGallerySlider_1.default, { images: props.room.getImages() })),
|
|
62
|
-
react_1.default.createElement("div", { className: "u-marg-heavy u-marg@m-" },
|
|
63
|
-
react_1.default.createElement("div", { className: "u-marg-bottom--light" },
|
|
69
|
+
react_1.default.createElement("div", { className: "u-marg-heavy u-marg@m- rs-room-modal-container" },
|
|
70
|
+
react_1.default.createElement("div", { className: "u-marg-bottom--light rs-room-modal-headline" },
|
|
64
71
|
react_1.default.createElement(Headline_1.default, { bold: true, size: "large" }, props.room.name)),
|
|
65
72
|
react_1.default.createElement(RoomDetailsBedsBlock_1.RoomDetailsBedsBlock, { room: props.room }),
|
|
66
|
-
react_1.default.createElement("div", { className: "u-marg-bottom--heavy" },
|
|
73
|
+
react_1.default.createElement("div", { className: "u-marg-bottom--heavy rs-room-modal-short-description" },
|
|
67
74
|
react_1.default.createElement(Text_1.default, { color: Color_1.Color.DarkGrey, type: Text_1.TextType.Small },
|
|
68
75
|
react_1.default.createElement("span", { dangerouslySetInnerHTML: { __html: props.room.getShortDescription(false) || '' } }))),
|
|
69
|
-
|
|
76
|
+
roomModalDescSideBySide ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
77
|
+
react_1.default.createElement(LongDescription, null),
|
|
78
|
+
react_1.default.createElement(LineBreak_1.default, null))) : null,
|
|
79
|
+
!(hotel === null || hotel === void 0 ? void 0 : hotel.perksHideOnRoomDetail) && roomPerks && (react_1.default.createElement("div", { className: "u-marg-bottom--heavy rs-room-modal-perks" },
|
|
70
80
|
react_1.default.createElement("div", { className: "row" },
|
|
71
81
|
react_1.default.createElement(RoomModalPerkRow_1.default, { hotel: hotel, room: props.room, roomPerks: roomPerks })),
|
|
72
82
|
(hotel === null || hotel === void 0 ? void 0 : hotel.perksShowDisclaimer) && (react_1.default.createElement("div", { className: "row u-marg-top--lighter" },
|
|
@@ -82,10 +92,8 @@ function RoomModal(props) {
|
|
|
82
92
|
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, inline: true }, amenity.description))));
|
|
83
93
|
})))),
|
|
84
94
|
react_1.default.createElement(LineBreak_1.default, null),
|
|
85
|
-
react_1.default.createElement(
|
|
86
|
-
|
|
87
|
-
react_1.default.createElement("span", { dangerouslySetInnerHTML: { __html: props.room.getLongDescription() || '' } }))),
|
|
88
|
-
!!cleanPerkDisclaimer && (react_1.default.createElement("div", { className: "u-marg-bottom--heavy" },
|
|
95
|
+
!roomModalDescSideBySide ? react_1.default.createElement(LongDescription, null) : null,
|
|
96
|
+
!!cleanPerkDisclaimer && (react_1.default.createElement("div", { className: "u-marg-bottom--heavy rs-room-modal-disclaimer" },
|
|
89
97
|
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
|
|
90
98
|
react_1.default.createElement("strong", null, t(Translation_1.Translation.Step.Room.RoomInfo.Disclaimer))),
|
|
91
99
|
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomModal.js","sourceRoot":"/","sources":["src/components/steps/room/RoomModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCurrentHotel } from '@frontend/hooks';\nimport { Hotel } from 'models/Client/Hotel/Hotel';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport SimpleModal, { SimpleModalSize } from '@/components/generic/modal/SimpleModal';\nimport Text, { TextType } from '@/components/generic/Text';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport { RoomDetailsBedsBlock } from '@/components/steps/room/roomDetails/RoomDetailsBedsBlock';\nimport RoomRates from '@/components/steps/room/roomDetails/roomRates/RoomRates';\nimport { Room } from '@/models/Room/Room';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport { Color } from '@/util/Color';\n\nimport RoomModalPerkRow from './RoomModalPerkRow';\n\ninterface RoomModalProps {\n room: Room;\n\n rates: RoomRate[];\n featuredRates: RoomRate[];\n\n open: boolean;\n onClose?: () => void;\n}\n\nexport default function RoomModal(props: RoomModalProps) {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const { rooms } = hotel as Hotel;\n\n const { roomPerks, prePerkDisclaimer } = props.room.getRoomPerks({ hotel: hotel, room: props.room });\n\n const extraRoomData = rooms?.[props.room.code as string];\n\n // Explode otherwise original data gets overwritten.\n const amenities = extraRoomData?.amenities ? [...extraRoomData.amenities] : [];\n\n if (extraRoomData?.features?.length) {\n extraRoomData.features.forEach((feature) => {\n amenities.push(feature);\n });\n }\n\n const cleanPerkDisclaimer = prePerkDisclaimer?.replace(/<br(\\/|)>/g, '') || '';\n\n return (\n <SimpleModal title={props.room.name + ' ' + t(Translation.Step.Room.RoomInfo.Information)} open={props.open} size={SimpleModalSize.Small} onClose={props.onClose}>\n <div>\n <div style={{ height: '350px' }}>\n <ImageGallerySlider images={props.room.getImages()} />\n </div>\n\n <div className=\"u-marg-heavy u-marg@m-\">\n <div className=\"u-marg-bottom--light\">\n <Headline bold size=\"large\">\n {props.room.name}\n </Headline>\n </div>\n <RoomDetailsBedsBlock room={props.room} />\n <div className=\"u-marg-bottom--heavy\">\n <Text color={Color.DarkGrey} type={TextType.Small}>\n <span dangerouslySetInnerHTML={{ __html: props.room.getShortDescription(false) || '' }} />\n </Text>\n </div>\n\n {!hotel?.perksHideOnRoomDetail && roomPerks && (\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"row\">\n <RoomModalPerkRow hotel={hotel} room={props.room} roomPerks={roomPerks} />\n </div>\n {hotel?.perksShowDisclaimer && (\n <div className=\"row u-marg-top--lighter\">\n <small className=\"col-12\">{t(Translation.Misc.PerksDisclaimer)}</small>\n </div>\n )}\n </div>\n )}\n {!!amenities?.length && (\n <>\n <div className=\"u-marg-bottom\">\n <Text color={Color.Accent} type={TextType.Small}>\n <strong>{t(Translation.Step.Room.RoomInfo.RoomAmenities)}</strong>\n </Text>\n </div>\n <div className=\"row\">\n {amenities.map((amenity) => {\n return (\n <div key={amenity.description} className=\"col-sm-6 u-marg-bottom--light u-flex justify-content-start\">\n <Icon icon={IconType.Check} color={Color.White} backgroundColor={Color.Navy} borderRadius=\"round\" noPadding size=\"16px\" />\n <div className=\"u-marg-left--light u-flex\">\n <Text type={TextType.Small} inline>\n {amenity.description}\n </Text>\n </div>\n </div>\n );\n })}\n </div>\n </>\n )}\n <LineBreak />\n <div className=\"u-marg-bottom--heavy\">\n <Text type={TextType.Small} color={Color.Graphite}>\n <span dangerouslySetInnerHTML={{ __html: props.room.getLongDescription() || '' }} />\n </Text>\n </div>\n {!!cleanPerkDisclaimer && (\n <div className=\"u-marg-bottom--heavy\">\n <Text type={TextType.Small}>\n <strong>{t(Translation.Step.Room.RoomInfo.Disclaimer)}</strong>\n </Text>\n <Text type={TextType.Small}>\n <span dangerouslySetInnerHTML={{ __html: cleanPerkDisclaimer }} />\n </Text>\n </div>\n )}\n </div>\n\n <RoomRates featuredRates={props.featuredRates} rates={props.rates} roomCode={props.room.code as string} />\n </div>\n </SimpleModal>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"RoomModal.js","sourceRoot":"/","sources":["src/components/steps/room/RoomModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { HotelOverridesContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { Hotel } from 'models/Client/Hotel/Hotel';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport SimpleModal, { SimpleModalSize } from '@/components/generic/modal/SimpleModal';\nimport Text, { TextType } from '@/components/generic/Text';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport { RoomDetailsBedsBlock } from '@/components/steps/room/roomDetails/RoomDetailsBedsBlock';\nimport RoomRates from '@/components/steps/room/roomDetails/roomRates/RoomRates';\nimport { Room } from '@/models/Room/Room';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport { Color } from '@/util/Color';\n\nimport RoomModalPerkRow from './RoomModalPerkRow';\n\ninterface RoomModalProps {\n room: Room;\n\n rates: RoomRate[];\n featuredRates: RoomRate[];\n\n open: boolean;\n onClose?: () => void;\n}\n\nexport default function RoomModal(props: RoomModalProps) {\n const { roomModalDescSideBySide } = useContext(HotelOverridesContext);\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const { rooms } = hotel as Hotel;\n\n const { roomPerks, prePerkDisclaimer } = props.room.getRoomPerks({ hotel: hotel, room: props.room });\n\n const extraRoomData = rooms?.[props.room.code as string];\n\n // Explode otherwise original data gets overwritten.\n const amenities = extraRoomData?.amenities ? [...extraRoomData.amenities] : [];\n\n if (extraRoomData?.features?.length) {\n extraRoomData.features.forEach((feature) => {\n amenities.push(feature);\n });\n }\n\n const cleanPerkDisclaimer = prePerkDisclaimer?.replace(/<br(\\/|)>/g, '') || '';\n\n const LongDescription = () => {\n return (\n <div className=\"u-marg-bottom--heavy rs-room-modal-long-description\">\n <Text type={TextType.Small} color={Color.Graphite}>\n <span dangerouslySetInnerHTML={{ __html: props.room.getLongDescription() || '' }} />\n </Text>\n </div>\n );\n };\n return (\n <SimpleModal title={props.room.name + ' ' + t(Translation.Step.Room.RoomInfo.Information)} open={props.open} size={SimpleModalSize.Small} onClose={props.onClose}>\n <div className=\"rs-room-modal\">\n <div style={{ height: '350px' }}>\n <ImageGallerySlider images={props.room.getImages()} />\n </div>\n\n <div className=\"u-marg-heavy u-marg@m- rs-room-modal-container\">\n <div className=\"u-marg-bottom--light rs-room-modal-headline\">\n <Headline bold size=\"large\">\n {props.room.name}\n </Headline>\n </div>\n <RoomDetailsBedsBlock room={props.room} />\n <div className=\"u-marg-bottom--heavy rs-room-modal-short-description\">\n <Text color={Color.DarkGrey} type={TextType.Small}>\n <span dangerouslySetInnerHTML={{ __html: props.room.getShortDescription(false) || '' }} />\n </Text>\n </div>\n\n {roomModalDescSideBySide ? (\n <>\n <LongDescription />\n <LineBreak />\n </>\n ) : null}\n\n {!hotel?.perksHideOnRoomDetail && roomPerks && (\n <div className=\"u-marg-bottom--heavy rs-room-modal-perks\">\n <div className=\"row\">\n <RoomModalPerkRow hotel={hotel} room={props.room} roomPerks={roomPerks} />\n </div>\n {hotel?.perksShowDisclaimer && (\n <div className=\"row u-marg-top--lighter\">\n <small className=\"col-12\">{t(Translation.Misc.PerksDisclaimer)}</small>\n </div>\n )}\n </div>\n )}\n {!!amenities?.length && (\n <>\n <div className=\"u-marg-bottom\">\n <Text color={Color.Accent} type={TextType.Small}>\n <strong>{t(Translation.Step.Room.RoomInfo.RoomAmenities)}</strong>\n </Text>\n </div>\n <div className=\"row\">\n {amenities.map((amenity) => {\n return (\n <div key={amenity.description} className=\"col-sm-6 u-marg-bottom--light u-flex justify-content-start\">\n <Icon icon={IconType.Check} color={Color.White} backgroundColor={Color.Navy} borderRadius=\"round\" noPadding size=\"16px\" />\n <div className=\"u-marg-left--light u-flex\">\n <Text type={TextType.Small} inline>\n {amenity.description}\n </Text>\n </div>\n </div>\n );\n })}\n </div>\n </>\n )}\n <LineBreak />\n {!roomModalDescSideBySide ? <LongDescription /> : null}\n\n {!!cleanPerkDisclaimer && (\n <div className=\"u-marg-bottom--heavy rs-room-modal-disclaimer\">\n <Text type={TextType.Small}>\n <strong>{t(Translation.Step.Room.RoomInfo.Disclaimer)}</strong>\n </Text>\n <Text type={TextType.Small}>\n <span dangerouslySetInnerHTML={{ __html: cleanPerkDisclaimer }} />\n </Text>\n </div>\n )}\n </div>\n\n <RoomRates featuredRates={props.featuredRates} rates={props.rates} roomCode={props.room.code as string} />\n </div>\n </SimpleModal>\n );\n}\n"]}
|
|
@@ -100,6 +100,9 @@ function RoomBuilderProgressRow(props) {
|
|
|
100
100
|
}
|
|
101
101
|
context.updateBasketRow(row);
|
|
102
102
|
};
|
|
103
|
+
const onDatePickerOpenChange = (isOpen) => {
|
|
104
|
+
context.onDatePickerOpenChange(isOpen);
|
|
105
|
+
};
|
|
103
106
|
const updatePromoCode = (code) => {
|
|
104
107
|
DataLayer_1.default.instance.sendInteraction('Promo Code', DataLayer_1.InteractionType.FORM_FIELD, DataLayer_1.InteractionStep.ROOMS);
|
|
105
108
|
if (context.selectedBasketRow) {
|
|
@@ -199,7 +202,7 @@ function RoomBuilderProgressRow(props) {
|
|
|
199
202
|
react_1.default.createElement(NumberOfInfantsPicker_1.default, { row: row, onChange: updateNumberOfInfantsOnChange })))) : null,
|
|
200
203
|
react_1.default.createElement(react_1.default.Fragment, null,
|
|
201
204
|
react_1.default.createElement("div", { className: "room-builder-progress--value" },
|
|
202
|
-
react_1.default.createElement(FloatingDatePicker_1.default, { startDate: row.getStartDate(), endDate: row.getEndDate(), selectedDateChanged: updateDateValues, className: "u-w-100@xl- d-flex align-items-center justify-content-center", isAboveNav: true },
|
|
205
|
+
react_1.default.createElement(FloatingDatePicker_1.default, { startDate: row.getStartDate(), endDate: row.getEndDate(), selectedDateChanged: updateDateValues, className: "u-w-100@xl- d-flex align-items-center justify-content-center", isAboveNav: true, onDatePickerOpenChange: onDatePickerOpenChange },
|
|
203
206
|
react_1.default.createElement(Tooltip_1.default, { title: t(Translation_1.Translation.Step.Date.SelectArrivalAndDepartureDatesByClickingHere) },
|
|
204
207
|
react_1.default.createElement("div", { className: "u-flex align-items-center justify-content-center u-w-100@xl- u-cursor-pointer" },
|
|
205
208
|
react_1.default.createElement(Text_1.default, { color: Color_1.Color.Accent, bold: true, className: "u-nowrap" }, row.getArrivalDate()),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomBuilderProgressRow.js","sourceRoot":"/","sources":["src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport dayjs from 'dayjs';\nimport React, { useContext, useEffect, useMemo, 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 Pill, { PillType } from '@/components/generic/Pill';\nimport PromoCodeInput from '@/components/generic/PromoCodeInput';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport NumberOfAdultsPicker from '@/components/steps/room/roomBuilderProgress/NumberOfAdultsPicker';\nimport NumberOfChildrenPicker from '@/components/steps/room/roomBuilderProgress/NumberOfChildrenPicker';\nimport { useSearchScopeHook } from '@/hooks/useSearchScopeHook';\nimport BasketRow 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 NumberOfInfantsPicker from './NumberOfInfantsPicker';\n\nexport interface RoomBuilderProgressRowProps {\n row: BasketRow;\n number?: number;\n}\n\nexport default function RoomBuilderProgressRow(props: RoomBuilderProgressRowProps) {\n const context = useContext(BasketContext);\n const engineContext = useContext(BookingEngineContext);\n const { hotel } = useCurrentHotel();\n const { showChildren } = useSearchScopeHook();\n\n const { t } = useTranslation();\n\n const [isEditing, setIsEditing] = useState(false);\n\n const { row } = props;\n\n const isCurrent = useMemo(() => {\n return context.selectedBasketRow && context.selectedBasketRow?.getID() === row?.getID();\n }, [context.selectedBasketRow, context.selectedBasketRow?.getID(), row?.getID()]);\n\n const classes = classNames('room-builder-progress--item', {\n '--current': isCurrent,\n '--complete': row.isValid(),\n });\n const thisElement = useRef<HTMLDivElement | null>(null);\n\n const [isPromoModalOpen, setIsPromoModalOpen] = useState(false);\n\n useEffect(() => {\n if (isEditing && !isCurrent) {\n setIsEditing(false);\n }\n }, [context.selectBasketRow]);\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 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 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\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.selectedBasketRow.setManualInputPromoCode(!!code);\n context.updateBasketRow(context.selectedBasketRow);\n if (code) {\n setIsPromoModalOpen(false);\n }\n }\n };\n\n const isRemovable = context.currentBasketRows.length > 1;\n const removeRoomOnClick = () => {\n DataLayer.instance.sendInteraction('Remove Room', InteractionType.BUTTON, InteractionStep.ROOMS);\n context.removeBasketRow(row);\n };\n const removeButton = (\n <div className=\"room-builder-progress--remove\">\n <Tooltip title={isRemovable ? 'Remove this room' : 'Cannot remove this room as at least one must be selected.'}>\n <BEButton isText icon={IconType.Close} iconPosition=\"right\" stopIconAnimation disabled={!isRemovable} onClick={removeRoomOnClick} />\n </Tooltip>\n </div>\n );\n\n const isLargerThanLarge = engineContext.screenSize > ScreenSize.ExtraLarge;\n const showEditSection = isLargerThanLarge || isCurrent;\n\n const roomLabel = useMemo(() => {\n return context.currentBasketRows.length !== 1 ? (props.number as number) + 1 : '';\n }, [context.currentBasketRows.length, props.number]);\n\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 openPromoModalOnClick = () => {\n setIsPromoModalOpen(true);\n };\n const setPromoCodeOnClose = () => {\n setIsPromoModalOpen(false);\n };\n const cancelPromoPopupOnClick = () => {\n DataLayer.instance.sendInteraction('Cancel Promo Popup', InteractionType.BUTTON, InteractionStep.ROOMS);\n setIsPromoModalOpen(false);\n };\n const saveRoomChangesOnClick = () => {\n DataLayer.instance.sendInteraction('Save Room Changes', InteractionType.BUTTON, InteractionStep.ROOMS);\n context.selectBasketRow(null);\n setIsEditing(false);\n };\n const cancelRoomChangesOnClick = () => {\n DataLayer.instance.sendInteraction('Cancel Room Changes', InteractionType.LINK, InteractionStep.ROOMS);\n context.selectBasketRow(null);\n setIsEditing(false);\n };\n const editRoomOnClick = () => {\n DataLayer.instance.sendInteraction('Edit Room', InteractionType.LINK, InteractionStep.ROOMS);\n context.selectBasketRow(row);\n setIsEditing(true);\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 const promocode = row.getPromoCode(hotel?.memberOnlyPromoCode);\n\n return (\n <div className={classes}>\n {isCurrent || !row.isValid() ? (\n <div className=\"u-flex w-100\">\n <div className=\"u-flex flex-wrap flex-xl-nowrap flex-row u-w-100@xl- align-items-center\">\n <div>\n {row.isValid() ? (\n <Text>\n <strong className=\"u-nowrap\">\n {t(Translation.Step.Room.EditingRoom)} {roomLabel}\n </strong>\n </Text>\n ) : (\n <Text>\n <strong className=\"u-nowrap\">\n {t(Translation.Step.Room.SelectRoom)} {roomLabel}\n </strong>\n </Text>\n )}\n </div>\n {showEditSection ? (\n <>\n {!isLargerThanLarge && (\n <div className={'w-100 d-flex' + (showEditSection ? ' u-marg-bottom@xl-' : '')}>\n <Text type={TextType.Small} color={Color.DarkGrey} inline>\n {t(Translation.Step.Room.ChooseRoomBelow)}\n </Text>\n </div>\n )}\n <Tooltip title={t(Translation.Step.Date.UpdateAdults)} wrapperClasses=\"u-w-100@xl- d-flex\">\n <div className=\"room-builder-progress--value u-flex-justify-center u-flex\">\n <NumberOfAdultsPicker row={row} onChange={updateNumberOfAdultsOnChange} />\n </div>\n </Tooltip>\n {showChildren ? (\n <Tooltip title={t(Translation.Step.Date.UpdateChildren)} wrapperClasses=\"u-w-100@xl- d-flex\">\n <div className=\"room-builder-progress--value u-flex-justify-center u-flex\">\n <NumberOfChildrenPicker row={row} onChange={updateNumberOfChildrenOnChange} />\n </div>\n </Tooltip>\n ) : null}\n {hotel?.childConfiguration?.supportInfants ? (\n <Tooltip title={t(Translation.Step.Date.UpdateInfants)} wrapperClasses=\"u-w-100@xl- d-flex\">\n <div className=\"room-builder-progress--value u-flex-justify-center u-flex\">\n <NumberOfInfantsPicker row={row} onChange={updateNumberOfInfantsOnChange} />\n </div>\n </Tooltip>\n ) : null}\n\n <>\n <div className=\"room-builder-progress--value\">\n <FloatingDatePicker\n startDate={row.getStartDate()}\n endDate={row.getEndDate()}\n selectedDateChanged={updateDateValues}\n className=\"u-w-100@xl- d-flex align-items-center justify-content-center\"\n isAboveNav\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 className=\"u-nowrap\">\n {row.getArrivalDate()}\n </Text>\n <Icon icon={IconType.ArrowRight2} />\n <Text color={Color.Accent} bold className=\"u-nowrap\">\n {row.getDepartureDate()}\n </Text>\n </div>\n </Tooltip>\n </FloatingDatePicker>\n </div>\n\n <Tooltip title={promoCodeTooltip} wrapperClasses=\"u-w-100@xl- d-flex\">\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={promocode ? row.getPromoCodeColour() : Color.Navy}>\n {promocode ? promocode : t(Translation.Step.Date.PromoCode)}\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={promocode}\n onChange={changePromoCode}\n valid={\n context.selectedBasketRow?.getPromoCodeStatus() !== 'new' && promocode\n ? context.selectedBasketRow?.getPromoCodeStatus() === 'valid'\n : undefined\n }\n />\n </div>\n\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 {!isLargerThanLarge && row.isValid() && (\n <BEButton wide primary filled onClick={saveRoomChangesOnClick}>\n {t(Translation.Misc.Save)}\n </BEButton>\n )}\n </>\n ) : (\n <div className=\"w-100\">\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {t(Translation.Step.Room.NextRoom)}\n </Text>\n </div>\n )}\n </div>\n <div className=\"u-flex align-items-center\">\n {row.isValid() && (\n <div className=\"u-none@xl-\">\n <Tooltip title=\"Cancel changes\">\n <div className=\"u-flex align-items-center\">\n <BEButton isText size=\"tiny\" onClick={cancelRoomChangesOnClick}>\n {t(Translation.Misc.Cancel).toUpperCase()}\n </BEButton>\n </div>\n </Tooltip>\n </div>\n )}\n {removeButton}\n </div>\n </div>\n ) : (\n <div className=\"u-flex w-100\">\n <div className=\"u-flex justify-content-start\">\n <div className=\"u-flex flex-column\">\n <span>\n <Text inline={isLargerThanLarge}>\n <strong>{row.getRoom().name}</strong>\n </Text>\n <Text inline={isLargerThanLarge} type={isLargerThanLarge ? TextType.Body : TextType.Small}>\n <span className=\"u-marg-left--light@xl\">\n {StringHelper.pluralWithDictAndCount(row.getAdults(), Translation.Step.Date.Adult, t)}\n {showChildren ? (\n <>\n , \n {StringHelper.pluralWithDictAndCount(row.getChildren(), Translation.Step.Date.Child, t)}\n </>\n ) : null}\n {hotel?.childConfiguration?.supportInfants ? (\n <>\n , \n {StringHelper.pluralWithDictAndCount(row.getInfants(), Translation.Step.Date.Infant, t)}\n </>\n ) : null}\n </span>\n </Text>\n </span>\n <Text type={TextType.Caption} color={Color.DarkGrey}>\n <strong>{row.getStayDateRange('ddd, MMM D, YYYY', ' -')}</strong>\n </Text>\n </div>\n {promocode && row.isPromoCodeValid() && (\n <div className=\"u-marg-left d-flex align-items-center\">\n <Pill type={PillType.Success} icon={IconType.Money}>\n {promocode}\n </Pill>\n </div>\n )}\n </div>\n <div className=\"u-flex align-items-center\">\n <div className=\"u-flex align-items-center room-builder-progress--edit\">\n <Tooltip title={t(Translation.Step.Room.EditThisRoom)}>\n <div className=\"u-flex align-items-center\">\n <BEButton isText size=\"tiny\" onClick={editRoomOnClick}>\n {t(Translation.Misc.Edit).toUpperCase()}\n </BEButton>\n </div>\n </Tooltip>\n </div>\n {removeButton}\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"RoomBuilderProgressRow.js","sourceRoot":"/","sources":["src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport dayjs from 'dayjs';\nimport React, { useContext, useEffect, useMemo, 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 Pill, { PillType } from '@/components/generic/Pill';\nimport PromoCodeInput from '@/components/generic/PromoCodeInput';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport NumberOfAdultsPicker from '@/components/steps/room/roomBuilderProgress/NumberOfAdultsPicker';\nimport NumberOfChildrenPicker from '@/components/steps/room/roomBuilderProgress/NumberOfChildrenPicker';\nimport { useSearchScopeHook } from '@/hooks/useSearchScopeHook';\nimport BasketRow 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 NumberOfInfantsPicker from './NumberOfInfantsPicker';\n\nexport interface RoomBuilderProgressRowProps {\n row: BasketRow;\n number?: number;\n}\n\nexport default function RoomBuilderProgressRow(props: RoomBuilderProgressRowProps) {\n const context = useContext(BasketContext);\n const engineContext = useContext(BookingEngineContext);\n const { hotel } = useCurrentHotel();\n const { showChildren } = useSearchScopeHook();\n\n const { t } = useTranslation();\n\n const [isEditing, setIsEditing] = useState(false);\n\n const { row } = props;\n\n const isCurrent = useMemo(() => {\n return context.selectedBasketRow && context.selectedBasketRow?.getID() === row?.getID();\n }, [context.selectedBasketRow, context.selectedBasketRow?.getID(), row?.getID()]);\n\n const classes = classNames('room-builder-progress--item', {\n '--current': isCurrent,\n '--complete': row.isValid(),\n });\n const thisElement = useRef<HTMLDivElement | null>(null);\n\n const [isPromoModalOpen, setIsPromoModalOpen] = useState(false);\n\n useEffect(() => {\n if (isEditing && !isCurrent) {\n setIsEditing(false);\n }\n }, [context.selectBasketRow]);\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 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 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\n const onDatePickerOpenChange = (isOpen: boolean) => {\n context.onDatePickerOpenChange(isOpen);\n };\n\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.selectedBasketRow.setManualInputPromoCode(!!code);\n context.updateBasketRow(context.selectedBasketRow);\n if (code) {\n setIsPromoModalOpen(false);\n }\n }\n };\n\n const isRemovable = context.currentBasketRows.length > 1;\n const removeRoomOnClick = () => {\n DataLayer.instance.sendInteraction('Remove Room', InteractionType.BUTTON, InteractionStep.ROOMS);\n context.removeBasketRow(row);\n };\n const removeButton = (\n <div className=\"room-builder-progress--remove\">\n <Tooltip title={isRemovable ? 'Remove this room' : 'Cannot remove this room as at least one must be selected.'}>\n <BEButton isText icon={IconType.Close} iconPosition=\"right\" stopIconAnimation disabled={!isRemovable} onClick={removeRoomOnClick} />\n </Tooltip>\n </div>\n );\n\n const isLargerThanLarge = engineContext.screenSize > ScreenSize.ExtraLarge;\n const showEditSection = isLargerThanLarge || isCurrent;\n\n const roomLabel = useMemo(() => {\n return context.currentBasketRows.length !== 1 ? (props.number as number) + 1 : '';\n }, [context.currentBasketRows.length, props.number]);\n\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 openPromoModalOnClick = () => {\n setIsPromoModalOpen(true);\n };\n const setPromoCodeOnClose = () => {\n setIsPromoModalOpen(false);\n };\n const cancelPromoPopupOnClick = () => {\n DataLayer.instance.sendInteraction('Cancel Promo Popup', InteractionType.BUTTON, InteractionStep.ROOMS);\n setIsPromoModalOpen(false);\n };\n const saveRoomChangesOnClick = () => {\n DataLayer.instance.sendInteraction('Save Room Changes', InteractionType.BUTTON, InteractionStep.ROOMS);\n context.selectBasketRow(null);\n setIsEditing(false);\n };\n const cancelRoomChangesOnClick = () => {\n DataLayer.instance.sendInteraction('Cancel Room Changes', InteractionType.LINK, InteractionStep.ROOMS);\n context.selectBasketRow(null);\n setIsEditing(false);\n };\n const editRoomOnClick = () => {\n DataLayer.instance.sendInteraction('Edit Room', InteractionType.LINK, InteractionStep.ROOMS);\n context.selectBasketRow(row);\n setIsEditing(true);\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 const promocode = row.getPromoCode(hotel?.memberOnlyPromoCode);\n\n return (\n <div className={classes}>\n {isCurrent || !row.isValid() ? (\n <div className=\"u-flex w-100\">\n <div className=\"u-flex flex-wrap flex-xl-nowrap flex-row u-w-100@xl- align-items-center\">\n <div>\n {row.isValid() ? (\n <Text>\n <strong className=\"u-nowrap\">\n {t(Translation.Step.Room.EditingRoom)} {roomLabel}\n </strong>\n </Text>\n ) : (\n <Text>\n <strong className=\"u-nowrap\">\n {t(Translation.Step.Room.SelectRoom)} {roomLabel}\n </strong>\n </Text>\n )}\n </div>\n {showEditSection ? (\n <>\n {!isLargerThanLarge && (\n <div className={'w-100 d-flex' + (showEditSection ? ' u-marg-bottom@xl-' : '')}>\n <Text type={TextType.Small} color={Color.DarkGrey} inline>\n {t(Translation.Step.Room.ChooseRoomBelow)}\n </Text>\n </div>\n )}\n <Tooltip title={t(Translation.Step.Date.UpdateAdults)} wrapperClasses=\"u-w-100@xl- d-flex\">\n <div className=\"room-builder-progress--value u-flex-justify-center u-flex\">\n <NumberOfAdultsPicker row={row} onChange={updateNumberOfAdultsOnChange} />\n </div>\n </Tooltip>\n {showChildren ? (\n <Tooltip title={t(Translation.Step.Date.UpdateChildren)} wrapperClasses=\"u-w-100@xl- d-flex\">\n <div className=\"room-builder-progress--value u-flex-justify-center u-flex\">\n <NumberOfChildrenPicker row={row} onChange={updateNumberOfChildrenOnChange} />\n </div>\n </Tooltip>\n ) : null}\n {hotel?.childConfiguration?.supportInfants ? (\n <Tooltip title={t(Translation.Step.Date.UpdateInfants)} wrapperClasses=\"u-w-100@xl- d-flex\">\n <div className=\"room-builder-progress--value u-flex-justify-center u-flex\">\n <NumberOfInfantsPicker row={row} onChange={updateNumberOfInfantsOnChange} />\n </div>\n </Tooltip>\n ) : null}\n\n <>\n <div className=\"room-builder-progress--value\">\n <FloatingDatePicker\n startDate={row.getStartDate()}\n endDate={row.getEndDate()}\n selectedDateChanged={updateDateValues}\n className=\"u-w-100@xl- d-flex align-items-center justify-content-center\"\n isAboveNav\n onDatePickerOpenChange={onDatePickerOpenChange}\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 className=\"u-nowrap\">\n {row.getArrivalDate()}\n </Text>\n <Icon icon={IconType.ArrowRight2} />\n <Text color={Color.Accent} bold className=\"u-nowrap\">\n {row.getDepartureDate()}\n </Text>\n </div>\n </Tooltip>\n </FloatingDatePicker>\n </div>\n\n <Tooltip title={promoCodeTooltip} wrapperClasses=\"u-w-100@xl- d-flex\">\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={promocode ? row.getPromoCodeColour() : Color.Navy}>\n {promocode ? promocode : t(Translation.Step.Date.PromoCode)}\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={promocode}\n onChange={changePromoCode}\n valid={\n context.selectedBasketRow?.getPromoCodeStatus() !== 'new' && promocode\n ? context.selectedBasketRow?.getPromoCodeStatus() === 'valid'\n : undefined\n }\n />\n </div>\n\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 {!isLargerThanLarge && row.isValid() && (\n <BEButton wide primary filled onClick={saveRoomChangesOnClick}>\n {t(Translation.Misc.Save)}\n </BEButton>\n )}\n </>\n ) : (\n <div className=\"w-100\">\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {t(Translation.Step.Room.NextRoom)}\n </Text>\n </div>\n )}\n </div>\n <div className=\"u-flex align-items-center\">\n {row.isValid() && (\n <div className=\"u-none@xl-\">\n <Tooltip title=\"Cancel changes\">\n <div className=\"u-flex align-items-center\">\n <BEButton isText size=\"tiny\" onClick={cancelRoomChangesOnClick}>\n {t(Translation.Misc.Cancel).toUpperCase()}\n </BEButton>\n </div>\n </Tooltip>\n </div>\n )}\n {removeButton}\n </div>\n </div>\n ) : (\n <div className=\"u-flex w-100\">\n <div className=\"u-flex justify-content-start\">\n <div className=\"u-flex flex-column\">\n <span>\n <Text inline={isLargerThanLarge}>\n <strong>{row.getRoom().name}</strong>\n </Text>\n <Text inline={isLargerThanLarge} type={isLargerThanLarge ? TextType.Body : TextType.Small}>\n <span className=\"u-marg-left--light@xl\">\n {StringHelper.pluralWithDictAndCount(row.getAdults(), Translation.Step.Date.Adult, t)}\n {showChildren ? (\n <>\n , \n {StringHelper.pluralWithDictAndCount(row.getChildren(), Translation.Step.Date.Child, t)}\n </>\n ) : null}\n {hotel?.childConfiguration?.supportInfants ? (\n <>\n , \n {StringHelper.pluralWithDictAndCount(row.getInfants(), Translation.Step.Date.Infant, t)}\n </>\n ) : null}\n </span>\n </Text>\n </span>\n <Text type={TextType.Caption} color={Color.DarkGrey}>\n <strong>{row.getStayDateRange('ddd, MMM D, YYYY', ' -')}</strong>\n </Text>\n </div>\n {promocode && row.isPromoCodeValid() && (\n <div className=\"u-marg-left d-flex align-items-center\">\n <Pill type={PillType.Success} icon={IconType.Money}>\n {promocode}\n </Pill>\n </div>\n )}\n </div>\n <div className=\"u-flex align-items-center\">\n <div className=\"u-flex align-items-center room-builder-progress--edit\">\n <Tooltip title={t(Translation.Step.Room.EditThisRoom)}>\n <div className=\"u-flex align-items-center\">\n <BEButton isText size=\"tiny\" onClick={editRoomOnClick}>\n {t(Translation.Misc.Edit).toUpperCase()}\n </BEButton>\n </div>\n </Tooltip>\n </div>\n {removeButton}\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
|
|
@@ -47,7 +47,7 @@ function RoomDetailsBedsBlock(props) {
|
|
|
47
47
|
if ((_k = extraRoomData === null || extraRoomData === void 0 ? void 0 : extraRoomData.bedTypeOverride) === null || _k === void 0 ? void 0 : _k.trim()) {
|
|
48
48
|
bedType = extraRoomData.bedTypeOverride;
|
|
49
49
|
}
|
|
50
|
-
return (react_1.default.createElement("ul", { className: "u-inline-flex u-flex-gap u-flex-wrap u-marg-bottom" },
|
|
50
|
+
return (react_1.default.createElement("ul", { className: "u-inline-flex u-flex-gap u-flex-wrap u-marg-bottom rs-room-details-beds-block" },
|
|
51
51
|
react_1.default.createElement("li", { className: "u-flex align-items-center" },
|
|
52
52
|
react_1.default.createElement(Icon_1.default, { icon: Icon_1.IconType.People, size: "24px", color: Color_1.Color.Navy }),
|
|
53
53
|
react_1.default.createElement("div", { className: "u-pad-left--light" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomDetailsBedsBlock.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/RoomDetailsBedsBlock.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAkD;AAClD,kDAA0B;AAC1B,iDAA+C;AAE/C,uEAAgE;AAChE,oDAA2D;AAE3D,4DAAyD;AACzD,wCAAqC;AAQrC,SAAgB,oBAAoB,CAAC,KAAgC;;IACjE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IACpC,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,MAAM,aAAa,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,0CAAG,MAAA,KAAK,CAAC,IAAI,0CAAE,IAAc,CAAC,CAAC;IACjE,MAAM,aAAa,GAAG,MAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,0CAAG,MAAA,KAAK,CAAC,IAAI,0CAAE,IAAc,CAAC,0CAAE,QAAQ,CAAC;IAC3E,MAAM,gBAAgB,GAAG,MAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,0CAAG,MAAA,KAAK,CAAC,IAAI,0CAAE,IAAc,CAAC,0CAAE,cAAc,CAAC;IACzF,MAAM,QAAQ,GAAG,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAEzF,MAAM,SAAS,GAAG,MAAA,KAAK,CAAC,SAAS,mCAAI,aAAK,CAAC,QAAQ,CAAC;IAEpD,IAAI,OAAO,GAAG,GAAG,CAAC,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,WAAsB,IAAG,CAAC,CAAC,CAAC,CAAC,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,OAAO,EAAE,CAAC;IAC1H,IAAI,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,eAAe,0CAAE,IAAI,EAAE,EAAE;QACxC,OAAO,GAAG,aAAa,CAAC,eAAe,CAAC;KAC3C;IAED,OAAO,CACH,sCAAI,SAAS,EAAC
|
|
1
|
+
{"version":3,"file":"RoomDetailsBedsBlock.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/RoomDetailsBedsBlock.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCurrentHotel } from '@frontend/hooks';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport { Text, TextType } from '@/components/generic/Text';\nimport { Room } from '@/models/Room/Room';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\ninterface RoomDetailsBedsBlockProps {\n room: Room;\n\n textColor?: Color;\n}\n\nexport function RoomDetailsBedsBlock(props: RoomDetailsBedsBlockProps) {\n const { hotel } = useCurrentHotel();\n const { t } = useTranslation();\n\n const extraRoomData = hotel?.rooms?.[props.room?.code as string];\n const adminRoomSize = hotel?.rooms?.[props.room?.code as string]?.roomSize;\n const overrideRoomSize = hotel?.overwrites?.[props.room?.code as string]?.RoomDimensions;\n const roomSize = overrideRoomSize ?? (adminRoomSize ? `${adminRoomSize} m²` : undefined);\n\n const textColor = props.textColor ?? Color.DarkGrey;\n\n let bedType = `${(extraRoomData?.bedQuantity as number) > 0 ? extraRoomData?.bedQuantity : ''} ${extraRoomData?.bedType}`;\n if (extraRoomData?.bedTypeOverride?.trim()) {\n bedType = extraRoomData.bedTypeOverride;\n }\n\n return (\n <ul className=\"u-inline-flex u-flex-gap u-flex-wrap u-marg-bottom rs-room-details-beds-block\">\n <li className=\"u-flex align-items-center\">\n <Icon icon={IconType.People} size=\"24px\" color={Color.Navy} />\n <div className=\"u-pad-left--light\">\n <Text type={TextType.Small} inline color={textColor}>\n {t(Translation.Step.Room.Sleeps, {\n maxOccupancy: extraRoomData?.maxOccupancy,\n })}\n </Text>\n </div>\n </li>\n {extraRoomData?.showBedType !== false && (\n <li className=\"u-flex align-items-center\">\n <Icon icon={IconType.Bed} size=\"24px\" color={Color.Navy} />\n <div className=\"u-pad-left--light\">\n <Text type={TextType.Small} inline color={textColor}>\n {bedType}\n </Text>\n </div>\n </li>\n )}\n {!!roomSize && (\n <li className=\"u-flex align-items-center\">\n <Icon icon={IconType.RoomSize} size=\"24px\" color={Color.Navy} />\n <div className=\"u-pad-left--light\">\n <Text type={TextType.Small} inline color={textColor}>\n {roomSize}\n </Text>\n </div>\n </li>\n )}\n </ul>\n );\n}\n"]}
|
|
@@ -32,7 +32,11 @@ export interface BasketContextType {
|
|
|
32
32
|
selectBasketRow: (row: BasketRow | null) => void;
|
|
33
33
|
setStartDate: (date: dayjs.Dayjs) => void;
|
|
34
34
|
setEndDate: (date: dayjs.Dayjs) => void;
|
|
35
|
-
|
|
35
|
+
/**
|
|
36
|
+
* @param preventApplyingOutcome a callback to check if calling function has decided that it no longer wants to apply the deposit
|
|
37
|
+
* @returns
|
|
38
|
+
*/
|
|
39
|
+
getBasketQuoteDetails: (preventApplyingOutcome: () => boolean) => void;
|
|
36
40
|
hasCheckedOut: boolean;
|
|
37
41
|
reservationData: ReservationsDTO;
|
|
38
42
|
booked: (data: ReservationsDTO, reservationRequest?: RoomstaySession['reservationRequest']) => Promise<void>;
|
|
@@ -49,4 +53,6 @@ export interface BasketContextType {
|
|
|
49
53
|
removeBasketAddonRow: (row: BasketAddonRow) => void;
|
|
50
54
|
attemptSelectUnfilledRow: () => BasketRow | undefined;
|
|
51
55
|
initBasketRows: (basketRows: BasketRow[]) => void;
|
|
56
|
+
onDatePickerOpenChange: (isOpen: boolean) => void;
|
|
57
|
+
isDatePickerOpen: boolean;
|
|
52
58
|
}
|