2
0
Files
bot/ee/apps/landing-page/components/PricingPage/PricingCard/index.tsx

95 lines
2.4 KiB
TypeScript
Raw Normal View History

import {
Flex,
Heading,
List,
ListIcon,
ListItem,
Text,
useColorModeValue,
VStack,
} from '@chakra-ui/react'
import * as React from 'react'
2022-05-13 15:22:44 -07:00
import { CheckCircleIcon } from '../../../assets/icons/CheckCircleIcon'
import { Card, CardProps } from './Card'
import { formatPrice } from '@typebot.io/billing/helpers/formatPrice'
export interface PricingCardData {
2022-09-18 19:01:37 +02:00
features: React.ReactNode[]
name: string
price: number | string
2022-05-13 15:22:44 -07:00
featureLabel?: string
}
interface PricingCardProps extends CardProps {
data: PricingCardData
icon?: JSX.Element
button: React.ReactElement
}
2022-09-18 19:01:37 +02:00
export const PricingCard = ({
data,
icon,
button,
...rest
}: PricingCardProps) => {
const { features, price, name } = data
2022-03-17 14:37:00 +01:00
const accentColor = useColorModeValue('blue.500', 'white')
const formattedPrice = typeof price === 'number' ? formatPrice(price) : price
return (
2022-03-17 14:37:00 +01:00
<Card rounded="xl" bgColor="gray.800" {...rest}>
2022-03-17 14:37:00 +01:00
<Flex justifyContent="space-between" flexDir="column" h="full">
<Flex flexDir="column">
<VStack spacing={6}>
{icon}
2022-05-13 15:22:44 -07:00
<Heading size="md" fontWeight="extrabold" color={rest.borderColor}>
2022-03-17 14:37:00 +01:00
{name}
</Heading>
</VStack>
<Flex
align="flex-end"
justify="center"
fontWeight="extrabold"
color={accentColor}
my="8"
>
<Heading size="2xl" fontWeight="inherit" lineHeight="0.9em">
{formattedPrice}
2022-03-17 14:37:00 +01:00
</Heading>
{typeof price === 'number' && (
2022-03-17 14:37:00 +01:00
<Text fontWeight="inherit" fontSize="xl">
/ month
</Text>
)}
</Flex>
2022-05-13 15:22:44 -07:00
2022-03-17 14:37:00 +01:00
<List spacing="4" mb="8" maxW="30ch" mx="auto">
2022-05-13 15:22:44 -07:00
{data.featureLabel && (
<Text fontWeight="bold">{data.featureLabel}</Text>
)}
2022-03-17 14:37:00 +01:00
{features.map((feature, index) => (
2022-09-18 19:01:37 +02:00
<ListItem
fontWeight="medium"
key={index}
display="flex"
alignItems="center"
>
2022-03-17 14:37:00 +01:00
<ListIcon
fontSize="xl"
2022-05-13 15:22:44 -07:00
as={CheckCircleIcon}
2022-03-17 14:37:00 +01:00
marginEnd={2}
color={accentColor}
2022-05-13 15:22:44 -07:00
fill={rest.borderColor}
2022-03-17 14:37:00 +01:00
/>
{feature}
</ListItem>
))}
</List>
</Flex>
{button}
</Flex>
</Card>
)
}