cluedin-widget
Version: 
This project contains all the pages needed for browsing entities and searching them. The aim is to replace the CluedIn.Webapp project with this one when all the pages ( including the Admin page ) will be ported to REACT.
93 lines (81 loc) • 2.99 kB
JavaScript
import constants from '../constants';
const initialState = {
  entities: {},
  selectedEntity: void 0,
  isFetchingEntity: true,
  genericLatestEntities: {},
  isFetchingGenericLatest: {},
  currentSuggestedSearches: {},
  isFetchingSuggestedSearches: {},
  entityByEmail: {},
  isFetchingEntityByEmail: true,
  entityFromSalesForce: void 0,
  isFetchingEntityFromSalesForce: true,
  entityEmailNotFound: true,
};
export default function update(state = initialState, action = {}) {
  switch (action.type) {
    case constants.entity.REQUEST_ENTITY:
      return Object.assign({}, state, {
        entities: state.entities,
        selectedEntity: void 0,
        isFetchingEntity: true,
        currentSuggestedSearches: {},
        isFetchingSuggestedSearches: {},
      });
    case constants.entity.RECEIVE_ENTITY:
      var entities = state.entities;
      if (action.data.addToEntities) {
        entities[action.data.entity.id] = action.data.entity;
      }
      return Object.assign({}, state, {
        entities: Object.assign({}, entities),
        selectedEntity: action.data.entity,
        isFetchingEntity: false,
      });
    case constants.entity.REQUEST_GENERIC_LATEST:
      var type = action.data.type;
      state.isFetchingGenericLatest[type] = true;
      return Object.assign({}, state, {
        isFetchingGenericLatest: Object.assign(state.isFetchingGenericLatest),
      });
    case constants.entity.RECEIVE_GENERIC_LATEST:
      var entitiesPerType = action.data.entities;
      var type = action.data.type;
      state.genericLatestEntities[type] = entitiesPerType;
      state.isFetchingGenericLatest[type] = false;
      return Object.assign({}, state, {
        genericLatestEntities: Object.assign(state.genericLatestEntities),
        isFetchingGenericLatest: Object.assign(state.isFetchingGenericLatest),
      });
    case constants.entity.RECEIVE_SUGGESTED_SEARCH:
      var suggested = {};
      suggested[action.data.index] = action.data.entities;
      var suggestedSearches = Object.assign(state.currentSuggestedSearches, suggested);
      return Object.assign({}, state, {
        currentSuggestedSearches: Object.assign({}, suggestedSearches),
      });
    case constants.entity.REQUEST_ENTITY_BY_EMAIL:
      return Object.assign({}, state, {
        isFetchingEntityByEmail: true,
        entityEmailNotFound: false,
      });
    case constants.entity.RECEIVE_ENTITY_BY_EMAIL:
      return Object.assign({}, state, {
        entityByEmail: action.data.entity,
        isFetchingEntityByEmail: false,
      });
    case constants.entity.RECEIVE_ENTITY_FOR_SALESFORCE:
      return Object.assign({}, state, {
        entityFromSalesForce: action.data.entity,
        isFetchingEntityFromSalesForce: false,
      });
    case constants.entity.INVALID_ENTITY_BY_EMAIL:
      return Object.assign({}, state, {
        entityEmailNotFound: true,
        isFetchingEntityByEmail: false,
      });
    default :
      return state;
  }
};