diff --git a/src/pages/TransactionMerge/ConfirmationPage.tsx b/src/pages/TransactionMerge/ConfirmationPage.tsx index 832260cf6518..ddb69a59935b 100644 --- a/src/pages/TransactionMerge/ConfirmationPage.tsx +++ b/src/pages/TransactionMerge/ConfirmationPage.tsx @@ -24,6 +24,7 @@ import isSearchTopmostFullScreenRoute from '@libs/Navigation/helpers/isSearchTop import Navigation from '@libs/Navigation/Navigation'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; import type {MergeTransactionNavigatorParamList} from '@libs/Navigation/types'; +import {findSelfDMReportID} from '@libs/ReportUtils'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; @@ -72,7 +73,7 @@ function ConfirmationPage({route}: ConfirmationPageProps) { if (!targetTransaction || !mergeTransaction || !sourceTransaction) { return; } - const reportID = mergeTransaction.reportID; + const reportID = mergeTransaction.reportID === CONST.REPORT.UNREPORTED_REPORT_ID ? (findSelfDMReportID() ?? CONST.REPORT.UNREPORTED_REPORT_ID) : mergeTransaction.reportID; setIsMergingExpenses(true); mergeTransactionRequest({ @@ -95,23 +96,23 @@ function ConfirmationPage({route}: ConfirmationPageProps) { const reportIDToDismiss = reportID !== CONST.REPORT.UNREPORTED_REPORT_ID ? reportID : undefined; - // If we're on search, dismiss the modal and stay on search - if (!isOnSearch && reportIDToDismiss && reportID !== targetTransaction.reportID) { - // Navigate to search money report screen if we're on Reports - if (isSearchTopmostFullScreenRoute()) { - // Close the current modal screen - Navigation.dismissModal(); - // Ensure the dismiss completes first - Navigation.setNavigationActionToMicrotaskQueue(() => { - // Navigate to the money request report in search results - Navigation.navigate(ROUTES.SEARCH_MONEY_REQUEST_REPORT.getRoute({reportID: reportIDToDismiss})); - }); - } else { - Navigation.dismissModalWithReport({reportID: reportIDToDismiss}); - } - } else { - Navigation.dismissToSuperWideRHP(); + const searchReportIDToOpen = targetTransactionThreadReportID ?? reportIDToDismiss; + + // If we're in search (or the topmost route is search), dismiss the modal and open the expense in the RHP + if ((isOnSearch || isSearchTopmostFullScreenRoute()) && searchReportIDToOpen) { + Navigation.dismissModal(); + Navigation.setNavigationActionToMicrotaskQueue(() => { + Navigation.navigate(ROUTES.SEARCH_REPORT.getRoute({reportID: searchReportIDToOpen})); + }); + return; + } + + if (reportIDToDismiss && reportID !== targetTransaction.reportID) { + Navigation.dismissModalWithReport({reportID: reportIDToDismiss}); + return; } + + Navigation.dismissToSuperWideRHP(); }; if (isLoadingOnyxValue(mergeTransactionMetadata)) {