@@ -13,7 +13,16 @@ import DateUtils from './DateUtils';
1313import type { PlatformStackRouteProp } from './Navigation/PlatformStackNavigation/types' ;
1414import type { TransactionDuplicateNavigatorParamList } from './Navigation/types' ;
1515import { getOriginalMessage , isMessageDeleted , isMoneyRequestAction } from './ReportActionsUtils' ;
16- import { hasActionsWithErrors , hasReceiptError , hasReportViolations , isPaidGroupPolicy , isPaidGroupPolicyExpenseReport , isReportApproved , isReportOwner , isSettled } from './ReportUtils' ;
16+ import {
17+ hasActionWithErrorsForTransaction ,
18+ hasReceiptError ,
19+ hasReportViolations ,
20+ isPaidGroupPolicy ,
21+ isPaidGroupPolicyExpenseReport ,
22+ isReportApproved ,
23+ isReportOwner ,
24+ isSettled ,
25+ } from './ReportUtils' ;
1726import type { TransactionDetails } from './ReportUtils' ;
1827import StringUtils from './StringUtils' ;
1928import {
@@ -130,11 +139,17 @@ function getViolationTranslatePath(violations: OnyxTypes.TransactionViolations,
130139 * it returns an empty array. It identifies the latest error in each action and filters out duplicates to
131140 * ensure only unique error messages are returned.
132141 */
133- function getUniqueActionErrors ( reportActions : OnyxTypes . ReportActions ) {
142+ function getUniqueActionErrorsForTransaction ( reportActions : OnyxTypes . ReportActions , transaction : OnyxTypes . Transaction | undefined ) {
134143 const reportErrors = Object . values ( reportActions ) . map ( ( reportAction ) => {
135144 const errors = reportAction . errors ?? { } ;
136145 const key = Object . keys ( errors ) . sort ( ) . reverse ( ) . at ( 0 ) ?? '' ;
137146 const error = errors [ key ] ;
147+ if ( isMoneyRequestAction ( reportAction ) && getOriginalMessage ( reportAction ) ?. IOUTransactionID ) {
148+ if ( getOriginalMessage ( reportAction ) ?. IOUTransactionID === transaction ?. transactionID ) {
149+ return typeof error === 'string' ? error : '' ;
150+ }
151+ return '' ;
152+ }
138153 return typeof error === 'string' ? error : '' ;
139154 } ) ;
140155
@@ -175,7 +190,7 @@ function getTransactionPreviewTextAndTranslationPaths({
175190 const isTransactionScanning = isScanning ( transaction ) ;
176191 const hasFieldErrors = hasMissingSmartscanFields ( transaction ) ;
177192 const hasViolationsOfTypeNotice = hasNoticeTypeViolation ( transaction , violations , true ) && isPaidGroupPolicy ( iouReport ) ;
178- const hasActionWithErrors = hasActionsWithErrors ( iouReport ?. reportID ) ;
193+ const hasActionWithErrors = hasActionWithErrorsForTransaction ( iouReport ?. reportID , transaction ) ;
179194
180195 const { amount : requestAmount , currency : requestCurrency } = transactionDetails ;
181196
@@ -211,7 +226,7 @@ function getTransactionPreviewTextAndTranslationPaths({
211226 }
212227
213228 if ( RBRMessage === undefined && hasActionWithErrors && ! ! reportActions ) {
214- const actionsWithErrors = getUniqueActionErrors ( reportActions ) ;
229+ const actionsWithErrors = getUniqueActionErrorsForTransaction ( reportActions , transaction ) ;
215230 RBRMessage = actionsWithErrors . length > 1 ? { translationPath : 'violations.reviewRequired' } : { text : actionsWithErrors . at ( 0 ) } ;
216231 }
217232
@@ -334,7 +349,7 @@ function createTransactionPreviewConditionals({
334349 hasWarningTypeViolation ( transaction , violations , true ) ||
335350 hasViolation ( transaction , violations , true ) ;
336351 const hasErrorOrOnHold = hasFieldErrors || ( ! isFullySettled && ! isFullyApproved && isTransactionOnHold ) ;
337- const hasReportViolationsOrActionErrors = ( isReportOwner ( iouReport ) && hasReportViolations ( iouReport ?. reportID ) ) || hasActionsWithErrors ( iouReport ?. reportID ) ;
352+ const hasReportViolationsOrActionErrors = ( isReportOwner ( iouReport ) && hasReportViolations ( iouReport ?. reportID ) ) || hasActionWithErrorsForTransaction ( iouReport ?. reportID , transaction ) ;
338353 const shouldShowRBR = hasAnyViolations || hasErrorOrOnHold || hasReportViolationsOrActionErrors || hasReceiptError ( transaction ) ;
339354
340355 // When there are no settled transactions in duplicates, show the "Keep this one" button
@@ -372,6 +387,6 @@ export {
372387 getTransactionPreviewTextAndTranslationPaths ,
373388 createTransactionPreviewConditionals ,
374389 getViolationTranslatePath ,
375- getUniqueActionErrors ,
390+ getUniqueActionErrorsForTransaction ,
376391} ;
377392export type { TranslationPathOrText } ;
0 commit comments