Skip to content
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions config/eslint/eslint.seatbelt.tsv
Original file line number Diff line number Diff line change
Expand Up @@ -1216,14 +1216,14 @@
"../../src/pages/TransactionDuplicate/Confirmation.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
"../../src/pages/TransactionMerge/ConfirmationPage.tsx" "no-restricted-imports" 1
"../../src/pages/TransactionMerge/DetailsReviewPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1
"../../src/pages/TransactionMerge/DetailsReviewPage.tsx" "no-restricted-imports" 1
"../../src/pages/TransactionMerge/DynamicConfirmationPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1
"../../src/pages/TransactionMerge/DynamicConfirmationPage.tsx" "no-restricted-imports" 1
"../../src/pages/TransactionMerge/DynamicDetailsReviewPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1
"../../src/pages/TransactionMerge/DynamicDetailsReviewPage.tsx" "no-restricted-imports" 1
"../../src/pages/TransactionMerge/MergeTransactionItem.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1
"../../src/pages/TransactionMerge/MergeTransactionsListContent.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1
"../../src/pages/TransactionMerge/ReceiptReviewPage.tsx" "no-restricted-imports" 1
"../../src/pages/TransactionMerge/TransactionMergeReceipts.tsx" "no-restricted-imports" 1
"../../src/pages/TransactionMerge/DynamicReceiptReviewPage.tsx" "no-restricted-imports" 1
"../../src/pages/TransactionMerge/DynamicTransactionMergeReceipts.tsx" "no-restricted-imports" 1
"../../src/pages/Travel/DynamicDomainPermissionInfoPage.tsx" "no-restricted-imports" 1
"../../src/pages/Travel/DynamicDomainSelectorPage.tsx" "no-restricted-imports" 1
"../../src/pages/Travel/DynamicPublicDomainErrorPage.tsx" "no-restricted-imports" 1
Expand Down
76 changes: 44 additions & 32 deletions src/ROUTES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1130,6 +1130,50 @@ const DYNAMIC_ROUTES = {
path: 'initial-list-value',
entryScreens: [SCREENS.WORKSPACE.REPORT_FIELDS_CREATE],
},
MERGE_TRANSACTION_LIST: {
path: 'merge/:transactionID',
entryScreens: [SCREENS.REPORT, SCREENS.RIGHT_MODAL.SEARCH_REPORT, SCREENS.RIGHT_MODAL.EXPENSE_REPORT, SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT, SCREENS.SEARCH.ROOT],
getRoute: (transactionID: string) => `merge/${transactionID}` as const,
},
MERGE_TRANSACTION_RECEIPT: {
path: 'merge/:transactionID/receipt',
entryScreens: [
SCREENS.MERGE_TRANSACTION.DYNAMIC_LIST_PAGE,
SCREENS.REPORT,
SCREENS.RIGHT_MODAL.SEARCH_REPORT,
SCREENS.RIGHT_MODAL.EXPENSE_REPORT,
SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT,
SCREENS.SEARCH.ROOT,
],
getRoute: (transactionID: string) => `merge/${transactionID}/receipt` as const,
},
MERGE_TRANSACTION_DETAILS: {
path: 'merge/:transactionID/details',
entryScreens: [
SCREENS.MERGE_TRANSACTION.DYNAMIC_LIST_PAGE,
SCREENS.MERGE_TRANSACTION.DYNAMIC_RECEIPT_PAGE,
SCREENS.REPORT,
SCREENS.RIGHT_MODAL.SEARCH_REPORT,
SCREENS.RIGHT_MODAL.EXPENSE_REPORT,
SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT,
SCREENS.SEARCH.ROOT,
],
getRoute: (transactionID: string) => `merge/${transactionID}/details` as const,
},
MERGE_TRANSACTION_CONFIRMATION: {
path: 'merge/:transactionID/confirmation',
entryScreens: [
SCREENS.MERGE_TRANSACTION.DYNAMIC_LIST_PAGE,
SCREENS.MERGE_TRANSACTION.DYNAMIC_RECEIPT_PAGE,
SCREENS.MERGE_TRANSACTION.DYNAMIC_DETAILS_PAGE,
SCREENS.REPORT,
SCREENS.RIGHT_MODAL.SEARCH_REPORT,
SCREENS.RIGHT_MODAL.EXPENSE_REPORT,
SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT,
SCREENS.SEARCH.ROOT,
],
getRoute: (transactionID: string) => `merge/${transactionID}/confirmation` as const,
},
} as const satisfies DynamicRoutes;

