UNPKG

@empathyco/x-components

Version:
55 lines (52 loc) 1.82 kB
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