@roomstay/frontend 2.6.108 → 2.6.110
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/836.bundle.js +1 -1
- package/dist/978.bundle.js +1 -1
- package/dist/main.bundle.js +1 -1
- package/dist/src/components/steps/addons/AddonCard.js +3 -0
- package/dist/src/components/steps/addons/AddonCard.js.map +1 -1
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +1 -1
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +7 -2
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
- package/dist/src/events/actions/AddAddonToCartEvent.d.ts +7 -0
- package/dist/src/events/actions/AddAddonToCartEvent.js +15 -0
- package/dist/src/events/actions/AddAddonToCartEvent.js.map +1 -0
- package/dist/src/events/index.d.ts +1 -0
- package/dist/src/events/index.js +1 -0
- package/dist/src/events/index.js.map +1 -1
- package/dist/src/events/views/CommittedBookingEvent.d.ts +3 -1
- package/dist/src/events/views/CommittedBookingEvent.js +2 -1
- package/dist/src/events/views/CommittedBookingEvent.js.map +1 -1
- package/dist/src/events/views/StepCheckoutViewEvent.d.ts +3 -1
- package/dist/src/events/views/StepCheckoutViewEvent.js +2 -1
- package/dist/src/events/views/StepCheckoutViewEvent.js.map +1 -1
- package/dist/src/models/Confirmation.d.ts +1 -0
- package/dist/src/models/Confirmation.js.map +1 -1
- package/dist/src/models/Room/Room.d.ts +1 -0
- package/dist/src/models/Room/Room.js +3 -0
- package/dist/src/models/Room/Room.js.map +1 -1
- package/dist/src/models/Room/RoomRate.d.ts +1 -0
- package/dist/src/models/Room/RoomRate.js +3 -0
- package/dist/src/models/Room/RoomRate.js.map +1 -1
- package/dist/src/models/Room/RoomRateSortable.d.ts +1 -0
- package/dist/src/models/Room/RoomRateSortable.js.map +1 -1
- package/dist/src/models/RoomstaySession.d.ts +1 -0
- package/dist/src/models/RoomstaySession.js.map +1 -1
- package/dist/src/pages/steps/StepConfirmation/StepConfirmationComponent.js +2 -2
- package/dist/src/pages/steps/StepConfirmation/StepConfirmationComponent.js.map +1 -1
- package/dist/src/providers/RoomSortProvider.js +15 -3
- package/dist/src/providers/RoomSortProvider.js.map +1 -1
- package/dist/src/providers/feature/AnalyticsEventsFeature.js +1 -0
- package/dist/src/providers/feature/AnalyticsEventsFeature.js.map +1 -1
- package/dist/src/util/AnalyticsEvents/AnalyticsEvents.d.ts +9 -3
- package/dist/src/util/AnalyticsEvents/AnalyticsEvents.js +51 -12
- package/dist/src/util/AnalyticsEvents/AnalyticsEvents.js.map +1 -1
- package/dist/src/util/AnalyticsEvents/helpers.d.ts +12 -3
- package/dist/src/util/AnalyticsEvents/helpers.js +27 -3
- package/dist/src/util/AnalyticsEvents/helpers.js.map +1 -1
- package/dist/test.bundle.js +1 -1
- package/dist/vendors.bundle.js +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomRate.js","sourceRoot":"/","sources":["src/models/Room/RoomRate.ts"],"names":[],"mappings":"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","sourcesContent":["import { EGuaranteePolicyDepositMode } from '@roomstay/core';\nimport dayjs, { Dayjs } from 'dayjs';\n\nimport AvailabilityAPI from '@/api/AvailabilityAPI';\nimport { accumulateFees, feeMapToArray, HotelFee, ItemisedFee, mapSimpleFeesToItemisedFees } from '@/models/Fee';\nimport type { Room } from '@/models/Room/Room';\nimport RoomRateNight, { IRoomRateNight } from '@/models/Room/RoomRateNight';\nimport type RoomRateSortable from '@/models/Room/RoomRateSortable';\nimport type { Serializable } from '@/models/Serializable';\nimport StaticContextProvider from '@/providers/StaticContextProvider';\n\nexport enum RoomRatePriceInclusion {\n ExcludingFees = 'Fees Excluded',\n ExcludingTaxes = 'Taxes Excluded',\n ExcludingFeesAndTaxes = 'Excluding Fees and Taxes',\n IncludingFeesAndTaxes = 'Including Fees and Taxes',\n}\n\nexport interface IRoomRate {\n name: string;\n code: string;\n description: string;\n longDescription?: string;\n\n isMemberOnly?: boolean;\n guaranteeCode: string;\n cancelPolicyCode: string;\n nightRates: { [date: string]: IRoomRateNight };\n\n lowestPrice: number;\n promoCode: string;\n promoCodeName: string;\n\n mealsIncluded?: {\n breakfast: boolean;\n lunch: boolean;\n dinner: boolean;\n };\n rateOverrides?: RateOverride[];\n minNightStayOverride?: number;\n isUpsellRate?: boolean;\n nightsToDiscount?: number;\n artificialDiscountPercent: number | null;\n artificialDiscountAmount: number | null;\n}\n\nexport type RateLabelsByDay = {\n Monday: boolean;\n Tuesday: boolean;\n Wednesday: boolean;\n Thursday: boolean;\n Friday: boolean;\n Saturday: boolean;\n Sunday: boolean;\n};\n\nexport type RateOverride = {\n name: string;\n shortDescription: string;\n longDescription: string;\n enabledPerDay: RateLabelsByDay;\n startDate: string;\n endDate: string;\n queryStartDate: string;\n queryEndDate: string;\n};\n\nexport type RateOverrideKeys = 'name' | 'shortDescription' | 'longDescription';\n\ninterface RequestedDate {\n startDate: Dayjs;\n endDate: Dayjs;\n}\n\ninterface DisplayRate {\n name: string;\n shortDescription: string;\n longDescription: string;\n startDate?: Dayjs;\n endDate?: Dayjs;\n override: RateOverride;\n}\n\nexport class RoomRate implements RoomRateSortable, Serializable<RoomRate, IRoomRate> {\n public name!: string;\n public code!: string;\n\n public description!: string;\n public longDescription!: string;\n\n public isMemberOnly!: boolean;\n\n public guaranteeCode!: string;\n\n public cancelPolicyCode!: string;\n\n public nightRates: { [date: string]: RoomRateNight };\n public lowestPrice!: number;\n public promoCode?: string;\n public promoCodeName?: string;\n public mealsIncluded?: {\n breakfast: boolean;\n lunch: boolean;\n dinner: boolean;\n } = {\n breakfast: false,\n lunch: false,\n dinner: false,\n };\n private nightRatesArray: RoomRateNight[];\n private room!: Room;\n public rateOverrides?: RateOverride[];\n public minNightStayOverride?: number;\n public isUpsellRate?: boolean;\n public nightsToDiscount?: number;\n public artificialDiscountPercent!: number | null;\n public artificialDiscountAmount!: number | null;\n\n public constructor() {\n this.nightRates = {};\n this.nightRatesArray = [];\n }\n\n public static fromData(data: Partial<{ code: string }> | any) {\n const rate = new this();\n\n rate.applyData(data);\n\n if (StaticContextProvider.MemberOnlyRateCodes?.includes(data.code)) {\n rate.isMemberOnly = true;\n }\n\n return rate;\n }\n\n public applyData(data: any) {\n Object.keys(data).map((key: any) => {\n (this as any)[key] = (data as any)[key];\n }, this);\n }\n\n public setRoom(room: Room) {\n this.room = room;\n }\n\n public getRoom(): Room {\n return this.room;\n }\n\n /**\n * Do not use this method if RMS deposit quotes are enabled.\n */\n public getDepositAccordingToGuaranteePolicy(bookingRateFees: number) {\n const depositPercentage = this.getGuaranteePolicy().depositPercentage;\n const nightsAsArray = this.getNightRateArray();\n const totalPriceIncludingAllFees = this.getTotalPrice() + bookingRateFees;\n\n switch (this.getGuaranteePolicy().depositMode) {\n case EGuaranteePolicyDepositMode.None:\n return 0;\n case EGuaranteePolicyDepositMode.Full:\n return totalPriceIncludingAllFees;\n case EGuaranteePolicyDepositMode.Percentage:\n if (depositPercentage) {\n return totalPriceIncludingAllFees * (depositPercentage / 100);\n }\n return totalPriceIncludingAllFees;\n case EGuaranteePolicyDepositMode.FirstNight:\n return Number(nightsAsArray[0].total) + bookingRateFees / nightsAsArray.length;\n case null:\n throw Error('Cannot calculate deposit without a deposit mode');\n }\n }\n\n public getTotalPrice = (getCost = false) => {\n let total = 0;\n const nightsAsArray = Object.values(this.nightRates);\n nightsAsArray.forEach((night: RoomRateNight) => {\n total += Number(getCost ? night.cost : night.total);\n });\n return total;\n };\n\n public getTotalPriceBeforeDiscount = (getCost = false) => {\n let total = 0;\n const nightsAsArray = Object.values(this.nightRates);\n nightsAsArray.forEach((night: RoomRateNight) => {\n total += Number(getCost ? night.cost : night.total) + Number(night.discount);\n });\n return total;\n };\n\n public getTotalDiscount = (): number => {\n return this.nightRateTotal((night: RoomRateNight) => {\n return Number(night.discount);\n });\n };\n\n public isStayXPayYRate = (): boolean => {\n return !!(this.nightsToDiscount && this.nightsToDiscount > 0);\n };\n\n public getAveragePrice = (getCost = false): number => {\n const total = this.getTotalPrice(getCost);\n\n return total / Object.keys(this.nightRates).length;\n };\n\n /**\n * Average nightly price before ANY discount (real + artificial combined correctly)\n */\n public getAveragePriceBeforeDiscount = (getCost = false) => {\n const nights = Object.values(this.nightRates);\n if (!nights.length) return 0;\n\n // Step 1: calculate true original (before real discounts)\n let originalTotal = 0;\n nights.forEach((night: RoomRateNight) => {\n const base = Number(getCost ? night.cost : night.total);\n const realDiscount = Number(night.discount ?? 0);\n originalTotal += base + realDiscount;\n });\n\n let averageOriginal = originalTotal / nights.length;\n // Step 2: inflate using artificial discount\n if (this.artificialDiscountPercent != null) {\n averageOriginal = (100 * averageOriginal) / (100 - this.artificialDiscountPercent);\n }\n if (this.artificialDiscountAmount != null) {\n averageOriginal += this.artificialDiscountAmount;\n }\n\n return averageOriginal;\n };\n\n public getTotalFees = () => {\n return this.nightRateTotal((night: RoomRateNight) => {\n return Number(night.fee);\n });\n };\n\n public getItemisedFees = (hotelFees: HotelFee[]): ItemisedFee[] => {\n const feeMap = new Map<HotelFee, number>();\n\n this.getNightRateArray().forEach((night) => {\n if (night.fees) {\n const fees = mapSimpleFeesToItemisedFees(night.fees, hotelFees);\n accumulateFees(feeMap, fees);\n }\n });\n\n return feeMapToArray(feeMap);\n };\n\n public getTotalTaxes = () => {\n return this.nightRateTotal((night: RoomRateNight) => {\n return Number(night.tax);\n });\n };\n\n public getPriceType = () => {\n let hasFees = false;\n let hasTax = false;\n\n Object.values(this.nightRates).forEach((night) => {\n if (night.fee && night.fee !== '0') {\n hasFees = true;\n }\n\n if (night.tax && night.tax !== '0') {\n hasTax = true;\n }\n });\n\n if (hasFees && hasTax) {\n return RoomRatePriceInclusion.ExcludingFeesAndTaxes;\n } else if (hasFees) {\n return RoomRatePriceInclusion.ExcludingTaxes;\n } else if (hasTax) {\n return RoomRatePriceInclusion.ExcludingFees;\n } else {\n return RoomRatePriceInclusion.IncludingFeesAndTaxes;\n }\n };\n\n public getGuaranteePolicy = () => {\n return AvailabilityAPI.policyMappings.guarantee[this.guaranteeCode] ?? '';\n };\n\n public getCancellationPolicy = () => {\n return AvailabilityAPI.policyMappings.cancel[this.cancelPolicyCode] ?? '';\n };\n\n public getPriceSortValue = () => {\n return this.getAveragePrice();\n };\n\n /**\n * Not implemented\n */\n public getRecommendedSortValue() {\n return 0;\n }\n\n public serialize() {\n const serializedNightRates: any = {};\n Object.keys(this.nightRates).forEach((date) => {\n serializedNightRates[date] = this.nightRates[date].serialize();\n });\n\n const toSerialize: IRoomRate = {\n name: this.name,\n code: this.code,\n description: this.description,\n longDescription: this.longDescription,\n isMemberOnly: this.isMemberOnly,\n guaranteeCode: this.guaranteeCode,\n cancelPolicyCode: this.cancelPolicyCode,\n nightRates: serializedNightRates,\n lowestPrice: this.lowestPrice,\n promoCode: this.promoCode,\n promoCodeName: this.promoCodeName,\n mealsIncluded: this.mealsIncluded,\n rateOverrides: this.rateOverrides,\n minNightStayOverride: this.minNightStayOverride,\n isUpsellRate: this.isUpsellRate,\n nightsToDiscount: this.nightsToDiscount,\n artificialDiscountAmount: this.artificialDiscountAmount,\n artificialDiscountPercent: this.artificialDiscountPercent,\n } as IRoomRate;\n\n return toSerialize;\n }\n\n public unSerialize(data: IRoomRate) {\n const { name, code, description, longDescription, isMemberOnly, guaranteeCode, cancelPolicyCode, lowestPrice, promoCode, promoCodeName, mealsIncluded, nightsToDiscount } =\n data;\n\n const unSerializedNightRates: any = {};\n\n if (data.nightRates) {\n Object.keys(data.nightRates)?.forEach((date) => {\n const nightRate = new RoomRateNight();\n unSerializedNightRates[date] = nightRate.unSerialize(data.nightRates[date]);\n });\n }\n\n this.name = name;\n this.code = code;\n this.description = description;\n this.longDescription = longDescription as string;\n this.isMemberOnly = isMemberOnly as boolean;\n this.guaranteeCode = guaranteeCode;\n this.cancelPolicyCode = cancelPolicyCode;\n this.lowestPrice = lowestPrice;\n this.promoCode = promoCode;\n this.promoCodeName = promoCodeName;\n this.mealsIncluded = mealsIncluded;\n this.nightRates = unSerializedNightRates;\n this.nightRatesArray = [];\n this.rateOverrides = data.rateOverrides;\n this.minNightStayOverride = data.minNightStayOverride;\n this.isUpsellRate = data.isUpsellRate;\n this.nightsToDiscount = nightsToDiscount;\n this.artificialDiscountAmount = data.artificialDiscountAmount;\n this.artificialDiscountPercent = data.artificialDiscountPercent;\n\n return this;\n }\n\n private getNightRateArray = () => {\n if (!this.nightRatesArray.length) {\n this.nightRatesArray = Object.values(this.nightRates);\n }\n\n return this.nightRatesArray;\n };\n\n private reduceNightData = (reducer: (sum: number, rate: RoomRateNight) => number) => {\n return this.getNightRateArray().reduce<number>(reducer, 0) ?? 0;\n };\n\n private nightRateTotal = (value: (rate: RoomRateNight) => number) => {\n return this.reduceNightData((sum: number, redNight: RoomRateNight) => {\n const summingValue = value(redNight);\n\n return sum ? sum + summingValue : summingValue;\n });\n };\n\n public datesOverlap = (startDate1: Dayjs, endDate1: Dayjs, startDate2: Dayjs, endDate2: Dayjs): boolean => {\n const overlap1 = startDate1.isSameOrBefore(endDate2) && startDate2.isSameOrBefore(endDate1);\n const overlap2 = startDate1.isSameOrAfter(endDate2) && startDate2.isSameOrAfter(endDate1);\n return overlap1 || overlap2;\n };\n\n public getDefaultLabelsByDate = (requestedDate: RequestedDate) => {\n const days: { label: string; alternateLabel: string }[] = [];\n let currentDate = requestedDate.startDate.clone();\n while (currentDate.isSameOrBefore(requestedDate.endDate)) {\n days.push({\n label: currentDate.format('dddd, MMM DD, YYYY'),\n alternateLabel: '', // No rate label available\n });\n currentDate = currentDate.add(1, 'day');\n }\n return days;\n };\n\n public getPossiblyOverwrittenDetails = (requestedDate: RequestedDate) => {\n const rateOverrides: RateOverride[] = this.getAvailableRateOverrides();\n if (!rateOverrides.length) return { name: this.name, shortDescription: this.description, longDescription: this.longDescription };\n\n const originalRequestedStartDate = requestedDate.startDate;\n\n let shortDescription = this.description;\n let longDescription = this.longDescription;\n let name = this.name;\n\n // Loop through all overrides and check for any matching the booking dates\n rateOverrides.forEach((override) => {\n if (!originalRequestedStartDate) return;\n\n const queryStartDate = dayjs(override.queryStartDate);\n const queryEndDate = dayjs(override.queryEndDate);\n\n const overlap =\n (!override.queryStartDate || queryStartDate.isSameOrBefore(originalRequestedStartDate, 'date')) &&\n (!override.queryEndDate || queryEndDate.isSameOrAfter(originalRequestedStartDate, 'date'));\n\n const stayDay = originalRequestedStartDate.format('dddd');\n\n if (overlap && override.enabledPerDay[stayDay as keyof RateLabelsByDay] === true) {\n name = override.name;\n shortDescription = override.shortDescription;\n longDescription = override.longDescription;\n }\n });\n\n return { name, shortDescription, longDescription };\n };\n\n public getAvailableRateOverrides = (): RateOverride[] => {\n if (!this.rateOverrides?.length) return [];\n\n const now = dayjs();\n //startDate/endDate/queryStartDate/queryEndDate must not empty\n const rateOverrides: RateOverride[] = this.rateOverrides.filter((override) => {\n // Check if the override can apply to this query in current time.\n // We don't require any of the filter fields, so if they are set we should check that they apply.\n if (override.startDate) {\n if (!dayjs(override.startDate).isSameOrBefore(now)) {\n return false;\n }\n\n if (override.endDate && !dayjs(override.endDate).isSameOrAfter(now)) {\n return false;\n }\n }\n\n return true;\n });\n return rateOverrides;\n };\n\n public hasRateVariesByDay = (requestedDate: RequestedDate): boolean => {\n // Validate startDate/endDate\n if (!requestedDate?.startDate || !requestedDate.endDate) return false;\n\n const rateOverrides: RateOverride[] = this.getAvailableRateOverrides();\n if (!rateOverrides.length) false;\n\n const originalRequestedStartDate = dayjs(requestedDate.startDate);\n const originalRequestedEndDate = dayjs(requestedDate.endDate);\n\n // Loop through all overrides and check for any matching the booking dates\n return rateOverrides.some((override) => {\n const overrideStartDate = dayjs(override.startDate);\n const overrideEndDate = dayjs(override.endDate);\n const queryStartDate = dayjs(override.queryStartDate);\n const queryEndDate = dayjs(override.queryEndDate);\n\n if (override.startDate && overrideStartDate.isAfter(originalRequestedEndDate)) {\n return false;\n }\n\n if (override.endDate && overrideEndDate.isBefore(originalRequestedStartDate)) {\n return false;\n }\n\n if (override.queryStartDate && queryStartDate.isAfter(originalRequestedEndDate)) {\n return false;\n }\n if (override.queryEndDate && queryEndDate.isBefore(originalRequestedStartDate)) {\n return false;\n }\n\n return true;\n });\n };\n\n public getDisplayRates = (requestedDate: RequestedDate): DisplayRate[] => {\n const rateOverrides: RateOverride[] = this.getAvailableRateOverrides();\n if (!rateOverrides.length) return [];\n\n const originalRequestedStartDate = dayjs(requestedDate.startDate);\n const originalRequestedEndDate = dayjs(requestedDate.endDate);\n\n const displayRates: DisplayRate[] = [\n {\n name: this.name,\n shortDescription: this.description,\n longDescription: this.longDescription,\n override: {\n name: this.name,\n shortDescription: this.description,\n longDescription: this.longDescription,\n enabledPerDay: {\n Monday: true,\n Tuesday: true,\n Wednesday: true,\n Thursday: true,\n Friday: true,\n Saturday: true,\n Sunday: true,\n },\n startDate: '',\n endDate: '',\n queryStartDate: '',\n queryEndDate: '',\n },\n },\n ];\n // Loop through all overrides and check for any matching the booking dates\n rateOverrides.forEach((override) => {\n const overrideStartDate = dayjs(override.startDate);\n const overrideEndDate = dayjs(override.endDate);\n const queryStartDate = dayjs(override.queryStartDate);\n const queryEndDate = dayjs(override.queryEndDate);\n //requestedStartDate & requestedEndDate must be in date range of override's startDate/endDate\n const requestedStartDate = originalRequestedStartDate.isBefore(overrideStartDate) ? overrideStartDate : originalRequestedStartDate;\n const requestedEndDate = originalRequestedEndDate.isAfter(overrideEndDate) ? overrideEndDate : originalRequestedEndDate;\n const overlap = this.datesOverlap(requestedStartDate, requestedEndDate, queryStartDate, queryEndDate);\n if (overlap) {\n if (requestedStartDate.isBefore(queryStartDate, 'date')) {\n if (queryEndDate.isBefore(requestedEndDate, 'date')) {\n displayRates.push({\n override: override,\n name: override.name,\n shortDescription: override.shortDescription,\n longDescription: override.longDescription,\n startDate: queryStartDate,\n endDate: queryEndDate,\n });\n } else {\n displayRates.push({\n override: override,\n name: override.name,\n shortDescription: override.shortDescription,\n longDescription: override.longDescription,\n startDate: queryStartDate,\n endDate: requestedEndDate,\n });\n }\n } else {\n if (queryEndDate.isBefore(requestedEndDate, 'date')) {\n displayRates.push({\n override: override,\n name: override.name,\n shortDescription: override.shortDescription,\n longDescription: override.longDescription,\n startDate: requestedStartDate,\n endDate: queryEndDate,\n });\n } else {\n displayRates.push({\n override: override,\n name: override.name,\n shortDescription: override.shortDescription,\n longDescription: override.longDescription,\n startDate: requestedStartDate,\n endDate: requestedEndDate,\n });\n }\n }\n }\n });\n\n return displayRates;\n };\n\n public displayRateToDayLabel = (displayRate: DisplayRate): string => {\n if (!displayRate.startDate || !displayRate.endDate) return '';\n\n const dayDayLabels: Record<string, string> = {};\n const startDayLabel = displayRate.startDate.format('MMM DD, YYYY');\n const endDayLabel = displayRate.endDate.format('MMM DD, YYYY');\n dayDayLabels[startDayLabel] = startDayLabel;\n dayDayLabels[endDayLabel] = endDayLabel;\n return `${Object.values(dayDayLabels).join(' - ')}`;\n };\n\n public displayRateToDayName = (displayRate: DisplayRate): string => {\n if (!displayRate.startDate || !displayRate.endDate) return '';\n\n const dayNames: Record<string, string> = {};\n const startDayName = displayRate.startDate.format('dddd');\n const endDayName = displayRate.endDate.format('dddd');\n dayNames[startDayName] = startDayName;\n dayNames[endDayName] = endDayName;\n return `${Object.values(dayNames).join(' - ')}`;\n };\n\n public getLabelsByDate = (requestedDate: RequestedDate): { label: string; alternateLabel: string; shortDescription?: string; longDescription?: string }[] => {\n const overrides: RateOverride[] = this.getAvailableRateOverrides();\n if (!overrides.length) {\n // If overrides are null or empty, return an empty rateLabelByDay for the whole date range\n return this.getDefaultLabelsByDate(requestedDate);\n }\n\n const labelsByDate: Record<string, { label: string; alternateLabel: string; shortDescription?: string; longDescription?: string; date: string }> = {};\n let dayOneOverride: RateOverride | null = null;\n\n overrides.forEach((override) => {\n const overrideStartDate = dayjs(override.startDate);\n const overrideEndDate = dayjs(override.endDate);\n const overrideQueryStartDate = dayjs(override.queryStartDate);\n const overrideQueryEndDate = dayjs(override.queryEndDate);\n\n const isApplicableForStayDate = () => {\n if (overrideStartDate && overrideStartDate.isAfter(stayDate)) {\n return false;\n }\n\n if (overrideEndDate && overrideEndDate.isBefore(stayDate)) {\n return false;\n }\n\n if (overrideQueryStartDate && overrideQueryStartDate.isAfter(stayDate)) {\n return false;\n }\n\n if (overrideQueryEndDate && overrideQueryEndDate.isBefore(stayDate)) {\n return false;\n }\n\n return true;\n };\n\n let stayDate = requestedDate.startDate.clone();\n while (stayDate.isSameOrBefore(requestedDate.endDate, 'date')) {\n const dayIndex = stayDate.format('YYYY-MM-DD');\n const dayLabel = stayDate.format('dddd, MMM DD, YYYY');\n const stayDay = stayDate.format('dddd');\n //stayDate must be in date range of override's startDate/endDate and queryStartDate/queryEndDate\n if (isApplicableForStayDate()) {\n if (override.enabledPerDay[stayDay as keyof RateLabelsByDay] === true) {\n // Keep setting the dayOneOverride until the first day of the stay is reached, this will tell us\n // what is the initial rate label for the stay\n if (stayDate.isSame(requestedDate.startDate, 'date')) {\n dayOneOverride = override;\n }\n\n labelsByDate[dayIndex] = {\n label: dayLabel,\n date: dayIndex,\n alternateLabel: override.name,\n shortDescription: override.shortDescription,\n longDescription: override.longDescription,\n };\n }\n } else if (!labelsByDate[dayIndex]?.label) {\n // No rate label override\n labelsByDate[dayIndex] = {\n label: dayLabel,\n date: dayIndex,\n alternateLabel: '',\n };\n }\n\n if (dayOneOverride === override) {\n // If the first day of the stay is an override, the user thinks all dates are the same, so we\n // need to remove the override from this day, and specify the default for the remaining empty days.\n\n if (labelsByDate[dayIndex]?.label === dayLabel && labelsByDate[dayIndex]?.alternateLabel === override.name) {\n labelsByDate[dayIndex] = {\n label: dayLabel,\n date: dayIndex,\n alternateLabel: '',\n shortDescription: '',\n longDescription: '',\n };\n } else if (labelsByDate[dayIndex]?.alternateLabel === '') {\n labelsByDate[dayIndex] = {\n label: dayLabel,\n date: dayIndex,\n alternateLabel: this.name,\n shortDescription: this.description,\n longDescription: this.longDescription,\n };\n }\n }\n\n // If label dates aren't populated, they're the originl rate labels.\n if (!labelsByDate[dayIndex]?.label) {\n labelsByDate[dayIndex] = {\n label: dayLabel,\n date: dayIndex,\n alternateLabel: dayOneOverride === override ? this.name : '',\n shortDescription: this.description,\n longDescription: this.longDescription,\n };\n }\n\n stayDate = stayDate.add(1, 'day');\n }\n });\n\n return Object.values(labelsByDate).sort((a, b) => {\n return a.date > b.date ? 1 : -1;\n });\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"RoomRate.js","sourceRoot":"/","sources":["src/models/Room/RoomRate.ts"],"names":[],"mappings":"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","sourcesContent":["import { EGuaranteePolicyDepositMode } from '@roomstay/core';\nimport dayjs, { Dayjs } from 'dayjs';\n\nimport AvailabilityAPI from '@/api/AvailabilityAPI';\nimport { accumulateFees, feeMapToArray, HotelFee, ItemisedFee, mapSimpleFeesToItemisedFees } from '@/models/Fee';\nimport type { Room } from '@/models/Room/Room';\nimport RoomRateNight, { IRoomRateNight } from '@/models/Room/RoomRateNight';\nimport type RoomRateSortable from '@/models/Room/RoomRateSortable';\nimport type { Serializable } from '@/models/Serializable';\nimport StaticContextProvider from '@/providers/StaticContextProvider';\n\nexport enum RoomRatePriceInclusion {\n ExcludingFees = 'Fees Excluded',\n ExcludingTaxes = 'Taxes Excluded',\n ExcludingFeesAndTaxes = 'Excluding Fees and Taxes',\n IncludingFeesAndTaxes = 'Including Fees and Taxes',\n}\n\nexport interface IRoomRate {\n name: string;\n code: string;\n description: string;\n longDescription?: string;\n\n isMemberOnly?: boolean;\n guaranteeCode: string;\n cancelPolicyCode: string;\n nightRates: { [date: string]: IRoomRateNight };\n\n lowestPrice: number;\n promoCode: string;\n promoCodeName: string;\n\n mealsIncluded?: {\n breakfast: boolean;\n lunch: boolean;\n dinner: boolean;\n };\n rateOverrides?: RateOverride[];\n minNightStayOverride?: number;\n isUpsellRate?: boolean;\n nightsToDiscount?: number;\n artificialDiscountPercent: number | null;\n artificialDiscountAmount: number | null;\n}\n\nexport type RateLabelsByDay = {\n Monday: boolean;\n Tuesday: boolean;\n Wednesday: boolean;\n Thursday: boolean;\n Friday: boolean;\n Saturday: boolean;\n Sunday: boolean;\n};\n\nexport type RateOverride = {\n name: string;\n shortDescription: string;\n longDescription: string;\n enabledPerDay: RateLabelsByDay;\n startDate: string;\n endDate: string;\n queryStartDate: string;\n queryEndDate: string;\n};\n\nexport type RateOverrideKeys = 'name' | 'shortDescription' | 'longDescription';\n\ninterface RequestedDate {\n startDate: Dayjs;\n endDate: Dayjs;\n}\n\ninterface DisplayRate {\n name: string;\n shortDescription: string;\n longDescription: string;\n startDate?: Dayjs;\n endDate?: Dayjs;\n override: RateOverride;\n}\n\nexport class RoomRate implements RoomRateSortable, Serializable<RoomRate, IRoomRate> {\n public name!: string;\n public code!: string;\n\n public description!: string;\n public longDescription!: string;\n\n public isMemberOnly!: boolean;\n\n public guaranteeCode!: string;\n\n public cancelPolicyCode!: string;\n\n public nightRates: { [date: string]: RoomRateNight };\n public lowestPrice!: number;\n public promoCode?: string;\n public promoCodeName?: string;\n public mealsIncluded?: {\n breakfast: boolean;\n lunch: boolean;\n dinner: boolean;\n } = {\n breakfast: false,\n lunch: false,\n dinner: false,\n };\n private nightRatesArray: RoomRateNight[];\n private room!: Room;\n public rateOverrides?: RateOverride[];\n public minNightStayOverride?: number;\n public isUpsellRate?: boolean;\n public nightsToDiscount?: number;\n public artificialDiscountPercent!: number | null;\n public artificialDiscountAmount!: number | null;\n\n public constructor() {\n this.nightRates = {};\n this.nightRatesArray = [];\n }\n\n public static fromData(data: Partial<{ code: string }> | any) {\n const rate = new this();\n\n rate.applyData(data);\n\n if (StaticContextProvider.MemberOnlyRateCodes?.includes(data.code)) {\n rate.isMemberOnly = true;\n }\n\n return rate;\n }\n\n public applyData(data: any) {\n Object.keys(data).map((key: any) => {\n (this as any)[key] = (data as any)[key];\n }, this);\n }\n\n public setRoom(room: Room) {\n this.room = room;\n }\n\n public getRoom(): Room {\n return this.room;\n }\n\n /**\n * Do not use this method if RMS deposit quotes are enabled.\n */\n public getDepositAccordingToGuaranteePolicy(bookingRateFees: number) {\n const depositPercentage = this.getGuaranteePolicy().depositPercentage;\n const nightsAsArray = this.getNightRateArray();\n const totalPriceIncludingAllFees = this.getTotalPrice() + bookingRateFees;\n\n switch (this.getGuaranteePolicy().depositMode) {\n case EGuaranteePolicyDepositMode.None:\n return 0;\n case EGuaranteePolicyDepositMode.Full:\n return totalPriceIncludingAllFees;\n case EGuaranteePolicyDepositMode.Percentage:\n if (depositPercentage) {\n return totalPriceIncludingAllFees * (depositPercentage / 100);\n }\n return totalPriceIncludingAllFees;\n case EGuaranteePolicyDepositMode.FirstNight:\n return Number(nightsAsArray[0].total) + bookingRateFees / nightsAsArray.length;\n case null:\n throw Error('Cannot calculate deposit without a deposit mode');\n }\n }\n\n public getTotalPrice = (getCost = false) => {\n let total = 0;\n const nightsAsArray = Object.values(this.nightRates);\n nightsAsArray.forEach((night: RoomRateNight) => {\n total += Number(getCost ? night.cost : night.total);\n });\n return total;\n };\n\n public getTotalPriceBeforeDiscount = (getCost = false) => {\n let total = 0;\n const nightsAsArray = Object.values(this.nightRates);\n nightsAsArray.forEach((night: RoomRateNight) => {\n total += Number(getCost ? night.cost : night.total) + Number(night.discount);\n });\n return total;\n };\n\n public getTotalDiscount = (): number => {\n return this.nightRateTotal((night: RoomRateNight) => {\n return Number(night.discount);\n });\n };\n\n public isStayXPayYRate = (): boolean => {\n return !!(this.nightsToDiscount && this.nightsToDiscount > 0);\n };\n\n public getAveragePrice = (getCost = false): number => {\n const total = this.getTotalPrice(getCost);\n\n return total / Object.keys(this.nightRates).length;\n };\n\n /**\n * Average nightly price before ANY discount (real + artificial combined correctly)\n */\n public getAveragePriceBeforeDiscount = (getCost = false) => {\n const nights = Object.values(this.nightRates);\n if (!nights.length) return 0;\n\n // Step 1: calculate true original (before real discounts)\n let originalTotal = 0;\n nights.forEach((night: RoomRateNight) => {\n const base = Number(getCost ? night.cost : night.total);\n const realDiscount = Number(night.discount ?? 0);\n originalTotal += base + realDiscount;\n });\n\n let averageOriginal = originalTotal / nights.length;\n // Step 2: inflate using artificial discount\n if (this.artificialDiscountPercent != null) {\n averageOriginal = (100 * averageOriginal) / (100 - this.artificialDiscountPercent);\n }\n if (this.artificialDiscountAmount != null) {\n averageOriginal += this.artificialDiscountAmount;\n }\n\n return averageOriginal;\n };\n\n public getTotalFees = () => {\n return this.nightRateTotal((night: RoomRateNight) => {\n return Number(night.fee);\n });\n };\n\n public getItemisedFees = (hotelFees: HotelFee[]): ItemisedFee[] => {\n const feeMap = new Map<HotelFee, number>();\n\n this.getNightRateArray().forEach((night) => {\n if (night.fees) {\n const fees = mapSimpleFeesToItemisedFees(night.fees, hotelFees);\n accumulateFees(feeMap, fees);\n }\n });\n\n return feeMapToArray(feeMap);\n };\n\n public getTotalTaxes = () => {\n return this.nightRateTotal((night: RoomRateNight) => {\n return Number(night.tax);\n });\n };\n\n public getPriceType = () => {\n let hasFees = false;\n let hasTax = false;\n\n Object.values(this.nightRates).forEach((night) => {\n if (night.fee && night.fee !== '0') {\n hasFees = true;\n }\n\n if (night.tax && night.tax !== '0') {\n hasTax = true;\n }\n });\n\n if (hasFees && hasTax) {\n return RoomRatePriceInclusion.ExcludingFeesAndTaxes;\n } else if (hasFees) {\n return RoomRatePriceInclusion.ExcludingTaxes;\n } else if (hasTax) {\n return RoomRatePriceInclusion.ExcludingFees;\n } else {\n return RoomRatePriceInclusion.IncludingFeesAndTaxes;\n }\n };\n\n public getGuaranteePolicy = () => {\n return AvailabilityAPI.policyMappings.guarantee[this.guaranteeCode] ?? '';\n };\n\n public getCancellationPolicy = () => {\n return AvailabilityAPI.policyMappings.cancel[this.cancelPolicyCode] ?? '';\n };\n\n public getPriceSortValue = () => {\n return this.getAveragePrice();\n };\n\n /**\n * Not implemented\n */\n public getRecommendedSortValue() {\n return 0;\n }\n\n public getOrderSortValue() {\n return 0;\n }\n\n public serialize() {\n const serializedNightRates: any = {};\n Object.keys(this.nightRates).forEach((date) => {\n serializedNightRates[date] = this.nightRates[date].serialize();\n });\n\n const toSerialize: IRoomRate = {\n name: this.name,\n code: this.code,\n description: this.description,\n longDescription: this.longDescription,\n isMemberOnly: this.isMemberOnly,\n guaranteeCode: this.guaranteeCode,\n cancelPolicyCode: this.cancelPolicyCode,\n nightRates: serializedNightRates,\n lowestPrice: this.lowestPrice,\n promoCode: this.promoCode,\n promoCodeName: this.promoCodeName,\n mealsIncluded: this.mealsIncluded,\n rateOverrides: this.rateOverrides,\n minNightStayOverride: this.minNightStayOverride,\n isUpsellRate: this.isUpsellRate,\n nightsToDiscount: this.nightsToDiscount,\n artificialDiscountAmount: this.artificialDiscountAmount,\n artificialDiscountPercent: this.artificialDiscountPercent,\n } as IRoomRate;\n\n return toSerialize;\n }\n\n public unSerialize(data: IRoomRate) {\n const { name, code, description, longDescription, isMemberOnly, guaranteeCode, cancelPolicyCode, lowestPrice, promoCode, promoCodeName, mealsIncluded, nightsToDiscount } =\n data;\n\n const unSerializedNightRates: any = {};\n\n if (data.nightRates) {\n Object.keys(data.nightRates)?.forEach((date) => {\n const nightRate = new RoomRateNight();\n unSerializedNightRates[date] = nightRate.unSerialize(data.nightRates[date]);\n });\n }\n\n this.name = name;\n this.code = code;\n this.description = description;\n this.longDescription = longDescription as string;\n this.isMemberOnly = isMemberOnly as boolean;\n this.guaranteeCode = guaranteeCode;\n this.cancelPolicyCode = cancelPolicyCode;\n this.lowestPrice = lowestPrice;\n this.promoCode = promoCode;\n this.promoCodeName = promoCodeName;\n this.mealsIncluded = mealsIncluded;\n this.nightRates = unSerializedNightRates;\n this.nightRatesArray = [];\n this.rateOverrides = data.rateOverrides;\n this.minNightStayOverride = data.minNightStayOverride;\n this.isUpsellRate = data.isUpsellRate;\n this.nightsToDiscount = nightsToDiscount;\n this.artificialDiscountAmount = data.artificialDiscountAmount;\n this.artificialDiscountPercent = data.artificialDiscountPercent;\n\n return this;\n }\n\n private getNightRateArray = () => {\n if (!this.nightRatesArray.length) {\n this.nightRatesArray = Object.values(this.nightRates);\n }\n\n return this.nightRatesArray;\n };\n\n private reduceNightData = (reducer: (sum: number, rate: RoomRateNight) => number) => {\n return this.getNightRateArray().reduce<number>(reducer, 0) ?? 0;\n };\n\n private nightRateTotal = (value: (rate: RoomRateNight) => number) => {\n return this.reduceNightData((sum: number, redNight: RoomRateNight) => {\n const summingValue = value(redNight);\n\n return sum ? sum + summingValue : summingValue;\n });\n };\n\n public datesOverlap = (startDate1: Dayjs, endDate1: Dayjs, startDate2: Dayjs, endDate2: Dayjs): boolean => {\n const overlap1 = startDate1.isSameOrBefore(endDate2) && startDate2.isSameOrBefore(endDate1);\n const overlap2 = startDate1.isSameOrAfter(endDate2) && startDate2.isSameOrAfter(endDate1);\n return overlap1 || overlap2;\n };\n\n public getDefaultLabelsByDate = (requestedDate: RequestedDate) => {\n const days: { label: string; alternateLabel: string }[] = [];\n let currentDate = requestedDate.startDate.clone();\n while (currentDate.isSameOrBefore(requestedDate.endDate)) {\n days.push({\n label: currentDate.format('dddd, MMM DD, YYYY'),\n alternateLabel: '', // No rate label available\n });\n currentDate = currentDate.add(1, 'day');\n }\n return days;\n };\n\n public getPossiblyOverwrittenDetails = (requestedDate: RequestedDate) => {\n const rateOverrides: RateOverride[] = this.getAvailableRateOverrides();\n if (!rateOverrides.length) return { name: this.name, shortDescription: this.description, longDescription: this.longDescription };\n\n const originalRequestedStartDate = requestedDate.startDate;\n\n let shortDescription = this.description;\n let longDescription = this.longDescription;\n let name = this.name;\n\n // Loop through all overrides and check for any matching the booking dates\n rateOverrides.forEach((override) => {\n if (!originalRequestedStartDate) return;\n\n const queryStartDate = dayjs(override.queryStartDate);\n const queryEndDate = dayjs(override.queryEndDate);\n\n const overlap =\n (!override.queryStartDate || queryStartDate.isSameOrBefore(originalRequestedStartDate, 'date')) &&\n (!override.queryEndDate || queryEndDate.isSameOrAfter(originalRequestedStartDate, 'date'));\n\n const stayDay = originalRequestedStartDate.format('dddd');\n\n if (overlap && override.enabledPerDay[stayDay as keyof RateLabelsByDay] === true) {\n name = override.name;\n shortDescription = override.shortDescription;\n longDescription = override.longDescription;\n }\n });\n\n return { name, shortDescription, longDescription };\n };\n\n public getAvailableRateOverrides = (): RateOverride[] => {\n if (!this.rateOverrides?.length) return [];\n\n const now = dayjs();\n //startDate/endDate/queryStartDate/queryEndDate must not empty\n const rateOverrides: RateOverride[] = this.rateOverrides.filter((override) => {\n // Check if the override can apply to this query in current time.\n // We don't require any of the filter fields, so if they are set we should check that they apply.\n if (override.startDate) {\n if (!dayjs(override.startDate).isSameOrBefore(now)) {\n return false;\n }\n\n if (override.endDate && !dayjs(override.endDate).isSameOrAfter(now)) {\n return false;\n }\n }\n\n return true;\n });\n return rateOverrides;\n };\n\n public hasRateVariesByDay = (requestedDate: RequestedDate): boolean => {\n // Validate startDate/endDate\n if (!requestedDate?.startDate || !requestedDate.endDate) return false;\n\n const rateOverrides: RateOverride[] = this.getAvailableRateOverrides();\n if (!rateOverrides.length) false;\n\n const originalRequestedStartDate = dayjs(requestedDate.startDate);\n const originalRequestedEndDate = dayjs(requestedDate.endDate);\n\n // Loop through all overrides and check for any matching the booking dates\n return rateOverrides.some((override) => {\n const overrideStartDate = dayjs(override.startDate);\n const overrideEndDate = dayjs(override.endDate);\n const queryStartDate = dayjs(override.queryStartDate);\n const queryEndDate = dayjs(override.queryEndDate);\n\n if (override.startDate && overrideStartDate.isAfter(originalRequestedEndDate)) {\n return false;\n }\n\n if (override.endDate && overrideEndDate.isBefore(originalRequestedStartDate)) {\n return false;\n }\n\n if (override.queryStartDate && queryStartDate.isAfter(originalRequestedEndDate)) {\n return false;\n }\n if (override.queryEndDate && queryEndDate.isBefore(originalRequestedStartDate)) {\n return false;\n }\n\n return true;\n });\n };\n\n public getDisplayRates = (requestedDate: RequestedDate): DisplayRate[] => {\n const rateOverrides: RateOverride[] = this.getAvailableRateOverrides();\n if (!rateOverrides.length) return [];\n\n const originalRequestedStartDate = dayjs(requestedDate.startDate);\n const originalRequestedEndDate = dayjs(requestedDate.endDate);\n\n const displayRates: DisplayRate[] = [\n {\n name: this.name,\n shortDescription: this.description,\n longDescription: this.longDescription,\n override: {\n name: this.name,\n shortDescription: this.description,\n longDescription: this.longDescription,\n enabledPerDay: {\n Monday: true,\n Tuesday: true,\n Wednesday: true,\n Thursday: true,\n Friday: true,\n Saturday: true,\n Sunday: true,\n },\n startDate: '',\n endDate: '',\n queryStartDate: '',\n queryEndDate: '',\n },\n },\n ];\n // Loop through all overrides and check for any matching the booking dates\n rateOverrides.forEach((override) => {\n const overrideStartDate = dayjs(override.startDate);\n const overrideEndDate = dayjs(override.endDate);\n const queryStartDate = dayjs(override.queryStartDate);\n const queryEndDate = dayjs(override.queryEndDate);\n //requestedStartDate & requestedEndDate must be in date range of override's startDate/endDate\n const requestedStartDate = originalRequestedStartDate.isBefore(overrideStartDate) ? overrideStartDate : originalRequestedStartDate;\n const requestedEndDate = originalRequestedEndDate.isAfter(overrideEndDate) ? overrideEndDate : originalRequestedEndDate;\n const overlap = this.datesOverlap(requestedStartDate, requestedEndDate, queryStartDate, queryEndDate);\n if (overlap) {\n if (requestedStartDate.isBefore(queryStartDate, 'date')) {\n if (queryEndDate.isBefore(requestedEndDate, 'date')) {\n displayRates.push({\n override: override,\n name: override.name,\n shortDescription: override.shortDescription,\n longDescription: override.longDescription,\n startDate: queryStartDate,\n endDate: queryEndDate,\n });\n } else {\n displayRates.push({\n override: override,\n name: override.name,\n shortDescription: override.shortDescription,\n longDescription: override.longDescription,\n startDate: queryStartDate,\n endDate: requestedEndDate,\n });\n }\n } else {\n if (queryEndDate.isBefore(requestedEndDate, 'date')) {\n displayRates.push({\n override: override,\n name: override.name,\n shortDescription: override.shortDescription,\n longDescription: override.longDescription,\n startDate: requestedStartDate,\n endDate: queryEndDate,\n });\n } else {\n displayRates.push({\n override: override,\n name: override.name,\n shortDescription: override.shortDescription,\n longDescription: override.longDescription,\n startDate: requestedStartDate,\n endDate: requestedEndDate,\n });\n }\n }\n }\n });\n\n return displayRates;\n };\n\n public displayRateToDayLabel = (displayRate: DisplayRate): string => {\n if (!displayRate.startDate || !displayRate.endDate) return '';\n\n const dayDayLabels: Record<string, string> = {};\n const startDayLabel = displayRate.startDate.format('MMM DD, YYYY');\n const endDayLabel = displayRate.endDate.format('MMM DD, YYYY');\n dayDayLabels[startDayLabel] = startDayLabel;\n dayDayLabels[endDayLabel] = endDayLabel;\n return `${Object.values(dayDayLabels).join(' - ')}`;\n };\n\n public displayRateToDayName = (displayRate: DisplayRate): string => {\n if (!displayRate.startDate || !displayRate.endDate) return '';\n\n const dayNames: Record<string, string> = {};\n const startDayName = displayRate.startDate.format('dddd');\n const endDayName = displayRate.endDate.format('dddd');\n dayNames[startDayName] = startDayName;\n dayNames[endDayName] = endDayName;\n return `${Object.values(dayNames).join(' - ')}`;\n };\n\n public getLabelsByDate = (requestedDate: RequestedDate): { label: string; alternateLabel: string; shortDescription?: string; longDescription?: string }[] => {\n const overrides: RateOverride[] = this.getAvailableRateOverrides();\n if (!overrides.length) {\n // If overrides are null or empty, return an empty rateLabelByDay for the whole date range\n return this.getDefaultLabelsByDate(requestedDate);\n }\n\n const labelsByDate: Record<string, { label: string; alternateLabel: string; shortDescription?: string; longDescription?: string; date: string }> = {};\n let dayOneOverride: RateOverride | null = null;\n\n overrides.forEach((override) => {\n const overrideStartDate = dayjs(override.startDate);\n const overrideEndDate = dayjs(override.endDate);\n const overrideQueryStartDate = dayjs(override.queryStartDate);\n const overrideQueryEndDate = dayjs(override.queryEndDate);\n\n const isApplicableForStayDate = () => {\n if (overrideStartDate && overrideStartDate.isAfter(stayDate)) {\n return false;\n }\n\n if (overrideEndDate && overrideEndDate.isBefore(stayDate)) {\n return false;\n }\n\n if (overrideQueryStartDate && overrideQueryStartDate.isAfter(stayDate)) {\n return false;\n }\n\n if (overrideQueryEndDate && overrideQueryEndDate.isBefore(stayDate)) {\n return false;\n }\n\n return true;\n };\n\n let stayDate = requestedDate.startDate.clone();\n while (stayDate.isSameOrBefore(requestedDate.endDate, 'date')) {\n const dayIndex = stayDate.format('YYYY-MM-DD');\n const dayLabel = stayDate.format('dddd, MMM DD, YYYY');\n const stayDay = stayDate.format('dddd');\n //stayDate must be in date range of override's startDate/endDate and queryStartDate/queryEndDate\n if (isApplicableForStayDate()) {\n if (override.enabledPerDay[stayDay as keyof RateLabelsByDay] === true) {\n // Keep setting the dayOneOverride until the first day of the stay is reached, this will tell us\n // what is the initial rate label for the stay\n if (stayDate.isSame(requestedDate.startDate, 'date')) {\n dayOneOverride = override;\n }\n\n labelsByDate[dayIndex] = {\n label: dayLabel,\n date: dayIndex,\n alternateLabel: override.name,\n shortDescription: override.shortDescription,\n longDescription: override.longDescription,\n };\n }\n } else if (!labelsByDate[dayIndex]?.label) {\n // No rate label override\n labelsByDate[dayIndex] = {\n label: dayLabel,\n date: dayIndex,\n alternateLabel: '',\n };\n }\n\n if (dayOneOverride === override) {\n // If the first day of the stay is an override, the user thinks all dates are the same, so we\n // need to remove the override from this day, and specify the default for the remaining empty days.\n\n if (labelsByDate[dayIndex]?.label === dayLabel && labelsByDate[dayIndex]?.alternateLabel === override.name) {\n labelsByDate[dayIndex] = {\n label: dayLabel,\n date: dayIndex,\n alternateLabel: '',\n shortDescription: '',\n longDescription: '',\n };\n } else if (labelsByDate[dayIndex]?.alternateLabel === '') {\n labelsByDate[dayIndex] = {\n label: dayLabel,\n date: dayIndex,\n alternateLabel: this.name,\n shortDescription: this.description,\n longDescription: this.longDescription,\n };\n }\n }\n\n // If label dates aren't populated, they're the originl rate labels.\n if (!labelsByDate[dayIndex]?.label) {\n labelsByDate[dayIndex] = {\n label: dayLabel,\n date: dayIndex,\n alternateLabel: dayOneOverride === override ? this.name : '',\n shortDescription: this.description,\n longDescription: this.longDescription,\n };\n }\n\n stayDate = stayDate.add(1, 'day');\n }\n });\n\n return Object.values(labelsByDate).sort((a, b) => {\n return a.date > b.date ? 1 : -1;\n });\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomRateSortable.js","sourceRoot":"/","sources":["src/models/Room/RoomRateSortable.ts"],"names":[],"mappings":"","sourcesContent":["export default interface RoomRateSortable {\n getPriceSortValue(): any;\n getRecommendedSortValue(): any;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"RoomRateSortable.js","sourceRoot":"/","sources":["src/models/Room/RoomRateSortable.ts"],"names":[],"mappings":"","sourcesContent":["export default interface RoomRateSortable {\n getPriceSortValue(): any;\n getRecommendedSortValue(): any;\n getOrderSortValue(): any;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomstaySession.js","sourceRoot":"/","sources":["src/models/RoomstaySession.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"RoomstaySession.js","sourceRoot":"/","sources":["src/models/RoomstaySession.ts"],"names":[],"mappings":";;;AAkEa,QAAA,sBAAsB,GAAG,YAAY,CAAC","sourcesContent":["import { SignInUser } from '@frontend/contexts';\nimport { IBookingPayment, ReservationsDTO } from '@roomstay/core';\nimport dayjs from 'dayjs';\n\nimport type BasketRow from '@/models/BasketRow';\nimport type { IRoom } from '@/models/Room/Room';\nimport type { IRoomRate } from '@/models/Room/RoomRate';\nimport UserProfile from '@/models/UserProfile';\n\n/**\n * Booking engine state object, that is stored, can be loaded and unloaded\n */\nexport type RoomstaySession = {\n id: number;\n step: string;\n startDate: dayjs.Dayjs | null;\n endDate: dayjs.Dayjs | null;\n hotelID: number | string;\n source: string;\n user?: SignInUser;\n memberId?: string;\n pencilId?: string;\n\n basketRows: BasketRow[];\n\n reservationRequest?: {\n userProfiles: UserProfile[];\n payment: IBookingPayment;\n comments: string;\n eta?: string;\n };\n reservation?: ReservationsDTO;\n};\n\nexport type SerializedRoomstaySession = {\n id: number;\n step: string;\n startDate: string;\n endDate: string;\n hotelID: number | string;\n source: string;\n user?: string;\n memberId?: string;\n\n basketRows: SerializedRoomstaySessionBasketRow[];\n\n reservation?: ReservationsDTO;\n reservationRequest?: RoomstaySession['reservationRequest'];\n};\n\nexport type SerializedRoomstaySessionBasketRow = {\n uniqId: string;\n startDate: string;\n endDate: string;\n\n adults: number;\n children: number;\n infants: number;\n\n promoCode: string;\n promoCodeStatus: string;\n\n room: IRoom;\n rate: IRoomRate;\n};\n\nexport const SERIALIZED_DATE_FORMAT = 'YYYY/MM/DD';\n"]}
|
|
@@ -62,12 +62,12 @@ const StepConfirmationFormProvider_1 = __importDefault(require("../../../compone
|
|
|
62
62
|
function StepConfirmationComponent() {
|
|
63
63
|
const context = (0, react_1.useContext)(contexts_1.BookingEngineContext);
|
|
64
64
|
const { currentStep } = (0, react_1.useContext)(contexts_1.FullPageEngineContext);
|
|
65
|
-
const { currentBasketRows } = (0, react_1.useContext)(contexts_1.BasketContext);
|
|
65
|
+
const { currentBasketRows, basketAddonRows } = (0, react_1.useContext)(contexts_1.BasketContext);
|
|
66
66
|
const location = (0, react_router_dom_1.useLocation)();
|
|
67
67
|
const { t } = (0, react_i18next_1.useTranslation)();
|
|
68
68
|
const { raise } = (0, EventHook_1.useEvent)();
|
|
69
69
|
(0, react_1.useEffect)(() => {
|
|
70
|
-
const event = new events_1.StepCheckoutViewEvent(currentBasketRows);
|
|
70
|
+
const event = new events_1.StepCheckoutViewEvent(currentBasketRows, basketAddonRows);
|
|
71
71
|
raise(event);
|
|
72
72
|
}, []);
|
|
73
73
|
return (react_1.default.createElement("div", { className: "container rs-step-confirmation" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepConfirmationComponent.js","sourceRoot":"/","sources":["src/pages/steps/StepConfirmation/StepConfirmationComponent.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAgI;AAChI,6CAAyD;AACzD,kDAA0B;AAC1B,+CAAqD;AACrD,iDAA+C;AAC/C,uDAAqD;AACrD,0DAAuD;AAEvD,iFAAyD;AACzD,6EAAqD;AACrD,uEAA4H;AAC5H,+EAAuD;AACvD,8DAA2D;AAC3D,yHAAiG;AACjG,gIAAwG;AACxG,0GAAkF;AAClF,wGAAgF;AAChF,2FAAmE;AACnE,8DAA2D;AAC3D,iDAA6C;AAC7C,wGAAgF;AAChF,mEAA2C;AAC3C,qEAA6C;AAE7C,uIAA+G;AAE/G,SAAS,yBAAyB;IAC9B,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,+BAAoB,CAAC,CAAC;IACjD,MAAM,EAAE,WAAW,EAAE,GAAG,IAAA,kBAAU,EAAC,gCAAqB,CAAC,CAAC;IAC1D,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"StepConfirmationComponent.js","sourceRoot":"/","sources":["src/pages/steps/StepConfirmation/StepConfirmationComponent.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAgI;AAChI,6CAAyD;AACzD,kDAA0B;AAC1B,+CAAqD;AACrD,iDAA+C;AAC/C,uDAAqD;AACrD,0DAAuD;AAEvD,iFAAyD;AACzD,6EAAqD;AACrD,uEAA4H;AAC5H,+EAAuD;AACvD,8DAA2D;AAC3D,yHAAiG;AACjG,gIAAwG;AACxG,0GAAkF;AAClF,wGAAgF;AAChF,2FAAmE;AACnE,8DAA2D;AAC3D,iDAA6C;AAC7C,wGAAgF;AAChF,mEAA2C;AAC3C,qEAA6C;AAE7C,uIAA+G;AAE/G,SAAS,yBAAyB;IAC9B,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,+BAAoB,CAAC,CAAC;IACjD,MAAM,EAAE,WAAW,EAAE,GAAG,IAAA,kBAAU,EAAC,gCAAqB,CAAC,CAAC;IAC1D,MAAM,EAAE,iBAAiB,EAAE,eAAe,EAAE,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,IAAA,8BAAW,GAAE,CAAC;IAE/B,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,oBAAQ,GAAE,CAAC;IAE7B,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,MAAM,KAAK,GAAG,IAAI,8BAAqB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;QAC5E,KAAK,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACH,uCAAK,SAAS,EAAC,gCAAgC;QAC3C,8BAAC,qBAAS,IAAC,IAAI,EAAC,cAAc,GAAG;QACjC,8BAAC,yCAA8B;YAC3B,8BAAC,yBAAe,OAAG;YACnB,8BAAC,gCAAmB;gBAChB,8BAAC,kCAAqB;oBACjB,OAAO,CAAC,UAAU,GAAG,oBAAU,CAAC,MAAM,IAAI,CACvC;wBACI,8BAAC,uBAAI,IACD,EAAE,EAAE;gCACA,QAAQ,EAAE,qBAAW,CAAC,kBAAkB,CAAC,WAAW,CAAC;gCACrD,MAAM,EAAE,QAAQ,CAAC,MAAM;6BAC1B;4BAED,8BAAC,oBAAU,OAAG,CACX;wBACP,uCAAK,SAAS,EAAC,wCAAwC;4BACnD,8BAAC,kBAAQ,IAAC,IAAI,UAAE,CAAC,CAAC,yBAAW,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAY,CACtE,CACP,CACN;oBAED,uCAAK,SAAS,EAAC,eAAe;wBAC1B,8BAAC,+BAAqB,OAAG,CACvB,CACc;gBACvB,OAAO,CAAC,UAAU,GAAG,oBAAU,CAAC,MAAM,IAAI,CACvC,8BAAC,mCAAsB;oBACnB,8BAAC,8BAAoB,OAAG,CACH,CAC5B,CACiB;YACtB,8BAAC,mBAAS,OAAG;YACb,8BAAC,gCAAmB;gBAChB,8BAAC,kCAAqB;oBAClB,uCAAK,SAAS,EAAC,iBAAiB;wBAC3B,CAAC,gCAAsB,CAAC,QAAQ,EAAE,IAAI,8BAAC,0BAAgB,OAAG;wBAC3D,8BAAC,sCAA4B,OAAG,CAC9B,CACc;gBAEvB,OAAO,CAAC,UAAU,GAAG,oBAAU,CAAC,MAAM,IAAI,CACvC,8BAAC,mCAAsB;oBACnB,8BAAC,sCAA4B,IAAC,OAAO,EAAE,IAAA,eAAK,GAAE,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,GAAI;oBACpE,8BAAC,qBAAS,IAAC,UAAU,SAAG,CACH,CAC5B,CACiB,CACO,CAC/B,CACT,CAAC;AACN,CAAC;AAED,kBAAe,yBAAyB,CAAC","sourcesContent":["import { BasketContext, BookingEngineContext, ConfirmationFormContextWrapper, FullPageEngineContext } from '@frontend/contexts';\nimport { StepCheckoutViewEvent } from '@frontend/events';\nimport dayjs from 'dayjs';\nimport React, { useContext, useEffect } 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 { PageTitle } from '@/components/generic/PageTitle';\nimport AdditionalOffers from '@/components/steps/confirmation/additionalOffers/AdditionalOffers';\nimport StepConfirmationLimitedOffer from '@/components/steps/confirmation/StepConfirmationLimitedOffer';\nimport StepRoomBestRateAlert from '@/components/steps/room/StepRoomBestRateAlert';\nimport StepRoomHotelDetails from '@/components/steps/room/StepRoomHotelDetails';\nimport BEMobileSummary from '@/components/summary/BEMobileSummary';\nimport { BESummary } from '@/components/summary/BESummary';\nimport { useEvent } from '@/hooks/EventHook';\nimport InlineAddonStepFeature from '@/providers/feature/InlineAddonStepFeature';\nimport ScreenSize from '@/util/ScreenSize';\nimport StepManager from '@/util/StepManager';\n\nimport StepConfirmationFormProvider from '../../../components/steps/confirmation/StepConfirmationFormProvider';\n\nfunction StepConfirmationComponent() {\n const context = useContext(BookingEngineContext);\n const { currentStep } = useContext(FullPageEngineContext);\n const { currentBasketRows, basketAddonRows } = useContext(BasketContext);\n const location = useLocation();\n\n const { t } = useTranslation();\n\n const { raise } = useEvent();\n\n useEffect(() => {\n const event = new StepCheckoutViewEvent(currentBasketRows, basketAddonRows);\n raise(event);\n }, []);\n\n return (\n <div className=\"container rs-step-confirmation\">\n <PageTitle step=\"Confirmation\" />\n <ConfirmationFormContextWrapper>\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.Navigation.Steps.Confirmation)}</Headline>\n </div>\n </>\n )}\n\n <div className=\"u-marg-top@m-\">\n <StepRoomBestRateAlert />\n </div>\n </StepLayoutLeftContent>\n {context.screenSize > ScreenSize.Medium && (\n <StepLayoutRightContent>\n <StepRoomHotelDetails />\n </StepLayoutRightContent>\n )}\n </StepLayoutContainer>\n <LineBreak />\n <StepLayoutContainer>\n <StepLayoutLeftContent>\n <div className=\"block-container\">\n {!InlineAddonStepFeature.isActive() && <AdditionalOffers />}\n <StepConfirmationFormProvider />\n </div>\n </StepLayoutLeftContent>\n\n {context.screenSize > ScreenSize.Medium && (\n <StepLayoutRightContent>\n <StepConfirmationLimitedOffer endDate={dayjs().add(10, 'minute')} />\n <BESummary showImages />\n </StepLayoutRightContent>\n )}\n </StepLayoutContainer>\n </ConfirmationFormContextWrapper>\n </div>\n );\n}\n\nexport default StepConfirmationComponent;\n"]}
|
|
@@ -14,15 +14,27 @@ RoomSortProvider.getSortByFunction = (sortBy) => {
|
|
|
14
14
|
switch (sortBy) {
|
|
15
15
|
case RoomSort.PriceHigh:
|
|
16
16
|
return (a, b) => {
|
|
17
|
-
|
|
17
|
+
const priceDiff = b.getPriceSortValue() - a.getPriceSortValue();
|
|
18
|
+
if (priceDiff === 0 && a.getOrderSortValue && b.getOrderSortValue) {
|
|
19
|
+
return (b.getOrderSortValue() || 0) - (a.getOrderSortValue() || 0);
|
|
20
|
+
}
|
|
21
|
+
return priceDiff;
|
|
18
22
|
};
|
|
19
23
|
case RoomSort.PriceLow:
|
|
20
24
|
return (a, b) => {
|
|
21
|
-
|
|
25
|
+
const priceDiff = a.getPriceSortValue() - b.getPriceSortValue();
|
|
26
|
+
if (priceDiff === 0 && a.getOrderSortValue && b.getOrderSortValue) {
|
|
27
|
+
return (b.getOrderSortValue() || 0) - (a.getOrderSortValue() || 0);
|
|
28
|
+
}
|
|
29
|
+
return priceDiff;
|
|
22
30
|
};
|
|
23
31
|
case RoomSort.Recommended:
|
|
24
32
|
return (a, b) => {
|
|
25
|
-
|
|
33
|
+
const orderDiff = b.getRecommendedSortValue() - a.getRecommendedSortValue();
|
|
34
|
+
if (orderDiff === 0 && a.getOrderSortValue && b.getOrderSortValue) {
|
|
35
|
+
return (b.getOrderSortValue() || 0) - (a.getOrderSortValue() || 0);
|
|
36
|
+
}
|
|
37
|
+
return orderDiff;
|
|
26
38
|
};
|
|
27
39
|
default:
|
|
28
40
|
return () => 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomSortProvider.js","sourceRoot":"/","sources":["src/providers/RoomSortProvider.ts"],"names":[],"mappings":";;;AAEA,IAAY,QAIX;AAJD,WAAY,QAAQ;IAChB,qCAAyB,CAAA;IACzB,uCAA2B,CAAA;IAC3B,uCAA2B,CAAA;AAC/B,CAAC,EAJW,QAAQ,wBAAR,QAAQ,QAInB;AAED,MAAqB,gBAAgB;;AACjC,8DAA8D;AAChD,kCAAiB,GAAG,CAAC,MAAgB,EAAE,EAAE;IACnD,QAAQ,MAAM,EAAE,CAAC;QACb,KAAK,QAAQ,CAAC,SAAS;YACnB,OAAO,CAAC,CAAmB,EAAE,CAAmB,EAAE,EAAE;gBAChD,OAAO,CAAC,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,iBAAiB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"RoomSortProvider.js","sourceRoot":"/","sources":["src/providers/RoomSortProvider.ts"],"names":[],"mappings":";;;AAEA,IAAY,QAIX;AAJD,WAAY,QAAQ;IAChB,qCAAyB,CAAA;IACzB,uCAA2B,CAAA;IAC3B,uCAA2B,CAAA;AAC/B,CAAC,EAJW,QAAQ,wBAAR,QAAQ,QAInB;AAED,MAAqB,gBAAgB;;AACjC,8DAA8D;AAChD,kCAAiB,GAAG,CAAC,MAAgB,EAAE,EAAE;IACnD,QAAQ,MAAM,EAAE,CAAC;QACb,KAAK,QAAQ,CAAC,SAAS;YACnB,OAAO,CAAC,CAAmB,EAAE,CAAmB,EAAE,EAAE;gBAChD,MAAM,SAAS,GAAG,CAAC,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,iBAAiB,EAAE,CAAC;gBAChE,IAAI,SAAS,KAAK,CAAC,IAAI,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,iBAAiB,EAAE,CAAC;oBAChE,OAAO,CAAC,CAAC,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC;gBACvE,CAAC;gBACD,OAAO,SAAS,CAAC;YACrB,CAAC,CAAC;QACN,KAAK,QAAQ,CAAC,QAAQ;YAClB,OAAO,CAAC,CAAmB,EAAE,CAAmB,EAAE,EAAE;gBAChD,MAAM,SAAS,GAAG,CAAC,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,iBAAiB,EAAE,CAAC;gBAChE,IAAI,SAAS,KAAK,CAAC,IAAI,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,iBAAiB,EAAE,CAAC;oBAChE,OAAO,CAAC,CAAC,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC;gBACvE,CAAC;gBACD,OAAO,SAAS,CAAC;YACrB,CAAC,CAAC;QACN,KAAK,QAAQ,CAAC,WAAW;YACrB,OAAO,CAAC,CAAmB,EAAE,CAAmB,EAAE,EAAE;gBAChD,MAAM,SAAS,GAAG,CAAC,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC,uBAAuB,EAAE,CAAC;gBAC5E,IAAI,SAAS,KAAK,CAAC,IAAI,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,iBAAiB,EAAE,CAAC;oBAChE,OAAO,CAAC,CAAC,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC;gBACvE,CAAC;gBACD,OAAO,SAAS,CAAC;YACrB,CAAC,CAAC;QACN;YACI,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC;IACvB,CAAC;AACL,CAAC,CAAC;kBA/Be,gBAAgB","sourcesContent":["import RoomRateSortable from '@/models/Room/RoomRateSortable';\n\nexport enum RoomSort {\n PriceLow = 'Lowest Price',\n PriceHigh = 'Highest Price',\n Recommended = 'Recommended',\n}\n\nexport default class RoomSortProvider {\n // TODO refactor this to use static val instead of request one\n public static getSortByFunction = (sortBy: RoomSort) => {\n switch (sortBy) {\n case RoomSort.PriceHigh:\n return (a: RoomRateSortable, b: RoomRateSortable) => {\n const priceDiff = b.getPriceSortValue() - a.getPriceSortValue();\n if (priceDiff === 0 && a.getOrderSortValue && b.getOrderSortValue) {\n return (b.getOrderSortValue() || 0) - (a.getOrderSortValue() || 0);\n }\n return priceDiff;\n };\n case RoomSort.PriceLow:\n return (a: RoomRateSortable, b: RoomRateSortable) => {\n const priceDiff = a.getPriceSortValue() - b.getPriceSortValue();\n if (priceDiff === 0 && a.getOrderSortValue && b.getOrderSortValue) {\n return (b.getOrderSortValue() || 0) - (a.getOrderSortValue() || 0);\n }\n return priceDiff;\n };\n case RoomSort.Recommended:\n return (a: RoomRateSortable, b: RoomRateSortable) => {\n const orderDiff = b.getRecommendedSortValue() - a.getRecommendedSortValue();\n if (orderDiff === 0 && a.getOrderSortValue && b.getOrderSortValue) {\n return (b.getOrderSortValue() || 0) - (a.getOrderSortValue() || 0);\n }\n return orderDiff;\n };\n default:\n return () => 0;\n }\n };\n}\n"]}
|
|
@@ -37,6 +37,7 @@ class AnalyticsEventsFeature extends Feature_1.Feature {
|
|
|
37
37
|
AnalyticsEvents_1.default.initialize({
|
|
38
38
|
hotelId: this.options.hotelId,
|
|
39
39
|
currency: this.options.currency,
|
|
40
|
+
metaPixelId: this.options.metaPixelId,
|
|
40
41
|
firePixelEvents: this.options.firePixelEvents,
|
|
41
42
|
debug: this.options.debug,
|
|
42
43
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalyticsEventsFeature.js","sourceRoot":"/","sources":["src/providers/feature/AnalyticsEventsFeature.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;AAEH,0FAAkE;AAClE,6FAAqE;AAErE,uCAAoC;AAUpC,MAAM,sBAAuB,SAAQ,iBAAsC;IAGvE;QACI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAH5B,YAAO,GAAkC,EAAE,CAAC;IAIpD,CAAC;IAEM,UAAU;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAES,MAAM,CAAC,OAAuC;QACpD,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QAE7B,gDAAgD;QAChD,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACjD,CAAC;QAED,yBAAe,CAAC,UAAU,CAAC;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YAC7B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC/B,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe;YAC7C,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;SAC5B,CAAC,CAAC;IACP,CAAC;IAEa,aAAa,CAAC,OAAe;;YACvC,IAAI,OAAO,MAAM,KAAK,WAAW;gBAAE,OAAO;YAE1C,MAAM,CAAC,GAAG,MAAa,CAAC;YAExB,wCAAwC;YACxC,IAAI,CAAC,CAAC,GAAG;gBAAE,OAAO;YAElB,0EAA0E;YAC1E,MAAM,CAAC,GAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE;gBACvC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,CAAC,CAAC,IAAI;gBAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;YACxB,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;YACX,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAEb,IAAI,CAAC;gBACD,MAAM,6BAAmB,CAAC,UAAU,CAAC,gDAAgD,EAAE,YAAY,CAAC,CAAC;gBAErG,qCAAqC;gBACrC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACvB,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;gBAE3B,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBACrB,OAAO,CAAC,GAAG,CAAC,qDAAqD,EAAE,OAAO,CAAC,CAAC;gBAChF,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBACrB,OAAO,CAAC,GAAG,CAAC,4DAA4D,EAAE,KAAK,CAAC,CAAC;gBACrF,CAAC;YACL,CAAC;QACL,CAAC;KAAA;IAES,QAAQ;QACd,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACtB,CAAC;CACJ;AAED,kBAAe,IAAI,sBAAsB,EAAE,CAAC","sourcesContent":["/**\n * Analytics Events Feature\n *\n * Used for Meta CAPI integration and Meta Pixel client-side tracking.\n */\n\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport AnalyticsEvents from '@/util/AnalyticsEvents/AnalyticsEvents';\n\nimport { Feature } from './Feature';\n\nexport interface AnalyticsEventsFeatureOptions {\n hotelId?: string;\n currency?: string;\n metaPixelId?: string; // Meta Pixel ID to load the pixel script\n firePixelEvents?: boolean; // Fire Meta Pixel events too\n debug?: boolean; // Log events to console\n}\n\nclass AnalyticsEventsFeature extends Feature<AnalyticsEventsFeatureOptions> {\n private options: AnalyticsEventsFeatureOptions = {};\n\n public constructor() {\n super('AnalyticsEventsFeature');\n }\n\n public getOptions(): AnalyticsEventsFeatureOptions {\n return this.options;\n }\n\n protected onLoad(options?: AnalyticsEventsFeatureOptions): void {\n this.options = options || {};\n\n // Load Meta Pixel script if pixelId is provided\n if (this.options.metaPixelId) {\n this.loadMetaPixel(this.options.metaPixelId);\n }\n\n AnalyticsEvents.initialize({\n hotelId: this.options.hotelId,\n currency: this.options.currency,\n firePixelEvents: this.options.firePixelEvents,\n debug: this.options.debug,\n });\n }\n\n private async loadMetaPixel(pixelId: string) {\n if (typeof window === 'undefined') return;\n\n const w = window as any;\n\n // Don't re-initialize if already loaded\n if (w.fbq) return;\n\n // Initialize fbq function (Meta's official snippet adapted for modern JS)\n const n: any = (w.fbq = (...args: any[]) => {\n n.callMethod ? n.callMethod(...args) : n.queue.push(args);\n });\n\n if (!w._fbq) w._fbq = n;\n n.push = n;\n n.loaded = true;\n n.version = '2.0';\n n.queue = [];\n\n try {\n await RoomstayThemeEngine.loadScript('https://connect.facebook.net/en_US/fbevents.js', 'meta-pixel');\n\n // Initialize pixel and fire PageView\n w.fbq('init', pixelId);\n w.fbq('track', 'PageView');\n\n if (this.options.debug) {\n console.log('[AnalyticsEventsFeature] Meta Pixel loaded with ID:', pixelId);\n }\n } catch (error) {\n if (this.options.debug) {\n console.log('[AnalyticsEventsFeature] Failed to load Meta Pixel script:', error);\n }\n }\n }\n\n protected onUnLoad(): void {\n this.options = {};\n }\n}\n\nexport default new AnalyticsEventsFeature();\n"]}
|
|
1
|
+
{"version":3,"file":"AnalyticsEventsFeature.js","sourceRoot":"/","sources":["src/providers/feature/AnalyticsEventsFeature.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;AAEH,0FAAkE;AAClE,6FAAqE;AAErE,uCAAoC;AAUpC,MAAM,sBAAuB,SAAQ,iBAAsC;IAGvE;QACI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAH5B,YAAO,GAAkC,EAAE,CAAC;IAIpD,CAAC;IAEM,UAAU;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAES,MAAM,CAAC,OAAuC;QACpD,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QAE7B,gDAAgD;QAChD,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACjD,CAAC;QAED,yBAAe,CAAC,UAAU,CAAC;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YAC7B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC/B,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;YACrC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe;YAC7C,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;SAC5B,CAAC,CAAC;IACP,CAAC;IAEa,aAAa,CAAC,OAAe;;YACvC,IAAI,OAAO,MAAM,KAAK,WAAW;gBAAE,OAAO;YAE1C,MAAM,CAAC,GAAG,MAAa,CAAC;YAExB,wCAAwC;YACxC,IAAI,CAAC,CAAC,GAAG;gBAAE,OAAO;YAElB,0EAA0E;YAC1E,MAAM,CAAC,GAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE;gBACvC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,CAAC,CAAC,IAAI;gBAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;YACxB,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;YACX,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAEb,IAAI,CAAC;gBACD,MAAM,6BAAmB,CAAC,UAAU,CAAC,gDAAgD,EAAE,YAAY,CAAC,CAAC;gBAErG,qCAAqC;gBACrC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACvB,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;gBAE3B,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBACrB,OAAO,CAAC,GAAG,CAAC,qDAAqD,EAAE,OAAO,CAAC,CAAC;gBAChF,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBACrB,OAAO,CAAC,GAAG,CAAC,4DAA4D,EAAE,KAAK,CAAC,CAAC;gBACrF,CAAC;YACL,CAAC;QACL,CAAC;KAAA;IAES,QAAQ;QACd,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACtB,CAAC;CACJ;AAED,kBAAe,IAAI,sBAAsB,EAAE,CAAC","sourcesContent":["/**\n * Analytics Events Feature\n *\n * Used for Meta CAPI integration and Meta Pixel client-side tracking.\n */\n\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport AnalyticsEvents from '@/util/AnalyticsEvents/AnalyticsEvents';\n\nimport { Feature } from './Feature';\n\nexport interface AnalyticsEventsFeatureOptions {\n hotelId?: string;\n currency?: string;\n metaPixelId?: string; // Meta Pixel ID to load the pixel script\n firePixelEvents?: boolean; // Fire Meta Pixel events too\n debug?: boolean; // Log events to console\n}\n\nclass AnalyticsEventsFeature extends Feature<AnalyticsEventsFeatureOptions> {\n private options: AnalyticsEventsFeatureOptions = {};\n\n public constructor() {\n super('AnalyticsEventsFeature');\n }\n\n public getOptions(): AnalyticsEventsFeatureOptions {\n return this.options;\n }\n\n protected onLoad(options?: AnalyticsEventsFeatureOptions): void {\n this.options = options || {};\n\n // Load Meta Pixel script if pixelId is provided\n if (this.options.metaPixelId) {\n this.loadMetaPixel(this.options.metaPixelId);\n }\n\n AnalyticsEvents.initialize({\n hotelId: this.options.hotelId,\n currency: this.options.currency,\n metaPixelId: this.options.metaPixelId,\n firePixelEvents: this.options.firePixelEvents,\n debug: this.options.debug,\n });\n }\n\n private async loadMetaPixel(pixelId: string) {\n if (typeof window === 'undefined') return;\n\n const w = window as any;\n\n // Don't re-initialize if already loaded\n if (w.fbq) return;\n\n // Initialize fbq function (Meta's official snippet adapted for modern JS)\n const n: any = (w.fbq = (...args: any[]) => {\n n.callMethod ? n.callMethod(...args) : n.queue.push(args);\n });\n\n if (!w._fbq) w._fbq = n;\n n.push = n;\n n.loaded = true;\n n.version = '2.0';\n n.queue = [];\n\n try {\n await RoomstayThemeEngine.loadScript('https://connect.facebook.net/en_US/fbevents.js', 'meta-pixel');\n\n // Initialize pixel and fire PageView\n w.fbq('init', pixelId);\n w.fbq('track', 'PageView');\n\n if (this.options.debug) {\n console.log('[AnalyticsEventsFeature] Meta Pixel loaded with ID:', pixelId);\n }\n } catch (error) {\n if (this.options.debug) {\n console.log('[AnalyticsEventsFeature] Failed to load Meta Pixel script:', error);\n }\n }\n }\n\n protected onUnLoad(): void {\n this.options = {};\n }\n}\n\nexport default new AnalyticsEventsFeature();\n"]}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Analytics Events Utility
|
|
3
3
|
*/
|
|
4
4
|
import { ReservationsDTO } from '@roomstay/core';
|
|
5
|
+
import BasketAddonRow from '../../models/BasketAddonRow';
|
|
5
6
|
import BasketRow from '../../models/BasketRow';
|
|
6
7
|
/**
|
|
7
8
|
* Configuration for AnalyticsEvents
|
|
@@ -9,6 +10,7 @@ import BasketRow from '../../models/BasketRow';
|
|
|
9
10
|
export interface AnalyticsEventsConfig {
|
|
10
11
|
hotelId?: string;
|
|
11
12
|
currency?: string;
|
|
13
|
+
metaPixelId?: string;
|
|
12
14
|
firePixelEvents?: boolean;
|
|
13
15
|
debug?: boolean;
|
|
14
16
|
}
|
|
@@ -33,15 +35,19 @@ declare class AnalyticsEvents {
|
|
|
33
35
|
/**
|
|
34
36
|
* Track View/Checkout event
|
|
35
37
|
*/
|
|
36
|
-
trackInitiateCheckout(basketRows: BasketRow[]): void;
|
|
38
|
+
trackInitiateCheckout(basketRows: BasketRow[], addonRows?: BasketAddonRow[]): void;
|
|
37
39
|
/**
|
|
38
|
-
* Track Basket/Add event
|
|
40
|
+
* Track Basket/Add event (room)
|
|
39
41
|
*/
|
|
40
42
|
trackAddToCart(basketRow: BasketRow): void;
|
|
43
|
+
/**
|
|
44
|
+
* Track Basket/AddAddon event (addon)
|
|
45
|
+
*/
|
|
46
|
+
trackAddonAddToCart(addonRow: BasketAddonRow): void;
|
|
41
47
|
/**
|
|
42
48
|
* Track Booking/Committed event
|
|
43
49
|
*/
|
|
44
|
-
trackPurchase(reservation: ReservationsDTO, basketRows: BasketRow[]): void;
|
|
50
|
+
trackPurchase(reservation: ReservationsDTO, basketRows: BasketRow[], addonRows?: BasketAddonRow[]): void;
|
|
45
51
|
/**
|
|
46
52
|
* Set external user ID (e.g. member portal ID)
|
|
47
53
|
*/
|
|
@@ -17,6 +17,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
const core_1 = require("@roomstay/core");
|
|
19
19
|
const AnalyticsEventsAPI_1 = require("../../api/AnalyticsEventsAPI");
|
|
20
|
+
const AddAddonToCartEvent_1 = require("../../events/actions/AddAddonToCartEvent");
|
|
20
21
|
const AddToCartEvent_1 = require("../../events/actions/AddToCartEvent");
|
|
21
22
|
const RoomstayEventManager_1 = __importDefault(require("../../events/RoomstayEventManager"));
|
|
22
23
|
const CommittedBookingEvent_1 = require("../../events/views/CommittedBookingEvent");
|
|
@@ -29,7 +30,7 @@ function isValidSession(obj) {
|
|
|
29
30
|
if (!obj || typeof obj !== 'object')
|
|
30
31
|
return false;
|
|
31
32
|
const session = obj;
|
|
32
|
-
return typeof session.sessionId === 'string' && typeof session.createdAt === 'number' && typeof session.
|
|
33
|
+
return typeof session.sessionId === 'string' && typeof session.createdAt === 'number' && typeof session.hotelFrontendId === 'string' && typeof session.currency === 'string';
|
|
33
34
|
}
|
|
34
35
|
const STORAGE_KEY_PREFIX = 'roomstay-analytics-session';
|
|
35
36
|
const SESSION_MAX_AGE = 12 * 60 * 60 * 1000; // 12 hours
|
|
@@ -45,11 +46,17 @@ function generateUUID() {
|
|
|
45
46
|
/**
|
|
46
47
|
* Fire a Meta Pixel event with Event ID for deduplication
|
|
47
48
|
*/
|
|
48
|
-
function firePixelEvent(eventName, eventId, customData) {
|
|
49
|
+
function firePixelEvent(eventName, eventId, customData, userData, pixelId) {
|
|
49
50
|
const metaPixelIsAvailable = typeof window !== 'undefined' && typeof window.fbq === 'function';
|
|
50
51
|
if (!metaPixelIsAvailable)
|
|
51
52
|
return;
|
|
52
53
|
try {
|
|
54
|
+
// Re-init with user data before firing the event. I can't find any other way of achieving this.
|
|
55
|
+
// Meta seems to assume you already have all the user data when the pixel is initially loaded,
|
|
56
|
+
// I guess this is more of an issue with SPA apps.
|
|
57
|
+
if (userData && pixelId) {
|
|
58
|
+
window.fbq('init', pixelId, userData);
|
|
59
|
+
}
|
|
53
60
|
window.fbq('track', eventName, customData, { eventID: eventId });
|
|
54
61
|
}
|
|
55
62
|
catch (error) {
|
|
@@ -141,15 +148,19 @@ class AnalyticsEvents {
|
|
|
141
148
|
return;
|
|
142
149
|
// View/Checkout event
|
|
143
150
|
RoomstayEventManager_1.default.addEvent(StepCheckoutViewEvent_1.StepCheckoutViewEvent, (event) => __awaiter(this, void 0, void 0, function* () {
|
|
144
|
-
this.trackInitiateCheckout(event.basketRows);
|
|
151
|
+
this.trackInitiateCheckout(event.basketRows, event.basketAddonRows);
|
|
145
152
|
}), 'analytics-events-checkout');
|
|
146
|
-
// Basket/Add event
|
|
153
|
+
// Basket/Add event (room)
|
|
147
154
|
RoomstayEventManager_1.default.addEvent(AddToCartEvent_1.AddToCartEvent, (event) => __awaiter(this, void 0, void 0, function* () {
|
|
148
155
|
this.trackAddToCart(event.basketRow);
|
|
149
156
|
}), 'analytics-events-add-to-cart');
|
|
157
|
+
// Basket/AddAddon event (addon)
|
|
158
|
+
RoomstayEventManager_1.default.addEvent(AddAddonToCartEvent_1.AddAddonToCartEvent, (event) => __awaiter(this, void 0, void 0, function* () {
|
|
159
|
+
this.trackAddonAddToCart(event.basketAddonRow);
|
|
160
|
+
}), 'analytics-events-add-addon');
|
|
150
161
|
// Booking/Committed event
|
|
151
162
|
RoomstayEventManager_1.default.addEvent(CommittedBookingEvent_1.CommittedBookingEvent, (event) => __awaiter(this, void 0, void 0, function* () {
|
|
152
|
-
this.trackPurchase(event.reservation, event.basketRows);
|
|
163
|
+
this.trackPurchase(event.reservation, event.basketRows, event.basketAddonRows);
|
|
153
164
|
}), 'analytics-events-purchase');
|
|
154
165
|
this.listenersRegistered = true;
|
|
155
166
|
this.log('Event listeners registered');
|
|
@@ -157,17 +168,19 @@ class AnalyticsEvents {
|
|
|
157
168
|
/**
|
|
158
169
|
* Track View/Checkout event
|
|
159
170
|
*/
|
|
160
|
-
trackInitiateCheckout(basketRows) {
|
|
171
|
+
trackInitiateCheckout(basketRows, addonRows) {
|
|
161
172
|
const session = this.getValidatedSession();
|
|
162
173
|
if (!session)
|
|
163
174
|
return;
|
|
164
175
|
const { currency } = session;
|
|
165
176
|
const items = (0, helpers_1.serializeBasketRows)(basketRows);
|
|
177
|
+
const addons = (addonRows === null || addonRows === void 0 ? void 0 : addonRows.length) ? (0, helpers_1.serializeBasketAddonRows)(addonRows) : undefined;
|
|
166
178
|
// Build event data in Roomstay format
|
|
167
179
|
const eventData = {
|
|
168
180
|
items,
|
|
181
|
+
addons,
|
|
169
182
|
currency,
|
|
170
|
-
totalValue: (0, helpers_1.calculateTotalValue)(items),
|
|
183
|
+
totalValue: (0, helpers_1.calculateTotalValue)(items, addons),
|
|
171
184
|
};
|
|
172
185
|
const payload = this.createEventPayload(core_1.ERoomstayEventName.ViewCheckout, eventData);
|
|
173
186
|
// Fire Meta Pixel with transformed data
|
|
@@ -179,7 +192,7 @@ class AnalyticsEvents {
|
|
|
179
192
|
this.log('View/Checkout tracked:', payload);
|
|
180
193
|
}
|
|
181
194
|
/**
|
|
182
|
-
* Track Basket/Add event
|
|
195
|
+
* Track Basket/Add event (room)
|
|
183
196
|
*/
|
|
184
197
|
trackAddToCart(basketRow) {
|
|
185
198
|
const session = this.getValidatedSession();
|
|
@@ -200,30 +213,55 @@ class AnalyticsEvents {
|
|
|
200
213
|
this.sendEvent(payload);
|
|
201
214
|
this.log('Basket/Add tracked:', payload);
|
|
202
215
|
}
|
|
216
|
+
/**
|
|
217
|
+
* Track Basket/AddAddon event (addon)
|
|
218
|
+
*/
|
|
219
|
+
trackAddonAddToCart(addonRow) {
|
|
220
|
+
const session = this.getValidatedSession();
|
|
221
|
+
if (!session)
|
|
222
|
+
return;
|
|
223
|
+
const { currency } = session;
|
|
224
|
+
// Build event data in Roomstay format
|
|
225
|
+
const eventData = {
|
|
226
|
+
addon: (0, helpers_1.serializeBasketAddonRow)(addonRow),
|
|
227
|
+
currency,
|
|
228
|
+
};
|
|
229
|
+
const payload = this.createEventPayload(core_1.ERoomstayEventName.BasketAddAddon, eventData);
|
|
230
|
+
// Fire Meta Pixel with transformed data
|
|
231
|
+
if (this.config.firePixelEvents) {
|
|
232
|
+
const metaEventData = (0, core_1.transformToMetaEventData)(eventData);
|
|
233
|
+
firePixelEvent('AddToCart', payload.eventId, metaEventData);
|
|
234
|
+
}
|
|
235
|
+
this.sendEvent(payload);
|
|
236
|
+
this.log('Basket/AddAddon tracked:', payload);
|
|
237
|
+
}
|
|
203
238
|
/**
|
|
204
239
|
* Track Booking/Committed event
|
|
205
240
|
*/
|
|
206
|
-
trackPurchase(reservation, basketRows) {
|
|
241
|
+
trackPurchase(reservation, basketRows, addonRows) {
|
|
207
242
|
const session = this.getValidatedSession();
|
|
208
243
|
if (!session)
|
|
209
244
|
return;
|
|
210
245
|
const { currency } = session;
|
|
211
246
|
const items = (0, helpers_1.serializeBasketRows)(basketRows);
|
|
247
|
+
const addons = (addonRows === null || addonRows === void 0 ? void 0 : addonRows.length) ? (0, helpers_1.serializeBasketAddonRows)(addonRows) : undefined;
|
|
212
248
|
// Build event data in Roomstay format with embedded guest data
|
|
213
249
|
const eventData = {
|
|
214
250
|
items,
|
|
251
|
+
addons,
|
|
215
252
|
currency,
|
|
216
|
-
totalValue: (0, helpers_1.calculateTotalValue)(items),
|
|
253
|
+
totalValue: (0, helpers_1.calculateTotalValue)(items, addons),
|
|
217
254
|
roomstayId: reservation.roomstayId,
|
|
218
255
|
itineraryNumber: reservation.itineraryNumber,
|
|
219
256
|
reservationNumbers: reservation.reservations.map((r) => r.reservationNumber),
|
|
220
257
|
guest: Object.assign(Object.assign({}, (0, helpers_1.extractGuestData)(reservation)), { externalId: session.externalId }),
|
|
221
258
|
};
|
|
222
259
|
const payload = this.createEventPayload(core_1.ERoomstayEventName.BookingCommitted, eventData);
|
|
223
|
-
// Fire Meta Pixel with transformed data
|
|
260
|
+
// Fire Meta Pixel with transformed event data and user data
|
|
224
261
|
if (this.config.firePixelEvents) {
|
|
225
262
|
const metaEventData = (0, core_1.transformToMetaEventData)(eventData);
|
|
226
|
-
|
|
263
|
+
const metaUserData = (0, core_1.transformToMetaUserData)(eventData.guest);
|
|
264
|
+
firePixelEvent('Purchase', payload.eventId, metaEventData, metaUserData, this.config.metaPixelId);
|
|
227
265
|
}
|
|
228
266
|
this.sendEvent(payload);
|
|
229
267
|
this.log('Booking/Committed tracked:', payload);
|
|
@@ -263,6 +301,7 @@ class AnalyticsEvents {
|
|
|
263
301
|
hotelFrontendId: (_b = session === null || session === void 0 ? void 0 : session.hotelFrontendId) !== null && _b !== void 0 ? _b : '',
|
|
264
302
|
fbc: (session === null || session === void 0 ? void 0 : session.fbc) || undefined,
|
|
265
303
|
fbp: (session === null || session === void 0 ? void 0 : session.fbp) || undefined,
|
|
304
|
+
sourceUrl: typeof window !== 'undefined' ? window.location.href : undefined,
|
|
266
305
|
eventData,
|
|
267
306
|
};
|
|
268
307
|
}
|