vj4/ui/components/messagepad/reducers/isPosting.js

Summary

Maintainability
B
5 hrs
Test Coverage
import _ from 'lodash';
import Notification from 'vj/components/notification';

export default function reducer(state = {}, action) {
  switch (action.type) {
  case 'DIALOGUES_LOAD_DIALOGUES_FULFILLED': {
    const dialogues = action.payload.messages;
    return _.fromPairs(_.map(dialogues, d => [d._id, false]));
  }
  case 'DIALOGUES_CREATE': {
    const { id } = action.payload;
    return {
      ...state,
      [id]: false,
    };
  }
  case 'DIALOGUES_POST_REPLY_PENDING': {
    const id = action.meta.dialogueId;
    return {
      ...state,
      [id]: true,
    };
  }
  case 'DIALOGUES_POST_REPLY_REJECTED': {
    Notification.error(action.payload.message);
    const id = action.meta.dialogueId;
    return {
      ...state,
      [id]: false,
    };
  }
  case 'DIALOGUES_POST_REPLY_FULFILLED': {
    const id = action.meta.dialogueId;
    return {
      ...state,
      [id]: false,
    };
  }
  case 'DIALOGUES_POST_SEND_PENDING': {
    const { placeholderId } = action.meta;
    return {
      ...state,
      [placeholderId]: true,
    };
  }
  case 'DIALOGUES_POST_SEND_REJECTED': {
    Notification.error(action.payload.message);
    const { placeholderId } = action.meta;
    return {
      ...state,
      [placeholderId]: false,
    };
  }
  case 'DIALOGUES_POST_SEND_FULFILLED': {
    const { placeholderId } = action.meta;
    return {
      ..._.omit(state, placeholderId),
      [action.payload.mdoc._id]: false,
    };
  }
  case 'DIALOGUES_MESSAGE_PUSH': {
    const { type, data } = action.payload;
    const id = data._id;
    if (type === 'new') {
      return {
        ...state,
        [id]: false,
      };
    }
    return state;
  }
  default:
    return state;
  }
}