1 |
|
2 |
|
3 |
|
4 | import React from 'react';
|
5 | import Relay from 'react-relay';
|
6 | import IsomorphicRelay from 'isomorphic-relay';
|
7 | import IsomorphicRouter from 'isomorphic-relay-router';
|
8 | import {render} from 'react-dom';
|
9 | import {AppContainer} from 'react-hot-loader';
|
10 | import {Provider} from 'react-redux';
|
11 | import Router from 'react-router/lib/Router';
|
12 | import browserHistory from 'react-router/lib/browserHistory';
|
13 | import match from 'react-router/lib/match';
|
14 |
|
15 | export default function createClientRenderer({store}: {store: Object}) {
|
16 | const environment = new Relay.Environment();
|
17 | environment.injectNetworkLayer(new Relay.DefaultNetworkLayer('/graphql'));
|
18 | const data = window.APP_STATE;
|
19 |
|
20 | IsomorphicRelay.injectPreparedData(environment, data);
|
21 |
|
22 |
|
23 | const container = document.querySelector('#app');
|
24 |
|
25 | return function renderApp(routes: React$Element<*>) {
|
26 |
|
27 |
|
28 |
|
29 | match({history: browserHistory, routes}, (error, redirectLocation, renderProps) => {
|
30 | if (error) {
|
31 | console.log('==> 😠React Router match failed.');
|
32 | }
|
33 |
|
34 | IsomorphicRouter
|
35 | .prepareInitialRender(environment, renderProps)
|
36 | .then((props) => {
|
37 | return render(
|
38 | <AppContainer>
|
39 | <Provider store={store}>
|
40 | <Router {...props} />
|
41 | </Provider>
|
42 | </AppContainer>,
|
43 | container,
|
44 | );
|
45 | })
|
46 | .catch((error) => {
|
47 | console.log('==> 😠Rendering failed.');
|
48 | console.log(error);
|
49 | });
|
50 | });
|
51 | };
|
52 | }
|