Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
64174e1
removed getTransaction
FitseTLT May 20, 2025
13fce9a
Merge branch 'main' into fix-remove-getTransaction
FitseTLT May 20, 2025
9b94f08
fix ts
FitseTLT May 20, 2025
25e9580
Merge branch 'main' into fix-remove-getTransaction
FitseTLT May 21, 2025
194d6d3
fix ts
FitseTLT May 21, 2025
9936005
fix lint
FitseTLT May 21, 2025
3293bc2
fix lint
FitseTLT May 21, 2025
b3ada49
Merge branch 'main' into fix-remove-getTransaction
FitseTLT May 22, 2025
ffed195
Added enforce action export test
FitseTLT May 22, 2025
b299d75
Merge branch 'main' into fix-remove-getTransaction
FitseTLT May 23, 2025
96dd3d6
fix ts error
FitseTLT May 23, 2025
79ce9b1
Merge branch 'main' into fix-remove-getTransaction
FitseTLT May 23, 2025
be98b32
fix lint
FitseTLT May 23, 2025
2d65961
Merge branch 'main' into fix-remove-getTransaction
FitseTLT May 26, 2025
253094a
update on comments
FitseTLT May 26, 2025
c6dbe81
fix lint
FitseTLT May 26, 2025
f8486d9
Merge branch 'main' into fix-remove-getTransaction
FitseTLT May 28, 2025
a12eb57
fix test
FitseTLT May 28, 2025
df47ce0
fix ts
FitseTLT May 28, 2025
e61350a
Revert "fix ts"
FitseTLT May 29, 2025
deb9de7
take allTransactions as a param
FitseTLT May 29, 2025
d6e8246
minor update
FitseTLT May 29, 2025
358e328
fix on comment
FitseTLT May 29, 2025
08c98ab
Merge branch 'main' into fix-remove-getTransaction
FitseTLT May 29, 2025
172ec3b
Merge branch 'main' into fix-remove-getTransaction
FitseTLT May 29, 2025
7b7ec83
Merge branch 'main' into fix-remove-getTransaction
FitseTLT Jun 3, 2025
e40566d
fix ts
FitseTLT Jun 3, 2025
6addc79
Merge branch 'main' into fix-remove-getTransaction
FitseTLT Jun 3, 2025
a8276f3
Merge branch 'main' into fix-remove-getTransaction
FitseTLT Jun 4, 2025
32c8337
Merge branch 'main' into fix-remove-getTransaction
FitseTLT Jun 4, 2025
6da7e95
WIP: 838f01dea7f Merge pull request #63489 from ishpaul777/fix-import
FitseTLT Jun 5, 2025
6c99ecf
add import
FitseTLT Jun 5, 2025
3cdbd5c
minor updates
FitseTLT Jun 5, 2025
0f389eb
Merge branch 'main' into fix-remove-getTransaction
FitseTLT Jun 9, 2025
320c179
Merge branch 'main' into fix-remove-getTransaction
FitseTLT Jun 10, 2025
f0a6c02
minor fix
FitseTLT Jun 10, 2025
85333ac
refactor code to use already passed duplicates
FitseTLT Jun 10, 2025
c768ea6
Merge branch 'main' into fix-remove-getTransaction
FitseTLT Jun 17, 2025
7b4b126
Merge branch 'main' into fix-remove-getTransaction
FitseTLT Jun 25, 2025
1adb2a8
resolve conflict
FitseTLT Jul 2, 2025
11466fd
remove unnecessary param
FitseTLT Jul 2, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/components/MoneyReportHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ function MoneyReportHeader({
}, [reportPDFFilename, translate]);

