From 9793f4aefc7bbe1fb03ba579c13996286067520d Mon Sep 17 00:00:00 2001 From: Shubham Agrawal Date: Sun, 22 Feb 2026 21:06:07 +0530 Subject: [PATCH 1/3] Refactor: Deprecate getPolicy (part 15) --- .../MoneyRequestReportTransactionItem.tsx | 8 +++++++- .../MoneyRequestReportTransactionList.tsx | 2 ++ .../Search/TransactionGroupListExpanded.tsx | 1 + .../Search/TransactionListItem.tsx | 1 + src/components/TransactionItemRow/index.tsx | 7 +++++-- src/libs/TransactionUtils/index.ts | 5 +---- src/pages/TransactionMerge/MergeTransactionItem.tsx | 7 +++++++ tests/ui/TransactionItemRowRBRTest.tsx | 1 + 8 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/components/MoneyRequestReportView/MoneyRequestReportTransactionItem.tsx b/src/components/MoneyRequestReportView/MoneyRequestReportTransactionItem.tsx index 349db531a5816..740426b7fcffc 100644 --- a/src/components/MoneyRequestReportView/MoneyRequestReportTransactionItem.tsx +++ b/src/components/MoneyRequestReportView/MoneyRequestReportTransactionItem.tsx @@ -1,5 +1,6 @@ import React, {useEffect, useRef} from 'react'; import type {View} from 'react-native'; +import type {OnyxEntry} from 'react-native-onyx'; import {getButtonRole} from '@components/Button/utils'; import OfflineWithFeedback from '@components/OfflineWithFeedback'; import {PressableWithFeedback} from '@components/Pressable'; @@ -16,7 +17,7 @@ import canUseTouchScreen from '@libs/DeviceCapabilities/canUseTouchScreen'; import {getTransactionPendingAction, isTransactionPendingDelete} from '@libs/TransactionUtils'; import variables from '@styles/variables'; import CONST from '@src/CONST'; -import type {Report, TransactionViolation} from '@src/types/onyx'; +import type {Policy, Report, TransactionViolation} from '@src/types/onyx'; import type {TransactionWithOptionalHighlight} from './MoneyRequestReportTransactionList'; type MoneyRequestReportTransactionItemProps = { @@ -29,6 +30,9 @@ type MoneyRequestReportTransactionItemProps = { /** Report to which the transaction belongs */ report: Report; + /** Policy to which the transaction belongs */ + policy: OnyxEntry; + /** Whether the mobile selection mode is enabled */ isSelectionModeEnabled: boolean; @@ -67,6 +71,7 @@ function MoneyRequestReportTransactionItem({ transaction, violations, report, + policy, isSelectionModeEnabled, toggleTransaction, isSelected, @@ -135,6 +140,7 @@ function MoneyRequestReportTransactionItem({ transactionItem={transaction} violations={violations} report={report} + policy={policy} isSelected={isSelected} dateColumnSize={dateColumnSize} amountColumnSize={amountColumnSize} diff --git a/src/components/MoneyRequestReportView/MoneyRequestReportTransactionList.tsx b/src/components/MoneyRequestReportView/MoneyRequestReportTransactionList.tsx index d9a5630927f75..905119d4f22f8 100644 --- a/src/components/MoneyRequestReportView/MoneyRequestReportTransactionList.tsx +++ b/src/components/MoneyRequestReportView/MoneyRequestReportTransactionList.tsx @@ -560,6 +560,7 @@ function MoneyRequestReportTransactionList({ violations={filteredViolations?.[`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transaction.transactionID}`]} columns={columnsToShow} report={report} + policy={policy} isSelectionModeEnabled={isMobileSelectionModeEnabled} toggleTransaction={toggleTransaction} isSelected={isTransactionSelected(transaction.transactionID)} @@ -583,6 +584,7 @@ function MoneyRequestReportTransactionList({ violations={filteredViolations?.[`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transaction.transactionID}`]} columns={columnsToShow} report={report} + policy={policy} isSelectionModeEnabled={isMobileSelectionModeEnabled} toggleTransaction={toggleTransaction} isSelected={isTransactionSelected(transaction.transactionID)} diff --git a/src/components/SelectionListWithSections/Search/TransactionGroupListExpanded.tsx b/src/components/SelectionListWithSections/Search/TransactionGroupListExpanded.tsx index 21dd1549a7d75..eea2dc5de274b 100644 --- a/src/components/SelectionListWithSections/Search/TransactionGroupListExpanded.tsx +++ b/src/components/SelectionListWithSections/Search/TransactionGroupListExpanded.tsx @@ -178,6 +178,7 @@ function TransactionGroupListExpanded({ const transactionRow = ( ({ onCheckboxPress?.(item)} diff --git a/src/components/TransactionItemRow/index.tsx b/src/components/TransactionItemRow/index.tsx index 6c94ba837b41e..54a3eb6d8bca4 100644 --- a/src/components/TransactionItemRow/index.tsx +++ b/src/components/TransactionItemRow/index.tsx @@ -107,6 +107,7 @@ type TransactionWithOptionalSearchFields = TransactionWithOptionalHighlight & { type TransactionItemRowProps = { transactionItem: TransactionWithOptionalSearchFields; report?: Report; + policy?: Policy; shouldUseNarrowLayout: boolean; isSelected: boolean; shouldShowTooltip: boolean; @@ -156,6 +157,7 @@ function getMerchantName(transactionItem: TransactionWithOptionalSearchFields, t function TransactionItemRow({ transactionItem, report, + policy, shouldUseNarrowLayout, isSelected, shouldShowTooltip, @@ -230,7 +232,8 @@ function TransactionItemRow({ return ''; } - const isCustomUnitOutOfPolicy = isUnreportedAndHasInvalidDistanceRateTransaction(transactionItem); + const policyParam = policy ?? transactionItem.policy; + const isCustomUnitOutOfPolicy = isUnreportedAndHasInvalidDistanceRateTransaction(transactionItem, policyParam); const hasFieldErrors = hasMissingSmartscanFields(transactionItem, report) || isCustomUnitOutOfPolicy; if (hasFieldErrors) { const amountMissing = isAmountMissing(transactionItem); @@ -248,7 +251,7 @@ function TransactionItemRow({ } return error; } - }, [transactionItem, translate, report]); + }, [transactionItem, translate, report, policy]); const exchangeRateMessage = getExchangeRate(transactionItem); diff --git a/src/libs/TransactionUtils/index.ts b/src/libs/TransactionUtils/index.ts index 0356e4661b956..bb0054d4a1583 100644 --- a/src/libs/TransactionUtils/index.ts +++ b/src/libs/TransactionUtils/index.ts @@ -1075,11 +1075,8 @@ function isFetchingWaypointsFromServer(transaction: OnyxInputOrEntry, policyParam: OnyxEntry = undefined) { +function isUnreportedAndHasInvalidDistanceRateTransaction(transaction: OnyxInputOrEntry, policy: OnyxEntry) { if (transaction && isDistanceRequest(transaction)) { - const report = getReportOrDraftReport(transaction.reportID); - // eslint-disable-next-line @typescript-eslint/no-deprecated - const policy = policyParam ?? getPolicy(report?.policyID); const {rate} = DistanceRequestUtils.getRate({transaction, policy}); const isUnreportedExpense = !transaction.reportID || transaction.reportID === CONST.REPORT.UNREPORTED_REPORT_ID || String(transaction.reportID) === CONST.REPORT.SPLIT_REPORT_ID; diff --git a/src/pages/TransactionMerge/MergeTransactionItem.tsx b/src/pages/TransactionMerge/MergeTransactionItem.tsx index 79eda49854f96..4c0cca4db4653 100644 --- a/src/pages/TransactionMerge/MergeTransactionItem.tsx +++ b/src/pages/TransactionMerge/MergeTransactionItem.tsx @@ -6,17 +6,22 @@ import {PressableWithFeedback} from '@components/Pressable'; import type {ListItem, ListItemProps, TransactionListItemType} from '@components/SelectionListWithSections/types'; import TransactionItemRow from '@components/TransactionItemRow'; import useAnimatedHighlightStyle from '@hooks/useAnimatedHighlightStyle'; +import useOnyx from '@hooks/useOnyx'; +import usePolicy from '@hooks/usePolicy'; import useStyleUtils from '@hooks/useStyleUtils'; import useSyncFocus from '@hooks/useSyncFocus'; import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; import variables from '@styles/variables'; import CONST from '@src/CONST'; +import ONYXKEYS from '@src/ONYXKEYS'; function MergeTransactionItem({item, isFocused, showTooltip, isDisabled, onFocus, shouldSyncFocus, onSelectRow}: ListItemProps) { const styles = useThemeStyles(); const transactionItem = item as unknown as TransactionListItemType; const theme = useTheme(); + const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${transactionItem.reportID}`, {canBeMissing: true}); + const policy = usePolicy(report?.policyID); const animatedHighlightStyle = useAnimatedHighlightStyle({ borderRadius: variables.componentBorderRadius, @@ -53,6 +58,8 @@ function MergeTransactionItem({item, isFocused, showTool > From 9fd4e0662601a8eb3d8d4bad928b5e4fd60f8154 Mon Sep 17 00:00:00 2001 From: Shubham Agrawal Date: Wed, 25 Feb 2026 12:58:23 +0530 Subject: [PATCH 2/3] Fix ts --- src/pages/TransactionMerge/MergeTransactionItem.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/TransactionMerge/MergeTransactionItem.tsx b/src/pages/TransactionMerge/MergeTransactionItem.tsx index 4c0cca4db4653..96249b6f8787a 100644 --- a/src/pages/TransactionMerge/MergeTransactionItem.tsx +++ b/src/pages/TransactionMerge/MergeTransactionItem.tsx @@ -20,7 +20,7 @@ function MergeTransactionItem({item, isFocused, showTool const styles = useThemeStyles(); const transactionItem = item as unknown as TransactionListItemType; const theme = useTheme(); - const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${transactionItem.reportID}`, {canBeMissing: true}); + const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${transactionItem.reportID}`); const policy = usePolicy(report?.policyID); const animatedHighlightStyle = useAnimatedHighlightStyle({ From 055d3f859e4417ab67fdfd0de82e5aa1918105dc Mon Sep 17 00:00:00 2001 From: Shubham Agrawal Date: Thu, 26 Feb 2026 22:16:26 +0530 Subject: [PATCH 3/3] Fix ESLint --- src/CONST/index.ts | 3 +++ src/pages/TransactionMerge/MergeTransactionItem.tsx | 1 + 2 files changed, 4 insertions(+) diff --git a/src/CONST/index.ts b/src/CONST/index.ts index 9df26fc194511..8b634e8387dec 100755 --- a/src/CONST/index.ts +++ b/src/CONST/index.ts @@ -8638,6 +8638,9 @@ const CONST = { REMOVE_SPLIT_BUTTON: 'SplitExpense-RemoveSplitButton', EDIT_SAVE_BUTTON: 'SplitExpense-EditSaveButton', }, + MERGE_EXPENSE: { + MERGE_TRANSACTION_ITEM: 'MergeExpense-MergeTransactionItem', + }, IOU_REQUEST_STEP: { DISTANCE_NEXT_BUTTON: 'IOURequestStep-DistanceNextButton', DISTANCE_MAP_NEXT_BUTTON: 'IOURequestStep-DistanceMapNextButton', diff --git a/src/pages/TransactionMerge/MergeTransactionItem.tsx b/src/pages/TransactionMerge/MergeTransactionItem.tsx index 96249b6f8787a..9e1ed63c87278 100644 --- a/src/pages/TransactionMerge/MergeTransactionItem.tsx +++ b/src/pages/TransactionMerge/MergeTransactionItem.tsx @@ -38,6 +38,7 @@ function MergeTransactionItem({item, isFocused, showTool { onSelectRow(item); }}