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.

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