UNPKG

yahoi

Version:

Yet Another Highly Opinionated Isomorphic Framework

73 lines (64 loc) 2.32 kB
import React from 'react'; import ReactDom from 'react-dom'; import { StaticRouter, BrowserRouter, Route } from 'react-router-dom' import { Provider } from 'react-redux'; import Loadable from 'react-loadable'; import { ClientStore, ServerStore } from 'Stores'; import { report } from 'import-inspector'; import { ServerStyleSheet } from 'styled-components'; import path from 'path'; import i18n, { init } from 'yahoi/i18n'; import env from 'Environment'; import { I18nextProvider } from 'react-i18next'; init(env.i18next); const Routes = <div> <Route exact path="/examples/client" component={ Loadable({ loader: () => report(import(/* webpackChunkName: "ExamplePage" */ __dirname + '/../Containers/ExamplePage'), { serverSideRequirePath: __dirname + './../Containers/ExamplePage', webpackRequireWeakId: () => require.resolveWeak(__dirname + '/../Containers/ExamplePage') }), loading: () => (<div>Loading</div>), })} /> </div> if (module.hot) { module.hot.accept(); } var Client = class Client extends React.Component { constructor(props) { super(props); if(typeof(document)!=='undefined') { } else { this.store = ServerStore(props.ssr.preloadedState); } } render() { if(typeof(document)!=='undefined') { // Clientside let state = ClientStore.getState(); return ( <Provider store={ClientStore}> <I18nextProvider i18n={i18n} initialLanguage={state.Locale.language} initialI18nStore={state.Locale.preloadedTranslations}> <BrowserRouter> {Routes} </BrowserRouter> </I18nextProvider> </Provider> ); } else { // Serverside let state = this.store.getState() return ( <Provider store={this.store}> <I18nextProvider i18n={i18n} initialLanguage={state.Locale.language} initialI18nStore={state.Locale.preloadedTranslations}> <StaticRouter location={this.props.ssr.location} context={this.props.ssr.context}> {Routes} </StaticRouter> </I18nextProvider> </Provider> ); } } } export default Client; if(typeof(document)!=='undefined') { ReactDom.render(<Client />, document.getElementById('client-wrapper')); }