File size: 1,607 Bytes
ec4551b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | 'use client';
import Script from 'next/script';
import { FC, useEffect } from 'react';
import { useUser } from '@gitroom/frontend/components/layout/user.context';
import { useVariables } from '@gitroom/react/helpers/variable.context';
export const TrialTracker: FC = () => {
const user = useUser();
const { googleAdsId, googleAdsTrialTracking } = useVariables();
useEffect(() => {
if (
typeof window === 'undefined' ||
!user?.id ||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error
!window.gtag ||
!googleAdsId ||
!googleAdsTrialTracking
)
return;
const params = new URLSearchParams(window.location.search);
if (params.get('trialStart') !== 'true') return;
const key = `gtm_start_trial_${user?.id}`;
if (localStorage.getItem(key)) return;
localStorage.setItem(key, '1');
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error
gtag('event', 'conversion', {
send_to: `${googleAdsId}/${googleAdsTrialTracking}`,
transaction_id: user.id,
});
}, [user]);
return null;
};
export const GoogleTagManagerComponent: FC<{ gtmId?: string }> = ({
gtmId,
}) => {
if (!gtmId) {
return null;
}
return (
<>
<Script src="/g.js" strategy="afterInteractive" />
</Script>
</>
);
};
|