import { PropsWithChildren } from 'react' import { Typography } from '../Typography' import styles from './rate-card.module.css' import { variants } from './variants' import { Rate, RatePointsOption } from './types' import InfoCircleIcon from '../Icons/InfoCircle' import { Radio } from '../Radio' import { RadioGroup } from 'react-aria-components' import InfoCircleFilledIcon from '../Icons/InfoCircleFilled' import { Button } from '../Button' type RateCardProps = | RegularRateCardProps | CampaignRateCardProps | CodeRateCardProps | PointsRateCardProps export function RateCard(props: PropsWithChildren) { const classNames = variants({ variant: props.variant, }) switch (props.variant) { case 'Campaign': return case 'Code': return case 'Points': return default: return } } interface RegularRateCardProps { variant: 'Regular' title: string rate: Rate memberRate?: Rate approximateRate: Omit className?: string handleTermsClick?: () => void } function RegularRateCard({ title, className, approximateRate, rate, handleTermsClick, }: RegularRateCardProps) { const [mainTitle, subTitle] = title.split('/').map((part) => part.trim()) return (

{mainTitle} {subTitle && ( {` / ${subTitle}`} )}

{rate.label}

{rate.price}{' '} {rate.unit}

{approximateRate.label}

{approximateRate.price}

) } // RED CARD interface CampaignRateCardProps extends Omit { variant: 'Campaign' bannerText: string comparisonRate?: Omit referenceRate: Omit isHighlightedRate?: boolean } function CampaignRateCard({ title, rate, memberRate, approximateRate, comparisonRate, referenceRate, className, bannerText, isHighlightedRate, handleTermsClick, }: CampaignRateCardProps) { const [mainTitle, subTitle] = title.split('/').map((part) => part.trim()) return (

{bannerText}

{mainTitle} {subTitle && ( {` / ${subTitle}`} )}

{rate.label}

{rate.price}{' '} {rate.unit}

{memberRate ? (

{memberRate.label}

{memberRate.price}{' '} {memberRate.unit}

) : null} {comparisonRate ? (

{rate.price}{' '} {comparisonRate.unit}

) : null}

{approximateRate.label}

{approximateRate.price}

{referenceRate ? (

{referenceRate.label}

{referenceRate.price}

) : null}
) } // BLUE CARD interface CodeRateCardProps extends Omit { variant: 'Code' bannerText: string comparisonRate?: Omit approximateRate?: Omit isHighlightedRate?: boolean } function CodeRateCard({ title, rate, approximateRate, comparisonRate, bannerText, className, isHighlightedRate, handleTermsClick, }: CodeRateCardProps) { const [mainTitle, subTitle] = title.split('/').map((part) => part.trim()) return (

{bannerText}

{mainTitle} {subTitle && ( {` / ${subTitle}`} )}

{rate.label}

{rate.price}{' '} {rate.unit}

{comparisonRate ? (

{rate.price}{' '} {comparisonRate.unit}

) : null} {approximateRate ? (

{approximateRate.label}

{approximateRate.price}

) : null}
) } // POINTS CARD interface PointsRateCardProps { variant: 'Points' title: string bannerText: string className?: string rates: RatePointsOption[] selectedRate: string | undefined onRateSelect: (value: string) => void isNotEnoughPoints?: boolean notEnoughPointsText?: string handleTermsClick?: () => void } function PointsRateCard({ title, bannerText, className, rates, selectedRate, isNotEnoughPoints, notEnoughPointsText, onRateSelect, handleTermsClick, }: PointsRateCardProps) { const [mainTitle, subTitle] = title.split('/').map((part) => part.trim()) return (

{bannerText}

{mainTitle} {subTitle && ( {` / ${subTitle}`} )}

{rates.map((rate, index) => (

{rate.points}{' '} {rate.currency} {rate.additionalCurrency && ' + '}

{rate.additionalCurrency && (

{rate.additionalCurrency.price}{' '} {rate.currency}

)}
))}
{isNotEnoughPoints ? ( ) : null}
) }