diff -r 34a75bd8d0b9 -r d48946d164c6 client/src/reducers/sessionsReducer.js --- 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; }