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.
200 lines (186 loc) • 8.07 kB
JavaScript
import constants from '../constants' ;
import iso from '../../iso';
const initialState = {
initialSearchQuery: void 0,
searchResult: void 0,
isFetchingSearch: false,
suggestedSearches: [],
suggestedSearchQuery: '',
selectedFilters: [],
sortDirection: void 0,
pageNumber: 0,
isFetchingNextPage: false,
isFetchingInitialSearch: false,
initialFacets: void 0,
};
export default function update(state = initialState, action = {}) {
switch (action.type) {
case constants.search.REQUEST_INITIAL_SEARCH:
return Object.assign({}, {
initialSearchQuery: action.data.q,
isFetchingSearch: state.isFetchingSearch,
searchResult: void 0,
suggestedSearches: state.suggestedSearches,
suggestedSearchQuery: state.suggestedSearchQuery,
selectedFilters: [],
sortDirection: void 0,
pageNumber: 0,
isFetchingNextPage: false,
isFetchingInitialSearch: true,
initialFacets: {},
});
case constants.search.RECEIVE_INITIAL_SEARCH:
let initialFacetsFromInitialSearch = (action.data.searchResult) ? action.data.searchResult.Facets : {};
return Object.assign({}, {
initialSearchQuery: state.initialSearchQuery,
isFetchingSearch: state.isFetchingSearch,
searchResult: action.data.searchResult,
suggestedSearches: state.suggestedSearches,
suggestedSearchQuery: state.suggestedSearchQuery,
selectedFilters: state.selectedFilters,
sortDirection: state.sortDirection,
pageNumber: state.pageNumber,
isFetchingNextPage: state.isFetchingNextPage,
isFetchingInitialSearch: false,
initialFacets: Object.assign({}, initialFacetsFromInitialSearch),
});
case constants.search.REQUEST_SEARCH:
return Object.assign({}, {
initialSearchQuery: state.initialSearchQuery,
isFetchingSearch: true,
searchResult: state.searchResult,
suggestedSearches: state.suggestedSearches,
suggestedSearchQuery: state.suggestedSearchQuery,
selectedFilters: action.data.filters,
sortDirection: action.data.sortingDirection,
pageNumber: state.pageNumber,
isFetchingNextPage: state.isFetchingNextPage,
isFetchingInitialSearch: state.isFetchingInitialSearch,
initialFacets: state.initialFacets,
});
case constants.search.RECEIVE_SEARCH:
return Object.assign({}, {
initialSearchQuery: state.initialSearchQuery,
searchResult: action.data.searchResult,
isFetchingSearch: false,
suggestedSearches: state.suggestedSearches,
suggestedSearchQuery: state.suggestedSearchQuery,
selectedFilters: state.selectedFilters,
sortDirection: state.sortDirection,
pageNumber: state.pageNumber,
isFetchingNextPage: state.isFetchingNextPage,
isFetchingInitialSearch: state.isFetchingInitialSearch,
initialFacets: state.initialFacets,
});
case constants.search.RECEIVE_SUGGESTED_SEARCH:
return Object.assign({}, {
initialSearchQuery: state.initialSearchQuery,
searchResult: state.searchResult,
isFetchingSearch: state.isFetchingSearch,
suggestedSearches: action.data.suggestedSearches,
suggestedSearchQuery: action.data.suggestedSearchQuery,
selectedFilters: state.selectedFilters,
sortDirection: state.sortDirection,
pageNumber: state.pageNumber,
isFetchingNextPage: state.isFetchingNextPage,
isFetchingInitialSearch: state.isFetchingInitialSearch,
initialFacets: state.initialFacets,
});
case constants.search.REQUEST_SEARCH_WITH_FILTER:
let oldSelectedFiltersFiltered = iso.collection.filter(state.selectedFilters, (f) => {
return action.data.searchFilter.filterType !== f.filterType;
});
return Object.assign({}, {
initialSearchQuery: state.initialSearchQuery,
searchResult: state.searchResult,
isFetchingSearch: true,
suggestedSearches: state.suggestedSearches,
suggestedSearchQuery: state.suggestedSearchQuery,
selectedFilters: [...oldSelectedFiltersFiltered, action.data.searchFilter],
sortDirection: state.sortDirection,
pageNumber: state.pageNumber,
isFetchingNextPage: state.isFetchingNextPage,
isFetchingInitialSearch: state.isFetchingInitialSearch,
initialFacets: state.initialFacets,
});
case constants.search.RECEIVE_SEARCH_WITH_FILTER:
return Object.assign({}, {
initialSearchQuery: state.initialSearchQuery,
searchResult: action.data.searchResult,
isFetchingSearch: false,
suggestedSearches: state.suggestedSearches,
suggestedSearchQuery: state.suggestedSearchQuery,
selectedFilters: state.selectedFilters,
sortDirection: state.sortDirection,
pageNumber: state.pageNumber,
isFetchingNextPage: state.isFetchingNextPage,
isFetchingInitialSearch: state.isFetchingInitialSearch,
initialFacets: state.initialFacets,
});
case constants.search.REQUEST_REMOVE_FILTER_SEARCH:
let filteredSelectedFilters = iso.collection.filter(state.selectedFilters, (f) => {
return f.filterType !== action.data.filterType;
});
return Object.assign({}, {
initialSearchQuery: state.initialSearchQuery,
searchResult: state.searchResult,
isFetchingSearch: true,
suggestedSearches: state.suggestedSearches,
suggestedSearchQuery: state.suggestedSearchQuery,
selectedFilters: [...filteredSelectedFilters],
sortDirection: state.sortDirection,
pageNumber: state.pageNumber,
isFetchingNextPage: state.isFetchingNextPage,
isFetchingInitialSearch: state.isFetchingInitialSearch,
initialFacets: state.initialFacets,
});
case constants.search.RECEIVE_REMOVE_FILTER_SEARCH:
return Object.assign({}, {
initialSearchQuery: state.initialSearchQuery,
searchResult: action.data.searchResult,
isFetchingSearch: false,
suggestedSearches: state.suggestedSearches,
suggestedSearchQuery: state.suggestedSearchQuery,
selectedFilters: state.selectedFilters,
sortDirection: state.sortDirection,
pageNumber: state.pageNumber,
isFetchingNextPage: state.isFetchingNextPage,
isFetchingInitialSearch: state.isFetchingInitialSearch,
initialFacets: state.initialFacets,
});
case constants.search.REQUEST_NEXT_PAGE_NUMBER:
return Object.assign({}, {
initialSearchQuery: state.initialSearchQuery,
searchResult: state.searchResult,
isFetchingSearch: state.isFetchingSearch,
suggestedSearches: state.suggestedSearches,
suggestedSearchQuery: state.suggestedSearchQuery,
selectedFilters: state.selectedFilters,
sortDirection: state.sortDirection,
pageNumber: action.data.pageNumber,
isFetchingNextPage: true,
isFetchingInitialSearch: state.isFetchingInitialSearch,
initialFacets: state.initialFacets,
});
case constants.search.RECEIVE_NEXT_PAGE_NUMBER:
if (state.searchResult && state.searchResult.Hits) {
let allHits = state.searchResult.Hits.concat(action.data.searchResult.Hits);
state.searchResult.Hits = [...allHits];
}
return Object.assign({}, {
initialSearchQuery: state.initialSearchQuery,
searchResult: Object.assign({}, state.searchResult),
isFetchingSearch: state.isFetchingSearch,
suggestedSearches: state.suggestedSearches,
suggestedSearchQuery: state.suggestedSearchQuery,
selectedFilters: state.selectedFilters,
sortDirection: state.sortDirection,
pageNumber: state.pageNumber,
isFetchingNextPage: false,
isFetchingInitialSearch: state.isFetchingInitialSearch,
initialFacets: state.initialFacets,
});
default:
return state;
}
};