Merged in fix/SW-2991-logged-in-ui-campaign-rate-card (pull request #2394)
fix(SW-2991): new rate card for logged in users * fix(SW-2991): new rate card for logged in users Approved-by: Simon.Emanuelsson
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
"use client"
|
"use client"
|
||||||
|
import { useSession } from "next-auth/react"
|
||||||
import { useIntl } from "react-intl"
|
import { useIntl } from "react-intl"
|
||||||
|
|
||||||
import CampaignRateCard from "@scandic-hotels/design-system/CampaignRateCard"
|
import CampaignRateCard from "@scandic-hotels/design-system/CampaignRateCard"
|
||||||
@@ -10,6 +11,7 @@ import {
|
|||||||
} from "@/components/HotelReservation/utils"
|
} from "@/components/HotelReservation/utils"
|
||||||
import { useRoomContext } from "@/contexts/SelectRate/Room"
|
import { useRoomContext } from "@/contexts/SelectRate/Room"
|
||||||
import useRateTitles from "@/hooks/booking/useRateTitles"
|
import useRateTitles from "@/hooks/booking/useRateTitles"
|
||||||
|
import { isValidClientSession } from "@/utils/clientSession"
|
||||||
|
|
||||||
import { isSelectedPriceProduct } from "./isSelected"
|
import { isSelectedPriceProduct } from "./isSelected"
|
||||||
import { calculatePricePerNightPriceProduct } from "./totalPricePerNight"
|
import { calculatePricePerNightPriceProduct } from "./totalPricePerNight"
|
||||||
@@ -32,6 +34,8 @@ export default function Campaign({
|
|||||||
const { roomNr, selectedFilter, selectedPackages, selectedRate } =
|
const { roomNr, selectedFilter, selectedPackages, selectedRate } =
|
||||||
useRoomContext()
|
useRoomContext()
|
||||||
const rateTitles = useRateTitles()
|
const rateTitles = useRateTitles()
|
||||||
|
const { data: session } = useSession()
|
||||||
|
const isPrimaryRoomAndLoggedIn = isValidClientSession(session) && roomNr === 1
|
||||||
|
|
||||||
const isCampaignRate = campaign.some(
|
const isCampaignRate = campaign.some(
|
||||||
(c) =>
|
(c) =>
|
||||||
@@ -142,7 +146,9 @@ export default function Campaign({
|
|||||||
: undefined
|
: undefined
|
||||||
|
|
||||||
let approximateRatePrice = undefined
|
let approximateRatePrice = undefined
|
||||||
if (
|
if (isPrimaryRoomAndLoggedIn && pricePerNightMember) {
|
||||||
|
approximateRatePrice = pricePerNightMember.totalRequestedPrice
|
||||||
|
} else if (
|
||||||
pricePerNight.totalRequestedPrice &&
|
pricePerNight.totalRequestedPrice &&
|
||||||
pricePerNightMember?.totalRequestedPrice
|
pricePerNightMember?.totalRequestedPrice
|
||||||
) {
|
) {
|
||||||
@@ -161,7 +167,8 @@ export default function Campaign({
|
|||||||
unit: product.public.requestedPrice.currency,
|
unit: product.public.requestedPrice.currency,
|
||||||
}
|
}
|
||||||
: undefined
|
: undefined
|
||||||
|
const campaignMemberLabel =
|
||||||
|
product.rateDefinitionMember?.title || memberPriceMsg
|
||||||
return (
|
return (
|
||||||
<CampaignRateCard
|
<CampaignRateCard
|
||||||
key={product.rate}
|
key={product.rate}
|
||||||
@@ -169,9 +176,11 @@ export default function Campaign({
|
|||||||
bannerText={bannerText}
|
bannerText={bannerText}
|
||||||
handleChange={() => handleSelectRate(product)}
|
handleChange={() => handleSelectRate(product)}
|
||||||
isSelected={isSelected}
|
isSelected={isSelected}
|
||||||
isHighlightedRate={!!product.rateDefinition?.displayPriceRed}
|
isHighlightedRate={
|
||||||
|
!!product.rateDefinition?.displayPriceRed || isPrimaryRoomAndLoggedIn
|
||||||
|
}
|
||||||
memberRate={
|
memberRate={
|
||||||
pricePerNightMember
|
pricePerNightMember && !isPrimaryRoomAndLoggedIn
|
||||||
? {
|
? {
|
||||||
label: memberPriceMsg,
|
label: memberPriceMsg,
|
||||||
price: pricePerNightMember.totalPrice,
|
price: pricePerNightMember.totalPrice,
|
||||||
@@ -179,11 +188,24 @@ export default function Campaign({
|
|||||||
}
|
}
|
||||||
: undefined
|
: undefined
|
||||||
}
|
}
|
||||||
|
comparisonRate={
|
||||||
|
isPrimaryRoomAndLoggedIn
|
||||||
|
? {
|
||||||
|
price: pricePerNight.totalPrice,
|
||||||
|
unit: product.public.localPrice.currency,
|
||||||
|
}
|
||||||
|
: undefined
|
||||||
|
}
|
||||||
name={`rateCode-${roomNr}-${product.public.rateCode}`}
|
name={`rateCode-${roomNr}-${product.public.rateCode}`}
|
||||||
paymentTerm={rateTitles[product.rate].paymentTerm}
|
paymentTerm={rateTitles[product.rate].paymentTerm}
|
||||||
rate={{
|
rate={{
|
||||||
label: standardPriceMsg,
|
label: isPrimaryRoomAndLoggedIn
|
||||||
price: pricePerNight.totalPrice,
|
? campaignMemberLabel
|
||||||
|
: standardPriceMsg,
|
||||||
|
price:
|
||||||
|
isPrimaryRoomAndLoggedIn && pricePerNightMember
|
||||||
|
? pricePerNightMember.totalPrice
|
||||||
|
: pricePerNight.totalPrice,
|
||||||
unit: `${product.public.localPrice.currency}/${night}`,
|
unit: `${product.public.localPrice.currency}/${night}`,
|
||||||
}}
|
}}
|
||||||
rateTitle={rateTitles[product.rate].title}
|
rateTitle={rateTitles[product.rate].title}
|
||||||
|
|||||||
@@ -142,7 +142,9 @@ export default function CampaignRateCard({
|
|||||||
<div className={`${styles.rateRow} ${styles.comparisonRate}`}>
|
<div className={`${styles.rateRow} ${styles.comparisonRate}`}>
|
||||||
<Typography variant="Title/Subtitle/md">
|
<Typography variant="Title/Subtitle/md">
|
||||||
<p>
|
<p>
|
||||||
<span className={styles.strikethrough}>{rate.price}</span>{' '}
|
<span className={styles.strikethrough}>
|
||||||
|
{comparisonRate.price}
|
||||||
|
</span>{' '}
|
||||||
<Typography variant="Body/Supporting text (caption)/smBold">
|
<Typography variant="Body/Supporting text (caption)/smBold">
|
||||||
<span className={styles.strikethrough}>
|
<span className={styles.strikethrough}>
|
||||||
{comparisonRate.unit}
|
{comparisonRate.unit}
|
||||||
|
|||||||
Reference in New Issue
Block a user