react-cornerstone
Version:
A starter kit to form the cornerstones of your React+Redux+Express universal app
64 lines (46 loc) • 2.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _server = require('react-dom/server');
var _reactRedux = require('react-redux');
var _reduxFirstRouter = require('redux-first-router');
var _HttpError = require('./HttpError');
var _HttpError2 = _interopRequireDefault(_HttpError);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function configureMiddleware(configureStore, createRoutesConfig, Component, template, _ref) {
var getInitialState = _ref.getInitialState,
getHelpers = _ref.getHelpers;
return async function (req, res, next) {
try {
var initialState = getInitialState ? await getInitialState(req) : {};
var helpers = getHelpers ? getHelpers(req) : {};
var routesConfig = _extends({}, createRoutesConfig(helpers), {
initialEntries: [req.url]
});
var _configureStore = configureStore(false, routesConfig, initialState, req),
store = _configureStore.store,
thunk = _configureStore.thunk;
await thunk(store);
var _store$getState$locat = store.getState().location,
type = _store$getState$locat.type,
kind = _store$getState$locat.kind,
pathname = _store$getState$locat.pathname,
search = _store$getState$locat.search;
var status = 200;
if (type === _reduxFirstRouter.NOT_FOUND) status = 404;else if (kind === 'redirect') return res.redirect(302, search ? pathname + '?' + search : pathname);
var html = (0, _server.renderToString)(_react2.default.createElement(
_reactRedux.Provider,
{ store: store },
_react2.default.createElement(Component, null)
));
res.status(status).send(template(html, store.getState()));
} catch (err) {
next(err);
}
};
}
exports.default = configureMiddleware;