From cc0e2aa7886b0b96d3647a5d61fbd8af5568c920 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Fri, 31 Mar 2023 15:13:30 +0200 Subject: [PATCH] fix(ui) - search - clone default values --- .../Filters/FilterModal/FilterModal.tsx | 2 +- frontend/app/duck/liveSearch.js | 14 +++++++-- frontend/app/duck/search.js | 29 ++++++++++--------- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/frontend/app/components/shared/Filters/FilterModal/FilterModal.tsx b/frontend/app/components/shared/Filters/FilterModal/FilterModal.tsx index ea2d63562..9eda5b9c9 100644 --- a/frontend/app/components/shared/Filters/FilterModal/FilterModal.tsx +++ b/frontend/app/components/shared/Filters/FilterModal/FilterModal.tsx @@ -70,7 +70,7 @@ function FilterModal(props: Props) { const showSearchList = isMainSearch && searchQuery.length > 0; const onFilterSearchClick = (filter: any) => { - const _filter = filtersMap[filter.type]; + const _filter = {...filtersMap[filter.type]}; _filter.value = [filter.value]; onFilterClick(_filter); }; diff --git a/frontend/app/duck/liveSearch.js b/frontend/app/duck/liveSearch.js index 499f6c740..1731615df 100644 --- a/frontend/app/duck/liveSearch.js +++ b/frontend/app/duck/liveSearch.js @@ -4,7 +4,7 @@ import { createRequestReducer } from './funcTools/request'; import { mergeReducers, success } from './funcTools/tools'; import Filter from 'Types/filter'; import { liveFiltersMap } from 'Types/filter/newFilter'; -import { filterMap, checkFilterValue, hasFilterApplied } from './search'; +import { filterMap, checkFilterValue, hasFilterApplied, getAppliedFilterIndex } from './search'; import Session from 'Types/session'; const name = "liveSearch"; @@ -111,8 +111,18 @@ export const clearSearch = () => (dispatch, getState) => { export const addFilter = (filter) => (dispatch, getState) => { filter.value = checkFilterValue(filter.value); const instance = getState().getIn([ 'liveSearch', 'instance']); + const filters = instance.get('filters'); - if (hasFilterApplied(instance.filters, filter)) { + 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))); // const index = instance.filters.findIndex(f => f.key === filter.key); // const oldFilter = instance.filters.get(index); // oldFilter.value = oldFilter.value.concat(filter.value); diff --git a/frontend/app/duck/search.js b/frontend/app/duck/search.js index 9e4b9396e..a9ffc0f12 100644 --- a/frontend/app/duck/search.js +++ b/frontend/app/duck/search.js @@ -349,7 +349,7 @@ export const hasFilterApplied = (filters, filter) => { return !filter.isEvent && filters.some((f) => f.key === filter.key); }; -const getAppliedFilterIndex = (filters, filterToFind) => { +export const getAppliedFilterIndex = (filters, filterToFind) => { if (!filterToFind.isEvent) { return filters.findIndex((filter) => filter.key === filterToFind.key); } @@ -357,37 +357,38 @@ const getAppliedFilterIndex = (filters, filterToFind) => { }; export const addFilter = (filter) => (dispatch, getState) => { - filter.value = checkFilterValue(filter.value); - filter.filters = filter.filters + const instance = getState().getIn(['search', 'instance']); + const filters = instance.get('filters'); + const index = getAppliedFilterIndex(filters, filter); + + 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']); - const filters = instance.get('filters'); - const index = getAppliedFilterIndex(filters, filter); - - if (index !== -1) { + if (index !== -1) { const oldFilter = filters.get(index); const updatedFilter = { - ...oldFilter, - value: oldFilter.value.concat(filter.value), + ...oldFilter, + value: oldFilter.value.concat(filter.value), }; const updatedFilters = filters.set(index, updatedFilter); return dispatch(edit(instance.set('filters', updatedFilters))); - } else { + } else { const updatedFilters = filters.push(filter); return dispatch(edit(instance.set('filters', updatedFilters))); - } + } }; export const addFilterByKeyAndValue = (key, value, operator = undefined, sourceOperator = undefined, source = undefined) => (dispatch, getState) => { - let defaultFilter = filtersMap[key]; + let defaultFilter = {...filtersMap[key]}; defaultFilter.value = value; if (operator) { defaultFilter.operator = operator;