stitch-ui
Version:
119 lines (101 loc) • 3.35 kB
JavaScript
/* global window, document */
// TODO proptypes
/* eslint-disable react/prop-types */
import React from "react";
import { render } from "react-dom";
import { Admin } from "mongodb-stitch";
import { Router, Route } from "react-router-dom";
import { createBrowserHistory, createMemoryHistory } from "history";
import { Provider } from "react-redux";
import thunk from "redux-thunk";
import { createStore, applyMiddleware, compose } from "redux";
import ProfileKeys from "./profile/components/ProfileKeys";
import Session from "./session";
import HomePage from "./home/components/HomePage";
import app from "./app/components";
import { RootAdminApp } from "./admin";
import adminConsole from "./reducers";
import { setClient, setSettings, setHistory, getUserProfile } from "./actions";
import ref from "./ref";
let enhancer;
if (process.env.NODE_ENV !== "production") {
const createLogger = require("redux-logger"); // eslint-disable-line global-require
const logger = createLogger({
collapsed: (getState, action, logEntry) => !logEntry.error
});
const composeEnhancers =
window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
enhancer = composeEnhancers(applyMiddleware(thunk, logger));
} else {
const composeEnhancers = compose;
enhancer = composeEnhancers(applyMiddleware(thunk));
}
const store = createStore(adminConsole, enhancer);
require("../static/app.scss");
const settings = window.settings;
let adminUrl = "";
if (settings.adminUrl) {
adminUrl = settings.adminUrl;
}
const admin = new Admin(adminUrl);
store.dispatch(setClient(admin));
store.dispatch(setSettings(settings));
if (admin.client.authedId()) {
store.dispatch(getUserProfile());
}
const history =
typeof window !== "undefined"
? createBrowserHistory()
: createMemoryHistory();
store.dispatch(setHistory(history));
const cloudUIUrl = `${settings.cloudUIBaseUrl}/v2#applications`;
// when not running locally have "/" and "/login" redirect to cloudUIBaseUrl
const baseRoutes = settings.cloudUIBaseUrl
? <div>
<Route exact path="/" render={() => (window.location = cloudUIUrl)} />
<Route path="/login" render={() => (window.location = cloudUIUrl)} />
</div>
: <div>
<Route exact path="/" component={HomePage} />
<Route path="/login" component={Session.Login} />
</div>;
render(
<Provider store={store}>
<div>
<Router history={history}>
<div>
{baseRoutes}
<Route path="/logout" component={Session.Logout} />
<Route path="/profile" component={ProfileKeys} />
<Route path="/admin" component={RootAdminApp} />
<Route path="/groups/:groupId/apps/:appId" component={app.App} />
<Route
path="/ref/:refPage"
render={routeProps => ref(routeProps.match.params.refPage)}
/>
</div>
</Router>
</div>
</Provider>,
document.getElementById("app")
);
let bootOnce = false;
const handleIntercom = () => {
if (!bootOnce && admin.client.authedId()) {
bootOnce = true;
window.Intercom("boot", {
app_id: settings.intercomAppId,
user_id: admin.client.authedId(),
widget: {
activator: "#IntercomDefaultWidget"
}
});
}
if (bootOnce) {
window.Intercom("update");
}
};
handleIntercom();
history.listen(() => {
handleIntercom();
});