@@ -3,11 +3,14 @@ import { CustomTooltip } from '@remix-ui/helper'
33import { FormattedMessage } from 'react-intl'
44import './desktop-download.css'
55
6+ const _paq = ( window . _paq = window . _paq || [ ] ) // eslint-disable-line
7+
68interface DesktopDownloadProps {
79 className ?: string
810 compact ?: boolean
9- variant ?: 'button' | 'span'
11+ variant ?: 'button' | 'span' | 'auto'
1012 style ?: React . CSSProperties
13+ trackingContext ?: string // Context for Matomo tracking (e.g., 'hometab', 'dropdown', 'navbar')
1114}
1215
1316interface ReleaseAsset {
@@ -35,7 +38,13 @@ const GITHUB_API_URL = 'https://api.github.com/repos/remix-project-org/remix-des
3538const CACHE_KEY = 'remix-desktop-release-cache'
3639const CACHE_DURATION = 30 * 60 * 1000 // 30 minutes in milliseconds
3740
38- export const DesktopDownload : React . FC < DesktopDownloadProps > = ( { className = '' , compact = true , variant = 'button' , style = { } } ) => {
41+ export const DesktopDownload : React . FC < DesktopDownloadProps > = ( {
42+ className = '' ,
43+ compact = true ,
44+ variant = 'button' ,
45+ style = { } ,
46+ trackingContext = 'unknown'
47+ } ) => {
3948 const [ releaseData , setReleaseData ] = useState < ReleaseData | null > ( null )
4049 const [ loading , setLoading ] = useState ( true )
4150 const [ error , setError ] = useState < string | null > ( null )
@@ -181,6 +190,17 @@ export const DesktopDownload: React.FC<DesktopDownloadProps> = ({ className = ''
181190 }
182191 }
183192
193+ // Track download click events
194+ const trackDownloadClick = ( platform ?: string , filename ?: string , variant ?: string ) => {
195+ const trackingData = [
196+ 'trackEvent' ,
197+ 'desktopDownload' ,
198+ `${ trackingContext } -${ variant || 'button' } ` ,
199+ platform ? `${ platform } -${ filename } ` : 'releases-page'
200+ ]
201+ _paq . push ( trackingData )
202+ }
203+
184204 // Load release data on component mount
185205 useEffect ( ( ) => {
186206 const loadReleaseData = async ( ) => {
@@ -277,6 +297,7 @@ export const DesktopDownload: React.FC<DesktopDownloadProps> = ({ className = ''
277297 style = { { color : 'inherit' } }
278298 onClick = { ( e ) => {
279299 e . stopPropagation ( )
300+ trackDownloadClick ( detectedDownload . platform , detectedDownload . filename , 'span' )
280301 // Allow the default link behavior
281302 } }
282303 >
@@ -337,6 +358,7 @@ export const DesktopDownload: React.FC<DesktopDownloadProps> = ({ className = ''
337358 className = "btn btn-sm btn-primary d-flex align-items-center gap-2"
338359 target = "_blank"
339360 rel = "noopener noreferrer"
361+ onClick = { ( ) => trackDownloadClick ( detectedDownload . platform , detectedDownload . filename , 'compact' ) }
340362 >
341363 < i className = "far fa-desktop" > </ i >
342364 < span >
@@ -379,6 +401,7 @@ export const DesktopDownload: React.FC<DesktopDownloadProps> = ({ className = ''
379401 className = "btn btn-sm btn-primary d-flex align-items-center gap-2"
380402 target = "_blank"
381403 rel = "noopener noreferrer"
404+ onClick = { ( ) => trackDownloadClick ( undefined , undefined , 'compact-fallback' ) }
382405 >
383406 < i className = "far fa-desktop" > </ i >
384407 < span >
@@ -433,6 +456,7 @@ export const DesktopDownload: React.FC<DesktopDownloadProps> = ({ className = ''
433456 className = "btn btn-primary d-flex align-items-center gap-2"
434457 target = "_blank"
435458 rel = "noopener noreferrer"
459+ onClick = { ( ) => trackDownloadClick ( detectedDownload . platform , detectedDownload . filename , 'full' ) }
436460 >
437461 < i className = { getPlatformIcon ( detectedDownload . platform ) } > </ i >
438462 < span >
@@ -471,6 +495,7 @@ export const DesktopDownload: React.FC<DesktopDownloadProps> = ({ className = ''
471495 className = "btn btn-primary d-flex align-items-center gap-2"
472496 target = "_blank"
473497 rel = "noopener noreferrer"
498+ onClick = { ( ) => trackDownloadClick ( undefined , undefined , 'full-fallback' ) }
474499 >
475500 < i className = "fas fa-external-link-alt" > </ i >
476501 < span >
0 commit comments