const configureStore = router => {
  const middlewares = [];
  // NOTE: Order is very important for middlewares - downstream can only intercept
  // upstream events

  // Thunks: async side effects
  middlewares.push(thunkMiddleware);

  // Persist (on client side) certain pieces of data
  const analyticsPersistConfig = {
    key: "analytics",
    storage,
    version: 0,
    migrate: createMigrate({ 0: state => ({ ...state }) }, { debug: false })
  };

  const authPersistConfig = {
    key: "auth",
    storage,
    version: 0,
    migrate: createMigrate({ 0: state => ({ ...state }) }, { debug: false })
  };

  const persistedReducer = combineReducers({
    ...rootReducerObject,
    analytics: persistReducer(
      analyticsPersistConfig,
      rootReducerObject.analytics
    ),
    auth: persistReducer(authPersistConfig, rootReducerObject.auth)
  });

  // Authentication middleware
  middlewares.push(createAuthMiddleware());

  // Analytics middleware
  /* eslint-disable no-undef */
  if (ANALYTICS === "yes") {
    /* eslint-enable no-undef */
    middlewares.push(createAnalyticsMiddleware());
  }

  // Router middleware
  middlewares.push(createRouter5Middleware(router));

  // Logging middleware - for debug purposes
  /* eslint-disable global-require */
  /* eslint-disable no-undef */
  if (NODE_ENV === "development") {
    /* eslint-enable no-undef */
    const { logger } = require("redux-logger");
    middlewares.push(logger);
  }
  /* eslint-enable global-require */

  const store = createStore(persistedReducer, applyMiddleware(...middlewares));

  // Sync router navigations to redux store
  router.usePlugin(router5ReduxPlugin(store.dispatch));

  return store;
};
Example #2
0
      ...token,
      id: uuid.v4(),
    })),
  }),
};

const storage = createSensitiveStorage({
  encrypt: true,
  keychainService: 'eltwallet',
  sharedPreferencesName: 'eltwallet',
});

const persistConfig = {
  key: 'eltwallet',
  version: 1,
  storage,
  migrate: createMigrate(migrations, { debug: false }),
};

const store = createStore(
  persistReducer(persistConfig, rootReducer),
  defaultState,
  process.env.NODE_ENV === 'production'
    ? undefined
    : applyMiddleware(createLogger()),
);

const persistor = persistStore(store);

export { persistor, store };