Skip to content

Commit fe34e86

Browse files
authored
Merge pull request Expensify#90478 from callstack-internal/perf/search-list-violations-per-row
perf: scope Search list violations subscription per row
2 parents 4cef957 + e92bcae commit fe34e86

4 files changed

Lines changed: 4 additions & 13 deletions

File tree

src/components/Search/SearchList/ListItem/TransactionListItem/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ function TransactionListItem<TItem extends ListItem>({
4242
shouldSyncFocus,
4343
columns,
4444
isLoading,
45-
violations,
4645
nonPersonalAndWorkspaceCards,
4746
lastPaymentMethod,
4847
personalPolicyID,
@@ -84,6 +83,7 @@ function TransactionListItem<TItem extends ListItem>({
8483
const [parentReport] = originalUseOnyx(`${ONYXKEYS.COLLECTION.REPORT}${getNonEmptyStringOnyxID(transactionItem.reportID)}`);
8584
const [transactionThreadReport] = originalUseOnyx(`${ONYXKEYS.COLLECTION.REPORT}${transactionItem?.reportAction?.childReportID}`);
8685
const [transaction] = originalUseOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(transactionItem.transactionID)}`);
86+
const [transactionViolationsForRow] = originalUseOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${getNonEmptyStringOnyxID(transactionItem.transactionID)}`);
8787
const parentReportActionSelector = (reportActions: OnyxEntry<ReportActions>): OnyxEntry<ReportAction> => reportActions?.[`${transactionItem?.reportAction?.reportActionID}`];
8888
const [parentReportAction] = originalUseOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${getNonEmptyStringOnyxID(transactionItem.reportID)}`, {selector: parentReportActionSelector}, [
8989
transactionItem,
@@ -103,7 +103,7 @@ function TransactionListItem<TItem extends ListItem>({
103103
const policyForViolations = parentPolicy ?? snapshotPolicy;
104104
const reportForViolations = parentReport ?? snapshotReport;
105105

106-
const onyxViolations = (violations?.[`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionItem.transactionID}`] ?? []).filter(
106+
const onyxViolations = (transactionViolationsForRow ?? []).filter(
107107
(violation: TransactionViolation) =>
108108
!isViolationDismissed(transactionItem, violation, currentUserDetails.email ?? '', currentUserDetails.accountID, reportForViolations, policyForViolations) &&
109109
shouldShowViolation(reportForViolations, policyForViolations, violation.name, currentUserDetails.email ?? '', false, transactionItem),

src/components/Search/SearchList/ListItem/types.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,6 @@ type TransactionListItemProps<TItem extends ListItem> = ListItemProps<TItem> &
420420
/** Whether the item's action is loading */
421421
isLoading?: boolean;
422422
columns?: SearchColumnType[];
423-
violations?: Record<string, TransactionViolations | undefined> | undefined;
424423
policyForMovingExpenses?: Policy;
425424
/** Non-personal and workspace cards for company card display */
426425
nonPersonalAndWorkspaceCards?: CardList;
@@ -435,7 +434,6 @@ type TransactionGroupListItemProps<TItem extends ListItem> = ListItemProps<TItem
435434
accountID?: number;
436435
columns?: SearchColumnType[];
437436
newTransactionID?: string;
438-
violations?: Record<string, TransactionViolations | undefined> | undefined;
439437
policyForMovingExpenses?: Policy;
440438
/** Non-personal and workspace cards for company card display */
441439
nonPersonalAndWorkspaceCards?: CardList;
@@ -452,12 +450,12 @@ type TransactionGroupListExpandedProps<TItem extends ListItem> = Pick<
452450
| 'groupBy'
453451
| 'accountID'
454452
| 'isOffline'
455-
| 'violations'
456453
| 'onSelectRow'
457454
| 'nonPersonalAndWorkspaceCards'
458455
| 'onUndelete'
459456
| 'policyForMovingExpenses'
460457
> & {
458+
violations?: Record<string, TransactionViolations | undefined> | undefined;
461459
transactions: TransactionListItemType[];
462460
transactionsVisibleLimit: number;
463461
setTransactionsVisibleLimit: React.Dispatch<React.SetStateAction<number>>;

src/components/Search/SearchList/index.tsx

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import variables from '@styles/variables';
3535
import type {TransactionPreviewData} from '@userActions/Search';
3636
import CONST from '@src/CONST';
3737
import ONYXKEYS from '@src/ONYXKEYS';
38-
import type {CardList, Policy, Transaction, TransactionViolations} from '@src/types/onyx';
38+
import type {CardList, Policy, Transaction} from '@src/types/onyx';
3939
import type {HoldMenuCallback} from '..';
4040
import BaseSearchList from './BaseSearchList';
4141
import type ChatListItem from './ListItem/ChatListItem';
@@ -118,9 +118,6 @@ type SearchListProps = Pick<FlashListProps<SearchListItem>, 'onScroll' | 'conten
118118

119119
newTransactions?: Transaction[];
120120

121-
/** Violations indexed by transaction ID */
122-
violations?: Record<string, TransactionViolations | undefined> | undefined;
123-
124121
/** Callback to fire when hold menu should be opened */
125122
onHoldMenuOpen?: HoldMenuCallback;
126123

@@ -217,7 +214,6 @@ function SearchList({
217214
shouldAnimate,
218215
isMobileSelectionModeEnabled,
219216
newTransactions = [],
220-
violations,
221217
onHoldMenuOpen,
222218
nonPersonalAndWorkspaceCards,
223219
selectedTransactions,
@@ -455,7 +451,6 @@ function SearchList({
455451
personalDetails={personalDetails}
456452
userBillingFundID={userBillingFundID}
457453
isOffline={isOffline}
458-
violations={violations}
459454
nonPersonalAndWorkspaceCards={nonPersonalAndWorkspaceCards}
460455
onFocus={onFocus}
461456
newTransactionID={newTransactionID}
@@ -485,7 +480,6 @@ function SearchList({
485480
personalDetails,
486481
userBillingFundID,
487482
isOffline,
488-
violations,
489483
lastPaymentMethod,
490484
personalPolicyID,
491485
onHoldMenuOpen,

src/components/Search/index.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1853,7 +1853,6 @@ function Search({
18531853
}
18541854
queryJSON={queryJSON}
18551855
columns={columnsToShow}
1856-
violations={violations}
18571856
onLayout={onLayout}
18581857
isMobileSelectionModeEnabled={isMobileSelectionModeEnabled}
18591858
shouldAnimate={type === CONST.SEARCH.DATA_TYPES.EXPENSE}

0 commit comments

Comments
 (0)