index.tsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { useProviderContext } from '@/context/provider-context'
  2. import type { FC } from 'react'
  3. import { useTranslation } from 'react-i18next'
  4. import { SparklesSoft } from '../../base/icons/src/public/common'
  5. import PremiumBadge from '../../base/premium-badge'
  6. import { Plan } from '../../billing/type'
  7. type PlanBadgeProps = {
  8. plan: Plan
  9. allowHover?: boolean
  10. sandboxAsUpgrade?: boolean
  11. onClick?: () => void
  12. }
  13. const PlanBadge: FC<PlanBadgeProps> = ({ plan, allowHover, sandboxAsUpgrade = false, onClick }) => {
  14. const { isFetchedPlan } = useProviderContext()
  15. const { t } = useTranslation()
  16. if (!isFetchedPlan) return null
  17. if (plan === Plan.sandbox && sandboxAsUpgrade) {
  18. return <PremiumBadge className='select-none' color='blue' allowHover={allowHover} onClick={onClick}>
  19. <SparklesSoft className='flex items-center py-[1px] pl-[3px] w-3.5 h-3.5 text-components-premium-badge-indigo-text-stop-0' />
  20. <div className='system-xs-medium'>
  21. <span className='p-1'>
  22. {t('billing.upgradeBtn.encourageShort')}
  23. </span>
  24. </div>
  25. </PremiumBadge>
  26. }
  27. if (plan === Plan.sandbox) {
  28. return <PremiumBadge className='select-none' size='s' color='gray' allowHover={allowHover} onClick={onClick}>
  29. <div className='system-2xs-medium-uppercase'>
  30. <span className='p-1'>
  31. {plan}
  32. </span>
  33. </div>
  34. </PremiumBadge>
  35. }
  36. if (plan === Plan.professional) {
  37. return <PremiumBadge className='select-none' size='s' color='blue' allowHover={allowHover} onClick={onClick}>
  38. <div className='system-2xs-medium-uppercase'>
  39. <span className='p-1'>
  40. pro
  41. </span>
  42. </div>
  43. </PremiumBadge>
  44. }
  45. if (plan === Plan.team) {
  46. return <PremiumBadge className='select-none' size='s' color='indigo' allowHover={allowHover} onClick={onClick}>
  47. <div className='system-2xs-medium-uppercase'>
  48. <span className='p-1'>
  49. {plan}
  50. </span>
  51. </div>
  52. </PremiumBadge>
  53. }
  54. return null
  55. }
  56. export default PlanBadge