diff --git a/src/components/ui/Link.tsx b/src/components/ui/Link.tsx index 9adef67872a..4c7dcc2fbb6 100644 --- a/src/components/ui/Link.tsx +++ b/src/components/ui/Link.tsx @@ -62,6 +62,7 @@ export const BaseLink = forwardRef(function Link( isPartiallyActive = true, activeClassName = "text-primary", customEventOptions, + onClick, ...props }: LinkProps, ref @@ -98,6 +99,19 @@ export const BaseLink = forwardRef(function Link( href, } + // Create click handler that tracks events and calls any passed onClick + const createClickHandler = + (eventName: string) => (e: React.MouseEvent) => { + trackCustomEvent( + customEventOptions ?? { + eventCategory: "Link", + eventAction: "Clicked", + eventName: `${eventName} - ${href}`, + } + ) + onClick?.(e) + } + if (isExternal) { const { className, ...rest } = commonProps @@ -105,18 +119,9 @@ export const BaseLink = forwardRef(function Link( - trackCustomEvent( - customEventOptions ?? { - eventCategory: `Link`, - eventAction: `Clicked`, - eventName: "Clicked on external link", - eventValue: href, - } - ) - } - className={cn("relative", className)} {...rest} + onClick={createClickHandler("Clicked on external link")} + className={cn("relative", className)} > {isMailto ? ( @@ -141,17 +146,8 @@ export const BaseLink = forwardRef(function Link( - trackCustomEvent( - customEventOptions ?? { - eventCategory: `Link`, - eventAction: `Clicked`, - eventName: "Clicked on internal PDF", - eventValue: href, - } - ) - } {...commonProps} + onClick={createClickHandler("Clicked on internal PDF")} > {children} @@ -165,18 +161,11 @@ export const BaseLink = forwardRef(function Link( // as a same-page scroll rather than a route change) return ( { e.stopPropagation() - trackCustomEvent( - customEventOptions ?? { - eventCategory: "Link", - eventAction: "Clicked", - eventName: "Clicked on hash link", - eventValue: href, - } - ) + createClickHandler("Clicked on hash link")(e) }} - {...commonProps} > {children} @@ -185,17 +174,8 @@ export const BaseLink = forwardRef(function Link( return ( - trackCustomEvent( - customEventOptions ?? { - eventCategory: `Link`, - eventAction: `Clicked`, - eventName: `Clicked on internal link`, - eventValue: href, - } - ) - } {...commonProps} + onClick={createClickHandler("Clicked on internal link")} > {children} diff --git a/src/components/ui/buttons/Button.tsx b/src/components/ui/buttons/Button.tsx index 5f2a348e8c3..03877b46bcc 100644 --- a/src/components/ui/buttons/Button.tsx +++ b/src/components/ui/buttons/Button.tsx @@ -152,12 +152,6 @@ const ButtonLink = React.forwardRef( }, ref ) => { - const handleClick: React.MouseEventHandler = ( - ...args - ) => { - customEventOptions && trackCustomEvent(customEventOptions) - onClick?.(...args) - } return (