From e7524c16bcd94bdb69ad2bed820e5644970f73b4 Mon Sep 17 00:00:00 2001 From: DylanDylann Date: Tue, 9 Dec 2025 13:40:31 +0700 Subject: [PATCH 1/5] remove onyx connect --- src/libs/SidebarUtils.ts | 12 +++++++----- src/libs/TransactionUtils/index.ts | 5 ++--- src/pages/TransactionDuplicate/Confirmation.tsx | 6 +++--- src/pages/TransactionDuplicate/ReviewBillable.tsx | 3 ++- src/pages/TransactionDuplicate/ReviewCategory.tsx | 3 ++- src/pages/TransactionDuplicate/ReviewDescription.tsx | 3 ++- src/pages/TransactionDuplicate/ReviewMerchant.tsx | 3 ++- .../TransactionDuplicate/ReviewReimbursable.tsx | 3 ++- src/pages/TransactionDuplicate/ReviewTag.tsx | 4 ++-- src/pages/TransactionDuplicate/ReviewTaxCode.tsx | 2 +- .../ReportActionCompose/ReportActionCompose.tsx | 2 +- 11 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/libs/SidebarUtils.ts b/src/libs/SidebarUtils.ts index 40349c1d0aa..606f2284b3e 100644 --- a/src/libs/SidebarUtils.ts +++ b/src/libs/SidebarUtils.ts @@ -36,7 +36,7 @@ import { getIntegrationSyncFailedMessage, getLastVisibleMessage, getMessageOfOldDotReportAction, - getOneTransactionThreadReportID, + getOneTransactionThreadReportAction, getOriginalMessage, getPolicyChangeLogAddEmployeeMessage, getPolicyChangeLogDefaultBillableMessage, @@ -80,6 +80,7 @@ import { isActionOfType, isCardIssuedAction, isInviteOrRemovedAction, + isMoneyRequestAction, isOldDotReportAction, isRenamedAction, isTagModificationAction, @@ -584,9 +585,10 @@ function getReasonAndReportActionThatHasRedBrickRoad( }; } const parentReportAction = getReportAction(report?.parentReportID, report?.parentReportActionID); - const transactionThreadReportID = getOneTransactionThreadReportID(report, chatReport, reportActions ?? []); - if (transactionThreadReportID) { - const transactionID = getTransactionID(transactionThreadReportID); + const transactionThreadReportAction = getOneTransactionThreadReportAction(report, chatReport, reportActions ?? []); + + if (transactionThreadReportAction) { + const transactionID = isMoneyRequestAction(transactionThreadReportAction) ? getOriginalMessage(transactionThreadReportAction)?.IOUTransactionID : undefined; const transaction = transactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`]; if (hasReceiptError(transaction)) { return { @@ -594,7 +596,7 @@ function getReasonAndReportActionThatHasRedBrickRoad( }; } } - const transactionID = getTransactionID(report.reportID); + const transactionID = getTransactionID(report); const transaction = transactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`]; if (isTransactionThread(parentReportAction) && hasReceiptError(transaction)) { return { diff --git a/src/libs/TransactionUtils/index.ts b/src/libs/TransactionUtils/index.ts index 744b771e252..2b9b90eb28f 100644 --- a/src/libs/TransactionUtils/index.ts +++ b/src/libs/TransactionUtils/index.ts @@ -2065,11 +2065,10 @@ function compareDuplicateTransactionFields( return {keep, change}; } -function getTransactionID(threadReportID?: string): string | undefined { - if (!threadReportID) { +function getTransactionID(report?: OnyxEntry): string | undefined { + if (!report) { return; } - const report = deprecatedAllReports?.[`${ONYXKEYS.COLLECTION.REPORT}${threadReportID}`]; const parentReportAction = isThread(report) ? getReportAction(report.parentReportID, report.parentReportActionID) : undefined; const IOUTransactionID = isMoneyRequestAction(parentReportAction) ? getOriginalMessage(parentReportAction)?.IOUTransactionID : undefined; diff --git a/src/pages/TransactionDuplicate/Confirmation.tsx b/src/pages/TransactionDuplicate/Confirmation.tsx index 7bb48ff9c77..ecd3adedb0e 100644 --- a/src/pages/TransactionDuplicate/Confirmation.tsx +++ b/src/pages/TransactionDuplicate/Confirmation.tsx @@ -46,7 +46,8 @@ function Confirmation() { const [reviewDuplicates, reviewDuplicatesResult] = useOnyx(ONYXKEYS.REVIEW_DUPLICATES, {canBeMissing: true}); const [duplicatedTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(reviewDuplicates?.transactionID)}`, {canBeMissing: true}); const newTransaction = useMemo(() => TransactionUtils.buildNewTransactionAfterReviewingDuplicates(reviewDuplicates, duplicatedTransaction), [duplicatedTransaction, reviewDuplicates]); - const transactionID = TransactionUtils.getTransactionID(threadReportID); + const [report, reportResult] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${threadReportID}`, {canBeMissing: true}); + const transactionID = TransactionUtils.getTransactionID(report); const [allReports] = useOnyx(ONYXKEYS.COLLECTION.REPORT, {canBeMissing: false}); const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(transactionID)}`, {canBeMissing: true}); const [transactionViolations] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${getNonEmptyStringOnyxID(transactionID)}`, { @@ -61,7 +62,6 @@ function Confirmation() { const [policyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${getNonEmptyStringOnyxID(reviewDuplicatesReport?.policyID)}`, {canBeMissing: true}); const compareResult = TransactionUtils.compareDuplicateTransactionFields(transaction, allDuplicates, reviewDuplicatesReport, undefined, policyCategories); const {goBack} = useReviewDuplicatesNavigation(Object.keys(compareResult.change ?? {}), 'confirmation', threadReportID, backTo); - const [report, reportResult] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${threadReportID}`, {canBeMissing: true}); const [iouReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${newTransaction?.reportID}`, {canBeMissing: true}); const [reportActions] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${newTransaction?.reportID}`, {canBeMissing: true}); const reportAction = Object.values(reportActions ?? {}).find( @@ -113,7 +113,7 @@ function Confirmation() { [report, reportAction], ); - const reportTransactionID = report?.reportID ? getTransactionID(report.reportID) : undefined; + const reportTransactionID = report?.reportID ? getTransactionID(report) : undefined; const doesTransactionBelongToReport = reviewDuplicates?.transactionID === reportTransactionID || (reportTransactionID && reviewDuplicates?.duplicates.includes(reportTransactionID)); // eslint-disable-next-line rulesdir/no-negated-variables diff --git a/src/pages/TransactionDuplicate/ReviewBillable.tsx b/src/pages/TransactionDuplicate/ReviewBillable.tsx index b393820f461..d9a8d0de20f 100644 --- a/src/pages/TransactionDuplicate/ReviewBillable.tsx +++ b/src/pages/TransactionDuplicate/ReviewBillable.tsx @@ -20,7 +20,8 @@ import ReviewFields from './ReviewFields'; function ReviewBillable() { const route = useRoute>(); const {translate} = useLocalize(); - const transactionID = getTransactionID(route.params.threadReportID); + const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${route.params.threadReportID}`, {canBeMissing: true}); + const transactionID = getTransactionID(report); const [reviewDuplicates] = useOnyx(ONYXKEYS.REVIEW_DUPLICATES, {canBeMissing: true}); const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(transactionID)}`, {canBeMissing: true}); const [transactionViolations] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`, { diff --git a/src/pages/TransactionDuplicate/ReviewCategory.tsx b/src/pages/TransactionDuplicate/ReviewCategory.tsx index 2d738b1553f..f7cf10e1fe0 100644 --- a/src/pages/TransactionDuplicate/ReviewCategory.tsx +++ b/src/pages/TransactionDuplicate/ReviewCategory.tsx @@ -21,7 +21,8 @@ import ReviewFields from './ReviewFields'; function ReviewCategory() { const route = useRoute>(); const {translate} = useLocalize(); - const transactionID = getTransactionID(route.params.threadReportID); + const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${route.params.threadReportID}`, {canBeMissing: true}); + const transactionID = getTransactionID(report); const [reviewDuplicates] = useOnyx(ONYXKEYS.REVIEW_DUPLICATES, {canBeMissing: true}); const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(transactionID)}`, {canBeMissing: true}); const [transactionViolations] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`, { diff --git a/src/pages/TransactionDuplicate/ReviewDescription.tsx b/src/pages/TransactionDuplicate/ReviewDescription.tsx index 891255962da..572bd39a482 100644 --- a/src/pages/TransactionDuplicate/ReviewDescription.tsx +++ b/src/pages/TransactionDuplicate/ReviewDescription.tsx @@ -22,7 +22,8 @@ import ReviewFields from './ReviewFields'; function ReviewDescription() { const route = useRoute>(); const {translate} = useLocalize(); - const transactionID = getTransactionID(route.params.threadReportID); + const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${route.params.threadReportID}`, {canBeMissing: true}); + const transactionID = getTransactionID(report); const [reviewDuplicates] = useOnyx(ONYXKEYS.REVIEW_DUPLICATES, {canBeMissing: false}); const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(transactionID)}`, {canBeMissing: true}); const [transactionViolations] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`, { diff --git a/src/pages/TransactionDuplicate/ReviewMerchant.tsx b/src/pages/TransactionDuplicate/ReviewMerchant.tsx index 2026f8821df..b1db45889ba 100644 --- a/src/pages/TransactionDuplicate/ReviewMerchant.tsx +++ b/src/pages/TransactionDuplicate/ReviewMerchant.tsx @@ -20,7 +20,8 @@ import ReviewFields from './ReviewFields'; function ReviewMerchant() { const route = useRoute>(); const {translate} = useLocalize(); - const transactionID = getTransactionID(route.params.threadReportID); + const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${route.params.threadReportID}`, {canBeMissing: true}); + const transactionID = getTransactionID(report); const [reviewDuplicates] = useOnyx(ONYXKEYS.REVIEW_DUPLICATES, {canBeMissing: true}); const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(transactionID)}`, {canBeMissing: true}); const [transactionViolations] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`, { diff --git a/src/pages/TransactionDuplicate/ReviewReimbursable.tsx b/src/pages/TransactionDuplicate/ReviewReimbursable.tsx index 6b24d9eb693..e8ae46b4c16 100644 --- a/src/pages/TransactionDuplicate/ReviewReimbursable.tsx +++ b/src/pages/TransactionDuplicate/ReviewReimbursable.tsx @@ -20,7 +20,8 @@ import ReviewFields from './ReviewFields'; function ReviewReimbursable() { const route = useRoute>(); const {translate} = useLocalize(); - const transactionID = getTransactionID(route.params.threadReportID); + const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${route.params.threadReportID}`, {canBeMissing: true}); + const transactionID = getTransactionID(report); const [reviewDuplicates] = useOnyx(ONYXKEYS.REVIEW_DUPLICATES, {canBeMissing: true}); const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(transactionID)}`, {canBeMissing: true}); const [transactionViolations] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`, { diff --git a/src/pages/TransactionDuplicate/ReviewTag.tsx b/src/pages/TransactionDuplicate/ReviewTag.tsx index 1a84f5b9986..4897c5a3750 100644 --- a/src/pages/TransactionDuplicate/ReviewTag.tsx +++ b/src/pages/TransactionDuplicate/ReviewTag.tsx @@ -21,8 +21,8 @@ import ReviewFields from './ReviewFields'; function ReviewTag() { const route = useRoute>(); const {translate} = useLocalize(); - const transactionID = getTransactionID(route.params.threadReportID); - + const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${route.params.threadReportID}`, {canBeMissing: true}); + const transactionID = getTransactionID(report); const [reviewDuplicates] = useOnyx(ONYXKEYS.REVIEW_DUPLICATES, {canBeMissing: true}); const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(transactionID)}`, {canBeMissing: true}); const [transactionViolations] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`, { diff --git a/src/pages/TransactionDuplicate/ReviewTaxCode.tsx b/src/pages/TransactionDuplicate/ReviewTaxCode.tsx index e73abc2fb83..86f3174dae7 100644 --- a/src/pages/TransactionDuplicate/ReviewTaxCode.tsx +++ b/src/pages/TransactionDuplicate/ReviewTaxCode.tsx @@ -28,7 +28,7 @@ function ReviewTaxRate() { // This will be fixed as part of https://github.com/Expensify/Expensify/issues/507850 // eslint-disable-next-line @typescript-eslint/no-deprecated const policy = getPolicy(report?.policyID); - const transactionID = getTransactionID(route.params.threadReportID); + const transactionID = getTransactionID(report); const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(transactionID)}`, {canBeMissing: true}); const [transactionViolations] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`, { canBeMissing: false, diff --git a/src/pages/home/report/ReportActionCompose/ReportActionCompose.tsx b/src/pages/home/report/ReportActionCompose/ReportActionCompose.tsx index ddef4f57581..675e9acc9cc 100644 --- a/src/pages/home/report/ReportActionCompose/ReportActionCompose.tsx +++ b/src/pages/home/report/ReportActionCompose/ReportActionCompose.tsx @@ -223,7 +223,7 @@ function ReportActionCompose({ const iouAction = reportActions ? Object.values(reportActions).find((action) => isMoneyRequestAction(action)) : null; const linkedTransactionID = iouAction && !isExpensesReport ? getLinkedTransactionID(iouAction) : undefined; - const transactionID = useMemo(() => getTransactionID(reportID) ?? linkedTransactionID, [reportID, linkedTransactionID]); + const transactionID = useMemo(() => getTransactionID(report) ?? linkedTransactionID, [report, linkedTransactionID]); const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(transactionID)}`, {canBeMissing: true}); From 0b4c16c85e336470eca38abc6580766f600a1d12 Mon Sep 17 00:00:00 2001 From: DylanDylann Date: Tue, 9 Dec 2025 13:41:09 +0700 Subject: [PATCH 2/5] add empty line --- src/libs/SidebarUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/SidebarUtils.ts b/src/libs/SidebarUtils.ts index 606f2284b3e..9d8bfbb5eee 100644 --- a/src/libs/SidebarUtils.ts +++ b/src/libs/SidebarUtils.ts @@ -586,7 +586,7 @@ function getReasonAndReportActionThatHasRedBrickRoad( } const parentReportAction = getReportAction(report?.parentReportID, report?.parentReportActionID); const transactionThreadReportAction = getOneTransactionThreadReportAction(report, chatReport, reportActions ?? []); - + if (transactionThreadReportAction) { const transactionID = isMoneyRequestAction(transactionThreadReportAction) ? getOriginalMessage(transactionThreadReportAction)?.IOUTransactionID : undefined; const transaction = transactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`]; From 6e697ca1d8e8a26535e23ad0dad6b6325218f929 Mon Sep 17 00:00:00 2001 From: DylanDylann Date: Tue, 9 Dec 2025 16:15:18 +0700 Subject: [PATCH 3/5] minor fix --- src/libs/DebugUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/DebugUtils.ts b/src/libs/DebugUtils.ts index 38d1364ff95..66975e91862 100644 --- a/src/libs/DebugUtils.ts +++ b/src/libs/DebugUtils.ts @@ -1449,7 +1449,7 @@ function getReasonAndReportActionForRBRInLHNRow( } function getTransactionID(report: OnyxEntry, reportActions: OnyxEntry) { - const transactionID = TransactionUtilsGetTransactionID(report?.reportID); + const transactionID = TransactionUtilsGetTransactionID(report); return Number(transactionID) > 0 ? transactionID From 7f1f54f954d8878f73ea9a746017ba1406e21fbe Mon Sep 17 00:00:00 2001 From: DylanDylann Date: Wed, 17 Dec 2025 16:43:04 +0700 Subject: [PATCH 4/5] remove condition --- src/pages/TransactionDuplicate/Confirmation.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/TransactionDuplicate/Confirmation.tsx b/src/pages/TransactionDuplicate/Confirmation.tsx index cfe65da477d..0ed44953ddc 100644 --- a/src/pages/TransactionDuplicate/Confirmation.tsx +++ b/src/pages/TransactionDuplicate/Confirmation.tsx @@ -102,7 +102,7 @@ function Confirmation() { [report, reportAction], ); - const reportTransactionID = report?.reportID ? getTransactionID(report) : undefined; + const reportTransactionID = getTransactionID(report); const doesTransactionBelongToReport = reviewDuplicates?.transactionID === reportTransactionID || (reportTransactionID && reviewDuplicates?.duplicates.includes(reportTransactionID)); // eslint-disable-next-line rulesdir/no-negated-variables From ddedcad18e99711cb77afc8b2123b46fad606245 Mon Sep 17 00:00:00 2001 From: DylanDylann Date: Sat, 20 Dec 2025 19:29:10 +0700 Subject: [PATCH 5/5] remove duplicated --- src/pages/TransactionDuplicate/Confirmation.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/pages/TransactionDuplicate/Confirmation.tsx b/src/pages/TransactionDuplicate/Confirmation.tsx index b89c3928604..3c1d3a674d1 100644 --- a/src/pages/TransactionDuplicate/Confirmation.tsx +++ b/src/pages/TransactionDuplicate/Confirmation.tsx @@ -29,7 +29,6 @@ import * as ReportActionsUtils from '@src/libs/ReportActionsUtils'; import * as ReportUtils from '@src/libs/ReportUtils'; import {generateReportID} from '@src/libs/ReportUtils'; import * as TransactionUtils from '@src/libs/TransactionUtils'; -import {getTransactionID} from '@src/libs/TransactionUtils'; import ONYXKEYS from '@src/ONYXKEYS'; import type SCREENS from '@src/SCREENS'; import type {Transaction} from '@src/types/onyx'; @@ -102,8 +101,7 @@ function Confirmation() { [report, reportAction], ); - const reportTransactionID = getTransactionID(report); - const doesTransactionBelongToReport = reviewDuplicates?.transactionID === reportTransactionID || (reportTransactionID && reviewDuplicates?.duplicates.includes(reportTransactionID)); + const doesTransactionBelongToReport = reviewDuplicates?.transactionID === transactionID || (transactionID && reviewDuplicates?.duplicates.includes(transactionID)); // eslint-disable-next-line rulesdir/no-negated-variables const shouldShowNotFoundPage =