Skip to content

Commit

Permalink
Customize addFilter to merge values
Browse files Browse the repository at this point in the history
  • Loading branch information
tiberiuichim committed Feb 6, 2023
1 parent 8bca671 commit 4a84757
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 17 deletions.
2 changes: 2 additions & 0 deletions searchlib/components/Facets/ActiveFilters.jsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// This component is used by the dropdown facets to show the selected active filters for that facet

import React from 'react';
import { Button, Card } from 'semantic-ui-react';
import { Icon, Term } from '@eeacms/search/components';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React from 'react';
import { Accordion, Icon } from 'semantic-ui-react';
import { useAtom } from 'jotai';
import { openFacetsAtom } from '../state';
import { useUpdateAtom } from 'jotai/utils';
import { useSetAtom } from 'jotai';
import { useAppConfig, useSearchContext } from '@eeacms/search/lib/hocs';
import Facet from '../Facet';

Expand All @@ -13,7 +13,7 @@ const AccordionFacetWrapper = (props) => {

const hasFilter = !!filters.find((filter) => field === filter.field);
const [openFacets] = useAtom(openFacetsAtom);
const updateOpenFacets = useUpdateAtom(openFacetsAtom);
const updateOpenFacets = useSetAtom(openFacetsAtom);

const { appConfig } = useAppConfig();
const facet = appConfig.facets?.find((f) => f.field === field);
Expand Down
1 change: 1 addition & 0 deletions searchlib/components/FilterList/ActiveFilterValue.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ const ActiveFilterValue = (props) => {
) : (
<Term term={value} field={field} />
)}
<span style={{ display: 'none' }}>{` (${type}) `}</span>
</span>
}
onRemove={() => {
Expand Down
40 changes: 39 additions & 1 deletion searchlib/components/SearchApp/request.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
import { resetFiltersToDefault } from '@eeacms/search/lib/search/helpers';
import {
resetFiltersToDefault,
doFilterValuesMatch,
} from '@eeacms/search/lib/search/helpers';
import { getDefaultFilters } from '@eeacms/search/lib/utils';

export function resetFilters() {
Expand Down Expand Up @@ -33,3 +36,38 @@ export function clearFilters(except = []) {
);
});
}

export function addFilter() {
const [field, value, type] = arguments;
const name = field;

// a customized version of addFilter that converts existing filters to the
// new type, starting from the idea that each field name is unique

if (this.driver.debug)
// eslint-disable-next-line no-console
console.log('Search UI: Action', 'addFilter', ...arguments);

const { driver } = this;
const { filters } = driver.state;

const existingFilter = filters.find((f) => f.field === name) || {}; // && f.type === type
const allOtherFilters = filters.filter((f) => f.field !== name) || []; // || f.type !== type
const existingFilterValues = existingFilter.values || [];

const newFilterValues = existingFilterValues.find((existing) =>
doFilterValuesMatch(existing, value),
)
? existingFilterValues
: existingFilterValues.concat(value);

driver._updateSearchResults({
current: 1,
filters: [
...allOtherFilters,
{ field: name, values: newFilterValues, type },
],
});

// return addFilter.apply(null, arguments);
}
21 changes: 7 additions & 14 deletions searchlib/components/SearchApp/useSearchApp.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {
onAutocompleteResultClick,
} from '@eeacms/search/lib/request';

import { clearFilters, resetFilters, resetSearch } from './request';
import { clearFilters, resetFilters, resetSearch, addFilter } from './request';
import useFacetsWithAllOptions from './useFacetsWithAllOptions';
import { useLoadingState } from './state';
import { SearchDriver } from '@elastic/search-ui';
Expand Down Expand Up @@ -126,20 +126,13 @@ export default function useSearchApp(props) {
driver,
facetOptions,
};
searchContext.resetFilters = resetFilters.bind({
appConfig,
searchContext,
});
searchContext.resetSearch = resetSearch.bind({
appConfig,
searchContext,
driver,
});

searchContext.clearFilters = clearFilters.bind({
appConfig,
searchContext,
driver,
[resetFilters, resetSearch, clearFilters, addFilter].forEach((func) => {
searchContext[func.name] = func.bind({
appConfig,
searchContext,
driver,
});
});
return searchContext;
},
Expand Down

0 comments on commit 4a84757

Please sign in to comment.