Last active
September 8, 2016 18:19
-
-
Save goldhand/66255ba86cbc44e7685b9cf281de045c to your computer and use it in GitHub Desktop.
React render app (mount)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Vendor | |
import React from 'react'; | |
import ReactDOM from 'react-dom'; | |
import {Router, browserHistory} from 'react-router'; | |
import {Provider} from 'react-redux'; | |
import routes from './routes'; | |
import configureStore from './store/configureStore'; | |
import {loadState, saveReduxStore} from './store/localStorage'; | |
const ROOT_ELEMENT = 'main'; | |
// Stores that should be saved locally | |
const STORE_STATES = [ | |
]; | |
/** | |
* @param {string} env - NODE_ENV | |
* @returns {promise} - project container | |
*/ | |
function projectContainer(env) { | |
if (env !== 'production') { | |
if (!window.devToolsExtension) { | |
// use the internal DecTools because the browser plugin isn't available | |
return System.import('./containers/DevTools') | |
.then(DevTools => { | |
return ( | |
<div> | |
<Router history={browserHistory} routes={routes} /> | |
<DevTools.default /> | |
</div> | |
); | |
}) | |
.catch(() => { | |
// TODO: handle err | |
}); | |
} | |
} | |
// default to production | |
return Promise.resolve( | |
<Router history={browserHistory} routes={routes} /> | |
); | |
} | |
/** | |
* Renders the project | |
* generator for yielding async components: <projectElement> and <persisitState> | |
* @returns {generator} - render project | |
*/ | |
export default async () => { | |
try { | |
const projectElement = await projectContainer(process.env.NODE_ENV); | |
const persistState = await loadState(); | |
const store = configureStore(persistState); | |
// Save store states locally | |
saveReduxStore(store)(STORE_STATES); | |
// handle client side rendering | |
if (typeof document !== 'undefined') { | |
ReactDOM.render( | |
<Provider store={store}> | |
{projectElement} | |
</Provider>, | |
document.getElementById(ROOT_ELEMENT) | |
); | |
} | |
} catch (err) { | |
// TODO: handle err | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment