From db07a8d2ec074e6400041ed646fb53200fbb38dd Mon Sep 17 00:00:00 2001 From: Ryan Teguh Date: Tue, 5 Aug 2025 21:15:30 +0800 Subject: [PATCH 1/3] Fix: Missing Split indicator next to Amount when card expense is split --- src/components/ReportActionItem/MoneyRequestView.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index be705ba50800..fd6156dd3f37 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -298,6 +298,9 @@ function MoneyRequestView({allReports, report, policy, shouldShowAnimatedBackgro if (formattedOriginalAmount) { amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.original')} ${formattedOriginalAmount}`; } + if (getOriginalTransactionWithSplitInfo(transaction).isExpenseSplit) { + amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.split')}`; + } if (isCancelled) { amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.canceled')}`; } From 07ff33b9af023bcc0752e2f588f4b471f8163926 Mon Sep 17 00:00:00 2001 From: Ryan Teguh Date: Thu, 14 Aug 2025 18:04:26 +0800 Subject: [PATCH 2/3] Fix: Missing Split indicator next to Amount when card expense is split --- .../ReportActionItem/MoneyRequestView.tsx | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index 780d75bb933e..69549baf531c 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -62,7 +62,6 @@ import { getCurrency, getDescription, getDistanceInMeters, - getOriginalTransactionWithSplitInfo, getReimbursable, getTagForDisplay, getTaxName, @@ -177,6 +176,21 @@ function MoneyRequestView({ const [transactionBackup] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_BACKUP}${getNonEmptyStringOnyxID(linkedTransactionID)}`, {canBeMissing: true}); const transactionViolations = useTransactionViolations(transaction?.transactionID); + const originalTransactionIDFromComment = transaction?.comment?.originalTransactionID; + const [originalTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${originalTransactionIDFromComment ?? ''}`, {canBeMissing: true}); + const isExpenseSplit = useMemo(() => { + const {originalTransactionID, source, splits} = transaction?.comment ?? {}; + + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing + if ((splits && splits.length > 0) || !originalTransactionID || source !== CONST.IOU.TYPE.SPLIT) { + return false; + } + + // To determine if it’s a split expense, we check for the presence of `comment.splits` on the original transaction. + // Split expenses won’t have `comment.splits`, while split bills will have them. + return !originalTransaction?.comment?.splits; + }, [transaction, originalTransaction]); + const { created: transactionDate, amount: transactionAmount, @@ -340,7 +354,7 @@ function MoneyRequestView({ if (formattedOriginalAmount) { amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.original')} ${formattedOriginalAmount}`; } - if (getOriginalTransactionWithSplitInfo(transaction).isExpenseSplit) { + if (isExpenseSplit) { amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.split')}`; } if (isCancelled) { @@ -350,7 +364,7 @@ function MoneyRequestView({ if (!isDistanceRequest && !isPerDiemRequest) { amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.cash')}`; } - if (getOriginalTransactionWithSplitInfo(transaction).isExpenseSplit) { + if (isExpenseSplit) { amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.split')}`; } if (isCancelled) { From 3f2cff15b0d529ac8676fe937c6ef6880fbb3c3d Mon Sep 17 00:00:00 2001 From: Ryan Teguh Date: Sat, 16 Aug 2025 02:07:46 +0800 Subject: [PATCH 3/3] Fix: Missing Split indicator next to Amount when card expense is split --- .../ReportActionItem/MoneyRequestView.tsx | 17 +++-------------- src/libs/TransactionUtils/index.ts | 14 +++++++++++++- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index c61e51569529..0b1467c52738 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -69,6 +69,7 @@ import { hasRoute as hasRouteTransactionUtils, isCardTransaction as isCardTransactionTransactionUtils, isDistanceRequest as isDistanceRequestTransactionUtils, + isExpenseSplit, isPerDiemRequest as isPerDiemRequestTransactionUtils, isScanning, shouldShowAttendees as shouldShowAttendeesTransactionUtils, @@ -177,18 +178,6 @@ function MoneyRequestView({ const originalTransactionIDFromComment = transaction?.comment?.originalTransactionID; const [originalTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${originalTransactionIDFromComment ?? ''}`, {canBeMissing: true}); - const isExpenseSplit = useMemo(() => { - const {originalTransactionID, source, splits} = transaction?.comment ?? {}; - - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - if ((splits && splits.length > 0) || !originalTransactionID || source !== CONST.IOU.TYPE.SPLIT) { - return false; - } - - // To determine if it’s a split expense, we check for the presence of `comment.splits` on the original transaction. - // Split expenses won’t have `comment.splits`, while split bills will have them. - return !originalTransaction?.comment?.splits; - }, [transaction, originalTransaction]); const { created: transactionDate, @@ -341,7 +330,7 @@ function MoneyRequestView({ if (formattedOriginalAmount) { amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.original')} ${formattedOriginalAmount}`; } - if (isExpenseSplit) { + if (isExpenseSplit(transaction, originalTransaction)) { amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.split')}`; } if (isCancelled) { @@ -351,7 +340,7 @@ function MoneyRequestView({ if (!isDistanceRequest && !isPerDiemRequest) { amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.cash')}`; } - if (isExpenseSplit) { + if (isExpenseSplit(transaction, originalTransaction)) { amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.split')}`; } if (isCancelled) { diff --git a/src/libs/TransactionUtils/index.ts b/src/libs/TransactionUtils/index.ts index 445e1a7ec51a..4ab47fc02151 100644 --- a/src/libs/TransactionUtils/index.ts +++ b/src/libs/TransactionUtils/index.ts @@ -1814,6 +1814,17 @@ function shouldShowRTERViolationMessage(transactions?: Transaction[]) { return transactions?.length === 1 && hasPendingUI(transactions?.at(0), getTransactionViolations(transactions?.at(0), allTransactionViolations)); } +function isExpenseSplit(transaction: OnyxEntry, originalTransaction: OnyxEntry): boolean { + const {originalTransactionID, source, splits} = transaction?.comment ?? {}; + + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing + if ((splits && splits.length > 0) || !originalTransactionID || source !== CONST.IOU.TYPE.SPLIT) { + return false; + } + + return !originalTransaction?.comment?.splits; +} + const getOriginalTransactionWithSplitInfo = (transaction: OnyxEntry) => { const {originalTransactionID, source, splits} = transaction?.comment ?? {}; const originalTransaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${originalTransactionID}`]; @@ -1828,7 +1839,7 @@ const getOriginalTransactionWithSplitInfo = (transaction: OnyxEntry // To determine if it’s a split bill or a split expense, we check for the presence of `comment.splits` on the original transaction. // Since both splits use `comment.originalTransaction`, but split expenses won’t have `comment.splits`. - return {isBillSplit: !!originalTransaction?.comment?.splits, isExpenseSplit: !originalTransaction?.comment?.splits, originalTransaction: originalTransaction ?? transaction}; + return {isBillSplit: !!originalTransaction?.comment?.splits, isExpenseSplit: isExpenseSplit(transaction, originalTransaction), originalTransaction: originalTransaction ?? transaction}; }; /** @@ -1975,6 +1986,7 @@ export { shouldShowViolation, isUnreportedAndHasInvalidDistanceRateTransaction, getTransactionViolationsOfTransaction, + isExpenseSplit, }; export type {TransactionChanges};