Example #1
0
 getIndexRoute: async (location, cb) => {
   let promiseMap = setKanbanImports();
   let importMap = await resolvePromiseMap(promiseMap);
   let {component, optimistic, ...asyncReducers} = getKanbanImports(importMap);
   let newReducer = makeReducer(asyncReducers, optimistic);
   store.replaceReducer(newReducer);
   cb(null, {component});
 }
Example #2
0
 getComponent: async(location, cb) => {
   const promiseMap = setImports();
   const importMap = await resolvePromiseMap(promiseMap);
   const {component, ...asyncReducers} = getImports(importMap);
   const newReducer = makeReducer(asyncReducers);
   store.replaceReducer(newReducer);
   cb(null, component);
 }
Example #3
0
export default async initialState => {
  let store;
  const reducer = makeReducer();
  const engine = createEngine(APP_REDUX_KEY);
  const storageMiddleware = createMiddleware(engine, [], storageWhitelist);
  const segmentMiddleware = createTracker();
  /*
   * Special action types, such as thunks, must be placed before
   * storageMiddleware so they can be properly interpreted:
   */
  const middlewares = [
    thunkMiddleware,
    segmentMiddleware,
    storageMiddleware
  ];

  if (__PRODUCTION__) {
    store = createStore(reducer, initialState, compose(applyMiddleware(...middlewares)));
  } else {
    const devtoolsExt = global.devToolsExtension && global.devToolsExtension();
    if (!devtoolsExt) {
      // We don't have the Redux extension in the browser, show the Redux logger
      const createLogger = require('redux-logger'); // eslint-disable-line global-require
      const logger = createLogger({
        level: 'info',
        collapsed: true
      });
      middlewares.push(logger);
    }
    store = createStore(reducer, initialState, compose(
      applyMiddleware(...middlewares),
      devtoolsExt || (f => f),
    ));
  }
  const versionInStorage = window.localStorage.getItem(APP_VERSION_KEY) || '0.0.0';
  if (APP_VERSION !== versionInStorage) {
    window.localStorage.setItem(APP_VERSION_KEY, APP_VERSION);
    return store;
  }
  const load = createLoader(engine);
  await load(store);
  return store;
};