diff --git a/src/app/shared/stores/global-search/global-search.state.spec.ts b/src/app/shared/stores/global-search/global-search.state.spec.ts index b43908615..dd78a40d0 100644 --- a/src/app/shared/stores/global-search/global-search.state.spec.ts +++ b/src/app/shared/stores/global-search/global-search.state.spec.ts @@ -20,7 +20,9 @@ import { FetchResources, LoadFilterOptions, LoadFilterOptionsAndSetValues, + SetDefaultFilterValue, SetExtraFilters, + UpdateSelectedFilterOption, } from './global-search.actions'; import { GlobalSearchSelectors } from './global-search.selectors'; import { GlobalSearchState } from './global-search.state'; @@ -239,4 +241,27 @@ describe('GlobalSearchState', () => { ]); }); }); + + describe('SetDefaultFilterValue', () => { + it('should include the default filter in the API call', () => { + const { store, mockGetResources } = setup(); + + store.dispatch(new SetDefaultFilterValue('defaultKey', 'default-value')); + store.dispatch(new FetchResources()); + + const params = mockGetResources.mock.calls[0][0]; + expect(params['cardSearchFilter[defaultKey][]']).toBe('default-value'); + }); + + it('should not be overridden when a selected filter for the same key is cleared', () => { + const { store, mockGetResources } = setup(); + + store.dispatch(new SetDefaultFilterValue('defaultKey', 'default-value')); + store.dispatch(new UpdateSelectedFilterOption('defaultKey', [])); + store.dispatch(new FetchResources()); + + const params = mockGetResources.mock.calls[0][0]; + expect(params['cardSearchFilter[defaultKey][]']).toBe('default-value'); + }); + }); }); diff --git a/src/app/shared/stores/global-search/global-search.state.ts b/src/app/shared/stores/global-search/global-search.state.ts index 5e80a3541..bc7bb2710 100644 --- a/src/app/shared/stores/global-search/global-search.state.ts +++ b/src/app/shared/stores/global-search/global-search.state.ts @@ -327,6 +327,7 @@ export class GlobalSearchState { let hasCedarFilters = state.extraFilters.length > 0; Object.entries(state.selectedFilterOptions).forEach(([key, options]) => { + if (key in state.defaultFilterOptions) return; const filter = state.filters.find((f) => f.key === key) ?? state.extraFilters.find((f) => f.key === key); if (filter?.cedarPropertyIri) {