Skip to content

Commit

Permalink
Add labels to applied static filters
Browse files Browse the repository at this point in the history
  • Loading branch information
nmanu1 committed Nov 2, 2021
1 parent 9c5c492 commit 90fafc7
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 6 deletions.
6 changes: 4 additions & 2 deletions sample-app/src/components/DecoratedAppliedFilters.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,25 @@ import { AppliedQueryFilter } from "@yext/answers-core";
import { useAnswersState } from '@yext/answers-headless-react';
import { GroupedFilters } from '../models/groupedFilters';
import { getGroupedAppliedFilters } from '../utils/appliedfilterutils';
import { StaticFiltersLabelConfig } from "./StaticFilters";

export interface DecoratedAppliedFiltersConfig {
showFieldNames?: boolean,
hiddenFields?: Array<string>,
labelText?: string,
delimiter?: string,
staticFiltersGroupLabels?: Record<string, StaticFiltersLabelConfig>,
appliedQueryFilters?: AppliedQueryFilter[]
}

/**
* Container component for AppliedFilters
*/
export function DecoratedAppliedFiltersDisplay(props : DecoratedAppliedFiltersConfig): JSX.Element {
const { hiddenFields = [], appliedQueryFilters = [], ...otherProps } = props;
const { hiddenFields = [], staticFiltersGroupLabels = {}, appliedQueryFilters = [], ...otherProps } = props;
const state = useAnswersState(state => state);
const filterState = state.vertical.results ? state.filters : {};
const groupedFilters: Array<GroupedFilters> = getGroupedAppliedFilters(filterState, appliedQueryFilters, hiddenFields);
const groupedFilters: Array<GroupedFilters> = getGroupedAppliedFilters(filterState, appliedQueryFilters, hiddenFields, staticFiltersGroupLabels);
return <AppliedFilters appliedFilters={groupedFilters} {...otherProps}/>
}

Expand Down
4 changes: 4 additions & 0 deletions sample-app/src/components/StaticFilters.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ import React, { Fragment } from 'react';
import { Filter, CombinedFilter, FilterCombinator, Matcher } from '@yext/answers-core';
import { AnswersHeadlessContext } from '@yext/answers-headless-react';

export interface StaticFiltersLabelConfig {
label: string
}

interface CheckBoxProps {
fieldId: string,
value: string,
Expand Down
7 changes: 7 additions & 0 deletions sample-app/src/pages/VerticalSearchPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,12 @@ const facetConfigs = {
}
}

const staticFiltersGroupLabels = {
c_employeeCountry: {
label: 'Employee Country'
}
}

export default function VerticalSearchPage(props: {
verticalKey: string
}) {
Expand Down Expand Up @@ -87,6 +93,7 @@ export default function VerticalSearchPage(props: {
showFieldNames={true}
hiddenFields={['builtin.entityType']}
delimiter='|'
staticFiltersGroupLabels={staticFiltersGroupLabels}
/>
<AlternativeVerticals
currentVerticalLabel='People'
Expand Down
6 changes: 4 additions & 2 deletions sample-app/src/utils/appliedfilterutils.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {
getDisplayableAppliedFacets,
getDisplayableNlpFilters
} from "./displayablefilterutils";
import { StaticFiltersLabelConfig } from "../components/StaticFilters";

/**
* Returns a new list of nlp filters with duplicates of other filters and
Expand Down Expand Up @@ -63,9 +64,10 @@ function createGroupedFilters(
export function getGroupedAppliedFilters(
appliedFiltersState: FiltersState,
nlpFilters: AppliedQueryFilter[],
hiddenFields: string[]
hiddenFields: string[],
staticFiltersGroupLabels: Record<string, StaticFiltersLabelConfig>
): Array<GroupedFilters> {
const displayableStaticFilters = getDisplayableStaticFilters(flattenFilters(appliedFiltersState?.static));
const displayableStaticFilters = getDisplayableStaticFilters(flattenFilters(appliedFiltersState?.static), staticFiltersGroupLabels);
const displayableFacets = getDisplayableAppliedFacets(appliedFiltersState?.facets);
const displayableNlpFilters = getDisplayableNlpFilters(nlpFilters);

Expand Down
8 changes: 6 additions & 2 deletions sample-app/src/utils/displayablefilterutils.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { AppliedQueryFilter, Filter, DisplayableFacet } from '@yext/answers-core';
import { StaticFiltersLabelConfig } from '../components/StaticFilters';
import { DisplayableFilter } from '../models/displayableFilter';
import { getFilterDisplayValue } from './filterutils';

Expand Down Expand Up @@ -29,13 +30,16 @@ export function getDisplayableAppliedFacets(facets: DisplayableFacet[] | undefin
/**
* Convert a list of static filters to DisplayableFilter format.
*/
export function getDisplayableStaticFilters(filters: Filter[]): DisplayableFilter[] {
export function getDisplayableStaticFilters(
filters: Filter[],
groupLabels: Record<string, StaticFiltersLabelConfig>
): DisplayableFilter[] {
let appliedStaticFilters: DisplayableFilter[] = [];
filters?.forEach(filter => {
appliedStaticFilters.push({
filterType: 'STATIC_FILTER',
filter: filter,
groupLabel: filter.fieldId,
groupLabel: groupLabels?.[filter.fieldId]?.label || filter.fieldId,
label: getFilterDisplayValue(filter),
});
});
Expand Down

0 comments on commit 90fafc7

Please sign in to comment.