diff --git a/src/components/MoneyReportHeader.tsx b/src/components/MoneyReportHeader.tsx
index 2e08aed3250f..e590c50cd5cc 100644
--- a/src/components/MoneyReportHeader.tsx
+++ b/src/components/MoneyReportHeader.tsx
@@ -163,7 +163,7 @@ import type {PopoverMenuItem} from './PopoverMenu';
 import {PressableWithFeedback} from './Pressable';
 import type {ActionHandledType} from './ProcessMoneyReportHoldMenu';
 import ProcessMoneyReportHoldMenu from './ProcessMoneyReportHoldMenu';
-import {useSearchContext} from './Search/SearchContext';
+import {useSearchActionsContext, useSearchStateContext} from './Search/SearchContext';
 import AnimatedSettlementButton from './SettlementButton/AnimatedSettlementButton';
 import Text from './Text';
 
@@ -429,7 +429,8 @@ function MoneyReportHeader({
         typeof CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.HOLD | typeof CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.REJECT | typeof CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.REJECT_BULK
     > | null>(null);
 
-    const {selectedTransactionIDs, removeTransaction, clearSelectedTransactions, currentSearchQueryJSON, currentSearchKey, currentSearchHash, currentSearchResults} = useSearchContext();
+    const {selectedTransactionIDs, currentSearchQueryJSON, currentSearchKey, currentSearchHash, currentSearchResults} = useSearchStateContext();
+    const {removeTransaction, clearSelectedTransactions} = useSearchActionsContext();
     const shouldCalculateTotals = useSearchShouldCalculateTotals(currentSearchKey, currentSearchQueryJSON?.hash, true);
 
     const [network] = useOnyx(ONYXKEYS.NETWORK);
diff --git a/src/components/MoneyRequestHeader.tsx b/src/components/MoneyRequestHeader.tsx
index 6c707cc27414..cf5262a08d7b 100644
--- a/src/components/MoneyRequestHeader.tsx
+++ b/src/components/MoneyRequestHeader.tsx
@@ -84,7 +84,7 @@ import type {MoneyRequestHeaderStatusBarProps} from './MoneyRequestHeaderStatusB
 import MoneyRequestHeaderStatusBar from './MoneyRequestHeaderStatusBar';
 import MoneyRequestReportTransactionsNavigation from './MoneyRequestReportView/MoneyRequestReportTransactionsNavigation';
 import {usePersonalDetails} from './OnyxListItemProvider';
-import {useSearchContext} from './Search/SearchContext';
+import {useSearchActionsContext, useSearchStateContext} from './Search/SearchContext';
 import {useWideRHPState} from './WideRHPContextProvider';
 
 type MoneyRequestHeaderProps = {
@@ -158,7 +158,8 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre
     const isOnHold = isOnHoldTransactionUtils(transaction);
     const isDuplicate = isDuplicateTransactionUtils(transaction, email ?? '', accountID, report, policy, transactionViolations);
     const reportID = report?.reportID;
-    const {removeTransaction, currentSearchHash} = useSearchContext();
+    const {currentSearchHash} = useSearchStateContext();
+    const {removeTransaction} = useSearchActionsContext();
     const {isExpenseSplit} = getOriginalTransactionWithSplitInfo(transaction, originalTransaction);
     const [cardList] = useOnyx(ONYXKEYS.CARD_LIST);
     const {deleteTransactions} = useDeleteTransactions({report: parentReport, reportActions: parentReportAction ? [parentReportAction] : [], policy});
diff --git a/src/components/MoneyRequestReportView/MoneyRequestReportActionsList.tsx b/src/components/MoneyRequestReportView/MoneyRequestReportActionsList.tsx
index 92330bb39e53..7b041e708a12 100644
--- a/src/components/MoneyRequestReportView/MoneyRequestReportActionsList.tsx
+++ b/src/components/MoneyRequestReportView/MoneyRequestReportActionsList.tsx
@@ -20,7 +20,7 @@ import OfflineWithFeedback from '@components/OfflineWithFeedback';
 import {usePersonalDetails} from '@components/OnyxListItemProvider';
 import {PressableWithFeedback} from '@components/Pressable';
 import ScrollView from '@components/ScrollView';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchActionsContext, useSearchStateContext} from '@components/Search/SearchContext';
 import Text from '@components/Text';
 import useConfirmModal from '@hooks/useConfirmModal';
 import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
@@ -197,7 +197,8 @@ function MoneyRequestReportActionsList({
     const [enableScrollToEnd, setEnableScrollToEnd] = useState<boolean>(false);
     const [lastActionEventId, setLastActionEventId] = useState<string>('');
 
-    const {selectedTransactionIDs, setSelectedTransactions, clearSelectedTransactions} = useSearchContext();
+    const {selectedTransactionIDs} = useSearchStateContext();
+    const {setSelectedTransactions, clearSelectedTransactions} = useSearchActionsContext();
 
     useFilterSelectedTransactions(transactions);
 
diff --git a/src/components/MoneyRequestReportView/MoneyRequestReportTransactionList.tsx b/src/components/MoneyRequestReportView/MoneyRequestReportTransactionList.tsx
index ee3b436d8e54..f584a0309385 100644
--- a/src/components/MoneyRequestReportView/MoneyRequestReportTransactionList.tsx
+++ b/src/components/MoneyRequestReportView/MoneyRequestReportTransactionList.tsx
@@ -8,7 +8,7 @@ import Checkbox from '@components/Checkbox';
 import MenuItem from '@components/MenuItem';
 import Modal from '@components/Modal';
 import OfflineWithFeedback from '@components/OfflineWithFeedback';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchActionsContext, useSearchStateContext} from '@components/Search/SearchContext';
 import type {SortOrder} from '@components/Search/types';
 import Text from '@components/Text';
 import {useWideRHPActions} from '@components/WideRHPContextProvider';
@@ -193,7 +193,8 @@ function MoneyRequestReportTransactionList({
         return hasPendingDeletionTransaction || transactions.some(getTransactionPendingAction);
     }, [hasPendingDeletionTransaction, transactions]);
 
-    const {selectedTransactionIDs, setSelectedTransactions, clearSelectedTransactions} = useSearchContext();
+    const {selectedTransactionIDs} = useSearchStateContext();
+    const {setSelectedTransactions, clearSelectedTransactions} = useSearchActionsContext();
     useHandleSelectionMode(selectedTransactionIDs);
     const isMobileSelectionModeEnabled = useMobileSelectionMode();
 
diff --git a/src/components/Navigation/SearchSidebar.tsx b/src/components/Navigation/SearchSidebar.tsx
index 21570acb8c5c..8b3f14f7e499 100644
--- a/src/components/Navigation/SearchSidebar.tsx
+++ b/src/components/Navigation/SearchSidebar.tsx
@@ -1,7 +1,7 @@
 import type {ParamListBase} from '@react-navigation/native';
 import React, {useEffect} from 'react';
 import {View} from 'react-native';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchActionsContext, useSearchStateContext} from '@components/Search/SearchContext';
 import useLocalize from '@hooks/useLocalize';
 import useNetwork from '@hooks/useNetwork';
 import useResponsiveLayout from '@hooks/useResponsiveLayout';
@@ -27,7 +27,8 @@ function SearchSidebar({state}: SearchSidebarProps) {
 
     const route = state.routes.at(-1);
     const params = route?.params as SearchFullscreenNavigatorParamList[typeof SCREENS.SEARCH.ROOT] | undefined;
-    const {lastSearchType, setLastSearchType, currentSearchResults} = useSearchContext();
+    const {lastSearchType, currentSearchResults} = useSearchStateContext();
+    const {setLastSearchType} = useSearchActionsContext();
 
     const queryJSON = params?.q ? buildSearchQueryJSON(params.q, params.rawQuery) : undefined;
 
diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx
index 4a2b4545cee0..14ba2034efa0 100644
--- a/src/components/ReportActionItem/MoneyRequestView.tsx
+++ b/src/components/ReportActionItem/MoneyRequestView.tsx
@@ -10,7 +10,7 @@ import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription';
 import OfflineWithFeedback from '@components/OfflineWithFeedback';
 import {usePolicyCategories, usePolicyTags} from '@components/OnyxListItemProvider';
 import ReportActionsSkeletonView from '@components/ReportActionsSkeletonView';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchStateContext} from '@components/Search/SearchContext';
 import Switch from '@components/Switch';
 import Text from '@components/Text';
 import ViolationMessages from '@components/ViolationMessages';
@@ -177,8 +177,7 @@ function MoneyRequestView({
     const {getReportRHPActiveRoute} = useActiveRoute();
     const [lastVisitedPath] = useOnyx(ONYXKEYS.LAST_VISITED_PATH);
 
-    const {currentSearchResults} = useSearchContext();
-
+    const {currentSearchResults} = useSearchStateContext();
     const reportAttributes = useReportAttributes();
 
     // When this component is used when merging from the search page, we might not have the parent report stored in the main collection
diff --git a/src/components/Search/SearchContext.tsx b/src/components/Search/SearchContext.tsx
index 38348701ccc5..c392aed7c72b 100644
--- a/src/components/Search/SearchContext.tsx
+++ b/src/components/Search/SearchContext.tsx
@@ -1,4 +1,4 @@
-import React, {useCallback, useContext, useMemo, useRef, useState} from 'react';
+import React, {useContext, useLayoutEffect, useRef, useState} from 'react';
 // We need direct access to useOnyx from react-native-onyx to avoid circular dependencies in SearchContext
 // eslint-disable-next-line no-restricted-imports
 import {useOnyx} from 'react-native-onyx';
@@ -14,7 +14,7 @@ import type {SearchResults} from '@src/types/onyx';
 import type {SearchResultsInfo} from '@src/types/onyx/SearchResults';
 import type ChildrenProps from '@src/types/utils/ChildrenProps';
 import {isEmptyObject} from '@src/types/utils/EmptyObject';
-import type {SearchContextData, SearchContextProps, SearchQueryJSON, SelectedTransactions} from './types';
+import type {SearchActionsContextValue, SearchContextData, SearchQueryJSON, SearchStateContextValue, SelectedTransactions} from './types';
 
 // Default search info when building from live data
 // Used for to-do searches where we build SearchResults from live Onyx data instead of API snapshots
@@ -44,14 +44,17 @@ const defaultSearchContextData: SearchContextData = {
     shouldResetSearchQuery: false,
 };
 
-const defaultSearchContext: SearchContextProps = {
+const defaultSearchStateContext: SearchStateContextValue = {
     ...defaultSearchContextData,
     lastSearchType: undefined,
     areAllMatchingItemsSelected: false,
-    showSelectAllMatchingItems: false,
+    shouldShowSelectAllMatchingItems: false,
     shouldShowFiltersBarLoading: false,
     currentSearchResults: undefined,
     shouldUseLiveData: false,
+};
+
+const defaultSearchActionsContext: SearchActionsContextValue = {
     setLastSearchType: () => {},
     setCurrentSearchHashAndKey: () => {},
     setCurrentSearchQueryJSON: () => {},
@@ -59,15 +62,16 @@ const defaultSearchContext: SearchContextProps = {
     removeTransaction: () => {},
     clearSelectedTransactions: () => {},
     setShouldShowFiltersBarLoading: () => {},
-    shouldShowSelectAllMatchingItems: () => {},
+    setShouldShowSelectAllMatchingItems: () => {},
     selectAllMatchingItems: () => {},
     setShouldResetSearchQuery: () => {},
 };
 
-const SearchContext = React.createContext<SearchContextProps>(defaultSearchContext);
+const SearchStateContext = React.createContext<SearchStateContextValue>(defaultSearchStateContext);
+const SearchActionsContext = React.createContext<SearchActionsContextValue>(defaultSearchActionsContext);
 
 function SearchContextProvider({children}: ChildrenProps) {
-    const [showSelectAllMatchingItems, shouldShowSelectAllMatchingItems] = useState(false);
+    const [shouldShowSelectAllMatchingItems, setShouldShowSelectAllMatchingItems] = useState(false);
     const [areAllMatchingItemsSelected, selectAllMatchingItems] = useState(false);
     const [shouldShowFiltersBarLoading, setShouldShowFiltersBarLoading] = useState(false);
     const [lastSearchType, setLastSearchType] = useState<string | undefined>(undefined);
@@ -76,20 +80,22 @@ function SearchContextProvider({children}: ChildrenProps) {
 
     // Use a ref to access searchContextData in callbacks without causing callback reference changes
     const searchContextDataRef = useRef(searchContextData);
-    searchContextDataRef.current = searchContextData;
+
+    useLayoutEffect(() => {
+        searchContextDataRef.current = searchContextData;
+    }, [searchContextData]);
 
     const [snapshotSearchResults] = useOnyx(`${ONYXKEYS.COLLECTION.SNAPSHOT}${searchContextData.currentSearchHash}`);
     const todoSearchResultsData = useTodos();
-
     const currentSearchKey = searchContextData.currentSearchKey;
     const currentRecentSearchHash = searchContextData.currentRecentSearchHash;
     const {accountID} = useCurrentUserPersonalDetails();
-    const suggestedSearches = useMemo(() => getSuggestedSearches(accountID), [accountID]);
+    const suggestedSearches = getSuggestedSearches(accountID);
     const shouldUseLiveData = !!currentSearchKey && isTodoSearch(currentRecentSearchHash, suggestedSearches);
 
     // If viewing a to-do search, use live data from useTodos, otherwise return the snapshot data
     // We do this so that we can show the counters for the to-do search results without visiting the specific to-do page, e.g. show `Approve [3]` while viewing the `Submit` to-do search.
-    const currentSearchResults = useMemo((): SearchResults | undefined => {
+    function getCurrentSearchResults(): SearchResults | undefined {
         if (shouldUseLiveData) {
             const liveData = todoSearchResultsData[currentSearchKey as keyof typeof todoSearchResultsData];
             const searchInfo: SearchResultsInfo = {
@@ -108,9 +114,11 @@ function SearchContextProvider({children}: ChildrenProps) {
         }
 
         return snapshotSearchResults ?? undefined;
-    }, [shouldUseLiveData, currentSearchKey, todoSearchResultsData, snapshotSearchResults]);
+    }
+
+    const currentSearchResults = getCurrentSearchResults();
 
-    const setCurrentSearchHashAndKey = useCallback((searchHash: number, recentHash: number, searchKey: SearchKey | undefined) => {
+    const setCurrentSearchHashAndKey = (searchHash: number, recentHash: number, searchKey: SearchKey | undefined) => {
         setSearchContextData((prevState) => {
             if (searchHash === prevState.currentSearchHash && recentHash === prevState.currentRecentSearchHash && searchKey === prevState.currentSearchKey) {
                 return prevState;
@@ -123,9 +131,9 @@ function SearchContextProvider({children}: ChildrenProps) {
                 currentSearchKey: searchKey,
             };
         });
-    }, []);
+    };
 
-    const setCurrentSearchQueryJSON = useCallback((searchQueryJSON: SearchQueryJSON | undefined) => {
+    const setCurrentSearchQueryJSON = (searchQueryJSON: SearchQueryJSON | undefined) => {
         setSearchContextData((prevState) => {
             if (searchQueryJSON === prevState.currentSearchQueryJSON) {
                 return prevState;
@@ -136,9 +144,9 @@ function SearchContextProvider({children}: ChildrenProps) {
                 currentSearchQueryJSON: searchQueryJSON,
             };
         });
-    }, []);
+    };
 
-    const setSelectedTransactions: SearchContextProps['setSelectedTransactions'] = useCallback((selectedTransactions, data = []) => {
+    const setSelectedTransactions: SearchActionsContextValue['setSelectedTransactions'] = (selectedTransactions, data = []) => {
         if (selectedTransactions instanceof Array) {
             if (!selectedTransactions.length && areTransactionsEmpty.current) {
                 areTransactionsEmpty.current = true;
@@ -152,7 +160,7 @@ function SearchContextProvider({children}: ChildrenProps) {
         }
 
         // When selecting transactions, we also need to manage the reports to which these transactions belong. This is done to ensure proper exporting to CSV.
-        let selectedReports: SearchContextProps['selectedReports'] = [];
+        let selectedReports: SearchStateContextValue['selectedReports'] = [];
 
         if (data.length && data.every(isTransactionReportGroupListItemType)) {
             selectedReports = data
@@ -199,116 +207,100 @@ function SearchContextProvider({children}: ChildrenProps) {
             shouldTurnOffSelectionMode: false,
             selectedReports,
         }));
-    }, []);
+    };
 
-    const clearSelectedTransactions: SearchContextProps['clearSelectedTransactions'] = useCallback(
-        (searchHashOrClearIDsFlag, shouldTurnOffSelectionMode = false) => {
-            if (typeof searchHashOrClearIDsFlag === 'boolean') {
-                setSelectedTransactions([]);
-                return;
-            }
+    const clearSelectedTransactions: SearchActionsContextValue['clearSelectedTransactions'] = (searchHashOrClearIDsFlag, shouldTurnOffSelectionMode = false) => {
+        if (typeof searchHashOrClearIDsFlag === 'boolean') {
+            setSelectedTransactions([]);
+            return;
+        }
 
-            const data = searchContextDataRef.current;
+        const data = searchContextDataRef.current;
 
-            if (searchHashOrClearIDsFlag === data.currentSearchHash) {
-                return;
-            }
+        if (searchHashOrClearIDsFlag === data.currentSearchHash) {
+            return;
+        }
 
-            if (data.selectedReports.length === 0 && isEmptyObject(data.selectedTransactions) && !data.shouldTurnOffSelectionMode) {
-                return;
-            }
-            setSearchContextData((prevState) => ({
-                ...prevState,
-                shouldTurnOffSelectionMode,
-                selectedTransactions: {},
-                selectedReports: [],
-            }));
+        if (data.selectedReports.length === 0 && isEmptyObject(data.selectedTransactions) && !data.shouldTurnOffSelectionMode) {
+            return;
+        }
+        setSearchContextData((prevState) => ({
+            ...prevState,
+            shouldTurnOffSelectionMode,
+            selectedTransactions: {},
+            selectedReports: [],
+        }));
 
-            // Unselect all transactions and hide the "select all matching items" option
-            shouldShowSelectAllMatchingItems(false);
-            selectAllMatchingItems(false);
-        },
-        [setSelectedTransactions],
-    );
+        // Unselect all transactions and hide the "select all matching items" option
+        setShouldShowSelectAllMatchingItems(false);
+        selectAllMatchingItems(false);
+    };
 
-    const removeTransaction: SearchContextProps['removeTransaction'] = useCallback(
-        (transactionID) => {
-            if (!transactionID) {
-                return;
-            }
-            const selectedTransactionIDs = searchContextData.selectedTransactionIDs;
+    const {selectedTransactionIDs, selectedTransactions} = searchContextData;
 
-            if (!isEmptyObject(searchContextData.selectedTransactions)) {
-                const newSelectedTransactions = Object.entries(searchContextData.selectedTransactions).reduce((acc, [key, value]) => {
-                    if (key === transactionID) {
-                        return acc;
-                    }
-                    acc[key] = value;
+    const removeTransaction: SearchActionsContextValue['removeTransaction'] = (transactionID) => {
+        if (!transactionID) {
+            return;
+        }
+
+        if (!isEmptyObject(selectedTransactions)) {
+            const newSelectedTransactions = Object.entries(selectedTransactions).reduce((acc, [key, value]) => {
+                if (key === transactionID) {
                     return acc;
-                }, {} as SelectedTransactions);
+                }
+                acc[key] = value;
+                return acc;
+            }, {} as SelectedTransactions);
 
-                setSearchContextData((prevState) => ({
-                    ...prevState,
-                    selectedTransactions: newSelectedTransactions,
-                }));
-            }
+            setSearchContextData((prevState) => ({
+                ...prevState,
+                selectedTransactions: newSelectedTransactions,
+            }));
+        }
 
-            if (selectedTransactionIDs.length > 0) {
-                setSearchContextData((prevState) => ({
-                    ...prevState,
-                    selectedTransactionIDs: selectedTransactionIDs.filter((ID) => transactionID !== ID),
-                }));
-            }
-        },
-        [searchContextData.selectedTransactionIDs, searchContextData.selectedTransactions],
-    );
+        if (selectedTransactionIDs.length > 0) {
+            setSearchContextData((prevState) => ({
+                ...prevState,
+                selectedTransactionIDs: selectedTransactionIDs.filter((ID) => transactionID !== ID),
+            }));
+        }
+    };
 
-    const setShouldResetSearchQuery = useCallback((shouldReset: boolean) => {
+    const setShouldResetSearchQuery = (shouldReset: boolean) => {
         setSearchContextData((prevState) => ({
             ...prevState,
             shouldResetSearchQuery: shouldReset,
         }));
-    }, []);
-
-    const searchContext = useMemo<SearchContextProps>(
-        () => ({
-            ...searchContextData,
-            currentSearchResults,
-            shouldUseLiveData,
-            removeTransaction,
-            setCurrentSearchHashAndKey,
-            setCurrentSearchQueryJSON,
-            setSelectedTransactions,
-            clearSelectedTransactions,
-            shouldShowFiltersBarLoading,
-            setShouldShowFiltersBarLoading,
-            lastSearchType,
-            setLastSearchType,
-            showSelectAllMatchingItems,
-            shouldShowSelectAllMatchingItems,
-            areAllMatchingItemsSelected,
-            selectAllMatchingItems,
-            setShouldResetSearchQuery,
-        }),
-        [
-            searchContextData,
-            currentSearchResults,
-            shouldUseLiveData,
-            removeTransaction,
-            setCurrentSearchHashAndKey,
-            setCurrentSearchQueryJSON,
-            setSelectedTransactions,
-            clearSelectedTransactions,
-            shouldShowFiltersBarLoading,
-            lastSearchType,
-            shouldShowSelectAllMatchingItems,
-            showSelectAllMatchingItems,
-            areAllMatchingItemsSelected,
-            setShouldResetSearchQuery,
-        ],
+    };
+
+    const searchStateContextValue: SearchStateContextValue = {
+        ...searchContextData,
+        currentSearchResults,
+        shouldUseLiveData,
+        shouldShowFiltersBarLoading,
+        lastSearchType,
+        shouldShowSelectAllMatchingItems,
+        areAllMatchingItemsSelected,
+    };
+
+    const searchActionsContextValue: SearchActionsContextValue = {
+        removeTransaction,
+        setCurrentSearchHashAndKey,
+        setCurrentSearchQueryJSON,
+        setSelectedTransactions,
+        clearSelectedTransactions,
+        setShouldShowFiltersBarLoading,
+        setLastSearchType,
+        setShouldShowSelectAllMatchingItems,
+        selectAllMatchingItems,
+        setShouldResetSearchQuery,
+    };
+
+    return (
+        <SearchStateContext value={searchStateContextValue}>
+            <SearchActionsContext value={searchActionsContextValue}>{children}</SearchActionsContext>
+        </SearchStateContext>
     );
-
-    return <SearchContext.Provider value={searchContext}>{children}</SearchContext.Provider>;
 }
 
 /**
@@ -316,8 +308,12 @@ function SearchContextProvider({children}: ChildrenProps) {
  * Setting or clearing one of them does not influence the other.
  * IDs should be used if transaction details are not required.
  */
-function useSearchContext() {
-    return useContext(SearchContext);
+function useSearchStateContext() {
+    return useContext(SearchStateContext);
+}
+
+function useSearchActionsContext() {
+    return useContext(SearchActionsContext);
 }
 
-export {SearchContextProvider, useSearchContext, SearchContext};
+export {SearchContextProvider, useSearchStateContext, useSearchActionsContext, SearchStateContext, SearchActionsContext};
diff --git a/src/components/Search/SearchPageHeader/SearchFiltersBar.tsx b/src/components/Search/SearchPageHeader/SearchFiltersBar.tsx
index 2b92fec0def6..b188ec04c850 100644
--- a/src/components/Search/SearchPageHeader/SearchFiltersBar.tsx
+++ b/src/components/Search/SearchPageHeader/SearchFiltersBar.tsx
@@ -20,7 +20,7 @@ import type {MultiSelectItem} from '@components/Search/FilterDropdowns/MultiSele
 import MultiSelectPopup from '@components/Search/FilterDropdowns/MultiSelectPopup';
 import SingleSelectPopup from '@components/Search/FilterDropdowns/SingleSelectPopup';
 import UserSelectPopup from '@components/Search/FilterDropdowns/UserSelectPopup';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchActionsContext, useSearchStateContext} from '@components/Search/SearchContext';
 import type {BankAccountMenuItem, SearchDateFilterKeys, SearchQueryJSON, SingularSearchStatus} from '@components/Search/types';
 import SearchFiltersSkeleton from '@components/Skeletons/SearchFiltersSkeleton';
 import useAdvancedSearchFilters from '@hooks/useAdvancedSearchFilters';
@@ -161,7 +161,8 @@ function SearchFiltersBar({
     const personalDetails = usePersonalDetails();
     const filterFormValues = useFilterFormValues(queryJSON);
     const {shouldUseNarrowLayout, isLargeScreenWidth} = useResponsiveLayout();
-    const {selectedTransactions, selectAllMatchingItems, areAllMatchingItemsSelected, showSelectAllMatchingItems, shouldShowFiltersBarLoading, currentSearchResults} = useSearchContext();
+    const {selectedTransactions, areAllMatchingItemsSelected, shouldShowSelectAllMatchingItems, shouldShowFiltersBarLoading, currentSearchResults} = useSearchStateContext();
+    const {selectAllMatchingItems} = useSearchActionsContext();
     const {currencyList} = useCurrencyListState();
     const {getCurrencySymbol} = useCurrencyListActions();
 
@@ -820,7 +821,7 @@ function SearchFiltersBar({
                                 }}
                                 sentryLabel={CONST.SENTRY_LABEL.SEARCH.BULK_ACTIONS_DROPDOWN}
                             />
-                            {!areAllMatchingItemsSelected && showSelectAllMatchingItems && (
+                            {!areAllMatchingItemsSelected && shouldShowSelectAllMatchingItems && (
                                 <Button
                                     link
                                     small
diff --git a/src/components/Search/SearchPageHeader/SearchPageHeader.tsx b/src/components/Search/SearchPageHeader/SearchPageHeader.tsx
index 0af1525aaefb..12b8bf29782f 100644
--- a/src/components/Search/SearchPageHeader/SearchPageHeader.tsx
+++ b/src/components/Search/SearchPageHeader/SearchPageHeader.tsx
@@ -1,7 +1,7 @@
 import React, {useMemo} from 'react';
 import type {DropdownOption} from '@components/ButtonWithDropdownMenu/types';
 import type {PaymentMethodType} from '@components/KYCWall/types';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchStateContext} from '@components/Search/SearchContext';
 import type {BankAccountMenuItem, SearchQueryJSON} from '@components/Search/types';
 import useLocalize from '@hooks/useLocalize';
 import useOnyx from '@hooks/useOnyx';
@@ -44,7 +44,7 @@ function SearchPageHeader({
     latestBankItems,
 }: SearchPageHeaderProps) {
     const {shouldUseNarrowLayout} = useResponsiveLayout();
-    const {selectedTransactions} = useSearchContext();
+    const {selectedTransactions} = useSearchStateContext();
     const {translate} = useLocalize();
 
     const selectedTransactionsKeys = Object.keys(selectedTransactions ?? {});
diff --git a/src/components/Search/SearchRouter/SearchRouter.tsx b/src/components/Search/SearchRouter/SearchRouter.tsx
index 168148fcfa08..b7280e8ab401 100644
--- a/src/components/Search/SearchRouter/SearchRouter.tsx
+++ b/src/components/Search/SearchRouter/SearchRouter.tsx
@@ -8,7 +8,7 @@ import {usePersonalDetails} from '@components/OnyxListItemProvider';
 import type {AnimatedTextInputRef} from '@components/RNTextInput';
 import type {GetAdditionalSectionsCallback} from '@components/Search/SearchAutocompleteList';
 import SearchAutocompleteList from '@components/Search/SearchAutocompleteList';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchActionsContext} from '@components/Search/SearchContext';
 import SearchInputSelectionWrapper from '@components/Search/SearchInputSelectionWrapper';
 import type {SearchQueryString} from '@components/Search/types';
 import type {SelectionListWithSectionsHandle} from '@components/SelectionList/SelectionListWithSections/types';
@@ -59,7 +59,7 @@ type SearchRouterProps = {
 function SearchRouter({onRouterClose, shouldHideInputCaret, isSearchRouterDisplayed, ref}: SearchRouterProps) {
     const {translate} = useLocalize();
     const styles = useThemeStyles();
-    const {setShouldResetSearchQuery} = useSearchContext();
+    const {setShouldResetSearchQuery} = useSearchActionsContext();
     const currentUserPersonalDetails = useCurrentUserPersonalDetails();
     const currentUserAccountID = currentUserPersonalDetails.accountID;
     const [isSearchingForReports] = useOnyx(ONYXKEYS.IS_SEARCHING_FOR_REPORTS, {initWithStoredValues: false});
diff --git a/src/components/Search/index.tsx b/src/components/Search/index.tsx
index f69ab02d18bb..2ca73051f4cf 100644
--- a/src/components/Search/index.tsx
+++ b/src/components/Search/index.tsx
@@ -81,7 +81,7 @@ import type SearchResults from '@src/types/onyx/SearchResults';
 import {isEmptyObject} from '@src/types/utils/EmptyObject';
 import arraysEqual from '@src/utils/arraysEqual';
 import SearchChartView from './SearchChartView';
-import {useSearchContext} from './SearchContext';
+import {useSearchActionsContext, useSearchStateContext} from './SearchContext';
 import SearchList from './SearchList';
 import {SearchScopeProvider} from './SearchScopeProvider';
 import type {SearchColumnType, SearchParams, SearchQueryJSON, SelectedTransactionInfo, SelectedTransactions, SortOrder} from './types';
@@ -227,23 +227,18 @@ function Search({
     const navigation = useNavigation<PlatformStackNavigationProp<SearchFullscreenNavigatorParamList>>();
     const isFocused = useIsFocused();
     const {markReportIDAsExpense} = useWideRHPActions();
+    const {currentSearchHash, selectedTransactions, shouldTurnOffSelectionMode, lastSearchType, areAllMatchingItemsSelected, shouldResetSearchQuery, shouldUseLiveData} =
+        useSearchStateContext();
     const {
-        currentSearchHash,
         setCurrentSearchHashAndKey,
         setCurrentSearchQueryJSON,
         setSelectedTransactions,
-        selectedTransactions,
         clearSelectedTransactions,
-        shouldTurnOffSelectionMode,
         setShouldShowFiltersBarLoading,
-        lastSearchType,
-        shouldShowSelectAllMatchingItems,
-        areAllMatchingItemsSelected,
+        setShouldShowSelectAllMatchingItems,
         selectAllMatchingItems,
-        shouldResetSearchQuery,
         setShouldResetSearchQuery,
-        shouldUseLiveData,
-    } = useSearchContext();
+    } = useSearchActionsContext();
     const [offset, setOffset] = useState(0);
 
     const [transactions] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION);
@@ -805,12 +800,12 @@ function Search({
 
             // If the user has selected all the expenses in their view but there are more expenses matched by the search
             // give them the option to select all matching expenses
-            shouldShowSelectAllMatchingItems(!!(areAllItemsSelected && searchResults?.search?.hasMoreResults));
+            setShouldShowSelectAllMatchingItems(!!(areAllItemsSelected && searchResults?.search?.hasMoreResults));
             if (!areAllItemsSelected) {
                 selectAllMatchingItems(false);
             }
         },
-        [filteredData, validGroupBy, type, searchResults?.search?.hasMoreResults, shouldShowSelectAllMatchingItems, selectAllMatchingItems],
+        [filteredData, validGroupBy, type, searchResults?.search?.hasMoreResults, setShouldShowSelectAllMatchingItems, selectAllMatchingItems],
     );
 
     const toggleTransaction = useCallback(
diff --git a/src/components/Search/types.ts b/src/components/Search/types.ts
index a0275120163d..ef343d6c5ef7 100644
--- a/src/components/Search/types.ts
+++ b/src/components/Search/types.ts
@@ -166,10 +166,17 @@ type SearchContextData = {
     shouldResetSearchQuery: boolean;
 };
 
-type SearchContextProps = SearchContextData & {
+type SearchStateContextValue = SearchContextData & {
     currentSearchResults: SearchResults | undefined;
     /** Whether we're on a main to-do search and should use live Onyx data instead of snapshots */
     shouldUseLiveData: boolean;
+    shouldShowFiltersBarLoading: boolean;
+    lastSearchType: string | undefined;
+    shouldShowSelectAllMatchingItems: boolean;
+    areAllMatchingItemsSelected: boolean;
+};
+
+type SearchActionsContextValue = {
     setCurrentSearchHashAndKey: (hash: number, recentHash: number, key: SearchKey | undefined) => void;
     setCurrentSearchQueryJSON: (searchQueryJSON: SearchQueryJSON | undefined) => void;
     /** If you want to set `selectedTransactionIDs`, pass an array as the first argument, object/record otherwise */
@@ -183,13 +190,9 @@ type SearchContextProps = SearchContextData & {
         (clearIDs: true, unused?: undefined): void;
     };
     removeTransaction: (transactionID: string | undefined) => void;
-    shouldShowFiltersBarLoading: boolean;
     setShouldShowFiltersBarLoading: (shouldShow: boolean) => void;
     setLastSearchType: (type: string | undefined) => void;
-    lastSearchType: string | undefined;
-    showSelectAllMatchingItems: boolean;
-    shouldShowSelectAllMatchingItems: (shouldShow: boolean) => void;
-    areAllMatchingItemsSelected: boolean;
+    setShouldShowSelectAllMatchingItems: (shouldShow: boolean) => void;
     selectAllMatchingItems: (on: boolean) => void;
     setShouldResetSearchQuery: (shouldReset: boolean) => void;
 };
@@ -381,7 +384,8 @@ export type {
     ReportFieldDateKey,
     ReportFieldNegatedKey,
     SortOrder,
-    SearchContextProps,
+    SearchStateContextValue,
+    SearchActionsContextValue,
     SearchContextData,
     ASTNode,
     QueryFilter,
diff --git a/src/components/SelectionListWithSections/Search/ExpenseReportListItem.tsx b/src/components/SelectionListWithSections/Search/ExpenseReportListItem.tsx
index 0411fecdf874..4642d8e300d1 100644
--- a/src/components/SelectionListWithSections/Search/ExpenseReportListItem.tsx
+++ b/src/components/SelectionListWithSections/Search/ExpenseReportListItem.tsx
@@ -7,7 +7,7 @@ import {View} from 'react-native';
 import {useOnyx as originalUseOnyx} from 'react-native-onyx';
 import {useDelegateNoAccessActions, useDelegateNoAccessState} from '@components/DelegateNoAccessModalProvider';
 import Icon from '@components/Icon';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchStateContext} from '@components/Search/SearchContext';
 import BaseListItem from '@components/SelectionListWithSections/BaseListItem';
 import type {ExpenseReportListItemProps, ExpenseReportListItemType, ListItem} from '@components/SelectionListWithSections/types';
 import Text from '@components/Text';
@@ -51,7 +51,7 @@ function ExpenseReportListItem<TItem extends ListItem>({
     const theme = useTheme();
     const {translate} = useLocalize();
     const {isLargeScreenWidth} = useResponsiveLayout();
-    const {currentSearchHash, currentSearchKey, currentSearchResults} = useSearchContext();
+    const {currentSearchHash, currentSearchKey, currentSearchResults} = useSearchStateContext();
     const [lastPaymentMethod] = useOnyx(ONYXKEYS.NVP_LAST_PAYMENT_METHOD);
     const [personalPolicyID] = useOnyx(ONYXKEYS.PERSONAL_POLICY_ID);
     const [isActionLoading] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_METADATA}${reportItem.reportID}`, {selector: isActionLoadingSelector});
diff --git a/src/components/SelectionListWithSections/Search/ReportListItemHeader.tsx b/src/components/SelectionListWithSections/Search/ReportListItemHeader.tsx
index d17a3a931012..8b7fb2ed0d20 100644
--- a/src/components/SelectionListWithSections/Search/ReportListItemHeader.tsx
+++ b/src/components/SelectionListWithSections/Search/ReportListItemHeader.tsx
@@ -6,7 +6,7 @@ import {useDelegateNoAccessActions, useDelegateNoAccessState} from '@components/
 import Icon from '@components/Icon';
 import {PressableWithFeedback} from '@components/Pressable';
 import ReportSearchHeader from '@components/ReportSearchHeader';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchStateContext} from '@components/Search/SearchContext';
 import type {ListItem, TransactionReportGroupListItemType} from '@components/SelectionListWithSections/types';
 import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
 import useOnyx from '@hooks/useOnyx';
@@ -212,7 +212,7 @@ function ReportListItemHeader<TItem extends ListItem>({
     const StyleUtils = useStyleUtils();
     const styles = useThemeStyles();
     const theme = useTheme();
-    const {currentSearchHash, currentSearchKey, currentSearchResults: snapshot} = useSearchContext();
+    const {currentSearchHash, currentSearchKey, currentSearchResults: snapshot} = useSearchStateContext();
     const {isLargeScreenWidth, shouldUseNarrowLayout} = useResponsiveLayout();
     const [lastPaymentMethod] = useOnyx(ONYXKEYS.NVP_LAST_PAYMENT_METHOD);
     const [personalPolicyID] = useOnyx(ONYXKEYS.PERSONAL_POLICY_ID);
diff --git a/src/components/SelectionListWithSections/Search/TransactionGroupListItem.tsx b/src/components/SelectionListWithSections/Search/TransactionGroupListItem.tsx
index b21a3df8a316..e61ff59f0645 100644
--- a/src/components/SelectionListWithSections/Search/TransactionGroupListItem.tsx
+++ b/src/components/SelectionListWithSections/Search/TransactionGroupListItem.tsx
@@ -8,7 +8,7 @@ import AnimatedCollapsible from '@components/AnimatedCollapsible';
 import {getButtonRole} from '@components/Button/utils';
 import OfflineWithFeedback from '@components/OfflineWithFeedback';
 import {PressableWithFeedback} from '@components/Pressable';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchStateContext} from '@components/Search/SearchContext';
 import type {SearchGroupBy} from '@components/Search/types';
 import type {
     ListItem,
@@ -83,7 +83,7 @@ function TransactionGroupListItem<TItem extends ListItem>({
     const theme = useTheme();
     const styles = useThemeStyles();
     const {translate, formatPhoneNumber} = useLocalize();
-    const {selectedTransactions} = useSearchContext();
+    const {selectedTransactions} = useSearchStateContext();
     const {isLargeScreenWidth} = useResponsiveLayout();
     const currentUserDetails = useCurrentUserPersonalDetails();
 
diff --git a/src/components/SelectionListWithSections/Search/TransactionListItem.tsx b/src/components/SelectionListWithSections/Search/TransactionListItem.tsx
index 2d2ec9963ef0..d3c99726d069 100644
--- a/src/components/SelectionListWithSections/Search/TransactionListItem.tsx
+++ b/src/components/SelectionListWithSections/Search/TransactionListItem.tsx
@@ -8,7 +8,7 @@ import {getButtonRole} from '@components/Button/utils';
 import {useDelegateNoAccessActions, useDelegateNoAccessState} from '@components/DelegateNoAccessModalProvider';
 import OfflineWithFeedback from '@components/OfflineWithFeedback';
 import PressableWithFeedback from '@components/Pressable/PressableWithFeedback';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchStateContext} from '@components/Search/SearchContext';
 import type {ListItem, TransactionListItemProps, TransactionListItemType} from '@components/SelectionListWithSections/types';
 import TransactionItemRow from '@components/TransactionItemRow';
 import useAnimatedHighlightStyle from '@hooks/useAnimatedHighlightStyle';
@@ -56,7 +56,7 @@ function TransactionListItem<TItem extends ListItem>({
     const theme = useTheme();
 
     const {isLargeScreenWidth, shouldUseNarrowLayout} = useResponsiveLayout();
-    const {currentSearchHash, currentSearchKey, currentSearchResults} = useSearchContext();
+    const {currentSearchHash, currentSearchKey, currentSearchResults} = useSearchStateContext();
     const snapshotReport = (currentSearchResults?.data?.[`${ONYXKEYS.COLLECTION.REPORT}${transactionItem.reportID}`] ?? {}) as Report;
 
     const [isActionLoading] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_METADATA}${transactionItem.reportID}`, {selector: isActionLoadingSelector});
diff --git a/src/hooks/useAllTransactions.ts b/src/hooks/useAllTransactions.ts
index 6d0826029f72..2c385ee1c603 100644
--- a/src/hooks/useAllTransactions.ts
+++ b/src/hooks/useAllTransactions.ts
@@ -1,6 +1,6 @@
 import {useMemo} from 'react';
 import type {OnyxEntry} from 'react-native-onyx';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchStateContext} from '@components/Search/SearchContext';
 import ONYXKEYS from '@src/ONYXKEYS';
 import type {Transaction} from '@src/types/onyx';
 import useOnyx from './useOnyx';
@@ -9,7 +9,7 @@ import useOnyx from './useOnyx';
  * Hook that returns all transactions, filtered by current search results if a search data is available
  */
 function useAllTransactions() {
-    const {currentSearchResults} = useSearchContext();
+    const {currentSearchResults} = useSearchStateContext();
     const [allTransactionsCollection] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION);
 
     const allTransactions = useMemo(() => {
diff --git a/src/hooks/useDeleteSavedSearch.tsx b/src/hooks/useDeleteSavedSearch.tsx
index 9bcb6fca2d51..4980ad6c5ed8 100644
--- a/src/hooks/useDeleteSavedSearch.tsx
+++ b/src/hooks/useDeleteSavedSearch.tsx
@@ -1,6 +1,6 @@
 import {useCallback} from 'react';
 import {ModalActions} from '@components/Modal/Global/ModalContext';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchStateContext} from '@components/Search/SearchContext';
 import {deleteSavedSearch} from '@libs/actions/Search';
 import Navigation from '@libs/Navigation/Navigation';
 import {buildCannedSearchQuery} from '@libs/SearchQueryUtils';
@@ -10,7 +10,7 @@ import useLocalize from './useLocalize';
 
 export default function useDeleteSavedSearch() {
     const {translate} = useLocalize();
-    const {currentSearchHash} = useSearchContext();
+    const {currentSearchHash} = useSearchStateContext();
     const {showConfirmModal} = useConfirmModal();
 
     const handleDeleteSavedSearch = useCallback(
diff --git a/src/hooks/useFilterSelectedTransactions.ts b/src/hooks/useFilterSelectedTransactions.ts
index b180dcfd5e71..1d8244da261c 100644
--- a/src/hooks/useFilterSelectedTransactions.ts
+++ b/src/hooks/useFilterSelectedTransactions.ts
@@ -1,5 +1,5 @@
 import {useEffect, useMemo} from 'react';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchActionsContext, useSearchStateContext} from '@components/Search/SearchContext';
 import type {Transaction} from '@src/types/onyx';
 
 /**
@@ -9,7 +9,8 @@ import type {Transaction} from '@src/types/onyx';
  * @param transactions - The current list of transactions
  */
 function useFilterSelectedTransactions(transactions: Transaction[]) {
-    const {selectedTransactionIDs, setSelectedTransactions} = useSearchContext();
+    const {selectedTransactionIDs} = useSearchStateContext();
+    const {setSelectedTransactions} = useSearchActionsContext();
 
     const transactionIDs = useMemo(() => transactions.map((transaction) => transaction.transactionID), [transactions]);
     const filteredSelectedTransactionIDs = useMemo(() => selectedTransactionIDs.filter((id) => transactionIDs.includes(id)), [selectedTransactionIDs, transactionIDs]);
diff --git a/src/hooks/useMergeTransactions.ts b/src/hooks/useMergeTransactions.ts
index 145b832f5892..ab13a13f4609 100644
--- a/src/hooks/useMergeTransactions.ts
+++ b/src/hooks/useMergeTransactions.ts
@@ -1,5 +1,5 @@
 import type {OnyxEntry} from 'react-native-onyx';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchStateContext} from '@components/Search/SearchContext';
 import getNonEmptyStringOnyxID from '@libs/getNonEmptyStringOnyxID';
 import {getTransactionFromMergeTransaction} from '@libs/MergeTransactionUtils';
 import ONYXKEYS from '@src/ONYXKEYS';
@@ -36,7 +36,7 @@ function getTransaction(
 }
 
 function useMergeTransactions({mergeTransaction}: UseMergeTransactionsProps): UseMergeTransactionsReturn {
-    const {currentSearchHash, currentSearchResults} = useSearchContext();
+    const {currentSearchHash, currentSearchResults} = useSearchStateContext();
 
     const [onyxTargetTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(mergeTransaction?.targetTransactionID)}`);
     const [onyxSourceTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(mergeTransaction?.sourceTransactionID)}`);
diff --git a/src/hooks/useOnyx.ts b/src/hooks/useOnyx.ts
index 3834c1af47ea..261accfe885f 100644
--- a/src/hooks/useOnyx.ts
+++ b/src/hooks/useOnyx.ts
@@ -3,7 +3,7 @@ import type {DependencyList} from 'react';
 // eslint-disable-next-line no-restricted-imports
 import {useOnyx as originalUseOnyx} from 'react-native-onyx';
 import type {OnyxCollection, OnyxEntry, OnyxKey, OnyxValue, UseOnyxOptions, UseOnyxResult} from 'react-native-onyx';
-import {SearchContext} from '@components/Search/SearchContext';
+import {SearchStateContext} from '@components/Search/SearchContext';
 import {useIsOnSearch} from '@components/Search/SearchScopeProvider';
 import CONST from '@src/CONST';
 import ONYXKEYS from '@src/ONYXKEYS';
@@ -54,7 +54,7 @@ const useOnyx: OriginalUseOnyx = <TKey extends OnyxKey, TReturnValue = OnyxValue
     let currentSearchHash: number | undefined;
     let shouldUseLiveData = false;
     if (isOnSearch && isSnapshotCompatibleKey) {
-        const {currentSearchHash: searchContextCurrentSearchHash, shouldUseLiveData: contextShouldUseLiveData} = use(SearchContext);
+        const {currentSearchHash: searchContextCurrentSearchHash, shouldUseLiveData: contextShouldUseLiveData} = use(SearchStateContext);
         currentSearchHash = searchContextCurrentSearchHash;
         shouldUseLiveData = !!contextShouldUseLiveData;
     }
diff --git a/src/hooks/useSearchTypeMenu.tsx b/src/hooks/useSearchTypeMenu.tsx
index dc26046d6435..364fc1d9f645 100644
--- a/src/hooks/useSearchTypeMenu.tsx
+++ b/src/hooks/useSearchTypeMenu.tsx
@@ -3,7 +3,7 @@ import React, {useCallback, useEffect, useMemo, useState} from 'react';
 import type {OnyxCollection} from 'react-native-onyx';
 import {usePersonalDetails} from '@components/OnyxListItemProvider';
 import type {PopoverMenuItem} from '@components/PopoverMenu';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchActionsContext} from '@components/Search/SearchContext';
 import type {SearchQueryJSON} from '@components/Search/types';
 import ThreeDotsMenu from '@components/ThreeDotsMenu';
 import {setSearchContext} from '@libs/actions/Search';
@@ -41,7 +41,7 @@ export default function useSearchTypeMenu(queryJSON: SearchQueryJSON) {
     const {windowHeight} = useWindowDimensions();
     const {translate} = useLocalize();
     const {typeMenuSections, shouldShowSuggestedSearchSkeleton} = useSearchTypeMenuSections();
-    const {clearSelectedTransactions} = useSearchContext();
+    const {clearSelectedTransactions} = useSearchActionsContext();
     const {showDeleteModal} = useDeleteSavedSearch();
     const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY);
     const personalDetails = usePersonalDetails();
diff --git a/src/hooks/useSelectedTransactionsActions.ts b/src/hooks/useSelectedTransactionsActions.ts
index 8dc4d4707e7f..b0c3cb70f485 100644
--- a/src/hooks/useSelectedTransactionsActions.ts
+++ b/src/hooks/useSelectedTransactionsActions.ts
@@ -3,7 +3,7 @@ import {DeviceEventEmitter} from 'react-native';
 import type {DropdownOption} from '@components/ButtonWithDropdownMenu/types';
 import {useDelegateNoAccessActions, useDelegateNoAccessState} from '@components/DelegateNoAccessModalProvider';
 import type {PopoverMenuItem} from '@components/PopoverMenu';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchActionsContext, useSearchStateContext} from '@components/Search/SearchContext';
 import {unholdRequest} from '@libs/actions/IOU/Hold';
 import {setupMergeTransactionDataAndNavigate} from '@libs/actions/MergeTransaction';
 import {exportReportToCSV} from '@libs/actions/Report';
@@ -75,7 +75,8 @@ function useSelectedTransactionsActions({
     const {isOffline} = useNetworkWithOfflineStatus();
     const {isDelegateAccessRestricted} = useDelegateNoAccessState();
     const {showDelegateNoAccessModal} = useDelegateNoAccessActions();
-    const {selectedTransactionIDs, clearSelectedTransactions, currentSearchHash, selectedTransactions: selectedTransactionsMeta} = useSearchContext();
+    const {selectedTransactionIDs, currentSearchHash, selectedTransactions: selectedTransactionsMeta} = useSearchStateContext();
+    const {clearSelectedTransactions} = useSearchActionsContext();
     const allTransactions = useAllTransactions();
     const [outstandingReportsByPolicyID] = useOnyx(ONYXKEYS.DERIVED.OUTSTANDING_REPORTS_BY_POLICY_ID);
     const [lastVisitedPath] = useOnyx(ONYXKEYS.LAST_VISITED_PATH);
diff --git a/src/libs/actions/IOU/Split.ts b/src/libs/actions/IOU/Split.ts
index b0536bbd5a81..5e801512662f 100644
--- a/src/libs/actions/IOU/Split.ts
+++ b/src/libs/actions/IOU/Split.ts
@@ -3,7 +3,7 @@ import {InteractionManager} from 'react-native';
 import type {OnyxCollection, OnyxEntry, OnyxUpdate} from 'react-native-onyx';
 import Onyx from 'react-native-onyx';
 import type {ValueOf} from 'type-fest';
-import type {SearchContextProps} from '@components/Search/types';
+import type {SearchActionsContextValue, SearchStateContextValue} from '@components/Search/types';
 import * as API from '@libs/API';
 import type {CompleteSplitBillParams, RevertSplitTransactionParams, SplitBillParams, SplitTransactionParams, SplitTransactionSplitsParam, StartSplitBillParams} from '@libs/API/parameters';
 import {WRITE_COMMANDS} from '@libs/API/types';
@@ -103,7 +103,7 @@ type UpdateSplitTransactionsParams = {
         splitExpenses: SplitExpense[];
         splitExpensesTotal?: number;
     };
-    searchContext?: Partial<SearchContextProps>;
+    searchContext?: Partial<SearchStateContextValue & SearchActionsContextValue>;
     policyCategories: OnyxTypes.PolicyCategories | undefined;
     policy: OnyxTypes.Policy | undefined;
     policyRecentlyUsedCategories: OnyxTypes.RecentlyUsedCategories | undefined;
diff --git a/src/pages/NewReportWorkspaceSelectionPage.tsx b/src/pages/NewReportWorkspaceSelectionPage.tsx
index d8cd8d9a5d3e..b359cbfbd745 100644
--- a/src/pages/NewReportWorkspaceSelectionPage.tsx
+++ b/src/pages/NewReportWorkspaceSelectionPage.tsx
@@ -4,7 +4,7 @@ import type {OnyxCollection} from 'react-native-onyx';
 import FullScreenLoadingIndicator from '@components/FullscreenLoadingIndicator';
 import HeaderWithBackButton from '@components/HeaderWithBackButton';
 import ScreenWrapper from '@components/ScreenWrapper';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchActionsContext, useSearchStateContext} from '@components/Search/SearchContext';
 import SelectionList from '@components/SelectionList';
 import UserListItem from '@components/SelectionList/ListItem/UserListItem';
 import type {ListItem} from '@components/SelectionList/types';
@@ -53,7 +53,8 @@ function NewReportWorkspaceSelectionPage({route}: NewReportWorkspaceSelectionPag
     const {isMovingExpenses, backTo} = route.params ?? {};
     const {isOffline} = useNetwork();
     const icons = useMemoizedLazyExpensifyIcons(['FallbackWorkspaceAvatar']);
-    const {selectedTransactions, selectedTransactionIDs, clearSelectedTransactions} = useSearchContext();
+    const {selectedTransactions, selectedTransactionIDs} = useSearchStateContext();
+    const {clearSelectedTransactions} = useSearchActionsContext();
     const styles = useThemeStyles();
     const [searchTerm, debouncedSearchTerm, setSearchTerm] = useDebouncedState('');
     const {translate, localeCompare} = useLocalize();
diff --git a/src/pages/ReportDetailsPage.tsx b/src/pages/ReportDetailsPage.tsx
index 62b8bb37c621..9cbda7d61d0b 100644
--- a/src/pages/ReportDetailsPage.tsx
+++ b/src/pages/ReportDetailsPage.tsx
@@ -20,7 +20,7 @@ import ReportActionAvatars from '@components/ReportActionAvatars';
 import RoomHeaderAvatars from '@components/RoomHeaderAvatars';
 import ScreenWrapper from '@components/ScreenWrapper';
 import ScrollView from '@components/ScrollView';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchActionsContext, useSearchStateContext} from '@components/Search/SearchContext';
 import {SUPER_WIDE_RIGHT_MODALS} from '@components/WideRHPContextProvider/WIDE_RIGHT_MODALS';
 import useActivePolicy from '@hooks/useActivePolicy';
 import useAncestors from '@hooks/useAncestors';
@@ -178,7 +178,8 @@ function ReportDetailsPage({policy, report, route, reportMetadata}: ReportDetail
     const {reportActions} = usePaginatedReportActions(report.reportID);
     const [reportActionsForOriginalReportID] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${report.reportID}`);
 
-    const {removeTransaction} = useSearchContext();
+    const {removeTransaction} = useSearchActionsContext();
+    const {currentSearchHash} = useSearchStateContext();
 
     const transactionThreadReportID = useMemo(() => getOneTransactionThreadReportID(report, chatReport, reportActions ?? [], isOffline), [reportActions, isOffline, report, chatReport]);
     // eslint-disable-next-line rulesdir/prefer-shouldUseNarrowLayout-instead-of-isSmallScreenWidth
@@ -310,7 +311,6 @@ function ReportDetailsPage({policy, report, route, reportMetadata}: ReportDetail
         reportActions: requestParentReportAction ? [requestParentReportAction] : [],
         policy,
     });
-    const {currentSearchHash} = useSearchContext();
     const isCardTransactionCanBeDeleted = canDeleteCardTransactionByLiabilityType(iouTransaction);
     const shouldShowDeleteButton = shouldShowTaskDeleteButton || (canDeleteRequest && isCardTransactionCanBeDeleted) || isDemoTransaction(iouTransaction);
     const reportAttributes = useReportAttributes();
diff --git a/src/pages/Search/SearchHoldReasonPage.tsx b/src/pages/Search/SearchHoldReasonPage.tsx
index a8e14844a9b5..d23a2068cf43 100644
--- a/src/pages/Search/SearchHoldReasonPage.tsx
+++ b/src/pages/Search/SearchHoldReasonPage.tsx
@@ -1,7 +1,7 @@
 import React, {useCallback, useEffect} from 'react';
 import {useDelegateNoAccessActions, useDelegateNoAccessState} from '@components/DelegateNoAccessModalProvider';
 import type {FormInputErrors, FormOnyxValues} from '@components/Form/types';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchActionsContext, useSearchStateContext} from '@components/Search/SearchContext';
 import useAncestors from '@hooks/useAncestors';
 import useLocalize from '@hooks/useLocalize';
 import useOnyx from '@hooks/useOnyx';
@@ -24,7 +24,8 @@ type SearchHoldReasonPageProps =
 function SearchHoldReasonPage({route}: SearchHoldReasonPageProps) {
     const {translate} = useLocalize();
     const {backTo = '', reportID} = route.params ?? {};
-    const context = useSearchContext();
+    const {selectedTransactionIDs, selectedTransactions, currentSearchHash} = useSearchStateContext();
+    const {clearSelectedTransactions} = useSearchActionsContext();
     const [allTransactions] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION);
     const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${reportID}`);
     const ancestors = useAncestors(report);
@@ -40,16 +41,28 @@ function SearchHoldReasonPage({route}: SearchHoldReasonPageProps) {
             }
 
             if (route.name === SCREENS.SEARCH.MONEY_REQUEST_REPORT_HOLD_TRANSACTIONS) {
-                putTransactionsOnHold(context.selectedTransactionIDs, comment, reportID, ancestors);
-                context.clearSelectedTransactions(true);
+                putTransactionsOnHold(selectedTransactionIDs, comment, reportID, ancestors);
+                clearSelectedTransactions(true);
             } else {
-                holdMoneyRequestOnSearch(context.currentSearchHash, Object.keys(context.selectedTransactions), comment, allTransactions, allReportActions);
-                context.clearSelectedTransactions();
+                holdMoneyRequestOnSearch(currentSearchHash, Object.keys(selectedTransactions), comment, allTransactions, allReportActions);
+                clearSelectedTransactions();
             }
 
             Navigation.goBack();
         },
-        [route.name, context, reportID, allTransactions, allReportActions, ancestors, isDelegateAccessRestricted, showDelegateNoAccessModal],
+        [
+            route.name,
+            selectedTransactionIDs,
+            selectedTransactions,
+            currentSearchHash,
+            clearSelectedTransactions,
+            reportID,
+            allTransactions,
+            allReportActions,
+            ancestors,
+            isDelegateAccessRestricted,
+            showDelegateNoAccessModal,
+        ],
     );
 
     const validate = useCallback(
@@ -70,7 +83,7 @@ function SearchHoldReasonPage({route}: SearchHoldReasonPageProps) {
         clearErrorFields(ONYXKEYS.FORMS.MONEY_REQUEST_HOLD_FORM);
     }, []);
 
-    const expenseCount = route.name === SCREENS.SEARCH.MONEY_REQUEST_REPORT_HOLD_TRANSACTIONS ? context.selectedTransactionIDs.length : Object.keys(context.selectedTransactions).length;
+    const expenseCount = route.name === SCREENS.SEARCH.MONEY_REQUEST_REPORT_HOLD_TRANSACTIONS ? selectedTransactionIDs.length : Object.keys(selectedTransactions).length;
 
     return (
         <HoldReasonFormView
diff --git a/src/pages/Search/SearchMoneyRequestReportPage.tsx b/src/pages/Search/SearchMoneyRequestReportPage.tsx
index 894756839e70..687f03d31e43 100644
--- a/src/pages/Search/SearchMoneyRequestReportPage.tsx
+++ b/src/pages/Search/SearchMoneyRequestReportPage.tsx
@@ -6,7 +6,7 @@ import FullPageNotFoundView from '@components/BlockingViews/FullPageNotFoundView
 import DragAndDropProvider from '@components/DragAndDrop/Provider';
 import MoneyRequestReportView from '@components/MoneyRequestReportView/MoneyRequestReportView';
 import ScreenWrapper from '@components/ScreenWrapper';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchStateContext} from '@components/Search/SearchContext';
 import useShowSuperWideRHPVersion from '@components/WideRHPContextProvider/useShowSuperWideRHPVersion';
 import WideRHPOverlayWrapper from '@components/WideRHPOverlayWrapper';
 import useActionListContextValue from '@hooks/useActionListContextValue';
@@ -63,7 +63,7 @@ function SearchMoneyRequestReportPage({route}: SearchMoneyRequestPageProps) {
     const styles = useThemeStyles();
     const {isOffline} = useNetwork();
     const reportIDFromRoute = getNonEmptyStringOnyxID(route.params?.reportID);
-    const {currentSearchResults: snapshot} = useSearchContext();
+    const {currentSearchResults: snapshot} = useSearchStateContext();
 
     const firstRenderRef = useRef(true);
 
diff --git a/src/pages/Search/SearchPage.tsx b/src/pages/Search/SearchPage.tsx
index 0e113bc88011..06458ded2e4d 100644
--- a/src/pages/Search/SearchPage.tsx
+++ b/src/pages/Search/SearchPage.tsx
@@ -15,7 +15,7 @@ import type {PaymentMethodType} from '@components/KYCWall/types';
 import {ModalActions} from '@components/Modal/Global/ModalContext';
 import type {PopoverMenuItem} from '@components/PopoverMenu';
 import {ScrollOffsetContext} from '@components/ScrollOffsetContextProvider';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchActionsContext, useSearchStateContext} from '@components/Search/SearchContext';
 import type {SearchHeaderOptionValue} from '@components/Search/SearchPageHeader/SearchPageHeader';
 import type {PaymentData, SearchParams} from '@components/Search/types';
 import {usePlaybackActionsContext} from '@components/VideoPlayerContexts/PlaybackContext';
@@ -105,17 +105,8 @@ function SearchPage({route}: SearchPageProps) {
     const {isOffline} = useNetwork();
     const {isDelegateAccessRestricted} = useDelegateNoAccessState();
     const {showDelegateNoAccessModal} = useDelegateNoAccessActions();
-    const {
-        selectedTransactions,
-        clearSelectedTransactions,
-        selectedReports,
-        lastSearchType,
-        setLastSearchType,
-        areAllMatchingItemsSelected,
-        selectAllMatchingItems,
-        currentSearchKey,
-        currentSearchResults,
-    } = useSearchContext();
+    const {selectedTransactions, selectedReports, lastSearchType, areAllMatchingItemsSelected, currentSearchKey, currentSearchResults} = useSearchStateContext();
+    const {clearSelectedTransactions, setLastSearchType, selectAllMatchingItems} = useSearchActionsContext();
     const currentUserPersonalDetails = useCurrentUserPersonalDetails();
     const isMobileSelectionModeEnabled = useMobileSelectionMode(clearSelectedTransactions);
     const allTransactions = useAllTransactions();
diff --git a/src/pages/Search/SearchPageNarrow.tsx b/src/pages/Search/SearchPageNarrow.tsx
index 94ecdfa219e8..285c94bb4ffe 100644
--- a/src/pages/Search/SearchPageNarrow.tsx
+++ b/src/pages/Search/SearchPageNarrow.tsx
@@ -14,7 +14,7 @@ import TopBar from '@components/Navigation/TopBar';
 import ScreenWrapper from '@components/ScreenWrapper';
 import {ScrollOffsetContext} from '@components/ScrollOffsetContextProvider';
 import Search from '@components/Search';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchActionsContext} from '@components/Search/SearchContext';
 import SearchPageFooter from '@components/Search/SearchPageFooter';
 import SearchFiltersBar from '@components/Search/SearchPageHeader/SearchFiltersBar';
 import SearchPageHeader from '@components/Search/SearchPageHeader/SearchPageHeader';
@@ -79,7 +79,7 @@ function SearchPageNarrow({
     const {windowHeight} = useWindowDimensions();
     const styles = useThemeStyles();
     const StyleUtils = useStyleUtils();
-    const {clearSelectedTransactions} = useSearchContext();
+    const {clearSelectedTransactions} = useSearchActionsContext();
     const [searchRouterListVisible, setSearchRouterListVisible] = useState(false);
     const {isOffline} = useNetwork();
     // Controls the visibility of the educational tooltip based on user scrolling.
diff --git a/src/pages/Search/SearchRejectReasonPage.tsx b/src/pages/Search/SearchRejectReasonPage.tsx
index 882950f4d800..34a05cdfb2da 100644
--- a/src/pages/Search/SearchRejectReasonPage.tsx
+++ b/src/pages/Search/SearchRejectReasonPage.tsx
@@ -1,7 +1,7 @@
 import React, {useCallback, useEffect, useMemo} from 'react';
 import {useDelegateNoAccessActions, useDelegateNoAccessState} from '@components/DelegateNoAccessModalProvider';
 import type {FormInputErrors, FormOnyxValues} from '@components/Form/types';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchActionsContext, useSearchStateContext} from '@components/Search/SearchContext';
 import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
 import useLocalize from '@hooks/useLocalize';
 import useOnyx from '@hooks/useOnyx';
@@ -22,7 +22,8 @@ type SearchRejectReasonPageProps =
     | PlatformStackScreenProps<SearchReportActionsParamList, typeof SCREENS.SEARCH.SEARCH_REJECT_REASON_RHP>;
 
 function SearchRejectReasonPage({route}: SearchRejectReasonPageProps) {
-    const context = useSearchContext();
+    const {selectedTransactionIDs, selectedTransactions, currentSearchHash} = useSearchStateContext();
+    const {clearSelectedTransactions} = useSearchActionsContext();
     const {reportID} = route.params ?? {};
     const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY);
     const [allReports] = useOnyx(ONYXKEYS.COLLECTION.REPORT);
@@ -33,13 +34,13 @@ function SearchRejectReasonPage({route}: SearchRejectReasonPageProps) {
     // When coming from the report view, selectedTransactions is empty, build it from selectedTransactionIDs
     const selectedTransactionsForReject = useMemo(() => {
         if (route.name === SCREENS.SEARCH.MONEY_REQUEST_REPORT_REJECT_TRANSACTIONS && reportID) {
-            return context.selectedTransactionIDs.reduce<Record<string, {reportID: string}>>((acc, transactionID) => {
+            return selectedTransactionIDs.reduce<Record<string, {reportID: string}>>((acc, transactionID) => {
                 acc[transactionID] = {reportID};
                 return acc;
             }, {});
         }
-        return context.selectedTransactions;
-    }, [route.name, reportID, context.selectedTransactionIDs, context.selectedTransactions]);
+        return selectedTransactions;
+    }, [route.name, reportID, selectedTransactionIDs, selectedTransactions]);
 
     const {isDelegateAccessRestricted} = useDelegateNoAccessState();
     const {showDelegateNoAccessModal} = useDelegateNoAccessActions();
@@ -50,18 +51,29 @@ function SearchRejectReasonPage({route}: SearchRejectReasonPageProps) {
                 return;
             }
 
-            const urlToNavigateBack = rejectMoneyRequestsOnSearch(context.currentSearchHash, selectedTransactionsForReject, comment, allPolicies, allReports, currentUserAccountID, betas);
+            const urlToNavigateBack = rejectMoneyRequestsOnSearch(currentSearchHash, selectedTransactionsForReject, comment, allPolicies, allReports, currentUserAccountID, betas);
             if (route.name === SCREENS.SEARCH.MONEY_REQUEST_REPORT_REJECT_TRANSACTIONS) {
-                context.clearSelectedTransactions(true);
+                clearSelectedTransactions(true);
             } else {
-                context.clearSelectedTransactions();
+                clearSelectedTransactions();
             }
             Navigation.dismissToSuperWideRHP();
             if (urlToNavigateBack) {
                 Navigation.isNavigationReady().then(() => Navigation.goBack(urlToNavigateBack as Route));
             }
         },
-        [context, allPolicies, allReports, route.name, selectedTransactionsForReject, isDelegateAccessRestricted, currentUserAccountID, showDelegateNoAccessModal, betas],
+        [
+            currentSearchHash,
+            clearSelectedTransactions,
+            allPolicies,
+            allReports,
+            route.name,
+            selectedTransactionsForReject,
+            isDelegateAccessRestricted,
+            currentUserAccountID,
+            showDelegateNoAccessModal,
+            betas,
+        ],
     );
 
     const validate = useCallback(
diff --git a/src/pages/Search/SearchTransactionsChangeReport.tsx b/src/pages/Search/SearchTransactionsChangeReport.tsx
index 60dc115a6fca..62bd7e67e21d 100644
--- a/src/pages/Search/SearchTransactionsChangeReport.tsx
+++ b/src/pages/Search/SearchTransactionsChangeReport.tsx
@@ -2,7 +2,7 @@ import React, {useMemo} from 'react';
 import {InteractionManager} from 'react-native';
 import type {OnyxCollection} from 'react-native-onyx';
 import {usePersonalDetails, useSession} from '@components/OnyxListItemProvider';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchActionsContext, useSearchStateContext} from '@components/Search/SearchContext';
 import type {ListItem} from '@components/SelectionListWithSections/types';
 import useConditionalCreateEmptyReportConfirmation from '@hooks/useConditionalCreateEmptyReportConfirmation';
 import useHasPerDiemTransactions from '@hooks/useHasPerDiemTransactions';
@@ -27,7 +27,8 @@ type TransactionGroupListItem = ListItem & {
 };
 
 function SearchTransactionsChangeReport() {
-    const {selectedTransactions, clearSelectedTransactions} = useSearchContext();
+    const {selectedTransactions} = useSearchStateContext();
+    const {clearSelectedTransactions} = useSearchActionsContext();
     const selectedTransactionsKeys = useMemo(() => Object.keys(selectedTransactions), [selectedTransactions]);
     const transactions = useMemo(
         () =>
diff --git a/src/pages/Search/SearchTypeMenu.tsx b/src/pages/Search/SearchTypeMenu.tsx
index d30c14d09fb0..db2896e66022 100644
--- a/src/pages/Search/SearchTypeMenu.tsx
+++ b/src/pages/Search/SearchTypeMenu.tsx
@@ -11,7 +11,7 @@ import {usePersonalDetails} from '@components/OnyxListItemProvider';
 import {useProductTrainingContext} from '@components/ProductTrainingContext';
 import {ScrollOffsetContext} from '@components/ScrollOffsetContextProvider';
 import ScrollView from '@components/ScrollView';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchActionsContext} from '@components/Search/SearchContext';
 import type {SearchQueryJSON} from '@components/Search/types';
 import Text from '@components/Text';
 import useDeleteSavedSearch from '@hooks/useDeleteSavedSearch';
@@ -86,7 +86,7 @@ function SearchTypeMenu({queryJSON}: SearchTypeMenuProps) {
     const feedKeysWithCards = useFeedKeysWithAssignedCards();
     const taxRates = getAllTaxRates(allPolicies);
     const [currentUserAccountID = -1] = useOnyx(ONYXKEYS.SESSION, {selector: accountIDSelector});
-    const {clearSelectedTransactions} = useSearchContext();
+    const {clearSelectedTransactions} = useSearchActionsContext();
     const cardsForSavedSearchDisplay = useMemo(() => mergeCardListWithWorkspaceFeeds(workspaceCardList ?? CONST.EMPTY_OBJECT, cardList), [workspaceCardList, cardList]);
     const [reportCounts = CONST.EMPTY_TODOS_REPORT_COUNTS] = useOnyx(ONYXKEYS.DERIVED.TODOS, {selector: todosReportCountsSelector});
 
diff --git a/src/pages/inbox/report/ContextMenu/PopoverReportActionContextMenu.tsx b/src/pages/inbox/report/ContextMenu/PopoverReportActionContextMenu.tsx
index dec8f92deaad..7e1d31ccbc8c 100644
--- a/src/pages/inbox/report/ContextMenu/PopoverReportActionContextMenu.tsx
+++ b/src/pages/inbox/report/ContextMenu/PopoverReportActionContextMenu.tsx
@@ -7,7 +7,7 @@ import type {OnyxEntry} from 'react-native-onyx';
 import {Actions, useActionSheetAwareScrollViewActions} from '@components/ActionSheetAwareScrollView';
 import ConfirmModal from '@components/ConfirmModal';
 import PopoverWithMeasuredContent from '@components/PopoverWithMeasuredContent';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchStateContext} from '@components/Search/SearchContext';
 import useAncestors from '@hooks/useAncestors';
 import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
 import useDeleteTransactions from '@hooks/useDeleteTransactions';
@@ -327,7 +327,7 @@ function PopoverReportActionContextMenu({ref}: PopoverReportActionContextMenuPro
     const [selfDMReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${selfDMReportID}`);
     const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${report?.policyID}`);
     const [bankAccountList] = useOnyx(ONYXKEYS.BANK_ACCOUNT_LIST);
-    const {currentSearchHash} = useSearchContext();
+    const {currentSearchHash} = useSearchStateContext();
     const {deleteTransactions} = useDeleteTransactions({
         report,
         reportActions: reportActionRef.current ? [reportActionRef.current] : [],
diff --git a/src/pages/inbox/report/PureReportActionItem.tsx b/src/pages/inbox/report/PureReportActionItem.tsx
index 5db18d3170cf..ee9e8dbd00b7 100644
--- a/src/pages/inbox/report/PureReportActionItem.tsx
+++ b/src/pages/inbox/report/PureReportActionItem.tsx
@@ -37,7 +37,7 @@ import TaskPreview from '@components/ReportActionItem/TaskPreview';
 import TransactionPreview from '@components/ReportActionItem/TransactionPreview';
 import TripRoomPreview from '@components/ReportActionItem/TripRoomPreview';
 import UnreportedTransactionAction from '@components/ReportActionItem/UnreportedTransactionAction';
-import {SearchContext} from '@components/Search/SearchContext';
+import {SearchStateContext} from '@components/Search/SearchContext';
 import {useIsOnSearch} from '@components/Search/SearchScopeProvider';
 import {ShowContextMenuContext} from '@components/ShowContextMenuContext';
 import Text from '@components/Text';
@@ -620,7 +620,7 @@ function PureReportActionItem({
     const isOnSearch = useIsOnSearch();
     let currentSearchHash: number | undefined;
     if (isOnSearch) {
-        const {currentSearchHash: searchContextCurrentSearchHash} = use(SearchContext);
+        const {currentSearchHash: searchContextCurrentSearchHash} = use(SearchStateContext);
         currentSearchHash = searchContextCurrentSearchHash;
     }
 
diff --git a/src/pages/iou/RejectReasonPage.tsx b/src/pages/iou/RejectReasonPage.tsx
index 7a9ecff61849..0864eed6a8e1 100644
--- a/src/pages/iou/RejectReasonPage.tsx
+++ b/src/pages/iou/RejectReasonPage.tsx
@@ -2,7 +2,7 @@ import {getReportPolicyID} from '@selectors/Report';
 import React, {useCallback, useEffect} from 'react';
 import {useDelegateNoAccessActions, useDelegateNoAccessState} from '@components/DelegateNoAccessModalProvider';
 import type {FormInputErrors, FormOnyxValues} from '@components/Form/types';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchActionsContext} from '@components/Search/SearchContext';
 import {useWideRHPState} from '@components/WideRHPContextProvider';
 import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
 import useLocalize from '@hooks/useLocalize';
@@ -29,7 +29,7 @@ function RejectReasonPage({route}: RejectReasonPageProps) {
     const {translate} = useLocalize();
 
     const {transactionID, reportID, backTo} = route.params;
-    const {removeTransaction} = useSearchContext();
+    const {removeTransaction} = useSearchActionsContext();
     const [reportPolicyID] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${getNonEmptyStringOnyxID(reportID)}`, {selector: getReportPolicyID});
     const policy = usePolicy(reportPolicyID);
     const {superWideRHPRouteKeys} = useWideRHPState();
diff --git a/src/pages/iou/SplitExpenseCreateDateRagePage.tsx b/src/pages/iou/SplitExpenseCreateDateRagePage.tsx
index 30df3c588a0f..101032e47b1a 100644
--- a/src/pages/iou/SplitExpenseCreateDateRagePage.tsx
+++ b/src/pages/iou/SplitExpenseCreateDateRagePage.tsx
@@ -8,7 +8,7 @@ import InputWrapper from '@components/Form/InputWrapper';
 import type {FormInputErrors, FormOnyxValues} from '@components/Form/types';
 import HeaderWithBackButton from '@components/HeaderWithBackButton';
 import ScreenWrapper from '@components/ScreenWrapper';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchStateContext} from '@components/Search/SearchContext';
 import useAllTransactions from '@hooks/useAllTransactions';
 import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
 import useLocalize from '@hooks/useLocalize';
@@ -33,7 +33,7 @@ type SplitExpenseCreateDateRagePageProps = PlatformStackScreenProps<SplitExpense
 function SplitExpenseCreateDateRagePage({route}: SplitExpenseCreateDateRagePageProps) {
     const styles = useThemeStyles();
     const {translate} = useLocalize();
-    const {currentSearchResults} = useSearchContext();
+    const {currentSearchResults} = useSearchStateContext();
 
     const {reportID, transactionID, backTo} = route.params;
 
diff --git a/src/pages/iou/SplitExpenseEditPage.tsx b/src/pages/iou/SplitExpenseEditPage.tsx
index efbd23e322d8..d5bc7d36c5b6 100644
--- a/src/pages/iou/SplitExpenseEditPage.tsx
+++ b/src/pages/iou/SplitExpenseEditPage.tsx
@@ -7,7 +7,7 @@ import HeaderWithBackButton from '@components/HeaderWithBackButton';
 import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription';
 import ScreenWrapper from '@components/ScreenWrapper';
 import ScrollView from '@components/ScrollView';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchStateContext} from '@components/Search/SearchContext';
 import useAllTransactions from '@hooks/useAllTransactions';
 import {useCurrencyListActions} from '@hooks/useCurrencyList';
 import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
@@ -49,7 +49,7 @@ function SplitExpenseEditPage({route}: SplitExpensePageProps) {
     const {isOffline} = useNetwork();
     const {translate, toLocaleDigit} = useLocalize();
     const {getCurrencySymbol} = useCurrencyListActions();
-    const {currentSearchResults} = useSearchContext();
+    const {currentSearchResults} = useSearchStateContext();
 
     const {reportID, transactionID, splitExpenseTransactionID = '', backTo} = route.params;
 
diff --git a/src/pages/iou/SplitExpensePage.tsx b/src/pages/iou/SplitExpensePage.tsx
index f14f715bacff..81d22e1e1bdf 100644
--- a/src/pages/iou/SplitExpensePage.tsx
+++ b/src/pages/iou/SplitExpensePage.tsx
@@ -10,7 +10,7 @@ import HeaderWithBackButton from '@components/HeaderWithBackButton';
 import MenuItem from '@components/MenuItem';
 import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription';
 import ScreenWrapper from '@components/ScreenWrapper';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchActionsContext, useSearchStateContext} from '@components/Search/SearchContext';
 import type {SplitListItemType} from '@components/SelectionList/ListItem/types';
 import TabSelector from '@components/TabSelector/TabSelector';
 import useAllTransactions from '@hooks/useAllTransactions';
@@ -72,7 +72,8 @@ function SplitExpensePage({route}: SplitExpensePageProps) {
     const {showConfirmModal} = useConfirmModal();
 
     const [errorMessage, setErrorMessage] = React.useState<string>('');
-    const searchContext = useSearchContext();
+    const {currentSearchResults, currentSearchHash} = useSearchStateContext();
+    const {clearSelectedTransactions} = useSearchActionsContext();
 
     const {getCurrencySymbol} = useCurrencyListActions();
 
@@ -93,14 +94,14 @@ function SplitExpensePage({route}: SplitExpensePageProps) {
     const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY);
     const [allReportNameValuePairs] = useOnyx(ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS);
     const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${getNonEmptyStringOnyxID(reportID)}`);
-    const currentReport = report ?? searchContext?.currentSearchResults?.data?.[`${ONYXKEYS.COLLECTION.REPORT}${getNonEmptyStringOnyxID(reportID)}`];
+    const currentReport = report ?? currentSearchResults?.data?.[`${ONYXKEYS.COLLECTION.REPORT}${getNonEmptyStringOnyxID(reportID)}`];
     const [policyRecentlyUsedCurrencies] = useOnyx(ONYXKEYS.RECENTLY_USED_CURRENCIES);
     const [policyRecentlyUsedCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_RECENTLY_USED_CATEGORIES}${getIOURequestPolicyID(transaction, currentReport)}`);
     const [betas] = useOnyx(ONYXKEYS.BETAS);
     const policy = usePolicy(currentReport?.policyID);
     const currentPolicy = Object.keys(policy?.employeeList ?? {}).length
         ? policy
-        : searchContext?.currentSearchResults?.data?.[`${ONYXKEYS.COLLECTION.POLICY}${getNonEmptyStringOnyxID(currentReport?.policyID)}`];
+        : currentSearchResults?.data?.[`${ONYXKEYS.COLLECTION.POLICY}${getNonEmptyStringOnyxID(currentReport?.policyID)}`];
 
     const isSplitAvailable =
         report &&
@@ -276,7 +277,7 @@ function SplitExpensePage({route}: SplitExpensePageProps) {
                 splitExpenses,
                 splitExpensesTotal: draftTransaction?.comment?.splitExpensesTotal ?? 0,
             },
-            searchContext,
+            searchContext: {currentSearchHash, clearSelectedTransactions},
             policyCategories,
             policy: expenseReportPolicy,
             policyRecentlyUsedCategories,
diff --git a/src/pages/iou/request/step/IOURequestEditReport.tsx b/src/pages/iou/request/step/IOURequestEditReport.tsx
index 5d42dad30f91..76226adea517 100644
--- a/src/pages/iou/request/step/IOURequestEditReport.tsx
+++ b/src/pages/iou/request/step/IOURequestEditReport.tsx
@@ -1,7 +1,7 @@
 import React, {useMemo} from 'react';
 import type {OnyxEntry} from 'react-native-onyx';
 import {usePersonalDetails, useSession} from '@components/OnyxListItemProvider';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchActionsContext, useSearchStateContext} from '@components/Search/SearchContext';
 import type {ListItem} from '@components/SelectionListWithSections/types';
 import useConditionalCreateEmptyReportConfirmation from '@hooks/useConditionalCreateEmptyReportConfirmation';
 import useHasPerDiemTransactions from '@hooks/useHasPerDiemTransactions';
@@ -34,7 +34,8 @@ type IOURequestEditReportProps = WithWritableReportOrNotFoundProps<typeof SCREEN
 function IOURequestEditReport({route}: IOURequestEditReportProps) {
     const {backTo, reportID, action, shouldTurnOffSelectionMode} = route.params;
 
-    const {selectedTransactionIDs, clearSelectedTransactions} = useSearchContext();
+    const {selectedTransactionIDs} = useSearchStateContext();
+    const {clearSelectedTransactions} = useSearchActionsContext();
     const [allReports] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}`);
     const [selectedReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${reportID}`);
     const [reportNextStep] = useOnyx(`${ONYXKEYS.COLLECTION.NEXT_STEP}${reportID}`);
diff --git a/src/pages/iou/request/step/IOURequestStepCategory.tsx b/src/pages/iou/request/step/IOURequestStepCategory.tsx
index 4eb3fd2de54c..ee9af1e3ff08 100644
--- a/src/pages/iou/request/step/IOURequestStepCategory.tsx
+++ b/src/pages/iou/request/step/IOURequestStepCategory.tsx
@@ -6,7 +6,7 @@ import FullPageOfflineBlockingView from '@components/BlockingViews/FullPageOffli
 import Button from '@components/Button';
 import CategoryPicker from '@components/CategoryPicker';
 import FixedFooter from '@components/FixedFooter';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchStateContext} from '@components/Search/SearchContext';
 import type {ListItem} from '@components/SelectionListWithSections/types';
 import WorkspaceEmptyStateSection from '@components/WorkspaceEmptyStateSection';
 import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
@@ -73,7 +73,7 @@ function IOURequestStepCategory({
 
     const policyCategories = policyCategoriesReal ?? policyCategoriesDraft;
     const policyData = usePolicyData(policy?.id);
-    const {currentSearchHash} = useSearchContext();
+    const {currentSearchHash} = useSearchStateContext();
     const isEditing = action === CONST.IOU.ACTION.EDIT;
     const isEditingSplit = (iouType === CONST.IOU.TYPE.SPLIT || iouType === CONST.IOU.TYPE.SPLIT_EXPENSE) && isEditing;
     const currentTransaction = isEditingSplit && !lodashIsEmpty(splitDraftTransaction) ? splitDraftTransaction : transaction;
diff --git a/src/pages/iou/request/step/IOURequestStepReport.tsx b/src/pages/iou/request/step/IOURequestStepReport.tsx
index 830619b94fbe..980ebfc89df0 100644
--- a/src/pages/iou/request/step/IOURequestStepReport.tsx
+++ b/src/pages/iou/request/step/IOURequestStepReport.tsx
@@ -2,7 +2,7 @@ import React from 'react';
 import {InteractionManager} from 'react-native';
 import type {OnyxEntry} from 'react-native-onyx';
 import {usePersonalDetails, useSession} from '@components/OnyxListItemProvider';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchActionsContext} from '@components/Search/SearchContext';
 import type {ListItem} from '@components/SelectionListWithSections/types';
 import useConditionalCreateEmptyReportConfirmation from '@hooks/useConditionalCreateEmptyReportConfirmation';
 import useOnyx from '@hooks/useOnyx';
@@ -55,7 +55,7 @@ function IOURequestStepReport({route, transaction}: IOURequestStepReportProps) {
     const [selectedReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${selectedReportID}`);
     const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY);
     const [allPolicyCategories] = useOnyx(ONYXKEYS.COLLECTION.POLICY_CATEGORIES);
-    const {removeTransaction, setSelectedTransactions} = useSearchContext();
+    const {removeTransaction, setSelectedTransactions} = useSearchActionsContext();
     const reportOrDraftReport = getReportOrDraftReport(reportIDFromRoute);
     const [iouActions] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${reportOrDraftReport?.parentReportID}`, {selector: getIOUActionsSelector});
     const isEditing = action === CONST.IOU.ACTION.EDIT;
diff --git a/src/pages/iou/request/step/IOURequestStepTag.tsx b/src/pages/iou/request/step/IOURequestStepTag.tsx
index b403db5f49f5..01698045f8c0 100644
--- a/src/pages/iou/request/step/IOURequestStepTag.tsx
+++ b/src/pages/iou/request/step/IOURequestStepTag.tsx
@@ -2,7 +2,7 @@ import React, {useMemo} from 'react';
 import {View} from 'react-native';
 import Button from '@components/Button';
 import FixedFooter from '@components/FixedFooter';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchStateContext} from '@components/Search/SearchContext';
 import TagPicker from '@components/TagPicker';
 import WorkspaceEmptyStateSection from '@components/WorkspaceEmptyStateSection';
 import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
@@ -67,7 +67,7 @@ function IOURequestStepTag({
 
     const styles = useThemeStyles();
     const illustrations = useMemoizedLazyIllustrations(['EmptyStateExpenses']);
-    const {currentSearchHash} = useSearchContext();
+    const {currentSearchHash} = useSearchStateContext();
     const {translate} = useLocalize();
     useRestartOnReceiptFailure(transaction, reportIDFromRoute, iouType, action);
 
diff --git a/src/pages/settings/Troubleshoot/TroubleshootPage.tsx b/src/pages/settings/Troubleshoot/TroubleshootPage.tsx
index e71b5a072571..d8f6e9b5a24e 100644
--- a/src/pages/settings/Troubleshoot/TroubleshootPage.tsx
+++ b/src/pages/settings/Troubleshoot/TroubleshootPage.tsx
@@ -10,7 +10,7 @@ import {useOptionsList} from '@components/OptionListContextProvider';
 import RenderHTML from '@components/RenderHTML';
 import ScreenWrapper from '@components/ScreenWrapper';
 import ScrollView from '@components/ScrollView';
-import {useSearchContext} from '@components/Search/SearchContext';
+import {useSearchActionsContext} from '@components/Search/SearchContext';
 import Section from '@components/Section';
 import SentryDebugToolMenu from '@components/SentryDebugToolMenu';
 import Switch from '@components/Switch';
@@ -63,9 +63,8 @@ function TroubleshootPage() {
     const {resetOptions} = useOptionsList({shouldInitialize: false});
     const [tryNewDot] = useOnyx(ONYXKEYS.NVP_TRY_NEW_DOT);
     const shouldOpenSurveyReasonPage = tryNewDot?.classicRedirect?.dismissed === false;
-    const {setShouldResetSearchQuery} = useSearchContext();
+    const {setShouldResetSearchQuery} = useSearchActionsContext();
     useDocumentTitle(`${translate('common.settings')} - ${translate('initialSettingsPage.aboutPage.troubleshoot')}`);
-
     const exportOnyxState = useCallback(() => {
         ExportOnyxState.readFromOnyxDatabase().then((value: Record<string, unknown>) => {
             const dataToShare = ExportOnyxState.maskOnyxState(value, shouldMaskOnyxState);
diff --git a/tests/ui/CategoryListItemHeaderTest.tsx b/tests/ui/CategoryListItemHeaderTest.tsx
index 6832cd8113c6..c64cfa01e3e2 100644
--- a/tests/ui/CategoryListItemHeaderTest.tsx
+++ b/tests/ui/CategoryListItemHeaderTest.tsx
@@ -4,8 +4,8 @@ import Onyx from 'react-native-onyx';
 import ComposeProviders from '@components/ComposeProviders';
 import {LocaleContextProvider} from '@components/LocaleContextProvider';
 import OnyxListItemProvider from '@components/OnyxListItemProvider';
-import {SearchContext} from '@components/Search/SearchContext';
-import type {SearchColumnType} from '@components/Search/types';
+import {SearchActionsContext, SearchStateContext} from '@components/Search/SearchContext';
+import type {SearchActionsContextValue, SearchColumnType, SearchStateContextValue} from '@components/Search/types';
 import CategoryListItemHeader from '@components/SelectionListWithSections/Search/CategoryListItemHeader';
 import type {TransactionCategoryGroupListItemType} from '@components/SelectionListWithSections/types';
 import useResponsiveLayout from '@hooks/useResponsiveLayout';
@@ -20,8 +20,8 @@ jest.mock('@libs/Navigation/Navigation');
 jest.mock('@hooks/useResponsiveLayout', () => jest.fn());
 const mockedUseResponsiveLayout = useResponsiveLayout as jest.MockedFunction<typeof useResponsiveLayout>;
 
-// Mock search context with all required SearchContextProps fields
-const mockSearchContext = {
+// Mock search context with all required SearchContextStateValue and SearchContextActionsValue fields
+const mockSearchStateContext = {
     currentSearchHash: 12345,
     currentRecentSearchHash: 12345,
     currentSearchKey: undefined,
@@ -35,9 +35,12 @@ const mockSearchContext = {
     shouldResetSearchQuery: false,
     lastSearchType: undefined,
     areAllMatchingItemsSelected: false,
-    showSelectAllMatchingItems: false,
+    shouldShowSelectAllMatchingItems: false,
     shouldShowFiltersBarLoading: false,
     shouldUseLiveData: false,
+} satisfies SearchStateContextValue;
+
+const mockSearchActionsContext = {
     setLastSearchType: jest.fn(),
     setCurrentSearchHashAndKey: jest.fn(),
     setCurrentSearchQueryJSON: jest.fn(),
@@ -45,10 +48,10 @@ const mockSearchContext = {
     removeTransaction: jest.fn(),
     clearSelectedTransactions: jest.fn(),
     setShouldShowFiltersBarLoading: jest.fn(),
-    shouldShowSelectAllMatchingItems: jest.fn(),
+    setShouldShowSelectAllMatchingItems: jest.fn(),
     selectAllMatchingItems: jest.fn(),
     setShouldResetSearchQuery: jest.fn(),
-};
+} satisfies SearchActionsContextValue;
 
 const createCategoryListItem = (category: string, options: Partial<TransactionCategoryGroupListItemType> = {}): TransactionCategoryGroupListItemType => ({
     category,
@@ -79,19 +82,21 @@ const renderCategoryListItemHeader = (
 ) => {
     return render(
         <ComposeProviders components={[OnyxListItemProvider, LocaleContextProvider]}>
-            <SearchContext.Provider value={mockSearchContext}>
-                <CategoryListItemHeader
-                    category={categoryItem}
-                    onCheckboxPress={props.onCheckboxPress ?? jest.fn()}
-                    isDisabled={props.isDisabled ?? false}
-                    canSelectMultiple={props.canSelectMultiple ?? false}
-                    isSelectAllChecked={props.isSelectAllChecked ?? false}
-                    isIndeterminate={props.isIndeterminate ?? false}
-                    onDownArrowClick={props.onDownArrowClick}
-                    isExpanded={props.isExpanded ?? false}
-                    columns={props.columns ?? [CONST.SEARCH.TABLE_COLUMNS.GROUP_CATEGORY, CONST.SEARCH.TABLE_COLUMNS.GROUP_EXPENSES, CONST.SEARCH.TABLE_COLUMNS.GROUP_TOTAL]}
-                />
-            </SearchContext.Provider>
+            <SearchStateContext.Provider value={mockSearchStateContext}>
+                <SearchActionsContext.Provider value={mockSearchActionsContext}>
+                    <CategoryListItemHeader
+                        category={categoryItem}
+                        onCheckboxPress={props.onCheckboxPress ?? jest.fn()}
+                        isDisabled={props.isDisabled ?? false}
+                        canSelectMultiple={props.canSelectMultiple ?? false}
+                        isSelectAllChecked={props.isSelectAllChecked ?? false}
+                        isIndeterminate={props.isIndeterminate ?? false}
+                        onDownArrowClick={props.onDownArrowClick}
+                        isExpanded={props.isExpanded ?? false}
+                        columns={props.columns ?? [CONST.SEARCH.TABLE_COLUMNS.GROUP_CATEGORY, CONST.SEARCH.TABLE_COLUMNS.GROUP_EXPENSES, CONST.SEARCH.TABLE_COLUMNS.GROUP_TOTAL]}
+                    />
+                </SearchActionsContext.Provider>
+            </SearchStateContext.Provider>
         </ComposeProviders>,
     );
 };
diff --git a/tests/ui/MerchantListItemHeaderTest.tsx b/tests/ui/MerchantListItemHeaderTest.tsx
index 064030c8e46e..9ae2ce051f31 100644
--- a/tests/ui/MerchantListItemHeaderTest.tsx
+++ b/tests/ui/MerchantListItemHeaderTest.tsx
@@ -4,8 +4,8 @@ import Onyx from 'react-native-onyx';
 import ComposeProviders from '@components/ComposeProviders';
 import {LocaleContextProvider} from '@components/LocaleContextProvider';
 import OnyxListItemProvider from '@components/OnyxListItemProvider';
-import {SearchContext} from '@components/Search/SearchContext';
-import type {SearchColumnType} from '@components/Search/types';
+import {SearchActionsContext, SearchStateContext} from '@components/Search/SearchContext';
+import type {SearchActionsContextValue, SearchColumnType, SearchStateContextValue} from '@components/Search/types';
 import MerchantListItemHeader from '@components/SelectionListWithSections/Search/MerchantListItemHeader';
 import type {TransactionMerchantGroupListItemType} from '@components/SelectionListWithSections/types';
 import useResponsiveLayout from '@hooks/useResponsiveLayout';
@@ -20,8 +20,8 @@ jest.mock('@libs/Navigation/Navigation');
 jest.mock('@hooks/useResponsiveLayout', () => jest.fn());
 const mockedUseResponsiveLayout = useResponsiveLayout as jest.MockedFunction<typeof useResponsiveLayout>;
 
-// Mock search context with all required SearchContextProps fields
-const mockSearchContext = {
+// Mock search context with all required SearchContextStateValue and SearchContextActionsValue fields
+const mockSearchStateContext = {
     currentSearchHash: 12345,
     currentRecentSearchHash: 12345,
     currentSearchKey: undefined,
@@ -35,9 +35,12 @@ const mockSearchContext = {
     shouldResetSearchQuery: false,
     lastSearchType: undefined,
     areAllMatchingItemsSelected: false,
-    showSelectAllMatchingItems: false,
+    shouldShowSelectAllMatchingItems: false,
     shouldShowFiltersBarLoading: false,
     shouldUseLiveData: false,
+} satisfies SearchStateContextValue;
+
+const mockSearchActionsContext = {
     setLastSearchType: jest.fn(),
     setCurrentSearchHashAndKey: jest.fn(),
     setCurrentSearchQueryJSON: jest.fn(),
@@ -45,10 +48,10 @@ const mockSearchContext = {
     removeTransaction: jest.fn(),
     clearSelectedTransactions: jest.fn(),
     setShouldShowFiltersBarLoading: jest.fn(),
-    shouldShowSelectAllMatchingItems: jest.fn(),
+    setShouldShowSelectAllMatchingItems: jest.fn(),
     selectAllMatchingItems: jest.fn(),
     setShouldResetSearchQuery: jest.fn(),
-};
+} satisfies SearchActionsContextValue;
 
 const createMerchantListItem = (merchant: string, options: Partial<TransactionMerchantGroupListItemType> = {}): TransactionMerchantGroupListItemType => ({
     merchant,
@@ -79,19 +82,21 @@ const renderMerchantListItemHeader = (
 ) => {
     return render(
         <ComposeProviders components={[OnyxListItemProvider, LocaleContextProvider]}>
-            <SearchContext.Provider value={mockSearchContext}>
-                <MerchantListItemHeader
-                    merchant={merchantItem}
-                    onCheckboxPress={props.onCheckboxPress ?? jest.fn()}
-                    isDisabled={props.isDisabled ?? false}
-                    canSelectMultiple={props.canSelectMultiple ?? false}
-                    isSelectAllChecked={props.isSelectAllChecked ?? false}
-                    isIndeterminate={props.isIndeterminate ?? false}
-                    onDownArrowClick={props.onDownArrowClick}
-                    isExpanded={props.isExpanded ?? false}
-                    columns={props.columns ?? [CONST.SEARCH.TABLE_COLUMNS.GROUP_MERCHANT, CONST.SEARCH.TABLE_COLUMNS.GROUP_EXPENSES, CONST.SEARCH.TABLE_COLUMNS.GROUP_TOTAL]}
-                />
-            </SearchContext.Provider>
+            <SearchStateContext.Provider value={mockSearchStateContext}>
+                <SearchActionsContext.Provider value={mockSearchActionsContext}>
+                    <MerchantListItemHeader
+                        merchant={merchantItem}
+                        onCheckboxPress={props.onCheckboxPress ?? jest.fn()}
+                        isDisabled={props.isDisabled ?? false}
+                        canSelectMultiple={props.canSelectMultiple ?? false}
+                        isSelectAllChecked={props.isSelectAllChecked ?? false}
+                        isIndeterminate={props.isIndeterminate ?? false}
+                        onDownArrowClick={props.onDownArrowClick}
+                        isExpanded={props.isExpanded ?? false}
+                        columns={props.columns ?? [CONST.SEARCH.TABLE_COLUMNS.GROUP_MERCHANT, CONST.SEARCH.TABLE_COLUMNS.GROUP_EXPENSES, CONST.SEARCH.TABLE_COLUMNS.GROUP_TOTAL]}
+                    />
+                </SearchActionsContext.Provider>
+            </SearchStateContext.Provider>
         </ComposeProviders>,
     );
 };
diff --git a/tests/ui/MonthListItemHeaderTest.tsx b/tests/ui/MonthListItemHeaderTest.tsx
index f5439d3be3f7..46a57dd76154 100644
--- a/tests/ui/MonthListItemHeaderTest.tsx
+++ b/tests/ui/MonthListItemHeaderTest.tsx
@@ -4,8 +4,8 @@ import Onyx from 'react-native-onyx';
 import ComposeProviders from '@components/ComposeProviders';
 import {LocaleContextProvider} from '@components/LocaleContextProvider';
 import OnyxListItemProvider from '@components/OnyxListItemProvider';
-import {SearchContext} from '@components/Search/SearchContext';
-import type {SearchColumnType} from '@components/Search/types';
+import {SearchActionsContext, SearchStateContext} from '@components/Search/SearchContext';
+import type {SearchActionsContextValue, SearchColumnType, SearchStateContextValue} from '@components/Search/types';
 import MonthListItemHeader from '@components/SelectionListWithSections/Search/MonthListItemHeader';
 import type {TransactionMonthGroupListItemType} from '@components/SelectionListWithSections/types';
 import useResponsiveLayout from '@hooks/useResponsiveLayout';
@@ -20,8 +20,8 @@ jest.mock('@libs/Navigation/Navigation');
 jest.mock('@hooks/useResponsiveLayout', () => jest.fn());
 const mockedUseResponsiveLayout = useResponsiveLayout as jest.MockedFunction<typeof useResponsiveLayout>;
 
-// Mock search context with all required SearchContextProps fields
-const mockSearchContext = {
+// Mock search context with all required SearchContextStateValue and SearchContextActionsValue fields
+const mockSearchStateContext = {
     currentSearchHash: 12345,
     currentRecentSearchHash: 12345,
     currentSearchKey: undefined,
@@ -35,9 +35,12 @@ const mockSearchContext = {
     shouldResetSearchQuery: false,
     lastSearchType: undefined,
     areAllMatchingItemsSelected: false,
-    showSelectAllMatchingItems: false,
+    shouldShowSelectAllMatchingItems: false,
     shouldShowFiltersBarLoading: false,
     shouldUseLiveData: false,
+} satisfies SearchStateContextValue;
+
+const mockSearchActionsContext = {
     setLastSearchType: jest.fn(),
     setCurrentSearchHashAndKey: jest.fn(),
     setCurrentSearchQueryJSON: jest.fn(),
@@ -45,10 +48,10 @@ const mockSearchContext = {
     removeTransaction: jest.fn(),
     clearSelectedTransactions: jest.fn(),
     setShouldShowFiltersBarLoading: jest.fn(),
-    shouldShowSelectAllMatchingItems: jest.fn(),
+    setShouldShowSelectAllMatchingItems: jest.fn(),
     selectAllMatchingItems: jest.fn(),
     setShouldResetSearchQuery: jest.fn(),
-};
+} satisfies SearchActionsContextValue;
 
 const createMonthListItem = (year: number, month: number, options: Partial<TransactionMonthGroupListItemType> = {}): TransactionMonthGroupListItemType => ({
     year,
@@ -81,19 +84,21 @@ const renderMonthListItemHeader = (
 ) => {
     return render(
         <ComposeProviders components={[OnyxListItemProvider, LocaleContextProvider]}>
-            <SearchContext.Provider value={mockSearchContext}>
-                <MonthListItemHeader
-                    month={monthItem}
-                    onCheckboxPress={props.onCheckboxPress ?? jest.fn()}
-                    isDisabled={props.isDisabled ?? false}
-                    canSelectMultiple={props.canSelectMultiple ?? false}
-                    isSelectAllChecked={props.isSelectAllChecked ?? false}
-                    isIndeterminate={props.isIndeterminate ?? false}
-                    onDownArrowClick={props.onDownArrowClick}
-                    isExpanded={props.isExpanded ?? false}
-                    columns={props.columns ?? [CONST.SEARCH.TABLE_COLUMNS.GROUP_MONTH, CONST.SEARCH.TABLE_COLUMNS.GROUP_EXPENSES, CONST.SEARCH.TABLE_COLUMNS.GROUP_TOTAL]}
-                />
-            </SearchContext.Provider>
+            <SearchStateContext.Provider value={mockSearchStateContext}>
+                <SearchActionsContext.Provider value={mockSearchActionsContext}>
+                    <MonthListItemHeader
+                        month={monthItem}
+                        onCheckboxPress={props.onCheckboxPress ?? jest.fn()}
+                        isDisabled={props.isDisabled ?? false}
+                        canSelectMultiple={props.canSelectMultiple ?? false}
+                        isSelectAllChecked={props.isSelectAllChecked ?? false}
+                        isIndeterminate={props.isIndeterminate ?? false}
+                        onDownArrowClick={props.onDownArrowClick}
+                        isExpanded={props.isExpanded ?? false}
+                        columns={props.columns ?? [CONST.SEARCH.TABLE_COLUMNS.GROUP_MONTH, CONST.SEARCH.TABLE_COLUMNS.GROUP_EXPENSES, CONST.SEARCH.TABLE_COLUMNS.GROUP_TOTAL]}
+                    />
+                </SearchActionsContext.Provider>
+            </SearchStateContext.Provider>
         </ComposeProviders>,
     );
 };
diff --git a/tests/ui/ReportListItemHeaderTest.tsx b/tests/ui/ReportListItemHeaderTest.tsx
index 20b3d92d0ea5..5e4c97298613 100644
--- a/tests/ui/ReportListItemHeaderTest.tsx
+++ b/tests/ui/ReportListItemHeaderTest.tsx
@@ -5,7 +5,8 @@ import type {ValueOf} from 'type-fest';
 import ComposeProviders from '@components/ComposeProviders';
 import {LocaleContextProvider} from '@components/LocaleContextProvider';
 import OnyxListItemProvider from '@components/OnyxListItemProvider';
-import {SearchContext} from '@components/Search/SearchContext';
+import {SearchActionsContext, SearchStateContext} from '@components/Search/SearchContext';
+import type {SearchActionsContextValue, SearchStateContextValue} from '@components/Search/types';
 import ReportListItemHeader from '@components/SelectionListWithSections/Search/ReportListItemHeader';
 import type {TransactionReportGroupListItemType} from '@components/SelectionListWithSections/types';
 import CONST from '@src/CONST';
@@ -18,24 +19,26 @@ jest.mock('@components/ConfirmedRoute.tsx');
 jest.mock('@libs/Navigation/Navigation');
 jest.mock('@components/AvatarWithDisplayName.tsx');
 
-// Mock search context
-const mockSearchContext = {
+// Mock search context with all required SearchContextStateValue and SearchContextActionsValue fields
+const mockSearchStateContext = {
     currentSearchHash: 12345,
     currentRecentSearchHash: 12345,
-    selectedReports: {},
+    selectedReports: [],
     selectedTransactionIDs: [],
     selectedTransactions: {},
     isOnSearch: false,
     shouldTurnOffSelectionMode: false,
-    setSelectedReports: jest.fn(),
+} satisfies Partial<SearchStateContextValue>;
+
+const mockSearchActionsContext = {
     clearSelectedTransactions: jest.fn(),
     setLastSearchType: jest.fn(),
     setCurrentSearchHashAndKey: jest.fn(),
     setSelectedTransactions: jest.fn(),
     setShouldShowFiltersBarLoading: jest.fn(),
-    shouldShowSelectAllMatchingItems: jest.fn(),
+    setShouldShowSelectAllMatchingItems: jest.fn(),
     selectAllMatchingItems: jest.fn(),
-};
+} satisfies Partial<SearchActionsContextValue>;
 
 const mockPersonalDetails: Record<string, PersonalDetails> = {
     john: {
@@ -97,15 +100,18 @@ const renderReportListItemHeader = (reportItem: TransactionReportGroupListItemTy
     return render(
         <ComposeProviders components={[OnyxListItemProvider, LocaleContextProvider]}>
             {/* @ts-expect-error - Disable TypeScript errors to simplify the test */}
-            <SearchContext.Provider value={mockSearchContext}>
-                <ReportListItemHeader
-                    report={reportItem}
-                    onSelectRow={jest.fn()}
-                    onCheckboxPress={jest.fn()}
-                    isDisabled={false}
-                    canSelectMultiple={false}
-                />
-            </SearchContext.Provider>
+            <SearchStateContext.Provider value={mockSearchStateContext}>
+                {/* @ts-expect-error - Disable TypeScript errors to simplify the test */}
+                <SearchActionsContext.Provider value={mockSearchActionsContext}>
+                    <ReportListItemHeader
+                        report={reportItem}
+                        onSelectRow={jest.fn()}
+                        onCheckboxPress={jest.fn()}
+                        isDisabled={false}
+                        canSelectMultiple={false}
+                    />
+                </SearchActionsContext.Provider>
+            </SearchStateContext.Provider>
         </ComposeProviders>,
     );
 };
diff --git a/tests/ui/WeekListItemHeaderTest.tsx b/tests/ui/WeekListItemHeaderTest.tsx
index de740cd4a4d7..5d61b7599d96 100644
--- a/tests/ui/WeekListItemHeaderTest.tsx
+++ b/tests/ui/WeekListItemHeaderTest.tsx
@@ -4,8 +4,8 @@ import Onyx from 'react-native-onyx';
 import ComposeProviders from '@components/ComposeProviders';
 import {LocaleContextProvider} from '@components/LocaleContextProvider';
 import OnyxListItemProvider from '@components/OnyxListItemProvider';
-import {SearchContext} from '@components/Search/SearchContext';
-import type {SearchColumnType} from '@components/Search/types';
+import {SearchActionsContext, SearchStateContext} from '@components/Search/SearchContext';
+import type {SearchActionsContextValue, SearchColumnType, SearchStateContextValue} from '@components/Search/types';
 import WeekListItemHeader from '@components/SelectionListWithSections/Search/WeekListItemHeader';
 import type {TransactionWeekGroupListItemType} from '@components/SelectionListWithSections/types';
 import useResponsiveLayout from '@hooks/useResponsiveLayout';
@@ -20,8 +20,7 @@ jest.mock('@libs/Navigation/Navigation');
 jest.mock('@hooks/useResponsiveLayout', () => jest.fn());
 const mockedUseResponsiveLayout = useResponsiveLayout as jest.MockedFunction<typeof useResponsiveLayout>;
 
-// Mock search context with all required SearchContextProps fields
-const mockSearchContext = {
+const mockSearchStateContext = {
     currentSearchHash: 12345,
     currentRecentSearchHash: 12345,
     currentSearchKey: undefined,
@@ -35,9 +34,12 @@ const mockSearchContext = {
     shouldResetSearchQuery: false,
     lastSearchType: undefined,
     areAllMatchingItemsSelected: false,
-    showSelectAllMatchingItems: false,
+    shouldShowSelectAllMatchingItems: false,
     shouldShowFiltersBarLoading: false,
     shouldUseLiveData: false,
+} satisfies SearchStateContextValue;
+
+const mockSearchActionsContext = {
     setLastSearchType: jest.fn(),
     setCurrentSearchHashAndKey: jest.fn(),
     setCurrentSearchQueryJSON: jest.fn(),
@@ -45,10 +47,10 @@ const mockSearchContext = {
     removeTransaction: jest.fn(),
     clearSelectedTransactions: jest.fn(),
     setShouldShowFiltersBarLoading: jest.fn(),
-    shouldShowSelectAllMatchingItems: jest.fn(),
+    setShouldShowSelectAllMatchingItems: jest.fn(),
     selectAllMatchingItems: jest.fn(),
     setShouldResetSearchQuery: jest.fn(),
-};
+} satisfies SearchActionsContextValue;
 
 const createWeekListItem = (week: string, options: Partial<TransactionWeekGroupListItemType> = {}): TransactionWeekGroupListItemType => ({
     week,
@@ -79,19 +81,21 @@ const renderWeekListItemHeader = (
 ) => {
     return render(
         <ComposeProviders components={[OnyxListItemProvider, LocaleContextProvider]}>
-            <SearchContext.Provider value={mockSearchContext}>
-                <WeekListItemHeader
-                    week={weekItem}
-                    onCheckboxPress={props.onCheckboxPress ?? jest.fn()}
-                    isDisabled={props.isDisabled ?? false}
-                    canSelectMultiple={props.canSelectMultiple ?? false}
-                    isSelectAllChecked={props.isSelectAllChecked ?? false}
-                    isIndeterminate={props.isIndeterminate ?? false}
-                    onDownArrowClick={props.onDownArrowClick}
-                    isExpanded={props.isExpanded ?? false}
-                    columns={props.columns ?? [CONST.SEARCH.TABLE_COLUMNS.GROUP_WEEK, CONST.SEARCH.TABLE_COLUMNS.GROUP_EXPENSES, CONST.SEARCH.TABLE_COLUMNS.GROUP_TOTAL]}
-                />
-            </SearchContext.Provider>
+            <SearchStateContext.Provider value={mockSearchStateContext}>
+                <SearchActionsContext.Provider value={mockSearchActionsContext}>
+                    <WeekListItemHeader
+                        week={weekItem}
+                        onCheckboxPress={props.onCheckboxPress ?? jest.fn()}
+                        isDisabled={props.isDisabled ?? false}
+                        canSelectMultiple={props.canSelectMultiple ?? false}
+                        isSelectAllChecked={props.isSelectAllChecked ?? false}
+                        isIndeterminate={props.isIndeterminate ?? false}
+                        onDownArrowClick={props.onDownArrowClick}
+                        isExpanded={props.isExpanded ?? false}
+                        columns={props.columns ?? [CONST.SEARCH.TABLE_COLUMNS.GROUP_WEEK, CONST.SEARCH.TABLE_COLUMNS.GROUP_EXPENSES, CONST.SEARCH.TABLE_COLUMNS.GROUP_TOTAL]}
+                    />
+                </SearchActionsContext.Provider>
+            </SearchStateContext.Provider>
         </ComposeProviders>,
     );
 };
diff --git a/tests/ui/YearListItemHeaderTest.tsx b/tests/ui/YearListItemHeaderTest.tsx
index 2aa35c6a3e88..3a3ffa3cf9e1 100644
--- a/tests/ui/YearListItemHeaderTest.tsx
+++ b/tests/ui/YearListItemHeaderTest.tsx
@@ -4,8 +4,8 @@ import Onyx from 'react-native-onyx';
 import ComposeProviders from '@components/ComposeProviders';
 import {LocaleContextProvider} from '@components/LocaleContextProvider';
 import OnyxListItemProvider from '@components/OnyxListItemProvider';
-import {SearchContext} from '@components/Search/SearchContext';
-import type {SearchColumnType} from '@components/Search/types';
+import {SearchActionsContext, SearchStateContext} from '@components/Search/SearchContext';
+import type {SearchActionsContextValue, SearchColumnType, SearchStateContextValue} from '@components/Search/types';
 import YearListItemHeader from '@components/SelectionListWithSections/Search/YearListItemHeader';
 import type {TransactionYearGroupListItemType} from '@components/SelectionListWithSections/types';
 import useResponsiveLayout from '@hooks/useResponsiveLayout';
@@ -20,8 +20,8 @@ jest.mock('@libs/Navigation/Navigation');
 jest.mock('@hooks/useResponsiveLayout', () => jest.fn());
 const mockedUseResponsiveLayout = useResponsiveLayout as jest.MockedFunction<typeof useResponsiveLayout>;
 
-// Mock search context with all required SearchContextProps fields
-const mockSearchContext = {
+// Mock search context with all required SearchContextStateValue and SearchContextActionsValue fields
+const mockSearchStateContext = {
     currentSearchHash: 12345,
     currentRecentSearchHash: 12345,
     currentSearchKey: undefined,
@@ -35,9 +35,12 @@ const mockSearchContext = {
     shouldResetSearchQuery: false,
     lastSearchType: undefined,
     areAllMatchingItemsSelected: false,
-    showSelectAllMatchingItems: false,
+    shouldShowSelectAllMatchingItems: false,
     shouldShowFiltersBarLoading: false,
     shouldUseLiveData: false,
+} satisfies SearchStateContextValue;
+
+const mockSearchActionsContext = {
     setLastSearchType: jest.fn(),
     setCurrentSearchHashAndKey: jest.fn(),
     setCurrentSearchQueryJSON: jest.fn(),
@@ -45,10 +48,10 @@ const mockSearchContext = {
     removeTransaction: jest.fn(),
     clearSelectedTransactions: jest.fn(),
     setShouldShowFiltersBarLoading: jest.fn(),
-    shouldShowSelectAllMatchingItems: jest.fn(),
+    setShouldShowSelectAllMatchingItems: jest.fn(),
     selectAllMatchingItems: jest.fn(),
     setShouldResetSearchQuery: jest.fn(),
-};
+} satisfies SearchActionsContextValue;
 
 const createYearListItem = (year: number, options: Partial<TransactionYearGroupListItemType> = {}): TransactionYearGroupListItemType => ({
     year,
@@ -80,19 +83,21 @@ const renderYearListItemHeader = (
 ) => {
     return render(
         <ComposeProviders components={[OnyxListItemProvider, LocaleContextProvider]}>
-            <SearchContext.Provider value={mockSearchContext}>
-                <YearListItemHeader
-                    year={yearItem}
-                    onCheckboxPress={props.onCheckboxPress ?? jest.fn()}
-                    isDisabled={props.isDisabled ?? false}
-                    canSelectMultiple={props.canSelectMultiple ?? false}
-                    isSelectAllChecked={props.isSelectAllChecked ?? false}
-                    isIndeterminate={props.isIndeterminate ?? false}
-                    onDownArrowClick={props.onDownArrowClick}
-                    isExpanded={props.isExpanded ?? false}
-                    columns={props.columns ?? [CONST.SEARCH.TABLE_COLUMNS.GROUP_YEAR, CONST.SEARCH.TABLE_COLUMNS.GROUP_EXPENSES, CONST.SEARCH.TABLE_COLUMNS.GROUP_TOTAL]}
-                />
-            </SearchContext.Provider>
+            <SearchStateContext.Provider value={mockSearchStateContext}>
+                <SearchActionsContext.Provider value={mockSearchActionsContext}>
+                    <YearListItemHeader
+                        year={yearItem}
+                        onCheckboxPress={props.onCheckboxPress ?? jest.fn()}
+                        isDisabled={props.isDisabled ?? false}
+                        canSelectMultiple={props.canSelectMultiple ?? false}
+                        isSelectAllChecked={props.isSelectAllChecked ?? false}
+                        isIndeterminate={props.isIndeterminate ?? false}
+                        onDownArrowClick={props.onDownArrowClick}
+                        isExpanded={props.isExpanded ?? false}
+                        columns={props.columns ?? [CONST.SEARCH.TABLE_COLUMNS.GROUP_YEAR, CONST.SEARCH.TABLE_COLUMNS.GROUP_EXPENSES, CONST.SEARCH.TABLE_COLUMNS.GROUP_TOTAL]}
+                    />
+                </SearchActionsContext.Provider>
+            </SearchStateContext.Provider>
         </ComposeProviders>,
     );
 };
diff --git a/tests/unit/hooks/useAllTransactions.test.ts b/tests/unit/hooks/useAllTransactions.test.ts
index 0b4b323d6e79..2d3c0d27dafd 100644
--- a/tests/unit/hooks/useAllTransactions.test.ts
+++ b/tests/unit/hooks/useAllTransactions.test.ts
@@ -9,7 +9,7 @@ import createRandomTransaction from '../../utils/collections/transaction';
 let mockCurrentSearchResults: SearchResults | undefined;
 
 jest.mock('@components/Search/SearchContext', () => ({
-    useSearchContext: () => ({
+    useSearchStateContext: () => ({
         currentSearchResults: mockCurrentSearchResults,
     }),
 }));
diff --git a/tests/unit/hooks/useFilterSelectedTransactionsTest.ts b/tests/unit/hooks/useFilterSelectedTransactionsTest.ts
index f14cc79ca28a..3e9fc9cb3773 100644
--- a/tests/unit/hooks/useFilterSelectedTransactionsTest.ts
+++ b/tests/unit/hooks/useFilterSelectedTransactionsTest.ts
@@ -8,13 +8,15 @@ let mockSelectedTransactionIDs: string[] = [];
 const mockSetSelectedTransactions = jest.fn();
 
 jest.mock('@components/Search/SearchContext', () => ({
-    useSearchContext: () => ({
+    useSearchStateContext: () => ({
         selectedTransactionIDs: mockSelectedTransactionIDs,
-        setSelectedTransactions: mockSetSelectedTransactions,
-        clearSelectedTransactions: jest.fn(),
         selectedTransactions: {},
         currentSearchHash: 12345,
     }),
+    useSearchActionsContext: () => ({
+        setSelectedTransactions: mockSetSelectedTransactions,
+        clearSelectedTransactions: jest.fn(),
+    }),
 }));
 
 describe('useFilterSelectedTransactions', () => {
diff --git a/tests/unit/hooks/useSelectedTransactionsActions.test.ts b/tests/unit/hooks/useSelectedTransactionsActions.test.ts
index 43e19bcef45e..76d0751c02cb 100644
--- a/tests/unit/hooks/useSelectedTransactionsActions.test.ts
+++ b/tests/unit/hooks/useSelectedTransactionsActions.test.ts
@@ -64,12 +64,14 @@ const mockSelectedTransactions: SelectedTransactions = {};
 const mockCurrentSearchHash = 12345;
 
 jest.mock('@components/Search/SearchContext', () => ({
-    useSearchContext: () => ({
+    useSearchStateContext: () => ({
         selectedTransactionIDs: mockSelectedTransactionIDs,
-        clearSelectedTransactions: mockClearSelectedTransactions,
         currentSearchHash: mockCurrentSearchHash,
         selectedTransactions: mockSelectedTransactions,
     }),
+    useSearchActionsContext: () => ({
+        clearSelectedTransactions: mockClearSelectedTransactions,
+    }),
 }));
 
 const mockDuplicateTransactions: string[] = [];