const ROUTES = {
Expand Down Expand Up @@ -3548,38 +3592,6 @@ const ROUTES = {

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

getRoute: (transactionID: string, backTo: string, isOnSearch = false) => {
const url = getUrlWithBackToParam(`merge/${transactionID}` as const, backTo);
return isOnSearch ? (`${url}&isOnSearch=true` as const) : url;
},
},
MERGE_TRANSACTION_RECEIPT_PAGE: {
route: 'merge/:transactionID/receipt',

getRoute: (transactionID: string, backTo: string, isOnSearch = false) => {
const url = getUrlWithBackToParam(`merge/${transactionID}/receipt` as const, backTo);
return isOnSearch ? (`${url}&isOnSearch=true` as const) : url;
},
},
MERGE_TRANSACTION_DETAILS_PAGE: {
route: 'merge/:transactionID/details',

getRoute: (transactionID: string, backTo: string, isOnSearch = false) => {
const url = getUrlWithBackToParam(`merge/${transactionID}/details` as const, backTo);
return isOnSearch ? (`${url}&isOnSearch=true` as const) : url;
},
},
MERGE_TRANSACTION_CONFIRMATION_PAGE: {
route: 'merge/:transactionID/confirmation',

getRoute: (transactionID: string, backTo: string, isOnSearch = false) => {
const url = getUrlWithBackToParam(`merge/${transactionID}/confirmation` as const, backTo);
return isOnSearch ? (`${url}&isOnSearch=true` as const) : url;
},
},
POLICY_ACCOUNTING_XERO_SETUP: {
route: 'workspaces/:policyID/accounting/xero/setup',
getRoute: (policyID: string) => `workspaces/${policyID}/accounting/xero/setup` as const,
Expand Down
8 changes: 4 additions & 4 deletions src/SCREENS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -393,10 +393,10 @@ const SCREENS = {
},

MERGE_TRANSACTION: {
LIST_PAGE: 'Merge_Transaction_List_Page',
RECEIPT_PAGE: 'Merge_Transaction_Receipt_Page',
DETAILS_PAGE: 'Merge_Transaction_Details_Page',
CONFIRMATION_PAGE: 'Merge_Transaction_Confirmation_Page',
DYNAMIC_LIST_PAGE: 'Dynamic_Merge_Transaction_List_Page',
DYNAMIC_RECEIPT_PAGE: 'Dynamic_Merge_Transaction_Receipt_Page',
DYNAMIC_DETAILS_PAGE: 'Dynamic_Merge_Transaction_Details_Page',
DYNAMIC_CONFIRMATION_PAGE: 'Dynamic_Merge_Transaction_Confirmation_Page',
},

IOU_SEND: {
Expand Down
3 changes: 1 addition & 2 deletions src/components/MoneyRequestHeaderSecondaryActions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -381,8 +381,7 @@ function MoneyRequestHeaderSecondaryActions({reportID, onBackButtonPress}: Money
if (!transaction) {
return;
}
const isOnSearch = route.name.toLowerCase().startsWith('search');
setupMergeTransactionDataAndNavigate(transaction.transactionID, [transaction], localeCompare, getCurrencyDecimals, [], false, isOnSearch);
setupMergeTransactionDataAndNavigate(transaction.transactionID, [transaction], localeCompare, getCurrencyDecimals, [], false);
},
},
[CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.DUPLICATE]: {
Expand Down
2 changes: 1 addition & 1 deletion src/hooks/useSearchBulkActions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2021,7 +2021,7 @@ function useSearchBulkActions({queryJSON}: UseSearchBulkActionsParams) {
text: translate('common.merge'),
icon: expensifyIcons.ArrowCollapse,
value: CONST.SEARCH.BULK_ACTION_TYPES.MERGE,
onSelected: () => setupMergeTransactionDataAndNavigate(transactionID, searchedTransactions, localeCompare, getCurrencyDecimals, reports, false, true),
onSelected: () => setupMergeTransactionDataAndNavigate(transactionID, searchedTransactions, localeCompare, getCurrencyDecimals, reports, false),
});
}
}
Expand Down
1 change: 0 additions & 1 deletion src/hooks/useSelectedTransactionsActions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -470,7 +470,6 @@ function useSelectedTransactionsActions({
getCurrencyDecimals,
[],
false,
isOnSearch,
selectedTransactionsList.length > 1 ? [policy, policy] : undefined,
),
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1170,10 +1170,10 @@ const TransactionDuplicateStackNavigator = createModalStackNavigator<Transaction
});

