diff --git a/frontend/app/duck/search.js b/frontend/app/duck/search.js index 54b3f0132..9e4b9396e 100644 --- a/frontend/app/duck/search.js +++ b/frontend/app/duck/search.js @@ -349,20 +349,38 @@ export const hasFilterApplied = (filters, filter) => { return !filter.isEvent && filters.some((f) => f.key === filter.key); }; +const getAppliedFilterIndex = (filters, filterToFind) => { + if (!filterToFind.isEvent) { + return filters.findIndex((filter) => filter.key === filterToFind.key); + } + return -1; + }; + export const addFilter = (filter) => (dispatch, getState) => { filter.value = checkFilterValue(filter.value); filter.filters = filter.filters - ? filter.filters.map((subFilter) => ({ - ...subFilter, - value: checkFilterValue(subFilter.value), - })) - : null; - const instance = getState().getIn(['search', 'instance']); + ? filter.filters.map((subFilter) => ({ + ...subFilter, + value: checkFilterValue(subFilter.value), + })) + : null; - if (hasFilterApplied(instance.filters, filter)) { + const instance = getState().getIn(['search', 'instance']); + const filters = instance.get('filters'); + const index = getAppliedFilterIndex(filters, filter); + + if (index !== -1) { + const oldFilter = filters.get(index); + const updatedFilter = { + ...oldFilter, + value: oldFilter.value.concat(filter.value), + }; + + const updatedFilters = filters.set(index, updatedFilter); + return dispatch(edit(instance.set('filters', updatedFilters))); } else { - const filters = instance.filters.push(filter); - return dispatch(edit(instance.set('filters', filters))); + const updatedFilters = filters.push(filter); + return dispatch(edit(instance.set('filters', updatedFilters))); } };