Skip to content
6 changes: 3 additions & 3 deletions config/eslint/eslint.seatbelt.tsv
Original file line number Diff line number Diff line change
Expand Up @@ -1181,9 +1181,9 @@
"../../src/pages/ShareCodePage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2
"../../src/pages/TeachersUnite/ImTeacherUpdateEmailPage.tsx" "no-restricted-imports" 1
"../../src/pages/TeachersUnite/SaveTheWorldPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1
"../../src/pages/TransactionDuplicate/Confirmation.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1
"../../src/pages/TransactionDuplicate/Confirmation.tsx" "no-restricted-imports" 2
"../../src/pages/TransactionDuplicate/Confirmation.tsx" "react-hooks/refs" 12
"../../src/pages/TransactionDuplicate/DynamicConfirmationPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1
"../../src/pages/TransactionDuplicate/DynamicConfirmationPage.tsx" "no-restricted-imports" 2
"../../src/pages/TransactionDuplicate/DynamicConfirmationPage.tsx" "react-hooks/refs" 12
"../../src/pages/TransactionDuplicate/DuplicateTransactionItem.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2
"../../src/pages/TransactionDuplicate/Review.tsx" "no-restricted-imports" 1
"../../src/pages/TransactionMerge/ConfirmationPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1
Expand Down
137 changes: 97 additions & 40 deletions src/ROUTES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1125,6 +1125,103 @@ const DYNAMIC_ROUTES = {
path: 'initial-list-value',
entryScreens: [SCREENS.WORKSPACE.REPORT_FIELDS_CREATE],
},
TRANSACTION_DUPLICATE_CONFIRMATION: {
path: 'confirm',
entryScreens: [
SCREENS.TRANSACTION_DUPLICATE.REVIEW,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_MERCHANT,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_CATEGORY,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_TAG,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_DESCRIPTION,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_TAX_CODE,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_REIMBURSABLE,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_BILLABLE,
],
},
TRANSACTION_DUPLICATE_REVIEW_BILLABLE: {
path: 'billable',
entryScreens: [
SCREENS.TRANSACTION_DUPLICATE.REVIEW,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_MERCHANT,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_CATEGORY,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_TAG,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_DESCRIPTION,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_TAX_CODE,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_REIMBURSABLE,
],
},
TRANSACTION_DUPLICATE_REVIEW_REIMBURSABLE: {
path: 'reimbursable',
entryScreens: [
SCREENS.TRANSACTION_DUPLICATE.REVIEW,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_MERCHANT,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_CATEGORY,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_TAG,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_DESCRIPTION,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_TAX_CODE,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_BILLABLE,
],
},
TRANSACTION_DUPLICATE_REVIEW_DESCRIPTION: {
path: 'transaction-duplicate-description',
entryScreens: [
SCREENS.TRANSACTION_DUPLICATE.REVIEW,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_MERCHANT,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_CATEGORY,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_TAG,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_TAX_CODE,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_BILLABLE,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_REIMBURSABLE,
],
},
TRANSACTION_DUPLICATE_REVIEW_TAX_CODE: {
path: 'tax-code',
entryScreens: [
SCREENS.TRANSACTION_DUPLICATE.REVIEW,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_MERCHANT,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_CATEGORY,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_TAG,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_DESCRIPTION,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_BILLABLE,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_REIMBURSABLE,
],
},
TRANSACTION_DUPLICATE_REVIEW_TAG: {
path: 'transaction-duplicate-tag',
entryScreens: [
SCREENS.TRANSACTION_DUPLICATE.REVIEW,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_MERCHANT,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_CATEGORY,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_DESCRIPTION,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_TAX_CODE,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_BILLABLE,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_REIMBURSABLE,
],
},
TRANSACTION_DUPLICATE_REVIEW_CATEGORY: {
path: 'category',
entryScreens: [
SCREENS.TRANSACTION_DUPLICATE.REVIEW,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_MERCHANT,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_TAG,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_DESCRIPTION,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_TAX_CODE,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_BILLABLE,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_REIMBURSABLE,
],
},
TRANSACTION_DUPLICATE_REVIEW_MERCHANT: {
path: 'merchant',
entryScreens: [
SCREENS.TRANSACTION_DUPLICATE.REVIEW,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_CATEGORY,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_TAG,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_DESCRIPTION,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_TAX_CODE,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_BILLABLE,
SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_REIMBURSABLE,
],
},
} as const satisfies DynamicRoutes;