const MergeTransactionStackNavigator = createModalStackNavigator<MergeTransactionNavigatorParamList>({
[SCREENS.MERGE_TRANSACTION.LIST_PAGE]: () => require<ReactComponentModule>('../../../../pages/TransactionMerge/MergeTransactionsListPage').default,
[SCREENS.MERGE_TRANSACTION.RECEIPT_PAGE]: () => require<ReactComponentModule>('../../../../pages/TransactionMerge/ReceiptReviewPage').default,
[SCREENS.MERGE_TRANSACTION.DETAILS_PAGE]: () => require<ReactComponentModule>('../../../../pages/TransactionMerge/DetailsReviewPage').default,
[SCREENS.MERGE_TRANSACTION.CONFIRMATION_PAGE]: () => require<ReactComponentModule>('../../../../pages/TransactionMerge/ConfirmationPage').default,
[SCREENS.MERGE_TRANSACTION.DYNAMIC_LIST_PAGE]: () => require<ReactComponentModule>('../../../../pages/TransactionMerge/DynamicMergeTransactionsListPage').default,
[SCREENS.MERGE_TRANSACTION.DYNAMIC_RECEIPT_PAGE]: () => require<ReactComponentModule>('../../../../pages/TransactionMerge/DynamicReceiptReviewPage').default,
[SCREENS.MERGE_TRANSACTION.DYNAMIC_DETAILS_PAGE]: () => require<ReactComponentModule>('../../../../pages/TransactionMerge/DynamicDetailsReviewPage').default,
[SCREENS.MERGE_TRANSACTION.DYNAMIC_CONFIRMATION_PAGE]: () => require<ReactComponentModule>('../../../../pages/TransactionMerge/DynamicConfirmationPage').default,
});

