accounts-frontend/src/index.js

144 lines
4.8 KiB
JavaScript
Raw Normal View History

import 'polyfills';
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider as ReduxProvider } from 'react-redux';
import { Router, browserHistory } from 'react-router';
import webFont from 'webfontloader';
import { factory as userFactory } from 'components/user/factory';
2016-05-20 01:11:43 +05:30
import { IntlProvider } from 'components/i18n';
import routesFactory from 'routes';
2016-06-18 20:30:45 +05:30
import storeFactory from 'storeFactory';
2016-07-30 00:59:27 +05:30
import bsodFactory from 'components/ui/bsod/factory';
import loader from 'services/loader';
import logger from 'services/logger';
logger.init({
sentryCdn: window.SENTRY_CDN
});
import dispatchBsod from 'components/ui/bsod/dispatchBsod'; // TODO: remove after tests
import dispatchBsod from 'components/ui/bsod/dispatchBsod'; // TODO: remove after tests
2016-06-18 20:30:45 +05:30
const store = storeFactory();
2016-07-30 00:59:27 +05:30
bsodFactory(store, stopLoading);
const fontLoadingPromise = new Promise((resolve) =>
webFont.load({
classes: false,
active: resolve,
inactive: resolve, // TODO: may be we should track such cases
timeout: 2000,
custom: {
families: ['Roboto', 'Roboto Condensed']
}
})
);
Promise.all([
userFactory(store),
fontLoadingPromise
])
2016-05-20 01:11:43 +05:30
.then(() => {
ReactDOM.render(
2016-05-20 01:11:43 +05:30
<ReduxProvider store={store}>
<IntlProvider>
<Router history={browserHistory} onUpdate={() => {
restoreScroll();
stopLoading();
setTimeout(dispatchBsod, 0); // TODO: remove after tests
}}>
{routesFactory(store)}
</Router>
2016-05-20 01:11:43 +05:30
</IntlProvider>
</ReduxProvider>,
document.getElementById('app')
);
initAnalytics();
});
function stopLoading() {
loader.hide();
}
2016-06-04 02:21:45 +05:30
import scrollTo from 'components/ui/scrollTo';
const SCROLL_ANCHOR_OFFSET = 80; // 50 + 30 (header height + some spacing)
2016-05-31 10:20:22 +05:30
/**
* Scrolls to page's top or #anchor link, if any
*/
function restoreScroll() {
const {hash} = location;
// Push onto callback queue so it runs after the DOM is updated
setTimeout(() => {
const id = hash.replace('#', '');
const el = id ? document.getElementById(id) : null;
2016-12-28 11:41:35 +05:30
const viewPort = document.body;
if (!viewPort) {
console.log('Can not find viewPort element'); // eslint-disable-line
2016-07-29 23:25:19 +05:30
return;
}
let y = 0;
2016-05-31 10:20:22 +05:30
if (el) {
const {scrollTop} = viewPort;
const {top} = el.getBoundingClientRect();
y = scrollTop + top - SCROLL_ANCHOR_OFFSET;
2016-05-31 10:20:22 +05:30
}
scrollTo(y, viewPort);
2016-08-14 14:31:04 +05:30
}, 200);
2016-05-31 10:20:22 +05:30
}
import { loadScript, debounce } from 'functions';
const trackPageView = debounce(_trackPageView);
function initAnalytics() {
if (!window.ga) {
const ga = window.ga = function() {
(ga.q = ga.q || []).push(arguments); // eslint-disable-line
};
ga.l = Date.now(); // eslint-disable-line
if (window.GA_ID) {
// when GA is not available, we will continue to push into array
// for debug purposes
loadScript('https://www.google-analytics.com/analytics.js');
}
2016-11-20 17:31:57 +05:30
ga('create', window.GA_ID, 'auto');
trackPageView(location);
2016-11-20 17:31:57 +05:30
browserHistory.listen(trackPageView);
2016-11-20 17:31:57 +05:30
}
}
function _trackPageView(location) {
const ga = window.ga;
2016-11-20 17:31:57 +05:30
ga('set', 'page', location.pathname + location.search);
ga('send', 'pageview');
}
/* global process: false */
if (process.env.NODE_ENV !== 'production') {
// some shortcuts for testing on localhost
window.testOAuth = (loginHint = '') => location.href = `/oauth2/v1/ely?client_id=ely&redirect_uri=http%3A%2F%2Fely.by%2Fauthorization%2Foauth&response_type=code&scope=account_info%2Caccount_email&login_hint=${loginHint}`;
window.testOAuthPromptAccount = () => location.href = '/oauth2/v1/ely?client_id=ely&redirect_uri=http%3A%2F%2Fely.by%2Fauthorization%2Foauth&response_type=code&scope=account_info%2Caccount_email&prompt=select_account';
window.testOAuthPromptPermissions = (loginHint = '') => location.href = `/oauth2/v1/ely?client_id=ely&redirect_uri=http%3A%2F%2Fely.by%2Fauthorization%2Foauth&response_type=code&scope=account_info%2Caccount_email&prompt=consent&login_hint=${loginHint}`;
window.testOAuthPromptAll = () => location.href = '/oauth2/v1/ely?client_id=ely&redirect_uri=http%3A%2F%2Fely.by%2Fauthorization%2Foauth&response_type=code&scope=account_info%2Caccount_email&prompt=select_account,consent';
window.testOAuthStatic = () => location.href = '/oauth2/v1/ely?client_id=ely&redirect_uri=static_page_with_code&response_type=code&scope=account_info%2Caccount_email';
window.testOAuthStaticCode = () => location.href = '/oauth2/v1/ely?client_id=ely&redirect_uri=static_page&response_type=code&scope=account_info%2Caccount_email';
// expose Perf
window.Perf = require('react-addons-perf');
}