UNPKG

stitch-ui

Version:

119 lines (101 loc) 3.35 kB
/* 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(); });