// Check if there is pending rter violation in all transactionViolations with given transactionIDs.
const hasAllPendingRTERViolations = allHavePendingRTERViolation(transactionIDs, violations);
const hasAllPendingRTERViolations = allHavePendingRTERViolation(transactions, violations);
// Check if user should see broken connection violation warning.
const shouldShowBrokenConnectionViolation = shouldShowBrokenConnectionViolationForMultipleTransactions(transactionIDs, moneyRequestReport, policy, violations);
const hasOnlyHeldExpenses = hasOnlyHeldExpensesReportUtils(moneyRequestReport?.reportID);
Expand Down Expand Up @@ -401,7 +401,7 @@ function MoneyReportHeader({
};

const getFirstDuplicateThreadID = (reportTransactions: OnyxTypes.Transaction[], allReportActions: OnyxTypes.ReportAction[]) => {
const duplicateTransaction = reportTransactions.find((reportTransaction) => isDuplicate(reportTransaction.transactionID));
const duplicateTransaction = reportTransactions.find((reportTransaction) => isDuplicate(reportTransaction));
Comment thread
FitseTLT marked this conversation as resolved.
if (!duplicateTransaction) {
return null;
}
Expand Down
2 changes: 1 addition & 1 deletion src/components/MoneyRequestHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre
const theme = useTheme();
const {translate} = useLocalize();
const isOnHold = isOnHoldTransactionUtils(transaction);
const isDuplicate = isDuplicateTransactionUtils(transaction?.transactionID);
const isDuplicate = isDuplicateTransactionUtils(transaction);
const reportID = report?.reportID;
const {removeTransaction} = useSearchContext();

Expand Down
2 changes: 1 addition & 1 deletion src/components/ReportActionItem/MoneyRequestView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -540,7 +540,7 @@ function MoneyRequestView({report, shouldShowAnimatedBackground, readonly = fals
clearAllRelatedReportActionErrors(report.reportID, parentReportAction);
return;
}
revert(transaction?.transactionID ?? linkedTransactionID, getLastModifiedExpense(report?.reportID));
revert(transaction, getLastModifiedExpense(report?.reportID));
clearError(transaction.transactionID);
clearAllRelatedReportActionErrors(report.reportID, parentReportAction);
}, [transaction, chatReport, parentReportAction, linkedTransactionID, report?.reportID]);
Expand Down
17 changes: 10 additions & 7 deletions src/components/ReportActionItem/TransactionPreview/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ import useTransactionViolations from '@hooks/useTransactionViolations';
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 {getTransactionDetails} from '@libs/ReportUtils';
import {getReviewNavigationRoute} from '@libs/TransactionPreviewUtils';
import {getOriginalTransactionWithSplitInfo, isCardTransaction, removeSettledAndApprovedTransactions} from '@libs/TransactionUtils';
import Navigation from '@navigation/Navigation';
import type {PlatformStackRouteProp} from '@navigation/PlatformStackNavigation/types';
import type {TransactionDuplicateNavigatorParamList} from '@navigation/types';
import {clearWalletTermsError} from '@userActions/PaymentMethods';
Expand Down Expand Up @@ -43,7 +43,6 @@ function TransactionPreview(props: TransactionPreviewProps) {

const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${iouReportID}`, {canBeMissing: true});
const route = useRoute<PlatformStackRouteProp<TransactionDuplicateNavigatorParamList, typeof SCREENS.TRANSACTION_DUPLICATE.REVIEW>>();
const [transactionThreadReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${route.params?.threadReportID}`, {canBeMissing: true});
const isMoneyRequestAction = isMoneyRequestActionReportActionsUtils(action);
const transactionID = transactionIDFromProps ?? (isMoneyRequestAction ? getOriginalMessage(action)?.IOUTransactionID : null);
const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, {canBeMissing: true});
Expand All @@ -54,10 +53,14 @@ function TransactionPreview(props: TransactionPreviewProps) {
const [personalDetails] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {canBeMissing: true});

