feat(SW-2470): render correct terms on Enter details

This commit is contained in:
Michael Zetterberg
2025-04-25 16:40:51 +02:00
parent 2366b4e785
commit 9aa70f0b37
5 changed files with 59 additions and 44 deletions

View File

@@ -186,6 +186,13 @@ export default function SummaryUI({
room.roomPrice.perStay.local.currency room.roomPrice.perStay.local.currency
) )
let rateDetails = room.rateDetails
if (room.memberRateDetails) {
if (isMember || room.guest.join) {
rateDetails = room.memberRateDetails
}
}
return ( return (
<Fragment key={idx}> <Fragment key={idx}>
<div <div
@@ -229,49 +236,52 @@ export default function SummaryUI({
<Caption color="uiTextMediumContrast"> <Caption color="uiTextMediumContrast">
{room.cancellationText} {room.cancellationText}
</Caption> </Caption>
<Modal {rateDetails ? (
trigger={ <Modal
<Button trigger={
variant="Text" <Button
typography="Body/Supporting text (caption)/smBold" variant="Text"
wrapping={false} typography="Body/Supporting text (caption)/smBold"
> wrapping={false}
{intl.formatMessage({ >
defaultMessage: "Rate details", {intl.formatMessage({
defaultMessage: "Rate details",
})}
<MaterialIcon
icon="chevron_right"
size={20}
color="CurrentColor"
/>
</Button>
}
title={
room.rateTitle ? room.rateTitle : room.cancellationText
}
subtitle={
room.rateTitle ? room.cancellationText : undefined
}
>
<div className={styles.terms}>
{rateDetails.map((info) => {
return (
<Body
key={info}
color="uiTextHighContrast"
className={styles.termsText}
>
<MaterialIcon
icon="check"
color="Icon/Feedback/Success"
size={20}
className={styles.termsIcon}
/>
{info}
</Body>
)
})} })}
<MaterialIcon </div>
icon="chevron_right" </Modal>
size={20} ) : null}
color="CurrentColor"
/>
</Button>
}
title={
room.rateTitle ? room.rateTitle : room.cancellationText
}
subtitle={room.rateTitle ? room.cancellationText : undefined}
>
<div className={styles.terms}>
{room.rateDetails?.map((info) => {
debugger
return (
<Body
key={info}
color="uiTextHighContrast"
className={styles.termsText}
>
<MaterialIcon
icon="check"
color="Icon/Feedback/Success"
size={20}
className={styles.termsIcon}
/>
{info}
</Body>
)
})}
</div>
</Modal>
</div> </div>
{room.roomFeatures {room.roomFeatures
? room.roomFeatures.map((feature) => ( ? room.roomFeatures.map((feature) => (

View File

@@ -42,6 +42,7 @@ export default function EnterDetailsProvider({
breakfastIncluded: !!room.breakfastIncluded, breakfastIncluded: !!room.breakfastIncluded,
cancellationText: room.cancellationText, cancellationText: room.cancellationText,
rateDetails: room.rateDetails, rateDetails: room.rateDetails,
memberRateDetails: room.memberRateDetails,
rateTitle: room.rateTitle, rateTitle: room.rateTitle,
roomFeatures: room.packages, roomFeatures: room.packages,
roomRate: room.roomRate, roomRate: room.roomRate,
@@ -56,6 +57,7 @@ export default function EnterDetailsProvider({
} }
: undefined, : undefined,
mustBeGuaranteed: room.mustBeGuaranteed, mustBeGuaranteed: room.mustBeGuaranteed,
memberMustBeGuaranteed: room.memberMustBeGuaranteed,
isFlexRate: room.isFlexRate, isFlexRate: room.isFlexRate,
})), })),
vat, vat,

View File

@@ -231,7 +231,7 @@ export const hotelQueryRouter = router({
cancellationText: rateDefinition.cancellationText, cancellationText: rateDefinition.cancellationText,
isAvailable: selectedRoom.status === AvailabilityEnum.Available, isAvailable: selectedRoom.status === AvailabilityEnum.Available,
isFlexRate: product.rate === RateEnum.flex, isFlexRate: product.rate === RateEnum.flex,
memberMustBeGuaranteed: !!memberRateDefinition?.mustBeGuaranteed, memberMustBeGuaranteed: memberRateDefinition?.mustBeGuaranteed,
mustBeGuaranteed: rateDefinition.mustBeGuaranteed, mustBeGuaranteed: rateDefinition.mustBeGuaranteed,
packages: room.packages.filter((pkg) => packages: room.packages.filter((pkg) =>
selectedPackages?.includes(pkg.code) selectedPackages?.includes(pkg.code)
@@ -239,6 +239,7 @@ export const hotelQueryRouter = router({
rate: product.rate, rate: product.rate,
rateDefinitionTitle: rateDefinition.title, rateDefinitionTitle: rateDefinition.title,
rateDetails: rateDefinition.generalTerms, rateDetails: rateDefinition.generalTerms,
memberRateDetails: memberRateDefinition?.generalTerms,
// Send rate Title when it is a booking code rate // Send rate Title when it is a booking code rate
rateTitle: rateTitle:
rateDefinition.rateType !== RateTypeEnum.Regular rateDefinition.rateType !== RateTypeEnum.Regular

View File

@@ -14,6 +14,7 @@ export interface Room {
rate: RateEnum rate: RateEnum
rateDefinitionTitle: string rateDefinitionTitle: string
rateDetails: string[] rateDetails: string[]
memberRateDetails?: string[]
rateTitle?: string rateTitle?: string
rateType: string rateType: string
roomRate: RoomRate roomRate: RoomRate

View File

@@ -31,13 +31,14 @@ export interface InitialRoomData {
isAvailable: boolean isAvailable: boolean
isFlexRate: boolean isFlexRate: boolean
mustBeGuaranteed: boolean mustBeGuaranteed: boolean
memberMustBeGuaranteed?: boolean
rateDetails: string[] | undefined rateDetails: string[] | undefined
memberRateDetails?: string[]
rateTitle?: string rateTitle?: string
roomFeatures: Packages | null roomFeatures: Packages | null
roomRate: RoomRate roomRate: RoomRate
roomType: string roomType: string
roomTypeCode: string roomTypeCode: string
memberMustBeGuaranteed?: boolean
} }
export type RoomStep = { export type RoomStep = {