client/src/reducers/sessionsReducer.js
changeset 129 d48946d164c6
parent 124 c77570164050
child 132 906a6c7c7943
--- a/client/src/reducers/sessionsReducer.js	Tue Jul 25 19:11:26 2017 +0200
+++ b/client/src/reducers/sessionsReducer.js	Fri Jul 28 19:40:35 2017 +0200
@@ -1,6 +1,7 @@
 import Immutable from 'immutable';
 import * as types from '../constants/actionTypes';
 import SessionRecord from '../store/sessionRecord';
+import { ActionEnum } from '../constants';
 
 export const sessions = (state = Immutable.List([]), action) => {
 
@@ -15,11 +16,23 @@
       if (sessionIndex === -1) {
         return state;
       }
-      const updatedSession = sessionToUpdate.merge(action.values, {modified: true});
+      let newAction;
+      switch (sessionToUpdate.get('action')) {
+        case ActionEnum.CREATED:
+          newAction = ActionEnum.CREATED;
+          break;
+        case ActionEnum.DELETED: // should not happen, but...
+          newAction = ActionEnum.DELETED;
+          break;
+        default:
+          newAction = ActionEnum.UPDATED;
+      }
+
+      const updatedSession = sessionToUpdate.merge(action.values, {action: newAction});
       return state.set(sessionIndex, updatedSession);
     }
     case types.DO_DELETE_SESSION: {
-      return state.filter((note) => action.session.get('_id') !== note.session)
+      return state.filter((session) => action.sessionId !== session._id)
     }
     case types.DELETE_SESSION: {
       const sessionIndex = state.indexOf(action.session);
@@ -27,11 +40,41 @@
         return state;
       }
       const deletedSession = state.get(sessionIndex);
-      return state.set(sessionIndex, deletedSession.merge({deleted:true, modified:true}));
+      if(deletedSession.get('action') === ActionEnum.CREATED) {
+        // The session was previously created, we can delete it
+        return state.delete(sessionIndex);
+      } else {
+        return state.set(sessionIndex, deletedSession.merge({action: ActionEnum.DELETED}));
+      }
     }
     case types.LOAD_SESSIONS: {
       return action.sessions;
     }
+    case types.LOAD_SESSION: {
+      const sessionRec = action.session;
+      const sessionId = sessionRec.get('_id');
+      const index = state.findIndex((session) => session.get('_id') === sessionId);
+      if(index >= 0) {
+        return state.set(index, sessionRec);
+      } else {
+        return state.push(sessionRec);
+      }
+    }
+    case types.SYNC_RESET_ALL: {
+      return state.map((session) => {
+        if(session.action !== ActionEnum.NONE) {
+          return session.merge({action: ActionEnum.None});
+        } else {
+          return session;
+        }
+      });
+    }
+    case types.RESET_ACTION_SESSION: {
+      const sessionId = action.session.get('_id');
+      const index = state.findIndex((session) => session.get('_id') === sessionId);
+      const session = state.get(index);
+      return state.set(index, session.merge({action: ActionEnum.NONE}));
+    }
     default:
       return state;
   }