npm package: @nullunit/react-gtm
Description: Google Tag Manager and Universal Analytics for React
Author: Justin Smith
Latest version: 0.0.10

Google Tag Manager and Universal Analytics for React
==================================

[![NPM Current Version](https://img.shields.io/npm/v/@nullunit/react-gtm.svg)](https://www.npmjs.com/package/@nullunit/react-gtm)
[![License](https://img.shields.io/github/license/nullunit/react-gtm.svg)](https://github.com/nullunit/react-gtm/blob/master/LICENSE)
[![NPM Library Size](https://img.shields.io/bundlephobia/minzip/@nullunit/react-gtm.svg)](https://www.npmjs.com/package/@nullunit/react-gtm)

[![NPM Downloads](https://img.shields.io/npm/dependency-version/@nullunit/react-gtm/peer/react.svg)](https://www.npmjs.com/package/react)
[![NPM Downloads](https://img.shields.io/npm/dependency-version/@nullunit/react-gtm/peer/prop-types.svg)](https://www.npmjs.com/package/prop-types)

[![Build Status](https://api.travis-ci.org/nullunit/react-gtm.svg?branch=master)](https://travis-ci.org/nullunit/react-gtm)
[![Maintainability](https://api.codeclimate.com/v1/badges/c7b29e60c5bc073b5be0/maintainability)](https://codeclimate.com/github/nullunit/react-gtm/maintainability)
[![Test Coverage](https://api.codeclimate.com/v1/badges/c7b29e60c5bc073b5be0/test_coverage)](https://codeclimate.com/github/nullunit/react-gtm/test_coverage)
[![Issues](https://img.shields.io/codeclimate/issues/nullunit/react-gtm.svg)](https://codeclimate.com/github/nullunit/react-gtm/issues)
[![Technical Debt](https://img.shields.io/codeclimate/tech-debt/nullunit/react-gtm.svg)](https://codeclimate.com/github/nullunit/react-gtm/trends/technical_debt)

Thin wrapper and React component for including Google Tag Manager or Universal Analytics in a React project.

Usage
---------------
For running with Google Tag Manager, wrap the root element in the `GtagProvider` setting the `id` with your Google Tag Manager id and setting `useTagManager` to `true`:

```
    import './index.css';
    import React from 'react';
    import ReactDOM from 'react-dom';
    import Modal from 'react-modal';
    import { BrowserRouter } from 'react-router-dom'
    import App from './App';
    import registerServiceWorker from './registerServiceWorker';
    import { GtagProvider } from '@nullunit/react-gtm';

    const GTM_ID = 'GTM-12345';
    const MY_APP_NAME = 'My great app'; //Optional
    const MY_APP_VERSION = '3.1.2'; //Optional
    const ROOT = (
        <GtagProvider id={ GTM_ID } appName={ MY_APP_NAME } appVersion={ MY_APP_VERSION } useTagManager={ true }>
            <BrowserRouter>
                <App />
            </BrowserRouter>
        </GtagProvider>
    );

    Modal.setAppElement('#root');
    ReactDOM.render(ROOT, document.getElementById('root'));
    registerServiceWorker();
```

Now, you can either inject the `GtagContext` using `withGtag` (for React components) or get the context directly via `getGtagContext` singleton (for non-React items).

```
    import { withGtag, getGtagContext } from './index';

    ...

    //for React components
    class MyComponent extends React.Component {

        componentDidMount() {

            const { gtag } = this.props;
            gtag.event('ProjectLoaded', { 'projectId': '...' });
        }

        render() {
            return `<h1>...</h1>`;
        }
    }

    export withGtag(MyComponent);

    ...

    //from outside React context
    const gtag = getGtagContext();
    gtag.event('ProjectCreated', { 'projectId': '...' });

```