UNPKG

@sketchpixy/rubix

Version:
105 lines (75 loc) 3.1 kB
'use strict'; 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); }