From b7aafe5b101c42661df3572ec0813e3ed323c0a1 Mon Sep 17 00:00:00 2001 From: Bernhard Owen Josephus Date: Fri, 9 Aug 2024 14:25:09 +0800 Subject: [PATCH 1/3] include transaction thread actions when calculating last report action --- src/pages/home/ReportScreen.tsx | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/pages/home/ReportScreen.tsx b/src/pages/home/ReportScreen.tsx index 5af4e30f07f1..65253fb5e407 100644 --- a/src/pages/home/ReportScreen.tsx +++ b/src/pages/home/ReportScreen.tsx @@ -301,12 +301,25 @@ function ReportScreen({route, currentReportID = '', navigation}: ReportScreenPro const hasHelpfulErrors = Object.keys(report?.errorFields ?? {}).some((key) => key !== 'notFound'); const shouldHideReport = !hasHelpfulErrors && !ReportUtils.canAccessReport(report, policies, betas); + const transactionThreadReportID = useMemo( + () => ReportActionsUtils.getOneTransactionThreadReportID(report.reportID, reportActions ?? [], isOffline), + [report.reportID, reportActions, isOffline], + ); + const [transactionThreadReportActions = []] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${transactionThreadReportID}`, { + canEvict: false, + selector: (reportActions) => ReportActionsUtils.getSortedReportActionsForDisplay(reportActions, true), + }); const lastReportAction: OnyxEntry = useMemo( - () => - reportActions.length - ? [...reportActions, parentReportAction].find((action) => ReportUtils.canEditReportAction(action) && !ReportActionsUtils.isMoneyRequestAction(action)) - : undefined, - [reportActions, parentReportAction], + () => { + if (!reportActions.length) { + return; + } + return [ + ...ReportActionsUtils.getCombinedReportActions(reportActions, transactionThreadReportID ?? null, transactionThreadReportActions), + parentReportAction, + ].find((action) => ReportUtils.canEditReportAction(action) && !ReportActionsUtils.isMoneyRequestAction(action)); + }, + [reportActions, transactionThreadReportID, transactionThreadReportActions, parentReportAction], ); const isSingleTransactionView = ReportUtils.isMoneyRequest(report) || ReportUtils.isTrackExpenseReport(report); const policy = policies?.[`${ONYXKEYS.COLLECTION.POLICY}${report.policyID}`]; @@ -339,11 +352,6 @@ function ReportScreen({route, currentReportID = '', navigation}: ReportScreenPro /> ); - const transactionThreadReportID = useMemo( - () => ReportActionsUtils.getOneTransactionThreadReportID(report.reportID, reportActions ?? [], isOffline), - [report.reportID, reportActions, isOffline], - ); - if (isSingleTransactionView) { headerView = ( Date: Fri, 9 Aug 2024 14:51:42 +0800 Subject: [PATCH 2/3] let react compiler memoize the value --- src/pages/home/ReportScreen.tsx | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/src/pages/home/ReportScreen.tsx b/src/pages/home/ReportScreen.tsx index 65253fb5e407..6ca723eeb98a 100644 --- a/src/pages/home/ReportScreen.tsx +++ b/src/pages/home/ReportScreen.tsx @@ -301,26 +301,13 @@ function ReportScreen({route, currentReportID = '', navigation}: ReportScreenPro const hasHelpfulErrors = Object.keys(report?.errorFields ?? {}).some((key) => key !== 'notFound'); const shouldHideReport = !hasHelpfulErrors && !ReportUtils.canAccessReport(report, policies, betas); - const transactionThreadReportID = useMemo( - () => ReportActionsUtils.getOneTransactionThreadReportID(report.reportID, reportActions ?? [], isOffline), - [report.reportID, reportActions, isOffline], - ); + const transactionThreadReportID = ReportActionsUtils.getOneTransactionThreadReportID(report.reportID, reportActions ?? [], isOffline); const [transactionThreadReportActions = []] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${transactionThreadReportID}`, { canEvict: false, selector: (reportActions) => ReportActionsUtils.getSortedReportActionsForDisplay(reportActions, true), }); - const lastReportAction: OnyxEntry = useMemo( - () => { - if (!reportActions.length) { - return; - } - return [ - ...ReportActionsUtils.getCombinedReportActions(reportActions, transactionThreadReportID ?? null, transactionThreadReportActions), - parentReportAction, - ].find((action) => ReportUtils.canEditReportAction(action) && !ReportActionsUtils.isMoneyRequestAction(action)); - }, - [reportActions, transactionThreadReportID, transactionThreadReportActions, parentReportAction], - ); + const combinedReportActions = ReportActionsUtils.getCombinedReportActions(reportActions, transactionThreadReportID ?? null, transactionThreadReportActions); + const lastReportAction = [...combinedReportActions, parentReportAction].find((action) => ReportUtils.canEditReportAction(action) && !ReportActionsUtils.isMoneyRequestAction(action)); const isSingleTransactionView = ReportUtils.isMoneyRequest(report) || ReportUtils.isTrackExpenseReport(report); const policy = policies?.[`${ONYXKEYS.COLLECTION.POLICY}${report.policyID}`]; const isTopMostReportId = currentReportID === reportIDFromRoute; From 92df58123ad3ceaa2a94c002efea473f69ad1321 Mon Sep 17 00:00:00 2001 From: Bernhard Owen Josephus Date: Fri, 9 Aug 2024 15:07:32 +0800 Subject: [PATCH 3/3] remove unnecessary selector --- src/pages/home/ReportScreen.tsx | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/pages/home/ReportScreen.tsx b/src/pages/home/ReportScreen.tsx index 6ca723eeb98a..a24362635542 100644 --- a/src/pages/home/ReportScreen.tsx +++ b/src/pages/home/ReportScreen.tsx @@ -302,11 +302,8 @@ function ReportScreen({route, currentReportID = '', navigation}: ReportScreenPro const shouldHideReport = !hasHelpfulErrors && !ReportUtils.canAccessReport(report, policies, betas); const transactionThreadReportID = ReportActionsUtils.getOneTransactionThreadReportID(report.reportID, reportActions ?? [], isOffline); - const [transactionThreadReportActions = []] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${transactionThreadReportID}`, { - canEvict: false, - selector: (reportActions) => ReportActionsUtils.getSortedReportActionsForDisplay(reportActions, true), - }); - const combinedReportActions = ReportActionsUtils.getCombinedReportActions(reportActions, transactionThreadReportID ?? null, transactionThreadReportActions); + const [transactionThreadReportActions = {}] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${transactionThreadReportID}`); + const combinedReportActions = ReportActionsUtils.getCombinedReportActions(reportActions, transactionThreadReportID ?? null, Object.values(transactionThreadReportActions)); const lastReportAction = [...combinedReportActions, parentReportAction].find((action) => ReportUtils.canEditReportAction(action) && !ReportActionsUtils.isMoneyRequestAction(action)); const isSingleTransactionView = ReportUtils.isMoneyRequest(report) || ReportUtils.isTrackExpenseReport(report); const policy = policies?.[`${ONYXKEYS.COLLECTION.POLICY}${report.policyID}`];