UNPKG

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.

133 lines (119 loc) 4.41 kB
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, isFetchingAggregationSearch: false, aggregationSearchId: void 0, aggregationSearchResult: {}, searchOptions: {}, entityFacets: {}, typeSearch: void 0, }; export default function update(state = initialState, action = {}) { switch (action.type) { case constants.search.REQUEST_INITIAL_SEARCH: let searchOptions = action.data.query; return Object.assign({}, state, { initialSearchQuery: action.data.q, searchResult: void 0, selectedFilters: [], sortDirection: void 0, pageNumber: 0, isFetchingNextPage: false, isFetchingInitialSearch: true, initialFacets: {}, searchOptions, }); case constants.search.RECEIVE_INITIAL_SEARCH: let initialFacetsFromInitialSearch = (action.data.searchResult) ? action.data.searchResult.Facets : {}; return Object.assign({}, state, { searchResult: action.data.searchResult, isFetchingInitialSearch: false, initialFacets: Object.assign({}, initialFacetsFromInitialSearch), }); case constants.search.REQUEST_SEARCH: return Object.assign({}, state, { isFetchingSearch: true, selectedFilters: action.data.filters, sortDirection: action.data.sortingDirection, typeSearch: action.data.type, }); case constants.search.RECEIVE_SEARCH: return Object.assign({}, state, { searchResult: action.data.searchResult, isFetchingSearch: false, }); case constants.search.RECEIVE_SUGGESTED_SEARCH: return Object.assign({}, state, { suggestedSearches: action.data.suggestedSearches, suggestedSearchQuery: action.data.suggestedSearchQuery, }); 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({}, state, { isFetchingSearch: true, selectedFilters: [...oldSelectedFiltersFiltered, action.data.searchFilter], }); case constants.search.RECEIVE_SEARCH_WITH_FILTER: return Object.assign({}, state, { searchResult: action.data.searchResult, isFetchingSearch: false, }); case constants.search.REQUEST_REMOVE_FILTER_SEARCH: let filteredSelectedFilters = iso.collection.filter(state.selectedFilters, (f) => { return f.filterType !== action.data.filterType; }); return Object.assign({}, state, { isFetchingSearch: true, selectedFilters: [...filteredSelectedFilters], }); case constants.search.RECEIVE_REMOVE_FILTER_SEARCH: return Object.assign({}, state, { searchResult: action.data.searchResult, isFetchingSearch: false, }); case constants.search.REQUEST_NEXT_PAGE_NUMBER: return Object.assign({}, state, { isFetchingNextPage: true, pageNumber: action.data.pageNumber, }); 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({}, state, { searchResult: Object.assign({}, state.searchResult), isFetchingNextPage: false, }); case constants.search.REQUEST_AGGREGATION_SEARCH: return Object.assign({}, state, { isFetchingAggregationSearch: true, aggregationSearchId: action.data.id, aggregationSearchResult: {}, }); case constants.search.RECEIVE_AGGREGATION_SEARCH: return Object.assign({}, state, { isFetchingAggregationSearch: false, aggregationSearchResult: action.data.searchResult, }); case constants.search.RECEIVE_ENTITY_FACETS: return Object.assign({}, state, { entityFacets: action.data.facets, }); default: return state; } };