Merged in fix/BOOK-584-red-price-strikethrough (pull request #3298)

fix(BOOK-584): show discounted if specialrate or member

* fix(BOOK-584): show discounted if specialrate or member


Approved-by: Anton Gunnarsson
This commit is contained in:
Bianca Widstam
2025-12-08 14:23:44 +00:00
parent f37f2a0f34
commit 200cf3f617
9 changed files with 45 additions and 45 deletions

View File

@@ -12,8 +12,8 @@ import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import { Typography } from "@scandic-hotels/design-system/Typography"
import { useEnterDetailsStore } from "../../../../../stores/enter-details"
import { isBookingCodeRate } from "../../../../SelectRate/RoomsContainer/RateSummary/utils"
import { formId } from "../../../Payment/PaymentClient"
import { isDiscounted } from "../../UI/utils"
import styles from "./bottomSheet.module.css"
@@ -63,10 +63,8 @@ export default function SummaryBottomSheet({
}
}, [isSummaryOpen, errorCode])
const containsBookingCodeRate = rooms.find(
(r) => r && isBookingCodeRate(r.room.roomRate)
)
const showDiscounted = containsBookingCodeRate || isUserLoggedIn
const showDiscounted =
isUserLoggedIn || rooms.some((room) => isDiscounted(room.room))
return (
<div className={styles.wrapper} data-open={isSummaryOpen}>

View File

@@ -13,6 +13,7 @@ import { ChildBedMapEnum } from "@scandic-hotels/trpc/enums/childBedMapEnum"
import { getRoomFeatureDescription } from "../../../../../utils/getRoomFeatureDescription"
import { SummaryBreakfast } from "../../../../SummaryBreakfast"
import { isDiscounted } from "../utils"
import styles from "./room.module.css"
@@ -74,13 +75,7 @@ export default function Room({
room.roomRate.member
)
const isSpecialRate =
"corporateCheque" in room.roomRate ||
"redemption" in room.roomRate ||
"voucher" in room.roomRate ||
room.roomRate.bookingCode ||
room.roomRate.rateDefinition.isCampaignRate
const showDiscounted = isSpecialRate || showMemberPrice
const showDiscounted = isFirstRoomMember || isDiscounted(room)
const adultsMsg = intl.formatMessage(
{

View File

@@ -18,11 +18,10 @@ import { Typography } from "@scandic-hotels/design-system/Typography"
import useLang from "../../../../hooks/useLang"
import { useEnterDetailsStore } from "../../../../stores/enter-details"
import PriceDetailsModal from "../../../PriceDetailsModal"
import { isBookingCodeRate } from "../../../SelectRate/RoomsContainer/RateSummary/utils"
import SignupPromoDesktop from "../../../SignupPromo/Desktop"
import { mapToPrice } from "./mapToPrice"
import Room from "./Room"
import { getMemberPrice } from "./utils"
import { getMemberPrice, isDiscounted } from "./utils"
import styles from "./ui.module.css"
@@ -85,13 +84,12 @@ export default function SummaryUI({
const isAllCampaignRate = rooms.every(
(room) => room.room.roomRate.rateDefinition.isCampaignRate
)
const containsBookingCodeRate = rooms.find(
(r) => r && isBookingCodeRate(r.room.roomRate)
)
const containsCampaignRate = rooms.find(
(r) => r && r.room.roomRate.rateDefinition.isCampaignRate
)
const showDiscounted = containsBookingCodeRate || isUserLoggedIn
const showDiscounted =
isUserLoggedIn || rooms.some((room) => isDiscounted(room.room))
const totalCurrency = isVoucherRate
? CurrencyEnum.Voucher

View File

@@ -1,5 +1,9 @@
import { isSpecialRate } from "../../../SelectRate/RoomsContainer/RateSummary/utils"
import type { Product } from "@scandic-hotels/trpc/types/roomAvailability"
import type { Room } from "../../../../stores/enter-details/types"
export function getMemberPrice(roomRate: Product) {
if ("member" in roomRate && roomRate.member) {
return {
@@ -11,3 +15,13 @@ export function getMemberPrice(roomRate: Product) {
return null
}
export function isDiscounted(room: Room): boolean {
return !!(
room.guest.join ||
room.guest.membershipNo ||
room.roomRate.rateDefinition.isCampaignRate ||
room.roomRate.bookingCode ||
isSpecialRate(room.roomRate)
)
}

View File

@@ -10,7 +10,7 @@ import Subtitle from "@scandic-hotels/design-system/Subtitle"
import { useIsLoggedIn } from "../../../../hooks/useIsLoggedIn"
import SignupPromoDesktop from "../../../SignupPromo/Desktop"
import { isBookingCodeRate } from "./utils"
import { isSpecialRate } from "./utils"
import styles from "./rateSummary.module.css"
@@ -84,7 +84,7 @@ export function DesktopSummary({
const isAllRoomsSelected = selectedRates.state === "ALL_SELECTED"
const showDiscounted =
isUserLoggedIn || selectedRates.rates.some(isBookingCodeRate)
isUserLoggedIn || selectedRates.rates.some(isSpecialRate)
const mainRoomRate = selectedRates.rates.at(0)
const mainRoomCurrency = getRoomCurrency(mainRoomRate)

View File

@@ -17,7 +17,7 @@ import useLang from "../../../../../../hooks/useLang"
import PriceDetailsModal from "../../../../../PriceDetailsModal"
import SignupPromoDesktop from "../../../../../SignupPromo/Desktop"
import { useRateTitles } from "../../../Rooms/RoomsList/RoomListItem/Rates/useRateTitles"
import { isBookingCodeRate } from "../../utils"
import { isSpecialRate } from "../../utils"
import Room from "../Room"
import styles from "./summaryContent.module.css"
@@ -55,11 +55,9 @@ export default function SummaryContent({
? selectedRates.rates[0].member
: null
const containsBookingCodeRate = selectedRates.rates.find(
(r) => r && isBookingCodeRate(r)
)
const hasSpecialRate = selectedRates.rates.find((r) => r && isSpecialRate(r))
const cointainsCode = selectedRates.rates.find((r) => r?.type === "code")
const containsCode = selectedRates.rates.find((r) => r?.type === "code")
const containsCampaignRate = selectedRates.rates.some(
(r) => r?.type === "campaign"
)
@@ -68,7 +66,7 @@ export default function SummaryContent({
return null
}
const showDiscounted = containsBookingCodeRate || isUserLoggedIn
const showDiscounted = hasSpecialRate || isUserLoggedIn
const totalRegularPrice = selectedRates?.totalPrice?.local?.regularPrice
? selectedRates.totalPrice.local.regularPrice
: 0
@@ -137,7 +135,7 @@ export default function SummaryContent({
isMember={isUserLoggedIn && idx === 0}
showBookingCodeChip={
selectedRates.rates.length !== 1 &&
(room.rateDefinition.isCampaignRate || isBookingCodeRate(room))
(room.rateDefinition.isCampaignRate || isSpecialRate(room))
}
/>
)
@@ -332,16 +330,15 @@ export default function SummaryContent({
/>
</div>
{selectedRates.rates.length === 1 &&
(containsBookingCodeRate || cointainsCode) && (
<div>
<BookingCodeChip
alignCenter
bookingCode={input.bookingCode}
isCampaign={containsCampaignRate}
/>
</div>
)}
{selectedRates.rates.length === 1 && (hasSpecialRate || containsCode) && (
<div>
<BookingCodeChip
alignCenter
bookingCode={input.bookingCode}
isCampaign={containsCampaignRate}
/>
</div>
)}
{!isUserLoggedIn && memberPrice ? (
<SignupPromoDesktop
memberPrice={{

View File

@@ -10,7 +10,7 @@ import Modal from "@scandic-hotels/design-system/Modal"
import { Typography } from "@scandic-hotels/design-system/Typography"
import { ChildBedMapEnum } from "@scandic-hotels/trpc/enums/childBedMapEnum"
import { isBookingCodeRate } from "../../utils"
import { isSpecialRate } from "../../utils"
import styles from "./room.module.css"
@@ -70,7 +70,7 @@ export default function Room({
const childBedCrib = childrenBeds?.get(ChildBedMapEnum.IN_CRIB)
const childBedExtraBed = childrenBeds?.get(ChildBedMapEnum.IN_EXTRA_BED)
const showDiscounted = isBookingCodeRate(room.roomRate) || isMember
const showDiscounted = isSpecialRate(room.roomRate) || isMember
const adultsMsg = intl.formatMessage(
{

View File

@@ -11,7 +11,7 @@ import { Typography } from "@scandic-hotels/design-system/Typography"
import { useSelectRateContext } from "../../../../../contexts/SelectRate/SelectRateContext"
import { useIsLoggedIn } from "../../../../../hooks/useIsLoggedIn"
import { isBookingCodeRate } from "../utils"
import { isSpecialRate } from "../utils"
import SummaryContent from "./Content"
import styles from "./mobileSummary.module.css"
@@ -58,10 +58,8 @@ export function MobileSummary() {
}
}, [isSummaryOpen])
const containsBookingCodeRate = selectedRates.rates.find(
(r) => r && isBookingCodeRate(r)
)
const showDiscounted = containsBookingCodeRate || isUserLoggedIn
const hasSpecialRate = selectedRates.rates.find((r) => r && isSpecialRate(r))
const showDiscounted = hasSpecialRate || isUserLoggedIn
if (!selectedRates.totalPrice) {
return null

View File

@@ -2,7 +2,7 @@ import { RateTypeEnum } from "@scandic-hotels/common/constants/rateType"
import type { Product } from "@scandic-hotels/trpc/types/roomAvailability"
export function isBookingCodeRate(product: Product | undefined | null) {
export function isSpecialRate(product: Product | undefined | null) {
if (!product) return false
if (