start-free-trial-button.tsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { useCallback, useEffect } from 'react'
  2. import { startFreeTrial } from '@/main/account-upgrade'
  3. import * as eventTracking from '../../infrastructure/event-tracking'
  4. import OLButton from '@/shared/components/ol/ol-button'
  5. type StartFreeTrialButtonProps = {
  6. source: string
  7. children: React.ReactNode
  8. variant?: string
  9. buttonProps?: React.ComponentProps<typeof OLButton>
  10. handleClick?: React.ComponentProps<typeof OLButton>['onClick']
  11. segmentation?: eventTracking.Segmentation
  12. extraSearchParams?: Record<string, string>
  13. }
  14. export default function StartFreeTrialButton({
  15. buttonProps = {
  16. variant: 'secondary',
  17. },
  18. children,
  19. handleClick,
  20. source,
  21. variant,
  22. segmentation,
  23. extraSearchParams,
  24. }: StartFreeTrialButtonProps) {
  25. useEffect(() => {
  26. const eventSegmentation: { [key: string]: unknown } = {
  27. 'paywall-type': source,
  28. ...segmentation,
  29. }
  30. if (variant) {
  31. eventSegmentation.variant = variant
  32. }
  33. eventTracking.sendMB('paywall-prompt', eventSegmentation)
  34. }, [source, variant, segmentation])
  35. const onClick = useCallback(
  36. (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
  37. event.preventDefault()
  38. let shouldNavigate = true
  39. if (handleClick) {
  40. handleClick(event)
  41. if (event.isPropagationStopped()) {
  42. shouldNavigate = false
  43. }
  44. }
  45. startFreeTrial(
  46. source,
  47. variant,
  48. segmentation,
  49. extraSearchParams,
  50. shouldNavigate
  51. )
  52. },
  53. [handleClick, source, variant, segmentation, extraSearchParams]
  54. )
  55. return (
  56. <OLButton {...buttonProps} onClick={onClick}>
  57. {children}
  58. </OLButton>
  59. )
  60. }