diff --git a/src/components/ReportActionItem/TransactionPreview/index.tsx b/src/components/ReportActionItem/TransactionPreview/index.tsx index b6becbadd403..e44da7fa1a7d 100644 --- a/src/components/ReportActionItem/TransactionPreview/index.tsx +++ b/src/components/ReportActionItem/TransactionPreview/index.tsx @@ -1,7 +1,6 @@ import {useRoute} from '@react-navigation/native'; import React, {useCallback, useMemo} from 'react'; import type {GestureResponderEvent} from 'react-native'; -import type {OnyxEntry} from 'react-native-onyx'; import PressableWithoutFeedback from '@components/Pressable/PressableWithoutFeedback'; import {showContextMenuForReport} from '@components/ShowContextMenuContext'; import useLocalize from '@hooks/useLocalize'; @@ -12,8 +11,8 @@ import {convertToDisplayString} from '@libs/CurrencyUtils'; import {canUseTouchScreen} from '@libs/DeviceCapabilities'; import {getOriginalMessage, isMoneyRequestAction as isMoneyRequestActionReportActionsUtils} from '@libs/ReportActionsUtils'; import {getTransactionDetails} from '@libs/ReportUtils'; -import {getReviewNavigationRoute} from '@libs/TransactionPreviewUtils'; -import {getTransaction, isCardTransaction, removeSettledAndApprovedTransactions} from '@libs/TransactionUtils'; +import {getOriginalTransactionIfBillIsSplit, getReviewNavigationRoute} from '@libs/TransactionPreviewUtils'; +import {isCardTransaction, removeSettledAndApprovedTransactions} from '@libs/TransactionUtils'; import Navigation from '@navigation/Navigation'; import type {PlatformStackRouteProp} from '@navigation/PlatformStackNavigation/types'; import type {TransactionDuplicateNavigatorParamList} from '@navigation/types'; @@ -22,28 +21,10 @@ import {clearIOUError} from '@userActions/Report'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import type SCREENS from '@src/SCREENS'; -import type {Transaction} from '@src/types/onyx'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; import TransactionPreviewContent from './TransactionPreviewContent'; import type {TransactionPreviewProps} from './types'; -const getOriginalTransactionIfBillIsSplit = (transaction: OnyxEntry) => { - const {originalTransactionID, source, splits} = transaction?.comment ?? {}; - - // If splits property is defined in the transaction, it is actually an original transaction - if (splits && splits.length > 0) { - return {isBillSplit: true, originalTransaction: transaction}; - } - - if (!originalTransactionID || source !== CONST.IOU.TYPE.SPLIT) { - return {isBillSplit: false, originalTransaction: transaction}; - } - - const originalTransaction = getTransaction(originalTransactionID); - - return {isBillSplit: !!originalTransaction, originalTransaction: originalTransaction ?? transaction}; -}; - function TransactionPreview(props: TransactionPreviewProps) { const {translate} = useLocalize(); const { diff --git a/src/libs/TransactionPreviewUtils.ts b/src/libs/TransactionPreviewUtils.ts index 9285f56f0561..efa97350c919 100644 --- a/src/libs/TransactionPreviewUtils.ts +++ b/src/libs/TransactionPreviewUtils.ts @@ -17,6 +17,7 @@ import StringUtils from './StringUtils'; import { compareDuplicateTransactionFields, getFormattedCreated, + getTransaction, hasMissingSmartscanFields, hasNoticeTypeViolation, hasPendingRTERViolation, @@ -108,6 +109,22 @@ type TranslationPathOrText = { const dotSeparator: TranslationPathOrText = {text: ` ${CONST.DOT_SEPARATOR} `}; +const getOriginalTransactionIfBillIsSplit = (transaction: OnyxEntry) => { + const {originalTransactionID, source, splits} = transaction?.comment ?? {}; + + if (splits && splits.length > 0) { + return {isBillSplit: true, originalTransaction: getTransaction(originalTransactionID) ?? transaction}; + } + + if (!originalTransactionID || source !== CONST.IOU.TYPE.SPLIT) { + return {isBillSplit: false, originalTransaction: transaction}; + } + + const originalTransaction = getTransaction(originalTransactionID); + + return {isBillSplit: !!originalTransaction, originalTransaction: originalTransaction ?? transaction}; +}; + function getTransactionPreviewTextAndTranslationPaths({ iouReport, transaction, @@ -224,7 +241,8 @@ function getTransactionPreviewTextAndTranslationPaths({ } } - let displayAmountText: TranslationPathOrText = isScanning ? {translationPath: 'iou.receiptStatusTitle'} : {text: convertToDisplayString(requestAmount, requestCurrency)}; + const amount = isBillSplit ? getOriginalTransactionIfBillIsSplit(transaction).originalTransaction?.amount : requestAmount; + let displayAmountText: TranslationPathOrText = isScanning ? {translationPath: 'iou.receiptStatusTitle'} : {text: convertToDisplayString(amount, requestCurrency)}; if (isFetchingWaypoints && !requestAmount) { displayAmountText = {translationPath: 'iou.fieldPending'}; } @@ -317,5 +335,5 @@ function createTransactionPreviewConditionals({ }; } -export {getReviewNavigationRoute, getIOUData, getTransactionPreviewTextAndTranslationPaths, createTransactionPreviewConditionals}; +export {getReviewNavigationRoute, getIOUData, getTransactionPreviewTextAndTranslationPaths, createTransactionPreviewConditionals, getOriginalTransactionIfBillIsSplit}; export type {TranslationPathOrText}; diff --git a/src/libs/__mocks__/TransactionPreviewUtils.ts b/src/libs/__mocks__/TransactionPreviewUtils.ts index 50391898c44e..064d4f0a0a85 100644 --- a/src/libs/__mocks__/TransactionPreviewUtils.ts +++ b/src/libs/__mocks__/TransactionPreviewUtils.ts @@ -30,5 +30,5 @@ function getIOUData( return undefined; } -export {getTransactionPreviewTextAndTranslationPaths, createTransactionPreviewConditionals, getReviewNavigationRoute} from '../TransactionPreviewUtils'; +export {getTransactionPreviewTextAndTranslationPaths, createTransactionPreviewConditionals, getReviewNavigationRoute, getOriginalTransactionIfBillIsSplit} from '../TransactionPreviewUtils'; export {getIOUData};