Skip to content

Commit 1213c90

Browse files
committed
fix(ENG-11333): fix single value filtering
1 parent cff3b4e commit 1213c90

2 files changed

Lines changed: 39 additions & 2 deletions

File tree

src/app/shared/stores/global-search/global-search.state.spec.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,40 @@ describe('GlobalSearchState', () => {
262262

263263
const params = mockGetResources.mock.calls[0][0];
264264
expect(params['cardSearchFilter[defaultKey][]']).toBe('default-value');
265+
expect(params['cardSearchFilter[defaultKey][any-of]']).toBeUndefined();
266+
});
267+
268+
it('should AND the default value with an any-of clause for an explicitly selected value', () => {
269+
const { store, mockGetResources } = setup();
270+
271+
store.dispatch(new SetDefaultFilterValue('defaultKey', 'default-value'));
272+
store.dispatch(
273+
new UpdateSelectedFilterOption('defaultKey', [
274+
{ label: 'A', value: 'selected-value', cardSearchResultCount: null },
275+
])
276+
);
277+
store.dispatch(new FetchResources());
278+
279+
const params = mockGetResources.mock.calls[0][0];
280+
expect(params['cardSearchFilter[defaultKey][]']).toBe('default-value');
281+
expect(params['cardSearchFilter[defaultKey][any-of]']).toBe('selected-value');
282+
});
283+
284+
it('should OR multiple selected values together via a single any-of clause', () => {
285+
const { store, mockGetResources } = setup();
286+
287+
store.dispatch(new SetDefaultFilterValue('defaultKey', 'default-value'));
288+
store.dispatch(
289+
new UpdateSelectedFilterOption('defaultKey', [
290+
{ label: 'A', value: 'selected-value-1', cardSearchResultCount: null },
291+
{ label: 'B', value: 'selected-value-2', cardSearchResultCount: null },
292+
])
293+
);
294+
store.dispatch(new FetchResources());
295+
296+
const params = mockGetResources.mock.calls[0][0];
297+
expect(params['cardSearchFilter[defaultKey][]']).toBe('default-value');
298+
expect(params['cardSearchFilter[defaultKey][any-of]']).toBe('selected-value-1,selected-value-2');
265299
});
266300
});
267301
});

src/app/shared/stores/global-search/global-search.state.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ export class GlobalSearchState {
327327
let hasCedarFilters = state.extraFilters.length > 0;
328328

329329
Object.entries(state.selectedFilterOptions).forEach(([key, options]) => {
330-
if (key in state.defaultFilterOptions) return;
330+
if (key in state.defaultFilterOptions && options.length === 0) return;
331331
const filter = state.filters.find((f) => f.key === key) ?? state.extraFilters.find((f) => f.key === key);
332332

333333
if (filter?.cedarPropertyIri) {
@@ -344,7 +344,10 @@ export class GlobalSearchState {
344344
filtersParams[`cardSearchFilter[${key}][is-present]`] = firstOptionValue;
345345
}
346346
} else {
347-
filtersParams[`cardSearchFilter[${key}][]`] = options.map((option) => option.value);
347+
const selectedValues = options.map((option) => option.value);
348+
if (selectedValues.length) {
349+
filtersParams[`cardSearchFilter[${key}][any-of]`] = selectedValues.join(',');
350+
}
348351
}
349352
}
350353
});

0 commit comments

Comments
 (0)