start-free-trial-button.tsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { 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 '@/shared/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?: React.ComponentProps<typeof OLButton>['onClick']
  12. segmentation?: eventTracking.Segmentation
  13. extraSearchParams?: Record<string, string>
  14. }
  15. export default function StartFreeTrialButton({
  16. buttonProps = {
  17. variant: 'secondary',
  18. },
  19. children,
  20. handleClick,
  21. source,
  22. variant,
  23. segmentation,
  24. extraSearchParams,
  25. }: StartFreeTrialButtonProps) {
  26. const { t } = useTranslation()
  27. useEffect(() => {
  28. const eventSegmentation: { [key: string]: unknown } = {
  29. 'paywall-type': source,
  30. ...segmentation,
  31. }
  32. if (variant) {
  33. eventSegmentation.variant = variant
  34. }
  35. eventTracking.sendMB('paywall-prompt', eventSegmentation)
  36. }, [source, variant, segmentation])
  37. const onClick = useCallback(
  38. (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
  39. event.preventDefault()
  40. if (handleClick) {
  41. handleClick(event)
  42. }
  43. startFreeTrial(source, variant, segmentation, extraSearchParams)
  44. },
  45. [handleClick, source, variant, segmentation, extraSearchParams]
  46. )
  47. return (
  48. <OLButton {...buttonProps} onClick={onClick}>
  49. {children || t('start_free_trial')}
  50. </OLButton>
  51. )
  52. }