UNPKG

@empathyco/x-components

Version:
171 lines (168 loc) 5.54 kB
import { isFacetFilter } from '@empathyco/x-types'; import { setConfig, mergeConfig } from '../../../store/utils/config-store.utils.js'; import '@empathyco/x-utils'; import { setQuery } from '../../../store/utils/query.utils.js'; import { setStatus } from '../../../store/utils/status-store.utils.js'; import { groupItemsBy } from '../../../utils/array.js'; import { UNKNOWN_FACET_KEY } from '../../facets/store/constants.js'; import { cancelFetchAndSaveSearchResponse, fetchAndSaveSearchResponse } from './actions/fetch-and-save-search-response.action.js'; import { fetchSearchResponse } from './actions/fetch-search-response.action.js'; import { increasePageAppendingResults } from './actions/increase-page-apending-results.action.js'; import { resetRequestOnRefinement } from './actions/reset-request-on-refinement.action.js'; import { saveOrigin } from './actions/save-origin.action.js'; import { saveSearchResponse } from './actions/save-search-response.action.js'; import { setUrlParams } from './actions/set-url-params.action.js'; import { query } from './getters/query.getter.js'; import { request } from './getters/request.getter.js'; /** * {@link XStoreModule} For the search module. * * @internal */ const searchXStoreModule = { state: () => ({ ...resettableState(), selectedFilters: {}, params: {}, config: { pageSize: 24, pageMode: 'infinite_scroll', }, status: 'initial', isNoResults: false, fromNoResultsWithFilters: false, }), getters: { request, query, }, mutations: { appendResults(state, results) { state.results = [...state.results, ...results]; }, resetState(state) { Object.assign(state, resettableState()); }, resetStateForReload(state) { const { query, facets, sort, page, ...resettable } = resettableState(); Object.assign(state, resettable); }, setQuery, setResults(state, results) { state.results = results; }, setPartialResults(state, partialResults) { state.partialResults = partialResults; }, setFacets(state, facets) { state.facets = facets; }, setRelatedTags(state, relatedTags) { state.relatedTags = relatedTags; }, setSelectedFilters(state, selectedFilters) { state.selectedFilters = groupItemsBy(selectedFilters, filter => isFacetFilter(filter) ? filter.facetId : UNKNOWN_FACET_KEY); }, setBanners(state, banners) { state.banners = banners; }, setPromoteds(state, promoteds) { state.promoteds = promoteds; }, setSpellcheck(state, spellcheckedQuery) { state.spellcheckedQuery = spellcheckedQuery; }, setTotalResults(state, totalResults) { state.totalResults = totalResults; }, setSort(state, sort) { state.sort = sort; }, setPage(state, page) { state.page = page; }, setConfig, mergeConfig, setIsAppendResults(state, isAppendResults) { state.isAppendResults = isAppendResults; }, setIsNoResults(state, isNoResults) { state.isNoResults = isNoResults; }, setFromNoResultsWithFilters(state, fromNoResultsWithFilters) { state.fromNoResultsWithFilters = fromNoResultsWithFilters; }, setStatus, setParams(state, params) { state.params = params; }, setOrigin(state, origin = null) { state.origin = origin; }, setRedirections(state, redirections) { state.redirections = redirections; }, setQueryTagging(state, queryTagging) { state.queryTagging = queryTagging; }, setDisplayTagging(state, displayTagging) { state.displayTagging = displayTagging; }, updateResult(state, result) { const stateResult = state.results.find(stateResult => result.id === stateResult.id); if (stateResult) { Object.assign(stateResult, result); } }, setStats(state, stats) { state.stats = stats; }, }, actions: { cancelFetchAndSaveSearchResponse, fetchSearchResponse, fetchAndSaveSearchResponse, increasePageAppendingResults, resetRequestOnRefinement, saveSearchResponse, setUrlParams, saveOrigin, }, }; /** * Function to return the "resettable" part of the state. This will be used in the `resetState` * mutation to reset to the initial state. * * @returns The "resettable" part of the {@link SearchState}. * * @internal */ function resettableState() { return { query: '', results: [], partialResults: [], facets: [], relatedTags: [], banners: [], promoteds: [], totalResults: 0, spellcheckedQuery: '', sort: '', page: 1, origin: null, isAppendResults: false, redirections: [], queryTagging: { url: '', params: {}, }, displayTagging: { url: '', params: {}, }, stats: {}, }; } export { resettableState, searchXStoreModule }; //# sourceMappingURL=module.js.map