integration-card.tsx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import OLBadge from '@/shared/components/ol/ol-badge'
  2. import MaterialIcon from '@/shared/components/material-icon'
  3. import { useTranslation } from 'react-i18next'
  4. export default function IntegrationCard({
  5. href,
  6. onClick,
  7. title,
  8. description,
  9. icon,
  10. showPaywallBadge,
  11. }: {
  12. href?: string
  13. onClick?: () => void
  14. title: string
  15. description: string
  16. icon: React.ReactNode
  17. showPaywallBadge: boolean
  18. }) {
  19. const { t } = useTranslation()
  20. const content = (
  21. <div className="integrations-panel-card-contents">
  22. <div className="integrations-panel-card-icon">{icon}</div>
  23. <div className="integrations-panel-card-inner">
  24. <div className="integrations-panel-card-header">
  25. <div className="integrations-panel-card-title" translate="no">
  26. {title}
  27. </div>
  28. {showPaywallBadge && (
  29. <OLBadge
  30. prepend={<MaterialIcon type="star" />}
  31. bg="light"
  32. className="integrations-panel-card-premium-badge"
  33. >
  34. {t('premium')}
  35. </OLBadge>
  36. )}
  37. </div>
  38. <p className="integrations-panel-card-description">{description}</p>
  39. </div>
  40. </div>
  41. )
  42. if (href) {
  43. return (
  44. <a
  45. href={href}
  46. target="_blank"
  47. rel="noreferrer"
  48. className="integrations-panel-card-button"
  49. >
  50. {content}
  51. </a>
  52. )
  53. }
  54. return (
  55. <button onClick={onClick} className="integrations-panel-card-button">
  56. {content}
  57. </button>
  58. )
  59. }