start-free-trial-button.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { MouseEventHandler, useCallback, useEffect } from 'react'
  2. import { useTranslation } from 'react-i18next'
  3. import { startFreeTrial } from '@/main/account-upgrade'
  4. import * as eventTracking from '../../infrastructure/event-tracking'
  5. import OLButton from '@/features/ui/components/ol/ol-button'
  6. type StartFreeTrialButtonProps = {
  7. source: string
  8. variant?: string
  9. buttonProps?: React.ComponentProps<typeof OLButton>
  10. children?: React.ReactNode
  11. handleClick?: MouseEventHandler<typeof OLButton>
  12. }
  13. export default function StartFreeTrialButton({
  14. buttonProps = {
  15. variant: 'secondary',
  16. },
  17. children,
  18. handleClick,
  19. source,
  20. variant,
  21. }: StartFreeTrialButtonProps) {
  22. const { t } = useTranslation()
  23. useEffect(() => {
  24. const eventSegmentation: { [key: string]: unknown } = {
  25. 'paywall-type': source,
  26. }
  27. if (variant) {
  28. eventSegmentation.variant = variant
  29. }
  30. eventTracking.sendMB('paywall-prompt', eventSegmentation)
  31. }, [source, variant])
  32. const onClick = useCallback(
  33. event => {
  34. event.preventDefault()
  35. if (handleClick) {
  36. handleClick(event)
  37. }
  38. startFreeTrial(source, variant)
  39. },
  40. [handleClick, source, variant]
  41. )
  42. return (
  43. <OLButton {...buttonProps} onClick={onClick}>
  44. {children || t('start_free_trial')}
  45. </OLButton>
  46. )
  47. }