All files / src setupApp.jsx

0% Statements 0/74
0% Branches 0/18
0% Functions 0/4
0% Lines 0/13
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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114                                                                                                                                                                                                                                   
import 'assets/styles/base.postcss';
 
import { setupStore } from './setupStore';
import React from 'react';
import { render } from 'react-dom';
import { Provider } from 'react-redux';
import {
  SingleSignOnProvider,
  IdleTimeoutHandler,
  routes as singleSignOnRoutes,
} from 'containers/SingleSignOn';
import { Router, browserHistory } from 'react-router';
import Store from 'domain/Store';
import parseRoutes from 'domain/parseRoutes';
import App from 'components/App';
import is from 'is_js';
import AuthorizationHandler from 'containers/AuthorizationHandler';
import ErrorPageHandler from 'containers/ErrorPageHandler';
import LoadingOverlayHandler from 'containers/LoadingOverlayHandler';
import SaveBarHandler from 'containers/SaveBarHandler';
import NoMatchingRouteErrorHandler from 'containers/NoMatchingRouteErrorHandler';
import ErrorMessage from 'domain/ErrorMessage';
import ReactAI from 'react-appinsights';
import Config from 'domain/Config';
import Oidc from 'oidc-client';
import ReactGA from 'react-ga';
import Raven from 'raven-js';
import bindPolyfills from 'domain/Polyfills';
import log from 'domain/log';
 
bindPolyfills();
 
if (PRODUCTION) {
  ReactAI.init({ instrumentationKey: Config.get('appInsights') }, browserHistory);
}
 
Oidc.Log.logger = log;
Oidc.Log.level = PRODUCTION ? Oidc.Log.WARN : Oidc.Log.INFO;
 
const sentry = Config.get('sentry');
if (sentry && sentry.disabled !== true) {
  Raven.config(sentry.dsn, {
    release: COMMIT,
    environment: sentry.environment,
    tags: { version: VERSION },
    debug: ! PRODUCTION,
  }).install();
}
 
export function setupApp({ routes, reducer, errorMessageMap }) {
  const { store, syncBrowserHistory } = setupStore(reducer);
 
  Store.set(store);
  ErrorMessage.setMap(errorMessageMap);
 
  const gaKey = Config.get('gaKey');
  if (Config.get('gaKey')) {
    ReactGA.initialize(gaKey,
      {
        debug: ! PRODUCTION,
        titleCase: false,
        gaOptions: { siteSpeedSampleRate: 100 },
      });
  }
 
  const parsedRoutes = parseRoutes([
    {
      path: '/health-check',
    },
    ...singleSignOnRoutes,
    {
      component: IdleTimeoutHandler,
      childRoutes: [{
        component: App,
        childRoutes: [
          {
            component: LoadingOverlayHandler,
            childRoutes: [{
              component: AuthorizationHandler,
              childRoutes: [{
                component: ErrorPageHandler,
                childRoutes: [{
                  component: SaveBarHandler,
                  childRoutes: is.array(routes) ? routes : [routes],
                }],
              }],
            }],
          },
          {
            path: '*',
            component: NoMatchingRouteErrorHandler,
          },
        ],
      }],
    },
  ], store);
 
  render(
    <Provider store={store}>
      <SingleSignOnProvider store={store}>
        <Router history={syncBrowserHistory} routes={parsedRoutes} onUpdate={logPageView} />
      </SingleSignOnProvider>
    </Provider>,
    document.getElementById('root')
  );
}
 
function logPageView() {
  ReactGA.set({ page: window.location.pathname });
  ReactGA.pageview(window.location.pathname);
}
 
export default setupApp;