mirror of
https://github.com/ascribe/onion.git
synced 2024-12-23 01:39:36 +01:00
bd2895afa0
Notable changes: * Updated to babel 6 * Updated polyfills to only include core-js/es6 and core-js/stage/4 rather than entire babel/polyfill set * Dev server with hot reloading replaces server.js in development * Updated bootstrap loading to be separate from app’s stylesheets * Cleaned up some of the font dependencies, removing the need for templating their paths
106 lines
3.2 KiB
JavaScript
106 lines
3.2 KiB
JavaScript
'use strict';
|
|
|
|
import 'core-js/es6';
|
|
import 'core-js/stage/4';
|
|
import 'classlist-polyfill';
|
|
import 'isomorphic-fetch';
|
|
|
|
import React from 'react';
|
|
import { Router, Redirect } from 'react-router';
|
|
import history from './history';
|
|
|
|
import ApiUrls from './constants/api_urls';
|
|
|
|
import AppConstants from './constants/application_constants';
|
|
import getRoutes from './routes';
|
|
import requests from './utils/requests';
|
|
|
|
import { updateApiUrls } from './constants/api_urls';
|
|
import { getDefaultSubdomainSettings, getSubdomainSettings } from './utils/constants_utils';
|
|
import { initLogging } from './utils/error_utils';
|
|
import { getSubdomain } from './utils/general_utils';
|
|
|
|
// FIXME: redo these event actions
|
|
import EventActions from './actions/event_actions';
|
|
|
|
// FIXME: use a ./third_party/index.js instead, remove DebugHandler
|
|
// You can comment out the modules you don't need
|
|
// import DebugHandler from './third_party/debug_handler';
|
|
import './third_party/facebook_handler';
|
|
import './third_party/ga_handler';
|
|
import './third_party/intercom_handler';
|
|
import './third_party/notifications_handler';
|
|
import './third_party/raven_handler';
|
|
|
|
// Import global stylesheet
|
|
import '../sass/main.scss';
|
|
|
|
|
|
const AppGateway = {
|
|
start() {
|
|
try {
|
|
const subdomain = getSubdomain();
|
|
const settings = getSubdomainSettings(subdomain);
|
|
|
|
AppConstants.whitelabel = settings;
|
|
updateApiUrls(settings.type, subdomain);
|
|
this.load(settings);
|
|
} catch(err) {
|
|
// if there are no matching subdomains, we're routing
|
|
// to the default frontend
|
|
console.logGlobal(err);
|
|
this.load(getDefaultSubdomainSettings());
|
|
}
|
|
},
|
|
|
|
load(settings) {
|
|
const { subdomain, type } = settings;
|
|
let redirectRoute = (<Redirect from="/" to="/collection" />);
|
|
|
|
if (subdomain) {
|
|
// Some whitelabels have landing pages so we should not automatically redirect from / to /collection.
|
|
// Only www and cc do not have a landing page.
|
|
if (subdomain !== 'cc') {
|
|
redirectRoute = null;
|
|
}
|
|
|
|
// Adds a client specific class to the body for whitelabel styling
|
|
window.document.body.classList.add('client--' + subdomain);
|
|
}
|
|
|
|
// Send the applicationWillBoot event to the third-party stores
|
|
EventActions.applicationWillBoot(settings);
|
|
|
|
// `history.listen` is called on every route change, which is perfect for
|
|
// us in that case.
|
|
history.listen(EventActions.routeDidChange);
|
|
|
|
React.render((
|
|
<Router history={history}>
|
|
{redirectRoute}
|
|
{getRoutes(type, subdomain)}
|
|
</Router>
|
|
), document.getElementById('main'));
|
|
|
|
// Send the applicationDidBoot event to the third-party stores
|
|
EventActions.applicationDidBoot(settings);
|
|
}
|
|
};
|
|
|
|
// Initialize pre-start components
|
|
initLogging();
|
|
|
|
requests.defaults({
|
|
urlMap: ApiUrls,
|
|
http: {
|
|
headers: {
|
|
'Accept': 'application/json',
|
|
'Content-Type': 'application/json'
|
|
},
|
|
credentials: 'include'
|
|
}
|
|
});
|
|
|
|
// And bootstrap app
|
|
AppGateway.start();
|