--- a/client/src/actions/sessionsActions.js Wed Jul 19 17:03:40 2017 +0200
+++ b/client/src/actions/sessionsActions.js Thu Jul 20 11:23:08 2017 +0200
@@ -9,6 +9,8 @@
date: now(),
title: '',
description: '',
+ deleted: false,
+ modified: true
};
return {
--- a/client/src/components/NotesList.js Wed Jul 19 17:03:40 2017 +0200
+++ b/client/src/components/NotesList.js Thu Jul 20 11:23:08 2017 +0200
@@ -88,7 +88,10 @@
};
function mapStateToProps(state, props) {
- return props;
+ return {
+ ...props,
+ notes : props.notes.filter(note => !note.deleted)
+ };
}
function mapDispatchToProps(dispatch) {
--- a/client/src/components/SessionList.js Wed Jul 19 17:03:40 2017 +0200
+++ b/client/src/components/SessionList.js Thu Jul 20 11:23:08 2017 +0200
@@ -55,10 +55,8 @@
<Col md={6} mdOffset={3}>
<ListGroup>
{this.props.sessions.map((session) =>
- <ListGroupItem
- key={session.get('_id')}
- onClick={() => this.props.history.push('/sessions/' + session.get('_id'))}>
- {session.title || 'No title'} {session.get('_id')} {moment(session.get('date')).format('DD/MM/YYYY')}
+ <ListGroupItem key={session.get('_id')}>
+ <span onClick={() => this.props.history.push('/sessions/' + session.get('_id'))}>{session.title || 'No title'} {session.get('_id')} {moment(session.get('date')).format('DD/MM/YYYY')}</span>
<a className="pull-right" onClick={ this.onClickDelete.bind(this, session) }>
<span className="material-icons">delete</span>
</a>
@@ -87,7 +85,7 @@
function mapStateToProps(state, props) {
return {
- sessions: state['sessions']
+ sessions: state['sessions'].filter(session => !session.deleted)
};
}
--- a/client/src/components/SessionSummary.js Wed Jul 19 17:03:40 2017 +0200
+++ b/client/src/components/SessionSummary.js Thu Jul 20 11:23:08 2017 +0200
@@ -23,7 +23,10 @@
}
function mapStateToProps(state, props) {
- return props;
+ return {
+ ...props,
+ notes : props.notes.filter(note => !note.deleted)
+ };
}
export default connect(mapStateToProps)(SessionSummary);
--- a/client/src/constants/actionTypes.js Wed Jul 19 17:03:40 2017 +0200
+++ b/client/src/constants/actionTypes.js Thu Jul 20 11:23:08 2017 +0200
@@ -2,11 +2,13 @@
export const ADD_NOTE = 'ADD_NOTE';
export const DELETE_NOTE = 'DELETE_NOTE';
+export const DO_DELETE_NOTE = 'DO_DELETE_NOTE';
export const UPDATE_NOTE = 'UPDATE_NOTE';
export const CREATE_SESSION = 'CREATE_SESSION';
export const UPDATE_SESSION = 'UPDATE_SESSION';
export const DELETE_SESSION = 'DELETE_SESSION';
+export const DO_DELETE_SESSION = 'DO_DELETE_SESSION';
export const LOAD_SESSIONS = 'LOAD_SESSIONS';
export const AUTH_LOGIN_SUBMIT = 'AUTH_LOGIN_SUBMIT';
--- a/client/src/reducers/notesReducer.js Wed Jul 19 17:03:40 2017 +0200
+++ b/client/src/reducers/notesReducer.js Thu Jul 20 11:23:08 2017 +0200
@@ -12,21 +12,34 @@
export default (state = Immutable.List([]), action) => {
switch (action.type) {
- case types.ADD_NOTE:
+ case types.ADD_NOTE: {
return state.push(new NoteRecord(action.note));
- case types.DELETE_NOTE:
+ }
+ case types.DELETE_NOTE: {
+ const noteIndex = findNoteIndex(state, action.note.get('_id'));
+ const note = findNote(state, action.note.get('_id'));
+ return state.set(noteIndex, note.merge({deleted:true, modified:true}));
+ }
+ case types.DO_DELETE_NOTE: {
const noteIndex = state.findIndex((note) => note.get('_id') === action.note.get('_id'));
return state.delete(noteIndex);
- case types.UPDATE_NOTE:
+ }
+ case types.UPDATE_NOTE: {
const index = findNoteIndex(state, action.note.get('_id'));
const note = findNote(state, action.note.get('_id'));
- let newNote = note;
- Object.entries(action.data).forEach(([key, value]) => {
- newNote = note.set(key, value)
- });
+ let newNote = note.merge(action.data, {modified:true});
return state.set(index, newNote);
- case types.DELETE_SESSION:
- return state.filter((note) => action.session.get('_id') !== note.session)
+ }
+ case types.DELETE_SESSION: {
+ const sessionId = action.session.get('_id');
+ return state.map((note) => {
+ if(sessionId === note.session) {
+ return note.merge({deleted:true, modified:true});
+ } else {
+ return note;
+ }
+ })
+ }
default:
return state;
}
--- a/client/src/reducers/sessionsReducer.js Wed Jul 19 17:03:40 2017 +0200
+++ b/client/src/reducers/sessionsReducer.js Thu Jul 20 11:23:08 2017 +0200
@@ -3,27 +3,35 @@
import SessionRecord from '../store/sessionRecord';
export const sessions = (state = Immutable.List([]), action) => {
- let sessionIndex;
switch (action.type) {
- case types.CREATE_SESSION:
+
+ case types.CREATE_SESSION: {
return state.push(new SessionRecord(action.session));
- case types.UPDATE_SESSION:
+ }
+ case types.UPDATE_SESSION: {
const sessionToUpdate = state.find(session => session === action.session);
- sessionIndex = state.indexOf(action.session);
+ const sessionIndex = state.indexOf(action.session);
if (sessionIndex === -1) {
return state;
}
- const updatedSession = sessionToUpdate.merge(action.values);
+ const updatedSession = sessionToUpdate.merge(action.values, {modified: true});
return state.set(sessionIndex, updatedSession);
- case types.DELETE_SESSION:
- sessionIndex = state.indexOf(action.session);
+ }
+ case types.DO_DELETE_SESSION: {
+ return state.filter((note) => action.session.get('_id') !== note.session)
+ }
+ case types.DELETE_SESSION: {
+ const sessionIndex = state.indexOf(action.session);
if (sessionIndex === -1) {
return state;
}
- return state.delete(sessionIndex);
- case types.LOAD_SESSIONS:
+ const deletedSession = state.get(sessionIndex);
+ return state.set(sessionIndex, deletedSession.merge({deleted:true, modified:true}));
+ }
+ case types.LOAD_SESSIONS: {
return action.sessions;
+ }
default:
return state;
}
--- a/client/src/store/noteRecord.js Wed Jul 19 17:03:40 2017 +0200
+++ b/client/src/store/noteRecord.js Thu Jul 20 11:23:08 2017 +0200
@@ -13,5 +13,7 @@
categories: [],
- marginComment: ''
+ marginComment: '',
+ deleted: false,
+ modified: true
}, 'Note');
--- a/client/src/store/sessionRecord.js Wed Jul 19 17:03:40 2017 +0200
+++ b/client/src/store/sessionRecord.js Thu Jul 20 11:23:08 2017 +0200
@@ -8,6 +8,9 @@
date: '',
- group: null
+ group: null,
+
+ deleted: false,
+ modified: true
}, 'Session');