Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 3 additions & 0 deletions src/CONST/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
Original file line number Diff line number Diff line change
@@ -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';
Expand All @@ -17,7 +18,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} from '@src/types/onyx';
import type {Policy, Report} from '@src/types/onyx';
import type {TransactionWithOptionalHighlight} from './MoneyRequestReportTransactionList';

type MoneyRequestReportTransactionItemProps = {
Expand All @@ -27,6 +28,9 @@ type MoneyRequestReportTransactionItemProps = {
/** Report to which the transaction belongs */
report: Report;

/** Policy to which the transaction belongs */
policy: OnyxEntry<Policy>;

/** Whether the mobile selection mode is enabled */
isSelectionModeEnabled: boolean;

Expand Down Expand Up @@ -67,6 +71,7 @@ type MoneyRequestReportTransactionItemProps = {
function MoneyRequestReportTransactionItem({
transaction,
report,
policy,
isSelectionModeEnabled,
toggleTransaction,
isSelected,
Expand Down Expand Up @@ -139,6 +144,7 @@ function MoneyRequestReportTransactionItem({
transactionItem={transaction}
violations={filteredViolations}
report={report}
policy={policy}
isSelected={isSelected}
dateColumnSize={dateColumnSize}
amountColumnSize={amountColumnSize}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -516,6 +516,7 @@ function MoneyRequestReportTransactionList({
shouldBeHighlighted={highlightedTransactionIDs.has(transaction.transactionID)}
columns={columnsToShow}
report={report}
policy={policy}
isSelectionModeEnabled={isMobileSelectionModeEnabled}
toggleTransaction={toggleTransaction}
isSelected={isTransactionSelected(transaction.transactionID)}
Expand All @@ -539,6 +540,7 @@ function MoneyRequestReportTransactionList({
shouldBeHighlighted={highlightedTransactionIDs.has(transaction.transactionID)}
columns={columnsToShow}
report={report}
policy={policy}
isSelectionModeEnabled={isMobileSelectionModeEnabled}
toggleTransaction={toggleTransaction}
isSelected={isTransactionSelected(transaction.transactionID)}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@ function TransactionGroupListExpanded<TItem extends ListItem>({
const transactionRow = (
<TransactionItemRow
report={transaction.report}
policy={transaction.policy}
transactionItem={transaction}
violations={getTransactionViolations(transaction, violations, currentUserDetails.email ?? '', currentUserDetails.accountID, transaction.report, transaction.policy)}
isSelected={!!transaction.isSelected}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,7 @@ function TransactionListItem<TItem extends ListItem>({
<TransactionItemRow
transactionItem={transactionItem}
report={transactionItem.report}
policy={transactionItem.policy}
shouldShowTooltip={showTooltip}
onButtonPress={handleActionButtonPress}
onCheckboxPress={() => onCheckboxPress?.(item)}
Expand Down
7 changes: 5 additions & 2 deletions src/components/TransactionItemRow/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ type TransactionWithOptionalSearchFields = TransactionWithOptionalHighlight & {
type TransactionItemRowProps = {
transactionItem: TransactionWithOptionalSearchFields;
report?: Report;
policy?: Policy;
shouldUseNarrowLayout: boolean;
isSelected: boolean;
shouldShowTooltip: boolean;
Expand Down Expand Up @@ -158,6 +159,7 @@ function getMerchantName(transactionItem: TransactionWithOptionalSearchFields, t
function TransactionItemRow({
transactionItem,
report,
policy,
shouldUseNarrowLayout,
isSelected,
shouldShowTooltip,
Expand Down Expand Up @@ -232,7 +234,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);
Expand All @@ -250,7 +253,7 @@ function TransactionItemRow({
}
return error;
}
}, [transactionItem, translate, report]);
}, [transactionItem, translate, report, policy]);

const exchangeRateMessage = getExchangeRate(transactionItem);

Expand Down
5 changes: 1 addition & 4 deletions src/libs/TransactionUtils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1117,11 +1117,8 @@ function isFetchingWaypointsFromServer(transaction: OnyxInputOrEntry<Transaction
/**
* Verify that the transaction is in Self DM or is an original split transaction and that its distance rate is invalid.
*/
function isUnreportedAndHasInvalidDistanceRateTransaction(transaction: OnyxInputOrEntry<Transaction>, policyParam: OnyxEntry<Policy> = undefined) {
function isUnreportedAndHasInvalidDistanceRateTransaction(transaction: OnyxInputOrEntry<Transaction>, policy: OnyxEntry<Policy>) {
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;

Expand Down
8 changes: 8 additions & 0 deletions src/pages/TransactionMerge/MergeTransactionItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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<TItem extends ListItem>({item, isFocused, showTooltip, isDisabled, onFocus, shouldSyncFocus, onSelectRow}: ListItemProps<TItem>) {
const styles = useThemeStyles();
const transactionItem = item as unknown as TransactionListItemType;
const theme = useTheme();
const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${transactionItem.reportID}`);
const policy = usePolicy(report?.policyID);

const animatedHighlightStyle = useAnimatedHighlightStyle({
borderRadius: variables.componentBorderRadius,
Expand All @@ -33,6 +38,7 @@ function MergeTransactionItem<TItem extends ListItem>({item, isFocused, showTool
<OfflineWithFeedback pendingAction={item.pendingAction}>
<PressableWithFeedback
ref={pressableRef}
sentryLabel={CONST.SENTRY_LABEL.MERGE_EXPENSE.MERGE_TRANSACTION_ITEM}
onPress={() => {
onSelectRow(item);
}}
Expand All @@ -53,6 +59,8 @@ function MergeTransactionItem<TItem extends ListItem>({item, isFocused, showTool
>
<TransactionItemRow
transactionItem={transactionItem}
report={report}
policy={policy}
shouldUseNarrowLayout
isSelected={!!item.isSelected}
shouldShowTooltip={showTooltip}
Expand Down
1 change: 1 addition & 0 deletions tests/ui/TransactionItemRowRBRTest.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ const renderTransactionItemRow = (transactionItem: TransactionWithOptionalSearch
transactionItem={transactionItem}
violations={transactionItem.violations}
report={transactionItem.report}
policy={transactionItem.policy}
// eslint-disable-next-line react/jsx-props-no-spreading
{...defaultProps}
/>
Expand Down
Loading