yahoi
Version:
Yet Another Highly Opinionated Isomorphic Framework
73 lines (64 loc) • 2.32 kB
JavaScript
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'));
}