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.
99 lines (91 loc) • 3.34 kB
JavaScript
import constants from '../constants';
import iso from '../../iso';
const initialState = {
  insights: [],
  isFetchingInsights: false,
  searches: [],
  isFetchingSearches: false,
  showNotification: false,
};
export default function update(state = initialState, action = {}) {
  switch (action.type) {
    case constants.insights.RESET_NOTIFICATION_FOR_SEARCH:
      return Object.assign({}, {
        insights: state.insights,
        isFetchingInsights: state.isFetchingInsights,
        searches: state.searches,
        isFetchingSearches: state.isFetchingSearches,
        showNotification: false,
      });
    case constants.insights.REQUEST_ALL_INSIGHTS:
      return Object.assign({}, {
        insights: state.insights,
        isFetchingInsights: true,
        searches: state.searches,
        isFetchingSearches: state.isFetchingSearches,
        showNotification: state.showNotification,
      });
    case constants.insights.RECEIVE_ALL_INSIGHTS:
      return Object.assign({}, {
        insights: action.data.insights,
        isFetchingInsights: false,
        searches: state.searches,
        isFetchingSearches: state.isFetchingSearches,
        showNotification: state.showNotification,
      });
    case constants.insights.RECEIVE_ALL_SEARCHES:
      return Object.assign({}, {
        insights: state.insights,
        isFetchingInsights: state.isFetchingInsights,
        searches: action.data.searches,
        isFetchingSearches: false,
        showNotification: state.showNotification,
      });
    case constants.insights.REQUEST_ALL_SEARCHES:
      return Object.assign({}, {
        insights: state.insights,
        isFetchingInsights: state.isFetchingInsights,
        searches: state.searches,
        isFetchingSearches: true,
        showNotification: state.showNotification,
      });
    case constants.insights.RECEIVE_CLEAR_COUNT:
      let concernedInsight = iso.collection.find(state.insights, (insight) => {
        return action.data.id === insight.Entity.EntityId;
      });
      concernedInsight.Count = 0;
      return Object.assign({}, {
        insights: [...state.insights],
        isFetchingInsights: state.isFetchingInsights,
        searches: state.searches,
        isFetchingSearches: state.isFetchingSearches,
      });
    case constants.insights.RECEIVE_SUBSCRIBE_SEARCH:
      let newSaveSearch = {
        Query: action.data.q,
        Count: 0,
        Name: iso.string.hasStartAsLastCharacter(action.data.q) ? iso.string.removeLastCharacter(action.data.q) : action.data.q,
      };
      return Object.assign({}, {
        insights: state.insights,
        isFetchingInsights: state.isFetchingInsights,
        searches: [newSaveSearch, ...state.searches],
        isFetchingSearches: state.isFetchingSearches,
        showNotification: true,
      });
    case constants.insights.RECEIVE_UNSUBSCRIBE_SEARCH:
      let q = action.data.q;
      let filteredSearches = iso.collection.filter(state.searches || [], (s) => {
        return s.Query !== q;
      });
      return Object.assign({}, {
        insights: [],
        isFetchingInsights: state.isFetchingInsights,
        searches: [...filteredSearches],
        isFetchingSearches: state.isFetchingSearches,
        showNotification: state.showNotification,
      });
    default :
      return state;
  }
};