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