From 64301a65b6e6b89cf54a0b29a2672b9f3153a40b Mon Sep 17 00:00:00 2001 From: "marta.sudol" Date: Tue, 6 May 2025 17:01:08 +0200 Subject: [PATCH 1/7] fix: get rid of redundant /Search API calls when opening report in RHN --- src/components/Search/index.tsx | 31 +++ src/hooks/useSearchHighlightAndScroll.ts | 8 +- tests/unit/useSearchHighlightAndScrollTest.ts | 187 ++++++++++++++++++ 3 files changed, 223 insertions(+), 3 deletions(-) diff --git a/src/components/Search/index.tsx b/src/components/Search/index.tsx index b3550cef8611..bed4b6d8f78f 100644 --- a/src/components/Search/index.tsx +++ b/src/components/Search/index.tsx @@ -202,6 +202,9 @@ function Search({queryJSON, currentSearchResults, lastNonEmptySearchResults, onS search({queryJSON, offset}); }, [isOffline, offset, queryJSON]); + // Create a ref to track if we're currently opening a report + const isOpeningReportRef = useRef(false); + const {newSearchResultKey, handleSelectionListScroll} = useSearchHighlightAndScroll({ searchResults, transactions, @@ -210,6 +213,7 @@ function Search({queryJSON, currentSearchResults, lastNonEmptySearchResults, onS offset, reportActions, previousReportActions, + isOpeningReport: isOpeningReportRef.current, }); // There's a race condition in Onyx which makes it return data from the previous Search, so in addition to checking that the data is loaded @@ -305,6 +309,9 @@ function Search({queryJSON, currentSearchResults, lastNonEmptySearchResults, onS } clearSelectedTransactions(); turnOffMobileSelectionMode(); + + // Make sure the flag is reset when the component unmounts + isOpeningReportRef.current = false; }, [isFocused, clearSelectedTransactions], ); @@ -374,6 +381,9 @@ function Search({queryJSON, currentSearchResults, lastNonEmptySearchResults, onS return; } + // Set the flag to indicate we're opening a report to prevent unnecessary search API calls + isOpeningReportRef.current = true; + const isFromSelfDM = item.reportID === CONST.REPORT.UNREPORTED_REPORT_ID; const isTransactionItem = isTransactionListItemType(item); @@ -383,6 +393,7 @@ function Search({queryJSON, currentSearchResults, lastNonEmptySearchResults, onS : item.reportID; if (!reportID) { + isOpeningReportRef.current = false; return; } @@ -391,6 +402,11 @@ function Search({queryJSON, currentSearchResults, lastNonEmptySearchResults, onS if (canUseTableReportView && shouldHandleTransactionAsReport) { Navigation.navigate(ROUTES.SEARCH_MONEY_REQUEST_REPORT.getRoute({reportID, backTo})); + + // // Reset the flag after navigation completes + // setTimeout(() => { + isOpeningReportRef.current = false; + // }, 500); return; } @@ -406,16 +422,31 @@ function Search({queryJSON, currentSearchResults, lastNonEmptySearchResults, onS transactionID: item.transactionID, }), ); + + // // Reset the flag after navigation completes + // setTimeout(() => { + isOpeningReportRef.current = false; + // }, 500); return; } if (isReportActionListItemType(item)) { const reportActionID = item.reportActionID; Navigation.navigate(ROUTES.SEARCH_REPORT.getRoute({reportID, reportActionID, backTo})); + + // Reset the flag after navigation completes + // setTimeout(() => { + isOpeningReportRef.current = false; + // }, 500); return; } Navigation.navigate(ROUTES.SEARCH_REPORT.getRoute({reportID, backTo})); + + // Reset the flag after navigation completes + // setTimeout(() => { + isOpeningReportRef.current = false; + // }, 500); }, [canUseTableReportView, hash, selectionMode?.isEnabled, toggleTransaction], ); diff --git a/src/hooks/useSearchHighlightAndScroll.ts b/src/hooks/useSearchHighlightAndScroll.ts index 271bdd21e6cf..9b6f8e1d43c4 100644 --- a/src/hooks/useSearchHighlightAndScroll.ts +++ b/src/hooks/useSearchHighlightAndScroll.ts @@ -18,12 +18,13 @@ type UseSearchHighlightAndScroll = { previousReportActions: OnyxCollection; queryJSON: SearchQueryJSON; offset: number; + isOpeningReport?: boolean; }; /** * Hook used to trigger a search when a new transaction or report action is added and handle highlighting and scrolling. */ -function useSearchHighlightAndScroll({searchResults, transactions, previousTransactions, reportActions, previousReportActions, queryJSON, offset}: UseSearchHighlightAndScroll) { +function useSearchHighlightAndScroll({searchResults, transactions, previousTransactions, reportActions, previousReportActions, queryJSON, offset, isOpeningReport = false}: UseSearchHighlightAndScroll) { // Ref to track if the search was triggered by this hook const triggeredByHookRef = useRef(false); const searchTriggeredRef = useRef(false); @@ -53,7 +54,8 @@ function useSearchHighlightAndScroll({searchResults, transactions, previousTrans const hasReportActionsIDsChange = !isEqual(reportActionsIDs, previousReportActionsIDs); // Check if there is a change in the transactions or report actions list - if ((!isChat && hasTransactionsIDsChange) || hasReportActionsIDsChange) { + if (((!isChat && hasTransactionsIDsChange) || hasReportActionsIDsChange) && !isOpeningReport) { + // Skip search when navigating to a report (isOpeningReport = true) // We only want to highlight new items if the addition of transactions or report actions triggered the search. // This is because, on deletion of items, the backend sometimes returns old items in place of the deleted ones. // We don't want to highlight these old items, even if they appear new in the current search results. @@ -62,7 +64,7 @@ function useSearchHighlightAndScroll({searchResults, transactions, previousTrans // Set the flag indicating the search is triggered by the hook triggeredByHookRef.current = true; - // Trigger the search + // Trigger the search only when not opening a report search({queryJSON, offset}); // Set the ref to prevent further triggers until reset diff --git a/tests/unit/useSearchHighlightAndScrollTest.ts b/tests/unit/useSearchHighlightAndScrollTest.ts index 8fc6aed25780..0efbb103ab5d 100644 --- a/tests/unit/useSearchHighlightAndScrollTest.ts +++ b/tests/unit/useSearchHighlightAndScrollTest.ts @@ -189,4 +189,191 @@ describe('useSearchHighlightAndScroll', () => { // Then Search will be triggerred. expect(Search.search).toHaveBeenCalled(); }); + + it('should not trigger Search when isOpeningReport is true', () => { + const initialProps: UseSearchHighlightAndScroll = { + searchResults: { + data: {personalDetailsList: {}}, + search: { + columnsToShow: { + shouldShowCategoryColumn: true, + shouldShowTagColumn: true, + shouldShowTaxColumn: true, + }, + hasMoreResults: false, + hasResults: true, + offset: 0, + status: 'all', + type: 'expense', + isLoading: false, + }, + }, + transactions: { + transactions_1: { + amount: -100, + bank: '', + billable: false, + cardID: 0, + cardName: 'Cash Expense', + cardNumber: '', + category: '', + comment: { + comment: '', + }, + created: '2025-01-08', + currency: 'ETB', + filename: 'w_c989c343d834d48a4e004c38d03c90bff9434768.png', + inserted: '2025-01-08 15:35:32', + managedCard: false, + merchant: 'g', + modifiedAmount: 0, + modifiedCreated: '', + modifiedCurrency: '', + modifiedMerchant: '', + originalAmount: 0, + originalCurrency: '', + parentTransactionID: '', + posted: '', + receipt: { + receiptID: 7409094723954473, + state: 'SCANCOMPLETE', + source: 'https://www.expensify.com/receipts/w_c989c343d834d48a4e004c38d03c90bff9434768.png', + }, + reimbursable: true, + reportID: '2309609540437471', + status: 'Posted', + tag: '', + transactionID: '1', + hasEReceipt: false, + }, + }, + previousTransactions: { + transactions_1: { + amount: -100, + bank: '', + billable: false, + cardID: 0, + cardName: 'Cash Expense', + cardNumber: '', + category: '', + comment: { + comment: '', + }, + created: '2025-01-08', + currency: 'ETB', + filename: 'w_c989c343d834d48a4e004c38d03c90bff9434768.png', + inserted: '2025-01-08 15:35:32', + managedCard: false, + merchant: 'g', + modifiedAmount: 0, + modifiedCreated: '', + modifiedCurrency: '', + modifiedMerchant: '', + originalAmount: 0, + originalCurrency: '', + parentTransactionID: '', + posted: '', + receipt: { + receiptID: 7409094723954473, + state: 'SCANCOMPLETE', + source: 'https://www.expensify.com/receipts/w_c989c343d834d48a4e004c38d03c90bff9434768.png', + }, + reimbursable: true, + reportID: '2309609540437471', + status: 'Posted', + tag: '', + transactionID: '1', + hasEReceipt: false, + }, + }, + reportActions: { + reportActions_209647397999267: { + 1: { + actionName: 'POLICYCHANGELOG_CORPORATE_UPGRADE', + reportActionID: '1', + created: '', + }, + }, + }, + previousReportActions: { + reportActions_209647397999267: { + 1: { + actionName: 'POLICYCHANGELOG_CORPORATE_UPGRADE', + reportActionID: '1', + created: '', + }, + }, + }, + queryJSON: { + type: 'expense', + status: 'all', + sortBy: 'date', + sortOrder: 'desc', + filters: {operator: 'and', left: 'tag', right: ''}, + inputQuery: 'type:expense status:all sortBy:date sortOrder:desc', + flatFilters: [], + hash: 243428839, + recentSearchHash: 422547233, + }, + offset: 0, + isOpeningReport: true, // Set isOpeningReport to true + }; + const changedProp: UseSearchHighlightAndScroll = { + ...initialProps, + transactions: { + transactions_2: { + amount: -100, + bank: '', + billable: false, + cardID: 0, + cardName: 'Cash Expense', + cardNumber: '', + category: '', + comment: { + comment: '', + }, + created: '2025-01-08', + currency: 'ETB', + filename: 'w_c989c343d834d48a4e004c38d03c90bff9434768.png', + inserted: '2025-01-08 15:35:32', + managedCard: false, + merchant: 'g', + modifiedAmount: 0, + modifiedCreated: '', + modifiedCurrency: '', + modifiedMerchant: '', + originalAmount: 0, + originalCurrency: '', + parentTransactionID: '', + posted: '', + receipt: { + receiptID: 7409094723954473, + state: 'SCANCOMPLETE', + source: 'https://www.expensify.com/receipts/w_c989c343d834d48a4e004c38d03c90bff9434768.png', + }, + reimbursable: true, + reportID: '2309609540437471', + status: 'Posted', + tag: '', + transactionID: '2', + hasEReceipt: false, + }, + }, + isOpeningReport: true, // Keep isOpeningReport true + }; + + // Reset the mock to track new calls + jest.clearAllMocks(); + + const {rerender} = renderHook((prop: UseSearchHighlightAndScroll) => useSearchHighlightAndScroll(prop), { + initialProps, + }); + expect(Search.search).not.toHaveBeenCalled(); + + // When the transaction ids list changes but isOpeningReport is true + rerender(changedProp); + + // Then Search should NOT be triggered + expect(Search.search).not.toHaveBeenCalled(); + }); }); From b48f7dfabd2d7c5b7a3c07a27aa2f2cedac33548 Mon Sep 17 00:00:00 2001 From: "marta.sudol" Date: Tue, 6 May 2025 17:08:23 +0200 Subject: [PATCH 2/7] fix: get rid of redundant /Search API calls when opening report in RHN --- src/components/Search/index.tsx | 26 ++++-------------------- src/hooks/useSearchHighlightAndScroll.ts | 3 +-- 2 files changed, 5 insertions(+), 24 deletions(-) diff --git a/src/components/Search/index.tsx b/src/components/Search/index.tsx index bed4b6d8f78f..39d6454d90ca 100644 --- a/src/components/Search/index.tsx +++ b/src/components/Search/index.tsx @@ -202,7 +202,6 @@ function Search({queryJSON, currentSearchResults, lastNonEmptySearchResults, onS search({queryJSON, offset}); }, [isOffline, offset, queryJSON]); - // Create a ref to track if we're currently opening a report const isOpeningReportRef = useRef(false); const {newSearchResultKey, handleSelectionListScroll} = useSearchHighlightAndScroll({ @@ -310,7 +309,6 @@ function Search({queryJSON, currentSearchResults, lastNonEmptySearchResults, onS clearSelectedTransactions(); turnOffMobileSelectionMode(); - // Make sure the flag is reset when the component unmounts isOpeningReportRef.current = false; }, [isFocused, clearSelectedTransactions], @@ -381,9 +379,7 @@ function Search({queryJSON, currentSearchResults, lastNonEmptySearchResults, onS return; } - // Set the flag to indicate we're opening a report to prevent unnecessary search API calls isOpeningReportRef.current = true; - const isFromSelfDM = item.reportID === CONST.REPORT.UNREPORTED_REPORT_ID; const isTransactionItem = isTransactionListItemType(item); @@ -402,11 +398,7 @@ function Search({queryJSON, currentSearchResults, lastNonEmptySearchResults, onS if (canUseTableReportView && shouldHandleTransactionAsReport) { Navigation.navigate(ROUTES.SEARCH_MONEY_REQUEST_REPORT.getRoute({reportID, backTo})); - - // // Reset the flag after navigation completes - // setTimeout(() => { - isOpeningReportRef.current = false; - // }, 500); + isOpeningReportRef.current = false; return; } @@ -422,11 +414,7 @@ function Search({queryJSON, currentSearchResults, lastNonEmptySearchResults, onS transactionID: item.transactionID, }), ); - - // // Reset the flag after navigation completes - // setTimeout(() => { - isOpeningReportRef.current = false; - // }, 500); + isOpeningReportRef.current = false; return; } @@ -434,19 +422,13 @@ function Search({queryJSON, currentSearchResults, lastNonEmptySearchResults, onS const reportActionID = item.reportActionID; Navigation.navigate(ROUTES.SEARCH_REPORT.getRoute({reportID, reportActionID, backTo})); - // Reset the flag after navigation completes - // setTimeout(() => { - isOpeningReportRef.current = false; - // }, 500); + isOpeningReportRef.current = false; return; } Navigation.navigate(ROUTES.SEARCH_REPORT.getRoute({reportID, backTo})); - // Reset the flag after navigation completes - // setTimeout(() => { - isOpeningReportRef.current = false; - // }, 500); + isOpeningReportRef.current = false; }, [canUseTableReportView, hash, selectionMode?.isEnabled, toggleTransaction], ); diff --git a/src/hooks/useSearchHighlightAndScroll.ts b/src/hooks/useSearchHighlightAndScroll.ts index 9b6f8e1d43c4..30727964d009 100644 --- a/src/hooks/useSearchHighlightAndScroll.ts +++ b/src/hooks/useSearchHighlightAndScroll.ts @@ -55,7 +55,6 @@ function useSearchHighlightAndScroll({searchResults, transactions, previousTrans // Check if there is a change in the transactions or report actions list if (((!isChat && hasTransactionsIDsChange) || hasReportActionsIDsChange) && !isOpeningReport) { - // Skip search when navigating to a report (isOpeningReport = true) // We only want to highlight new items if the addition of transactions or report actions triggered the search. // This is because, on deletion of items, the backend sometimes returns old items in place of the deleted ones. // We don't want to highlight these old items, even if they appear new in the current search results. @@ -64,7 +63,7 @@ function useSearchHighlightAndScroll({searchResults, transactions, previousTrans // Set the flag indicating the search is triggered by the hook triggeredByHookRef.current = true; - // Trigger the search only when not opening a report + // Trigger the search search({queryJSON, offset}); // Set the ref to prevent further triggers until reset From 3d6d6f658d350eff05368d6ab1ae94e0e28766ef Mon Sep 17 00:00:00 2001 From: "marta.sudol" Date: Tue, 6 May 2025 17:12:09 +0200 Subject: [PATCH 3/7] prettier & eslint --- src/hooks/useSearchHighlightAndScroll.ts | 2 +- tests/unit/useSearchHighlightAndScrollTest.ts | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/hooks/useSearchHighlightAndScroll.ts b/src/hooks/useSearchHighlightAndScroll.ts index 30727964d009..ad563ffe68f1 100644 --- a/src/hooks/useSearchHighlightAndScroll.ts +++ b/src/hooks/useSearchHighlightAndScroll.ts @@ -74,7 +74,7 @@ function useSearchHighlightAndScroll({searchResults, transactions, previousTrans return () => { searchTriggeredRef.current = false; }; - }, [transactions, previousTransactions, queryJSON, offset, reportActions, previousReportActions, isChat]); + }, [transactions, previousTransactions, queryJSON, offset, reportActions, previousReportActions, isChat, isOpeningReport]); // Initialize the set with existing IDs only once useEffect(() => { diff --git a/tests/unit/useSearchHighlightAndScrollTest.ts b/tests/unit/useSearchHighlightAndScrollTest.ts index 0efbb103ab5d..2dba5a486c1b 100644 --- a/tests/unit/useSearchHighlightAndScrollTest.ts +++ b/tests/unit/useSearchHighlightAndScrollTest.ts @@ -2,7 +2,7 @@ import {renderHook} from '@testing-library/react-native'; import useSearchHighlightAndScroll from '@hooks/useSearchHighlightAndScroll'; import type {UseSearchHighlightAndScroll} from '@hooks/useSearchHighlightAndScroll'; -import * as Search from '@libs/actions/Search'; +import { search } from '@libs/actions/Search'; jest.mock('@libs/actions/Search'); jest.mock('@src/components/ConfirmedRoute.tsx'); @@ -181,13 +181,13 @@ describe('useSearchHighlightAndScroll', () => { const {rerender} = renderHook((prop: UseSearchHighlightAndScroll) => useSearchHighlightAndScroll(prop), { initialProps, }); - expect(Search.search).not.toHaveBeenCalled(); + expect(search).not.toHaveBeenCalled(); // When the transaction ids list change though it has the same length as previous value rerender(changedProp); // Then Search will be triggerred. - expect(Search.search).toHaveBeenCalled(); + expect(search).toHaveBeenCalled(); }); it('should not trigger Search when isOpeningReport is true', () => { @@ -368,12 +368,12 @@ describe('useSearchHighlightAndScroll', () => { const {rerender} = renderHook((prop: UseSearchHighlightAndScroll) => useSearchHighlightAndScroll(prop), { initialProps, }); - expect(Search.search).not.toHaveBeenCalled(); + expect(search).not.toHaveBeenCalled(); // When the transaction ids list changes but isOpeningReport is true rerender(changedProp); // Then Search should NOT be triggered - expect(Search.search).not.toHaveBeenCalled(); + expect(search).not.toHaveBeenCalled(); }); }); From 74ac6bba79725bef872378b588920ba7d48bc0aa Mon Sep 17 00:00:00 2001 From: "marta.sudol" Date: Tue, 6 May 2025 17:12:44 +0200 Subject: [PATCH 4/7] prettier & eslint --- src/hooks/useSearchHighlightAndScroll.ts | 11 ++++++++++- tests/unit/useSearchHighlightAndScrollTest.ts | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/hooks/useSearchHighlightAndScroll.ts b/src/hooks/useSearchHighlightAndScroll.ts index ad563ffe68f1..7876e1419f4b 100644 --- a/src/hooks/useSearchHighlightAndScroll.ts +++ b/src/hooks/useSearchHighlightAndScroll.ts @@ -24,7 +24,16 @@ type UseSearchHighlightAndScroll = { /** * Hook used to trigger a search when a new transaction or report action is added and handle highlighting and scrolling. */ -function useSearchHighlightAndScroll({searchResults, transactions, previousTransactions, reportActions, previousReportActions, queryJSON, offset, isOpeningReport = false}: UseSearchHighlightAndScroll) { +function useSearchHighlightAndScroll({ + searchResults, + transactions, + previousTransactions, + reportActions, + previousReportActions, + queryJSON, + offset, + isOpeningReport = false, +}: UseSearchHighlightAndScroll) { // Ref to track if the search was triggered by this hook const triggeredByHookRef = useRef(false); const searchTriggeredRef = useRef(false); diff --git a/tests/unit/useSearchHighlightAndScrollTest.ts b/tests/unit/useSearchHighlightAndScrollTest.ts index 2dba5a486c1b..7569477da3f2 100644 --- a/tests/unit/useSearchHighlightAndScrollTest.ts +++ b/tests/unit/useSearchHighlightAndScrollTest.ts @@ -2,7 +2,7 @@ import {renderHook} from '@testing-library/react-native'; import useSearchHighlightAndScroll from '@hooks/useSearchHighlightAndScroll'; import type {UseSearchHighlightAndScroll} from '@hooks/useSearchHighlightAndScroll'; -import { search } from '@libs/actions/Search'; +import {search} from '@libs/actions/Search'; jest.mock('@libs/actions/Search'); jest.mock('@src/components/ConfirmedRoute.tsx'); From 50398b478e084d24c70dfcbbfa62de59633dc059 Mon Sep 17 00:00:00 2001 From: "marta.sudol" Date: Mon, 12 May 2025 09:41:59 +0200 Subject: [PATCH 5/7] prettier fixes --- src/components/Search/index.tsx | 2 -- src/hooks/useSearchHighlightAndScroll.ts | 12 ++---------- tests/unit/useSearchHighlightAndScrollTest.ts | 3 +-- 3 files changed, 3 insertions(+), 14 deletions(-) diff --git a/src/components/Search/index.tsx b/src/components/Search/index.tsx index 95408c0cc5b8..b3550cef8611 100644 --- a/src/components/Search/index.tsx +++ b/src/components/Search/index.tsx @@ -202,8 +202,6 @@ function Search({queryJSON, currentSearchResults, lastNonEmptySearchResults, onS search({queryJSON, offset}); }, [isOffline, offset, queryJSON]); - - const {newSearchResultKey, handleSelectionListScroll} = useSearchHighlightAndScroll({ searchResults, transactions, diff --git a/src/hooks/useSearchHighlightAndScroll.ts b/src/hooks/useSearchHighlightAndScroll.ts index bce19c255a52..c34659a39313 100644 --- a/src/hooks/useSearchHighlightAndScroll.ts +++ b/src/hooks/useSearchHighlightAndScroll.ts @@ -1,6 +1,6 @@ +import {useNavigation} from '@react-navigation/native'; import isEqual from 'lodash/isEqual'; import {useCallback, useEffect, useRef, useState} from 'react'; -import {useNavigation} from '@react-navigation/native'; import type {OnyxCollection, OnyxEntry} from 'react-native-onyx'; import type {SearchQueryJSON} from '@components/Search/types'; import type {ReportListItemType, SearchListItem, SelectionListHandle, TransactionListItemType} from '@components/SelectionList/types'; @@ -24,15 +24,7 @@ type UseSearchHighlightAndScroll = { /** * Hook used to trigger a search when a new transaction or report action is added and handle highlighting and scrolling. */ -function useSearchHighlightAndScroll({ - searchResults, - transactions, - previousTransactions, - reportActions, - previousReportActions, - queryJSON, - offset, -}: UseSearchHighlightAndScroll) { +function useSearchHighlightAndScroll({searchResults, transactions, previousTransactions, reportActions, previousReportActions, queryJSON, offset}: UseSearchHighlightAndScroll) { // Ref to track if the search was triggered by this hook const triggeredByHookRef = useRef(false); const searchTriggeredRef = useRef(false); diff --git a/tests/unit/useSearchHighlightAndScrollTest.ts b/tests/unit/useSearchHighlightAndScrollTest.ts index db75fe54b4c6..e60e26381978 100644 --- a/tests/unit/useSearchHighlightAndScrollTest.ts +++ b/tests/unit/useSearchHighlightAndScrollTest.ts @@ -1,4 +1,5 @@ /* eslint-disable @typescript-eslint/naming-convention */ +import {useNavigation} from '@react-navigation/native'; import {renderHook} from '@testing-library/react-native'; import useSearchHighlightAndScroll from '@hooks/useSearchHighlightAndScroll'; import type {UseSearchHighlightAndScroll} from '@hooks/useSearchHighlightAndScroll'; @@ -11,8 +12,6 @@ jest.mock('@react-navigation/native', () => ({ useNavigation: jest.fn(), })); -import {useNavigation} from '@react-navigation/native'; - describe('useSearchHighlightAndScroll', () => { beforeEach(() => { // Default mock implementation From 658c44e796b073178e49cf4746c15c7d51693eed Mon Sep 17 00:00:00 2001 From: "marta.sudol" Date: Mon, 12 May 2025 10:07:58 +0200 Subject: [PATCH 6/7] prettier fixes --- tests/unit/useSearchHighlightAndScrollTest.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/unit/useSearchHighlightAndScrollTest.ts b/tests/unit/useSearchHighlightAndScrollTest.ts index e60e26381978..f3bb34a86bc1 100644 --- a/tests/unit/useSearchHighlightAndScrollTest.ts +++ b/tests/unit/useSearchHighlightAndScrollTest.ts @@ -1,5 +1,6 @@ /* eslint-disable @typescript-eslint/naming-convention */ import {useNavigation} from '@react-navigation/native'; +import type * as NativeNavigation from '@react-navigation/native'; import {renderHook} from '@testing-library/react-native'; import useSearchHighlightAndScroll from '@hooks/useSearchHighlightAndScroll'; import type {UseSearchHighlightAndScroll} from '@hooks/useSearchHighlightAndScroll'; @@ -8,7 +9,7 @@ import {search} from '@libs/actions/Search'; jest.mock('@libs/actions/Search'); jest.mock('@src/components/ConfirmedRoute.tsx'); jest.mock('@react-navigation/native', () => ({ - ...jest.requireActual('@react-navigation/native'), + ...jest.requireActual('@react-navigation/native'), useNavigation: jest.fn(), })); From 597101408171a66c5186ce6a15d0c7f096e999a3 Mon Sep 17 00:00:00 2001 From: "marta.sudol" Date: Mon, 12 May 2025 10:08:57 +0200 Subject: [PATCH 7/7] prettier fixes --- tests/unit/useSearchHighlightAndScrollTest.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/unit/useSearchHighlightAndScrollTest.ts b/tests/unit/useSearchHighlightAndScrollTest.ts index f3bb34a86bc1..369213d9ee91 100644 --- a/tests/unit/useSearchHighlightAndScrollTest.ts +++ b/tests/unit/useSearchHighlightAndScrollTest.ts @@ -21,6 +21,10 @@ describe('useSearchHighlightAndScroll', () => { }); }); + afterEach(() => { + jest.clearAllMocks(); + }); + it('should trigger Search when transactionIDs list change', () => { const initialProps: UseSearchHighlightAndScroll = { searchResults: {