diff --git a/src/components/MoneyRequestConfirmationList.tsx b/src/components/MoneyRequestConfirmationList.tsx index a2a34e5e88e4..ca7fd0557eac 100755 --- a/src/components/MoneyRequestConfirmationList.tsx +++ b/src/components/MoneyRequestConfirmationList.tsx @@ -441,13 +441,16 @@ function MoneyRequestConfirmationList({ if (!isDistanceRequest || !transactionID) { return; } + if (isReadOnly) { + return; + } const amount = DistanceRequestUtils.getDistanceRequestAmount(distance, unit ?? CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES, rate ?? 0); setMoneyRequestAmount(transactionID, amount, currency ?? ''); isFirstUpdatedDistanceAmount.current = true; - }, [distance, rate, unit, transactionID, currency, isDistanceRequest]); + }, [distance, rate, isReadOnly, unit, transactionID, currency, isDistanceRequest]); useEffect(() => { - if (!shouldCalculateDistanceAmount || !transactionID) { + if (!shouldCalculateDistanceAmount || !transactionID || isReadOnly) { return; } @@ -459,7 +462,7 @@ function MoneyRequestConfirmationList({ if (isTypeSplit && !isPolicyExpenseChat && amount && transaction?.currency) { setSplitShares(transaction, amount, currency, participantAccountIDs); } - }, [shouldCalculateDistanceAmount, distanceRequestAmount, transactionID, currency, isTypeSplit, isPolicyExpenseChat, selectedParticipantsProp, transaction]); + }, [shouldCalculateDistanceAmount, isReadOnly, distanceRequestAmount, transactionID, currency, isTypeSplit, isPolicyExpenseChat, selectedParticipantsProp, transaction]); const previousTaxCode = usePrevious(transaction?.taxCode); @@ -780,7 +783,7 @@ function MoneyRequestConfirmationList({ }, [isTypeSplit, translate, payeePersonalDetails, getSplitSectionHeader, splitParticipants, selectedParticipants, isCreateExpenseFlow, isTestReceipt]); useEffect(() => { - if (!isDistanceRequest || (isMovingTransactionFromTrackExpense && !isPolicyExpenseChat) || !transactionID) { + if (!isDistanceRequest || (isMovingTransactionFromTrackExpense && !isPolicyExpenseChat) || !transactionID || isReadOnly) { // We don't want to recalculate the distance merchant when moving a transaction from Track Expense to a 1:1 chat, because the distance rate will be the same default P2P rate. // When moving to a policy chat (e.g. sharing with an accountant), we should recalculate the distance merchant with the policy's rate. return; @@ -809,6 +812,7 @@ function MoneyRequestConfirmationList({ transaction, transactionID, action, + isReadOnly, isMovingTransactionFromTrackExpense, ]); diff --git a/src/components/ReportActionItem/TransactionPreview/index.tsx b/src/components/ReportActionItem/TransactionPreview/index.tsx index f4fe3075e0ec..2d67be480a18 100644 --- a/src/components/ReportActionItem/TransactionPreview/index.tsx +++ b/src/components/ReportActionItem/TransactionPreview/index.tsx @@ -11,7 +11,7 @@ import ControlSelection from '@libs/ControlSelection'; import {convertToDisplayString} from '@libs/CurrencyUtils'; import {canUseTouchScreen} from '@libs/DeviceCapabilities'; import Navigation from '@libs/Navigation/Navigation'; -import {getIOUActionForReportID, getOriginalMessage, isMoneyRequestAction as isMoneyRequestActionReportActionsUtils} from '@libs/ReportActionsUtils'; +import {getOriginalMessage, isMoneyRequestAction as isMoneyRequestActionReportActionsUtils} from '@libs/ReportActionsUtils'; import {getTransactionDetails} from '@libs/ReportUtils'; import {getReviewNavigationRoute} from '@libs/TransactionPreviewUtils'; import {getOriginalTransactionWithSplitInfo, isCardTransaction, removeSettledAndApprovedTransactions} from '@libs/TransactionUtils'; @@ -83,20 +83,16 @@ function TransactionPreview(props: TransactionPreviewProps) { Navigation.navigate(getReviewNavigationRoute(route, transaction, duplicates)); }, [route, transaction, duplicates]); - let transactionPreview = transaction; + const transactionPreview = transaction; const {originalTransaction, isBillSplit} = getOriginalTransactionWithSplitInfo(transaction); - if (isBillSplit) { - transactionPreview = originalTransaction; - } + const iouAction = action; // See description of `transactionRawAmount` prop for more context // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing const transactionRawAmount = (transaction?.modifiedAmount || transaction?.amount) ?? 0; - const iouAction = isBillSplit && originalTransaction ? (getIOUActionForReportID(chatReportID, originalTransaction.transactionID) ?? action) : action; - const shouldDisableOnPress = isBillSplit && isEmptyObject(transaction); const isTransactionMadeWithCard = isCardTransaction(transaction); const showCashOrCardTranslation = isTransactionMadeWithCard ? 'iou.card' : 'iou.cash'; @@ -117,7 +113,7 @@ function TransactionPreview(props: TransactionPreviewProps) { /* eslint-disable-next-line react/jsx-props-no-spreading */ {...props} action={iouAction} - isBillSplit={isBillSplit} + isBillSplit={isBillSplit && !transaction?.comment?.originalTransactionID} chatReport={chatReport} personalDetails={personalDetails} transaction={transactionPreview} diff --git a/src/pages/home/report/PureReportActionItem.tsx b/src/pages/home/report/PureReportActionItem.tsx index 5b78faad7dbd..3ff3ba947cbf 100644 --- a/src/pages/home/report/PureReportActionItem.tsx +++ b/src/pages/home/report/PureReportActionItem.tsx @@ -841,9 +841,7 @@ function PureReportActionItem({ // Show the preview for when expense is present if (isIOURequestReportAction(action)) { - const isSplitInGroupChat = moneyRequestActionType === CONST.IOU.REPORT_ACTION_TYPE.SPLIT && report?.chatType === CONST.REPORT.CHAT_TYPE.GROUP; const isSplitScanWithNoAmount = moneyRequestActionType === CONST.IOU.REPORT_ACTION_TYPE.SPLIT && moneyRequestOriginalMessage?.amount === 0; - const shouldShowSplitPreview = isSplitInGroupChat || isSplitScanWithNoAmount; const chatReportID = moneyRequestOriginalMessage?.IOUReportID ? report?.chatReportID : reportID; // There is no single iouReport for bill splits, so only 1:1 requests require an iouReportID const iouReportID = moneyRequestOriginalMessage?.IOUReportID?.toString(); @@ -866,6 +864,8 @@ function PureReportActionItem({ ); if (report?.type === CONST.REPORT.TYPE.CHAT) { + const isSplitBill = moneyRequestActionType === CONST.IOU.REPORT_ACTION_TYPE.SPLIT; + const shouldShowSplitPreview = isSplitBill || isSplitScanWithNoAmount; if (report.chatType === CONST.REPORT.CHAT_TYPE.SELF_DM || shouldShowSplitPreview) { children = (