@roomstay/frontend 2.6.15 → 2.6.16
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/903.bundle.js +1 -1
- package/dist/main.bundle.js +1 -1
- package/dist/src/components/generic/date/DatePickerDays.js +1 -1
- package/dist/src/components/generic/date/DatePickerDays.js.map +1 -1
- package/dist/src/components/generic/date/DatePickerMonth.js +1 -1
- package/dist/src/components/generic/date/DatePickerMonth.js.map +1 -1
- package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRooms.js +12 -3
- package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRooms.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/ReadMoreRoomRateRow.js +4 -5
- package/dist/src/components/steps/room/roomDetails/roomRates/ReadMoreRoomRateRow.js.map +1 -1
- package/dist/test.bundle.js +1 -1
- package/package.json +1 -1
|
@@ -39,7 +39,7 @@ function DatePickerDays(props) {
|
|
|
39
39
|
const days = (0, react_1.useMemo)(() => (react_1.default.createElement(react_1.default.Fragment, null, CalendarHelper_1.default.getWeekPaddedMonthArrayForDate(startsWeekOnDay, showingMonth).map((day, index) => {
|
|
40
40
|
const date = day ? props.showingMonth.date(Number.parseInt(day, 10)) : '';
|
|
41
41
|
return react_1.default.createElement(DatePickerDay_1.default, { key: index, text: day, selectable: true, day: date, unix: date ? date.unix() : 0 });
|
|
42
|
-
}))), [showingMonth]);
|
|
42
|
+
}))), [showingMonth, startsWeekOnDay]);
|
|
43
43
|
return days;
|
|
44
44
|
}
|
|
45
45
|
exports.default = DatePickerDays;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePickerDays.js","sourceRoot":"/","sources":["src/components/generic/date/DatePickerDays.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAkD;AAElD,+CAAuC;AAEvC,4FAAoE;AACpE,uFAA8E;AAC9E,2EAAmD;AAMnD,SAAwB,cAAc,CAAC,KAA0B;;IAC7D,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IAEpC,MAAM,eAAe,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,eAAe,mCAAI,uCAAe,CAAC,MAAM,CAAC;IAEzE,MAAM,IAAI,GAAG,IAAA,eAAO,EAChB,GAAG,EAAE,CAAC,CACF,8DACK,wBAAc,CAAC,8BAA8B,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAC7F,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,OAAO,8BAAC,uBAAa,IAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,QAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAI,CAAC;IACxG,CAAC,CAAC,CACH,CACN,EACD,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"DatePickerDays.js","sourceRoot":"/","sources":["src/components/generic/date/DatePickerDays.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAkD;AAElD,+CAAuC;AAEvC,4FAAoE;AACpE,uFAA8E;AAC9E,2EAAmD;AAMnD,SAAwB,cAAc,CAAC,KAA0B;;IAC7D,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IAEpC,MAAM,eAAe,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,eAAe,mCAAI,uCAAe,CAAC,MAAM,CAAC;IAEzE,MAAM,IAAI,GAAG,IAAA,eAAO,EAChB,GAAG,EAAE,CAAC,CACF,8DACK,wBAAc,CAAC,8BAA8B,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAC7F,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,OAAO,8BAAC,uBAAa,IAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,QAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAI,CAAC;IACxG,CAAC,CAAC,CACH,CACN,EACD,CAAC,YAAY,EAAE,eAAe,CAAC,CAClC,CAAC;IAEF,OAAO,IAAI,CAAC;AAChB,CAAC;AAnBD,iCAmBC","sourcesContent":["import { useCurrentHotel } from '@frontend/hooks';\nimport dayjs from 'dayjs';\nimport React, { useMemo } from 'react';\n\nimport DatePickerDay from '@/components/generic/date/DatePickerDay';\nimport { WeekdayStartsOn } from '@/models/Client/Hotel/WeekdayStartsOn.types';\nimport CalendarHelper from '@/util/CalendarHelper';\n\ninterface DatePickerDaysProps {\n showingMonth: dayjs.Dayjs;\n}\n\nexport default function DatePickerDays(props: DatePickerDaysProps) {\n const { showingMonth } = props;\n const { hotel } = useCurrentHotel();\n\n const startsWeekOnDay = hotel?.startsWeekOnDay ?? WeekdayStartsOn.Monday;\n\n const days = useMemo(\n () => (\n <>\n {CalendarHelper.getWeekPaddedMonthArrayForDate(startsWeekOnDay, showingMonth).map((day, index) => {\n const date = day ? props.showingMonth.date(Number.parseInt(day, 10)) : '';\n return <DatePickerDay key={index} text={day} selectable day={date} unix={date ? date.unix() : 0} />;\n })}\n </>\n ),\n [showingMonth, startsWeekOnDay]\n );\n\n return days;\n}\n"]}
|
|
@@ -43,7 +43,7 @@ function DatePickerMonth(props) {
|
|
|
43
43
|
return (0, CalendarHelper_1.getLetterDaysOfWeek)((_a = hotel === null || hotel === void 0 ? void 0 : hotel.startsWeekOnDay) !== null && _a !== void 0 ? _a : WeekdayStartsOn_types_1.WeekdayStartsOn.Monday).map((day, index) => {
|
|
44
44
|
return react_1.default.createElement(DatePickerDay_1.default, { key: index + day, text: day, selectable: false, unix: 0 });
|
|
45
45
|
});
|
|
46
|
-
}, []);
|
|
46
|
+
}, [hotel === null || hotel === void 0 ? void 0 : hotel.startsWeekOnDay]);
|
|
47
47
|
return (react_1.default.createElement("div", { className: 'diji-calendar-month' + (props.small ? ' u-pad-bottom--none' : '') },
|
|
48
48
|
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Body },
|
|
49
49
|
react_1.default.createElement("strong", null, showingMonth.format('MMMM')),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePickerMonth.js","sourceRoot":"/","sources":["src/components/generic/date/DatePickerMonth.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA2D;AAC3D,2CAAkD;AAElD,+CAAmD;AAEnD,4FAAoE;AACpE,8FAAsE;AACtE,kEAA2D;AAC3D,uFAA8E;AAC9E,0DAA4D;AAO5D,SAAwB,eAAe,CAAC,KAA2B;IAC/D,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IACpC,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,GAAG,IAAA,kBAAU,EAAC,gCAAqB,CAAC,CAAC;IAEpF,MAAM,UAAU,GAAG,IAAA,eAAO,EACtB,GAAG,EAAE;;QACD,OAAA,IAAA,oCAAmB,EAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,eAAe,mCAAI,uCAAe,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE;YACrG,OAAO,8BAAC,uBAAa,IAAC,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,GAAI,CAAC;QACtF,CAAC,CAAC,CAAA;KAAA,EACN,
|
|
1
|
+
{"version":3,"file":"DatePickerMonth.js","sourceRoot":"/","sources":["src/components/generic/date/DatePickerMonth.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA2D;AAC3D,2CAAkD;AAElD,+CAAmD;AAEnD,4FAAoE;AACpE,8FAAsE;AACtE,kEAA2D;AAC3D,uFAA8E;AAC9E,0DAA4D;AAO5D,SAAwB,eAAe,CAAC,KAA2B;IAC/D,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IACpC,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,GAAG,IAAA,kBAAU,EAAC,gCAAqB,CAAC,CAAC;IAEpF,MAAM,UAAU,GAAG,IAAA,eAAO,EACtB,GAAG,EAAE;;QACD,OAAA,IAAA,oCAAmB,EAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,eAAe,mCAAI,uCAAe,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE;YACrG,OAAO,8BAAC,uBAAa,IAAC,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,GAAI,CAAC;QACtF,CAAC,CAAC,CAAA;KAAA,EACN,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,eAAe,CAAC,CAC3B,CAAC;IAEF,OAAO,CACH,uCAAK,SAAS,EAAE,qBAAqB,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,IAAI;YACrB,8CAAS,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAU;YAC7C,kBAAkB,IAAI,CACnB,0CAAQ,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,SAAS,EAAC,iCAAiC,IAC7E,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAC/D,CACZ,CACE;QACP,uCAAK,SAAS,EAAC,4BAA4B;YACtC,UAAU;YACX,8BAAC,wBAAc,IAAC,YAAY,EAAE,YAAY,GAAI,CAC5C,CACJ,CACT,CAAC;AACN,CAAC;AA7BD,kCA6BC","sourcesContent":["import { HotelOverridesContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport dayjs from 'dayjs';\nimport React, { useContext, useMemo } from 'react';\n\nimport DatePickerDay from '@/components/generic/date/DatePickerDay';\nimport DatePickerDays from '@/components/generic/date/DatePickerDays';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { WeekdayStartsOn } from '@/models/Client/Hotel/WeekdayStartsOn.types';\nimport { getLetterDaysOfWeek } from '@/util/CalendarHelper';\n\ninterface DatePickerMonthProps {\n showingMonth: dayjs.Dayjs;\n small?: boolean;\n}\n\nexport default function DatePickerMonth(props: DatePickerMonthProps) {\n const { showingMonth } = props;\n const { hotel } = useCurrentHotel();\n const { showYearOnCalendar, yearDisplayOption } = useContext(HotelOverridesContext);\n\n const dayLetters = useMemo(\n () =>\n getLetterDaysOfWeek(hotel?.startsWeekOnDay ?? WeekdayStartsOn.Monday).map((day: string, index: number) => {\n return <DatePickerDay key={index + day} text={day} selectable={false} unix={0} />;\n }),\n [hotel?.startsWeekOnDay]\n );\n\n return (\n <div className={'diji-calendar-month' + (props.small ? ' u-pad-bottom--none' : '')}>\n <Text type={TextType.Body}>\n <strong>{showingMonth.format('MMMM')}</strong>\n {showYearOnCalendar && (\n <strong style={{ paddingLeft: '8px' }} className=\"roomstay-calendar-year-fullpage\">\n {showingMonth.format(yearDisplayOption ? yearDisplayOption : 'YYYY')}\n </strong>\n )}\n </Text>\n <div className=\"diji-calendar-month--items\">\n {dayLetters}\n <DatePickerDays showingMonth={showingMonth} />\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -46,7 +46,7 @@ const TabGroupedRooms = () => {
|
|
|
46
46
|
const { rooms, isLoading, loadingAttempted, apiHasError } = (0, RoomRateAvailabilityListFromApi_1.useRoomRateAvailabilityListFromApi)();
|
|
47
47
|
const params = (0, Query_1.useHashQuery)();
|
|
48
48
|
const groupedRooms = (0, react_1.useMemo)(() => {
|
|
49
|
-
var _a;
|
|
49
|
+
var _a, _b, _c, _d;
|
|
50
50
|
if (!hotel) {
|
|
51
51
|
return [];
|
|
52
52
|
}
|
|
@@ -58,10 +58,13 @@ const TabGroupedRooms = () => {
|
|
|
58
58
|
rooms: [],
|
|
59
59
|
},
|
|
60
60
|
};
|
|
61
|
+
for (const roomGroup of (_a = hotel === null || hotel === void 0 ? void 0 : hotel.roomGroups) !== null && _a !== void 0 ? _a : []) {
|
|
62
|
+
sortingGroup[roomGroup.id] = Object.assign(Object.assign({}, roomGroup), { rooms: [] });
|
|
63
|
+
}
|
|
61
64
|
for (const room of rooms) {
|
|
62
65
|
let groupId = !!room.roomGroupId ? room.roomGroupId : 'list-all';
|
|
63
66
|
if (!sortingGroup[groupId]) {
|
|
64
|
-
const foundGroup = (
|
|
67
|
+
const foundGroup = (_b = hotel === null || hotel === void 0 ? void 0 : hotel.roomGroups) === null || _b === void 0 ? void 0 : _b.find((group) => group.id === groupId);
|
|
65
68
|
if (foundGroup) {
|
|
66
69
|
sortingGroup[groupId] = Object.assign(Object.assign({}, foundGroup), { rooms: [] });
|
|
67
70
|
}
|
|
@@ -73,7 +76,13 @@ const TabGroupedRooms = () => {
|
|
|
73
76
|
// Actual bit that puts the right room in the right location
|
|
74
77
|
sortingGroup[groupId].rooms.push(room);
|
|
75
78
|
}
|
|
76
|
-
const
|
|
79
|
+
for (const sortedGroupKey of Object.keys(sortingGroup)) {
|
|
80
|
+
if (((_d = (_c = sortingGroup[sortedGroupKey]) === null || _c === void 0 ? void 0 : _c.rooms) === null || _d === void 0 ? void 0 : _d.length) === 0 && sortedGroupKey !== 'list-all') {
|
|
81
|
+
delete sortingGroup[sortedGroupKey];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Sort the rooms by the display order
|
|
85
|
+
const valuedSortedGroups = Object.values(sortingGroup).filter((item) => !!item);
|
|
77
86
|
if (valuedSortedGroups.length === 1 && valuedSortedGroups[0].rooms.length === 0) {
|
|
78
87
|
valuedSortedGroups.splice(0, 1);
|
|
79
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabGroupedRooms.js","sourceRoot":"/","sources":["src/components/steps/room/TabGroupedRooms/TabGroupedRooms.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAkD;AAClD,+CAAuC;AAEvC,0FAAkE;AAClE,uDAAoD;AACpD,0EAAkD;AAClD,kGAA0E;AAC1E,4GAAoF;AACpF,iFAA8E;AAC9E,mGAAgG;AAChG,yCAA6C;AAC7C,6FAA6F;AAG7F,oGAA4E;AAC5E,iEAAyC;AAElC,MAAM,eAAe,GAAG,GAAG,EAAE;;IAChC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IAEpC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,GAAG,IAAA,oEAAkC,GAAE,CAAC;IACjG,MAAM,MAAM,GAAG,IAAA,oBAAY,GAAE,CAAC;IAE9B,MAAM,YAAY,GAAuD,IAAA,eAAO,EAAC,GAAG,EAAE;;QAClF,IAAI,CAAC,KAAK,EAAE;YACR,OAAO,EAAE,CAAC;SACb;QAED,MAAM,YAAY,GAAqE;YACnF,UAAU,EAAE;gBACR,EAAE,EAAE,UAAU;gBACd,SAAS,EAAE,oBAAoB;gBAC/B,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,EAAE;aACZ;SACJ,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACtB,IAAI,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;YAEjE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;gBACxB,MAAM,UAAU,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,0CAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;gBAE5E,IAAI,UAAU,EAAE;oBACZ,YAAY,CAAC,OAAO,CAAC,mCACd,UAAU,KACb,KAAK,EAAE,EAAE,GACZ,CAAC;iBACL;qBAAM;oBACH,+DAA+D;oBAC/D,OAAO,GAAG,UAAU,CAAC;iBACxB;aACJ;YAED,4DAA4D;YAC5D,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC1C;QAED,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"TabGroupedRooms.js","sourceRoot":"/","sources":["src/components/steps/room/TabGroupedRooms/TabGroupedRooms.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCurrentHotel } from '@frontend/hooks';\nimport React, { useMemo } from 'react';\n\nimport LargeLoader from '@/components/generic/loader/LargeLoader';\nimport { Tab } from '@/components/generic/Tabs/Tab';\nimport Tabs from '@/components/generic/Tabs/Tabs';\nimport NoRoomsFoundBlock from '@/components/steps/room/NoRoomsFoundBlock';\nimport RoomListCrossSellBlock from '@/components/steps/room/RoomListCrossSellBlock';\nimport { StepRoomErrorForm } from '@/components/steps/room/StepRoomErrorForm';\nimport { TabGroupedRoomList } from '@/components/steps/room/TabGroupedRooms/TabGroupedRoomList';\nimport { useHashQuery } from '@/hooks/Query';\nimport { useRoomRateAvailabilityListFromApi } from '@/hooks/RoomRateAvailabilityListFromApi';\nimport { HotelRoomGroupsDTO } from '@/models/Api/HotelDTO';\nimport { Room } from '@/models/Room/Room';\nimport StepGroupedRoom from '@/pages/steps/StepGroupedRoom/StepGroupedRoom';\nimport DataLayer from '@/util/DataLayer';\n\nexport const TabGroupedRooms = () => {\n const { hotel } = useCurrentHotel();\n\n const { rooms, isLoading, loadingAttempted, apiHasError } = useRoomRateAvailabilityListFromApi();\n const params = useHashQuery();\n\n const groupedRooms: (HotelRoomGroupsDTO[number] & { rooms: Room[] })[] = useMemo(() => {\n if (!hotel) {\n return [];\n }\n\n const sortingGroup: { [id: string]: HotelRoomGroupsDTO[number] & { rooms: Room[] } } = {\n 'list-all': {\n id: 'list-all',\n groupName: 'All Accommodations',\n filters: {},\n rooms: [],\n },\n };\n\n for (const roomGroup of hotel?.roomGroups ?? []) {\n sortingGroup[roomGroup.id] = {\n ...roomGroup,\n rooms: [],\n };\n }\n\n for (const room of rooms) {\n let groupId = !!room.roomGroupId ? room.roomGroupId : 'list-all';\n\n if (!sortingGroup[groupId]) {\n const foundGroup = hotel?.roomGroups?.find((group) => group.id === groupId);\n\n if (foundGroup) {\n sortingGroup[groupId] = {\n ...foundGroup,\n rooms: [],\n };\n } else {\n // Can't find the specific room, defaulting to \"unsorted\" rooms\n groupId = 'list-all';\n }\n }\n\n // Actual bit that puts the right room in the right location\n sortingGroup[groupId].rooms.push(room);\n }\n\n for (const sortedGroupKey of Object.keys(sortingGroup)) {\n if (sortingGroup[sortedGroupKey]?.rooms?.length === 0 && sortedGroupKey !== 'list-all') {\n delete sortingGroup[sortedGroupKey];\n }\n }\n\n // Sort the rooms by the display order\n const valuedSortedGroups = Object.values(sortingGroup).filter((item) => !!item);\n\n if (valuedSortedGroups.length === 1 && valuedSortedGroups[0].rooms.length === 0) {\n valuedSortedGroups.splice(0, 1);\n }\n\n DataLayer.instance.sendRoomImpressions();\n\n return valuedSortedGroups;\n }, [rooms, hotel?.roomGroups]);\n\n const defaultTab = useMemo(() => {\n return params.get('defaultTab') ?? undefined;\n }, []);\n\n if (isLoading || !loadingAttempted) {\n return <LargeLoader />;\n }\n\n if (groupedRooms.length > 0 && groupedRooms.length <= 2) {\n let groupObject = { groupName: '', filters: {}, id: '' };\n let rooms = [];\n if (groupedRooms.length === 2) {\n groupObject = groupedRooms[1];\n rooms = groupedRooms[1].rooms;\n } else {\n rooms = groupedRooms[0].rooms;\n }\n\n return <TabGroupedRoomList group={groupObject} rooms={rooms} />;\n } else if (groupedRooms.length > 2) {\n const onlyGroups = [...groupedRooms];\n // Update onlyGroups to be the same as groupedRooms, but without the first element\n onlyGroups.splice(0, 1);\n\n return (\n <div style={{ maxWidth: '100%', overflow: 'hidden' }}>\n <Tabs fullBleedOnLineBreak={false} activeKey={defaultTab}>\n <Tab title=\"All Accommodation\" navPath={StepGroupedRoom.getStepUrl() + 'list-all'} key=\"list-all\" preventScrollTop>\n {/* We're not starting at 1 here as we want to display these rooms, even if they're not ordered */}\n {groupedRooms\n ?.filter((item) => item.rooms.length)\n .map((group) => {\n return <TabGroupedRoomList group={group} rooms={group.rooms} key={group.id} />;\n })}\n </Tab>\n {/* Reason we've got to splice here is 0 index will always be unsorted rooms */}\n {onlyGroups.map((group) => (\n <Tab title={group.groupName} navPath={StepGroupedRoom.getStepUrl() + group.groupName} key={group.id} preventScrollTop>\n <TabGroupedRoomList group={group} rooms={group.rooms} />\n </Tab>\n ))}\n </Tabs>\n </div>\n );\n }\n\n // No rooms found, so let's display the crossell block, or no rooms found\n return (\n <>\n {apiHasError ? <StepRoomErrorForm /> : <NoRoomsFoundBlock />}\n {hotel?.crossSellHotelIds?.map((hotelId) => (\n <RoomListCrossSellBlock key={hotelId} hotelId={hotelId} />\n ))}\n </>\n );\n};\n"]}
|
|
@@ -145,6 +145,9 @@ function ReadMoreRoomRateRow(props) {
|
|
|
145
145
|
children: rate.getAveragePrice(true),
|
|
146
146
|
});
|
|
147
147
|
const { hasPricePreview } = (0, Planpay_1.default)();
|
|
148
|
+
const outerDescriptionStyle = {
|
|
149
|
+
'--gradient-end': props.isPromoRate ? 'var(--rs-color-accent-2)' : '#ffffff',
|
|
150
|
+
};
|
|
148
151
|
const outerDescriptionClassList = (0, classnames_1.default)({
|
|
149
152
|
[ReadMoreRoomRateRow_module_scss_1.default.descriptionTextOuter]: true,
|
|
150
153
|
'text-small': true,
|
|
@@ -161,11 +164,7 @@ function ReadMoreRoomRateRow(props) {
|
|
|
161
164
|
react_1.default.createElement("div", null,
|
|
162
165
|
react_1.default.createElement("div", { className: "u-marg-bottom-half" }, isLocked ? (react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Body, color: Color_1.Color.Success },
|
|
163
166
|
react_1.default.createElement("strong", null, t(Translation_1.Translation.Step.Room.RoomInfo.MemberOnlyDeal)))) : (react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Body, color: textWhiteOr(), bold: true }, rate.name))),
|
|
164
|
-
react_1.default.createElement("div", { className: outerDescriptionClassList, style: {
|
|
165
|
-
color: textWhiteOr(),
|
|
166
|
-
['--maxLines']: RoomRateReadMoreVersionFeature_1.default.getMaxLines(),
|
|
167
|
-
['--lineHeight']: targetOpenHeight + 'px',
|
|
168
|
-
}, ref: outerDescRef },
|
|
167
|
+
react_1.default.createElement("div", { className: outerDescriptionClassList, style: Object.assign({ color: textWhiteOr(), ['--maxLines']: RoomRateReadMoreVersionFeature_1.default.getMaxLines(), ['--lineHeight']: targetOpenHeight + 'px' }, outerDescriptionStyle), ref: outerDescRef },
|
|
169
168
|
react_1.default.createElement("div", { className: ReadMoreRoomRateRow_module_scss_1.default.descriptionTextInner, dangerouslySetInnerHTML: { __html: isLocked ? t(Translation_1.Translation.Step.Room.RoomInfo.DealForMemberOnly) : rate.description }, ref: innerDescRef })),
|
|
170
169
|
isLocked && (react_1.default.createElement("div", { className: "u-marg" },
|
|
171
170
|
react_1.default.createElement("span", { onClick: openMemberSignupModalOnClick },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReadMoreRoomRateRow.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/roomRates/ReadMoreRoomRateRow.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, CompanyContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport React, { useContext, useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport Pill, { PillType } from '@/components/generic/Pill';\nimport { PlanpayPrice } from '@/components/generic/PlanpayPrice/PlanpayPrice';\nimport Text, { TextType } from '@/components/generic/Text';\nimport RoomDetailsPriceBlock from '@/components/steps/room/roomDetails/RoomDetailsPriceBlock';\nimport BookNowButton from '@/components/steps/room/roomDetails/roomRates/BookNowButton';\nimport RoomRateDetailsAndPriceBreakdownModal, {\n RoomRateDetailsAndPriceBreakdownModalTabs,\n} from '@/components/steps/room/roomDetails/roomRates/RoomRateDetailsAndPriceBreakdownModal';\nimport RoomRatePills from '@/components/steps/room/roomDetails/roomRates/RoomRatePills';\nimport useCurrency from '@/hooks/Currency';\nimport usePlanpay from '@/hooks/Planpay';\nimport { RoomRate, RoomRatePriceInclusion } from '@/models/Room/RoomRate';\nimport RoomRateReadMoreVersionFeature from '@/providers/feature/RoomRateReadMoreVersionFeature';\nimport { Color } from '@/util/Color';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport styles from './ReadMoreRoomRateRow.module.scss';\n\nexport interface RoomRateRowProps {\n rate: RoomRate;\n\n getButtonLabel?: (isRoomSelectedAndEditing: boolean, isThisSelectedRow: boolean) => string;\n onAddToBasketOverride?: (rate: RoomRate) => void;\n\n isPromoRate?: boolean;\n}\n\nexport default function ReadMoreRoomRateRow(props: RoomRateRowProps) {\n const ccx = useContext(CompanyContext);\n const basketContext = useContext(BasketContext);\n\n const [viewingModal, setViewingModal] = useState({\n open: false,\n currentTab: RoomRateDetailsAndPriceBreakdownModalTabs.RoomDetails,\n });\n\n const [requireReadMore, setRequireReadMore] = useState(false);\n const [readMoreOpened, setReadMoreOpened] = useState(false);\n\n const [targetOpenHeight, setTargetOpenHeight] = useState(0);\n\n const innerDescRef = useRef<HTMLDivElement>(null);\n const outerDescRef = useRef<HTMLDivElement>(null);\n\n const { t } = useTranslation();\n const { isAccent2ColorDark } = useCurrentHotel();\n\n const { rate } = props;\n const selectedRow = basketContext.selectedBasketRow;\n const isRoomSelectedAndEditing = selectedRow?.isValid();\n\n const isThisSelectedRow = selectedRow && rate.name === selectedRow.getRate()?.name && rate.getRoom()?.name === selectedRow.getRoom()?.name;\n\n const currentRow = useRef<HTMLDivElement | null>(null);\n\n const classes = classNames('room-info', {\n '--default': !rate.isMemberOnly,\n '--locked': rate.isMemberOnly,\n '--current': isThisSelectedRow && isRoomSelectedAndEditing,\n '--is-promo': props.isPromoRate,\n });\n\n let isLocked = false;\n\n if (rate.isMemberOnly && !ccx.signedInUser) {\n isLocked = true;\n }\n\n useEffect(() => {\n let isCancelled = false;\n\n const onResize = () => {\n if (!isCancelled && innerDescRef.current && outerDescRef.current) {\n const innerBoundiugRect = innerDescRef.current.getBoundingClientRect();\n const outerBoundingRect = outerDescRef.current.getBoundingClientRect();\n\n setRequireReadMore(innerBoundiugRect.height > outerBoundingRect.height);\n setTargetOpenHeight(innerBoundiugRect.height);\n }\n };\n\n onResize();\n\n window.addEventListener('resize', onResize);\n\n return () => {\n isCancelled = true;\n\n window.removeEventListener('resize', onResize);\n };\n }, [innerDescRef, outerDescRef]);\n\n useEffect(() => {\n if (!isLocked) {\n DataLayer.instance.addRoomRateImpression(rate.getRoom(), rate);\n }\n }, [isThisSelectedRow]);\n\n const openTab = (tab: RoomRateDetailsAndPriceBreakdownModalTabs) => {\n setViewingModal({ open: true, currentTab: tab });\n };\n\n let bookNowLabel = '';\n if (props.getButtonLabel) {\n bookNowLabel = props.getButtonLabel(isRoomSelectedAndEditing, isThisSelectedRow);\n } else {\n if (isRoomSelectedAndEditing) {\n bookNowLabel = isThisSelectedRow ? t(Translation.Step.Room.RoomInfo.Selected) : (bookNowLabel = t(Translation.Step.Room.RoomInfo.Update));\n } else {\n bookNowLabel = t(Translation.Misc.BookNow);\n }\n }\n\n const openMemberSignupModalOnClick = () => {\n DataLayer.instance.sendInteraction('Member Signup Modal', InteractionType.LINK, InteractionStep.ROOMS);\n ccx.openMemberSignupModal();\n };\n\n const rateDetailsOnClick = () => {\n setReadMoreOpened((opened) => {\n return !opened;\n });\n };\n\n const updateModalOnClose = () => {\n setViewingModal((old) => {\n old.open = false;\n return { ...old };\n });\n };\n\n const openTabOnClick = () => {\n DataLayer.instance.sendInteraction('Rate Breakdown', InteractionType.LINK, InteractionStep.ROOMS);\n openTab(RoomRateDetailsAndPriceBreakdownModalTabs.PriceBreakdown);\n };\n\n const shouldTextBeWhite = isAccent2ColorDark && ((isThisSelectedRow && isRoomSelectedAndEditing) || props.isPromoRate);\n const textWhiteOr = (color = Color.Graphite) => {\n return shouldTextBeWhite ? Color.White : color;\n };\n\n const { value: price, isLoading } = useCurrency({\n disableLoading: true,\n hideDecimals: true,\n children: rate.getAveragePrice(true),\n });\n const { hasPricePreview } = usePlanpay();\n\n const outerDescriptionClassList = classNames({\n [styles.descriptionTextOuter]: true,\n 'text-small': true,\n [styles.requireReadMore]: requireReadMore,\n [styles.revealReadMore]: readMoreOpened,\n });\n\n return (\n <div className={classes} ref={currentRow}>\n <div className=\"row\">\n <div\n className={classNames({\n 'col-lg-6': hasPricePreview,\n 'col-lg-8': !hasPricePreview,\n })}\n >\n <div className=\"u-flex flex-column h-100\">\n <div>\n <div className=\"u-marg-bottom-half\">\n {isLocked ? (\n <Text type={TextType.Body} color={Color.Success}>\n <strong>{t(Translation.Step.Room.RoomInfo.MemberOnlyDeal)}</strong>\n </Text>\n ) : (\n <Text type={TextType.Body} color={textWhiteOr()} bold>\n {rate.name}\n </Text>\n )}\n </div>\n <div\n className={outerDescriptionClassList}\n style={{\n color: textWhiteOr(),\n ['--maxLines' as any]: RoomRateReadMoreVersionFeature.getMaxLines(),\n ['--lineHeight' as any]: targetOpenHeight + 'px',\n }}\n ref={outerDescRef}\n >\n <div\n className={styles.descriptionTextInner}\n dangerouslySetInnerHTML={{ __html: isLocked ? t(Translation.Step.Room.RoomInfo.DealForMemberOnly) : rate.description }}\n ref={innerDescRef}\n />\n </div>\n {isLocked && (\n <div className=\"u-marg\">\n <span onClick={openMemberSignupModalOnClick}>\n <Pill icon={IconType.Money} type={PillType.Success}>\n {t(Translation.Step.Room.RoomInfo.SignUpToSee)}\n </Pill>\n </span>\n </div>\n )}\n </div>\n <div className=\"u-flex justify-content-start u-marg-bottom u-marg-top-bottom@l-\">\n {requireReadMore && (\n <div className=\"u-marg-right u-inline-flex\">\n <BEButton\n icon={IconType.ArrowRight2}\n isText\n primary\n size=\"small\"\n iconPosition=\"right\"\n onClick={rateDetailsOnClick}\n textColor={textWhiteOr(Color.Accent)}\n >\n {readMoreOpened ? t(Translation.Step.Room.ReadLess) : t(Translation.Step.Room.ReadMore)}\n </BEButton>\n </div>\n )}\n <BEButton\n icon={IconType.ArrowRight2}\n isText\n textColor={textWhiteOr(Color.Navy)}\n size=\"small\"\n iconPosition=\"right\"\n onClick={openTabOnClick}\n disabled={isLocked}\n >\n {t(Translation.Step.Room.RoomInfo.ViewPriceBreakdown)}\n </BEButton>\n </div>\n <RoomRatePills noMargin rate={props.rate} />\n </div>\n </div>\n <div\n className={classNames(\n {\n 'col-lg-6': hasPricePreview,\n 'col-lg-4': !hasPricePreview,\n },\n 'u-flex flex-column align-items-start align-items-md-start align-items-lg-end justify-content-start'\n )}\n >\n <div className=\"u-flex flex-column align-items-start align-items-lg-end\">\n <RoomDetailsPriceBlock\n isLocked={isLocked}\n averagePreDiscount={rate.getAveragePriceBeforeDiscount(true)}\n averagePrice={rate.getAveragePrice(true)}\n isMemberOnly={props.rate.isMemberOnly}\n useLightText={shouldTextBeWhite}\n />\n <Text type={TextType.Label} color={textWhiteOr(Color.DarkGrey)} align={TextAlign.Right}>\n {rate.getPriceType() === RoomRatePriceInclusion.IncludingFeesAndTaxes\n ? t(Translation.Step.Room.RoomInfo.IncludesTaxes)\n : t(Translation.Step.Room.ExcludingTaxes)}\n </Text>\n </div>\n {!isLoading && hasPricePreview ? (\n <div className=\"u-marg-top--light\">\n <PlanpayPrice price={price} checkin={(selectedRow?.getStartDate() || basketContext.endDate).format('YYYY-MM-DD')} currency={ccx.currentCurrency} />\n </div>\n ) : null}\n <div className=\"u-marg-top--light\">\n {isLocked ? (\n <BEButton filled success wide onClick={openMemberSignupModalOnClick}>\n {t(Translation.Step.Room.RoomInfo.RevealPrice)}\n </BEButton>\n ) : (\n <BookNowButton rate={rate} buttonLabel={bookNowLabel} onAddToBasketOverride={props.onAddToBasketOverride} isFilled={!isThisSelectedRow} />\n )}\n </div>\n </div>\n </div>\n <RoomRateDetailsAndPriceBreakdownModal\n isOpen={viewingModal.open}\n currentTab={viewingModal.currentTab}\n rate={props.rate}\n getButtonLabel={props.getButtonLabel}\n onAddToBasketOverride={props.onAddToBasketOverride}\n onClose={updateModalOnClose}\n />\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ReadMoreRoomRateRow.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/roomRates/ReadMoreRoomRateRow.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, CompanyContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport React, { useContext, useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport Pill, { PillType } from '@/components/generic/Pill';\nimport { PlanpayPrice } from '@/components/generic/PlanpayPrice/PlanpayPrice';\nimport Text, { TextType } from '@/components/generic/Text';\nimport RoomDetailsPriceBlock from '@/components/steps/room/roomDetails/RoomDetailsPriceBlock';\nimport BookNowButton from '@/components/steps/room/roomDetails/roomRates/BookNowButton';\nimport RoomRateDetailsAndPriceBreakdownModal, {\n RoomRateDetailsAndPriceBreakdownModalTabs,\n} from '@/components/steps/room/roomDetails/roomRates/RoomRateDetailsAndPriceBreakdownModal';\nimport RoomRatePills from '@/components/steps/room/roomDetails/roomRates/RoomRatePills';\nimport useCurrency from '@/hooks/Currency';\nimport usePlanpay from '@/hooks/Planpay';\nimport { RoomRate, RoomRatePriceInclusion } from '@/models/Room/RoomRate';\nimport RoomRateReadMoreVersionFeature from '@/providers/feature/RoomRateReadMoreVersionFeature';\nimport { Color } from '@/util/Color';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport styles from './ReadMoreRoomRateRow.module.scss';\n\nexport interface RoomRateRowProps {\n rate: RoomRate;\n\n getButtonLabel?: (isRoomSelectedAndEditing: boolean, isThisSelectedRow: boolean) => string;\n onAddToBasketOverride?: (rate: RoomRate) => void;\n\n isPromoRate?: boolean;\n}\n\nexport default function ReadMoreRoomRateRow(props: RoomRateRowProps) {\n const ccx = useContext(CompanyContext);\n const basketContext = useContext(BasketContext);\n\n const [viewingModal, setViewingModal] = useState({\n open: false,\n currentTab: RoomRateDetailsAndPriceBreakdownModalTabs.RoomDetails,\n });\n\n const [requireReadMore, setRequireReadMore] = useState(false);\n const [readMoreOpened, setReadMoreOpened] = useState(false);\n\n const [targetOpenHeight, setTargetOpenHeight] = useState(0);\n\n const innerDescRef = useRef<HTMLDivElement>(null);\n const outerDescRef = useRef<HTMLDivElement>(null);\n\n const { t } = useTranslation();\n const { isAccent2ColorDark } = useCurrentHotel();\n\n const { rate } = props;\n const selectedRow = basketContext.selectedBasketRow;\n const isRoomSelectedAndEditing = selectedRow?.isValid();\n\n const isThisSelectedRow = selectedRow && rate.name === selectedRow.getRate()?.name && rate.getRoom()?.name === selectedRow.getRoom()?.name;\n\n const currentRow = useRef<HTMLDivElement | null>(null);\n\n const classes = classNames('room-info', {\n '--default': !rate.isMemberOnly,\n '--locked': rate.isMemberOnly,\n '--current': isThisSelectedRow && isRoomSelectedAndEditing,\n '--is-promo': props.isPromoRate,\n });\n\n let isLocked = false;\n\n if (rate.isMemberOnly && !ccx.signedInUser) {\n isLocked = true;\n }\n\n useEffect(() => {\n let isCancelled = false;\n\n const onResize = () => {\n if (!isCancelled && innerDescRef.current && outerDescRef.current) {\n const innerBoundiugRect = innerDescRef.current.getBoundingClientRect();\n const outerBoundingRect = outerDescRef.current.getBoundingClientRect();\n\n setRequireReadMore(innerBoundiugRect.height > outerBoundingRect.height);\n setTargetOpenHeight(innerBoundiugRect.height);\n }\n };\n\n onResize();\n\n window.addEventListener('resize', onResize);\n\n return () => {\n isCancelled = true;\n\n window.removeEventListener('resize', onResize);\n };\n }, [innerDescRef, outerDescRef]);\n\n useEffect(() => {\n if (!isLocked) {\n DataLayer.instance.addRoomRateImpression(rate.getRoom(), rate);\n }\n }, [isThisSelectedRow]);\n\n const openTab = (tab: RoomRateDetailsAndPriceBreakdownModalTabs) => {\n setViewingModal({ open: true, currentTab: tab });\n };\n\n let bookNowLabel = '';\n if (props.getButtonLabel) {\n bookNowLabel = props.getButtonLabel(isRoomSelectedAndEditing, isThisSelectedRow);\n } else {\n if (isRoomSelectedAndEditing) {\n bookNowLabel = isThisSelectedRow ? t(Translation.Step.Room.RoomInfo.Selected) : (bookNowLabel = t(Translation.Step.Room.RoomInfo.Update));\n } else {\n bookNowLabel = t(Translation.Misc.BookNow);\n }\n }\n\n const openMemberSignupModalOnClick = () => {\n DataLayer.instance.sendInteraction('Member Signup Modal', InteractionType.LINK, InteractionStep.ROOMS);\n ccx.openMemberSignupModal();\n };\n\n const rateDetailsOnClick = () => {\n setReadMoreOpened((opened) => {\n return !opened;\n });\n };\n\n const updateModalOnClose = () => {\n setViewingModal((old) => {\n old.open = false;\n return { ...old };\n });\n };\n\n const openTabOnClick = () => {\n DataLayer.instance.sendInteraction('Rate Breakdown', InteractionType.LINK, InteractionStep.ROOMS);\n openTab(RoomRateDetailsAndPriceBreakdownModalTabs.PriceBreakdown);\n };\n\n const shouldTextBeWhite = isAccent2ColorDark && ((isThisSelectedRow && isRoomSelectedAndEditing) || props.isPromoRate);\n const textWhiteOr = (color = Color.Graphite) => {\n return shouldTextBeWhite ? Color.White : color;\n };\n\n const { value: price, isLoading } = useCurrency({\n disableLoading: true,\n hideDecimals: true,\n children: rate.getAveragePrice(true),\n });\n const { hasPricePreview } = usePlanpay();\n\n const outerDescriptionStyle = {\n '--gradient-end': props.isPromoRate ? 'var(--rs-color-accent-2)' : '#ffffff',\n };\n\n const outerDescriptionClassList = classNames({\n [styles.descriptionTextOuter]: true,\n 'text-small': true,\n [styles.requireReadMore]: requireReadMore,\n [styles.revealReadMore]: readMoreOpened,\n });\n\n return (\n <div className={classes} ref={currentRow}>\n <div className=\"row\">\n <div\n className={classNames({\n 'col-lg-6': hasPricePreview,\n 'col-lg-8': !hasPricePreview,\n })}\n >\n <div className=\"u-flex flex-column h-100\">\n <div>\n <div className=\"u-marg-bottom-half\">\n {isLocked ? (\n <Text type={TextType.Body} color={Color.Success}>\n <strong>{t(Translation.Step.Room.RoomInfo.MemberOnlyDeal)}</strong>\n </Text>\n ) : (\n <Text type={TextType.Body} color={textWhiteOr()} bold>\n {rate.name}\n </Text>\n )}\n </div>\n <div\n className={outerDescriptionClassList}\n style={{\n color: textWhiteOr(),\n ['--maxLines' as any]: RoomRateReadMoreVersionFeature.getMaxLines(),\n ['--lineHeight' as any]: targetOpenHeight + 'px',\n ...outerDescriptionStyle,\n }}\n ref={outerDescRef}\n >\n <div\n className={styles.descriptionTextInner}\n dangerouslySetInnerHTML={{ __html: isLocked ? t(Translation.Step.Room.RoomInfo.DealForMemberOnly) : rate.description }}\n ref={innerDescRef}\n />\n </div>\n {isLocked && (\n <div className=\"u-marg\">\n <span onClick={openMemberSignupModalOnClick}>\n <Pill icon={IconType.Money} type={PillType.Success}>\n {t(Translation.Step.Room.RoomInfo.SignUpToSee)}\n </Pill>\n </span>\n </div>\n )}\n </div>\n <div className=\"u-flex justify-content-start u-marg-bottom u-marg-top-bottom@l-\">\n {requireReadMore && (\n <div className=\"u-marg-right u-inline-flex\">\n <BEButton\n icon={IconType.ArrowRight2}\n isText\n primary\n size=\"small\"\n iconPosition=\"right\"\n onClick={rateDetailsOnClick}\n textColor={textWhiteOr(Color.Accent)}\n >\n {readMoreOpened ? t(Translation.Step.Room.ReadLess) : t(Translation.Step.Room.ReadMore)}\n </BEButton>\n </div>\n )}\n <BEButton\n icon={IconType.ArrowRight2}\n isText\n textColor={textWhiteOr(Color.Navy)}\n size=\"small\"\n iconPosition=\"right\"\n onClick={openTabOnClick}\n disabled={isLocked}\n >\n {t(Translation.Step.Room.RoomInfo.ViewPriceBreakdown)}\n </BEButton>\n </div>\n <RoomRatePills noMargin rate={props.rate} />\n </div>\n </div>\n <div\n className={classNames(\n {\n 'col-lg-6': hasPricePreview,\n 'col-lg-4': !hasPricePreview,\n },\n 'u-flex flex-column align-items-start align-items-md-start align-items-lg-end justify-content-start'\n )}\n >\n <div className=\"u-flex flex-column align-items-start align-items-lg-end\">\n <RoomDetailsPriceBlock\n isLocked={isLocked}\n averagePreDiscount={rate.getAveragePriceBeforeDiscount(true)}\n averagePrice={rate.getAveragePrice(true)}\n isMemberOnly={props.rate.isMemberOnly}\n useLightText={shouldTextBeWhite}\n />\n <Text type={TextType.Label} color={textWhiteOr(Color.DarkGrey)} align={TextAlign.Right}>\n {rate.getPriceType() === RoomRatePriceInclusion.IncludingFeesAndTaxes\n ? t(Translation.Step.Room.RoomInfo.IncludesTaxes)\n : t(Translation.Step.Room.ExcludingTaxes)}\n </Text>\n </div>\n {!isLoading && hasPricePreview ? (\n <div className=\"u-marg-top--light\">\n <PlanpayPrice price={price} checkin={(selectedRow?.getStartDate() || basketContext.endDate).format('YYYY-MM-DD')} currency={ccx.currentCurrency} />\n </div>\n ) : null}\n <div className=\"u-marg-top--light\">\n {isLocked ? (\n <BEButton filled success wide onClick={openMemberSignupModalOnClick}>\n {t(Translation.Step.Room.RoomInfo.RevealPrice)}\n </BEButton>\n ) : (\n <BookNowButton rate={rate} buttonLabel={bookNowLabel} onAddToBasketOverride={props.onAddToBasketOverride} isFilled={!isThisSelectedRow} />\n )}\n </div>\n </div>\n </div>\n <RoomRateDetailsAndPriceBreakdownModal\n isOpen={viewingModal.open}\n currentTab={viewingModal.currentTab}\n rate={props.rate}\n getButtonLabel={props.getButtonLabel}\n onAddToBasketOverride={props.onAddToBasketOverride}\n onClose={updateModalOnClose}\n />\n </div>\n );\n}\n"]}
|