import { cx } from 'class-variance-authority' import { useIntl } from 'react-intl' import Body from '../../Body' import Caption from '../../Caption' import { Divider } from '../../Divider' import Subtitle from '../../Subtitle' import { RateTypeEnum } from '@scandic-hotels/common/constants/rateType' import styles from './hotelPriceCard.module.css' type Price = { pricePerStay: number pricePerNight: number currency: string } export type PriceCardProps = { productTypePrices: { rateType: RateTypeEnum localPrice: Price requestedPrice?: Price } isMemberPrice?: boolean className?: string } export function HotelPriceCard({ productTypePrices, isMemberPrice = false, className, }: PriceCardProps) { const intl = useIntl() const isRegularOrPublicPromotionRate = productTypePrices.rateType === RateTypeEnum.Regular || productTypePrices.rateType === RateTypeEnum.PublicPromotion return (
{isRegularOrPublicPromotionRate && (isMemberPrice ? (
{intl.formatMessage({ defaultMessage: 'Member price', })}
) : (
{intl.formatMessage({ defaultMessage: 'Standard price', })}
))}
{intl.formatMessage({ defaultMessage: 'From', })}
{productTypePrices.localPrice.pricePerNight} {productTypePrices.localPrice.currency} {/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */} / {intl.formatMessage({ defaultMessage: 'night', })}
{productTypePrices?.requestedPrice && (
{intl.formatMessage({ defaultMessage: 'Approx.', })}
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */} {`${productTypePrices.requestedPrice.pricePerNight} `} {productTypePrices.requestedPrice.currency}
)} {productTypePrices.localPrice.pricePerStay !== productTypePrices.localPrice.pricePerNight && // Handle undefined scenarios productTypePrices.localPrice.pricePerNight && ( <>
{intl.formatMessage({ defaultMessage: 'Total', })}
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */} {`${productTypePrices.localPrice.pricePerStay} `} {productTypePrices.localPrice.currency}
)}
) }