@empathyco/x-components
Version:
Empathy X Components
55 lines (52 loc) • 1.82 kB
JavaScript
import { computed } from 'vue';
import { useGetter } from '../../../composables/use-getter.js';
import { isArrayEmpty } from '../../../utils/array.js';
/**
* Composable to share Facets logic.
*
* @param props - Composable props.
* @returns Composable.
* @public
*/
function useFacets(props) {
const { selectedFiltersByFacet, selectedFilters: selectedFiltersGetter } = useGetter('facets');
/**
* Get selected filters.
* If there are facets ids, get selected filters whose facet id match with some of facets ids.
* If there aren't facets ids, get selected filters.
*
* @returns Array of selected filters depends on there are facets ids or not.
*/
const selectedFilters = computed(() => {
if (props.facetsIds) {
return props.facetsIds.reduce((selectedFilters, facetId) => [
...selectedFilters,
...(Array.isArray(selectedFiltersByFacet.value[facetId])
? selectedFiltersByFacet.value[facetId]
: []),
], []);
}
return selectedFiltersGetter.value;
});
/**
* Check if there are selected filters.
*
* @returns True or false depends on if there are selected filters.
*/
const hasSelectedFilters = computed(() => !isArrayEmpty(selectedFilters.value));
/**
* Flag representing if the component should be visible/rendered or not.
*
* @returns True whenever alwaysVisible is true or has selected filters. False
* otherwise.
*/
const isVisible = computed(() => !!props.alwaysVisible || hasSelectedFilters.value);
return {
selectedFiltersByFacet,
selectedFilters,
hasSelectedFilters,
isVisible,
};
}
export { useFacets };
//# sourceMappingURL=use-facets.js.map