UNPKG

@empathyco/x-components

Version:
204 lines (201 loc) 5.59 kB
import { createRawFilters } from '../../utils/filters.js'; import { namespacedWireCommit, namespacedWireCommitWithoutPayload } from '../../wiring/namespaced-wires.factory.js'; import { mapWire, filter } from '../../wiring/wires.operators.js'; import { createWiring } from '../../wiring/wiring.utils.js'; import { wireService, wireServiceWithoutPayload } from '../../wiring/wires.factory.js'; import { DefaultFacetsService } from './service/facets.service.js'; /** * `facets` {@link XModuleName | XModule name}. * * @internal */ const moduleName = 'facets'; /** * WireCommit for {@link FacetsXModule}. * * @internal */ const wireCommit = namespacedWireCommit(moduleName); /** * WireCommitWithoutPayload for {@link FacetsXModule}. * * @internal */ const wireCommitWithoutPayload = namespacedWireCommitWithoutPayload(moduleName); /** * Wires factory for {@link DefaultFacetsService}. */ const wireFacetsService = wireService(DefaultFacetsService.instance); /** * Wires without payload factory for {@link DefaultFacetsService}. */ const wireFacetsServiceWithoutPayload = wireServiceWithoutPayload(DefaultFacetsService.instance); /** * Saves the facets contained in the `search` group, removing the previous ones, and keeping the * previous filters selected state. * * @public */ const updateFacetsGroupWithSearchFacetsWire = mapWire(wireFacetsService('updateFacets'), (facets) => ({ facets, id: 'search', })); /** * Saves the facets contained in the group, removing the previous ones, and keeping the new filters * selected state. * * @public */ const setFacetsGroupWire = wireFacetsService('setFacets'); /** * Toggles the selected state of a filter. * * @public */ const toggleFilterWire = wireFacetsService('toggle'); /** * Deselects all the filters. Optionally, it can accept a list of facets ids as payload, and it will * only deselect the filters from those facets. * * @public */ const clearFiltersWire = wireFacetsService('clearFilters'); /** * Deselects all selected filters. * * @public */ const clearAllFiltersWire = wireFacetsServiceWithoutPayload('clearFilters'); /** * Deselects all selected filters but keep the sticky ones. * * @internal */ const clearAllFiltersButStickyWire = wireFacetsService('clearFiltersWithMetadata', { metadata: { keepSticky: true, }, }); /** * Deselects all selected filters only when oldValue is not empty. * * @public */ const clearAllFiltersOnSecondQuery = filter(clearAllFiltersButStickyWire, ({ metadata }) => !!metadata.oldValue); /** * Selects the filter passed by payload. * * @public */ const selectFilterWire = wireFacetsService('select'); /** * Saves the params from the url. * * @public */ const setFiltersFromUrl = mapWire(wireFacetsService('select'), ({ filter }) => createRawFilters(filter)); /** * Saves the preselected filters. * * @public */ const updatePreselectedFilters = wireFacetsService('updatePreselectedFilters'); /** * Selects the preselected filters stored in the state. * * @public */ const selectPreselectedFilterWire = wireFacetsService('selectPreselectedFilters'); /** * Sets the facets state `query`. * * @public */ const setQuery = wireFacetsService('setQuery'); /** * Removes all the sticky filters from the state. * * @internal */ const clearStickyFilters = filter(wireCommitWithoutPayload('clearStickyFilters'), ({ eventPayload }) => { return eventPayload.totalResults === 0; }); /** * Sets the filters of the facets module from a queryPreview's filters. * * @public */ const setSelectedFiltersFromPreview = wireCommit('setFilters', ({ eventPayload: { filters } }) => (filters ? createRawFilters(filters) : [])); /** * Sets the filters of the facets module from a selectedHistoryQuery's filters. * * @public */ const setFiltersFromHistoryQueries = wireCommit('setFilters', ({ eventPayload: { selectedFilters } }) => selectedFilters ?? []); /** * Sets the query of the facets module from a queryPreview. * * @public */ const setQueryFromPreview = wireCommit('setQuery', ({ eventPayload: { query } }) => query); /** * Wiring configuration for the {@link FacetsXModule | facets module}. * * @internal */ const facetsWiring = createWiring({ ParamsLoadedFromUrl: { // TODO: move this logic to Facets Service clearAllFiltersWire, setFiltersFromUrl, }, PreselectedFiltersProvided: { updatePreselectedFilters, }, FacetsChanged: { updateFacetsGroupWithSearchFacetsWire, }, FacetsGroupProvided: { setFacetsGroupWire, }, UserAcceptedAQuery: { setQuery, }, FacetsQueryChanged: { clearAllFiltersOnSecondQuery, }, UserChangedExtraParams: { clearAllFiltersButStickyWire, }, UserClickedAFilter: { toggleFilterWire, }, UserClickedClearAllFilters: { clearFiltersWire, }, UserModifiedEditableNumberRangeFilter: { selectFilterWire, }, UserClickedAllFilter: { clearFiltersWire, }, UserClearedQuery: { clearAllFiltersButStickyWire, setQuery, }, UserClickedOpenX: { selectPreselectedFilterWire, }, SearchResponseChanged: { clearStickyFilters, }, UserAcceptedAQueryPreview: { setQueryFromPreview, setSelectedFiltersFromPreview, }, UserSelectedAHistoryQuery: { setFiltersFromHistoryQueries, }, }); export { facetsWiring, setFiltersFromHistoryQueries, setQueryFromPreview, setSelectedFiltersFromPreview }; //# sourceMappingURL=wiring.js.map