Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 5320 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
5307 stevensc 1
/* eslint-disable no-case-declarations */
2
import { getMessagesDifferences } from '../../services/chat'
3
import { conversationActionTypes } from './conversation.types'
5306 stevensc 4
 
5331 stevensc 5
const initialState = [
6
  {
7
    id: '',
8
    lastPage: 1,
9
    currentPage: 1,
10
    loading: false,
11
    online: false,
12
    messages: []
13
  }
14
]
5306 stevensc 15
 
5309 stevensc 16
const conversationReducer = (
17
  state = initialState,
18
  { type, payload }
19
) => {
5306 stevensc 20
  switch (type) {
5307 stevensc 21
    case conversationActionTypes.START_LOADING:
5309 stevensc 22
      return { ...state, loading: true }
23
 
24
    case conversationActionTypes.FINISH_LOADING:
25
      return { ...state, loading: false }
26
 
5307 stevensc 27
    case conversationActionTypes.SET_UPDATE_MESSAGES:
28
      return {
29
        ...state,
30
        messages: [payload, ...state.messages]
31
      }
5309 stevensc 32
 
5307 stevensc 33
    case conversationActionTypes.SET_MESSAGES:
34
      const newMessages = getMessagesDifferences(state.messages, payload)
35
 
36
      if (!newMessages.length) {
37
        return { ...state, messages: payload }
38
      }
39
 
40
      return {
41
        ...state,
42
        messages: [...state.messages, ...newMessages]
43
      }
5309 stevensc 44
 
5307 stevensc 45
    case conversationActionTypes.SET_NEW_MESSAGE:
46
      return {
47
        ...state,
5306 stevensc 48
        messages: [
49
          ...state.messages,
50
          {
51
            ...payload,
52
            not_received: !state.conversation.online
53
          }
54
        ]
55
      }
5309 stevensc 56
 
5306 stevensc 57
    default:
58
      return state
59
  }
60
}
5309 stevensc 61
 
62
export default conversationReducer