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.
199 lines (186 loc) • 9.37 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
};
module.exports = 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;
}
};