const ROUTES = {
Expand Down Expand Up @@ -3542,46 +3639,6 @@ const ROUTES = {

getRoute: (threadReportID: string | undefined, backTo?: string) => getUrlWithBackToParam(`r/${threadReportID}/duplicates/review` as const, backTo),
},
TRANSACTION_DUPLICATE_REVIEW_MERCHANT_PAGE: {
route: 'r/:threadReportID/duplicates/review/merchant',

getRoute: (threadReportID: string, backTo?: string) => getUrlWithBackToParam(`r/${threadReportID}/duplicates/review/merchant` as const, backTo),
},
TRANSACTION_DUPLICATE_REVIEW_CATEGORY_PAGE: {
route: 'r/:threadReportID/duplicates/review/category',

getRoute: (threadReportID: string, backTo?: string) => getUrlWithBackToParam(`r/${threadReportID}/duplicates/review/category` as const, backTo),
},
TRANSACTION_DUPLICATE_REVIEW_TAG_PAGE: {
route: 'r/:threadReportID/duplicates/review/tag',

getRoute: (threadReportID: string, backTo?: string) => getUrlWithBackToParam(`r/${threadReportID}/duplicates/review/tag` as const, backTo),
},
TRANSACTION_DUPLICATE_REVIEW_TAX_CODE_PAGE: {
route: 'r/:threadReportID/duplicates/review/tax-code',

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',

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',

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',

getRoute: (threadReportID: string, backTo?: string) => getUrlWithBackToParam(`r/${threadReportID}/duplicates/review/billable` as const, backTo),
},
TRANSACTION_DUPLICATE_CONFIRMATION_PAGE: {
route: 'r/:threadReportID/duplicates/confirm',

getRoute: (threadReportID: string, backTo?: string) => getUrlWithBackToParam(`r/${threadReportID}/duplicates/confirm` as const, backTo),
},
MERGE_TRANSACTION_LIST_PAGE: {
route: 'merge/:transactionID',

Expand Down
16 changes: 8 additions & 8 deletions src/SCREENS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -382,14 +382,14 @@ const SCREENS = {

TRANSACTION_DUPLICATE: {
REVIEW: 'Transaction_Duplicate_Review',
MERCHANT: 'Transaction_Duplicate_Merchant',
CATEGORY: 'Transaction_Duplicate_Category',
TAG: 'Transaction_Duplicate_Tag',
DESCRIPTION: 'Transaction_Duplicate_Description',
TAX_CODE: 'Transaction_Duplicate_Tax_Code',
REIMBURSABLE: 'Transaction_Duplicate_Reimbursable',
BILLABLE: 'Transaction_Duplicate_Billable',
CONFIRMATION: 'Transaction_Duplicate_Confirmation',
DYNAMIC_MERCHANT: 'Dynamic_Transaction_Duplicate_Merchant',
DYNAMIC_CATEGORY: 'Dynamic_Transaction_Duplicate_Category',
DYNAMIC_TAG: 'Dynamic_Transaction_Duplicate_Tag',
DYNAMIC_DESCRIPTION: 'Dynamic_Transaction_Duplicate_Description',
DYNAMIC_TAX_CODE: 'Dynamic_Transaction_Duplicate_Tax_Code',
DYNAMIC_BILLABLE: 'Dynamic_Transaction_Duplicate_Billable',
DYNAMIC_REIMBURSABLE: 'Dynamic_Transaction_Duplicate_Reimbursable',
DYNAMIC_CONFIRMATION: 'Dynamic_Transaction_Duplicate_Confirmation',
},

MERGE_TRANSACTION: {
Expand Down
33 changes: 17 additions & 16 deletions src/hooks/useReviewDuplicatesNavigation.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
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';

import {useEffect, useMemo, useState} from 'react';
Expand Down Expand Up @@ -30,25 +31,25 @@ function useReviewDuplicatesNavigation(stepNames: string[], currentScreenName: S
const goBack = () => {
switch (prevScreen) {
case 'merchant':
Navigation.goBack(ROUTES.TRANSACTION_DUPLICATE_REVIEW_MERCHANT_PAGE.getRoute(threadReportID, backTo));
Navigation.goBack(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_MERCHANT.path));
break;
case 'category':
Navigation.goBack(ROUTES.TRANSACTION_DUPLICATE_REVIEW_CATEGORY_PAGE.getRoute(threadReportID, backTo));
Navigation.goBack(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_CATEGORY.path));
break;
case 'tag':
Navigation.goBack(ROUTES.TRANSACTION_DUPLICATE_REVIEW_TAG_PAGE.getRoute(threadReportID, backTo));
Navigation.goBack(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_TAG.path));
break;
case 'description':
Navigation.goBack(ROUTES.TRANSACTION_DUPLICATE_REVIEW_DESCRIPTION_PAGE.getRoute(threadReportID, backTo));
Navigation.goBack(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_DESCRIPTION.path));
break;
case 'taxCode':
Navigation.goBack(ROUTES.TRANSACTION_DUPLICATE_REVIEW_TAX_CODE_PAGE.getRoute(threadReportID, backTo));
Navigation.goBack(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_TAX_CODE.path));
break;
case 'reimbursable':
Navigation.goBack(ROUTES.TRANSACTION_DUPLICATE_REVIEW_REIMBURSABLE_PAGE.getRoute(threadReportID, backTo));
Navigation.goBack(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_REIMBURSABLE.path));
break;
case 'billable':
Navigation.goBack(ROUTES.TRANSACTION_DUPLICATE_REVIEW_BILLABLE_PAGE.getRoute(threadReportID, backTo));
Navigation.goBack(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_BILLABLE.path));
break;
default:
if (backTo) {
Expand All @@ -63,28 +64,28 @@ function useReviewDuplicatesNavigation(stepNames: string[], currentScreenName: S
const navigateToNextScreen = () => {
switch (nextScreen) {
case 'merchant':
Navigation.navigate(ROUTES.TRANSACTION_DUPLICATE_REVIEW_MERCHANT_PAGE.getRoute(threadReportID, backTo));
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_MERCHANT.path));
break;
case 'category':
Navigation.navigate(ROUTES.TRANSACTION_DUPLICATE_REVIEW_CATEGORY_PAGE.getRoute(threadReportID, backTo));
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_CATEGORY.path));
break;
case 'tag':
Navigation.navigate(ROUTES.TRANSACTION_DUPLICATE_REVIEW_TAG_PAGE.getRoute(threadReportID, backTo));
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_TAG.path));
break;
case 'description':
Navigation.navigate(ROUTES.TRANSACTION_DUPLICATE_REVIEW_DESCRIPTION_PAGE.getRoute(threadReportID, backTo));
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_DESCRIPTION.path));
break;
case 'taxCode':
Navigation.navigate(ROUTES.TRANSACTION_DUPLICATE_REVIEW_TAX_CODE_PAGE.getRoute(threadReportID, backTo));
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_TAX_CODE.path));
break;
case 'reimbursable':
Navigation.navigate(ROUTES.TRANSACTION_DUPLICATE_REVIEW_REIMBURSABLE_PAGE.getRoute(threadReportID, backTo));
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_REIMBURSABLE.path));
break;
case 'billable':
Navigation.navigate(ROUTES.TRANSACTION_DUPLICATE_REVIEW_BILLABLE_PAGE.getRoute(threadReportID, backTo));
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_REVIEW_BILLABLE.path));
break;
default:
Navigation.navigate(ROUTES.TRANSACTION_DUPLICATE_CONFIRMATION_PAGE.getRoute(threadReportID, backTo));
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.TRANSACTION_DUPLICATE_CONFIRMATION.path));
break;
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1169,14 +1169,14 @@ const ReferralModalStackNavigator = createModalStackNavigator<ReferralDetailsNav

