diff --git a/src/pages/ReportDetailsPage.tsx b/src/pages/ReportDetailsPage.tsx index 353b128b7f61..288f6c241be3 100644 --- a/src/pages/ReportDetailsPage.tsx +++ b/src/pages/ReportDetailsPage.tsx @@ -637,6 +637,9 @@ function ReportDetailsPage({policies, report, session, personalDetails}: ReportD ); + // A flag to indicate whether the user choose to delete the transaction or not + const isTransactionDeleted = useRef(false); + // Where to go back after deleting the transaction and its report. It's empty if the transaction report isn't deleted. const navigateBackToAfterDelete = useRef(); const deleteTransaction = useCallback(() => { @@ -653,11 +656,13 @@ function ReportDetailsPage({policies, report, session, personalDetails}: ReportD } if (ReportActionsUtils.isTrackExpenseAction(requestParentReportAction)) { - navigateBackToAfterDelete.current = IOU.deleteTrackExpense(moneyRequestReport?.reportID ?? '', iouTransactionID, requestParentReportAction, true); + navigateBackToAfterDelete.current = IOU.deleteTrackExpense(moneyRequestReport?.reportID ?? '', iouTransactionID, requestParentReportAction, isSingleTransactionView); } else { - navigateBackToAfterDelete.current = IOU.deleteMoneyRequest(iouTransactionID, requestParentReportAction, true); + navigateBackToAfterDelete.current = IOU.deleteMoneyRequest(iouTransactionID, requestParentReportAction, isSingleTransactionView); } - }, [caseID, iouTransactionID, moneyRequestReport?.reportID, report, requestParentReportAction]); + + isTransactionDeleted.current = true; + }, [caseID, iouTransactionID, moneyRequestReport?.reportID, report, requestParentReportAction, isSingleTransactionView]); return ( @@ -746,7 +751,18 @@ function ReportDetailsPage({policies, report, session, personalDetails}: ReportD isVisible={isDeleteModalVisible} onConfirm={deleteTransaction} onCancel={() => setIsDeleteModalVisible(false)} - onModalHide={() => ReportUtils.navigateBackAfterDeleteTransaction(navigateBackToAfterDelete.current)} + onModalHide={() => { + // We use isTransactionDeleted to know if the modal hides because the user deletes the transaction. + if (!isTransactionDeleted.current) { + return; + } + + if (!navigateBackToAfterDelete.current) { + Navigation.dismissModal(); + } else { + ReportUtils.navigateBackAfterDeleteTransaction(navigateBackToAfterDelete.current); + } + }} prompt={caseID === CASES.DEFAULT ? translate('task.deleteConfirmation') : translate('iou.deleteConfirmation')} confirmText={translate('common.delete')} cancelText={translate('common.cancel')}