client/src/store/configureStore.js
changeset 168 ea92f4fe783d
parent 134 be36eed5e6e0
child 172 4b780ebbedc6
--- a/client/src/store/configureStore.js	Tue Oct 09 19:07:47 2018 +0200
+++ b/client/src/store/configureStore.js	Mon Oct 08 18:35:47 2018 +0200
@@ -4,16 +4,10 @@
 import rootSyncSaga from '../sagas/syncSaga';
 import networkSaga from '../sagas/networkSaga';
 import { compose, createStore, applyMiddleware } from 'redux';
-import { routerMiddleware } from 'react-router-redux';
-import createSagaMiddleware from 'redux-saga'
-import Immutable from 'immutable';
-import {persistStore, autoRehydrate} from 'redux-persist-immutable'
+import { connectRouter, routerMiddleware } from 'connected-react-router'
+import createSagaMiddleware from 'redux-saga';
+import { persistStore, persistReducer } from 'redux-persist';
 import localForage from 'localforage';
-import immutableTransform from 'redux-persist-transform-immutable';
-import NoteRecord from './noteRecord';
-import SessionRecord from './sessionRecord';
-import UserRecord from './userRecord';
-import GroupRecord from './groupRecord';
 import APIClient from '../api/APIClient';
 import config from '../config';
 import asyncRequest from '../constants/asyncRequest';
@@ -25,52 +19,43 @@
 
 
 const defaultState = {
-  sessions: Immutable.List([]),
-  notes: Immutable.List([]),
-  groups: Immutable.List([]),
-  status: Immutable.Map({
+  sessions: [],
+  notes: [],
+  groups: [],
+  status: {
     isSynchronizing: false,
     online: false
-  }),
-  authStatus: Immutable.Map({
+  },
+  authStatus: {
     token: '',
     isAuthenticated: false,
     clientId: null,
     lastSync: 0,
     currentUser: null,
     currentGroup: null
-  }),
+  },
   autoSubmit: false,
   login: asyncRequest,
   register: asyncRequest,
   createGroup: asyncRequest
 };
 
-const immutableTransformConfig = {
-  records: [NoteRecord, SessionRecord, UserRecord, GroupRecord],
-  whitelist: ['sessions', 'notes', 'authStatus', 'groups']
-}
-
 const persistOptions = {
+  key: 'root',
   storage: localForage,
-  records: [NoteRecord, SessionRecord, UserRecord, GroupRecord],
-  transforms: [immutableTransform(immutableTransformConfig)],
   whitelist: ['sessions', 'notes', 'autoSubmit', 'authStatus', 'groups']
 }
 
 const apiClient = new APIClient(config.apiRootUrl);
 
-const storeInitialState = Immutable.Map({ ...defaultState });
-
+export default (history, initialState = defaultState) => {
 
-export default (history, initialState = storeInitialState) => {
-
+  const persistedReducer = connectRouter(history)(persistReducer(persistOptions, rootReducer));
   const router = routerMiddleware(history);
   const saga = createSagaMiddleware();
 
-  const store = createStore(rootReducer, initialState, composeEnhancers(
+  const store = createStore(persistedReducer, initialState, composeEnhancers(
     applyMiddleware(router, saga),
-    autoRehydrate()
   ));
 
   apiClient.setStore(store);
@@ -80,12 +65,13 @@
     history
   }
 
-  persistStore(store, persistOptions);
+  const persistor = persistStore(store, null, () => {
+    saga.run(rootAuthSaga, context);
+    saga.run(rootGroupSaga, context);
+    saga.run(rootSyncSaga, context);
+    saga.run(networkSaga, context);
+  });
 
-  saga.run(rootAuthSaga, context);
-  saga.run(rootGroupSaga, context);
-  saga.run(rootSyncSaga, context);
-  saga.run(networkSaga, context);
 
-  return store;
+  return { store, persistor };
 };