const TransactionDuplicateStackNavigator = createModalStackNavigator<TransactionDuplicateNavigatorParamList>({
[SCREENS.TRANSACTION_DUPLICATE.REVIEW]: () => require<ReactComponentModule>('../../../../pages/TransactionDuplicate/Review').default,
[SCREENS.TRANSACTION_DUPLICATE.MERCHANT]: () => require<ReactComponentModule>('../../../../pages/TransactionDuplicate/ReviewMerchant').default,
[SCREENS.TRANSACTION_DUPLICATE.CATEGORY]: () => require<ReactComponentModule>('../../../../pages/TransactionDuplicate/ReviewCategory').default,
[SCREENS.TRANSACTION_DUPLICATE.TAG]: () => require<ReactComponentModule>('../../../../pages/TransactionDuplicate/ReviewTag').default,
[SCREENS.TRANSACTION_DUPLICATE.DESCRIPTION]: () => require<ReactComponentModule>('../../../../pages/TransactionDuplicate/ReviewDescription').default,
[SCREENS.TRANSACTION_DUPLICATE.TAX_CODE]: () => require<ReactComponentModule>('../../../../pages/TransactionDuplicate/ReviewTaxCode').default,
[SCREENS.TRANSACTION_DUPLICATE.BILLABLE]: () => require<ReactComponentModule>('../../../../pages/TransactionDuplicate/ReviewBillable').default,
[SCREENS.TRANSACTION_DUPLICATE.REIMBURSABLE]: () => require<ReactComponentModule>('../../../../pages/TransactionDuplicate/ReviewReimbursable').default,
[SCREENS.TRANSACTION_DUPLICATE.CONFIRMATION]: () => require<ReactComponentModule>('../../../../pages/TransactionDuplicate/Confirmation').default,
[SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_MERCHANT]: () => require<ReactComponentModule>('../../../../pages/TransactionDuplicate/DynamicReviewMerchantPage').default,
[SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_CATEGORY]: () => require<ReactComponentModule>('../../../../pages/TransactionDuplicate/DynamicReviewCategoryPage').default,
[SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_TAG]: () => require<ReactComponentModule>('../../../../pages/TransactionDuplicate/DynamicReviewTagPage').default,
[SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_DESCRIPTION]: () => require<ReactComponentModule>('../../../../pages/TransactionDuplicate/DynamicReviewDescriptionPage').default,
[SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_TAX_CODE]: () => require<ReactComponentModule>('../../../../pages/TransactionDuplicate/DynamicReviewTaxCodePage').default,
[SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_BILLABLE]: () => require<ReactComponentModule>('../../../../pages/TransactionDuplicate/DynamicReviewBillablePage').default,
[SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_REIMBURSABLE]: () => require<ReactComponentModule>('../../../../pages/TransactionDuplicate/DynamicReviewReimbursablePage').default,
[SCREENS.TRANSACTION_DUPLICATE.DYNAMIC_CONFIRMATION]: () => require<ReactComponentModule>('../../../../pages/TransactionDuplicate/DynamicConfirmationPage').default,
});

const MergeTransactionStackNavigator = createModalStackNavigator<MergeTransactionNavigatorParamList>({
Expand Down
Loading
Loading