@@ -2,6 +2,7 @@ import React, { memo, useEffect, useMemo, useRef, useState } from 'react';
22import { navigate , graphql } from 'gatsby' ;
33import { useIntl } from 'react-intl' ;
44import classnames from 'classnames' ;
5+ import { useGoal } from 'gatsby-plugin-fathom' ;
56
67import HeadMatter from '../components/HeadMatter' ;
78
@@ -31,7 +32,33 @@ const Download = ({ data }) => {
3132 const intl = useIntl ( ) ;
3233 const releases = usePreparedReleases ( data . releases . nodes ) ;
3334
34- const onAfterDownload = ( ) => {
35+ // gatsby-plugin-fathom requires us to use hooks
36+ const trackWindows = useGoal ( 'CIMDWXJV' ) ;
37+ const trackMacIntel = useGoal ( 'VQUBVEQR' ) ;
38+ const trackMacSilicon = useGoal ( 'IWSPGL5F' ) ;
39+ const trackLinux = useGoal ( 'HHYWFK7G' ) ;
40+ const trackPi32 = useGoal ( 'ZKSBBVWD' ) ;
41+ const trackPi64 = useGoal ( 'TXVODVYO' ) ;
42+
43+ const onAfterDownload = ( asset ) => {
44+ if ( asset ) {
45+ if ( asset . os === 'Windows' ) {
46+ trackWindows ( 0 ) ;
47+ } else if ( asset . os === 'macOS' && asset . bit === 'Intel 64-bit' ) {
48+ trackMacIntel ( 0 ) ;
49+ } else if ( asset . os === 'macOS' && asset . bit === 'Apple Silicon' ) {
50+ trackMacSilicon ( 0 ) ;
51+ } else if ( asset . os === 'Linux' ) {
52+ trackLinux ( 0 ) ;
53+ } else if ( asset . os === 'Raspberry Pi' && asset . bit === '32-bit' ) {
54+ trackPi32 ( 0 ) ;
55+ } else if ( asset . os === 'Raspberry Pi' && asset . bit === '64-bit' ) {
56+ trackPi64 ( 0 ) ;
57+ } else {
58+ console . error ( `Untracked asset: ${ asset } ` ) ;
59+ }
60+ }
61+
3562 const goToDonate = ( ) => {
3663 window . removeEventListener ( 'focus' , goToDonate ) ;
3764 setTimeout ( ( ) => {
@@ -142,7 +169,7 @@ const MainDownloadSection = memo(({ release, onAfterDownload }) => {
142169 < a
143170 className = { css . mainDownloadButton }
144171 href = { detectedAsset . os !== '' ? detectedAsset . asset . url : '' }
145- onClick = { onAfterDownload } >
172+ onClick = { ( ) => onAfterDownload ( detectedAsset . asset ) } >
146173 < span >
147174 { intl . formatMessage ( { id : 'download' } ) } Processing{ ' ' }
148175 { release . version } { intl . formatMessage ( { id : 'for' } ) } { ' ' }
@@ -311,7 +338,7 @@ const OSSection = memo(
311338 < a
312339 className = { css . asset }
313340 href = { asset . url }
314- onClick = { onAfterDownload } >
341+ onClick = { ( ) => onAfterDownload ( asset ) } >
315342 { asset . bit && < > { asset . bit } </ > }
316343 </ a >
317344 < InfoTooltip
0 commit comments