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:
@@ -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}>
|
||||
|
||||
@@ -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(
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,8 +330,7 @@ export default function SummaryContent({
|
||||
/>
|
||||
</div>
|
||||
|
||||
{selectedRates.rates.length === 1 &&
|
||||
(containsBookingCodeRate || cointainsCode) && (
|
||||
{selectedRates.rates.length === 1 && (hasSpecialRate || containsCode) && (
|
||||
<div>
|
||||
<BookingCodeChip
|
||||
alignCenter
|
||||
|
||||
@@ -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(
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 (
|
||||
|
||||
Reference in New Issue
Block a user