From c3ef455e19381941bb04720891f1a72654368e50 Mon Sep 17 00:00:00 2001 From: Abdelrahman Khattab Date: Fri, 10 Oct 2025 16:15:42 +0200 Subject: [PATCH 1/6] [Search] Clear selections when sorting to prevent stale selection state --- src/components/Search/SearchContext.tsx | 15 +++++++++++++-- src/components/Search/index.tsx | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/components/Search/SearchContext.tsx b/src/components/Search/SearchContext.tsx index 6659e4c2d481..b3b5647646b6 100644 --- a/src/components/Search/SearchContext.tsx +++ b/src/components/Search/SearchContext.tsx @@ -123,7 +123,16 @@ function SearchContextProvider({children}: ChildrenProps) { const clearSelectedTransactions: SearchContextProps['clearSelectedTransactions'] = useCallback( (searchHashOrClearIDsFlag, shouldTurnOffSelectionMode = false) => { if (typeof searchHashOrClearIDsFlag === 'boolean') { - setSelectedTransactions([]); + // Directly clear the IDs instead of calling setSelectedTransactions([]) + // which has an early return that prevents clearing when areTransactionsEmpty is true + setSearchContextData((prevState) => ({ + ...prevState, + selectedTransactionIDs: [], + shouldTurnOffSelectionMode, + })); + + // Reset the empty flag + areTransactionsEmpty.current = true; return; } @@ -134,6 +143,7 @@ function SearchContextProvider({children}: ChildrenProps) { if (searchContextData.selectedReports.length === 0 && isEmptyObject(searchContextData.selectedTransactions) && !searchContextData.shouldTurnOffSelectionMode) { return; } + setSearchContextData((prevState) => ({ ...prevState, shouldTurnOffSelectionMode, @@ -150,7 +160,8 @@ function SearchContextProvider({children}: ChildrenProps) { searchContextData.selectedReports.length, searchContextData.selectedTransactions, searchContextData.shouldTurnOffSelectionMode, - setSelectedTransactions, + shouldShowSelectAllMatchingItems, + selectAllMatchingItems, ], ); diff --git a/src/components/Search/index.tsx b/src/components/Search/index.tsx index c949d013a670..bb9afac2d1a9 100644 --- a/src/components/Search/index.tsx +++ b/src/components/Search/index.tsx @@ -845,6 +845,7 @@ function Search({queryJSON, searchResults, onSearchListScroll, contentContainerS } const onSortPress = (column: SearchColumnType, order: SortOrder) => { + clearSelectedTransactions(); const newQuery = buildSearchQueryString({...queryJSON, sortBy: column, sortOrder: order}); onSortPressedCallback?.(); navigation.setParams({q: newQuery}); From 35eafa9bd651c880a9916a13c6cee87bb2ab37c2 Mon Sep 17 00:00:00 2001 From: Abdelrahman Khattab Date: Mon, 27 Oct 2025 17:49:28 +0100 Subject: [PATCH 2/6] cleaning up comments --- src/components/Search/SearchContext.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/components/Search/SearchContext.tsx b/src/components/Search/SearchContext.tsx index 4d39c14407df..b41926b2416e 100644 --- a/src/components/Search/SearchContext.tsx +++ b/src/components/Search/SearchContext.tsx @@ -125,15 +125,12 @@ function SearchContextProvider({children}: ChildrenProps) { const clearSelectedTransactions: SearchContextProps['clearSelectedTransactions'] = useCallback( (searchHashOrClearIDsFlag, shouldTurnOffSelectionMode = false) => { if (typeof searchHashOrClearIDsFlag === 'boolean') { - // Directly clear the IDs instead of calling setSelectedTransactions([]) - // which has an early return that prevents clearing when areTransactionsEmpty is true setSearchContextData((prevState) => ({ ...prevState, selectedTransactionIDs: [], shouldTurnOffSelectionMode, })); - // Reset the empty flag areTransactionsEmpty.current = true; return; } From 129c27584203a38922174bec54f0eef8eca1942c Mon Sep 17 00:00:00 2001 From: Abdelrahman Khattab Date: Fri, 31 Oct 2025 19:37:11 +0100 Subject: [PATCH 3/6] adding setSelectedTransactions([]) back to clearSelectedTransactions --- src/components/Search/SearchContext.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/Search/SearchContext.tsx b/src/components/Search/SearchContext.tsx index b41926b2416e..415e5a6e88d1 100644 --- a/src/components/Search/SearchContext.tsx +++ b/src/components/Search/SearchContext.tsx @@ -125,6 +125,7 @@ function SearchContextProvider({children}: ChildrenProps) { const clearSelectedTransactions: SearchContextProps['clearSelectedTransactions'] = useCallback( (searchHashOrClearIDsFlag, shouldTurnOffSelectionMode = false) => { if (typeof searchHashOrClearIDsFlag === 'boolean') { + setSelectedTransactions([]); setSearchContextData((prevState) => ({ ...prevState, selectedTransactionIDs: [], From a7575869252e7a8fa3954331962aec370fae1f0c Mon Sep 17 00:00:00 2001 From: Abdelrahman Khattab Date: Fri, 31 Oct 2025 19:58:40 +0100 Subject: [PATCH 4/6] reverting setSearchContextData changes --- src/components/Search/SearchContext.tsx | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/components/Search/SearchContext.tsx b/src/components/Search/SearchContext.tsx index 415e5a6e88d1..6d33af023ead 100644 --- a/src/components/Search/SearchContext.tsx +++ b/src/components/Search/SearchContext.tsx @@ -126,13 +126,7 @@ function SearchContextProvider({children}: ChildrenProps) { (searchHashOrClearIDsFlag, shouldTurnOffSelectionMode = false) => { if (typeof searchHashOrClearIDsFlag === 'boolean') { setSelectedTransactions([]); - setSearchContextData((prevState) => ({ - ...prevState, - selectedTransactionIDs: [], - shouldTurnOffSelectionMode, - })); - areTransactionsEmpty.current = true; return; } From efd6a1eff125681cd304dba6f2407144ce4ea225 Mon Sep 17 00:00:00 2001 From: Abdelrahman Khattab Date: Fri, 31 Oct 2025 20:01:11 +0100 Subject: [PATCH 5/6] minor edit --- src/components/Search/SearchContext.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/Search/SearchContext.tsx b/src/components/Search/SearchContext.tsx index 6d33af023ead..bc23f94e1aed 100644 --- a/src/components/Search/SearchContext.tsx +++ b/src/components/Search/SearchContext.tsx @@ -126,7 +126,6 @@ function SearchContextProvider({children}: ChildrenProps) { (searchHashOrClearIDsFlag, shouldTurnOffSelectionMode = false) => { if (typeof searchHashOrClearIDsFlag === 'boolean') { setSelectedTransactions([]); - return; } From 4c7bb709c23aab50f371806815ed8d520c65a180 Mon Sep 17 00:00:00 2001 From: Abdelrahman Khattab Date: Fri, 31 Oct 2025 20:02:49 +0100 Subject: [PATCH 6/6] minor edit --- src/components/Search/SearchContext.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/components/Search/SearchContext.tsx b/src/components/Search/SearchContext.tsx index bc23f94e1aed..782d0531e931 100644 --- a/src/components/Search/SearchContext.tsx +++ b/src/components/Search/SearchContext.tsx @@ -136,7 +136,6 @@ function SearchContextProvider({children}: ChildrenProps) { if (searchContextData.selectedReports.length === 0 && isEmptyObject(searchContextData.selectedTransactions) && !searchContextData.shouldTurnOffSelectionMode) { return; } - setSearchContextData((prevState) => ({ ...prevState, shouldTurnOffSelectionMode, @@ -153,8 +152,7 @@ function SearchContextProvider({children}: ChildrenProps) { searchContextData.selectedReports.length, searchContextData.selectedTransactions, searchContextData.shouldTurnOffSelectionMode, - shouldShowSelectAllMatchingItems, - selectAllMatchingItems, + setSelectedTransactions, ], );