accounts-frontend/packages/app/index.tsx

80 lines
2.3 KiB
TypeScript
Raw Normal View History

import 'app/polyfills';
2019-11-09 22:56:46 +05:30
import 'react-hot-loader';
import React from 'react';
import ReactDOM from 'react-dom';
import { factory as userFactory } from 'app/components/user/factory';
import authFlow from 'app/services/authFlow';
import storeFactory from 'app/storeFactory';
import bsodFactory from 'app/components/ui/bsod/factory';
import * as loader from 'app/services/loader';
import logger from 'app/services/logger';
import font from 'app/services/font';
import history, { browserHistory } from 'app/services/history';
import i18n from 'app/services/i18n';
import { loadScript, debounce } from 'app/functions';
import { Location as HistoryLocation } from 'history';
2019-11-09 22:56:46 +05:30
import App from './shell/App';
2019-12-07 16:58:52 +05:30
const win: { [key: string]: any } = window as any;
history.init();
logger.init({
2020-05-24 04:38:24 +05:30
sentryDSN: (window as any).SENTRY_DSN as string,
});
2016-06-18 20:30:45 +05:30
const store = storeFactory();
bsodFactory({
2020-05-24 04:38:24 +05:30
store,
history: browserHistory,
stopLoading: () => loader.hide(),
});
authFlow.setStore(store);
2016-07-30 00:59:27 +05:30
Promise.all([
2020-05-24 04:38:24 +05:30
userFactory(store),
font.load(['Roboto', 'Roboto Condensed']),
i18n.ensureIntl(), // ensure, that intl is polyfilled before any rendering
2019-11-09 22:56:46 +05:30
]).then(() => {
2020-05-24 04:38:24 +05:30
ReactDOM.render(<App store={store} history={browserHistory} />, document.getElementById('app'));
2020-05-24 04:38:24 +05:30
initAnalytics();
2019-11-09 22:56:46 +05:30
});
const trackPageView = debounce(_trackPageView);
function initAnalytics() {
2020-05-24 04:38:24 +05:30
if (!win.ga) {
const ga: {
[key: string]: any;
(...args: any[]): void;
} = function (...args) {
// eslint-disable-next-line id-length
(ga.q = ga.q || []).push(args);
};
win.ga = ga;
ga.l = Date.now(); // eslint-disable-line
2020-05-24 04:38:24 +05:30
if (win.GA_ID) {
// when GA is not available, we will continue to push into array
// for debug purposes
// Catch to prevent "unhandled rejection" error
loadScript('https://www.google-analytics.com/analytics.js').catch(() => {});
}
2016-11-20 17:31:57 +05:30
2020-05-24 04:38:24 +05:30
ga('create', win.GA_ID, 'auto');
trackPageView(location);
2016-11-20 17:31:57 +05:30
2020-05-24 04:38:24 +05:30
browserHistory.listen(trackPageView);
}
}
function _trackPageView(location: HistoryLocation | Location): void {
2020-05-24 04:38:24 +05:30
const { ga } = win;
2016-11-20 17:31:57 +05:30
2020-05-24 04:38:24 +05:30
ga('set', 'page', location.pathname + location.search);
ga('send', 'pageview');
2016-11-20 17:31:57 +05:30
}