const SearchReportActionsModalStackNavigator = createModalStackNavigator<SearchReportActionsParamList>({
Expand Down
8 changes: 4 additions & 4 deletions src/libs/Navigation/linkingConfig/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1863,10 +1863,10 @@ const config: LinkingOptions<RootNavigatorParamList>['config'] = {
},
[SCREENS.RIGHT_MODAL.MERGE_TRANSACTION]: {
screens: {
[SCREENS.MERGE_TRANSACTION.LIST_PAGE]: ROUTES.MERGE_TRANSACTION_LIST_PAGE.route,
[SCREENS.MERGE_TRANSACTION.RECEIPT_PAGE]: ROUTES.MERGE_TRANSACTION_RECEIPT_PAGE.route,
[SCREENS.MERGE_TRANSACTION.DETAILS_PAGE]: ROUTES.MERGE_TRANSACTION_DETAILS_PAGE.route,
[SCREENS.MERGE_TRANSACTION.CONFIRMATION_PAGE]: ROUTES.MERGE_TRANSACTION_CONFIRMATION_PAGE.route,
[SCREENS.MERGE_TRANSACTION.DYNAMIC_LIST_PAGE]: DYNAMIC_ROUTES.MERGE_TRANSACTION_LIST.path,
[SCREENS.MERGE_TRANSACTION.DYNAMIC_RECEIPT_PAGE]: DYNAMIC_ROUTES.MERGE_TRANSACTION_RECEIPT.path,
[SCREENS.MERGE_TRANSACTION.DYNAMIC_DETAILS_PAGE]: DYNAMIC_ROUTES.MERGE_TRANSACTION_DETAILS.path,
[SCREENS.MERGE_TRANSACTION.DYNAMIC_CONFIRMATION_PAGE]: DYNAMIC_ROUTES.MERGE_TRANSACTION_CONFIRMATION.path,
},
},
[SCREENS.RIGHT_MODAL.SPLIT_DETAILS]: {
Expand Down
20 changes: 4 additions & 16 deletions src/libs/Navigation/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2567,29 +2567,17 @@ type TransactionDuplicateNavigatorParamList = {
};

type MergeTransactionNavigatorParamList = {
[SCREENS.MERGE_TRANSACTION.LIST_PAGE]: {
[SCREENS.MERGE_TRANSACTION.DYNAMIC_LIST_PAGE]: {
transactionID: 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;
isOnSearch?: boolean;
};
[SCREENS.MERGE_TRANSACTION.RECEIPT_PAGE]: {
[SCREENS.MERGE_TRANSACTION.DYNAMIC_RECEIPT_PAGE]: {
transactionID: 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;
isOnSearch?: boolean;
};
[SCREENS.MERGE_TRANSACTION.DETAILS_PAGE]: {
[SCREENS.MERGE_TRANSACTION.DYNAMIC_DETAILS_PAGE]: {
transactionID: 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;
isOnSearch?: boolean;
};
[SCREENS.MERGE_TRANSACTION.CONFIRMATION_PAGE]: {
[SCREENS.MERGE_TRANSACTION.DYNAMIC_CONFIRMATION_PAGE]: {
transactionID: 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;
isOnSearch?: boolean;
};
};

Expand Down
14 changes: 8 additions & 6 deletions src/libs/actions/MergeTransaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
shouldNavigateToReceiptReview,
} from '@libs/MergeTransactionUtils';
import type {MergeFieldKey, MergeTransactionUpdateValues} from '@libs/MergeTransactionUtils';
import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute';
import Navigation from '@libs/Navigation/Navigation';
import {isPaidGroupPolicy, isPolicyAdmin} from '@libs/PolicyUtils';
import {getIOUActionForReportID, getReportAction, getTrackExpenseActionableWhisper} from '@libs/ReportActionsUtils';
Expand All @@ -30,7 +31,8 @@ import {
import CONST from '@src/CONST';
import {isDistanceRequest, isTransactionPendingDelete} from '@src/libs/TransactionUtils';
import ONYXKEYS from '@src/ONYXKEYS';
import ROUTES from '@src/ROUTES';
import {DYNAMIC_ROUTES} from '@src/ROUTES';
import type {Route} from '@src/ROUTES';
import type {CardList, MergeTransaction, Policy, PolicyCategories, PolicyTagLists, Report, ReportNextStepDeprecated, Transaction, TransactionViolations} from '@src/types/onyx';

import type {OnyxCollection, OnyxEntry, OnyxMergeInput, OnyxUpdate} from 'react-native-onyx';
Expand Down Expand Up @@ -66,8 +68,8 @@ function setupMergeTransactionDataAndNavigate(
getCurrencyDecimals: CurrencyListActionsContextType['getCurrencyDecimals'],
searchReports?: Report[],
isSelectingSourceTransaction?: boolean,
isOnSearch?: boolean,
policies?: Array<OnyxEntry<Policy>>,
basePath?: Route,
) {
if (!transactions.length || transactions.length > 2) {
return;
Expand All @@ -77,7 +79,7 @@ function setupMergeTransactionDataAndNavigate(
const transaction = transactions.at(0);
if (transaction) {
setupMergeTransactionData(navigationTransactionID, {targetTransactionID: transaction.transactionID});
Navigation.navigate(ROUTES.MERGE_TRANSACTION_LIST_PAGE.getRoute(transaction.transactionID, Navigation.getActiveRoute(), isOnSearch));
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.MERGE_TRANSACTION_LIST.getRoute(transaction.transactionID)));
return;
}
}
Expand All @@ -100,7 +102,7 @@ function setupMergeTransactionDataAndNavigate(
}
if (shouldNavigateToReceiptReview([targetTransaction, sourceTransaction])) {
// Navigate to the receipt review page if both transactions have a receipt
Navigation.navigate(ROUTES.MERGE_TRANSACTION_RECEIPT_PAGE.getRoute(navigationTransactionID, Navigation.getActiveRoute(), isOnSearch));
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.MERGE_TRANSACTION_RECEIPT.getRoute(navigationTransactionID), basePath));
} else {
const receipt = targetTransaction.receipt?.receiptID ? targetTransaction.receipt : sourceTransaction.receipt;
if (receipt) {
Expand All @@ -120,11 +122,11 @@ function setupMergeTransactionDataAndNavigate(
if (!conflictFields.length) {
// If there are no conflict fields, we should set mergeable data and navigate to the confirmation page
setMergeTransactionKey(navigationTransactionID, mergeableData);
Navigation.navigate(ROUTES.MERGE_TRANSACTION_CONFIRMATION_PAGE.getRoute(navigationTransactionID, Navigation.getActiveRoute(), isOnSearch));
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.MERGE_TRANSACTION_CONFIRMATION.getRoute(navigationTransactionID), basePath));
return;
}

Navigation.navigate(ROUTES.MERGE_TRANSACTION_DETAILS_PAGE.getRoute(navigationTransactionID, Navigation.getActiveRoute(), isOnSearch));
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.MERGE_TRANSACTION_DETAILS.getRoute(navigationTransactionID), basePath));
}
}

Expand Down
Loading
Loading