@roomstay/frontend 2.6.36 → 2.6.38
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 -0
- package/dist/370.bundle.js +1 -1
- package/dist/839.bundle.js +1 -0
- package/dist/903.bundle.js +1 -1
- package/dist/978.bundle.js +1 -1
- package/dist/main.bundle.js +1 -1
- package/dist/src/components/User/Forms/SignUpForm.d.ts +1 -1
- package/dist/src/components/User/Forms/SignUpForm.js +1 -1
- package/dist/src/components/User/Forms/SignUpForm.js.map +1 -1
- package/dist/src/components/generic/modal/SigninModal/FormContent/SignUpFormContent.d.ts +1 -1
- package/dist/src/components/generic/modal/SigninModal/FormContent/SignUpFormContent.js +3 -3
- package/dist/src/components/generic/modal/SigninModal/FormContent/SignUpFormContent.js.map +1 -1
- package/dist/src/components/generic/modal/SigninModal/UnauthenticatedUserModal.js +12 -8
- package/dist/src/components/generic/modal/SigninModal/UnauthenticatedUserModal.js.map +1 -1
- package/dist/src/components/members/SignInModal/ExternalMemberModal.js +5 -12
- package/dist/src/components/members/SignInModal/ExternalMemberModal.js.map +1 -1
- package/dist/src/components/members/SignInModal/InternalMemberSignInModal.js +1 -2
- package/dist/src/components/members/SignInModal/InternalMemberSignInModal.js.map +1 -1
- package/dist/src/components/members/SignInModal/MemberSignInModal.js +8 -1
- package/dist/src/components/members/SignInModal/MemberSignInModal.js.map +1 -1
- package/dist/src/components/steps/addons/AddonCard.js +1 -1
- package/dist/src/components/steps/addons/AddonCard.js.map +1 -1
- package/dist/src/components/steps/room/AvailableUpgradesModal.js +2 -1
- package/dist/src/components/steps/room/AvailableUpgradesModal.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/RoomDetails.js +9 -4
- package/dist/src/components/steps/room/roomDetails/RoomDetails.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/RoomDetailsRetargeting.js +6 -3
- package/dist/src/components/steps/room/roomDetails/RoomDetailsRetargeting.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.js +3 -3
- package/dist/src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/ReadMoreRoomRateRow.js +6 -3
- package/dist/src/components/steps/room/roomDetails/roomRates/ReadMoreRoomRateRow.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.js +4 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateRow.js +8 -3
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateRow.js.map +1 -1
- package/dist/src/components/summary/BEMobileSummaryModal.js +4 -5
- package/dist/src/components/summary/BEMobileSummaryModal.js.map +1 -1
- package/dist/src/components/summary/BESummary.js +9 -8
- package/dist/src/components/summary/BESummary.js.map +1 -1
- package/dist/src/components/summary/BESummaryAddonRow.js +14 -1
- package/dist/src/components/summary/BESummaryAddonRow.js.map +1 -1
- package/dist/src/contexts/BasketContext/BasketContextType.d.ts +1 -2
- package/dist/src/contexts/BasketContext/BasketContextType.js.map +1 -1
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js +30 -26
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
- package/dist/src/contexts/CompanyContext/CompanyContextType.type.d.ts +3 -1
- package/dist/src/contexts/CompanyContext/CompanyContextType.type.js.map +1 -1
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +13 -5
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
- package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js +21 -22
- package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js.map +1 -1
- package/dist/src/contexts/Members/RoomstayMemberContext/RoomstayMemberContextProvider.js +9 -0
- package/dist/src/contexts/Members/RoomstayMemberContext/RoomstayMemberContextProvider.js.map +1 -1
- package/dist/src/models/Addon/Addon.d.ts +30 -0
- package/dist/src/models/Addon/Addon.js +7 -1
- package/dist/src/models/Addon/Addon.js.map +1 -1
- package/dist/src/models/Api/HotelDTO.d.ts +1 -0
- package/dist/src/models/Api/HotelDTO.js.map +1 -1
- package/dist/src/models/Api/ReservationsDTO.d.ts +1 -1
- package/dist/src/models/Api/ReservationsDTO.js.map +1 -1
- package/dist/src/models/BasketAddonRow.d.ts +6 -1
- package/dist/src/models/BasketAddonRow.js +21 -9
- package/dist/src/models/BasketAddonRow.js.map +1 -1
- package/dist/src/models/Client/Hotel/Hotel.d.ts +1 -0
- package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
- package/dist/src/pages/account/Reservations/AccountReservationsPage.js +3 -3
- package/dist/src/pages/account/Reservations/AccountReservationsPage.js.map +1 -1
- package/dist/src/pages/steps/StepGroupedRoom/StepGroupedRoomComponent.js +4 -2
- package/dist/src/pages/steps/StepGroupedRoom/StepGroupedRoomComponent.js.map +1 -1
- package/dist/src/pages/steps/StepRoom/StepRoomComponent.js +2 -30
- package/dist/src/pages/steps/StepRoom/StepRoomComponent.js.map +1 -1
- package/dist/src/pages/steps/StepRoom/StepRoomFilters.d.ts +2 -0
- package/dist/src/pages/steps/StepRoom/StepRoomFilters.js +70 -0
- package/dist/src/pages/steps/StepRoom/StepRoomFilters.js.map +1 -0
- package/dist/src/providers/storage/LocalStorageProvider.d.ts +1 -1
- package/dist/src/providers/storage/LocalStorageProvider.js.map +1 -1
- package/dist/src/translations/Translation.d.ts +1 -0
- package/dist/src/translations/Translation.js +1 -0
- package/dist/src/translations/Translation.js.map +1 -1
- package/dist/src/translations/languages/en-gb.js +1 -0
- package/dist/src/translations/languages/en-gb.js.map +1 -1
- package/dist/src/util/TotalCalculator.d.ts +15 -0
- package/dist/src/util/TotalCalculator.js +91 -37
- package/dist/src/util/TotalCalculator.js.map +1 -1
- package/dist/test.bundle.js +1 -1
- package/package.json +1 -1
- package/dist/166.bundle.js +0 -1
- package/dist/736.bundle.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Addon.js","sourceRoot":"/","sources":["src/models/Addon/Addon.ts"],"names":[],"mappings":"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","sourcesContent":["import dayjs, { Dayjs } from 'dayjs';\n\ninterface IAddon {\n code: string;\n\n /**\n * The SynXis CR RatePlan Code associated with the Package if the Package is restricted to certain RatePlans\n */\n ratePlanCode: string;\n\n name: string;\n\n description: string;\n\n /**\n * Whether the price for this package is included in the room rate.\n * (Always `false` unless the price is zero)\n */\n inclusive: boolean;\n\n image?: string;\n\n url?: string;\n\n /**\n * Defines how a service is priced.\n * Values:\n * Per Stay\n * Per Night\n * Per Person\n * Per Person Per Night\n */\n pricingType: AddonPricingType;\n\n hideDatePicker?: boolean;\n\n category: string;\n\n cancelPenalty?: string;\n\n guaranteeDescription?: string;\n\n availability: { [date: string]: PriceInfo };\n\n checkInDate: dayjs.Dayjs;\n checkOutDate: dayjs.Dayjs;\n}\n\nexport enum AddonPricingType {\n PER_STAY = 'Per stay',\n PER_NIGHT = 'Per night',\n PER_PERSON = 'Per person',\n PER_PERSON_PER_NIGHT = 'Per person per night',\n\n // Synxis Basic addon types\n PER_QUANTITY_NAME_PER_NIGHT = 'Per Quantity Name Per Night',\n PER_ROOM_QUANTITY_PER_NIGHT = 'Per Room Quantity Per Night',\n PER_PERSON_OCCUPANCY_PER_NIGHT = 'Per Person Occupancy Per Night',\n PER_ADULT_OCCUPANCY_PER_NIGHT = 'Per Adult Occupancy Per Night',\n PER_CHILD_OCCUPANCY_PER_NIGHT = 'Per Child Occupancy Per Night',\n}\n\nexport const ADDON_PER_NIGHT_TYPES = [\n AddonPricingType.PER_NIGHT,\n AddonPricingType.PER_PERSON_PER_NIGHT,\n\n AddonPricingType.PER_QUANTITY_NAME_PER_NIGHT,\n AddonPricingType.PER_ROOM_QUANTITY_PER_NIGHT,\n AddonPricingType.PER_PERSON_OCCUPANCY_PER_NIGHT,\n AddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT,\n AddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT,\n];\n\nexport class Addon {\n public code!: string;\n\n /**\n * The SynXis CR RatePlan Code associated with the Package if the Package is restricted to certain RatePlans\n */\n public ratePlanCode!: string;\n\n public name!: string;\n\n public description!: string;\n\n /**\n * Whether the price for this package is included in the room rate.\n * (Always `false` unless the price is zero)\n */\n public inclusive = false;\n\n public image?: string;\n\n public url?: string;\n\n /**\n * Defines how a service is priced.\n * Values:\n * Per Stay\n * Per Night\n * Per Person\n * Per Person Per Night\n */\n public pricingType!: AddonPricingType;\n\n public hideDatePicker!: false;\n\n public category!: string;\n\n public cancelPenalty?: string;\n\n public guaranteeDescription?: string;\n\n public availability: { [date: string]: PriceInfo } = {};\n\n public selected?: boolean;\n\n public selectorDates: { text: string; value: string }[] = [];\n\n public firstDate?: string;\n\n public checkInDate!: dayjs.Dayjs;\n public checkOutDate!: dayjs.Dayjs;\n\n public nights!: number;\n\n public order?: number;\n\n public constructor(props?: IAddon) {\n if (props) {\n this.applyData(props);\n }\n }\n\n public static fromData(data: any) {\n const addon = new this();\n\n addon.applyData(data);\n\n return addon;\n }\n\n public applyData(data: IAddon) {\n Object.keys(data).map((key: any) => {\n (this as any)[key] = (data as any)[key];\n }, this);\n\n let first = true;\n for (const date in this.availability) {\n if (!Object.prototype.hasOwnProperty.call(this.availability, date)) {\n continue;\n }\n\n const day = dayjs(date, 'YYYY-MM-DD');\n this.selectorDates.push({ text: day.format('D MMM'), value: date });\n if (first) {\n this.firstDate = date;\n first = false;\n }\n\n const priceInfo = this.availability[date];\n priceInfo.selectorTimes = [];\n priceInfo.timeSlots?.forEach((slot) => {\n const timeRegExp = /T(\\d{2}):(\\d{2}):(\\d{2})$/;\n const startTime = slot.startTime?.match(timeRegExp);\n const endTime = slot.endTime?.match(timeRegExp);\n\n if (startTime && endTime) {\n const start = dayjs().hour(parseInt(startTime[1], 10)).minute(parseInt(startTime[2], 10)).second(parseInt(startTime[3], 10));\n const end = dayjs().hour(parseInt(endTime[1], 10)).minute(parseInt(endTime[2], 10)).second(parseInt(endTime[3], 10));\n\n const [hours, minutes, seconds] = (slot.increment as string).split(':').map((it) => parseInt(it, 10));\n\n const increment = (time: Dayjs) => time.add(hours, 'hour').add(minutes, 'minute').add(seconds, 'second');\n\n for (let time = start; time.isBefore(end, 'second'); time = increment(time)) {\n (priceInfo.selectorTimes as { text: string; value: string }[]).push({ text: time.format('h:mma'), value: time.format('THH:mm:ss') });\n }\n }\n });\n }\n\n if (data.checkInDate && data.checkOutDate) {\n this.nights = data.checkOutDate.diff(data.checkInDate, 'day');\n }\n }\n}\n\nexport type PriceInfo = {\n /**\n * Number of available items for sale.\n */\n quantity: number;\n\n /**\n * Price per quantity\n */\n price?: number;\n\n adultPrice?: number;\n childPrice?: number;\n\n timeSlots?: TimeSlot[];\n\n selectorTimes?: { text: string; value: string }[];\n};\n\nexport type TimeSlot = {\n /**\n * The start date and time when the package is available.\n * If the package applies during the whole stay, this node is not returned unless the time needs to be selected. In that case, the Start and End dates do not\n * include the date: @Start=\"T07:30:00\" and @End=\"T17:30:00\" and @Increment=\"00:60:00\"\n * Type: DateTime\n */\n startTime?: string;\n\n /**\n * The end date / time when the package is available.\n * If the package component applies during the whole stay, this node is not returned unless the time needs to be selected. In that case, the Start and End dates\n * do not include the date: @Start=\"T07:30:00\" and @End=\"T17:30:00\" and @Increment=\"00:60:00\"\n * Type: DateTime\n */\n endTime?: string;\n\n /**\n * Used with @Start and @End. Indicates the interval when the package or service is available.\n * For example, a package with golf lessons from 7:30 am to 5:30 pm with instructions and available hourly has the TimeSpan attributes set as: @Start=\"2015-\n * 010-28T07:30:00\" and @End=\"2015-10-28T17:30:00\" and @Increment=\"00:60:00\"\n * Type: Time\n */\n increment?: string;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"Addon.js","sourceRoot":"/","sources":["src/models/Addon/Addon.ts"],"names":[],"mappings":"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","sourcesContent":["import dayjs, { Dayjs } from 'dayjs';\n\ninterface IAddon {\n code: string;\n\n /**\n * The SynXis CR RatePlan Code associated with the Package if the Package is restricted to certain RatePlans\n */\n ratePlanCode: string;\n\n name: string;\n\n description: string;\n\n /**\n * Whether the price for this package is included in the room rate.\n * (Always `false` unless the price is zero)\n */\n inclusive: boolean;\n\n image?: string;\n\n url?: string;\n\n /**\n * Defines how a service is priced.\n * Values:\n * Per Stay\n * Per Night\n * Per Person\n * Per Person Per Night\n */\n pricingType: AddonPricingType;\n\n hideDatePicker?: boolean;\n\n category: string;\n\n cancelPenalty?: string;\n\n guaranteeDescription?: string;\n\n availability: { [date: string]: PriceInfo };\n\n checkInDate: dayjs.Dayjs;\n checkOutDate: dayjs.Dayjs;\n}\n\nexport enum AddonPricingType {\n PER_STAY = 'Per stay',\n PER_NIGHT = 'Per night',\n PER_PERSON = 'Per person',\n PER_PERSON_PER_NIGHT = 'Per person per night',\n\n // Synxis Basic addon types\n PER_QUANTITY_NAME_PER_NIGHT = 'Per Quantity Name Per Night',\n PER_ROOM_QUANTITY_PER_NIGHT = 'Per Room Quantity Per Night',\n PER_PERSON_OCCUPANCY_PER_NIGHT = 'Per Person Occupancy Per Night',\n PER_ADULT_OCCUPANCY_PER_NIGHT = 'Per Adult Occupancy Per Night',\n PER_CHILD_OCCUPANCY_PER_NIGHT = 'Per Child Occupancy Per Night',\n}\n\nexport const ADDON_PER_NIGHT_TYPES = [\n AddonPricingType.PER_NIGHT,\n AddonPricingType.PER_PERSON_PER_NIGHT,\n\n AddonPricingType.PER_QUANTITY_NAME_PER_NIGHT,\n AddonPricingType.PER_ROOM_QUANTITY_PER_NIGHT,\n AddonPricingType.PER_PERSON_OCCUPANCY_PER_NIGHT,\n AddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT,\n AddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT,\n];\n\nexport const ADDON_PER_PERSON_PER_NIGHT_TYPES = [\n AddonPricingType.PER_PERSON_PER_NIGHT,\n AddonPricingType.PER_PERSON_OCCUPANCY_PER_NIGHT,\n AddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT,\n AddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT,\n];\n\nexport class Addon {\n public code!: string;\n\n /**\n * The SynXis CR RatePlan Code associated with the Package if the Package is restricted to certain RatePlans\n */\n public ratePlanCode!: string;\n\n public name!: string;\n\n public description!: string;\n\n /**\n * Whether the price for this package is included in the room rate.\n * (Always `false` unless the price is zero)\n */\n public inclusive = false;\n\n public image?: string;\n\n public url?: string;\n\n /**\n * Defines how a service is priced.\n * Values:\n * Per Stay\n * Per Night\n * Per Person\n * Per Person Per Night\n */\n public pricingType!: AddonPricingType;\n\n public hideDatePicker!: false;\n\n public category!: string;\n\n public cancelPenalty?: string;\n\n public guaranteeDescription?: string;\n\n public availability: { [date: string]: PriceInfo } = {};\n\n public selected?: boolean;\n\n public selectorDates: { text: string; value: string }[] = [];\n\n public firstDate?: string;\n\n public checkInDate!: dayjs.Dayjs;\n public checkOutDate!: dayjs.Dayjs;\n\n public nights!: number;\n\n public order?: number;\n\n public constructor(props?: IAddon) {\n if (props) {\n this.applyData(props);\n }\n }\n\n public static fromData(data: any) {\n const addon = new this();\n\n addon.applyData(data);\n\n return addon;\n }\n\n public applyData(data: IAddon) {\n Object.keys(data).map((key: any) => {\n (this as any)[key] = (data as any)[key];\n }, this);\n\n let first = true;\n for (const date in this.availability) {\n if (!Object.prototype.hasOwnProperty.call(this.availability, date)) {\n continue;\n }\n\n const day = dayjs(date, 'YYYY-MM-DD');\n this.selectorDates.push({ text: day.format('D MMM'), value: date });\n if (first) {\n this.firstDate = date;\n first = false;\n }\n\n const priceInfo = this.availability[date];\n priceInfo.selectorTimes = [];\n priceInfo.timeSlots?.forEach((slot) => {\n const timeRegExp = /T(\\d{2}):(\\d{2}):(\\d{2})$/;\n const startTime = slot.startTime?.match(timeRegExp);\n const endTime = slot.endTime?.match(timeRegExp);\n\n if (startTime && endTime) {\n const start = dayjs().hour(parseInt(startTime[1], 10)).minute(parseInt(startTime[2], 10)).second(parseInt(startTime[3], 10));\n const end = dayjs().hour(parseInt(endTime[1], 10)).minute(parseInt(endTime[2], 10)).second(parseInt(endTime[3], 10));\n\n const [hours, minutes, seconds] = (slot.increment as string).split(':').map((it) => parseInt(it, 10));\n\n const increment = (time: Dayjs) => time.add(hours, 'hour').add(minutes, 'minute').add(seconds, 'second');\n\n for (let time = start; time.isBefore(end, 'second'); time = increment(time)) {\n (priceInfo.selectorTimes as { text: string; value: string }[]).push({ text: time.format('h:mma'), value: time.format('THH:mm:ss') });\n }\n }\n });\n }\n\n if (data.checkInDate && data.checkOutDate) {\n this.nights = data.checkOutDate.diff(data.checkInDate, 'day');\n }\n }\n}\n\nexport type PriceInfo = {\n /**\n * Number of available items for sale.\n */\n quantity: number;\n\n /**\n * Price per quantity\n */\n price?: number;\n\n /**\n * Fee per quantity\n */\n fee?: number;\n\n /**\n * Adult & child specific prices/fees per quantity\n */\n adultPrice?: number;\n childPrice?: number;\n adultFee?: number;\n childFee?: number;\n\n timeSlots?: TimeSlot[];\n\n selectorTimes?: { text: string; value: string }[];\n};\n\nexport type TimeSlot = {\n /**\n * The start date and time when the package is available.\n * If the package applies during the whole stay, this node is not returned unless the time needs to be selected. In that case, the Start and End dates do not\n * include the date: @Start=\"T07:30:00\" and @End=\"T17:30:00\" and @Increment=\"00:60:00\"\n * Type: DateTime\n */\n startTime?: string;\n\n /**\n * The end date / time when the package is available.\n * If the package component applies during the whole stay, this node is not returned unless the time needs to be selected. In that case, the Start and End dates\n * do not include the date: @Start=\"T07:30:00\" and @End=\"T17:30:00\" and @Increment=\"00:60:00\"\n * Type: DateTime\n */\n endTime?: string;\n\n /**\n * Used with @Start and @End. Indicates the interval when the package or service is available.\n * For example, a package with golf lessons from 7:30 am to 5:30 pm with instructions and available hourly has the TimeSpan attributes set as: @Start=\"2015-\n * 010-28T07:30:00\" and @End=\"2015-10-28T17:30:00\" and @Increment=\"00:60:00\"\n * Type: Time\n */\n increment?: string;\n};\n\nexport type BasketAddonDTO = {\n availability: any;\n code: string;\n inclusive: false;\n pricingType: string;\n quantity: number;\n adultQuantity: number;\n childQuantity?: number;\n description: string;\n name: string;\n category: string;\n image: string;\n price: number;\n fee: number;\n adultPrice?: number;\n childPrice?: number;\n adultFee?: number;\n childFee?: number;\n nights?: number;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HotelDTO.js","sourceRoot":"/","sources":["src/models/Api/HotelDTO.ts"],"names":[],"mappings":";;;AAMA,uDAAiH;
|
|
1
|
+
{"version":3,"file":"HotelDTO.js","sourceRoot":"/","sources":["src/models/Api/HotelDTO.ts"],"names":[],"mappings":";;;AAMA,uDAAiH;AAyHjH,IAAY,WAOX;AAPD,WAAY,WAAW;IACnB,4BAAa,CAAA;IACb,wCAAyB,CAAA;IACzB,0BAAW,CAAA;IACX,wCAAyB,CAAA;IACzB,uCAAwB,CAAA;IACxB,oCAAqB,CAAA;AACzB,CAAC,EAPW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAOtB;AAEY,QAAA,0BAA0B,GAAsD;IACzF,CAAC,wBAAgB,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,IAAI;IACzC,CAAC,wBAAgB,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,UAAU;IACrD,CAAC,wBAAgB,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,GAAG;IACvC,CAAC,wBAAgB,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,eAAe;IAC/D,CAAC,wBAAgB,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,UAAU;IACrD,CAAC,wBAAgB,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,QAAQ;CACpD,CAAC","sourcesContent":["import type { EnvironmentName } from '@planpay/web';\nimport type { EBookingPaymentMethod, EHotelCardProcessor, EHotelStateFieldConfiguration, EIntegration, IAuxiliaryFilter } from '@roomstay/core';\nimport { DeepPartial } from 'react-hook-form';\n\nimport ColorProfile from '@/models/Client/Hotel/ColorProfile';\nimport { DistanceUnitType } from '@/models/Client/Hotel/DistanceUnitType.types';\nimport { AdminHotelConfig, ClientHotelConfig, ConfigHotel, EPaymentCardType } from '@/models/Client/Hotel/Hotel';\nimport HotelAddress from '@/models/Client/Hotel/HotelAddress';\nimport { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nimport { WeekdayStartsOn } from '@/models/Client/Hotel/WeekdayStartsOn.types';\n\nexport type HotelServiceDTO = {\n detail: string;\n included: boolean;\n name: string;\n onsite: boolean;\n};\n\nexport type HotelRoomsDTO = {\n [roomTypeCode: string]: HotelRoomDTO;\n};\n\nexport type HotelRoomGroupsDTO = {\n groupName: string;\n id: string;\n filters: {\n [id: string]: {\n name: string;\n type: 'select';\n includeAllAbove: boolean;\n requireInput: boolean;\n options: IAuxiliaryFilter['options'];\n };\n };\n}[];\n\nexport type HotelRoomAmenitiesDTO = {\n type: string;\n description: string;\n};\n\nexport type HotelRoomDTO = {\n code: string;\n name: string;\n shortDescription: string;\n longDescription: string;\n images: string[];\n quantity: number;\n maxOccupancy: number;\n bedQuantity: number;\n showBedType?: boolean;\n standardNumBeds: number;\n maxRollaways: number;\n bedType: string;\n amenities: HotelRoomAmenitiesDTO[];\n features: HotelRoomAmenitiesDTO[];\n bedTypeOverride?: string;\n roomGroupId?: string;\n roomSize?: number;\n prePerkDisclaimer?: string;\n perks?: ConfigHotel['perks'];\n};\n\nexport type HotelDTO = {\n id: number;\n name: string;\n chainId: number;\n chainName: string;\n\n address: HotelAddress;\n phone: string;\n\n latitude: string;\n longitude: string;\n\n utcOffset: string;\n\n languageCode: string;\n currencyCode: string;\n\n checkInTime: string;\n checkOutTime: string;\n\n paymentCardTypes: EPaymentCardType[];\n\n description: string;\n locationDescription: string;\n policies: string;\n\n hotelServices: HotelServiceDTO[];\n businessServices: HotelServiceDTO[];\n\n rooms: { [roomTypeCode: string]: HotelRoomDTO };\n dataSource: HotelDataSource;\n\n // Following fields are only present if dataSource = 'roomstay'\n logo?: string;\n colors: DeepPartial<ColorProfile>;\n distanceUnitType?: DistanceUnitType;\n weekdayStartsOn?: WeekdayStartsOn;\n\n crossSellHotelIds?: string[];\n paymentMethods: EBookingPaymentMethod[];\n cardProcessor: EHotelCardProcessor;\n planpay?: {\n username: string;\n minDaysShowPlanpay: number;\n env: EnvironmentName;\n };\n\n email?: string;\n hotelUrl?: string;\n heroImage?: string;\n images?: string[];\n integrations?: EIntegration[];\n roomGroups: HotelRoomGroupsDTO;\n requireDeposit?: boolean;\n enableCreditCardSurcharge?: boolean;\n availableCountries?: { name: string; value: string }[];\n preventCancellation?: boolean;\n maxAdults?: number;\n maxChildren?: number;\n maxInfants?: number;\n stateFieldConfiguration?: EHotelStateFieldConfiguration;\n} & Pick<AdminHotelConfig, 'childConfiguration' | 'perks' | 'perkTitle' | 'countryPrefix' | 'quoteImageDesktop' | 'quoteImageMobile' | 'memberOnlyImage' | 'captureChildAge'> &\n Pick<ClientHotelConfig, 'memberOnlyRenderRateLast'>;\n\nexport enum VGSCardName {\n Visa = 'visa',\n Mastercard = 'mastercard',\n JCB = 'jcb',\n DinersClub = 'dinersclub',\n AmericanExpress = 'amex',\n UnionPay = 'unionpay',\n}\n\nexport const SynxisToVGSCardNameMapping: { [synxisName in EPaymentCardType]: VGSCardName } = {\n [EPaymentCardType.Visa]: VGSCardName.Visa,\n [EPaymentCardType.Mastercard]: VGSCardName.Mastercard,\n [EPaymentCardType.JCB]: VGSCardName.JCB,\n [EPaymentCardType.AmericanExpress]: VGSCardName.AmericanExpress,\n [EPaymentCardType.DinersClub]: VGSCardName.DinersClub,\n [EPaymentCardType.UnionPay]: VGSCardName.UnionPay,\n};\n"]}
|
|
@@ -23,7 +23,6 @@ type ReservationsDTO = {
|
|
|
23
23
|
};
|
|
24
24
|
};
|
|
25
25
|
export type ReservationAddonDTO = {
|
|
26
|
-
availability: any;
|
|
27
26
|
code: string;
|
|
28
27
|
inclusive: false;
|
|
29
28
|
pricingType: string;
|
|
@@ -35,6 +34,7 @@ export type ReservationAddonDTO = {
|
|
|
35
34
|
category: string;
|
|
36
35
|
image: string;
|
|
37
36
|
price: number;
|
|
37
|
+
fees?: number;
|
|
38
38
|
adultPrice?: number;
|
|
39
39
|
childPrice?: number;
|
|
40
40
|
nights?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReservationsDTO.js","sourceRoot":"/","sources":["src/models/Api/ReservationsDTO.ts"],"names":[],"mappings":"","sourcesContent":["import { EBookingPaymentMethod } from '@roomstay/core';\n\nimport RoomNightRateDTO from '@/models/Api/RoomNightRateDTO';\n\ntype ReservationsDTO = {\n roomstayId: string;\n reservations: ReservationDTO[];\n itineraryNumber: string;\n hotelFrontendId?: string;\n warnings?: string[];\n total?: string;\n payment?: {\n planpay?: {\n id: string;\n checkoutWorkflow: {\n type: string;\n id: string;\n scriptUrl: string;\n };\n };\n external?: {\n id: string;\n redirectUrl: string;\n };\n };\n};\n\nexport type ReservationAddonDTO = {\n
|
|
1
|
+
{"version":3,"file":"ReservationsDTO.js","sourceRoot":"/","sources":["src/models/Api/ReservationsDTO.ts"],"names":[],"mappings":"","sourcesContent":["import { EBookingPaymentMethod } from '@roomstay/core';\n\nimport RoomNightRateDTO from '@/models/Api/RoomNightRateDTO';\n\ntype ReservationsDTO = {\n roomstayId: string;\n reservations: ReservationDTO[];\n itineraryNumber: string;\n hotelFrontendId?: string;\n warnings?: string[];\n total?: string;\n payment?: {\n planpay?: {\n id: string;\n checkoutWorkflow: {\n type: string;\n id: string;\n scriptUrl: string;\n };\n };\n external?: {\n id: string;\n redirectUrl: string;\n };\n };\n};\n\nexport type ReservationAddonDTO = {\n code: string;\n inclusive: false;\n pricingType: string;\n quantity: number;\n adultQuantity: number;\n childQuantity?: number;\n description: string;\n name: string;\n category: string;\n image: string;\n price: number;\n fees?: number;\n adultPrice?: number;\n childPrice?: number;\n nights?: number;\n};\n\nexport type ReservationDTO = {\n nights: {\n [date: string]: RoomNightRateDTO;\n };\n guestCounts: {\n adults: number;\n children: number;\n };\n guest: {\n address: {\n line1: string;\n city: string;\n postalCode: string;\n };\n firstName: string;\n lastName: string;\n phone: string;\n email: string;\n };\n paymentCard: {\n type?: string;\n last4: string;\n expiry: string;\n name: string;\n };\n paymentMethod?: EBookingPaymentMethod;\n comments?: string[];\n addons?: ReservationAddonDTO[];\n\n reservationNumber: string;\n cancelPolicy: string;\n cancellationPolicyLongDescription?: string;\n guaranteePolicy: string;\n guaranteePolicyLongDescription?: string;\n roomType: string;\n roomCode: string;\n rate: string;\n images: [string];\n status: string;\n isCancelable: boolean;\n total: {\n beforeTax: number;\n afterTax: number;\n };\n};\n\nexport default ReservationsDTO;\n"]}
|
|
@@ -15,8 +15,13 @@ export default class BasketAddonRow {
|
|
|
15
15
|
getQuantity(): number;
|
|
16
16
|
getAdultQuantity(): number;
|
|
17
17
|
getNumberOfAvailableNights(): number;
|
|
18
|
+
private getCalculationParams;
|
|
19
|
+
getTotalFees(): number;
|
|
18
20
|
getTotalPrice(): number;
|
|
19
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Returns the subtotal of an addon (without taking into account the nights modifier)
|
|
23
|
+
*/
|
|
24
|
+
getAddonSubtotal(): number;
|
|
20
25
|
getTotalQuantity(): number;
|
|
21
26
|
/**
|
|
22
27
|
* This function returns a value that should multiply the total price of the addon for one (assumed) night
|
|
@@ -31,12 +31,12 @@ class BasketAddonRow {
|
|
|
31
31
|
getNumberOfAvailableNights() {
|
|
32
32
|
return this.numberOfAvailableNights;
|
|
33
33
|
}
|
|
34
|
-
|
|
35
|
-
var _a;
|
|
34
|
+
getCalculationParams() {
|
|
35
|
+
var _a, _b;
|
|
36
36
|
const addon = this.getAddon();
|
|
37
37
|
const date = this.getSelectedDate();
|
|
38
38
|
const priceInfo = addon.availability[date];
|
|
39
|
-
return
|
|
39
|
+
return {
|
|
40
40
|
availability: this.getAddon().availability,
|
|
41
41
|
code: addon.code,
|
|
42
42
|
inclusive: false,
|
|
@@ -48,25 +48,37 @@ class BasketAddonRow {
|
|
|
48
48
|
category: addon.category,
|
|
49
49
|
image: addon.image,
|
|
50
50
|
price: (_a = priceInfo.price) !== null && _a !== void 0 ? _a : 0,
|
|
51
|
+
fee: (_b = priceInfo.fee) !== null && _b !== void 0 ? _b : 0,
|
|
51
52
|
adultPrice: priceInfo.adultPrice,
|
|
52
53
|
childPrice: priceInfo.childPrice,
|
|
54
|
+
adultFee: priceInfo.adultFee,
|
|
55
|
+
childFee: priceInfo.childFee,
|
|
53
56
|
pricingType: addon.pricingType,
|
|
54
57
|
nights: addon.nights,
|
|
55
|
-
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
getTotalFees() {
|
|
61
|
+
return (0, TotalCalculator_1.calculateBasketAddonTotal)(this.getCalculationParams()).totalFees;
|
|
62
|
+
}
|
|
63
|
+
getTotalPrice() {
|
|
64
|
+
return (0, TotalCalculator_1.calculateBasketAddonTotal)(this.getCalculationParams()).total;
|
|
56
65
|
}
|
|
57
|
-
|
|
66
|
+
/**
|
|
67
|
+
* Returns the subtotal of an addon (without taking into account the nights modifier)
|
|
68
|
+
*/
|
|
69
|
+
getAddonSubtotal() {
|
|
58
70
|
const addon = this.getAddon();
|
|
59
71
|
const date = this.getSelectedDate();
|
|
60
72
|
const priceInfo = addon.availability[date];
|
|
61
73
|
let price = 0;
|
|
62
|
-
if (priceInfo.price) {
|
|
63
|
-
price += priceInfo.price;
|
|
74
|
+
if (priceInfo.price && this.getQuantity() > 0) {
|
|
75
|
+
price += this.getQuantity() * priceInfo.price;
|
|
64
76
|
}
|
|
65
77
|
if (priceInfo.adultPrice && this.getAdultQuantity() > 0) {
|
|
66
|
-
price += priceInfo.adultPrice;
|
|
78
|
+
price += this.getAdultQuantity() * priceInfo.adultPrice;
|
|
67
79
|
}
|
|
68
80
|
if (priceInfo.childPrice && this.getChildQuantity() > 0) {
|
|
69
|
-
price += priceInfo.childPrice;
|
|
81
|
+
price += this.getChildQuantity() * priceInfo.childPrice;
|
|
70
82
|
}
|
|
71
83
|
return price;
|
|
72
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasketAddonRow.js","sourceRoot":"/","sources":["src/models/BasketAddonRow.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"BasketAddonRow.js","sourceRoot":"/","sources":["src/models/BasketAddonRow.ts"],"names":[],"mappings":"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","sourcesContent":["import { Addon, ADDON_PER_NIGHT_TYPES, AddonPricingType, BasketAddonDTO, PriceInfo } from '@/models/Addon/Addon';\nimport { calculateBasketAddonTotal } from '@/util/TotalCalculator';\n\nexport default class BasketAddonRow {\n private readonly uniqId: string;\n\n private addon!: Addon;\n\n private quantity: number;\n private adultQuantity: number;\n private childQuantity: number;\n\n private selectedDate!: string;\n private selectedTime!: string;\n\n private numberOfAvailableNights: number;\n\n public constructor(addon?: Addon) {\n if (addon) {\n this.setAddon(addon);\n }\n\n this.quantity = 1;\n this.adultQuantity = 1;\n this.childQuantity = 0;\n\n this.uniqId = btoa(((Date.now() % 1000) / 1000) * Math.random() + '');\n\n this.numberOfAvailableNights = Object.values(addon?.availability as { [date: string]: PriceInfo }).length;\n }\n\n public getAddon() {\n return this.addon;\n }\n\n public getSelectedDate() {\n return this.selectedDate;\n }\n\n public getSelectedTime() {\n return this.selectedTime;\n }\n\n public getQuantity() {\n return this.quantity;\n }\n\n public getAdultQuantity(): number {\n return this.adultQuantity;\n }\n\n public getNumberOfAvailableNights() {\n return this.numberOfAvailableNights;\n }\n\n private getCalculationParams(): BasketAddonDTO {\n const addon = this.getAddon();\n const date = this.getSelectedDate();\n const priceInfo = addon.availability[date];\n\n return {\n availability: this.getAddon().availability,\n code: addon.code,\n inclusive: false,\n quantity: this.getQuantity(),\n adultQuantity: this.getAdultQuantity(),\n childQuantity: this.getChildQuantity(),\n description: addon.description,\n name: addon.name,\n category: addon.category,\n image: addon.image as any,\n price: priceInfo.price ?? 0,\n fee: priceInfo.fee ?? 0,\n adultPrice: priceInfo.adultPrice,\n childPrice: priceInfo.childPrice,\n adultFee: priceInfo.adultFee,\n childFee: priceInfo.childFee,\n pricingType: addon.pricingType,\n nights: addon.nights,\n };\n }\n\n public getTotalFees(): number {\n return calculateBasketAddonTotal(this.getCalculationParams()).totalFees;\n }\n\n public getTotalPrice(): number {\n return calculateBasketAddonTotal(this.getCalculationParams()).total;\n }\n\n /**\n * Returns the subtotal of an addon (without taking into account the nights modifier)\n */\n public getAddonSubtotal(): number {\n const addon = this.getAddon();\n const date = this.getSelectedDate();\n const priceInfo = addon.availability[date];\n\n let price = 0;\n if (priceInfo.price && this.getQuantity() > 0) {\n price += this.getQuantity() * priceInfo.price;\n }\n\n if (priceInfo.adultPrice && this.getAdultQuantity() > 0) {\n price += this.getAdultQuantity() * priceInfo.adultPrice;\n }\n\n if (priceInfo.childPrice && this.getChildQuantity() > 0) {\n price += this.getChildQuantity() * priceInfo.childPrice;\n }\n\n return price;\n }\n\n public getTotalQuantity(): number {\n const addon = this.getAddon();\n const date = this.getSelectedDate();\n const priceInfo = addon.availability[date];\n\n let quantity = 0;\n if (priceInfo.price) {\n quantity += this.getQuantity();\n }\n\n if (priceInfo.adultPrice || addon.pricingType === AddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT) {\n quantity += this.getAdultQuantity();\n }\n\n if (priceInfo.childPrice || addon.pricingType === AddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT) {\n quantity += this.getChildQuantity();\n }\n\n return quantity;\n }\n\n /**\n * This function returns a value that should multiply the total price of the addon for one (assumed) night\n * Depending on the pricing type\n * @returns number\n */\n public getNightModifier(): number {\n const modifier = 1;\n\n if (ADDON_PER_NIGHT_TYPES.includes(this.addon.pricingType)) {\n return this.addon.checkOutDate.diff(this.addon.checkInDate, 'day');\n } else {\n return modifier;\n }\n }\n\n public setAdultQuantity(value: number) {\n this.adultQuantity = value;\n }\n\n public getChildQuantity(): number {\n return this.childQuantity;\n }\n\n public setChildQuantity(value: number) {\n this.childQuantity = value;\n }\n\n public getID() {\n return this.uniqId;\n }\n\n public isValid() {\n return this.selectedDate && this.addon && this.quantity > 0;\n }\n\n public setSelectedDate(date: string) {\n this.selectedDate = date;\n }\n\n public setSelectedTime(time?: string) {\n this.selectedTime = time as string;\n }\n\n public setQuantity(quantity: number) {\n this.quantity = quantity;\n }\n\n public setAddon(addon: Addon) {\n this.addon = addon;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Hotel.js","sourceRoot":"/","sources":["src/models/Client/Hotel/Hotel.ts"],"names":[],"mappings":";;;AAkBA,IAAY,gBAOX;AAPD,WAAY,gBAAgB;IACxB,+BAAW,CAAA;IACX,qCAAiB,CAAA;IACjB,8BAAU,CAAA;IACV,0CAAsB,CAAA;IACtB,qCAAiB,CAAA;IACjB,mCAAe,CAAA;AACnB,CAAC,EAPW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAO3B","sourcesContent":["import type { EnvironmentName } from '@planpay/web';\nimport { EBookingPaymentMethod, EHotelCardProcessor, EHotelStateFieldConfiguration, EIntegration, IHotelColorScheme } from '@roomstay/core';\nimport { Property } from 'csstype';\nimport type { ReactChild } from 'react';\n\nimport type { InternalMemberSignInInputs } from '@/components/members/SignInModal/InternalMemberSignInModal.types';\nimport type { HotelRoomGroupsDTO, HotelRoomsDTO, HotelServiceDTO } from '@/models/Api/HotelDTO';\nimport type { TransportDistances } from '@/models/Api/HotelOverrideDTO';\nimport type { HasDatalayerTags } from '@/models/Client/Hotel/Company';\nimport type { DistanceUnitType } from '@/models/Client/Hotel/DistanceUnitType.types';\nimport type HotelAddress from '@/models/Client/Hotel/HotelAddress';\nimport type { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nimport type { HotelPerk } from '@/models/Client/Hotel/HotelPerk';\nimport type { HotelRoomOverwrite } from '@/models/Client/Hotel/HotelRoomOverwrite';\nimport type { WeekdayStartsOn } from '@/models/Client/Hotel/WeekdayStartsOn.types';\nimport type { Language } from '@/providers/LanguageProvider';\nimport { RoomSort } from '@/providers/RoomSortProvider';\n\nexport enum EPaymentCardType {\n Visa = 'VI',\n Mastercard = 'MC',\n JCB = 'JC',\n AmericanExpress = 'AX',\n DinersClub = 'DN',\n UnionPay = 'UP',\n}\n\nexport interface IVGSVaultNames {\n standard: string;\n members: string;\n}\n\n/**\n * This config comes from admin\n */\nexport interface AdminHotelConfig {\n hotelID: string;\n name: string;\n address?: HotelAddress;\n latitude?: number;\n longitude?: number;\n phone?: string;\n email?: string;\n checkInTime?: string;\n checkOutTime?: string;\n paymentCardTypes?: EPaymentCardType[];\n description?: string;\n locationDescription?: string;\n policies?: string;\n hotelServices: HotelServiceDTO[];\n businessServices: HotelServiceDTO[];\n rooms: HotelRoomsDTO;\n hasLoadedDetails?: boolean;\n dataSource: HotelDataSource;\n defaultCurrency: string;\n paymentMethods: EBookingPaymentMethod[];\n planpay?: {\n username: string;\n minDaysShowPlanpay: number;\n env: EnvironmentName;\n };\n hotelUrl: string;\n heroImage: string;\n memberOnlyModalImage?: string;\n memberOnlyModalImageSize: Property.ObjectFit;\n images?: string[];\n logo: string | ReactChild;\n colors: IHotelColorScheme;\n distanceUnitType: DistanceUnitType;\n startsWeekOnDay?: WeekdayStartsOn;\n crossSellHotelIds?: string[];\n maxOccupancy?: number;\n maxAdults?: number;\n maxChildren?: number;\n maxInfants?: number;\n hideByLine?: boolean;\n transportDistances?: TransportDistances;\n roomGroups: HotelRoomGroupsDTO;\n cardProcessor: EHotelCardProcessor;\n\n requireDeposit?: boolean;\n availableCountries?: { name: string; value: string }[];\n\n childConfiguration?: {\n supportChildren?: boolean;\n supportInfants: boolean;\n childRange: { min: number; max: number };\n infantRange: { min: number; max: number };\n };\n preventCancellation?: boolean;\n\n perks?: HotelPerk[];\n perkTitle?: string;\n\n stateFieldConfiguration?: EHotelStateFieldConfiguration;\n\n countryPrefix?: string;\n quoteImageDesktop?: string;\n quoteImageMobile?: string;\n memberOnlyImage?: string;\n captureChildAge?: boolean;\n}\n\n/**\n * This config comes from hard static local file\n */\nexport interface ClientHotelConfig {\n providerHotelID: string;\n shortName?: string;\n defaultDatepickerType?: 'Month' | 'Week';\n // TODO: need to do magic to see if we need to append / prepend stuff, for now we assume that it's only used while on the site.\n checkoutUrl?: string;\n defaultLanguage: Language;\n privacyPolicyUrl: string;\n bookNowPayLaterUrl?: string;\n bestRateNoBSUrl?: string;\n\n memberOnlyRates?: string[];\n memberOnlyPromoCode?: string;\n memberOnlyRenderRateLast?: boolean;\n memberOnlySignupInputs?: InternalMemberSignInInputs;\n googleMapsImage?: string;\n /**\n * Whether to show the Breakfast / Lunch / Dinner included\n */\n showMealPill?: boolean;\n perks?: HotelPerk[];\n perkTitle?: string;\n /**\n * Hide perks on room row\n */\n perksHideOnRoomRow?: boolean;\n /**\n * Hide perks on room detail modal\n */\n perksHideOnRoomDetail?: boolean;\n perksShowDisclaimer?: boolean;\n /** @deprecated Use the vgs.vaultNames.standard property now */\n vgsVaultName?: string;\n vgs?: {\n vaultNames: IVGSVaultNames;\n };\n showAddonLoader: boolean;\n overwrites?: { [code: string]: Partial<HotelRoomOverwrite> };\n forwardFindReservationToSynxis?: boolean;\n additionalOptions?: { [name: string]: any };\n googleReCaptcha?: {\n loadForMembers?: boolean;\n siteKey?: string;\n };\n /**\n * Show description on RoomDetails\n */\n showDescriptionOnRoomDetails?: boolean;\n /**\n * Customize the Member modal colours. Specifically replacing the green (success) with the primary color of hotel (accent)\n */\n memberOnlyModalUsePrimaryColor?: boolean;\n /**\n * Callback to trigger specific events on load of a hotel.\n *\n * This is where you can specify custom fields, language overrides, feature toggles etc.\n */\n onLoad?: () => void;\n currentRoomSort?: RoomSort; //override default room sort\n maxAdults?: number; //fixed from frontend\n}\n\nexport interface ConfigHotel extends ClientHotelConfig, AdminHotelConfig, HasDatalayerTags {}\n\nexport type Hotel = ConfigHotel & {\n lowestPrice?: {\n value: number;\n isLoading: boolean;\n };\n integrations?: EIntegration[];\n};\n\n/**\n * Used for DetailsHotel event\n */\nexport type InitialHotelDetailsEventPayload = {\n name: string;\n hotelID: number | string;\n hotelUrl: string;\n currency: string;\n language: Language;\n address?: HotelAddress;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"Hotel.js","sourceRoot":"/","sources":["src/models/Client/Hotel/Hotel.ts"],"names":[],"mappings":";;;AAkBA,IAAY,gBAOX;AAPD,WAAY,gBAAgB;IACxB,+BAAW,CAAA;IACX,qCAAiB,CAAA;IACjB,8BAAU,CAAA;IACV,0CAAsB,CAAA;IACtB,qCAAiB,CAAA;IACjB,mCAAe,CAAA;AACnB,CAAC,EAPW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAO3B","sourcesContent":["import type { EnvironmentName } from '@planpay/web';\nimport { EBookingPaymentMethod, EHotelCardProcessor, EHotelStateFieldConfiguration, EIntegration, IHotelColorScheme } from '@roomstay/core';\nimport { Property } from 'csstype';\nimport type { ReactChild } from 'react';\n\nimport type { InternalMemberSignInInputs } from '@/components/members/SignInModal/InternalMemberSignInModal.types';\nimport type { HotelRoomGroupsDTO, HotelRoomsDTO, HotelServiceDTO } from '@/models/Api/HotelDTO';\nimport type { TransportDistances } from '@/models/Api/HotelOverrideDTO';\nimport type { HasDatalayerTags } from '@/models/Client/Hotel/Company';\nimport type { DistanceUnitType } from '@/models/Client/Hotel/DistanceUnitType.types';\nimport type HotelAddress from '@/models/Client/Hotel/HotelAddress';\nimport type { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nimport type { HotelPerk } from '@/models/Client/Hotel/HotelPerk';\nimport type { HotelRoomOverwrite } from '@/models/Client/Hotel/HotelRoomOverwrite';\nimport type { WeekdayStartsOn } from '@/models/Client/Hotel/WeekdayStartsOn.types';\nimport type { Language } from '@/providers/LanguageProvider';\nimport { RoomSort } from '@/providers/RoomSortProvider';\n\nexport enum EPaymentCardType {\n Visa = 'VI',\n Mastercard = 'MC',\n JCB = 'JC',\n AmericanExpress = 'AX',\n DinersClub = 'DN',\n UnionPay = 'UP',\n}\n\nexport interface IVGSVaultNames {\n standard: string;\n members: string;\n}\n\n/**\n * This config comes from admin\n */\nexport interface AdminHotelConfig {\n hotelID: string;\n name: string;\n address?: HotelAddress;\n latitude?: number;\n longitude?: number;\n phone?: string;\n email?: string;\n checkInTime?: string;\n checkOutTime?: string;\n paymentCardTypes?: EPaymentCardType[];\n description?: string;\n locationDescription?: string;\n policies?: string;\n hotelServices: HotelServiceDTO[];\n businessServices: HotelServiceDTO[];\n rooms: HotelRoomsDTO;\n hasLoadedDetails?: boolean;\n dataSource: HotelDataSource;\n defaultCurrency: string;\n paymentMethods: EBookingPaymentMethod[];\n planpay?: {\n username: string;\n minDaysShowPlanpay: number;\n env: EnvironmentName;\n };\n hotelUrl: string;\n heroImage: string;\n memberOnlyModalImage?: string;\n memberOnlyModalImageSize: Property.ObjectFit;\n images?: string[];\n logo: string | ReactChild;\n colors: IHotelColorScheme;\n distanceUnitType: DistanceUnitType;\n startsWeekOnDay?: WeekdayStartsOn;\n crossSellHotelIds?: string[];\n maxOccupancy?: number;\n maxAdults?: number;\n maxChildren?: number;\n maxInfants?: number;\n hideByLine?: boolean;\n transportDistances?: TransportDistances;\n roomGroups: HotelRoomGroupsDTO;\n cardProcessor: EHotelCardProcessor;\n\n requireDeposit?: boolean;\n enableCreditCardSurcharge?: boolean;\n availableCountries?: { name: string; value: string }[];\n\n childConfiguration?: {\n supportChildren?: boolean;\n supportInfants: boolean;\n childRange: { min: number; max: number };\n infantRange: { min: number; max: number };\n };\n preventCancellation?: boolean;\n\n perks?: HotelPerk[];\n perkTitle?: string;\n\n stateFieldConfiguration?: EHotelStateFieldConfiguration;\n\n countryPrefix?: string;\n quoteImageDesktop?: string;\n quoteImageMobile?: string;\n memberOnlyImage?: string;\n captureChildAge?: boolean;\n}\n\n/**\n * This config comes from hard static local file\n */\nexport interface ClientHotelConfig {\n providerHotelID: string;\n shortName?: string;\n defaultDatepickerType?: 'Month' | 'Week';\n // TODO: need to do magic to see if we need to append / prepend stuff, for now we assume that it's only used while on the site.\n checkoutUrl?: string;\n defaultLanguage: Language;\n privacyPolicyUrl: string;\n bookNowPayLaterUrl?: string;\n bestRateNoBSUrl?: string;\n\n memberOnlyRates?: string[];\n memberOnlyPromoCode?: string;\n memberOnlyRenderRateLast?: boolean;\n memberOnlySignupInputs?: InternalMemberSignInInputs;\n googleMapsImage?: string;\n /**\n * Whether to show the Breakfast / Lunch / Dinner included\n */\n showMealPill?: boolean;\n perks?: HotelPerk[];\n perkTitle?: string;\n /**\n * Hide perks on room row\n */\n perksHideOnRoomRow?: boolean;\n /**\n * Hide perks on room detail modal\n */\n perksHideOnRoomDetail?: boolean;\n perksShowDisclaimer?: boolean;\n /** @deprecated Use the vgs.vaultNames.standard property now */\n vgsVaultName?: string;\n vgs?: {\n vaultNames: IVGSVaultNames;\n };\n showAddonLoader: boolean;\n overwrites?: { [code: string]: Partial<HotelRoomOverwrite> };\n forwardFindReservationToSynxis?: boolean;\n additionalOptions?: { [name: string]: any };\n googleReCaptcha?: {\n loadForMembers?: boolean;\n siteKey?: string;\n };\n /**\n * Show description on RoomDetails\n */\n showDescriptionOnRoomDetails?: boolean;\n /**\n * Customize the Member modal colours. Specifically replacing the green (success) with the primary color of hotel (accent)\n */\n memberOnlyModalUsePrimaryColor?: boolean;\n /**\n * Callback to trigger specific events on load of a hotel.\n *\n * This is where you can specify custom fields, language overrides, feature toggles etc.\n */\n onLoad?: () => void;\n currentRoomSort?: RoomSort; //override default room sort\n maxAdults?: number; //fixed from frontend\n}\n\nexport interface ConfigHotel extends ClientHotelConfig, AdminHotelConfig, HasDatalayerTags {}\n\nexport type Hotel = ConfigHotel & {\n lowestPrice?: {\n value: number;\n isLoading: boolean;\n };\n integrations?: EIntegration[];\n};\n\n/**\n * Used for DetailsHotel event\n */\nexport type InitialHotelDetailsEventPayload = {\n name: string;\n hotelID: number | string;\n hotelUrl: string;\n currency: string;\n language: Language;\n address?: HotelAddress;\n};\n"]}
|
|
@@ -27,13 +27,13 @@ const AccountReservationPage = () => {
|
|
|
27
27
|
react_1.default.createElement("div", { className: "u-marg-bottom--heavy" },
|
|
28
28
|
react_1.default.createElement(Headline_1.default, { size: "extra-large", bold: true }, t(Translation_1.Translation.Reservation.YourReservationPage.Title))),
|
|
29
29
|
react_1.default.createElement(Tabs_1.default, { defaultActiveKey: "upcoming-stays" },
|
|
30
|
-
react_1.default.createElement(Tab_1.Tab, { navPath:
|
|
30
|
+
react_1.default.createElement(Tab_1.Tab, { navPath: "upcoming-stays", title: t(Translation_1.Translation.Reservation.YourReservationPage.UpcomingStays) },
|
|
31
31
|
react_1.default.createElement("div", { className: "u-pad-top--heavy u-marg-bottom--heavy" },
|
|
32
32
|
react_1.default.createElement(ReservationList_1.default, { reservationItems: upcomingBookings }))),
|
|
33
|
-
react_1.default.createElement(Tab_1.Tab, { navPath:
|
|
33
|
+
react_1.default.createElement(Tab_1.Tab, { navPath: "past-stays", title: t(Translation_1.Translation.Reservation.YourReservationPage.PastStays) },
|
|
34
34
|
react_1.default.createElement("div", { className: "u-pad-top--heavy u-marg-bottom--heavy" },
|
|
35
35
|
react_1.default.createElement(ReservationList_1.default, { reservationItems: pastBookings, actions: [ReservationItem_1.ReservationAction.MoreDetails, ReservationItem_1.ReservationAction.BookAgain] }))),
|
|
36
|
-
react_1.default.createElement(Tab_1.Tab, { navPath:
|
|
36
|
+
react_1.default.createElement(Tab_1.Tab, { navPath: "cancelled-stays", title: t(Translation_1.Translation.Reservation.YourReservationPage.CancelledStays) },
|
|
37
37
|
react_1.default.createElement("div", { className: "u-pad-top--heavy u-marg-bottom--heavy" },
|
|
38
38
|
react_1.default.createElement(ReservationList_1.default, { isCancelled: true, reservationItems: cancelledBookings, actions: [ReservationItem_1.ReservationAction.MoreDetails, ReservationItem_1.ReservationAction.BookAgain] }))))));
|
|
39
39
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountReservationsPage.js","sourceRoot":"/","sources":["src/pages/account/Reservations/AccountReservationsPage.tsx"],"names":[],"mappings":";;;;;;AAAA,2CAA4C;AAC5C,kDAA0B;AAC1B,iDAA+C;AAC/C,uDAAwC;AACxC,0DAAuD;AAEvD,6EAAqD;AACrD,6EAAqD;AACrD,yDAA0D;AAC1D,uDAAoD;AACpD,0EAAkD;AAClD,8EAA6E;AAC7E,+FAAuE;AAGvE,oDAAiD;AAE1C,MAAM,sBAAsB,GAAG,GAAG,EAAE;IACvC,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,EAAE,GAAG,IAAA,iBAAS,GAAE,CAAC;IAE1E,OAAO,CACH;QACI,uCAAK,SAAS,EAAC,uDAAuD;YAClE,8BAAC,uBAAI,IAAC,EAAE,EAAE,6BAAa,CAAC,IAAI,CAAC,IAAI;gBAC7B,8BAAC,kBAAQ,IAAC,MAAM,QAAC,IAAI,EAAE,eAAQ,CAAC,SAAS,EAAE,IAAI,EAAC,OAAO,IAClD,CAAC,CAAC,yBAAW,CAAC,WAAW,CAAC,iBAAiB,CAAC,CACtC,CACR,CACL;QACN,uCAAK,SAAS,EAAC,sBAAsB;YACjC,8BAAC,kBAAQ,IAAC,IAAI,EAAC,aAAa,EAAC,IAAI,UAC5B,CAAC,CAAC,yBAAW,CAAC,WAAW,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAC9C,CACT;QAEN,8BAAC,cAAI,IAAC,gBAAgB,EAAC,gBAAgB;YACnC,8BAAC,SAAG,IAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"AccountReservationsPage.js","sourceRoot":"/","sources":["src/pages/account/Reservations/AccountReservationsPage.tsx"],"names":[],"mappings":";;;;;;AAAA,2CAA4C;AAC5C,kDAA0B;AAC1B,iDAA+C;AAC/C,uDAAwC;AACxC,0DAAuD;AAEvD,6EAAqD;AACrD,6EAAqD;AACrD,yDAA0D;AAC1D,uDAAoD;AACpD,0EAAkD;AAClD,8EAA6E;AAC7E,+FAAuE;AAGvE,oDAAiD;AAE1C,MAAM,sBAAsB,GAAG,GAAG,EAAE;IACvC,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,EAAE,GAAG,IAAA,iBAAS,GAAE,CAAC;IAE1E,OAAO,CACH;QACI,uCAAK,SAAS,EAAC,uDAAuD;YAClE,8BAAC,uBAAI,IAAC,EAAE,EAAE,6BAAa,CAAC,IAAI,CAAC,IAAI;gBAC7B,8BAAC,kBAAQ,IAAC,MAAM,QAAC,IAAI,EAAE,eAAQ,CAAC,SAAS,EAAE,IAAI,EAAC,OAAO,IAClD,CAAC,CAAC,yBAAW,CAAC,WAAW,CAAC,iBAAiB,CAAC,CACtC,CACR,CACL;QACN,uCAAK,SAAS,EAAC,sBAAsB;YACjC,8BAAC,kBAAQ,IAAC,IAAI,EAAC,aAAa,EAAC,IAAI,UAC5B,CAAC,CAAC,yBAAW,CAAC,WAAW,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAC9C,CACT;QAEN,8BAAC,cAAI,IAAC,gBAAgB,EAAC,gBAAgB;YACnC,8BAAC,SAAG,IAAC,OAAO,EAAC,gBAAgB,EAAC,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,WAAW,CAAC,mBAAmB,CAAC,aAAa,CAAC;gBAC7F,uCAAK,SAAS,EAAC,uCAAuC;oBAClD,8BAAC,yBAAe,IAAC,gBAAgB,EAAE,gBAAsE,GAAI,CAC3G,CACJ;YACN,8BAAC,SAAG,IAAC,OAAO,EAAC,YAAY,EAAC,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,WAAW,CAAC,mBAAmB,CAAC,SAAS,CAAC;gBACrF,uCAAK,SAAS,EAAC,uCAAuC;oBAClD,8BAAC,yBAAe,IACZ,gBAAgB,EAAE,YAAkE,EACpF,OAAO,EAAE,CAAC,mCAAiB,CAAC,WAAW,EAAE,mCAAiB,CAAC,SAAS,CAAC,GACvE,CACA,CACJ;YACN,8BAAC,SAAG,IAAC,OAAO,EAAC,iBAAiB,EAAC,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,WAAW,CAAC,mBAAmB,CAAC,cAAc,CAAC;gBAC/F,uCAAK,SAAS,EAAC,uCAAuC;oBAClD,8BAAC,yBAAe,IACZ,WAAW,QACX,gBAAgB,EAAE,iBAAuE,EACzF,OAAO,EAAE,CAAC,mCAAiB,CAAC,WAAW,EAAE,mCAAiB,CAAC,SAAS,CAAC,GACvE,CACA,CACJ,CACH,CACR,CACN,CAAC;AACN,CAAC,CAAC;AA7CW,QAAA,sBAAsB,0BA6CjC","sourcesContent":["import { useMember } from '@frontend/hooks';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport { Tab } from '@/components/generic/Tabs/Tab';\nimport Tabs from '@/components/generic/Tabs/Tabs';\nimport { ReservationAction } from '@/components/reservation/ReservationItem';\nimport ReservationList from '@/components/reservation/ReservationList';\nimport { IRoomstayMemberBookingItemWithRefAndHotelDetails } from '@/contexts';\n\nimport { AccountRoutes } from '../AccountRoutes';\n\nexport const AccountReservationPage = () => {\n const { t } = useTranslation();\n const { cancelledBookings, upcomingBookings, pastBookings } = useMember();\n\n return (\n <>\n <div className=\"u-marg-top--heavy@m u-marg-top@- u-marg-bottom--heavy\">\n <Link to={AccountRoutes.Home.path}>\n <BEButton isText icon={IconType.ArrowLeft} size=\"small\">\n {t(Translation.Reservation.BackToYourAccount)}\n </BEButton>\n </Link>\n </div>\n <div className=\"u-marg-bottom--heavy\">\n <Headline size=\"extra-large\" bold>\n {t(Translation.Reservation.YourReservationPage.Title)}\n </Headline>\n </div>\n\n <Tabs defaultActiveKey=\"upcoming-stays\">\n <Tab navPath=\"upcoming-stays\" title={t(Translation.Reservation.YourReservationPage.UpcomingStays)}>\n <div className=\"u-pad-top--heavy u-marg-bottom--heavy\">\n <ReservationList reservationItems={upcomingBookings as IRoomstayMemberBookingItemWithRefAndHotelDetails[]} />\n </div>\n </Tab>\n <Tab navPath=\"past-stays\" title={t(Translation.Reservation.YourReservationPage.PastStays)}>\n <div className=\"u-pad-top--heavy u-marg-bottom--heavy\">\n <ReservationList\n reservationItems={pastBookings as IRoomstayMemberBookingItemWithRefAndHotelDetails[]}\n actions={[ReservationAction.MoreDetails, ReservationAction.BookAgain]}\n />\n </div>\n </Tab>\n <Tab navPath=\"cancelled-stays\" title={t(Translation.Reservation.YourReservationPage.CancelledStays)}>\n <div className=\"u-pad-top--heavy u-marg-bottom--heavy\">\n <ReservationList\n isCancelled\n reservationItems={cancelledBookings as IRoomstayMemberBookingItemWithRefAndHotelDetails[]}\n actions={[ReservationAction.MoreDetails, ReservationAction.BookAgain]}\n />\n </div>\n </Tab>\n </Tabs>\n </>\n );\n};\n"]}
|
|
@@ -39,6 +39,7 @@ const StepRoomSummaryAndButton_1 = __importDefault(require("../../../components/
|
|
|
39
39
|
const TabGroupedRooms_1 = require("../../../components/steps/room/TabGroupedRooms/TabGroupedRooms");
|
|
40
40
|
const UserSearchSummary_1 = require("../../../components/steps/room/UserSearchSummary/UserSearchSummary");
|
|
41
41
|
const BEMobileSummary_1 = __importDefault(require("../../../components/summary/BEMobileSummary"));
|
|
42
|
+
const StepRoomFilters_1 = require("../StepRoom/StepRoomFilters");
|
|
42
43
|
const Translation_1 = require("../../../translations/Translation");
|
|
43
44
|
const ScreenSize_1 = __importDefault(require("../../../util/ScreenSize"));
|
|
44
45
|
const StepManager_1 = __importDefault(require("../../../util/StepManager"));
|
|
@@ -58,8 +59,9 @@ const StepGroupedRoomComponent = () => {
|
|
|
58
59
|
} },
|
|
59
60
|
react_1.default.createElement(BackButton_1.default, null)),
|
|
60
61
|
react_1.default.createElement("div", { className: "u-marg-top--light u-marg-bottom--heavy" },
|
|
61
|
-
react_1.default.createElement(Headline_1.default, { bold: true }, t(Translation_1.Translation.Step.Room.ChooseRoom))),
|
|
62
|
-
|
|
62
|
+
react_1.default.createElement(Headline_1.default, { bold: true }, t(Translation_1.Translation.Step.Room.ChooseRoom))))),
|
|
63
|
+
react_1.default.createElement(StepRoomFilters_1.StepRoomFilters, null),
|
|
64
|
+
react_1.default.createElement(LineBreak_1.default, { smallMargins: true }),
|
|
63
65
|
react_1.default.createElement(UserSearchSummary_1.UserSearchSummary, null),
|
|
64
66
|
react_1.default.createElement("div", { className: "u-marg-top" },
|
|
65
67
|
react_1.default.createElement(TabGroupedRooms_1.TabGroupedRooms, null))),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepGroupedRoomComponent.js","sourceRoot":"/","sources":["src/pages/steps/StepGroupedRoom/StepGroupedRoomComponent.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAiF;AACjF,+CAA0C;AAC1C,iDAA+C;AAC/C,uDAAqD;AAErD,iFAAyD;AACzD,6EAAqD;AACrD,uEAA4H;AAC5H,+EAAuD;AACvD,wGAAgF;AAChF,gHAAwF;AACxF,6FAA0F;AAC1F,mGAAgG;AAChG,2FAAmE;AACnE,4DAAyD;AACzD,mEAA2C;AAC3C,qEAA6C;AAE7C,MAAM,wBAAwB,GAAG,GAAG,EAAE;IAClC,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,+BAAoB,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAA,8BAAW,GAAE,CAAC;IAE/B,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,MAAM,EAAE,WAAW,EAAE,GAAG,IAAA,kBAAU,EAAC,gCAAqB,CAAC,CAAC;IAE1D,OAAO,CACH,uCAAK,SAAS,EAAC,WAAW;QACtB,8BAAC,yBAAe,OAAG;QACnB,8BAAC,gCAAmB;YAChB,8BAAC,kCAAqB;gBACjB,OAAO,CAAC,UAAU,GAAG,oBAAU,CAAC,MAAM,IAAI,CACvC;oBACI,8BAAC,uBAAI,IACD,EAAE,EAAE;4BACA,QAAQ,EAAE,qBAAW,CAAC,kBAAkB,CAAC,WAAW,CAAC;4BACrD,MAAM,EAAE,QAAQ,CAAC,MAAM;yBAC1B;wBAED,8BAAC,oBAAU,OAAG,CACX;oBACP,uCAAK,SAAS,EAAC,wCAAwC;wBACnD,8BAAC,kBAAQ,IAAC,IAAI,UAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAY,CAC7D;
|
|
1
|
+
{"version":3,"file":"StepGroupedRoomComponent.js","sourceRoot":"/","sources":["src/pages/steps/StepGroupedRoom/StepGroupedRoomComponent.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAiF;AACjF,+CAA0C;AAC1C,iDAA+C;AAC/C,uDAAqD;AAErD,iFAAyD;AACzD,6EAAqD;AACrD,uEAA4H;AAC5H,+EAAuD;AACvD,wGAAgF;AAChF,gHAAwF;AACxF,6FAA0F;AAC1F,mGAAgG;AAChG,2FAAmE;AACnE,4EAAyE;AACzE,4DAAyD;AACzD,mEAA2C;AAC3C,qEAA6C;AAE7C,MAAM,wBAAwB,GAAG,GAAG,EAAE;IAClC,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,+BAAoB,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAA,8BAAW,GAAE,CAAC;IAE/B,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,MAAM,EAAE,WAAW,EAAE,GAAG,IAAA,kBAAU,EAAC,gCAAqB,CAAC,CAAC;IAE1D,OAAO,CACH,uCAAK,SAAS,EAAC,WAAW;QACtB,8BAAC,yBAAe,OAAG;QACnB,8BAAC,gCAAmB;YAChB,8BAAC,kCAAqB;gBACjB,OAAO,CAAC,UAAU,GAAG,oBAAU,CAAC,MAAM,IAAI,CACvC;oBACI,8BAAC,uBAAI,IACD,EAAE,EAAE;4BACA,QAAQ,EAAE,qBAAW,CAAC,kBAAkB,CAAC,WAAW,CAAC;4BACrD,MAAM,EAAE,QAAQ,CAAC,MAAM;yBAC1B;wBAED,8BAAC,oBAAU,OAAG,CACX;oBACP,uCAAK,SAAS,EAAC,wCAAwC;wBACnD,8BAAC,kBAAQ,IAAC,IAAI,UAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAY,CAC7D,CACP,CACN;gBAED,8BAAC,iCAAe,OAAG;gBACnB,8BAAC,mBAAS,IAAC,YAAY,SAAG;gBAE1B,8BAAC,qCAAiB,OAAG;gBAErB,uCAAK,SAAS,EAAC,YAAY;oBACvB,8BAAC,iCAAe,OAAG,CACjB,CACc;YACvB,OAAO,CAAC,UAAU,GAAG,oBAAU,CAAC,MAAM,IAAI,CACvC,8BAAC,mCAAsB;gBACnB,uCAAK,SAAS,EAAC,YAAY;oBACvB,8BAAC,8BAAoB,OAAG,CACtB;gBACN,uCAAK,SAAS,EAAC,mBAAmB;oBAC9B,8BAAC,kCAAwB,OAAG,CAC1B,CACe,CAC5B,CACiB,CACpB,CACT,CAAC;AACN,CAAC,CAAC;AAEF,kBAAe,wBAAwB,CAAC","sourcesContent":["import { BookingEngineContext, FullPageEngineContext } from '@frontend/contexts';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link, useLocation } from 'react-router-dom';\n\nimport BackButton from '@/components/generic/BackButton';\nimport Headline from '@/components/generic/Headline';\nimport { StepLayoutContainer, StepLayoutLeftContent, StepLayoutRightContent } from '@/components/generic/Layout/StepLayout';\nimport LineBreak from '@/components/generic/LineBreak';\nimport StepRoomHotelDetails from '@/components/steps/room/StepRoomHotelDetails';\nimport StepRoomSummaryAndButton from '@/components/steps/room/StepRoomSummaryAndButton';\nimport { TabGroupedRooms } from '@/components/steps/room/TabGroupedRooms/TabGroupedRooms';\nimport { UserSearchSummary } from '@/components/steps/room/UserSearchSummary/UserSearchSummary';\nimport BEMobileSummary from '@/components/summary/BEMobileSummary';\nimport { StepRoomFilters } from '@/pages/steps/StepRoom/StepRoomFilters';\nimport { Translation } from '@/translations/Translation';\nimport ScreenSize from '@/util/ScreenSize';\nimport StepManager from '@/util/StepManager';\n\nconst StepGroupedRoomComponent = () => {\n const context = useContext(BookingEngineContext);\n const location = useLocation();\n\n const { t } = useTranslation();\n\n const { currentStep } = useContext(FullPageEngineContext);\n\n return (\n <div className=\"container\">\n <BEMobileSummary />\n <StepLayoutContainer>\n <StepLayoutLeftContent>\n {context.screenSize > ScreenSize.Medium && (\n <>\n <Link\n to={{\n pathname: StepManager.getPreviousStepUrl(currentStep),\n search: location.search,\n }}\n >\n <BackButton />\n </Link>\n <div className=\"u-marg-top--light u-marg-bottom--heavy\">\n <Headline bold>{t(Translation.Step.Room.ChooseRoom)}</Headline>\n </div>\n </>\n )}\n\n <StepRoomFilters />\n <LineBreak smallMargins />\n\n <UserSearchSummary />\n\n <div className=\"u-marg-top\">\n <TabGroupedRooms />\n </div>\n </StepLayoutLeftContent>\n {context.screenSize > ScreenSize.Medium && (\n <StepLayoutRightContent>\n <div className=\"u-marg-top\">\n <StepRoomHotelDetails />\n </div>\n <div className=\"u-marg-top--heavy\">\n <StepRoomSummaryAndButton />\n </div>\n </StepLayoutRightContent>\n )}\n </StepLayoutContainer>\n </div>\n );\n};\n\nexport default StepGroupedRoomComponent;\n"]}
|
|
@@ -33,35 +33,20 @@ const react_router_dom_1 = require("react-router-dom");
|
|
|
33
33
|
const Translation_1 = require("translations/Translation");
|
|
34
34
|
const BackButton_1 = __importDefault(require("../../../components/generic/BackButton"));
|
|
35
35
|
const Headline_1 = __importDefault(require("../../../components/generic/Headline"));
|
|
36
|
-
const Icon_1 = __importStar(require("../../../components/generic/Icon/Icon"));
|
|
37
36
|
const StepLayout_1 = require("../../../components/generic/Layout/StepLayout");
|
|
38
37
|
const LineBreak_1 = __importDefault(require("../../../components/generic/LineBreak"));
|
|
39
|
-
const Text_1 = __importStar(require("../../../components/generic/Text"));
|
|
40
|
-
const AppliedFiltersBlock_1 = __importDefault(require("../../../components/steps/room/roomFilter/AppliedFiltersBlock"));
|
|
41
|
-
const RoomFilterOverlay_1 = __importDefault(require("../../../components/steps/room/roomFilter/RoomFilterOverlay"));
|
|
42
38
|
const RoomList_1 = __importDefault(require("../../../components/steps/room/RoomList"));
|
|
43
39
|
const StepRoomHotelDetails_1 = __importDefault(require("../../../components/steps/room/StepRoomHotelDetails"));
|
|
44
|
-
const StepRoomSortBy_1 = __importDefault(require("../../../components/steps/room/StepRoomSortBy"));
|
|
45
40
|
const StepRoomSummaryAndButton_1 = __importDefault(require("../../../components/steps/room/StepRoomSummaryAndButton"));
|
|
46
41
|
const BEMobileSummary_1 = __importDefault(require("../../../components/summary/BEMobileSummary"));
|
|
47
|
-
const
|
|
48
|
-
const DataLayer_1 = __importStar(require("../../../util/DataLayer"));
|
|
42
|
+
const StepRoomFilters_1 = require("./StepRoomFilters");
|
|
49
43
|
const ScreenSize_1 = __importDefault(require("../../../util/ScreenSize"));
|
|
50
44
|
const StepManager_1 = __importDefault(require("../../../util/StepManager"));
|
|
51
45
|
const StepRoomComponent = () => {
|
|
52
46
|
const context = (0, react_1.useContext)(contexts_1.BookingEngineContext);
|
|
53
47
|
const location = (0, react_router_dom_1.useLocation)();
|
|
54
48
|
const { t } = (0, react_i18next_1.useTranslation)();
|
|
55
|
-
const filterButton = (0, react_1.useRef)(null);
|
|
56
|
-
const [filtersOpen, setFiltersOpen] = (0, react_1.useState)(false);
|
|
57
49
|
const { currentStep } = (0, react_1.useContext)(contexts_1.FullPageEngineContext);
|
|
58
|
-
const openFilter = () => {
|
|
59
|
-
DataLayer_1.default.instance.sendInteraction('Show Filters', DataLayer_1.InteractionType.DROPDOWN, DataLayer_1.InteractionStep.ROOMS);
|
|
60
|
-
setFiltersOpen(true);
|
|
61
|
-
};
|
|
62
|
-
const closeFilter = () => {
|
|
63
|
-
setFiltersOpen(false);
|
|
64
|
-
};
|
|
65
50
|
return (react_1.default.createElement("div", { className: "container" },
|
|
66
51
|
react_1.default.createElement(BEMobileSummary_1.default, null),
|
|
67
52
|
react_1.default.createElement(StepLayout_1.StepLayoutContainer, null,
|
|
@@ -74,20 +59,7 @@ const StepRoomComponent = () => {
|
|
|
74
59
|
react_1.default.createElement(BackButton_1.default, null)),
|
|
75
60
|
react_1.default.createElement("div", { className: "u-marg-top--light u-marg-bottom--heavy" },
|
|
76
61
|
react_1.default.createElement(Headline_1.default, { bold: true }, t(Translation_1.Translation.Step.Room.ChooseRoom))))),
|
|
77
|
-
react_1.default.createElement(
|
|
78
|
-
react_1.default.createElement("div", { className: "col-6 col-md-4 col-lg-3" },
|
|
79
|
-
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Label, color: Color_1.Color.DarkGrey },
|
|
80
|
-
react_1.default.createElement("strong", null, t(Translation_1.Translation.Step.Room.SortBy))),
|
|
81
|
-
react_1.default.createElement("div", null,
|
|
82
|
-
react_1.default.createElement(StepRoomSortBy_1.default, null))),
|
|
83
|
-
react_1.default.createElement("div", { className: "col-6 col-md-2 col-lg-2" },
|
|
84
|
-
react_1.default.createElement("div", { ref: filterButton },
|
|
85
|
-
react_1.default.createElement("div", { className: "filter-button d-flex align-items-center u-cursor-pointer", onClick: openFilter },
|
|
86
|
-
react_1.default.createElement(Text_1.default, null, context.screenSize > ScreenSize_1.default.Medium ? t(Translation_1.Translation.Step.Room.FilterBy) : t(Translation_1.Translation.Step.Room.Filter.ShowFilters)),
|
|
87
|
-
react_1.default.createElement(Icon_1.default, { icon: Icon_1.IconType.Dropdown, color: Color_1.Color.DarkGrey })),
|
|
88
|
-
react_1.default.createElement(RoomFilterOverlay_1.default, { open: filtersOpen, anchorEl: filterButton.current, onClose: closeFilter }))),
|
|
89
|
-
react_1.default.createElement("div", { className: "col-md-12 col-lg-7 u-align-right u-marg-top@l- u-empty-none filter-push-down" },
|
|
90
|
-
react_1.default.createElement(AppliedFiltersBlock_1.default, null)))),
|
|
62
|
+
react_1.default.createElement(StepRoomFilters_1.StepRoomFilters, null)),
|
|
91
63
|
context.screenSize > ScreenSize_1.default.Medium && (react_1.default.createElement(StepLayout_1.StepLayoutRightContent, null,
|
|
92
64
|
react_1.default.createElement(StepRoomHotelDetails_1.default, null)))),
|
|
93
65
|
context.screenSize > ScreenSize_1.default.Medium && react_1.default.createElement(LineBreak_1.default, null),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepRoomComponent.js","sourceRoot":"/","sources":["src/pages/steps/StepRoom/StepRoomComponent.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAiF;AACjF,+
|
|
1
|
+
{"version":3,"file":"StepRoomComponent.js","sourceRoot":"/","sources":["src/pages/steps/StepRoom/StepRoomComponent.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAiF;AACjF,+CAA0C;AAC1C,iDAA+C;AAC/C,uDAAqD;AACrD,0DAAuD;AAEvD,iFAAyD;AACzD,6EAAqD;AACrD,uEAA4H;AAC5H,+EAAuD;AACvD,gFAAwD;AACxD,wGAAgF;AAChF,gHAAwF;AACxF,2FAAmE;AACnE,4EAAyE;AACzE,mEAA2C;AAC3C,qEAA6C;AAE7C,MAAM,iBAAiB,GAAG,GAAG,EAAE;IAC3B,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,+BAAoB,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAA,8BAAW,GAAE,CAAC;IAE/B,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,MAAM,EAAE,WAAW,EAAE,GAAG,IAAA,kBAAU,EAAC,gCAAqB,CAAC,CAAC;IAE1D,OAAO,CACH,uCAAK,SAAS,EAAC,WAAW;QACtB,8BAAC,yBAAe,OAAG;QACnB,8BAAC,gCAAmB;YAChB,8BAAC,kCAAqB;gBACjB,OAAO,CAAC,UAAU,GAAG,oBAAU,CAAC,MAAM,IAAI,CACvC;oBACI,8BAAC,uBAAI,IACD,EAAE,EAAE;4BACA,QAAQ,EAAE,qBAAW,CAAC,kBAAkB,CAAC,WAAW,CAAC;4BACrD,MAAM,EAAE,QAAQ,CAAC,MAAM;yBAC1B;wBAED,8BAAC,oBAAU,OAAG,CACX;oBACP,uCAAK,SAAS,EAAC,wCAAwC;wBACnD,8BAAC,kBAAQ,IAAC,IAAI,UAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAY,CAC7D,CACP,CACN;gBACD,8BAAC,iCAAe,OAAG,CACC;YACvB,OAAO,CAAC,UAAU,GAAG,oBAAU,CAAC,MAAM,IAAI,CACvC,8BAAC,mCAAsB;gBACnB,8BAAC,8BAAoB,OAAG,CACH,CAC5B,CACiB;QACrB,OAAO,CAAC,UAAU,GAAG,oBAAU,CAAC,MAAM,IAAI,8BAAC,mBAAS,OAAG;QACxD,8BAAC,gCAAmB;YAChB,8BAAC,kCAAqB;gBAClB,8BAAC,kBAAQ,OAAG,CACQ;YACxB,8BAAC,mCAAsB;gBACnB,8BAAC,kCAAwB,OAAG,CACP,CACP,CACpB,CACT,CAAC;AACN,CAAC,CAAC;AAEF,kBAAe,iBAAiB,CAAC","sourcesContent":["import { BookingEngineContext, FullPageEngineContext } from '@frontend/contexts';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link, useLocation } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport BackButton from '@/components/generic/BackButton';\nimport Headline from '@/components/generic/Headline';\nimport { StepLayoutContainer, StepLayoutLeftContent, StepLayoutRightContent } from '@/components/generic/Layout/StepLayout';\nimport LineBreak from '@/components/generic/LineBreak';\nimport RoomList from '@/components/steps/room/RoomList';\nimport StepRoomHotelDetails from '@/components/steps/room/StepRoomHotelDetails';\nimport StepRoomSummaryAndButton from '@/components/steps/room/StepRoomSummaryAndButton';\nimport BEMobileSummary from '@/components/summary/BEMobileSummary';\nimport { StepRoomFilters } from '@/pages/steps/StepRoom/StepRoomFilters';\nimport ScreenSize from '@/util/ScreenSize';\nimport StepManager from '@/util/StepManager';\n\nconst StepRoomComponent = () => {\n const context = useContext(BookingEngineContext);\n const location = useLocation();\n\n const { t } = useTranslation();\n\n const { currentStep } = useContext(FullPageEngineContext);\n\n return (\n <div className=\"container\">\n <BEMobileSummary />\n <StepLayoutContainer>\n <StepLayoutLeftContent>\n {context.screenSize > ScreenSize.Medium && (\n <>\n <Link\n to={{\n pathname: StepManager.getPreviousStepUrl(currentStep),\n search: location.search,\n }}\n >\n <BackButton />\n </Link>\n <div className=\"u-marg-top--light u-marg-bottom--heavy\">\n <Headline bold>{t(Translation.Step.Room.ChooseRoom)}</Headline>\n </div>\n </>\n )}\n <StepRoomFilters />\n </StepLayoutLeftContent>\n {context.screenSize > ScreenSize.Medium && (\n <StepLayoutRightContent>\n <StepRoomHotelDetails />\n </StepLayoutRightContent>\n )}\n </StepLayoutContainer>\n {context.screenSize > ScreenSize.Medium && <LineBreak />}\n <StepLayoutContainer>\n <StepLayoutLeftContent>\n <RoomList />\n </StepLayoutLeftContent>\n <StepLayoutRightContent>\n <StepRoomSummaryAndButton />\n </StepLayoutRightContent>\n </StepLayoutContainer>\n </div>\n );\n};\n\nexport default StepRoomComponent;\n"]}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.StepRoomFilters = void 0;
|
|
30
|
+
const contexts_1 = require("../../../contexts/index.js");
|
|
31
|
+
const react_1 = __importStar(require("react"));
|
|
32
|
+
const react_i18next_1 = require("react-i18next");
|
|
33
|
+
const Translation_1 = require("translations/Translation");
|
|
34
|
+
const Icon_1 = __importStar(require("../../../components/generic/Icon/Icon"));
|
|
35
|
+
const Text_1 = __importStar(require("../../../components/generic/Text"));
|
|
36
|
+
const AppliedFiltersBlock_1 = __importDefault(require("../../../components/steps/room/roomFilter/AppliedFiltersBlock"));
|
|
37
|
+
const RoomFilterOverlay_1 = __importDefault(require("../../../components/steps/room/roomFilter/RoomFilterOverlay"));
|
|
38
|
+
const StepRoomSortBy_1 = __importDefault(require("../../../components/steps/room/StepRoomSortBy"));
|
|
39
|
+
const Color_1 = require("../../../util/Color");
|
|
40
|
+
const DataLayer_1 = __importStar(require("../../../util/DataLayer"));
|
|
41
|
+
const ScreenSize_1 = __importDefault(require("../../../util/ScreenSize"));
|
|
42
|
+
const StepRoomFilters = () => {
|
|
43
|
+
const context = (0, react_1.useContext)(contexts_1.BookingEngineContext);
|
|
44
|
+
const { t } = (0, react_i18next_1.useTranslation)();
|
|
45
|
+
const filterButton = (0, react_1.useRef)(null);
|
|
46
|
+
const [filtersOpen, setFiltersOpen] = (0, react_1.useState)(false);
|
|
47
|
+
const openFilter = () => {
|
|
48
|
+
DataLayer_1.default.instance.sendInteraction('Show Filters', DataLayer_1.InteractionType.DROPDOWN, DataLayer_1.InteractionStep.ROOMS);
|
|
49
|
+
setFiltersOpen(true);
|
|
50
|
+
};
|
|
51
|
+
const closeFilter = () => {
|
|
52
|
+
setFiltersOpen(false);
|
|
53
|
+
};
|
|
54
|
+
return (react_1.default.createElement("div", { className: "row align-items-end" },
|
|
55
|
+
react_1.default.createElement("div", { className: "col-6 col-md-4 col-lg-3" },
|
|
56
|
+
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Label, color: Color_1.Color.DarkGrey },
|
|
57
|
+
react_1.default.createElement("strong", null, t(Translation_1.Translation.Step.Room.SortBy))),
|
|
58
|
+
react_1.default.createElement("div", null,
|
|
59
|
+
react_1.default.createElement(StepRoomSortBy_1.default, null))),
|
|
60
|
+
react_1.default.createElement("div", { className: "col-6 col-md-2 col-lg-2" },
|
|
61
|
+
react_1.default.createElement("div", { ref: filterButton },
|
|
62
|
+
react_1.default.createElement("div", { className: "filter-button d-flex align-items-center u-cursor-pointer", onClick: openFilter },
|
|
63
|
+
react_1.default.createElement(Text_1.default, null, context.screenSize > ScreenSize_1.default.Medium ? t(Translation_1.Translation.Step.Room.FilterBy) : t(Translation_1.Translation.Step.Room.Filter.ShowFilters)),
|
|
64
|
+
react_1.default.createElement(Icon_1.default, { icon: Icon_1.IconType.Dropdown, color: Color_1.Color.DarkGrey })),
|
|
65
|
+
react_1.default.createElement(RoomFilterOverlay_1.default, { open: filtersOpen, anchorEl: filterButton.current, onClose: closeFilter }))),
|
|
66
|
+
react_1.default.createElement("div", { className: "col-md-12 col-lg-7 u-align-right u-marg-top@l- u-empty-none filter-push-down" },
|
|
67
|
+
react_1.default.createElement(AppliedFiltersBlock_1.default, null))));
|
|
68
|
+
};
|
|
69
|
+
exports.StepRoomFilters = StepRoomFilters;
|
|
70
|
+
//# sourceMappingURL=StepRoomFilters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StepRoomFilters.js","sourceRoot":"/","sources":["src/pages/steps/StepRoom/StepRoomFilters.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA0D;AAC1D,+CAA4D;AAC5D,iDAA+C;AAC/C,0DAAuD;AAEvD,uEAAgE;AAChE,kEAA2D;AAC3D,iHAAyF;AACzF,6GAAqF;AACrF,4FAAoE;AACpE,wCAAqC;AACrC,8DAA+E;AAC/E,mEAA2C;AAEpC,MAAM,eAAe,GAAa,GAAG,EAAE;IAC1C,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,+BAAoB,CAAC,CAAC;IACjD,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,MAAM,YAAY,GAAG,IAAA,cAAM,EAAwB,IAAI,CAAC,CAAC;IACzD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAU,KAAK,CAAC,CAAC;IAE/D,MAAM,UAAU,GAAG,GAAG,EAAE;QACpB,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE,2BAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QACpG,cAAc,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,GAAG,EAAE;QACrB,cAAc,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC,CAAC;IAEF,OAAO,CACH,uCAAK,SAAS,EAAC,qBAAqB;QAChC,uCAAK,SAAS,EAAC,yBAAyB;YACpC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,QAAQ;gBAC7C,8CAAS,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAU,CAC/C;YACP;gBACI,8BAAC,wBAAc,OAAG,CAChB,CACJ;QACN,uCAAK,SAAS,EAAC,yBAAyB;YACpC,uCAAK,GAAG,EAAE,YAAY;gBAClB,uCAAK,SAAS,EAAC,0DAA0D,EAAC,OAAO,EAAE,UAAU;oBACzF,8BAAC,cAAI,QAAE,OAAO,CAAC,UAAU,GAAG,oBAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAQ;oBACvI,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,aAAK,CAAC,QAAQ,GAAI,CACtD;gBACN,8BAAC,2BAAiB,IAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,GAAI,CAC5F,CACJ;QACN,uCAAK,SAAS,EAAC,8EAA8E;YACzF,8BAAC,6BAAmB,OAAG,CACrB,CACJ,CACT,CAAC;AACN,CAAC,CAAC;AAxCW,QAAA,eAAe,mBAwC1B","sourcesContent":["import { BookingEngineContext } from '@frontend/contexts';\nimport React, { useContext, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport Text, { TextType } from '@/components/generic/Text';\nimport AppliedFiltersBlock from '@/components/steps/room/roomFilter/AppliedFiltersBlock';\nimport RoomFilterOverlay from '@/components/steps/room/roomFilter/RoomFilterOverlay';\nimport StepRoomSortBy from '@/components/steps/room/StepRoomSortBy';\nimport { Color } from '@/util/Color';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\nimport ScreenSize from '@/util/ScreenSize';\n\nexport const StepRoomFilters: React.FC = () => {\n const context = useContext(BookingEngineContext);\n const { t } = useTranslation();\n\n const filterButton = useRef<HTMLDivElement | null>(null);\n const [filtersOpen, setFiltersOpen] = useState<boolean>(false);\n\n const openFilter = () => {\n DataLayer.instance.sendInteraction('Show Filters', InteractionType.DROPDOWN, InteractionStep.ROOMS);\n setFiltersOpen(true);\n };\n\n const closeFilter = () => {\n setFiltersOpen(false);\n };\n\n return (\n <div className=\"row align-items-end\">\n <div className=\"col-6 col-md-4 col-lg-3\">\n <Text type={TextType.Label} color={Color.DarkGrey}>\n <strong>{t(Translation.Step.Room.SortBy)}</strong>\n </Text>\n <div>\n <StepRoomSortBy />\n </div>\n </div>\n <div className=\"col-6 col-md-2 col-lg-2\">\n <div ref={filterButton}>\n <div className=\"filter-button d-flex align-items-center u-cursor-pointer\" onClick={openFilter}>\n <Text>{context.screenSize > ScreenSize.Medium ? t(Translation.Step.Room.FilterBy) : t(Translation.Step.Room.Filter.ShowFilters)}</Text>\n <Icon icon={IconType.Dropdown} color={Color.DarkGrey} />\n </div>\n <RoomFilterOverlay open={filtersOpen} anchorEl={filterButton.current} onClose={closeFilter} />\n </div>\n </div>\n <div className=\"col-md-12 col-lg-7 u-align-right u-marg-top@l- u-empty-none filter-push-down\">\n <AppliedFiltersBlock />\n </div>\n </div>\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalStorageProvider.js","sourceRoot":"/","sources":["src/providers/storage/LocalStorageProvider.ts"],"names":[],"mappings":";;;;;;;;;;;AAIA,uDAAoD;AAIpD,MAAqB,oBAAoB;IAAzC;QAEY,YAAO,GAAG,IAAI,iCAAe,EAAE,CAAC;IAyB5C,CAAC;IAvBU,UAAU,CAAC,OAAe;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAEO,SAAS,CAAC,GAAQ;QACtB,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC;IACpC,CAAC;IAEO,IAAI,CAAI,GAAQ;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC;IAEO,KAAK,CAAC,GAAQ,EAAE,KAAoC;QACxD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;IAEY,OAAO;;YAChB,OAAO,IAAI,CAAC,IAAI,CAAa,MAAM,CAAC,CAAC;QACzC,CAAC;KAAA;IAEY,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"LocalStorageProvider.js","sourceRoot":"/","sources":["src/providers/storage/LocalStorageProvider.ts"],"names":[],"mappings":";;;;;;;;;;;AAIA,uDAAoD;AAIpD,MAAqB,oBAAoB;IAAzC;QAEY,YAAO,GAAG,IAAI,iCAAe,EAAE,CAAC;IAyB5C,CAAC;IAvBU,UAAU,CAAC,OAAe;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAEO,SAAS,CAAC,GAAQ;QACtB,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC;IACpC,CAAC;IAEO,IAAI,CAAI,GAAQ;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC;IAEO,KAAK,CAAC,GAAQ,EAAE,KAAoC;QACxD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;IAEY,OAAO;;YAChB,OAAO,IAAI,CAAC,IAAI,CAAa,MAAM,CAAC,CAAC;QACzC,CAAC;KAAA;IAEY,OAAO,CAAC,KAAkB;;YACnC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;KAAA;CACJ;AA3BD,uCA2BC","sourcesContent":["import { SignInUser } from '@frontend/contexts';\n\nimport { LocalStorageModel } from '@/models/LocalStorageModel';\n\nimport { StorageProvider } from './StorageProvider';\n\ntype Key = keyof LocalStorageModel & string;\n\nexport default class LocalStorageProvider {\n private hotelId!: string;\n private storage = new StorageProvider();\n\n public setHotelId(hotelId: string) {\n this.hotelId = hotelId;\n }\n\n private prefixKey(key: Key) {\n return `${this.hotelId}-${key}`;\n }\n\n private read<T>(key: Key) {\n return this.storage.read<T>(this.prefixKey(key));\n }\n\n private write(key: Key, value: LocalStorageModel[typeof key]) {\n return this.storage.write(this.prefixKey(key), value);\n }\n\n public async getUser() {\n return this.read<SignInUser>('user');\n }\n\n public async setUser(value?: SignInUser) {\n return this.write('user', value);\n }\n}\n"]}
|