# All files / src/components/ga-tagmanager GATagManger.tsx

0% Statements 0/4
100% Branches 0/0
0% Functions 0/1
0% Lines 0/2

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    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

     import type { FC } from 'react';

    export const GATagManager: FC<{ gaId: string }> = ({ gaId }) => {
      return (
        <>
          <script async src={`https://www.googletagmanager.com/gtag/js?id=${gaId}`}></script>
          <script
            dangerouslySetInnerHTML={{
              __html: `
      window.dataLayer = window.dataLayer || [];
      gtag('js', new Date());
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());

      gtag('config', '${gaId}');

      function insertCallback(parent, funcname, callback, ...args) {
        let oldFunc = parent[funcname] ? parent[funcname] : function () { }
        parent[funcname] = function () {
          oldFunc.apply(this, arguments)
          return callback(...args)
        }
      }

      function notify_analytics(l) {
        let newPage = l.pathname + l.hash
         // replace ${gaId} into your id
         gtag('config', '${gaId}', { 'page_path': newPage });
       }

       insertCallback(window.history, "pushState", notify_analytics, location)
       insertCallback(window.history, "replaceState", notify_analytics, location)
          `,
            }}
          />
        </>
      );
    };