Skip to content
This repository has been archived by the owner on Jan 22, 2020. It is now read-only.

Commit

Permalink
Merge pull request #171 from taosbeta/master
Browse files Browse the repository at this point in the history
Support redux
  • Loading branch information
samsel authored Aug 3, 2016
2 parents d5cd31e + 16c4840 commit fb85e49
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 4 deletions.
17 changes: 15 additions & 2 deletions lib/client.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
var Config = require('./config.json');
var ReactDOM = require('react-dom');
var assign = require('lodash').assign;
var isFunction = require('lodash').isFunction;

// declaring like this helps in unit test
// dependency injection using `rewire` module
Expand Down Expand Up @@ -76,6 +77,17 @@ exports.boot = function boot(options, callback) {
var useRouter = (props.__meta.view === null);
var mountNode = options.mountNode || _document;

// wrap component with react-redux Proivder if redux is required
var wrap = function(component) {
if (options.redux && options.redux.initStore && isFunction(options.redux.initStore)) {
var Provider = require('react-redux').Provider;
var store = options.redux.initStore(props);
return React.createElement(Provider, { store: store }, component);
} else {
return component;
}
};

if (useRouter) {

if (!options.routes) {
Expand All @@ -101,7 +113,8 @@ exports.boot = function boot(options, callback) {
history: history
});

ReactDOM.render(routerComponent, mountNode);
// wrap routerComponent with redux provider
ReactDOM.render(wrap(routerComponent), mountNode);
});

} else {
Expand All @@ -114,7 +127,7 @@ exports.boot = function boot(options, callback) {
// render the factory on the client
// doing this, sets up the event
// listeners and stuff aka mounting views.
ReactDOM.render(viewFactory(props), mountNode);
ReactDOM.render(wrap(viewFactory(props)), mountNode);
}

// call the callback with the data that was used for rendering
Expand Down
19 changes: 17 additions & 2 deletions lib/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -108,8 +108,23 @@ exports.create = function create(createOptions) {
}

function renderAndDecorate(component, data, html) {
// render the component
html += ReactDOMServer.renderToString(component);
if (createOptions.redux && createOptions.redux.initStore) {
// add redux provider
var Provider = require('react-redux').Provider;
var initStore;
try {
initStore = require(createOptions.redux.initStore);
var store = initStore(data);
var wrappedComponent = React.createElement(Provider, { store: store }, component);
// render the component
html += ReactDOMServer.renderToString(wrappedComponent);
} catch (err) {
throw err;
}
} else {
// render the component
html += ReactDOMServer.renderToString(component);
}

// state (script) injection
var safeData = util.safeSciptTag(JSON.stringify(data));
Expand Down

0 comments on commit fb85e49

Please sign in to comment.