Skip to content

Commit

Permalink
Add loadGoogleAnalytics util
Browse files Browse the repository at this point in the history
  • Loading branch information
yuriyyakym committed Jan 29, 2025
1 parent eb276a6 commit 3e6ae38
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 0 deletions.
1 change: 1 addition & 0 deletions packages/analytics-nextjs/src/lib/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
export * from './getApiUrl';
export * from './getTrackingPermissions';
export * from './isNavigatorTrackingAllowed';
export * from './loadGoogleAnalytics';
export * from './noop';
export * from './stringify';
47 changes: 47 additions & 0 deletions packages/analytics-nextjs/src/lib/loadGoogleAnalytics.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
function loadTagManager(analyticsId: `GTM-${string}`) {
const script = document.createElement('script');
script.setAttribute('id', 'google-tag-manager-bootstrap');
script.innerHTML = `\
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','${analyticsId}');`;

const noscript = document.createElement('noscript');
noscript.innerHTML = `
<iframe
src="https://www.googletagmanager.com/ns.html?id=${analyticsId}"
height="0"
width="0"
style={{ display: 'none', visibility: 'hidden' }}
/>
`;

document.head.appendChild(script);
document.body.appendChild(noscript);
}

function loadAnalytics(analyticsId: string) {
const gtagScript = document.createElement('script');
gtagScript.setAttribute('src', `https://www.googletagmanager.com/gtag/js?id=${analyticsId}`);

const script = document.createElement('script');
script.setAttribute('id', 'google-tag-manager-bootstrap');
script.innerHTML = `\
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '${analyticsId}');`;

document.head.appendChild(gtagScript);
document.head.appendChild(script);
}

export function loadGoogleAnalytics(analyticsId: string) {
if (analyticsId.startsWith('GTM-')) {
loadTagManager(analyticsId as `GTM-${string}`);
} else {
loadAnalytics(analyticsId);
}
}

0 comments on commit 3e6ae38

Please sign in to comment.