@yext/search-ui-react
Version:
A library of React Components for powering Yext Search integrations
39 lines (34 loc) • 1.43 kB
text/typescript
import { useSearchState, useSearchActions } from '@yext/search-headless-react';
import { useMemo } from 'react';
import { RemovableFilter } from '../components/AppliedFiltersDisplay';
import { SelectableFieldValueFilter } from '../models/SelectableFieldValueFilter';
import { getSelectableFieldValueFilters } from '../utils/filterutils';
import { useStateUpdatedOnSearch } from './useStateUpdatedOnSearch';
/**
* Returns a RemovableFilter[] sourced from the static filters state.
*
* @internal
*/
export function useRemovableStaticFilters(hiddenFields: string[]): RemovableFilter[] {
const staticFilters = useStateUpdatedOnSearch(state => state.filters.static);
const hasResults = !!useSearchState(state => state.vertical.results);
const searchActions = useSearchActions();
return useMemo(() => {
if (!hasResults || !staticFilters) {
return [];
}
function handleRemoveStaticFilterOption(filter: SelectableFieldValueFilter) {
searchActions.setFilterOption({
filter: { ...filter, kind: 'fieldValue' },
selected: false
});
}
return getSelectableFieldValueFilters(staticFilters)
.filter(f => f.selected && !hiddenFields.includes(f.fieldId))
.map(f => ({
displayName: f.displayName ?? '',
handleRemove: () => handleRemoveStaticFilterOption(f),
filter: f
}));
}, [hasResults, hiddenFields, searchActions, staticFilters]);
}