Skip to content
35 changes: 18 additions & 17 deletions src/pages/TransactionMerge/ConfirmationPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -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({
Expand All @@ -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)) {
Expand Down
Loading