start-free-trial-button.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { useCallback, useEffect } from 'react'
  2. import { useTranslation } from 'react-i18next'
  3. import { Button } from 'react-bootstrap'
  4. import PropTypes from 'prop-types'
  5. import * as eventTracking from '../../infrastructure/event-tracking'
  6. export default function StartFreeTrialButton({
  7. buttonStyle = 'info',
  8. children,
  9. classes = {},
  10. setStartedFreeTrial,
  11. source,
  12. }) {
  13. const { t } = useTranslation()
  14. useEffect(() => {
  15. eventTracking.sendMB('paywall-prompt', { 'paywall-type': source })
  16. }, [source])
  17. const handleClick = useCallback(
  18. event => {
  19. event.preventDefault()
  20. eventTracking.send('subscription-funnel', 'upgraded-free-trial', source)
  21. eventTracking.sendMB('paywall-click', { 'paywall-type': source })
  22. if (setStartedFreeTrial) {
  23. setStartedFreeTrial(true)
  24. }
  25. const params = new URLSearchParams({
  26. planCode: 'collaborator_free_trial_7_days',
  27. ssp: 'true',
  28. itm_campaign: source,
  29. })
  30. window.open(`/user/subscription/new?${params}`)
  31. },
  32. [setStartedFreeTrial, source]
  33. )
  34. return (
  35. <Button
  36. bsStyle={buttonStyle}
  37. onClick={handleClick}
  38. className={classes.button}
  39. >
  40. {children || t('start_free_trial')}
  41. </Button>
  42. )
  43. }
  44. StartFreeTrialButton.propTypes = {
  45. buttonStyle: PropTypes.string,
  46. children: PropTypes.any,
  47. classes: PropTypes.shape({
  48. button: PropTypes.string.isRequired,
  49. }),
  50. setStartedFreeTrial: PropTypes.func,
  51. source: PropTypes.string.isRequired,
  52. }