client/src/actions/notesActions.js
author Alexandre Segura <mex.zktk@gmail.com>
Tue, 27 Jun 2017 13:12:19 +0200
changeset 98 2e939d9cf193
parent 86 fa8ef84a1780
child 129 d48946d164c6
permissions -rw-r--r--
Introduce WebAnnotationSerializer.

import uuidV1 from 'uuid/v1';

import * as types from '../constants/actionTypes';
import WebAnnotationSerializer from '../api/WebAnnotationSerializer';

export const addNote = (session, data) => {
  const noteId = uuidV1();
  const note = {
    _id: noteId,
    session: session._id,
    raw: data.raw,
    plain: data.plain,
    html: data.html,
    startedAt: data.startedAt,
    finishedAt: data.finishedAt,
    categories: data.categories,
    marginComment: data.marginComment,
  };

  const noteSrvr = {
    ext_id: noteId,
    session: session._id,
    raw: JSON.stringify(data.raw),
    plain: data.plain,
    html: data.html,
    tc_start: data.startedAt,
    tc_end: data.finishedAt,
    categorization: WebAnnotationSerializer.serialize(note),
    margin_note: data.marginComment,
  }

  return {
    type: types.ADD_NOTE,
    note,
    meta: {
      offline: {
        effect: {
          url: `/api/notes/sessions/${session.get('_id')}/notes/`,
          method: 'POST',
          data: noteSrvr
        },
        commit: { type: types.NOOP },
        rollback: { type: types.NOOP }
      }
    }
  };
}

export const deleteNote = (note) => {
  return {
    type: types.DELETE_NOTE,
    note,
    meta: {
      offline: {
        effect: {
          url: `/api/notes/sessions/${note.get('session')}/notes/${note.get('_id')}/`,
          method: 'DELETE'
        },
        commit: { type: types.NOOP },
        rollback: { type: types.NOOP }
      }
    }
  };
}

export const updateNote = (note, data) => {
  const noteSrvr = {
    raw: JSON.stringify(data.raw),
    plain: data.plain,
    html: data.html,
    categorization: WebAnnotationSerializer.serialize(note),
    margin_note: data.marginComment,
  }

  return {
    type: types.UPDATE_NOTE,
    note,
    data,
    meta: {
      offline: {
        effect: {
          url: `/api/notes/sessions/${note.get('session')}/notes/${note.get('_id')}/`,
          method: 'PUT',
          data: noteSrvr
        },
        commit: { type: types.NOOP },
        rollback: { type: types.NOOP }
      }
    }
  };
}