client/src/reducers/notesReducer.js
author Alexandre Segura <mex.zktk@gmail.com>
Tue, 27 Jun 2017 10:54:04 +0200
changeset 96 b58463d7dc8e
parent 80 b3a02ea6d097
child 109 ef62de545a8d
permissions -rw-r--r--
Also delete notes when deleting session.

import Immutable from 'immutable';
import * as types from '../constants/actionTypes';
import NoteRecord from '../store/noteRecord';

const findNoteIndex = (notes, id) => {
  return notes.findIndex((note) => note.get('_id') === id);
}

const findNote = (notes, id) => {
  return notes.get(findNoteIndex(notes, id));
}

export default (state = Immutable.List([]), action) => {
  switch (action.type) {
    case types.ADD_NOTE:
      return state.push(new NoteRecord(action.note));
    case types.DELETE_NOTE:
      const noteIndex = state.findIndex((note) => note.get('_id') === action.note.get('_id'));
      return state.delete(noteIndex);
    case types.UPDATE_NOTE:
      const index = findNoteIndex(state, action.note.get('_id'));
      const note = findNote(state, action.note.get('_id'));
      const newNote = note
        .set('plain', action.data.plain)
        .set('raw', action.data.raw)
        .set('html', action.data.html)
        .set('categories', action.data.categories);
      return state.set(index, newNote);
    case types.DELETE_SESSION:
      return state.filter((note) => action.session.get('_id') !== note.session)
    default:
      return state;
  }
};