Merged in fix/SW-1631-rate-terms-modal (pull request #1699)
fix(SW-1631): add rate terms modal * fix(SW-1631): add rate terms modal Approved-by: Simon.Emanuelsson
This commit is contained in:
@@ -60,6 +60,24 @@ export default function Campaign({
|
||||
)
|
||||
}
|
||||
|
||||
const rateTermDetails = product.rateDefinitionMember
|
||||
? [
|
||||
{
|
||||
title: product.rateDefinition.title,
|
||||
terms: product.rateDefinition.generalTerms,
|
||||
},
|
||||
{
|
||||
title: product.rateDefinitionMember.title,
|
||||
terms: product.rateDefinition.generalTerms,
|
||||
},
|
||||
]
|
||||
: [
|
||||
{
|
||||
title: product.rateDefinition.title,
|
||||
terms: product.rateDefinition.generalTerms,
|
||||
},
|
||||
]
|
||||
|
||||
const isSelected = isSelectedPriceProduct(
|
||||
product,
|
||||
selectedRate,
|
||||
@@ -149,6 +167,7 @@ export default function Campaign({
|
||||
}
|
||||
: undefined
|
||||
}
|
||||
rateTermDetails={rateTermDetails}
|
||||
value={product.public.rateCode}
|
||||
/>
|
||||
)
|
||||
|
||||
@@ -43,6 +43,23 @@ export default function Code({
|
||||
} else {
|
||||
bannerText = `${bookingCode} ∙ ${intl.formatMessage({ id: "Breakfast excluded" })}`
|
||||
}
|
||||
const rateTermDetails = product.rateDefinitionMember
|
||||
? [
|
||||
{
|
||||
title: product.rateDefinition.title,
|
||||
terms: product.rateDefinition.generalTerms,
|
||||
},
|
||||
{
|
||||
title: product.rateDefinitionMember.title,
|
||||
terms: product.rateDefinition.generalTerms,
|
||||
},
|
||||
]
|
||||
: [
|
||||
{
|
||||
title: product.rateDefinition.title,
|
||||
terms: product.rateDefinition.generalTerms,
|
||||
},
|
||||
]
|
||||
|
||||
if ("corporateCheque" in product) {
|
||||
const { localPrice, rateCode } = product.corporateCheque
|
||||
@@ -71,6 +88,7 @@ export default function Code({
|
||||
unit: localPrice.currency ?? "",
|
||||
}}
|
||||
rateTitle={rateTitles[product.rate].title}
|
||||
rateTermDetails={rateTermDetails}
|
||||
value={rateCode}
|
||||
/>
|
||||
)
|
||||
@@ -93,6 +111,7 @@ export default function Code({
|
||||
unit: intl.formatMessage({ id: "Voucher" }).toUpperCase(),
|
||||
}}
|
||||
rateTitle={rateTitles[product.rate].title}
|
||||
rateTermDetails={rateTermDetails}
|
||||
value={rateCode}
|
||||
/>
|
||||
)
|
||||
@@ -151,6 +170,7 @@ export default function Code({
|
||||
unit: `${localPrice.currency}/${night}`,
|
||||
}}
|
||||
rateTitle={rateTitles[product.rate].title}
|
||||
rateTermDetails={rateTermDetails}
|
||||
value={rateCode}
|
||||
/>
|
||||
)
|
||||
|
||||
@@ -76,6 +76,13 @@ export default function Redemptions({
|
||||
? `${rewardNight} ∙ ${breakfastIncluded}`
|
||||
: `${rewardNight} ∙ ${breakfastExcluded}`
|
||||
|
||||
const rateTermDetails = [
|
||||
{
|
||||
title: rateTitles[firstRedemption.rate].title,
|
||||
terms: firstRedemption.rateDefinition.generalTerms,
|
||||
},
|
||||
]
|
||||
|
||||
return (
|
||||
<PointsRateCard
|
||||
key={firstRedemption.rate}
|
||||
@@ -84,6 +91,7 @@ export default function Redemptions({
|
||||
paymentTerm={rateTitles[firstRedemption.rate].paymentTerm}
|
||||
rates={rates}
|
||||
rateTitle={rateTitles[firstRedemption.rate].title}
|
||||
rateTermDetails={rateTermDetails}
|
||||
selectedRate={selectedRateCode}
|
||||
isNotEnoughPoints={notEnoughPoints}
|
||||
notEnoughPointsText={intl.formatMessage({ id: "Not enough points" })}
|
||||
|
||||
@@ -145,6 +145,24 @@ export default function Regular({
|
||||
roomTypeCode
|
||||
)
|
||||
|
||||
const rateTermDetails = product.rateDefinitionMember
|
||||
? [
|
||||
{
|
||||
title: product.rateDefinition.title,
|
||||
terms: product.rateDefinition.generalTerms,
|
||||
},
|
||||
{
|
||||
title: product.rateDefinitionMember.title,
|
||||
terms: product.rateDefinition.generalTerms,
|
||||
},
|
||||
]
|
||||
: [
|
||||
{
|
||||
title: product.rateDefinition.title,
|
||||
terms: product.rateDefinition.generalTerms,
|
||||
},
|
||||
]
|
||||
|
||||
return (
|
||||
<RegularRateCard
|
||||
{...rates}
|
||||
@@ -157,6 +175,7 @@ export default function Regular({
|
||||
paymentTerm={rateTitles[product.rate].paymentTerm}
|
||||
rateTitle={rateTitles[product.rate].title}
|
||||
value={rateCode}
|
||||
rateTermDetails={rateTermDetails}
|
||||
/>
|
||||
)
|
||||
})
|
||||
|
||||
@@ -57,7 +57,6 @@ export default function Rates({
|
||||
petRoomPackageSelected && petRoomPackage ? petRoomPackage : undefined,
|
||||
roomTypeCode,
|
||||
}
|
||||
|
||||
const showAllRates = selectedFilter === BookingCodeFilterEnum.All
|
||||
const hasBookingCodeRates = !!(campaign.length || code.length)
|
||||
const hasRegularRates = !!regular.length
|
||||
|
||||
@@ -338,12 +338,15 @@ export const roomsAvailabilitySchema = z
|
||||
...product,
|
||||
public: null,
|
||||
})
|
||||
if (rateDetailsMember) {
|
||||
breakfastIncludedMember.push(
|
||||
rateDetailsMember.breakfastIncluded
|
||||
)
|
||||
}
|
||||
|
||||
if (rateDetails && rateCode) {
|
||||
if (rateDetailsMember) {
|
||||
breakfastIncludedMember.push(
|
||||
rateDetailsMember.breakfastIncluded
|
||||
)
|
||||
rateDetails.rateDefinitionMember =
|
||||
rateDetailsMember.rateDefinition
|
||||
}
|
||||
const rateDefinition = findRateDefintion(rateCode)
|
||||
if (rateDefinition) {
|
||||
switch (rateDefinition.rateType) {
|
||||
|
||||
@@ -18,7 +18,7 @@ const baseProductSchema = z.object({
|
||||
breakfastIncluded: z.boolean().default(false),
|
||||
// Used to set the rate that we use to chose titles etc.
|
||||
rate: z.enum(["change", "flex", "save"]).default("save"),
|
||||
rateDefinition: rateDefinitionSchema.nullish().transform((val) =>
|
||||
rateDefinition: rateDefinitionSchema.optional().transform((val) =>
|
||||
val
|
||||
? val
|
||||
: {
|
||||
@@ -36,6 +36,7 @@ const baseProductSchema = z.object({
|
||||
title: "",
|
||||
}
|
||||
),
|
||||
rateDefinitionMember: rateDefinitionSchema.optional(),
|
||||
})
|
||||
|
||||
function mapBaseProduct(baseProduct: typeof baseProductSchema._type) {
|
||||
@@ -44,6 +45,7 @@ function mapBaseProduct(baseProduct: typeof baseProductSchema._type) {
|
||||
breakfastIncluded: baseProduct.breakfastIncluded,
|
||||
rate: baseProduct.rate,
|
||||
rateDefinition: baseProduct.rateDefinition,
|
||||
rateDefinitionMember: baseProduct.rateDefinitionMember,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,12 +100,14 @@ export const redemptionsProduct = z
|
||||
breakfastIncluded,
|
||||
rate,
|
||||
rateDefinition,
|
||||
rateDefinitionMember,
|
||||
...redemption
|
||||
}) => ({
|
||||
bookingCode,
|
||||
breakfastIncluded,
|
||||
rate,
|
||||
rateDefinition,
|
||||
rateDefinitionMember,
|
||||
redemption,
|
||||
})
|
||||
)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { nullableStringValidator } from "@/utils/zod/stringValidator"
|
||||
import { z } from "zod"
|
||||
|
||||
import { nullableStringValidator } from "@/utils/zod/stringValidator"
|
||||
|
||||
export const rateDefinitionSchema = z.object({
|
||||
breakfastIncluded: z.boolean(),
|
||||
cancellationRule: z.string(),
|
||||
|
||||
@@ -8,11 +8,9 @@ export interface RatesProps {
|
||||
roomConfiguration: RoomConfiguration
|
||||
}
|
||||
|
||||
export interface SharedRateCardProps extends Pick<
|
||||
RoomConfiguration,
|
||||
"roomTypeCode"
|
||||
> {
|
||||
export interface SharedRateCardProps
|
||||
extends Pick<RoomConfiguration, "roomTypeCode"> {
|
||||
handleSelectRate: (product: Product) => void
|
||||
nights: number
|
||||
petRoomPackage: NonNullable<Packages>[number] | undefined
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user