From 0c72bcaa74ff36afdc378dc055fc588af9407387 Mon Sep 17 00:00:00 2001 From: Rajat Parashar Date: Thu, 3 Jul 2025 13:40:29 +0530 Subject: [PATCH 1/5] Reset Filters in UI instead of actual filter on reset click --- .../SearchAdvancedFiltersPage/SearchFiltersWorkspacePage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersWorkspacePage.tsx b/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersWorkspacePage.tsx index abb3a7786b03..e6bbf36e91c8 100644 --- a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersWorkspacePage.tsx +++ b/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersWorkspacePage.tsx @@ -70,7 +70,7 @@ function SearchFiltersWorkspacePage() { }, [selectedOptions]); const resetChanges = useCallback(() => { - updateWorkspaceFilter(null); + setSelectedOptions([]); }, []); return ( From 9fc44c2f80007a033a71de2fa556b91fa82f72c7 Mon Sep 17 00:00:00 2001 From: Rajat Parashar Date: Thu, 3 Jul 2025 14:50:22 +0530 Subject: [PATCH 2/5] Fix duplicate items after selection --- .../Search/SearchMultipleSelectionPicker.tsx | 10 +++++++--- src/libs/PolicyUtils.ts | 3 +++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/components/Search/SearchMultipleSelectionPicker.tsx b/src/components/Search/SearchMultipleSelectionPicker.tsx index 0dcb43baf874..5a70ba489aab 100644 --- a/src/components/Search/SearchMultipleSelectionPicker.tsx +++ b/src/components/Search/SearchMultipleSelectionPicker.tsx @@ -35,7 +35,7 @@ function SearchMultipleSelectionPicker({items, initiallySelectedItems, pickerTit const {sections, noResultsFound} = useMemo(() => { const selectedItemsSection = selectedItems .filter((item) => item?.name.toLowerCase().includes(debouncedSearchTerm?.toLowerCase())) - .sort((a, b) => sortOptionsWithEmptyValue(a.value as string, b.value as string)) + .sort((a, b) => sortOptionsWithEmptyValue(a.value.toString(), b.value.toString())) .map((item) => ({ text: item.name, keyForList: item.name, @@ -43,8 +43,12 @@ function SearchMultipleSelectionPicker({items, initiallySelectedItems, pickerTit value: item.value, })); const remainingItemsSection = items - .filter((item) => selectedItems.some((selectedItem) => selectedItem.value === item.value) === false && item?.name?.toLowerCase().includes(debouncedSearchTerm?.toLowerCase())) - .sort((a, b) => sortOptionsWithEmptyValue(a.value as string, b.value as string)) + .filter( + (item) => + selectedItems.some((selectedItem) => selectedItem.value.toString() === item.value.toString()) === false && + item?.name?.toLowerCase().includes(debouncedSearchTerm?.toLowerCase()), + ) + .sort((a, b) => sortOptionsWithEmptyValue(a.value.toString(), b.value.toString())) .map((item) => ({ text: item.name, keyForList: item.name, diff --git a/src/libs/PolicyUtils.ts b/src/libs/PolicyUtils.ts index d89e4f5c513e..0035c9ae8ca5 100644 --- a/src/libs/PolicyUtils.ts +++ b/src/libs/PolicyUtils.ts @@ -578,6 +578,9 @@ function getAllTaxRatesNamesAndKeys(): Record { allTaxRates[taxRate.name] = [taxRateKey]; return; } + if (allTaxRates[taxRate.name].includes(taxRateKey)) { + return; + } allTaxRates[taxRate.name].push(taxRateKey); }); }); From fe046319a181783cc92465fb05b08f68cc7bf9be Mon Sep 17 00:00:00 2001 From: Rajat Parashar Date: Thu, 3 Jul 2025 17:32:50 +0530 Subject: [PATCH 3/5] Fix Filters --- .../SearchAdvancedFiltersPage/SearchFiltersTaxRatePage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersTaxRatePage.tsx b/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersTaxRatePage.tsx index 9cce40a5ddda..06aa98855cc8 100644 --- a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersTaxRatePage.tsx +++ b/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersTaxRatePage.tsx @@ -36,7 +36,7 @@ function SearchFiltersTaxRatePage() { const selectedPoliciesTaxRates = policies?.map((policy) => policy?.taxRates?.taxes).filter((taxRates) => !!taxRates); const taxItems = useMemo(() => { - if (!selectedPoliciesTaxRates) { + if (!selectedPoliciesTaxRates || selectedPoliciesTaxRates?.length === 0) { return Object.entries(allTaxRates).map(([taxRateName, taxRateKeys]) => ({name: taxRateName, value: taxRateKeys})); } const selectedPoliciesTaxRatesItems = selectedPoliciesTaxRates.reduce( From d8e5c7b25a2366006d9fde8d8e7966a7549c7c04 Mon Sep 17 00:00:00 2001 From: Rajat Parashar Date: Fri, 4 Jul 2025 12:48:38 +0530 Subject: [PATCH 4/5] Fix category and tag filter pages --- .../SearchAdvancedFiltersPage/SearchFiltersCategoryPage.tsx | 2 +- .../Search/SearchAdvancedFiltersPage/SearchFiltersTagPage.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersCategoryPage.tsx b/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersCategoryPage.tsx index a249b78ff08c..caf6dd0b4c00 100644 --- a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersCategoryPage.tsx +++ b/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersCategoryPage.tsx @@ -35,7 +35,7 @@ function SearchFiltersCategoryPage() { const items = [{name: translate('search.noCategory'), value: CONST.SEARCH.CATEGORY_EMPTY_VALUE as string}]; const uniqueCategoryNames = new Set(); - if (!selectedPoliciesCategories) { + if (!selectedPoliciesCategories || selectedPoliciesCategories.length === 0) { Object.values(allPolicyCategories ?? {}).map((policyCategories) => Object.values(policyCategories ?? {}).forEach((category) => uniqueCategoryNames.add(category.name))); } else { selectedPoliciesCategories.forEach((category) => uniqueCategoryNames.add(category.name)); diff --git a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersTagPage.tsx b/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersTagPage.tsx index 683b84788987..90c2d9e9973b 100644 --- a/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersTagPage.tsx +++ b/src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersTagPage.tsx @@ -36,7 +36,7 @@ function SearchFiltersTagPage() { const items = [{name: translate('search.noTag'), value: CONST.SEARCH.TAG_EMPTY_VALUE as string}]; const uniqueTagNames = new Set(); - if (!selectedPoliciesTagLists) { + if (!selectedPoliciesTagLists || selectedPoliciesTagLists.length === 0) { const tagListsUnpacked = Object.values(allPolicyTagLists ?? {}).filter((item) => !!item) as PolicyTagLists[]; tagListsUnpacked .map(getTagNamesFromTagsLists) From 3b1bf617565cd295396162b46892b84f49179853 Mon Sep 17 00:00:00 2001 From: Rajat Parashar Date: Sat, 5 Jul 2025 14:28:45 +0530 Subject: [PATCH 5/5] More fixes --- src/components/Search/SearchMultipleSelectionPicker.tsx | 3 +-- src/libs/SearchQueryUtils.ts | 9 ++------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/components/Search/SearchMultipleSelectionPicker.tsx b/src/components/Search/SearchMultipleSelectionPicker.tsx index 5a70ba489aab..b26c2a62fcef 100644 --- a/src/components/Search/SearchMultipleSelectionPicker.tsx +++ b/src/components/Search/SearchMultipleSelectionPicker.tsx @@ -45,8 +45,7 @@ function SearchMultipleSelectionPicker({items, initiallySelectedItems, pickerTit const remainingItemsSection = items .filter( (item) => - selectedItems.some((selectedItem) => selectedItem.value.toString() === item.value.toString()) === false && - item?.name?.toLowerCase().includes(debouncedSearchTerm?.toLowerCase()), + !selectedItems.some((selectedItem) => selectedItem.value.toString() === item.value.toString()) && item?.name?.toLowerCase().includes(debouncedSearchTerm?.toLowerCase()), ) .sort((a, b) => sortOptionsWithEmptyValue(a.value.toString(), b.value.toString())) .map((item) => ({ diff --git a/src/libs/SearchQueryUtils.ts b/src/libs/SearchQueryUtils.ts index 52fb60daeaa7..fefbcf8057d6 100644 --- a/src/libs/SearchQueryUtils.ts +++ b/src/libs/SearchQueryUtils.ts @@ -395,7 +395,7 @@ function buildSearchQueryString(queryJSON?: SearchQueryJSON) { */ function buildQueryStringFromFilterFormValues(filterValues: Partial) { // We separate type and status filters from other filters to maintain hashes consistency for saved searches - const {type, status, policyID, groupBy, ...otherFilters} = filterValues; + const {type, status, groupBy, ...otherFilters} = filterValues; const filtersString: string[] = []; // When switching types/setting the type, ensure we aren't polluting our query with filters that are @@ -436,11 +436,6 @@ function buildQueryStringFromFilterFormValues(filterValues: Partial sanitizeSearchValue(id)).join(',') : sanitizeSearchValue(policyID); - filtersString.push(`${CONST.SEARCH.SYNTAX_FILTER_KEYS.POLICY_ID}:${sanitizedPolicyIDs}`); - } - const mappedFilters = Object.entries(otherFilters) .map(([filterKey, filterValue]) => { if ( @@ -776,7 +771,7 @@ function buildUserReadableQueryString( title += ` group-by:${groupBy}`; } - if (policyID) { + if (policyID && policyID.length > 0) { title += ` workspace:${policyID.map((id) => sanitizeSearchValue(policies?.[`${ONYXKEYS.COLLECTION.POLICY}${id}`]?.name ?? id)).join(',')}`; }