diff -r 34a75bd8d0b9 -r d48946d164c6 client/src/sagas/NoteSyncronizer.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/src/sagas/NoteSyncronizer.js Fri Jul 28 19:40:35 2017 +0200 @@ -0,0 +1,85 @@ +import { select } from 'redux-saga/effects' +import { getCreatedNotes, getUpdatedNotes, getDeletedNotes } from './selectors'; +import NoteRecord from '../store/noteRecord'; +import { doDeleteNote, loadNote, resetActionNote } from '../actions/notesActions'; +import Immutable from 'immutable'; +import SyncMixin from './BaseSyncronizer'; +import WebAnnotationSerializer from '../api/WebAnnotationSerializer'; + +class NoteSyncBase { + + // local diffs (immutable) + * getLocalDiffs() { + return Immutable.Map({ + created: yield select(getCreatedNotes), + updated: yield select(getUpdatedNotes), + deleted: yield select(getDeletedNotes) + }) + } + + // remote urls + getRemoteLoadUrl() { + return "/api/notes/notes/"; + } + + getRemoteDeleteUrl(localObjInst) { + return `/api/notes/sessions/${localObjInst.get('session')}/notes/${localObjInst.get('_id')}/`; + } + + getRemoteCreateUrl(localObjInst) { + return `/api/notes/sessions/${localObjInst.get('session')}/notes/`; + } + + getRemoteUpdateUrl(localObjInst) { + return `/api/notes/sessions/${localObjInst.get('session')}/notes/${localObjInst.get('_id')}/`; + } + + // build remote json message + getRemoteData(localObjInst) { + + return { + ext_id: localObjInst.get('_id'), + session: localObjInst.get('session'), + raw: JSON.stringify(localObjInst.get('raw')), + plain: localObjInst.get('plain'), + html: localObjInst.get('html'), + tc_start: localObjInst.get('startedAt'), + tc_end: localObjInst.get('finishedAt'), + categorization: JSON.stringify(WebAnnotationSerializer.serialize(localObjInst)), + margin_note: localObjInst.get('marginComment'), + } + + } + + getLocalRecord(remoteObj) { + return new NoteRecord({ + _id: remoteObj.ext_id, + session: remoteObj.session, + raw: JSON.parse(remoteObj.raw), + plain: remoteObj.plain, + html: remoteObj.html, + startedAt: remoteObj.tc_start, + finishedAt: remoteObj.tc_end, + categories: remoteObj.categorization, + marginComment: remoteObj.margin_note, + }); + } + + // actions + doDeleteLocalObj(localObjId) { + return doDeleteNote(localObjId); + } + + resetLocalObj(localObjInst) { + return resetActionNote(localObjInst); + } + + loadObj(objRecord) { + return loadNote(objRecord); + } + +} + +export class NoteSynchronizer extends SyncMixin(NoteSyncBase) {} + +export default NoteSynchronizer;