Skip to content

Commit 69e5df7

Browse files
authored
Merge pull request Expensify#67247 from software-mansion-labs/@szymczak/refactor-TransactionItemRowRBR
Refactor TransactionItemRowRBRWithOnyx
2 parents 18d4f1e + 1ed888f commit 69e5df7

11 files changed

Lines changed: 149 additions & 172 deletions

src/components/MoneyRequestReportView/MoneyRequestReportTransactionItem.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,16 @@ import canUseTouchScreen from '@libs/DeviceCapabilities/canUseTouchScreen';
1717
import {getTransactionPendingAction, isTransactionPendingDelete} from '@libs/TransactionUtils';
1818
import variables from '@styles/variables';
1919
import CONST from '@src/CONST';
20+
import type {Report} from '@src/types/onyx';
2021
import type {TransactionWithOptionalHighlight} from './MoneyRequestReportTransactionList';
2122

2223
type MoneyRequestReportTransactionItemProps = {
2324
/** The transaction that is being displayed */
2425
transaction: TransactionWithOptionalHighlight;
2526

27+
/** Report to which the transaction belongs */
28+
report: Report;
29+
2630
/** Whether the mobile selection mode is enabled */
2731
isSelectionModeEnabled: boolean;
2832

@@ -57,6 +61,7 @@ type MoneyRequestReportTransactionItemProps = {
5761
function MoneyRequestReportTransactionItem({
5862
transaction,
5963
columns,
64+
report,
6065
isSelectionModeEnabled,
6166
toggleTransaction,
6267
isSelected,
@@ -119,6 +124,7 @@ function MoneyRequestReportTransactionItem({
119124
>
120125
<TransactionItemRow
121126
transactionItem={transaction}
127+
report={report}
122128
isSelected={isSelected}
123129
dateColumnSize={dateColumnSize}
124130
amountColumnSize={amountColumnSize}

src/components/MoneyRequestReportView/MoneyRequestReportTransactionList.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,7 @@ function MoneyRequestReportTransactionList({
289289
key={transaction.transactionID}
290290
transaction={transaction}
291291
columns={columnsToShow}
292+
report={report}
292293
isSelectionModeEnabled={isMobileSelectionModeEnabled}
293294
toggleTransaction={toggleTransaction}
294295
isSelected={isTransactionSelected(transaction.transactionID)}

src/components/SelectionList/Search/TransactionGroupListItem.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ function TransactionGroupListItem<TItem extends ListItem>({
175175
groupItem.transactions.map((transaction) => (
176176
<TransactionItemRow
177177
key={transaction.transactionID}
178+
report={transaction.report}
178179
transactionItem={transaction}
179180
isSelected={!!transaction.isSelected}
180181
dateColumnSize={dateColumnSize}

src/components/SelectionList/Search/TransactionListItem.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ function TransactionListItem<TItem extends ListItem>({
133133
)}
134134
<TransactionItemRow
135135
transactionItem={transactionItem}
136+
report={transactionItem.report}
136137
shouldShowTooltip={showTooltip}
137138
onButtonPress={handleActionButtonPress}
138139
onCheckboxPress={handleCheckboxPress}

src/components/SelectionList/types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,9 @@ type ListItem<K extends string | number = string> = {
219219

220220
type TransactionListItemType = ListItem &
221221
SearchTransaction & {
222+
/** Report to which the transaction belongs */
223+
report: Report;
224+
222225
/** The personal details of the user requesting money */
223226
from: SearchPersonalDetails;
224227

src/components/TransactionItemRow/TransactionItemRowRBR.tsx

Lines changed: 0 additions & 70 deletions
This file was deleted.

src/components/TransactionItemRow/TransactionItemRowRBRWithOnyx.tsx

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,38 +6,45 @@ import {DotIndicator} from '@components/Icon/Expensicons';
66
import RenderHTML from '@components/RenderHTML';
77
import useLocalize from '@hooks/useLocalize';
88
import useOnyx from '@hooks/useOnyx';
9-
import usePaginatedReportActions from '@hooks/usePaginatedReportActions';
109
import useTheme from '@hooks/useTheme';
1110
import useThemeStyles from '@hooks/useThemeStyles';
1211
import useTransactionViolations from '@hooks/useTransactionViolations';
1312
import {getIOUActionForTransactionID} from '@libs/ReportActionsUtils';
1413
import ViolationsUtils from '@libs/Violations/ViolationsUtils';
1514
import variables from '@styles/variables';
1615
import ONYXKEYS from '@src/ONYXKEYS';
16+
import type {Report} from '@src/types/onyx';
1717
import type Transaction from '@src/types/onyx/Transaction';
1818

1919
type TransactionItemRowRBRProps = {
2020
/** Transaction item */
2121
transaction: Transaction;
2222

23+
/** Report item */
24+
report?: Report;
25+
2326
/** Styles for the RBR messages container */
2427
containerStyles?: ViewStyle[];
2528

2629
/** Error message for missing required fields in the transaction */
2730
missingFieldError?: string;
2831
};
2932

30-
function TransactionItemRowRBRWithOnyx({transaction, containerStyles, missingFieldError}: TransactionItemRowRBRProps) {
33+
function TransactionItemRowRBRWithOnyx({transaction, report, containerStyles, missingFieldError}: TransactionItemRowRBRProps) {
3134
const styles = useThemeStyles();
3235
const transactionViolations = useTransactionViolations(transaction?.transactionID, false);
3336
const {translate} = useLocalize();
3437
const theme = useTheme();
35-
const {sortedAllReportActions: transactionActions, report} = usePaginatedReportActions(transaction.reportID);
38+
const [reportActions] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${transaction.reportID}`, {
39+
canBeMissing: true,
40+
});
3641
const [policyTags] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${report?.policyID}`, {canBeMissing: true});
37-
const transactionThreadId = transactionActions ? getIOUActionForTransactionID(transactionActions, transaction.transactionID)?.childReportID : undefined;
38-
const {sortedAllReportActions: transactionThreadActions} = usePaginatedReportActions(transactionThreadId);
42+
const transactionThreadId = reportActions ? getIOUActionForTransactionID(Object.values(reportActions ?? {}), transaction.transactionID)?.childReportID : undefined;
43+
const [transactionThreadActions] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${transactionThreadId}`, {
44+
canBeMissing: true,
45+
});
3946

40-
const RBRMessages = ViolationsUtils.getRBRMessages(transaction, transactionViolations, translate, missingFieldError, transactionThreadActions, policyTags);
47+
const RBRMessages = ViolationsUtils.getRBRMessages(transaction, transactionViolations, translate, missingFieldError, Object.values(transactionThreadActions ?? {}), policyTags);
4148

4249
return (
4350
RBRMessages.length > 0 && (

src/components/TransactionItemRow/index.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import {
2626
} from '@libs/TransactionUtils';
2727
import CONST from '@src/CONST';
2828
import type {TranslationPaths} from '@src/languages/types';
29-
import type {TransactionViolation} from '@src/types/onyx';
29+
import type {Report, TransactionViolation} from '@src/types/onyx';
3030
import type {SearchPersonalDetails, SearchTransactionAction} from '@src/types/onyx/SearchResults';
3131
import CategoryCell from './DataCells/CategoryCell';
3232
import ChatBubbleCell from './DataCells/ChatBubbleCell';
@@ -79,6 +79,7 @@ type TransactionWithOptionalSearchFields = TransactionWithOptionalHighlight & {
7979

8080
type TransactionItemRowProps = {
8181
transactionItem: TransactionWithOptionalSearchFields;
82+
report?: Report;
8283
shouldUseNarrowLayout: boolean;
8384
isSelected: boolean;
8485
shouldShowTooltip: boolean;
@@ -111,6 +112,7 @@ function getMerchantName(transactionItem: TransactionWithOptionalSearchFields, t
111112

112113
function TransactionItemRow({
113114
transactionItem,
115+
report,
114116
shouldUseNarrowLayout,
115117
isSelected,
116118
shouldShowTooltip,
@@ -443,6 +445,7 @@ function TransactionItemRow({
443445
)}
444446
<TransactionItemRowRBRWithOnyx
445447
transaction={transactionItem}
448+
report={report}
446449
containerStyles={[styles.mt2, styles.minHeight4]}
447450
missingFieldError={missingFieldError}
448451
/>
@@ -476,6 +479,7 @@ function TransactionItemRow({
476479
</View>
477480
<TransactionItemRowRBRWithOnyx
478481
transaction={transactionItem}
482+
report={report}
479483
missingFieldError={missingFieldError}
480484
/>
481485
</View>

src/libs/SearchUIUtils.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -760,6 +760,7 @@ function getTransactionsSections(data: OnyxTypes.SearchResults['data'], metadata
760760

761761
const transactionSection: TransactionListItemType = {
762762
action: getAction(data, allViolations, key, currentSearch),
763+
report,
763764
from,
764765
to,
765766
formattedFrom,
@@ -1201,6 +1202,7 @@ function getReportSections(
12011202
const transaction = {
12021203
...transactionItem,
12031204
action: getAction(data, allViolations, key, currentSearch, actions),
1205+
report,
12041206
from,
12051207
to,
12061208
formattedFrom,

0 commit comments

Comments
 (0)