diff --git a/src/libs/SearchQueryUtils.ts b/src/libs/SearchQueryUtils.ts index cc13a9b7fb27..04ae4bbc12ae 100644 --- a/src/libs/SearchQueryUtils.ts +++ b/src/libs/SearchQueryUtils.ts @@ -307,18 +307,29 @@ function getQueryHashes(query: SearchQueryJSON): {primaryHash: number; recentSea // actually filter out results const similarSearchIgnoredFilters = new Set([CONST.SEARCH.SYNTAX_FILTER_KEYS.GROUP_CURRENCY]); + // Certain filters' values are significant in deciding which search we are on, so we want to include + // their value when computing the similarSearchHash + const similarSearchValueBasedFilters = new Set([CONST.SEARCH.SYNTAX_FILTER_KEYS.ACTION]); + query.flatFilters .map((filter) => { - if (!similarSearchIgnoredFilters.has(filter.key)) { - filterSet.add(filter.key); - } - + const filterKey = filter.key; const filters = cloneDeep(filter.filters); filters.sort((a, b) => customCollator.compare(a.value.toString(), b.value.toString())); - return buildFilterValuesString(filter.key, filters); + return {filterString: buildFilterValuesString(filterKey, filters), filterKey}; }) - .sort() - .forEach((filterString) => (orderedQuery += ` ${filterString}`)); + .sort((a, b) => customCollator.compare(a.filterString, b.filterString)) + .forEach(({filterString, filterKey}) => { + if (!similarSearchIgnoredFilters.has(filterKey)) { + filterSet.add(filterKey); + } + + if (similarSearchValueBasedFilters.has(filterKey)) { + filterSet.add(filterString.trim()); + } + + orderedQuery += ` ${filterString}`; + }); const similarSearchHash = hashText(Array.from(filterSet).join(''), 2 ** 32); const recentSearchHash = hashText(orderedQuery, 2 ** 32);