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;
}
};