@empathyco/x-components
Version:
Empathy X Components
204 lines (201 loc) • 5.59 kB
JavaScript
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