// Get transaction violations for given transaction id from onyx, find duplicated transactions violations and get duplicates
const allDuplicates = useMemo(() => violations?.find((violation) => violation.name === CONST.VIOLATIONS.DUPLICATED_TRANSACTION)?.data?.duplicates ?? [], [violations]);
const duplicates = useMemo(() => removeSettledAndApprovedTransactions(allDuplicates), [allDuplicates]);
const allDuplicateIDs = useMemo(() => violations?.find((violation) => violation.name === CONST.VIOLATIONS.DUPLICATED_TRANSACTION)?.data?.duplicates ?? [], [violations]);
const [allDuplicates] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}`, {
selector: (allTransactions) => allDuplicateIDs.map((id) => allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${id}`]),
canBeMissing: true,
});
const duplicates = useMemo(() => removeSettledAndApprovedTransactions(allDuplicates ?? []), [allDuplicates]);
const sessionAccountID = session?.accountID;
const areThereDuplicates = allDuplicates.length > 0 && duplicates.length > 0 && allDuplicates.length === duplicates.length;
const areThereDuplicates = allDuplicateIDs.length > 0 && duplicates.length > 0 && allDuplicateIDs.length === duplicates.length;

const transactionDetails = useMemo(() => getTransactionDetails(transaction), [transaction]);
const {amount: requestAmount, currency: requestCurrency} = transactionDetails ?? {};
Expand All @@ -75,8 +78,8 @@ function TransactionPreview(props: TransactionPreviewProps) {
}, [chatReportID]);

const navigateToReviewFields = useCallback(() => {
Navigation.navigate(getReviewNavigationRoute(route, transactionThreadReport, transaction, duplicates));
}, [duplicates, transactionThreadReport, route, transaction]);
Navigation.navigate(getReviewNavigationRoute(route, transaction, duplicates));
}, [route, transaction, duplicates]);

let transactionPreview = transaction;

Expand Down
6 changes: 3 additions & 3 deletions src/hooks/useSelectedTransactionsActions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -195,9 +195,9 @@ function useSelectedTransactionsActions({
});
}

