Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

/* eslint-disable no-case-declarations */
import { getMessagesDifferences } from '../../services/chat'
import { conversationActionTypes } from './conversation.types'

const initialState = [
  {
    id: '',
    lastPage: 1,
    currentPage: 1,
    loading: false,
    online: false,
    messages: []
  }
]

const conversationReducer = (
  state = initialState,
  { type, payload }
) => {
  switch (type) {
    case conversationActionTypes.START_LOADING:
      return { ...state, loading: true }

    case conversationActionTypes.FINISH_LOADING:
      return { ...state, loading: false }

    case conversationActionTypes.SET_UPDATE_MESSAGES:
      return {
        ...state,
        messages: [payload, ...state.messages]
      }

    case conversationActionTypes.SET_MESSAGES:
      const newMessages = getMessagesDifferences(state.messages, payload)

      if (!newMessages.length) {
        return { ...state, messages: payload }
      }

      return {
        ...state,
        messages: [...state.messages, ...newMessages]
      }

    case conversationActionTypes.SET_NEW_MESSAGE:
      return {
        ...state,
        messages: [
          ...state.messages,
          {
            ...payload,
            not_received: !state.conversation.online
          }
        ]
      }

    default:
      return state
  }
}

export default conversationReducer