Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | 80x 78x 8x 84x | import { MaterialSymbol } from 'material-symbols'
import { Button } from '../ButtonsAndLinks/Button/Button'
import { Icon } from '../Icon/Icon'
export type PaymentPlanDescriptionItem = {
text: string
icon: MaterialSymbol
iconColor?: string
}
export type PaymentPlanProps = {
title: string
type: PaymentPlanType
price?: string
hasButton?: boolean
descriptionItems?: PaymentPlanDescriptionItem[]
handleSubmit?: (plan: PaymentPlanType) => void
size?: 'md' | 'lg'
}
export type PaymentPlanType = 'single' | 'family' | 'free'
export const PaymentPlan: React.FC<PaymentPlanProps> = ({
title,
type,
price = '',
hasButton = true,
descriptionItems = [],
handleSubmit = () => {},
size = 'lg',
}) => {
return (
<div
datacy={`paymentPlan-${type}`}
className={`flex w-full flex-col gap-5 rounded-xl border-2 px-6 py-3 ${
size === 'lg' ?? 'xl:gap-6 xl:px-10 xl:py-6'
}`}
>
<div>
<p className={`text-xl font-bold ${size === 'lg' ?? ' lg:text-2xl'}`}>{title}</p>
{price && (
<p datacy={`paymentPlan-${type}-price`} className={`text-3xl font-bold ${size === 'lg' ?? 'lg:text-4xl'}`}>
{price}
</p>
)}
</div>
{hasButton && (
<Button datacy={`paymentPlan-${type}-button`} onClick={() => handleSubmit('single')}>
Auswählen
</Button>
)}
<div className="text-base">
{descriptionItems.map((item, index) => {
return (
<div datacy={`paymentPlan-${type}-description-item${index}`} key={item.text} className="mb-2 flex gap-2">
<Icon
datacy={`paymentPlan-single-description-item${index}-icon`}
icon={item.icon}
className={`pt-0.5${item.iconColor ? ` ${item.iconColor}` : ' text-yellow-700'}`}
/>
<p>{item.text}</p>
</div>
)
})}
</div>
</div>
)
}
|