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; };
...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 };