client/src/sagas/selectors.js
changeset 129 d48946d164c6
child 130 78246db1cbac
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/src/sagas/selectors.js	Fri Jul 28 19:40:35 2017 +0200
@@ -0,0 +1,49 @@
+// Define state selector for saga
+import Immutable from 'immutable';
+import { ActionEnum } from '../constants'
+
+export const getLastSync = state => state.getIn(['authStatus', 'lastSync']) || 0
+
+export const getToken = state => state.getIn(['authStatus','token'])
+
+const getSessionMapSelector = actionVal => state =>
+  state.get('sessions')
+    .filter(s => s.get('action') === actionVal)
+    .reduce(
+      (res, obj) => {
+        return res.set(obj.get('_id'), obj);
+      },
+      Immutable.Map()
+    );
+
+const getNoteMapSelector = actionVal => state => {
+  const deletedSessions = state.get('sessions')
+    .filter(s => s.get('action') === ActionEnum.DELETED)
+    .reduce(
+      (res, obj) => {
+        return res.set(obj.get('_id'), obj);
+      },
+      Immutable.Map()
+    );
+  return state.get('notes')
+    .filter(n => (n.get('action') === actionVal && !deletedSessions.has(n.get('session'))))
+    .reduce(
+      (res, obj) => {
+        return res.set(obj.get('_id'), obj);
+      },
+      Immutable.Map()
+    );
+}
+
+
+export const getUpdatedSessions = getSessionMapSelector(ActionEnum.UPDATED);
+
+export const getCreatedSessions = getSessionMapSelector(ActionEnum.CREATED);
+
+export const getDeletedSessions = getSessionMapSelector(ActionEnum.DELETED);
+
+export const getUpdatedNotes = getNoteMapSelector(ActionEnum.UPDATED);
+
+export const getCreatedNotes = getNoteMapSelector(ActionEnum.CREATED);
+
+export const getDeletedNotes = getNoteMapSelector(ActionEnum.DELETED);