client/src/sagas/SessionSyncronizer.js
changeset 129 d48946d164c6
child 132 906a6c7c7943
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/src/sagas/SessionSyncronizer.js	Fri Jul 28 19:40:35 2017 +0200
@@ -0,0 +1,77 @@
+import { select } from 'redux-saga/effects'
+import { getCreatedSessions, getUpdatedSessions, getDeletedSessions } from './selectors';
+import { ActionEnum } from '../constants';
+import moment from 'moment';
+import SessionRecord from '../store/sessionRecord';
+import { doDeleteSession, loadSession, resetActionSession } from '../actions/sessionsActions';
+import Immutable from 'immutable';
+import SyncMixin from './BaseSyncronizer';
+
+class SessionSyncBase {
+
+  // local diffs (immutable)
+  * getLocalDiffs() {
+    return Immutable.Map({
+      created: yield select(getCreatedSessions),
+      updated: yield select(getUpdatedSessions),
+      deleted: yield select(getDeletedSessions)
+    })
+  }
+
+  // remote urls
+  getRemoteLoadUrl() {
+    return "/api/notes/sessions/";
+  }
+
+  getRemoteDeleteUrl(localObjInst) {
+    return `/api/notes/sessions/${localObjInst.get('_id')}/`;
+  }
+
+  getRemoteCreateUrl(localObjInst) {
+    return "/api/notes/sessions/";
+  }
+
+  getRemoteUpdateUrl(localObjInst) {
+    return `/api/notes/sessions/${localObjInst.get('_id')}/`;
+  }
+
+  // build remote json message
+  getRemoteData(localObjInst) {
+    return {
+      ext_id: localObjInst.get('_id'),
+      date: localObjInst.get('date'),
+      title: localObjInst.get('title'),
+      description: localObjInst.get('description'),
+      protocol: ''
+    };
+  }
+
+  getLocalRecord(remoteObj) {
+    return new SessionRecord({
+        _id: remoteObj.ext_id,
+        title: remoteObj.title,
+        description: remoteObj.description,
+        date: moment(remoteObj.date).toDate(),
+        action: ActionEnum.NONE,
+        group: null
+    });
+  }
+
+  // actions
+  doDeleteLocalObj(localObjId) {
+    return doDeleteSession(localObjId);
+  }
+
+  resetLocalObj(localObjInst) {
+    return resetActionSession(localObjInst);
+  }
+
+  loadObj(objRecord) {
+    return loadSession(objRecord);
+  }
+
+}
+
+export class SessionSynchronizer extends SyncMixin(SessionSyncBase) {}
+
+export default SessionSynchronizer;