client/src/selectors/coreSelectors.js
author Riwad Salim
Wed, 15 Aug 2018 23:39:02 +0200
changeset 145 5d2bc8c877ea
parent 137 279e1dffa213
child 168 ea92f4fe783d
permissions -rw-r--r--
Adding class for specific css in App, Navbar and SessionList components
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
134
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
import Immutable from 'immutable';
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
import { ActionEnum } from '../constants'
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
const getSessionMapSelector = actionVal => state =>
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
  state.get('sessions')
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
    .filter(s => s.get('action') === actionVal)
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
    .reduce(
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
      (res, obj) => {
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
        return res.set(obj.get('_id'), obj);
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
      },
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
      Immutable.Map()
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
    );
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
const getNoteMapSelector = actionVal => state => {
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
  const deletedSessions = state.get('sessions')
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
    .filter(s => s.get('action') === ActionEnum.DELETED)
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
    .reduce(
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
      (res, obj) => {
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
        return res.set(obj.get('_id'), obj);
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
      },
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
      Immutable.Map()
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
    );
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
  return state.get('notes')
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
    .filter(n => (n.get('action') === actionVal && !deletedSessions.has(n.get('session'))))
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
    .reduce(
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
      (res, obj) => {
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
        return res.set(obj.get('_id'), obj);
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
      },
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
      Immutable.Map()
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
    );
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
}
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
export const getUpdatedSessions = getSessionMapSelector(ActionEnum.UPDATED);
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
export const getCreatedSessions = getSessionMapSelector(ActionEnum.CREATED);
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
export const getDeletedSessions = getSessionMapSelector(ActionEnum.DELETED);
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
export const getUpdatedNotes = getNoteMapSelector(ActionEnum.UPDATED);
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
export const getCreatedNotes = getNoteMapSelector(ActionEnum.CREATED);
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
export const getDeletedNotes = getNoteMapSelector(ActionEnum.DELETED);
137
279e1dffa213 session is now created with current group and protocol
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    46
279e1dffa213 session is now created with current group and protocol
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    47
export const getActiveSessions = state => state.get('sessions').filter(session => session.get('action') !== ActionEnum.DELETED)
279e1dffa213 session is now created with current group and protocol
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    48
279e1dffa213 session is now created with current group and protocol
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    49
export const getSessions = state => state.get('sessions')
279e1dffa213 session is now created with current group and protocol
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    50
export const getNotes = state => state.get('notes')
279e1dffa213 session is now created with current group and protocol
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    51
279e1dffa213 session is now created with current group and protocol
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    52
export const getSession = (sessionId, state) => {
279e1dffa213 session is now created with current group and protocol
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    53
  const sessions = getSessions(state);
279e1dffa213 session is now created with current group and protocol
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    54
  return sessions.find(session => session._id === sessionId)
279e1dffa213 session is now created with current group and protocol
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    55
}
279e1dffa213 session is now created with current group and protocol
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    56
279e1dffa213 session is now created with current group and protocol
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    57
export const getSessionNotes = (sessionId, state) => {
279e1dffa213 session is now created with current group and protocol
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    58
  const notes = getNotes(state);
279e1dffa213 session is now created with current group and protocol
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    59
  return notes.filter(note => {
279e1dffa213 session is now created with current group and protocol
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    60
    return (note.get('session') === sessionId && note.get('action') !== ActionEnum.DELETED);
279e1dffa213 session is now created with current group and protocol
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    61
  }).sortBy( n => n.get('startedAt') );
279e1dffa213 session is now created with current group and protocol
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    62
}
279e1dffa213 session is now created with current group and protocol
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    63