const canAllSelectedTransactionsBeRemoved = selectedTransactionIDs.every((transactionID) => {
const canRemoveTransaction = canDeleteCardTransactionByLiabilityType(transactionID);
const action = getIOUActionForTransactionID(reportActions, transactionID);
const canAllSelectedTransactionsBeRemoved = Object.values(selectedTransactions).every((transaction) => {
const canRemoveTransaction = canDeleteCardTransactionByLiabilityType(transaction);
const action = getIOUActionForTransactionID(reportActions, transaction.transactionID);
const isActionDeleted = isDeletedAction(action);
const isIOUActionOwner = typeof action?.actorAccountID === 'number' && typeof session?.accountID === 'number' && action.actorAccountID === session?.accountID;

Expand Down
2 changes: 1 addition & 1 deletion src/libs/ReportPreviewActionUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ function canReview(report: Report, violations: OnyxCollection<TransactionViolati
// We handle RTER violations independently because those are not configured via policy workflows
const isAdmin = isPolicyAdmin(policy);
const transactionIDs = transactions?.map((transaction) => transaction.transactionID) ?? [];
const hasAllPendingRTERViolations = allHavePendingRTERViolation(transactionIDs, violations);
const hasAllPendingRTERViolations = allHavePendingRTERViolation(transactions, violations);
const shouldShowBrokenConnectionViolation = shouldShowBrokenConnectionViolationForMultipleTransactions(transactionIDs, report, policy, violations);

if (hasAllPendingRTERViolations || (shouldShowBrokenConnectionViolation && (!isAdmin || isSubmitter) && !isReportApproved({report}) && !isReportManuallyReimbursed(report))) {
Expand Down
4 changes: 2 additions & 2 deletions src/libs/ReportPrimaryActionUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ function isRemoveHoldAction(report: Report, chatReport: OnyxEntry<Report>, repor
}

function isReviewDuplicatesAction(report: Report, reportTransactions: Transaction[], policy?: Policy) {
const hasDuplicates = reportTransactions.some((transaction) => isDuplicate(transaction.transactionID));
const hasDuplicates = reportTransactions.some((transaction) => isDuplicate(transaction));

if (!hasDuplicates) {
return false;
Expand Down Expand Up @@ -279,7 +279,7 @@ function isMarkAsCashAction(report: Report, reportTransactions: Transaction[], v
}

const transactionIDs = reportTransactions.map((t) => t.transactionID);
const hasAllPendingRTERViolations = allHavePendingRTERViolation(transactionIDs, violations);
const hasAllPendingRTERViolations = allHavePendingRTERViolation(reportTransactions, violations);

if (hasAllPendingRTERViolations) {
return true;
Expand Down
4 changes: 2 additions & 2 deletions src/libs/ReportSecondaryActionUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -184,15 +184,15 @@ function isApproveAction(report: Report, reportTransactions: Transaction[], viol
return false;
}
const isExpenseReport = isExpenseReportUtils(report);
const reportHasDuplicatedTransactions = reportTransactions.some((transaction) => isDuplicate(transaction.transactionID));
const reportHasDuplicatedTransactions = reportTransactions.some((transaction) => isDuplicate(transaction));

if (isExpenseReport && isProcessingReport && reportHasDuplicatedTransactions) {
return true;
}

const transactionIDs = reportTransactions.map((t) => t.transactionID);

const hasAllPendingRTERViolations = allHavePendingRTERViolation(transactionIDs, violations);
const hasAllPendingRTERViolations = allHavePendingRTERViolation(reportTransactions, violations);

if (hasAllPendingRTERViolations) {
return true;
Expand Down
12 changes: 5 additions & 7 deletions src/libs/ReportUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -884,7 +884,7 @@
const parsedReportActionMessageCache: Record<string, string> = {};

let conciergeReportID: OnyxEntry<string>;
Onyx.connect({

Check warning on line 887 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.CONCIERGE_REPORT_ID,
callback: (value) => {
conciergeReportID = value;
Expand All @@ -892,7 +892,7 @@
});

const defaultAvatarBuildingIconTestID = 'SvgDefaultAvatarBuilding Icon';
Onyx.connect({

Check warning on line 895 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.SESSION,
callback: (value) => {
// When signed out, val is undefined
Expand All @@ -910,7 +910,7 @@
let allPersonalDetails: OnyxEntry<PersonalDetailsList>;
let allPersonalDetailLogins: string[];
let currentUserPersonalDetails: OnyxEntry<PersonalDetails>;
Onyx.connect({

Check warning on line 913 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.PERSONAL_DETAILS_LIST,
callback: (value) => {
if (currentUserAccountID) {
Expand All @@ -922,14 +922,14 @@
});

let allReportsDraft: OnyxCollection<Report>;
Onyx.connect({

Check warning on line 925 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.REPORT_DRAFT,
waitForCollectionCallback: true,
callback: (value) => (allReportsDraft = value),
});

let allPolicies: OnyxCollection<Policy>;
Onyx.connect({

Check warning on line 932 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.POLICY,
waitForCollectionCallback: true,
callback: (value) => (allPolicies = value),
Expand All @@ -937,7 +937,7 @@

let allReports: OnyxCollection<Report>;
let reportsByPolicyID: ReportByPolicyMap;
Onyx.connect({

Check warning on line 940 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.REPORT,
waitForCollectionCallback: true,
callback: (value) => {
Expand Down Expand Up @@ -974,14 +974,14 @@
});

let allBetas: OnyxEntry<Beta[]>;
Onyx.connect({

Check warning on line 977 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.BETAS,
callback: (value) => (allBetas = value),
});

let allTransactions: OnyxCollection<Transaction> = {};
let reportsTransactions: Record<string, Transaction[]> = {};
Onyx.connect({

Check warning on line 984 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.TRANSACTION,
waitForCollectionCallback: true,
callback: (value) => {
Expand All @@ -1007,7 +1007,7 @@
});

let allReportActions: OnyxCollection<ReportActions>;
Onyx.connect({

Check warning on line 1010 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.REPORT_ACTIONS,
waitForCollectionCallback: true,
callback: (actions) => {
Expand All @@ -1020,7 +1020,7 @@

let allReportMetadata: OnyxCollection<ReportMetadata>;
const allReportMetadataKeyValue: Record<string, ReportMetadata> = {};
Onyx.connect({

Check warning on line 1023 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.REPORT_METADATA,
waitForCollectionCallback: true,
callback: (value) => {
Expand Down Expand Up @@ -2485,8 +2485,7 @@
/**
* Checks whether the card transaction support deleting based on liability type
*/
function canDeleteCardTransactionByLiabilityType(iouTransactionID?: string): boolean {
const transaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${iouTransactionID}`];
function canDeleteCardTransactionByLiabilityType(transaction: OnyxEntry<Transaction>): boolean {
const isCardTransaction = isCardTransactionTransactionUtils(transaction);
if (!isCardTransaction) {
return true;
Expand All @@ -2498,14 +2497,13 @@
* Can only delete if the author is this user and the action is an ADD_COMMENT action or an IOU action in an unsettled report, or if the user is a
* policy admin
*/
function canDeleteReportAction(reportAction: OnyxInputOrEntry<ReportAction>, reportID: string | undefined): boolean {
function canDeleteReportAction(reportAction: OnyxInputOrEntry<ReportAction>, reportID: string | undefined, iouTransaction?: OnyxEntry<Transaction>): boolean {
const report = getReportOrDraftReport(reportID);
const isActionOwner = reportAction?.actorAccountID === currentUserAccountID;
const policy = allPolicies?.[`${ONYXKEYS.COLLECTION.POLICY}${report?.policyID}`] ?? null;

if (isMoneyRequestAction(reportAction)) {
const iouTransactionID = getOriginalMessage(reportAction)?.IOUTransactionID;
const isCardTransactionCanBeDeleted = canDeleteCardTransactionByLiabilityType(iouTransactionID);
const isCardTransactionCanBeDeleted = canDeleteCardTransactionByLiabilityType(iouTransaction);
// For now, users cannot delete split actions
const isSplitAction = getOriginalMessage(reportAction)?.type === CONST.IOU.REPORT_ACTION_TYPE.SPLIT;

Expand Down Expand Up @@ -7945,7 +7943,7 @@
*/
function hasWarningTypeViolations(reportID: string | undefined, transactionViolations: OnyxCollection<TransactionViolation[]>, shouldShowInReview?: boolean): boolean {
const transactions = getReportTransactions(reportID);
return transactions.some((transaction) => hasWarningTypeViolation(transaction.transactionID, transactionViolations, shouldShowInReview));
return transactions.some((transaction) => hasWarningTypeViolation(transaction, transactionViolations, shouldShowInReview));
}

/**
Expand Down Expand Up @@ -7973,7 +7971,7 @@
*/
function hasNoticeTypeViolations(reportID: string | undefined, transactionViolations: OnyxCollection<TransactionViolation[]>, shouldShowInReview?: boolean): boolean {
const transactions = getReportTransactions(reportID);
return transactions.some((transaction) => hasNoticeTypeViolation(transaction.transactionID, transactionViolations, shouldShowInReview));
return transactions.some((transaction) => hasNoticeTypeViolation(transaction, transactionViolations, shouldShowInReview));
}

function hasReportViolations(reportID: string | undefined) {
Expand Down
23 changes: 12 additions & 11 deletions src/libs/TransactionPreviewUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import {convertToDisplayString} from './CurrencyUtils';
import DateUtils from './DateUtils';
import type {PlatformStackRouteProp} from './Navigation/PlatformStackNavigation/types';
import type {TransactionDuplicateNavigatorParamList} from './Navigation/types';
import {getOriginalMessage, getReportAction, isMessageDeleted, isMoneyRequestAction} from './ReportActionsUtils';
import {getOriginalMessage, isMessageDeleted, isMoneyRequestAction} from './ReportActionsUtils';
import {hasActionsWithErrors, hasReportViolations, isPaidGroupPolicy, isPaidGroupPolicyExpenseReport, isReportApproved, isReportOwner, isSettled} from './ReportUtils';
import type {TransactionDetails} from './ReportUtils';
import StringUtils from './StringUtils';
Expand Down Expand Up @@ -64,20 +64,21 @@ function getIOUPayerAndReceiver(managerID: number, ownerAccountID: number, perso

const getReviewNavigationRoute = (
route: PlatformStackRouteProp<TransactionDuplicateNavigatorParamList, 'Transaction_Duplicate_Review'>,
report: OnyxEntry<OnyxTypes.Report>,
transaction: OnyxEntry<OnyxTypes.Transaction>,
duplicates: string[],
duplicates: Array<OnyxEntry<OnyxTypes.Transaction>>,
) => {
const backTo = route.params.backTo;

const parentReportAction = getReportAction(report?.parentReportID, report?.parentReportActionID);
const reviewingTransactionID = isMoneyRequestAction(parentReportAction) ? getOriginalMessage(parentReportAction)?.IOUTransactionID : undefined;

// Clear the draft before selecting a different expense to prevent merging fields from the previous expense
// (e.g., category, tag, tax) that may be not enabled/available in the new expense's policy.
abandonReviewDuplicateTransactions();
const comparisonResult = compareDuplicateTransactionFields(reviewingTransactionID, transaction?.reportID, transaction?.transactionID ?? reviewingTransactionID);
setReviewDuplicatesKey({...comparisonResult.keep, duplicates, transactionID: transaction?.transactionID, reportID: transaction?.reportID});
const comparisonResult = compareDuplicateTransactionFields(transaction, duplicates, transaction?.reportID, transaction?.transactionID);
setReviewDuplicatesKey({
...comparisonResult.keep,
duplicates: duplicates.map((duplicate) => duplicate?.transactionID).filter(Boolean) as string[],
transactionID: transaction?.transactionID,
reportID: transaction?.reportID,
});

if (comparisonResult.change.merchant) {
return ROUTES.TRANSACTION_DUPLICATE_REVIEW_MERCHANT_PAGE.getRoute(route.params?.threadReportID, backTo);
Expand Down Expand Up @@ -170,7 +171,7 @@ function getTransactionPreviewTextAndTranslationPaths({
const showCashOrCard: TranslationPathOrText = {translationPath: isTransactionMadeWithCard ? 'iou.card' : 'iou.cash'};
const isTransactionScanning = isScanning(transaction);
const hasFieldErrors = hasMissingSmartscanFields(transaction);
const hasViolationsOfTypeNotice = hasNoticeTypeViolation(transaction?.transactionID, violations, true) && isPaidGroupPolicy(iouReport);
const hasViolationsOfTypeNotice = hasNoticeTypeViolation(transaction, violations, true) && isPaidGroupPolicy(iouReport);
const hasActionWithErrors = hasActionsWithErrors(iouReport?.reportID);

const {amount: requestAmount, currency: requestCurrency} = transactionDetails;
Expand Down Expand Up @@ -299,7 +300,7 @@ function createTransactionPreviewConditionals({
const isApproved = isReportApproved({report: iouReport});
const isSettlementOrApprovalPartial = !!iouReport?.pendingFields?.partial;

const hasViolationsOfTypeNotice = hasNoticeTypeViolation(transaction?.transactionID, violations, true) && iouReport && isPaidGroupPolicy(iouReport);
const hasViolationsOfTypeNotice = hasNoticeTypeViolation(transaction, violations, true) && iouReport && isPaidGroupPolicy(iouReport);
const hasFieldErrors = hasMissingSmartscanFields(transaction);

const isFetchingWaypoints = isFetchingWaypointsFromServer(transaction);
Expand All @@ -317,7 +318,7 @@ function createTransactionPreviewConditionals({
const shouldShowCategory = !!categoryForDisplay && isReportAPolicyExpenseChat;

// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
const hasAnyViolations = hasViolationsOfTypeNotice || hasWarningTypeViolation(transaction?.transactionID, violations, true) || hasViolation(transaction, violations, true);
const hasAnyViolations = hasViolationsOfTypeNotice || hasWarningTypeViolation(transaction, violations, true) || hasViolation(transaction, violations, true);
const hasErrorOrOnHold = hasFieldErrors || (!isFullySettled && !isFullyApproved && isTransactionOnHold);
const hasReportViolationsOrActionErrors = (isReportOwner(iouReport) && hasReportViolations(iouReport?.reportID)) || hasActionsWithErrors(iouReport?.reportID);
const shouldShowRBR = hasAnyViolations || hasErrorOrOnHold || hasReportViolationsOrActionErrors;
Expand Down
Loading
Loading