Skip to content

Commit 7e56de1

Browse files
committed
fix: Unexpected error displayed on the good expense
1 parent 630d363 commit 7e56de1

2 files changed

Lines changed: 20 additions & 6 deletions

File tree

src/libs/ReportUtils.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9694,14 +9694,22 @@ function getTripIDFromTransactionParentReportID(transactionParentReportID: strin
96949694
/**
96959695
* Checks if report contains actions with errors
96969696
*/
9697-
function hasActionsWithErrors(reportID: string | undefined): boolean {
9697+
function hasActionsWithErrors(reportID: string | undefined, transaction: Transaction | undefined): boolean {
96989698
if (!reportID) {
96999699
return false;
97009700
}
97019701
const reportActions = allReportActions?.[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${reportID}`] ?? {};
97029702
return Object.values(reportActions)
97039703
.filter(Boolean)
9704-
.some((action) => !isEmptyObject(action.errors));
9704+
.some((action) => {
9705+
if (isMoneyRequestAction(action) && getOriginalMessage(action)?.IOUTransactionID) {
9706+
if (getOriginalMessage(action)?.IOUTransactionID === transaction?.transactionID) {
9707+
return !isEmptyObject(action.errors);
9708+
}
9709+
return false;
9710+
}
9711+
return !isEmptyObject(action.errors);
9712+
});
97059713
}
97069714

97079715
function isNonAdminOrOwnerOfPolicyExpenseChat(report: OnyxInputOrEntry<Report>, policy: OnyxInputOrEntry<Policy>): boolean {

src/libs/TransactionPreviewUtils.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,11 +130,17 @@ function getViolationTranslatePath(violations: OnyxTypes.TransactionViolations,
130130
* it returns an empty array. It identifies the latest error in each action and filters out duplicates to
131131
* ensure only unique error messages are returned.
132132
*/
133-
function getUniqueActionErrors(reportActions: OnyxTypes.ReportActions) {
133+
function getUniqueActionErrors(reportActions: OnyxTypes.ReportActions, transaction: OnyxTypes.Transaction | undefined) {
134134
const reportErrors = Object.values(reportActions).map((reportAction) => {
135135
const errors = reportAction.errors ?? {};
136136
const key = Object.keys(errors).sort().reverse().at(0) ?? '';
137137
const error = errors[key];
138+
if (isMoneyRequestAction(reportAction) && getOriginalMessage(reportAction)?.IOUTransactionID) {
139+
if (getOriginalMessage(reportAction)?.IOUTransactionID === transaction?.transactionID) {
140+
return typeof error === 'string' ? error : '';
141+
}
142+
return '';
143+
}
138144
return typeof error === 'string' ? error : '';
139145
});
140146

@@ -175,7 +181,7 @@ function getTransactionPreviewTextAndTranslationPaths({
175181
const isTransactionScanning = isScanning(transaction);
176182
const hasFieldErrors = hasMissingSmartscanFields(transaction);
177183
const hasViolationsOfTypeNotice = hasNoticeTypeViolation(transaction, violations, true) && isPaidGroupPolicy(iouReport);
178-
const hasActionWithErrors = hasActionsWithErrors(iouReport?.reportID);
184+
const hasActionWithErrors = hasActionsWithErrors(iouReport?.reportID, transaction);
179185

180186
const {amount: requestAmount, currency: requestCurrency} = transactionDetails;
181187

@@ -207,7 +213,7 @@ function getTransactionPreviewTextAndTranslationPaths({
207213
}
208214

209215
if (RBRMessage === undefined && hasActionWithErrors && !!reportActions) {
210-
const actionsWithErrors = getUniqueActionErrors(reportActions);
216+
const actionsWithErrors = getUniqueActionErrors(reportActions, transaction);
211217
RBRMessage = actionsWithErrors.length > 1 ? {translationPath: 'violations.reviewRequired'} : {text: actionsWithErrors.at(0)};
212218
}
213219

@@ -330,7 +336,7 @@ function createTransactionPreviewConditionals({
330336
hasWarningTypeViolation(transaction, violations, true) ||
331337
hasViolation(transaction, violations, true);
332338
const hasErrorOrOnHold = hasFieldErrors || (!isFullySettled && !isFullyApproved && isTransactionOnHold);
333-
const hasReportViolationsOrActionErrors = (isReportOwner(iouReport) && hasReportViolations(iouReport?.reportID)) || hasActionsWithErrors(iouReport?.reportID);
339+
const hasReportViolationsOrActionErrors = (isReportOwner(iouReport) && hasReportViolations(iouReport?.reportID)) || hasActionsWithErrors(iouReport?.reportID, transaction);
334340
const shouldShowRBR = hasAnyViolations || hasErrorOrOnHold || hasReportViolationsOrActionErrors;
335341

336342
// When there are no settled transactions in duplicates, show the "Keep this one" button

0 commit comments

Comments
 (0)