Skip to content

Commit f95a157

Browse files
authored
Merge pull request Expensify#84067 from Expensify/rodrigo-perf-MoneyRequestReportPreview-2
perf: Stabilize TransactionPreview
2 parents 5e82d65 + fe7f87c commit f95a157

2 files changed

Lines changed: 8 additions & 7 deletions

File tree

  • src/components/ReportActionItem

src/components/ReportActionItem/MoneyRequestReportPreview/index.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,8 @@ function MoneyRequestReportPreview({
126126
// We only want to highlight the new expenses if the screen is focused.
127127
const newTransactionIDs = isFocused ? new Set(newTransactions.map((transaction) => transaction.transactionID)) : undefined;
128128

129+
const transactionPreviewContainerStyles = [styles.h100, reportPreviewStyles.transactionPreviewCarouselStyle];
130+
129131
const renderItem: ListRenderItem<Transaction> = ({item}) => (
130132
<TransactionPreview
131133
chatReportID={chatReportID}
@@ -138,14 +140,14 @@ function MoneyRequestReportPreview({
138140
isWhisper={isWhisper}
139141
isHovered={isHovered}
140142
iouReportID={iouReportID}
141-
containerStyles={[styles.h100, reportPreviewStyles.transactionPreviewCarouselStyle]}
143+
containerStyles={transactionPreviewContainerStyles}
142144
shouldDisplayContextMenu={shouldDisplayContextMenu}
143145
transactionPreviewWidth={reportPreviewStyles.transactionPreviewCarouselStyle.width}
144146
transactionID={item.transactionID}
145147
reportPreviewAction={action}
146148
onPreviewPressed={openReportFromPreview}
147149
shouldShowPayerAndReceiver={shouldShowPayerAndReceiver}
148-
shouldHighlight={newTransactionIDs?.has(item.transactionID)}
150+
shouldHighlight={!!newTransactionIDs?.has(item.transactionID)}
149151
/>
150152
);
151153

src/components/ReportActionItem/TransactionPreview/index.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {useRoute} from '@react-navigation/native';
2-
import React, {useCallback, useMemo} from 'react';
2+
import React, {memo, useCallback, useMemo} from 'react';
33
import type {GestureResponderEvent} from 'react-native';
44
import {usePersonalDetails, useSession} from '@components/OnyxListItemProvider';
55
import PressableWithoutFeedback from '@components/Pressable/PressableWithoutFeedback';
@@ -68,7 +68,7 @@ function TransactionPreview(props: TransactionPreviewProps) {
6868
const sessionAccountID = session?.accountID;
6969
const areThereDuplicates = allDuplicateIDs.length > 0 && duplicates.length > 0 && allDuplicateIDs.length === duplicates.length;
7070

71-
const transactionDetails = useMemo(() => getTransactionDetails(transaction), [transaction]);
71+
const transactionDetails = getTransactionDetails(transaction);
7272
const {amount: requestAmount, currency: requestCurrency} = transactionDetails ?? {};
7373

7474
const showContextMenu = (event: GestureResponderEvent) => {
@@ -83,11 +83,10 @@ function TransactionPreview(props: TransactionPreviewProps) {
8383
clearIOUError(chatReportID);
8484
}, [chatReportID]);
8585

86-
const navigateToReviewFields = useCallback(() => {
86+
const navigateToReviewFields = () =>
8787
Navigation.navigate(
8888
getReviewNavigationRoute(Navigation.getActiveRoute(), route.params?.threadReportID, transaction, duplicates, policy, policyCategories, policyTags ?? {}, transactionReport),
8989
);
90-
}, [route.params?.threadReportID, transaction, duplicates, policy, policyCategories, policyTags, transactionReport]);
9190

9291
const transactionPreview = transaction;
9392

@@ -163,4 +162,4 @@ function TransactionPreview(props: TransactionPreviewProps) {
163162
);
164163
}
165164

166-
export default TransactionPreview;
165+
export default memo(TransactionPreview);

0 commit comments

Comments
 (0)