@sketchpixy/rubix
Version:
Rubix Bootstrap
105 lines (75 loc) • 3.1 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
exports.setupReducers = setupReducers;
exports.createReduxStore = createReduxStore;
exports.default = render;
var _rubixReactrouterReactRouterSsr = require('meteor/rubix:reactrouter:react-router-ssr');
var _redux = require('redux');
var _reactRouterRedux = require('react-router-redux');
var _reactRedux = require('react-redux');
var _reduxThunk = require('redux-thunk');
var _reduxThunk2 = _interopRequireDefault(_reduxThunk);
var _onRouterSetup = require('./onRouterSetup');
var _onRouterSetup2 = _interopRequireDefault(_onRouterSetup);
var _onRouterUpdate = require('./onRouterUpdate');
var _onRouterUpdate2 = _interopRequireDefault(_onRouterUpdate);
var _checkScroll = require('./checkScroll');
var _checkScroll2 = _interopRequireDefault(_checkScroll);
var _isBrowser = require('../isBrowser');
var _isBrowser2 = _interopRequireDefault(_isBrowser);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
if ((0, _isBrowser2.default)()) {
(0, _onRouterSetup2.default)();
}
// Data that is populated by hooks during startup
var store = void 0;
var history = void 0;
var reducer = void 0;
var initialState = void 0;
function setupReducers(reducers) {
reducer = (0, _redux.combineReducers)((0, _extends3.default)({}, reducers, {
routing: _reactRouterRedux.routerReducer
}));
}
// Use history hook to get a reference to the history object
var historyHook = function historyHook(newHistory) {
if ((0, _isBrowser2.default)()) {
history = (0, _reactRouterRedux.syncHistoryWithStore)(newHistory, store);
} else {
history = newHistory;
}
};
// Pass the state of the store as the object to be dehydrated server side
var dehydrateHook = function dehydrateHook() {
return store.getState();
};
// Take the rehydrated state and use it as the initial state client side
var rehydrateHook = function rehydrateHook(state) {
return initialState = state;
};
function createStoreWithMiddleware() {
return (0, _redux.compose)((0, _redux.applyMiddleware)(_reduxThunk2.default), (0, _isBrowser2.default)() && typeof window.devToolsExtension !== 'undefined' ? window.devToolsExtension() : function (f) {
return f;
})(_redux.createStore);
}
function createReduxStore(initialState) {
return createStoreWithMiddleware()(reducer, initialState);
}
// Create a redux store and pass into the redux Provider wrapper
var wrapperHook = function wrapperHook(app) {
store = createReduxStore(initialState, history);
return React.createElement(
_reactRedux.Provider,
{ store: store, key: 'provider' },
app
);
};
var clientOptions = { historyHook: historyHook, rehydrateHook: rehydrateHook, wrapperHook: wrapperHook };
var serverOptions = { historyHook: historyHook, dehydrateHook: dehydrateHook };
function render(routes) {
_rubixReactrouterReactRouterSsr.ReactRouterSSR.Run(routes, clientOptions, serverOptions);
}
;