diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 8434ebb7f992..46cdfae1818e 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -369,6 +369,22 @@ const DYNAMIC_ROUTES = { entryScreens: [SCREENS.REPORT, SCREENS.RIGHT_MODAL.SEARCH_REPORT, SCREENS.RIGHT_MODAL.EXPENSE_REPORT, SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT], getRoute: (reportID: string, reportActionID: string) => `flag/${reportID}/${reportActionID}`, }, + TRANSACTION_DUPLICATE_REVIEW_DESCRIPTION: { + path: 'duplicates/review/description', + entryScreens: [SCREENS.REPORT, SCREENS.RIGHT_MODAL.SEARCH_REPORT, SCREENS.RIGHT_MODAL.EXPENSE_REPORT, SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT], + }, + TRANSACTION_DUPLICATE_REVIEW_REIMBURSABLE: { + path: 'duplicates/review/reimbursable', + entryScreens: [SCREENS.REPORT, SCREENS.RIGHT_MODAL.SEARCH_REPORT, SCREENS.RIGHT_MODAL.EXPENSE_REPORT, SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT], + }, + TRANSACTION_DUPLICATE_REVIEW_BILLABLE: { + path: 'duplicates/review/billable', + entryScreens: [SCREENS.REPORT, SCREENS.RIGHT_MODAL.SEARCH_REPORT, SCREENS.RIGHT_MODAL.EXPENSE_REPORT, SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT], + }, + TRANSACTION_DUPLICATE_CONFIRMATION: { + path: 'duplicates/confirm', + entryScreens: [SCREENS.REPORT, SCREENS.RIGHT_MODAL.SEARCH_REPORT, SCREENS.RIGHT_MODAL.EXPENSE_REPORT, SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT], + }, } as const satisfies DynamicRoutes; const ROUTES = { @@ -3407,30 +3423,6 @@ const ROUTES = { // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (threadReportID: string, backTo?: string) => getUrlWithBackToParam(`r/${threadReportID}/duplicates/review/tax-code` as const, backTo), }, - TRANSACTION_DUPLICATE_REVIEW_DESCRIPTION_PAGE: { - route: 'r/:threadReportID/duplicates/review/description', - - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation - getRoute: (threadReportID: string, backTo?: string) => getUrlWithBackToParam(`r/${threadReportID}/duplicates/review/description` as const, backTo), - }, - TRANSACTION_DUPLICATE_REVIEW_REIMBURSABLE_PAGE: { - route: 'r/:threadReportID/duplicates/review/reimbursable', - - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation - getRoute: (threadReportID: string, backTo?: string) => getUrlWithBackToParam(`r/${threadReportID}/duplicates/review/reimbursable` as const, backTo), - }, - TRANSACTION_DUPLICATE_REVIEW_BILLABLE_PAGE: { - route: 'r/:threadReportID/duplicates/review/billable', - - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation - getRoute: (threadReportID: string, backTo?: string) => getUrlWithBackToParam(`r/${threadReportID}/duplicates/review/billable` as const, backTo), - }, - TRANSACTION_DUPLICATE_CONFIRMATION_PAGE: { - route: 'r/:threadReportID/duplicates/confirm', - - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation - getRoute: (threadReportID: string, backTo?: string) => getUrlWithBackToParam(`r/${threadReportID}/duplicates/confirm` as const, backTo), - }, MERGE_TRANSACTION_LIST_PAGE: { route: 'merge/:transactionID', diff --git a/src/SCREENS.ts b/src/SCREENS.ts index b21d78b3b9f4..2c891f19c93f 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -406,11 +406,11 @@ const SCREENS = { MERCHANT: 'Transaction_Duplicate_Merchant', CATEGORY: 'Transaction_Duplicate_Category', TAG: 'Transaction_Duplicate_Tag', - DESCRIPTION: 'Transaction_Duplicate_Description', + DYNAMIC_REVIEW_DESCRIPTION: 'Dynamic_Transaction_Duplicate_Review_Description', TAX_CODE: 'Transaction_Duplicate_Tax_Code', - REIMBURSABLE: 'Transaction_Duplicate_Reimbursable', - BILLABLE: 'Transaction_Duplicate_Billable', - CONFIRMATION: 'Transaction_Duplicate_Confirmation', + DYNAMIC_REVIEW_REIMBURSABLE: 'Dynamic_Transaction_Duplicate_Review_Reimbursable', + DYNAMIC_REVIEW_BILLABLE: 'Dynamic_Transaction_Duplicate_Review_Billable', + DYNAMIC_CONFIRMATION: 'Dynamic_Transaction_Duplicate_Confirmation', }, MERGE_TRANSACTION: { diff --git a/src/hooks/useReviewDuplicatesNavigation.tsx b/src/hooks/useReviewDuplicatesNavigation.tsx index b2743ce43680..5bd801b0cb30 100644 --- a/src/hooks/useReviewDuplicatesNavigation.tsx +++ b/src/hooks/useReviewDuplicatesNavigation.tsx @@ -1,7 +1,8 @@ import {useEffect, useMemo, useState} from 'react'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import Navigation from '@libs/Navigation/Navigation'; import CONST from '@src/CONST'; -import ROUTES from '@src/ROUTES'; +import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; import type {Route} from '@src/ROUTES'; type StepName = 'description' | 'merchant' | 'category' | 'billable' | 'tag' | 'taxCode' | 'reimbursable' | 'confirmation'; @@ -11,6 +12,7 @@ function useReviewDuplicatesNavigation(stepNames: string[], currentScreenName: S const [prevScreen, setPrevScreen] = useState(); const [currentScreenIndex, setCurrentScreenIndex] = useState(0); const intersection = useMemo(() => CONST.REVIEW_DUPLICATES_ORDER.filter((element) => stepNames.includes(element)), [stepNames]); + const duplicateFlowBasePath = useMemo(() => ROUTES.REPORT_WITH_ID.getRoute(threadReportID), [threadReportID]); useEffect(() => { if (currentScreenName === 'confirmation') { @@ -37,16 +39,16 @@ function useReviewDuplicatesNavigation(stepNames: string[], currentScreenName: S Navigation.goBack(ROUTES.TRANSACTION_DUPLICATE_REVIEW_TAG_PAGE.getRoute(threadReportID, backTo)); break; case 'description': - Navigation.goBack(ROUTES.TRANSACTION_DUPLICATE_REVIEW_DESCRIPTION_PAGE.getRoute(threadReportID, backTo)); + Navigation.goBack(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_DESCRIPTION.path, duplicateFlowBasePath)); break; case 'taxCode': Navigation.goBack(ROUTES.TRANSACTION_DUPLICATE_REVIEW_TAX_CODE_PAGE.getRoute(threadReportID, backTo)); break; case 'reimbursable': - Navigation.goBack(ROUTES.TRANSACTION_DUPLICATE_REVIEW_REIMBURSABLE_PAGE.getRoute(threadReportID, backTo)); + Navigation.goBack(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_REIMBURSABLE.path, duplicateFlowBasePath)); break; case 'billable': - Navigation.goBack(ROUTES.TRANSACTION_DUPLICATE_REVIEW_BILLABLE_PAGE.getRoute(threadReportID, backTo)); + Navigation.goBack(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_BILLABLE.path, duplicateFlowBasePath)); break; default: if (backTo) { @@ -70,19 +72,19 @@ function useReviewDuplicatesNavigation(stepNames: string[], currentScreenName: S Navigation.navigate(ROUTES.TRANSACTION_DUPLICATE_REVIEW_TAG_PAGE.getRoute(threadReportID, backTo)); break; case 'description': - Navigation.navigate(ROUTES.TRANSACTION_DUPLICATE_REVIEW_DESCRIPTION_PAGE.getRoute(threadReportID, backTo)); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_DESCRIPTION.path, duplicateFlowBasePath)); break; case 'taxCode': Navigation.navigate(ROUTES.TRANSACTION_DUPLICATE_REVIEW_TAX_CODE_PAGE.getRoute(threadReportID, backTo)); break; case 'reimbursable': - Navigation.navigate(ROUTES.TRANSACTION_DUPLICATE_REVIEW_REIMBURSABLE_PAGE.getRoute(threadReportID, backTo)); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_REIMBURSABLE.path, duplicateFlowBasePath)); break; case 'billable': - Navigation.navigate(ROUTES.TRANSACTION_DUPLICATE_REVIEW_BILLABLE_PAGE.getRoute(threadReportID, backTo)); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_BILLABLE.path, duplicateFlowBasePath)); break; default: - Navigation.navigate(ROUTES.TRANSACTION_DUPLICATE_CONFIRMATION_PAGE.getRoute(threadReportID, backTo)); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_CONFIRMATION.path, duplicateFlowBasePath)); break; } }; diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx index 69262506cb48..0b361d968952 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx @@ -1016,11 +1016,11 @@ const TransactionDuplicateStackNavigator = createModalStackNavigator require('../../../../pages/TransactionDuplicate/ReviewMerchant').default, [SCREENS.TRANSACTION_DUPLICATE.CATEGORY]: () => require('../../../../pages/TransactionDuplicate/ReviewCategory').default, [SCREENS.TRANSACTION_DUPLICATE.TAG]: () => require('../../../../pages/TransactionDuplicate/ReviewTag').default, - [SCREENS.TRANSACTION_DUPLICATE.DESCRIPTION]: () => require('../../../../pages/TransactionDuplicate/ReviewDescription').default, + [SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_REVIEW_DESCRIPTION]: () => require('../../../../pages/TransactionDuplicate/ReviewDescription').default, [SCREENS.TRANSACTION_DUPLICATE.TAX_CODE]: () => require('../../../../pages/TransactionDuplicate/ReviewTaxCode').default, - [SCREENS.TRANSACTION_DUPLICATE.BILLABLE]: () => require('../../../../pages/TransactionDuplicate/ReviewBillable').default, - [SCREENS.TRANSACTION_DUPLICATE.REIMBURSABLE]: () => require('../../../../pages/TransactionDuplicate/ReviewReimbursable').default, - [SCREENS.TRANSACTION_DUPLICATE.CONFIRMATION]: () => require('../../../../pages/TransactionDuplicate/Confirmation').default, + [SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_REVIEW_BILLABLE]: () => require('../../../../pages/TransactionDuplicate/ReviewBillable').default, + [SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_REVIEW_REIMBURSABLE]: () => require('../../../../pages/TransactionDuplicate/ReviewReimbursable').default, + [SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_CONFIRMATION]: () => require('../../../../pages/TransactionDuplicate/Confirmation').default, }); const MergeTransactionStackNavigator = createModalStackNavigator({ diff --git a/src/libs/Navigation/linkingConfig/config.ts b/src/libs/Navigation/linkingConfig/config.ts index c84494257cad..dcb49db1a39e 100644 --- a/src/libs/Navigation/linkingConfig/config.ts +++ b/src/libs/Navigation/linkingConfig/config.ts @@ -1811,26 +1811,14 @@ const config: LinkingOptions['config'] = { path: ROUTES.TRANSACTION_DUPLICATE_REVIEW_TAG_PAGE.route, exact: true, }, - [SCREENS.TRANSACTION_DUPLICATE.DESCRIPTION]: { - path: ROUTES.TRANSACTION_DUPLICATE_REVIEW_DESCRIPTION_PAGE.route, - exact: true, - }, + [SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_REVIEW_DESCRIPTION]: DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_DESCRIPTION.path, [SCREENS.TRANSACTION_DUPLICATE.TAX_CODE]: { path: ROUTES.TRANSACTION_DUPLICATE_REVIEW_TAX_CODE_PAGE.route, exact: true, }, - [SCREENS.TRANSACTION_DUPLICATE.REIMBURSABLE]: { - path: ROUTES.TRANSACTION_DUPLICATE_REVIEW_REIMBURSABLE_PAGE.route, - exact: true, - }, - [SCREENS.TRANSACTION_DUPLICATE.BILLABLE]: { - path: ROUTES.TRANSACTION_DUPLICATE_REVIEW_BILLABLE_PAGE.route, - exact: true, - }, - [SCREENS.TRANSACTION_DUPLICATE.CONFIRMATION]: { - path: ROUTES.TRANSACTION_DUPLICATE_CONFIRMATION_PAGE.route, - exact: true, - }, + [SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_REVIEW_REIMBURSABLE]: DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_REIMBURSABLE.path, + [SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_REVIEW_BILLABLE]: DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_BILLABLE.path, + [SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_CONFIRMATION]: DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_CONFIRMATION.path, }, }, [SCREENS.RIGHT_MODAL.MERGE_TRANSACTION]: { diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index 1102e70ea545..832b59682d80 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -2409,25 +2409,26 @@ type TransactionDuplicateNavigatorParamList = { // eslint-disable-next-line no-restricted-syntax -- `backTo` usages in this file are legacy. Do not add new `backTo` params to screens. See contributingGuides/NAVIGATION.md backTo?: Routes; }; - [SCREENS.TRANSACTION_DUPLICATE.DESCRIPTION]: { - threadReportID: string; - // eslint-disable-next-line no-restricted-syntax -- `backTo` usages in this file are legacy. Do not add new `backTo` params to screens. See contributingGuides/NAVIGATION.md - backTo?: Routes; + [SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_REVIEW_DESCRIPTION]: { + threadReportID?: string; + reportID?: string; }; [SCREENS.TRANSACTION_DUPLICATE.TAX_CODE]: { threadReportID: string; // eslint-disable-next-line no-restricted-syntax -- `backTo` usages in this file are legacy. Do not add new `backTo` params to screens. See contributingGuides/NAVIGATION.md backTo?: Routes; }; - [SCREENS.TRANSACTION_DUPLICATE.BILLABLE]: { - threadReportID: string; - // eslint-disable-next-line no-restricted-syntax -- `backTo` usages in this file are legacy. Do not add new `backTo` params to screens. See contributingGuides/NAVIGATION.md - backTo?: Routes; + [SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_REVIEW_BILLABLE]: { + threadReportID?: string; + reportID?: string; }; - [SCREENS.TRANSACTION_DUPLICATE.REIMBURSABLE]: { - threadReportID: string; - // eslint-disable-next-line no-restricted-syntax -- `backTo` usages in this file are legacy. Do not add new `backTo` params to screens. See contributingGuides/NAVIGATION.md - backTo?: Routes; + [SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_REVIEW_REIMBURSABLE]: { + threadReportID?: string; + reportID?: string; + }; + [SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_CONFIRMATION]: { + threadReportID?: string; + reportID?: string; }; }; diff --git a/src/libs/TransactionPreviewUtils.ts b/src/libs/TransactionPreviewUtils.ts index 2f8da3aa0ebb..3218d89edbb8 100644 --- a/src/libs/TransactionPreviewUtils.ts +++ b/src/libs/TransactionPreviewUtils.ts @@ -1,8 +1,9 @@ import truncate from 'lodash/truncate'; import type {OnyxEntry} from 'react-native-onyx'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import CONST from '@src/CONST'; import type {TranslationPaths} from '@src/languages/types'; -import ROUTES from '@src/ROUTES'; +import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; import type * as OnyxTypes from '@src/types/onyx'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; import {setReviewDuplicatesKey} from './actions/Transaction'; @@ -105,19 +106,19 @@ const getReviewNavigationRoute = ( return ROUTES.TRANSACTION_DUPLICATE_REVIEW_TAG_PAGE.getRoute(threadReportID, backTo); } if (comparisonResult.change.description) { - return ROUTES.TRANSACTION_DUPLICATE_REVIEW_DESCRIPTION_PAGE.getRoute(threadReportID, backTo); + return createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_DESCRIPTION.path, ROUTES.REPORT_WITH_ID.getRoute(threadReportID)); } if (comparisonResult.change.taxCode) { return ROUTES.TRANSACTION_DUPLICATE_REVIEW_TAX_CODE_PAGE.getRoute(threadReportID, backTo); } if (comparisonResult.change.billable) { - return ROUTES.TRANSACTION_DUPLICATE_REVIEW_BILLABLE_PAGE.getRoute(threadReportID, backTo); + return createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_BILLABLE.path, ROUTES.REPORT_WITH_ID.getRoute(threadReportID)); } if (comparisonResult.change.reimbursable) { - return ROUTES.TRANSACTION_DUPLICATE_REVIEW_REIMBURSABLE_PAGE.getRoute(threadReportID, backTo); + return createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_REIMBURSABLE.path, ROUTES.REPORT_WITH_ID.getRoute(threadReportID)); } - return ROUTES.TRANSACTION_DUPLICATE_CONFIRMATION_PAGE.getRoute(threadReportID, backTo); + return createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_CONFIRMATION.path, ROUTES.REPORT_WITH_ID.getRoute(threadReportID)); }; type TranslationPathOrText = { diff --git a/src/pages/TransactionDuplicate/Confirmation.tsx b/src/pages/TransactionDuplicate/Confirmation.tsx index bb0392b36c45..08a68b825254 100644 --- a/src/pages/TransactionDuplicate/Confirmation.tsx +++ b/src/pages/TransactionDuplicate/Confirmation.tsx @@ -40,12 +40,13 @@ import isLoadingOnyxValue from '@src/types/utils/isLoadingOnyxValue'; function Confirmation() { const styles = useThemeStyles(); const {translate} = useLocalize(); - const route = useRoute>(); + const route = useRoute>(); + const threadReportID = route.params.threadReportID ?? route.params.reportID; const currentUserPersonalDetails = useCurrentUserPersonalDetails(); const [reviewDuplicates, reviewDuplicatesResult] = useOnyx(ONYXKEYS.REVIEW_DUPLICATES); const [duplicatedTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(reviewDuplicates?.transactionID)}`); const newTransaction = useMemo(() => TransactionUtils.buildNewTransactionAfterReviewingDuplicates(reviewDuplicates, duplicatedTransaction), [duplicatedTransaction, reviewDuplicates]); - const [report, reportResult] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${route.params.threadReportID}`); + const [report, reportResult] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${threadReportID}`); const transactionID = TransactionUtils.getTransactionID(report); const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(transactionID)}`); const [transactionViolations] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${getNonEmptyStringOnyxID(transactionID)}`); @@ -59,7 +60,7 @@ function Confirmation() { const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${report?.policyID}`); const [policyTags] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${getNonEmptyStringOnyxID(reviewDuplicatesReport?.policyID)}`); const compareResult = TransactionUtils.compareDuplicateTransactionFields(policyTags ?? {}, transaction, allDuplicates, reviewDuplicatesReport, undefined, policy, policyCategories); - const {goBack} = useReviewDuplicatesNavigation(Object.keys(compareResult.change ?? {}), 'confirmation', route.params.threadReportID, route.params.backTo); + const {goBack} = useReviewDuplicatesNavigation(Object.keys(compareResult.change ?? {}), 'confirmation', threadReportID ?? ''); const [iouReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${newTransaction?.reportID}`); const [reportActions] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${newTransaction?.reportID}`); const reportAction = Object.values(reportActions ?? {}).find( diff --git a/src/pages/TransactionDuplicate/ReviewBillable.tsx b/src/pages/TransactionDuplicate/ReviewBillable.tsx index fcfe057002d2..a11c96f67c02 100644 --- a/src/pages/TransactionDuplicate/ReviewBillable.tsx +++ b/src/pages/TransactionDuplicate/ReviewBillable.tsx @@ -18,9 +18,10 @@ import type {FieldItemType} from './ReviewFields'; import ReviewFields from './ReviewFields'; function ReviewBillable() { - const route = useRoute>(); + const route = useRoute>(); + const threadReportID = route.params.threadReportID ?? route.params.reportID; const {translate} = useLocalize(); - const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${route.params.threadReportID}`); + const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${threadReportID}`); const transactionID = getTransactionID(report); const [reviewDuplicates] = useOnyx(ONYXKEYS.REVIEW_DUPLICATES); const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(transactionID)}`); @@ -38,12 +39,7 @@ function ReviewBillable() { const compareResult = compareDuplicateTransactionFields(policyTags ?? {}, transaction, allDuplicates, reviewDuplicatesReport, undefined, policy, policyCategories); const stepNames = Object.keys(compareResult.change ?? {}).map((key, index) => (index + 1).toString()); - const {currentScreenIndex, goBack, navigateToNextScreen} = useReviewDuplicatesNavigation( - Object.keys(compareResult.change ?? {}), - 'billable', - route.params.threadReportID, - route.params.backTo, - ); + const {currentScreenIndex, goBack, navigateToNextScreen} = useReviewDuplicatesNavigation(Object.keys(compareResult.change ?? {}), 'billable', threadReportID ?? ''); const options = useMemo( () => compareResult.change.billable?.map((billable) => ({ diff --git a/src/pages/TransactionDuplicate/ReviewDescription.tsx b/src/pages/TransactionDuplicate/ReviewDescription.tsx index bd73d9fbfe62..ef6141b7e9b6 100644 --- a/src/pages/TransactionDuplicate/ReviewDescription.tsx +++ b/src/pages/TransactionDuplicate/ReviewDescription.tsx @@ -20,9 +20,10 @@ import type {FieldItemType} from './ReviewFields'; import ReviewFields from './ReviewFields'; function ReviewDescription() { - const route = useRoute>(); + const route = useRoute>(); + const threadReportID = route.params.threadReportID ?? route.params.reportID; const {translate} = useLocalize(); - const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${route.params.threadReportID}`); + const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${threadReportID}`); const transactionID = getTransactionID(report); const [reviewDuplicates] = useOnyx(ONYXKEYS.REVIEW_DUPLICATES); const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(transactionID)}`); @@ -39,12 +40,7 @@ function ReviewDescription() { const compareResult = compareDuplicateTransactionFields(policyTags ?? {}, transaction, allDuplicates, reviewDuplicatesReport, undefined, policy, policyCategories); const stepNames = Object.keys(compareResult.change ?? {}).map((key, index) => (index + 1).toString()); - const {currentScreenIndex, goBack, navigateToNextScreen} = useReviewDuplicatesNavigation( - Object.keys(compareResult.change ?? {}), - 'description', - route.params.threadReportID, - route.params.backTo, - ); + const {currentScreenIndex, goBack, navigateToNextScreen} = useReviewDuplicatesNavigation(Object.keys(compareResult.change ?? {}), 'description', threadReportID ?? ''); const options = useMemo( () => compareResult.change.description?.map((description) => diff --git a/src/pages/TransactionDuplicate/ReviewReimbursable.tsx b/src/pages/TransactionDuplicate/ReviewReimbursable.tsx index 80634e4821a2..6bc66d88cd72 100644 --- a/src/pages/TransactionDuplicate/ReviewReimbursable.tsx +++ b/src/pages/TransactionDuplicate/ReviewReimbursable.tsx @@ -18,9 +18,10 @@ import type {FieldItemType} from './ReviewFields'; import ReviewFields from './ReviewFields'; function ReviewReimbursable() { - const route = useRoute>(); + const route = useRoute>(); + const threadReportID = route.params.threadReportID ?? route.params.reportID; const {translate} = useLocalize(); - const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${route.params.threadReportID}`); + const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${threadReportID}`); const transactionID = getTransactionID(report); const [reviewDuplicates] = useOnyx(ONYXKEYS.REVIEW_DUPLICATES); const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(transactionID)}`); @@ -37,12 +38,7 @@ function ReviewReimbursable() { const compareResult = compareDuplicateTransactionFields(policyTags ?? {}, transaction, allDuplicates, reviewDuplicatesReport, undefined, policy, policyCategories); const stepNames = Object.keys(compareResult.change ?? {}).map((key, index) => (index + 1).toString()); - const {currentScreenIndex, goBack, navigateToNextScreen} = useReviewDuplicatesNavigation( - Object.keys(compareResult.change ?? {}), - 'reimbursable', - route.params.threadReportID, - route.params.backTo, - ); + const {currentScreenIndex, goBack, navigateToNextScreen} = useReviewDuplicatesNavigation(Object.keys(compareResult.change ?? {}), 'reimbursable', threadReportID ?? ''); const options = useMemo( () => compareResult.change.reimbursable?.map((reimbursable) => ({