| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import { useCallback, useEffect } from 'react'
- import { startFreeTrial } from '@/main/account-upgrade'
- import * as eventTracking from '../../infrastructure/event-tracking'
- import OLButton from '@/shared/components/ol/ol-button'
- type StartFreeTrialButtonProps = {
- source: string
- children: React.ReactNode
- variant?: string
- buttonProps?: React.ComponentProps<typeof OLButton>
- handleClick?: React.ComponentProps<typeof OLButton>['onClick']
- segmentation?: eventTracking.Segmentation
- extraSearchParams?: Record<string, string>
- }
- export default function StartFreeTrialButton({
- buttonProps = {
- variant: 'secondary',
- },
- children,
- handleClick,
- source,
- variant,
- segmentation,
- extraSearchParams,
- }: StartFreeTrialButtonProps) {
- useEffect(() => {
- const eventSegmentation: { [key: string]: unknown } = {
- 'paywall-type': source,
- ...segmentation,
- }
- if (variant) {
- eventSegmentation.variant = variant
- }
- eventTracking.sendMB('paywall-prompt', eventSegmentation)
- }, [source, variant, segmentation])
- const onClick = useCallback(
- (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
- event.preventDefault()
- let shouldNavigate = true
- if (handleClick) {
- handleClick(event)
- if (event.isPropagationStopped()) {
- shouldNavigate = false
- }
- }
- startFreeTrial(
- source,
- variant,
- segmentation,
- extraSearchParams,
- shouldNavigate
- )
- },
- [handleClick, source, variant, segmentation, extraSearchParams]
- )
- return (
- <OLButton {...buttonProps} onClick={onClick}>
- {children}
- </OLButton>
- )
- }
|