diff --git a/src/components/Search/types.ts b/src/components/Search/types.ts index d5be896c1c5..2fb034131c8 100644 --- a/src/components/Search/types.ts +++ b/src/components/Search/types.ts @@ -77,6 +77,8 @@ type SearchQueryAST = { type SearchQueryJSON = { inputQuery: SearchQueryString; hash: number; + /** Hash used for putting queries in recent searches list. It ignores sortOrder and sortBy, because we want to treat queries differing only in sort params as the same query */ + recentSearchHash: number; flatFilters: QueryFilters; } & SearchQueryAST; diff --git a/src/libs/SearchQueryUtils.ts b/src/libs/SearchQueryUtils.ts index c84e42704fb..62d00f8091e 100644 --- a/src/libs/SearchQueryUtils.ts +++ b/src/libs/SearchQueryUtils.ts @@ -216,15 +216,10 @@ function findIDFromDisplayValue(filterName: ValueOf { filter.filters.sort((a, b) => localeCompare(a.value.toString(), b.value.toString())); @@ -235,7 +230,16 @@ function getQueryHash(query: SearchQueryJSON): number { .sort() .forEach((filterString) => (orderedQuery += ` ${filterString}`)); - return UserUtils.hashText(orderedQuery, 2 ** 32); + const recentSearchHash = UserUtils.hashText(orderedQuery, 2 ** 32); + + orderedQuery += ` ${CONST.SEARCH.SYNTAX_ROOT_KEYS.SORT_BY}:${query.sortBy}`; + orderedQuery += ` ${CONST.SEARCH.SYNTAX_ROOT_KEYS.SORT_ORDER}:${query.sortOrder}`; + if (query.policyID) { + orderedQuery += ` ${CONST.SEARCH.SYNTAX_ROOT_KEYS.POLICY_ID}:${query.policyID} `; + } + const primaryHash = UserUtils.hashText(orderedQuery, 2 ** 32); + + return {primaryHash, recentSearchHash}; } /** @@ -252,7 +256,9 @@ function buildSearchQueryJSON(query: SearchQueryString) { // Add the full input and hash to the results result.inputQuery = query; result.flatFilters = flatFilters; - result.hash = getQueryHash(result); + const {primaryHash, recentSearchHash} = getQueryHashes(result); + result.hash = primaryHash; + result.recentSearchHash = recentSearchHash; return result; } catch (e) {