diff --git a/config/eslint/eslint.seatbelt.tsv b/config/eslint/eslint.seatbelt.tsv index d3a15b582bc0..4db48554b760 100644 --- a/config/eslint/eslint.seatbelt.tsv +++ b/config/eslint/eslint.seatbelt.tsv @@ -502,7 +502,7 @@ "../../src/pages/iou/SplitExpensePage.tsx" "react-hooks/set-state-in-effect" 3 "../../src/pages/iou/request/step/IOURequestEditReportCommon.tsx" "@typescript-eslint/no-deprecated/ConfirmModal" 1 "../../src/pages/iou/request/step/IOURequestStepAmount.tsx" "react-hooks/set-state-in-effect" 1 -"../../src/pages/iou/request/step/IOURequestStepCategory.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1 +"../../src/pages/iou/request/step/DynamicIOURequestStepCategoryPage.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1 "../../src/pages/iou/request/step/IOURequestStepConfirmation.tsx" "react-hooks/preserve-manual-memoization" 1 "../../src/pages/iou/request/step/IOURequestStepDestination.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1 "../../src/pages/iou/request/step/IOURequestStepDistance.tsx" "react-hooks/set-state-in-effect" 1 @@ -518,7 +518,7 @@ "../../src/pages/iou/request/step/IOURequestStepScan/hooks/useMobileReceiptScan.ts" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1 "../../src/pages/iou/request/step/IOURequestStepSubrate.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1 "../../src/pages/iou/request/step/IOURequestStepSubrate.tsx" "react-hooks/set-state-in-effect" 1 -"../../src/pages/iou/request/step/IOURequestStepUpgrade.tsx" "@typescript-eslint/no-deprecated/ConfirmModal" 1 +"../../src/pages/iou/request/step/DynamicIOURequestStepUpgradePage.tsx" "@typescript-eslint/no-deprecated/ConfirmModal" 1 "../../src/pages/iou/request/step/confirmation/submitDismissStrategies.ts" "no-restricted-imports" 1 "../../src/pages/media/AttachmentModalScreen/AttachmentModalBaseContent/index.tsx" "react-hooks/set-state-in-effect" 3 "../../src/pages/media/AttachmentModalScreen/routes/TransactionReceiptModalContent.tsx" "@typescript-eslint/no-deprecated/ConfirmModal" 1 diff --git a/src/ROUTES.ts b/src/ROUTES.ts index fe5e1ad88f4f..a0e8116fac1e 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -180,6 +180,126 @@ const DYNAMIC_ROUTES = { entryScreens: ['*'], getRoute: (accountID: number) => `avatar/${accountID}` as const, }, + MONEY_REQUEST_STEP_TAX_RATE: { + path: 'money-request/tax-rate/:action/:iouType/:transactionID/:reportID?', + entryScreens: [ + SCREENS.MONEY_REQUEST.STEP_CONFIRMATION, + SCREENS.REPORT, + SCREENS.RIGHT_MODAL.EXPENSE_REPORT, + SCREENS.RIGHT_MODAL.SEARCH_REPORT, + SCREENS.RIGHT_MODAL.SEARCH_REPORT_ACTIONS, + SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT, + ], + getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID?: string) => { + if (!transactionID || !reportID) { + Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_TAX_RATE dynamic route'); + } + + return `money-request/tax-rate/${action as string}/${iouType as string}/${transactionID}${reportID ? `/${reportID}` : ''}` as const; + }, + }, + MONEY_REQUEST_STEP_TAX_AMOUNT: { + path: 'money-request/tax-amount/:action/:iouType/:transactionID/:reportID?', + entryScreens: [ + SCREENS.MONEY_REQUEST.STEP_CONFIRMATION, + SCREENS.REPORT, + SCREENS.RIGHT_MODAL.EXPENSE_REPORT, + SCREENS.RIGHT_MODAL.SEARCH_REPORT, + SCREENS.RIGHT_MODAL.SEARCH_REPORT_ACTIONS, + SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT, + ], + getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID?: string) => { + if (!transactionID || !reportID) { + Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_TAX_AMOUNT dynamic route'); + } + + return `money-request/tax-amount/${action as string}/${iouType as string}/${transactionID}${reportID ? `/${reportID}` : ''}` as const; + }, + }, + MONEY_REQUEST_STEP_CATEGORY: { + path: 'money-request/category/:action/:iouType/:transactionID/:reportID/:reportActionID?', + entryScreens: [ + SCREENS.MONEY_REQUEST.STEP_CONFIRMATION, + SCREENS.MONEY_REQUEST.SPLIT_EXPENSE_EDIT, + SCREENS.REPORT, + SCREENS.RIGHT_MODAL.EXPENSE_REPORT, + SCREENS.RIGHT_MODAL.SEARCH_REPORT, + SCREENS.RIGHT_MODAL.SEARCH_REPORT_ACTIONS, + SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT, + ], + getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, reportActionID?: string) => { + if (!transactionID || !reportID) { + Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_CATEGORY dynamic route'); + } + + return `money-request/category/${action as string}/${iouType as string}/${transactionID}/${reportID}${reportActionID ? `/${reportActionID}` : ''}` as const; + }, + }, + MONEY_REQUEST_ATTENDEE: { + path: 'money-request/attendees/:action/:iouType/:transactionID/:reportID', + entryScreens: [ + SCREENS.MONEY_REQUEST.STEP_CONFIRMATION, + SCREENS.REPORT, + SCREENS.RIGHT_MODAL.EXPENSE_REPORT, + SCREENS.RIGHT_MODAL.SEARCH_REPORT, + SCREENS.RIGHT_MODAL.SEARCH_REPORT_ACTIONS, + SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT, + ], + getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined) => { + if (!transactionID || !reportID) { + Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_ATTENDEE dynamic route'); + } + + return `money-request/attendees/${action as string}/${iouType as string}/${transactionID}/${reportID}` as const; + }, + }, + MONEY_REQUEST_ACCOUNTANT: { + path: 'money-request/accountant/:action/:iouType/:transactionID/:reportID', + entryScreens: [ + SCREENS.MONEY_REQUEST.STEP_CONFIRMATION, + SCREENS.REPORT, + SCREENS.REPORT_DETAILS.DYNAMIC_ROOT, + SCREENS.RIGHT_MODAL.EXPENSE_REPORT, + SCREENS.RIGHT_MODAL.SEARCH_REPORT, + SCREENS.RIGHT_MODAL.SEARCH_REPORT_ACTIONS, + SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT, + ], + getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined) => { + if (!transactionID || !reportID) { + Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_ACCOUNTANT dynamic route'); + } + + return `money-request/accountant/${action as string}/${iouType as string}/${transactionID}/${reportID}` as const; + }, + }, + MONEY_REQUEST_UPGRADE: { + path: 'money-request/upgrade/:action/:iouType/:transactionID/:reportID/:upgradePath?', + entryScreens: [ + SCREENS.MONEY_REQUEST.STEP_CONFIRMATION, + SCREENS.MONEY_REQUEST.SPLIT_EXPENSE_EDIT, + SCREENS.HOME, + SCREENS.INBOX, + SCREENS.REPORT, + SCREENS.RIGHT_MODAL.EXPENSE_REPORT, + SCREENS.RIGHT_MODAL.SEARCH_REPORT, + SCREENS.RIGHT_MODAL.SEARCH_REPORT_ACTIONS, + SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT, + SCREENS.SEARCH.ROOT, + SCREENS.SEARCH.TRANSACTIONS_CHANGE_REPORT_SEARCH_RHP, + ], + getRoute: (params: {action: IOUAction; iouType: IOUType; transactionID: string; reportID: string; upgradePath?: string; shouldSubmitExpense?: boolean}) => { + const {action, iouType, transactionID, reportID, upgradePath, shouldSubmitExpense} = params; + const upgradePathParam = upgradePath ? `/${upgradePath}` : ''; + const basePath = `money-request/upgrade/${action as string}/${iouType as string}/${transactionID}/${reportID}${upgradePathParam}` as const; + + if (shouldSubmitExpense) { + return `${basePath}?shouldSubmitExpense=true` as const; + } + + return basePath; + }, + queryParams: ['shouldSubmitExpense'], + }, NEW_REPORT_WORKSPACE_SELECTION: { path: 'new-report-workspace-selection', entryScreens: ['*'], @@ -1659,26 +1779,6 @@ const ROUTES = { return getUrlWithBackToParam(`${action as string}/${iouType as string}/amount/${transactionID}/${reportID}/${reportActionID ? `${reportActionID}/` : ''}${pageIndex}`, backTo); }, }, - MONEY_REQUEST_STEP_TAX_RATE: { - route: ':action/:iouType/taxRate/:transactionID/:reportID?', - getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, backTo = '') => { - if (!transactionID || !reportID) { - Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_TAX_RATE route'); - } - - return getUrlWithBackToParam(`${action as string}/${iouType as string}/taxRate/${transactionID}/${reportID}`, backTo); - }, - }, - MONEY_REQUEST_STEP_TAX_AMOUNT: { - route: ':action/:iouType/taxAmount/:transactionID/:reportID?', - getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, backTo = '') => { - if (!transactionID || !reportID) { - Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_TAX_AMOUNT route'); - } - - return getUrlWithBackToParam(`${action as string}/${iouType as string}/taxAmount/${transactionID}/${reportID}`, backTo); - }, - }, MONEY_REQUEST_STEP_CATEGORY_CREATE: { route: ':action/:iouType/category/new/:transactionID/:reportID/:reportActionID?', getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, reportActionID?: string, backTo = '') => { @@ -1689,50 +1789,6 @@ const ROUTES = { return getUrlWithBackToParam(`${action as string}/${iouType as string}/category/new/${transactionID}/${reportID}${reportActionID ? `/${reportActionID}` : ''}`, backTo); }, }, - MONEY_REQUEST_STEP_CATEGORY: { - route: ':action/:iouType/category/:transactionID/:reportID/:reportActionID?', - getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, backTo = '', reportActionID?: string) => { - if (!transactionID || !reportID) { - Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_CATEGORY route'); - } - - return getUrlWithBackToParam(`${action as string}/${iouType as string}/category/${transactionID}/${reportID}${reportActionID ? `/${reportActionID}` : ''}`, backTo); - }, - }, - MONEY_REQUEST_ATTENDEE: { - route: ':action/:iouType/attendees/:transactionID/:reportID', - getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, backTo = '') => { - if (!transactionID || !reportID) { - Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_ATTENDEE route'); - } - - return getUrlWithBackToParam(`${action as string}/${iouType as string}/attendees/${transactionID}/${reportID}`, backTo); - }, - }, - MONEY_REQUEST_ACCOUNTANT: { - route: ':action/:iouType/accountant/:transactionID/:reportID', - getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, backTo = '') => { - if (!transactionID || !reportID) { - Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_ACCOUNTANT route'); - } - - return getUrlWithBackToParam(`${action as string}/${iouType as string}/accountant/${transactionID}/${reportID}`, backTo); - }, - }, - MONEY_REQUEST_UPGRADE: { - route: ':action/:iouType/upgrade/:transactionID/:reportID/:upgradePath?', - getRoute: (params: {action: IOUAction; iouType: IOUType; transactionID: string; reportID: string; backTo?: string; shouldSubmitExpense?: boolean; upgradePath?: string}) => { - const {action, iouType, transactionID, reportID, backTo = '', shouldSubmitExpense = false, upgradePath} = params; - const upgradePathParam = upgradePath ? `/${upgradePath}` : ''; - const baseURL = `${action as string}/${iouType as string}/upgrade/${transactionID}/${reportID}${upgradePathParam}` as const; - - if (shouldSubmitExpense) { - return getUrlWithBackToParam(`${baseURL}?shouldSubmitExpense=${shouldSubmitExpense}` as const, backTo); - } - - return getUrlWithBackToParam(baseURL, backTo); - }, - }, MONEY_REQUEST_STEP_DESTINATION: { route: ':action/:iouType/destination/:transactionID/:reportID', getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, backTo = '') => diff --git a/src/SCREENS.ts b/src/SCREENS.ts index be65a43d01de..6eac07810003 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -372,9 +372,9 @@ const SCREENS = { STEP_CONFIRMATION: 'Money_Request_Step_Confirmation', STEP_CONFIRMATION_VERIFY_ACCOUNT: 'Money_Request_Step_Confirmation_Verify_Account', START: 'Money_Request_Start', - STEP_UPGRADE: 'Money_Request_Step_Upgrade', + DYNAMIC_STEP_UPGRADE: 'Dynamic_Money_Request_Step_Upgrade', STEP_AMOUNT: 'Money_Request_Step_Amount', - STEP_CATEGORY: 'Money_Request_Step_Category', + DYNAMIC_STEP_CATEGORY: 'Dynamic_Money_Request_Step_Category', STEP_CATEGORY_CREATE: 'Money_Request_Step_Category_Create', STEP_DATE: 'Money_Request_Step_Date', STEP_DESCRIPTION: 'Money_Request_Step_Description', @@ -385,8 +385,8 @@ const SCREENS = { STEP_SCAN: 'Money_Request_Step_Scan', STEP_TAG: 'Money_Request_Step_Tag', STEP_WAYPOINT: 'Money_Request_Step_Waypoint', - STEP_TAX_AMOUNT: 'Money_Request_Step_Tax_Amount', - STEP_TAX_RATE: 'Money_Request_Step_Tax_Rate', + DYNAMIC_STEP_TAX_AMOUNT: 'Dynamic_Money_Request_Step_Tax_Amount', + DYNAMIC_STEP_TAX_RATE: 'Dynamic_Money_Request_Step_Tax_Rate', RECEIPT_VIEW: 'Money_Request_Receipt_View', STEP_SEND_FROM: 'Money_Request_Step_Send_From', STEP_COMPANY_INFO: 'Money_Request_Step_Company_Info', @@ -395,8 +395,8 @@ const SCREENS = { EDIT_WAYPOINT: 'Money_Request_Edit_Waypoint', RECEIPT: 'Money_Request_Receipt', STATE_SELECTOR: 'Money_Request_State_Selector', - STEP_ATTENDEES: 'Money_Request_Attendee', - STEP_ACCOUNTANT: 'Money_Request_Accountant', + DYNAMIC_STEP_ATTENDEES: 'Dynamic_Money_Request_Attendee', + DYNAMIC_STEP_ACCOUNTANT: 'Dynamic_Money_Request_Step_Accountant', STEP_DESTINATION: 'Money_Request_Destination', STEP_TIME: 'Money_Request_Time', STEP_SUBRATE: 'Money_Request_SubRate', diff --git a/src/components/MoneyRequestConfirmationList/sections/AttendeeField.tsx b/src/components/MoneyRequestConfirmationList/sections/AttendeeField.tsx index 2252f0df716f..90d4d5cd27a3 100644 --- a/src/components/MoneyRequestConfirmationList/sections/AttendeeField.tsx +++ b/src/components/MoneyRequestConfirmationList/sections/AttendeeField.tsx @@ -7,12 +7,13 @@ import useAttendees from '@hooks/useAttendees'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; import {enrichAndSortAttendees} from '@libs/AttendeeUtils'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import Navigation from '@libs/Navigation/Navigation'; import {getAttendeesListDisplayString} from '@libs/TransactionUtils'; import CONST from '@src/CONST'; import type {IOUAction, IOUType} from '@src/CONST'; import type {TranslationPaths} from '@src/languages/types'; -import ROUTES from '@src/ROUTES'; +import {DYNAMIC_ROUTES} from '@src/ROUTES'; import type * as OnyxTypes from '@src/types/onyx'; import {attendeeSliceSelector} from './selectors'; import useTransactionSelector from './useTransactionSelector'; @@ -67,7 +68,7 @@ function AttendeeField({formattedAmountPerAttendee, isReadOnly, transactionID, a return; } - Navigation.navigate(ROUTES.MONEY_REQUEST_ATTENDEE.getRoute(action, iouType, transactionID, reportID, Navigation.getActiveRoute())); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.MONEY_REQUEST_ATTENDEE.getRoute(action, iouType, transactionID, reportID))); }} interactive={!isReadOnly} brickRoadIndicator={shouldDisplayAttendeesError ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined} diff --git a/src/components/MoneyRequestConfirmationList/sections/CategoryField.tsx b/src/components/MoneyRequestConfirmationList/sections/CategoryField.tsx index 098a4d5225f7..4f70942ac203 100644 --- a/src/components/MoneyRequestConfirmationList/sections/CategoryField.tsx +++ b/src/components/MoneyRequestConfirmationList/sections/CategoryField.tsx @@ -5,11 +5,12 @@ import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; import {getDecodedLeafCategoryName} from '@libs/CategoryUtils'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import Navigation from '@libs/Navigation/Navigation'; import CONST from '@src/CONST'; import type {IOUAction, IOUType} 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 {categoryStateSelector} from './selectors'; import useTransactionSelector from './useTransactionSelector'; @@ -78,23 +79,24 @@ function CategoryField({ if (shouldNavigateToUpgradePath) { Navigation.navigate( - ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ - action, - iouType, - transactionID, - reportID, - backTo: ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(action, iouType, transactionID, reportID, Navigation.getActiveRoute(), reportActionID), - upgradePath: CONST.UPGRADE_PATHS.CATEGORIES, - }), + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ + action, + iouType, + transactionID, + reportID, + upgradePath: CONST.UPGRADE_PATHS.CATEGORIES, + }), + ), ); } else if (!policy && shouldSelectPolicy) { Navigation.navigate( ROUTES.SET_DEFAULT_WORKSPACE.getRoute( - ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(action, iouType, transactionID, reportID, Navigation.getActiveRoute(), reportActionID), + createDynamicRoute(DYNAMIC_ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(action, iouType, transactionID, reportID, reportActionID)), ), ); } else { - Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(action, iouType, transactionID, reportID, Navigation.getActiveRoute(), reportActionID)); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(action, iouType, transactionID, reportID, reportActionID))); } }} style={[styles.moneyRequestMenuItem]} diff --git a/src/components/MoneyRequestConfirmationList/sections/RateField.tsx b/src/components/MoneyRequestConfirmationList/sections/RateField.tsx index 46c64a8dafdb..da1c2bcfbd0a 100644 --- a/src/components/MoneyRequestConfirmationList/sections/RateField.tsx +++ b/src/components/MoneyRequestConfirmationList/sections/RateField.tsx @@ -6,10 +6,11 @@ import useLocalize from '@hooks/useLocalize'; import useNetwork from '@hooks/useNetwork'; import useThemeStyles from '@hooks/useThemeStyles'; import DistanceRequestUtils from '@libs/DistanceRequestUtils'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import Navigation from '@libs/Navigation/Navigation'; import CONST from '@src/CONST'; import type {IOUAction, IOUType} from '@src/CONST'; -import ROUTES from '@src/ROUTES'; +import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; import type * as OnyxTypes from '@src/types/onyx'; import type {Unit} from '@src/types/onyx/Policy'; @@ -75,15 +76,16 @@ function RateField({ if ((!isPolicyExpenseChat && !isTrackExpense) || (shouldNavigateToUpgradePath && isTrackExpense)) { Navigation.navigate( - ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ - action, - iouType, - transactionID, - reportID, - upgradePath: CONST.UPGRADE_PATHS.DISTANCE_RATES, - backTo: Navigation.getActiveRoute(), - shouldSubmitExpense: !isTrackExpense, - }), + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ + action, + iouType, + transactionID, + reportID, + upgradePath: CONST.UPGRADE_PATHS.DISTANCE_RATES, + shouldSubmitExpense: !isTrackExpense, + }), + ), ); } else if (!policy && shouldSelectPolicy && isTrackExpense) { Navigation.navigate( diff --git a/src/components/MoneyRequestConfirmationList/sections/TaxFields.tsx b/src/components/MoneyRequestConfirmationList/sections/TaxFields.tsx index 4eb2043aeb70..3bb34d2af0c5 100644 --- a/src/components/MoneyRequestConfirmationList/sections/TaxFields.tsx +++ b/src/components/MoneyRequestConfirmationList/sections/TaxFields.tsx @@ -11,6 +11,7 @@ import useThemeStyles from '@hooks/useThemeStyles'; import {setMoneyRequestTaxAmount} from '@libs/actions/IOU/MoneyRequest'; import {convertToBackendAmount, convertToFrontendAmountAsString, getLocalizedCurrencySymbol} from '@libs/CurrencyUtils'; import {isMovingTransactionFromTrackExpense} from '@libs/IOUUtils'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import Navigation from '@libs/Navigation/Navigation'; import {getCalculatedTaxAmount, getTaxAmount, getTaxRateTitle} from '@libs/TransactionUtils'; import {setDraftSplitTransaction} from '@userActions/IOU/Split'; @@ -18,7 +19,7 @@ import CONST from '@src/CONST'; import type {IOUAction, IOUType} from '@src/CONST'; import type {TranslationPaths} from '@src/languages/types'; import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; +import {DYNAMIC_ROUTES} from '@src/ROUTES'; import type * as OnyxTypes from '@src/types/onyx'; import {taxSliceSelector} from './selectors'; import useTransactionSelector from './useTransactionSelector'; @@ -101,7 +102,7 @@ function TaxFields({policy, policyForMovingExpenses, iouCurrencyCode, canModifyT return; } - Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_TAX_RATE.getRoute(action, iouType, transactionID, reportID, Navigation.getActiveRoute())); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.MONEY_REQUEST_STEP_TAX_RATE.getRoute(action, iouType, transactionID, reportID))); }} disabled={didConfirm} interactive={canModifyTaxFields} @@ -139,7 +140,7 @@ function TaxFields({policy, policyForMovingExpenses, iouCurrencyCode, canModifyT return; } - Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_TAX_AMOUNT.getRoute(action, iouType, transactionID, reportID, Navigation.getActiveRoute())); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.MONEY_REQUEST_STEP_TAX_AMOUNT.getRoute(action, iouType, transactionID, reportID))); }} disabled={didConfirm} interactive={canModifyTaxFields} diff --git a/src/components/MoneyRequestHeaderSecondaryActions.tsx b/src/components/MoneyRequestHeaderSecondaryActions.tsx index b70e12a00948..23964c99eb73 100644 --- a/src/components/MoneyRequestHeaderSecondaryActions.tsx +++ b/src/components/MoneyRequestHeaderSecondaryActions.tsx @@ -35,6 +35,7 @@ import initSplitExpense from '@libs/actions/SplitExpenses'; import {setNameValuePair} from '@libs/actions/User'; import getNonEmptyStringOnyxID from '@libs/getNonEmptyStringOnyxID'; import {getExistingTransactionID} from '@libs/IOUUtils'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import isSearchOriginForMerge from '@libs/Navigation/helpers/isSearchOriginForMerge'; import Navigation from '@libs/Navigation/Navigation'; import type {PlatformStackRouteProp} from '@libs/Navigation/PlatformStackNavigation/types'; @@ -67,7 +68,7 @@ import {dismissRejectUseExplanation} from '@userActions/IOU/RejectMoneyRequest'; import {setDeleteTransactionNavigateBackUrl} from '@userActions/Report'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; +import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; import SCREENS from '@src/SCREENS'; import type {Transaction} from '@src/types/onyx'; import ButtonWithDropdownMenu from './ButtonWithDropdownMenu'; @@ -522,13 +523,15 @@ function MoneyRequestHeaderSecondaryActions({reportID, onBackButtonPress}: Money const iouType = isExpenseReport(parentReport) ? CONST.IOU.TYPE.SUBMIT : CONST.IOU.TYPE.TRACK; if (shouldNavigateToUpgradePath && reportID) { Navigation.navigate( - ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ - action: CONST.IOU.ACTION.EDIT, - iouType, - transactionID: transaction.transactionID, - reportID, - upgradePath: CONST.UPGRADE_PATHS.REPORTS, - }), + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ + action: CONST.IOU.ACTION.EDIT, + iouType, + transactionID: transaction.transactionID, + reportID, + upgradePath: CONST.UPGRADE_PATHS.REPORTS, + }), + ), ); return; } diff --git a/src/components/Navigation/QuickCreationActionsBar/index.tsx b/src/components/Navigation/QuickCreationActionsBar/index.tsx index b48df3c493b0..1b7253be6e06 100644 --- a/src/components/Navigation/QuickCreationActionsBar/index.tsx +++ b/src/components/Navigation/QuickCreationActionsBar/index.tsx @@ -17,6 +17,7 @@ import useThemeStyles from '@hooks/useThemeStyles'; import {startDistanceRequest, startMoneyRequest} from '@libs/actions/IOU/MoneyRequest'; import {createNewReport} from '@libs/actions/Report'; import interceptAnonymousUser from '@libs/interceptAnonymousUser'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import getCreateReportRoute, {getReportsRootRoute, navigateToCreateReportWorkspaceSelection} from '@libs/Navigation/helpers/getCreateReportRoute'; import Navigation from '@libs/Navigation/Navigation'; import {openTravelDotLink} from '@libs/openTravelDotLink'; @@ -26,7 +27,7 @@ import {generateReportID, hasViolations as hasViolationsReportUtils} from '@libs import {shouldRestrictUserBillableActions} from '@libs/SubscriptionUtils'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; +import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; import {primaryLoginSelector} from '@src/selectors/Account'; import type * as OnyxTypes from '@src/types/onyx'; @@ -131,13 +132,15 @@ function QuickCreationActionsBar() { const freshReportID = generateReportID(); const freshTransactionID = generateReportID(); Navigation.navigate( - ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ - action: CONST.IOU.ACTION.CREATE, - iouType: CONST.IOU.TYPE.CREATE, - transactionID: freshTransactionID, - reportID: freshReportID, - upgradePath: CONST.UPGRADE_PATHS.REPORTS, - }), + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ + action: CONST.IOU.ACTION.CREATE, + iouType: CONST.IOU.TYPE.CREATE, + transactionID: freshTransactionID, + reportID: freshReportID, + upgradePath: CONST.UPGRADE_PATHS.REPORTS, + }), + ), ); return; } diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index 2cd705181d07..74eb51935139 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -56,6 +56,7 @@ import DistanceRequestUtils from '@libs/DistanceRequestUtils'; import getNonEmptyStringOnyxID from '@libs/getNonEmptyStringOnyxID'; import {getRateFromMerchant} from '@libs/MergeTransactionUtils'; import {isBillableEnabledOnPolicy, isSingleTransactionReport} from '@libs/MoneyRequestReportUtils'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import {hasEnabledOptions} from '@libs/OptionsListUtils'; import Parser from '@libs/Parser'; import { @@ -129,7 +130,7 @@ import AnimatedEmptyStateBackground from '@pages/inbox/report/AnimatedEmptyState import CONST from '@src/CONST'; import type {TranslationPaths} from '@src/languages/types'; import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; +import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; import type * as OnyxTypes from '@src/types/onyx'; import type {TransactionPendingFieldsKey} from '@src/types/onyx/Transaction'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; @@ -810,13 +811,15 @@ function MoneyRequestView({ if (isTrackExpense) { if (shouldNavigateToUpgradePath && transactionThreadReport) { Navigation.navigate( - ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ - action: CONST.IOU.ACTION.EDIT, - iouType, - transactionID: transaction.transactionID, - reportID: transactionThreadReport?.reportID, - upgradePath: CONST.UPGRADE_PATHS.DISTANCE_RATES, - }), + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ + action: CONST.IOU.ACTION.EDIT, + iouType, + transactionID: transaction.transactionID, + reportID: transactionThreadReport?.reportID, + upgradePath: CONST.UPGRADE_PATHS.DISTANCE_RATES, + }), + ), ); return; } @@ -1114,41 +1117,33 @@ function MoneyRequestView({ onPress={() => { if (shouldNavigateToUpgradePath && transactionThreadReport) { Navigation.navigate( - ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ - action: CONST.IOU.ACTION.EDIT, - iouType, - transactionID: transaction.transactionID, - reportID: transactionThreadReport?.reportID, - upgradePath: CONST.UPGRADE_PATHS.CATEGORIES, - backTo: ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute( - CONST.IOU.ACTION.EDIT, + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ + action: CONST.IOU.ACTION.EDIT, iouType, - transaction.transactionID, - transactionThreadReport?.reportID, - Navigation.getActiveRoute(), - ), - }), + transactionID: transaction.transactionID, + reportID: transactionThreadReport?.reportID, + upgradePath: CONST.UPGRADE_PATHS.CATEGORIES, + }), + ), ); } else if (!policy && shouldSelectPolicy) { Navigation.navigate( ROUTES.SET_DEFAULT_WORKSPACE.getRoute( - ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute( - CONST.IOU.ACTION.EDIT, - iouType, - transaction.transactionID, - transactionThreadReport?.reportID, - Navigation.getActiveRoute(), + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute( + CONST.IOU.ACTION.EDIT, + iouType, + transaction.transactionID, + transactionThreadReport?.reportID, + ), ), ), ); } else { Navigation.navigate( - ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute( - CONST.IOU.ACTION.EDIT, - iouType, - transaction.transactionID, - transactionThreadReport?.reportID, - Navigation.getActiveRoute(), + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(CONST.IOU.ACTION.EDIT, iouType, transaction.transactionID, transactionThreadReport?.reportID), ), ); } @@ -1190,12 +1185,8 @@ function MoneyRequestView({ } Navigation.navigate( - ROUTES.MONEY_REQUEST_STEP_TAX_RATE.getRoute( - CONST.IOU.ACTION.EDIT, - iouType, - transaction.transactionID, - transactionThreadReport?.reportID, - getReportRHPActiveRoute(), + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_STEP_TAX_RATE.getRoute(CONST.IOU.ACTION.EDIT, iouType, transaction.transactionID, transactionThreadReport?.reportID), ), ); }} @@ -1222,12 +1213,8 @@ function MoneyRequestView({ } Navigation.navigate( - ROUTES.MONEY_REQUEST_STEP_TAX_AMOUNT.getRoute( - CONST.IOU.ACTION.EDIT, - iouType, - transaction.transactionID, - transactionThreadReport?.reportID, - getReportRHPActiveRoute(), + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_STEP_TAX_AMOUNT.getRoute(CONST.IOU.ACTION.EDIT, iouType, transaction.transactionID, transactionThreadReport?.reportID), ), ); }} @@ -1263,7 +1250,11 @@ function MoneyRequestView({ style={[styles.moneyRequestMenuItem]} titleStyle={styles.flex1} onPress={() => { - Navigation.navigate(ROUTES.MONEY_REQUEST_ATTENDEE.getRoute(CONST.IOU.ACTION.EDIT, iouType, transaction.transactionID, transactionThreadReport?.reportID)); + Navigation.navigate( + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_ATTENDEE.getRoute(CONST.IOU.ACTION.EDIT, iouType, transaction.transactionID, transactionThreadReport?.reportID), + ), + ); }} brickRoadIndicator={getErrorForField('attendees') ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined} errorText={getErrorForField('attendees')} @@ -1344,13 +1335,15 @@ function MoneyRequestView({ } if (shouldNavigateToUpgradePath) { Navigation.navigate( - ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ - iouType, - action: CONST.IOU.ACTION.EDIT, - transactionID: transaction?.transactionID, - reportID: transactionThreadReport?.reportID, - upgradePath: CONST.UPGRADE_PATHS.REPORTS, - }), + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ + iouType, + action: CONST.IOU.ACTION.EDIT, + transactionID: transaction?.transactionID, + reportID: transactionThreadReport?.reportID, + upgradePath: CONST.UPGRADE_PATHS.REPORTS, + }), + ), ); return; } diff --git a/src/components/Search/SearchPageHeader/SearchActionsBarCreateButton.tsx b/src/components/Search/SearchPageHeader/SearchActionsBarCreateButton.tsx index 13ccdacd59db..eeafcf7f3065 100644 --- a/src/components/Search/SearchPageHeader/SearchActionsBarCreateButton.tsx +++ b/src/components/Search/SearchPageHeader/SearchActionsBarCreateButton.tsx @@ -142,13 +142,15 @@ function SearchActionsBarCreateButton() { const freshReportID = generateReportID(); const freshTransactionID = generateReportID(); Navigation.navigate( - ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ - action: CONST.IOU.ACTION.CREATE, - iouType: CONST.IOU.TYPE.CREATE, - transactionID: freshTransactionID, - reportID: freshReportID, - upgradePath: CONST.UPGRADE_PATHS.REPORTS, - }), + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ + action: CONST.IOU.ACTION.CREATE, + iouType: CONST.IOU.TYPE.CREATE, + transactionID: freshTransactionID, + reportID: freshReportID, + upgradePath: CONST.UPGRADE_PATHS.REPORTS, + }), + ), ); return; } diff --git a/src/hooks/useCreateReport.tsx b/src/hooks/useCreateReport.tsx index 65df7e71255b..91e545b6aa5a 100644 --- a/src/hooks/useCreateReport.tsx +++ b/src/hooks/useCreateReport.tsx @@ -87,13 +87,15 @@ export default function useCreateReport({ const freshReportID = generateReportID(); const freshTransactionID = generateReportID(); Navigation.navigate( - ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ - action: CONST.IOU.ACTION.CREATE, - iouType: CONST.IOU.TYPE.CREATE, - transactionID: freshTransactionID, - reportID: freshReportID, - upgradePath: CONST.UPGRADE_PATHS.REPORTS, - }), + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ + action: CONST.IOU.ACTION.CREATE, + iouType: CONST.IOU.TYPE.CREATE, + transactionID: freshTransactionID, + reportID: freshReportID, + upgradePath: CONST.UPGRADE_PATHS.REPORTS, + }), + ), ); return; } diff --git a/src/hooks/useParticipantSubmission.ts b/src/hooks/useParticipantSubmission.ts index fe1dd0ec9fc6..dc4a2f98f11a 100644 --- a/src/hooks/useParticipantSubmission.ts +++ b/src/hooks/useParticipantSubmission.ts @@ -4,6 +4,7 @@ import {setTransactionReport} from '@libs/actions/Transaction'; import {READ_COMMANDS} from '@libs/API/types'; import DistanceRequestUtils from '@libs/DistanceRequestUtils'; import HttpUtils from '@libs/HttpUtils'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import Navigation from '@libs/Navigation/Navigation'; import {isPaidGroupPolicy} from '@libs/PolicyUtils'; import {findSelfDMReportID, generateReportID, isInvoiceRoomWithID} from '@libs/ReportUtils'; @@ -22,7 +23,7 @@ import {createDraftWorkspace, generateDefaultWorkspaceName} from '@userActions/P import CONST from '@src/CONST'; import type {IOUAction, IOUType} from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; +import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; import {lastWorkspaceNumberSelector} from '@src/selectors/Policy'; import type {Policy, Transaction} from '@src/types/onyx'; import type {Participant} from '@src/types/onyx/IOU'; @@ -341,7 +342,10 @@ function useParticipantSubmission({ } Navigation.setNavigationActionToMicrotaskQueue(() => { if (isCategorizing) { - Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(action, CONST.IOU.TYPE.SUBMIT, initialTransactionID, expenseChatReportID)); + const confirmationRoute = ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute(action, CONST.IOU.TYPE.SUBMIT, initialTransactionID, expenseChatReportID, undefined, true); + Navigation.navigate( + createDynamicRoute(DYNAMIC_ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(action, CONST.IOU.TYPE.SUBMIT, initialTransactionID, expenseChatReportID), confirmationRoute), + ); } else { Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute(action, CONST.IOU.TYPE.SUBMIT, initialTransactionID, expenseChatReportID, undefined, true)); } @@ -360,7 +364,7 @@ function useParticipantSubmission({ ); const route = isCategorizing - ? ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(action, iouType, initialTransactionID, selectedReportID.current || reportID, iouConfirmationPageRoute) + ? createDynamicRoute(DYNAMIC_ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(action, iouType, initialTransactionID, selectedReportID.current || reportID), iouConfirmationPageRoute) : iouConfirmationPageRoute; KeyboardUtils.dismissKeyboardAndExecute(() => { diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx index d03960f666d5..e8ef3ea8ba49 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx @@ -175,9 +175,9 @@ const MoneyRequestModalStackNavigator = createModalStackNavigator require('../../../../pages/iou/request/step/IOURequestStepConfirmation').default, [SCREENS.MONEY_REQUEST.STEP_CONFIRMATION_VERIFY_ACCOUNT]: () => require('../../../../pages/iou/request/step/MoneyRequestStepConfirmationVerifyAccountPage').default, [SCREENS.MONEY_REQUEST.STEP_AMOUNT]: () => require('../../../../pages/iou/request/step/IOURequestStepAmount').default, - [SCREENS.MONEY_REQUEST.STEP_TAX_AMOUNT]: () => require('../../../../pages/iou/request/step/IOURequestStepTaxAmountPage').default, - [SCREENS.MONEY_REQUEST.STEP_TAX_RATE]: () => require('../../../../pages/iou/request/step/IOURequestStepTaxRatePage').default, - [SCREENS.MONEY_REQUEST.STEP_CATEGORY]: () => require('../../../../pages/iou/request/step/IOURequestStepCategory').default, + [SCREENS.MONEY_REQUEST.DYNAMIC_STEP_TAX_AMOUNT]: () => require('../../../../pages/iou/request/step/DynamicIOURequestStepTaxAmountPage').default, + [SCREENS.MONEY_REQUEST.DYNAMIC_STEP_TAX_RATE]: () => require('../../../../pages/iou/request/step/DynamicIOURequestStepTaxRatePage').default, + [SCREENS.MONEY_REQUEST.DYNAMIC_STEP_CATEGORY]: () => require('../../../../pages/iou/request/step/DynamicIOURequestStepCategoryPage').default, [SCREENS.MONEY_REQUEST.STEP_CATEGORY_CREATE]: () => require('../../../../pages/iou/request/step/IOURequestStepCategoryCreate').default, [SCREENS.MONEY_REQUEST.STEP_DATE]: () => require('../../../../pages/iou/request/step/IOURequestStepDate').default, [SCREENS.MONEY_REQUEST.STEP_DESCRIPTION]: () => require('../../../../pages/iou/request/step/IOURequestStepDescription').default, @@ -201,9 +201,9 @@ const MoneyRequestModalStackNavigator = createModalStackNavigator require('../../../../pages/settings/Wallet/AddDebitCardPage').default, [SCREENS.IOU_SEND.ENABLE_PAYMENTS]: () => require('../../../../pages/EnablePayments/Pay/EnablePaymentsPage').default, [SCREENS.MONEY_REQUEST.STATE_SELECTOR]: () => require('../../../../pages/settings/Profile/PersonalDetails/StateSelectionPage').default, - [SCREENS.MONEY_REQUEST.STEP_ATTENDEES]: () => require('../../../../pages/iou/request/step/IOURequestStepAttendees').default, - [SCREENS.MONEY_REQUEST.STEP_ACCOUNTANT]: () => require('../../../../pages/iou/request/step/IOURequestStepAccountant').default, - [SCREENS.MONEY_REQUEST.STEP_UPGRADE]: () => require('../../../../pages/iou/request/step/IOURequestStepUpgrade').default, + [SCREENS.MONEY_REQUEST.DYNAMIC_STEP_ATTENDEES]: () => require('../../../../pages/iou/request/step/DynamicIOURequestStepAttendeesPage').default, + [SCREENS.MONEY_REQUEST.DYNAMIC_STEP_ACCOUNTANT]: () => require('../../../../pages/iou/request/step/DynamicIOURequestStepAccountantPage').default, + [SCREENS.MONEY_REQUEST.DYNAMIC_STEP_UPGRADE]: () => require('../../../../pages/iou/request/step/DynamicIOURequestStepUpgradePage').default, [SCREENS.MONEY_REQUEST.STEP_DESTINATION]: () => require('../../../../pages/iou/request/step/IOURequestStepDestination').default, [SCREENS.MONEY_REQUEST.STEP_TIME]: () => require('../../../../pages/iou/request/step/IOURequestStepTime').default, [SCREENS.MONEY_REQUEST.STEP_SUBRATE]: () => require('../../../../pages/iou/request/step/IOURequestStepSubrate').default, diff --git a/src/libs/Navigation/linkingConfig/config.ts b/src/libs/Navigation/linkingConfig/config.ts index 1f4d86891d02..dbeec6ba1000 100644 --- a/src/libs/Navigation/linkingConfig/config.ts +++ b/src/libs/Navigation/linkingConfig/config.ts @@ -1763,7 +1763,7 @@ const config: LinkingOptions['config'] = { [SCREENS.MONEY_REQUEST.STEP_REPORT]: ROUTES.MONEY_REQUEST_STEP_REPORT.route, [SCREENS.MONEY_REQUEST.STEP_COMPANY_INFO]: ROUTES.MONEY_REQUEST_STEP_COMPANY_INFO.route, [SCREENS.MONEY_REQUEST.STEP_AMOUNT]: ROUTES.MONEY_REQUEST_STEP_AMOUNT.route, - [SCREENS.MONEY_REQUEST.STEP_CATEGORY]: ROUTES.MONEY_REQUEST_STEP_CATEGORY.route, + [SCREENS.MONEY_REQUEST.DYNAMIC_STEP_CATEGORY]: DYNAMIC_ROUTES.MONEY_REQUEST_STEP_CATEGORY.path, [SCREENS.MONEY_REQUEST.STEP_CATEGORY_CREATE]: ROUTES.MONEY_REQUEST_STEP_CATEGORY_CREATE.route, [SCREENS.MONEY_REQUEST.STEP_CONFIRMATION]: ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.route, [SCREENS.MONEY_REQUEST.STEP_CONFIRMATION_VERIFY_ACCOUNT]: ROUTES.MONEY_REQUEST_STEP_CONFIRMATION_VERIFY_ACCOUNT.route, @@ -1783,15 +1783,15 @@ const config: LinkingOptions['config'] = { [SCREENS.MONEY_REQUEST.RECEIPT_VIEW]: ROUTES.MONEY_REQUEST_RECEIPT_VIEW.route, [SCREENS.MONEY_REQUEST.STEP_TAG]: ROUTES.MONEY_REQUEST_STEP_TAG.route, [SCREENS.MONEY_REQUEST.STEP_WAYPOINT]: ROUTES.MONEY_REQUEST_STEP_WAYPOINT.route, - [SCREENS.MONEY_REQUEST.STEP_TAX_AMOUNT]: ROUTES.MONEY_REQUEST_STEP_TAX_AMOUNT.route, - [SCREENS.MONEY_REQUEST.STEP_TAX_RATE]: ROUTES.MONEY_REQUEST_STEP_TAX_RATE.route, + [SCREENS.MONEY_REQUEST.DYNAMIC_STEP_TAX_AMOUNT]: DYNAMIC_ROUTES.MONEY_REQUEST_STEP_TAX_AMOUNT.path, + [SCREENS.MONEY_REQUEST.DYNAMIC_STEP_TAX_RATE]: DYNAMIC_ROUTES.MONEY_REQUEST_STEP_TAX_RATE.path, [SCREENS.MONEY_REQUEST.STATE_SELECTOR]: { path: ROUTES.MONEY_REQUEST_STATE_SELECTOR.route, exact: true, }, - [SCREENS.MONEY_REQUEST.STEP_ATTENDEES]: ROUTES.MONEY_REQUEST_ATTENDEE.route, - [SCREENS.MONEY_REQUEST.STEP_ACCOUNTANT]: ROUTES.MONEY_REQUEST_ACCOUNTANT.route, - [SCREENS.MONEY_REQUEST.STEP_UPGRADE]: ROUTES.MONEY_REQUEST_UPGRADE.route, + [SCREENS.MONEY_REQUEST.DYNAMIC_STEP_ATTENDEES]: DYNAMIC_ROUTES.MONEY_REQUEST_ATTENDEE.path, + [SCREENS.MONEY_REQUEST.DYNAMIC_STEP_ACCOUNTANT]: DYNAMIC_ROUTES.MONEY_REQUEST_ACCOUNTANT.path, + [SCREENS.MONEY_REQUEST.DYNAMIC_STEP_UPGRADE]: DYNAMIC_ROUTES.MONEY_REQUEST_UPGRADE.path, [SCREENS.MONEY_REQUEST.STEP_DESTINATION]: ROUTES.MONEY_REQUEST_STEP_DESTINATION.route, [SCREENS.MONEY_REQUEST.STEP_TIME]: ROUTES.MONEY_REQUEST_STEP_TIME.route, [SCREENS.MONEY_REQUEST.STEP_SUBRATE]: ROUTES.MONEY_REQUEST_STEP_SUBRATE.route, diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index e0fd687d51a3..f9afac2aab47 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -1913,14 +1913,12 @@ type MoneyRequestNavigatorParamList = { backTo: Routes; reportActionID: string; }; - [SCREENS.MONEY_REQUEST.STEP_CATEGORY]: { + [SCREENS.MONEY_REQUEST.DYNAMIC_STEP_CATEGORY]: { action: IOUAction; iouType: Exclude; transactionID: string; - reportActionID: string; reportID: 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; + reportActionID?: string; }; [SCREENS.MONEY_REQUEST.STEP_CATEGORY_CREATE]: { action: IOUAction; @@ -1931,13 +1929,11 @@ type MoneyRequestNavigatorParamList = { // eslint-disable-next-line no-restricted-syntax -- backTo is needed to track where editing was initiated from (search/view or r/:reportID) backTo?: Routes; }; - [SCREENS.MONEY_REQUEST.STEP_TAX_AMOUNT]: { + [SCREENS.MONEY_REQUEST.DYNAMIC_STEP_TAX_AMOUNT]: { action: IOUAction; iouType: Exclude; transactionID: string; reportID: 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.MONEY_REQUEST.STEP_TAG]: { action: IOUAction; @@ -1949,13 +1945,11 @@ type MoneyRequestNavigatorParamList = { reportActionID: string; orderWeight: string; }; - [SCREENS.MONEY_REQUEST.STEP_TAX_RATE]: { + [SCREENS.MONEY_REQUEST.DYNAMIC_STEP_TAX_RATE]: { action: IOUAction; iouType: Exclude; transactionID: string; reportID: 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.MONEY_REQUEST.STEP_WAYPOINT]: { iouType: IOUType; @@ -2141,29 +2135,23 @@ type MoneyRequestNavigatorParamList = { /** ID of the expense report being rejected */ reportID: string; }; - [SCREENS.MONEY_REQUEST.STEP_ATTENDEES]: { + [SCREENS.MONEY_REQUEST.DYNAMIC_STEP_ATTENDEES]: { action: IOUAction; iouType: Exclude; transactionID: string; reportID: 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.MONEY_REQUEST.STEP_ACCOUNTANT]: { + [SCREENS.MONEY_REQUEST.DYNAMIC_STEP_ACCOUNTANT]: { action: IOUAction; iouType: Exclude; transactionID: string; reportID: 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.MONEY_REQUEST.STEP_UPGRADE]: { + [SCREENS.MONEY_REQUEST.DYNAMIC_STEP_UPGRADE]: { action: IOUAction; iouType: Exclude; transactionID: string; reportID: 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; upgradePath?: ValueOf; shouldSubmitExpense?: boolean; }; diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index 8a65e489a954..e3ca332053ef 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -11363,7 +11363,10 @@ function createDraftWorkspaceAndNavigateToConfirmationScreen( ]); setMoneyRequestReportID(transactionID, expenseChatReportID); if (isCategorizing) { - Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(actionName, CONST.IOU.TYPE.SUBMIT, transactionID, expenseChatReportID)); + const confirmationRoute = ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute(actionName, CONST.IOU.TYPE.SUBMIT, transactionID, expenseChatReportID, undefined, true); + Navigation.navigate( + createDynamicRoute(DYNAMIC_ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(actionName, CONST.IOU.TYPE.SUBMIT, transactionID, expenseChatReportID), confirmationRoute), + ); } else { Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute(actionName, CONST.IOU.TYPE.SUBMIT, transactionID, expenseChatReportID, undefined, true)); } @@ -11488,7 +11491,10 @@ function createDraftTransactionAndNavigateToParticipantSelector({ }, ]); if (policyExpenseReportID) { - Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(actionName, CONST.IOU.TYPE.SUBMIT, transactionID, policyExpenseReportID)); + const confirmationRoute = ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute(actionName, CONST.IOU.TYPE.SUBMIT, transactionID, policyExpenseReportID, undefined, true); + Navigation.navigate( + createDynamicRoute(DYNAMIC_ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(actionName, CONST.IOU.TYPE.SUBMIT, transactionID, policyExpenseReportID), confirmationRoute), + ); } else { Log.warn('policyExpenseReportID is not valid during expense categorizing'); } @@ -11496,15 +11502,16 @@ function createDraftTransactionAndNavigateToParticipantSelector({ } if (filteredPoliciesCount === 0 || filteredPoliciesCount > 1) { Navigation.navigate( - ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ - action: actionName, - iouType: CONST.IOU.TYPE.SUBMIT, - transactionID, - reportID, - backTo: '', - upgradePath: actionName === CONST.IOU.ACTION.CATEGORIZE ? CONST.UPGRADE_PATHS.CATEGORIES : '', - shouldSubmitExpense: true, - }), + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ + action: actionName, + iouType: CONST.IOU.TYPE.SUBMIT, + transactionID, + reportID, + upgradePath: actionName === CONST.IOU.ACTION.CATEGORIZE ? CONST.UPGRADE_PATHS.CATEGORIES : '', + shouldSubmitExpense: true, + }), + ), ); return; } @@ -11522,7 +11529,10 @@ function createDraftTransactionAndNavigateToParticipantSelector({ }, ]); if (policyExpenseReportID) { - Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(actionName, CONST.IOU.TYPE.SUBMIT, transactionID, policyExpenseReportID)); + const confirmationRoute = ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute(actionName, CONST.IOU.TYPE.SUBMIT, transactionID, policyExpenseReportID, undefined, true); + Navigation.navigate( + createDynamicRoute(DYNAMIC_ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(actionName, CONST.IOU.TYPE.SUBMIT, transactionID, policyExpenseReportID), confirmationRoute), + ); } else { Log.warn('policyExpenseReportID is not valid during expense categorizing'); } @@ -11530,7 +11540,7 @@ function createDraftTransactionAndNavigateToParticipantSelector({ } if (actionName === CONST.IOU.ACTION.SHARE) { - Navigation.navigate(ROUTES.MONEY_REQUEST_ACCOUNTANT.getRoute(actionName, CONST.IOU.TYPE.SUBMIT, transactionID, reportID, Navigation.getActiveRoute())); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.MONEY_REQUEST_ACCOUNTANT.getRoute(actionName, CONST.IOU.TYPE.SUBMIT, transactionID, reportID), Navigation.getActiveRoute())); return; } diff --git a/src/pages/Search/SearchTransactionsChangeReport.tsx b/src/pages/Search/SearchTransactionsChangeReport.tsx index efb1e20af6c7..7730b986c322 100644 --- a/src/pages/Search/SearchTransactionsChangeReport.tsx +++ b/src/pages/Search/SearchTransactionsChangeReport.tsx @@ -139,13 +139,15 @@ function SearchTransactionsChangeReport() { const firstTransactionID = selectedTransactionsKeys.at(0); if (firstTransactionID) { Navigation.navigate( - ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ - action: CONST.IOU.ACTION.EDIT, - iouType: CONST.IOU.TYPE.SUBMIT, - transactionID: firstTransactionID, - reportID: selectedTransactions[firstTransactionID]?.reportID ?? CONST.REPORT.UNREPORTED_REPORT_ID, - upgradePath: CONST.UPGRADE_PATHS.REPORTS, - }), + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ + action: CONST.IOU.ACTION.EDIT, + iouType: CONST.IOU.TYPE.SUBMIT, + transactionID: firstTransactionID, + reportID: selectedTransactions[firstTransactionID]?.reportID ?? CONST.REPORT.UNREPORTED_REPORT_ID, + upgradePath: CONST.UPGRADE_PATHS.REPORTS, + }), + ), ); } return; @@ -157,13 +159,15 @@ function SearchTransactionsChangeReport() { } if (!policyForMovingExpensesID) { Navigation.navigate( - ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ - action: CONST.IOU.ACTION.CREATE, - iouType: CONST.IOU.TYPE.CREATE, - transactionID: generateReportID(), - reportID: generateReportID(), - upgradePath: CONST.UPGRADE_PATHS.REPORTS, - }), + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ + action: CONST.IOU.ACTION.CREATE, + iouType: CONST.IOU.TYPE.CREATE, + transactionID: generateReportID(), + reportID: generateReportID(), + upgradePath: CONST.UPGRADE_PATHS.REPORTS, + }), + ), ); return; } diff --git a/src/pages/iou/SplitExpenseEditPage.tsx b/src/pages/iou/SplitExpenseEditPage.tsx index d0756b48c5d4..512b7587aba4 100644 --- a/src/pages/iou/SplitExpenseEditPage.tsx +++ b/src/pages/iou/SplitExpenseEditPage.tsx @@ -29,6 +29,7 @@ import {openPolicyTagsPage} from '@libs/actions/Policy/Tag'; import {getDecodedLeafCategoryName, isCategoryDescriptionRequired, isCategoryMissing} from '@libs/CategoryUtils'; import DistanceRequestUtils from '@libs/DistanceRequestUtils'; import getNonEmptyStringOnyxID from '@libs/getNonEmptyStringOnyxID'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import Navigation from '@libs/Navigation/Navigation'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; import type {SplitExpenseParamList} from '@libs/Navigation/types'; @@ -43,7 +44,7 @@ import {getTagVisibility, hasEnabledTags} from '@libs/TagsOptionsListUtils'; import {getDistanceInMeters, getRateID, getTag, getTagForDisplay, isDistanceRequest, isManualDistanceRequest, isOdometerDistanceRequest} from '@libs/TransactionUtils'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; +import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; @@ -266,13 +267,15 @@ function SplitExpenseEditPage({route}: SplitExpensePageProps) { // up the same SPLIT_TRANSACTION_DRAFT this screen reads from (see line 57 above). if (isSelfDMSplit && !effectivePolicy && !hasAnyPaidWorkspace && reportID) { Navigation.navigate( - ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ - action: CONST.IOU.ACTION.EDIT, - iouType: CONST.IOU.TYPE.SPLIT_EXPENSE, - transactionID: CONST.IOU.OPTIMISTIC_TRANSACTION_ID, - reportID, - upgradePath: CONST.UPGRADE_PATHS.DISTANCE_RATES, - }), + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ + action: CONST.IOU.ACTION.EDIT, + iouType: CONST.IOU.TYPE.SPLIT_EXPENSE, + transactionID: CONST.IOU.OPTIMISTIC_TRANSACTION_ID, + reportID, + upgradePath: CONST.UPGRADE_PATHS.DISTANCE_RATES, + }), + ), ); return; } @@ -331,23 +334,25 @@ function SplitExpenseEditPage({route}: SplitExpensePageProps) { numberOfLinesTitle={2} rightLabel={isCategoryRequired ? translate('common.required') : ''} onPress={() => { - const categoryRoute = ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute( - CONST.IOU.ACTION.EDIT, - CONST.IOU.TYPE.SPLIT_EXPENSE, - CONST.IOU.OPTIMISTIC_TRANSACTION_ID, - reportID, - Navigation.getActiveRoute(), + const categoryRoute = createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute( + CONST.IOU.ACTION.EDIT, + CONST.IOU.TYPE.SPLIT_EXPENSE, + CONST.IOU.OPTIMISTIC_TRANSACTION_ID, + reportID, + ), ); if (shouldNavigateToUpgradePath) { Navigation.navigate( - ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ - action: CONST.IOU.ACTION.EDIT, - iouType: CONST.IOU.TYPE.SPLIT_EXPENSE, - transactionID: CONST.IOU.OPTIMISTIC_TRANSACTION_ID, - reportID, - upgradePath: CONST.UPGRADE_PATHS.CATEGORIES, - backTo: categoryRoute, - }), + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ + action: CONST.IOU.ACTION.EDIT, + iouType: CONST.IOU.TYPE.SPLIT_EXPENSE, + transactionID: CONST.IOU.OPTIMISTIC_TRANSACTION_ID, + reportID, + upgradePath: CONST.UPGRADE_PATHS.CATEGORIES, + }), + ), ); return; } diff --git a/src/pages/iou/request/step/IOURequestStepAccountant.tsx b/src/pages/iou/request/step/DynamicIOURequestStepAccountantPage.tsx similarity index 82% rename from src/pages/iou/request/step/IOURequestStepAccountant.tsx rename to src/pages/iou/request/step/DynamicIOURequestStepAccountantPage.tsx index b5cc69def42a..a944b4ec531f 100644 --- a/src/pages/iou/request/step/IOURequestStepAccountant.tsx +++ b/src/pages/iou/request/step/DynamicIOURequestStepAccountantPage.tsx @@ -2,6 +2,7 @@ import {activeAdminPoliciesSelector} from '@selectors/Policy'; import React from 'react'; import type {OnyxCollection} from 'react-native-onyx'; import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; +import useDynamicBackPath from '@hooks/useDynamicBackPath'; import useLastWorkspaceNumber from '@hooks/useLastWorkspaceNumber'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; @@ -12,7 +13,7 @@ import {createDraftWorkspaceAndNavigateToConfirmationScreen} from '@libs/ReportU import MoneyRequestAccountantSelector from '@pages/iou/request/MoneyRequestAccountantSelector'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; +import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; import type {Policy} from '@src/types/onyx'; import type {Accountant} from '@src/types/onyx/IOU'; @@ -20,19 +21,20 @@ import StepScreenWrapper from './StepScreenWrapper'; import withWritableReportOrNotFound from './withWritableReportOrNotFound'; import type {WithWritableReportOrNotFoundProps} from './withWritableReportOrNotFound'; -type IOURequestStepAccountantProps = WithWritableReportOrNotFoundProps; +type DynamicIOURequestStepAccountantPageProps = WithWritableReportOrNotFoundProps; -function IOURequestStepAccountant({ +function DynamicIOURequestStepAccountantPage({ route: { - params: {transactionID, reportID, iouType, backTo, action}, + params: {transactionID, reportID, iouType, action}, }, -}: IOURequestStepAccountantProps) { +}: DynamicIOURequestStepAccountantPageProps) { const {translate} = useLocalize(); const {accountID, login, email = '', localCurrencyCode} = useCurrentUserPersonalDetails(); const selector = (policies: OnyxCollection) => activeAdminPoliciesSelector(policies, login ?? ''); const [adminPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {selector}); const [introSelected] = useOnyx(ONYXKEYS.NVP_INTRO_SELECTED); const lastWorkspaceNumber = useLastWorkspaceNumber(); + const backPath = useDynamicBackPath(DYNAMIC_ROUTES.MONEY_REQUEST_ACCOUNTANT.path); const setAccountant = (accountant: Accountant) => { setMoneyRequestAccountant(transactionID, accountant, true); @@ -58,7 +60,7 @@ function IOURequestStepAccountant({ }; const navigateBack = () => { - Navigation.goBack(backTo); + Navigation.goBack(backPath); }; return ( @@ -66,7 +68,7 @@ function IOURequestStepAccountant({ headerTitle={translate('iou.whoIsYourAccountant')} onBackButtonPress={navigateBack} shouldShowWrapper - testID="IOURequestStepAccountant" + testID="DynamicIOURequestStepAccountantPage" > ; +type IOURequestStepAttendeesProps = WithWritableReportOrNotFoundProps; -function IOURequestStepAttendees({ +function DynamicIOURequestStepAttendeesPage({ route: { - params: {transactionID, reportID, iouType, backTo, action}, + params: {transactionID, reportID, iouType, action}, }, }: IOURequestStepAttendeesProps) { const currentUserPersonalDetails = useCurrentUserPersonalDetails(); @@ -53,6 +55,7 @@ function IOURequestStepAttendees({ const delegateAccountID = useDelegateAccountID(); const {isBetaEnabled} = usePermissions(); const isASAPSubmitBetaEnabled = isBetaEnabled(CONST.BETAS.ASAP_SUBMIT); + const backPath = useDynamicBackPath(DYNAMIC_ROUTES.MONEY_REQUEST_ATTENDEE.path); const {isOffline} = useNetwork(); const saveAttendees = useCallback(() => { @@ -82,11 +85,10 @@ function IOURequestStepAttendees({ } } - Navigation.goBack(backTo); + Navigation.goBack(backPath); }, [ attendees, previousAttendees, - backTo, transactionID, isEditing, report, @@ -101,10 +103,11 @@ function IOURequestStepAttendees({ parentReportNextStep, isOffline, delegateAccountID, + backPath, ]); const navigateBack = () => { - Navigation.goBack(backTo); + Navigation.goBack(backPath); }; return ( @@ -112,7 +115,7 @@ function IOURequestStepAttendees({ headerTitle={translate('iou.attendees')} onBackButtonPress={navigateBack} shouldShowWrapper - testID="IOURequestStepAttendees" + testID="DynamicIOURequestStepAttendeesPage" > & - WithFullTransactionOrNotFoundProps; +type IOURequestStepCategoryProps = WithWritableReportOrNotFoundProps & + WithFullTransactionOrNotFoundProps; + +function DynamicIOURequestStepCategoryPage({report: reportReal, reportDraft, route, transaction}: IOURequestStepCategoryProps) { + const { + params: {transactionID, action, iouType, reportActionID, reportID: routeReportID}, + } = route; -function IOURequestStepCategory({ - report: reportReal, - reportDraft, - route: { - params: {transactionID, backTo, action, iouType, reportActionID, reportID: routeReportID}, - }, - transaction, -}: IOURequestStepCategoryProps) { const styles = useThemeStyles(); const {translate} = useLocalize(); const illustrations = useMemoizedLazyIllustrations(['EmptyStateExpenses']); @@ -96,6 +94,8 @@ function IOURequestStepCategory({ const isASAPSubmitBetaEnabled = isBetaEnabled(CONST.BETAS.ASAP_SUBMIT); const categoryForDisplay = isCategoryMissing(transactionCategory) ? '' : transactionCategory; + const backPath = useDynamicBackPath(DYNAMIC_ROUTES.MONEY_REQUEST_STEP_CATEGORY.path); + const shouldReturnToPreviousScreen = backPath !== ROUTES.HOME; const canCreateCategoryInSitu = isPolicyAdmin(policy) && !hasAccountingConnections(policy) && !!policy?.areCategoriesEnabled; @@ -109,7 +109,7 @@ function IOURequestStepCategory({ if (!policyID || !reportID) { return; } - Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_CATEGORY_CREATE.getRoute(action, iouType, transactionID, reportID, reportActionID, backTo)); + Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_CATEGORY_CREATE.getRoute(action, iouType, transactionID, reportID, reportActionID, Navigation.getActiveRoute())); }, }, ] @@ -146,7 +146,7 @@ function IOURequestStepCategory({ }, [policyID]); const navigateBack = () => { - Navigation.goBack(backTo); + Navigation.goBack(backPath); }; const updateCategory = (category: ListItem) => { @@ -186,7 +186,7 @@ function IOURequestStepCategory({ setMoneyRequestCategory(transactionID, updatedCategory, policy); - if (action === CONST.IOU.ACTION.CATEGORIZE && !backTo) { + if (action === CONST.IOU.ACTION.CATEGORIZE && !shouldReturnToPreviousScreen) { if (report?.reportID) { Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute(action, iouType, transactionID, report.reportID)); } @@ -203,7 +203,7 @@ function IOURequestStepCategory({ shouldShowWrapper shouldShowNotFoundPage={shouldShowNotFoundPage} shouldShowOfflineIndicator={policyCategories !== undefined} - testID="IOURequestStepCategory" + testID="DynamicIOURequestStepCategoryPage" shouldEnableKeyboardAvoidingView={false} threeDotsMenuItems={createCategoryMenuItems} shouldMinimizeMenuButton @@ -240,12 +240,7 @@ function IOURequestStepCategory({ enablePolicyCategories({...policyData, categories: policyCategories}, true, false); } InteractionManager.runAfterInteractions(() => { - Navigation.navigate( - ROUTES.SETTINGS_CATEGORIES_ROOT.getRoute( - policyID, - ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(action, iouType, transactionID, report.reportID, backTo, reportActionID), - ), - ); + Navigation.navigate(ROUTES.SETTINGS_CATEGORIES_ROOT.getRoute(policyID, Navigation.getActiveRoute())); }); }} text={translate('workspace.categories.editCategories')} @@ -267,7 +262,6 @@ function IOURequestStepCategory({ ); } -const IOURequestStepCategoryWithFullTransactionOrNotFound = withFullTransactionOrNotFound(IOURequestStepCategory); - -const IOURequestStepCategoryWithWritableReportOrNotFound = withWritableReportOrNotFound(IOURequestStepCategoryWithFullTransactionOrNotFound); -export default IOURequestStepCategoryWithWritableReportOrNotFound; +const DynamicIOURequestStepCategoryPageWithFullTransactionOrNotFound = withFullTransactionOrNotFound(DynamicIOURequestStepCategoryPage); +const DynamicIOURequestStepCategoryPageWithWritableReportOrNotFound = withWritableReportOrNotFound(DynamicIOURequestStepCategoryPageWithFullTransactionOrNotFound); +export default DynamicIOURequestStepCategoryPageWithWritableReportOrNotFound; diff --git a/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx b/src/pages/iou/request/step/DynamicIOURequestStepTaxAmountPage.tsx similarity index 88% rename from src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx rename to src/pages/iou/request/step/DynamicIOURequestStepTaxAmountPage.tsx index a9aa927413d5..476f7e12658c 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxAmountPage.tsx +++ b/src/pages/iou/request/step/DynamicIOURequestStepTaxAmountPage.tsx @@ -4,6 +4,7 @@ import type {OnyxEntry} from 'react-native-onyx'; import type {BaseTextInputRef} from '@components/TextInput/BaseTextInput/types'; import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useDelegateAccountID from '@hooks/useDelegateAccountID'; +import useDynamicBackPath from '@hooks/useDynamicBackPath'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; import usePermissions from '@hooks/usePermissions'; @@ -21,7 +22,7 @@ import type {CurrentMoney} from '@pages/iou/MoneyRequestAmountForm'; import MoneyRequestAmountForm from '@pages/iou/MoneyRequestAmountForm'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; +import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; import type {Policy, Transaction} from '@src/types/onyx'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; @@ -30,7 +31,7 @@ import withFullTransactionOrNotFound from './withFullTransactionOrNotFound'; import type {WithWritableReportOrNotFoundProps} from './withWritableReportOrNotFound'; import withWritableReportOrNotFound from './withWritableReportOrNotFound'; -type IOURequestStepTaxAmountPageProps = WithWritableReportOrNotFoundProps & { +type IOURequestStepTaxAmountPageProps = WithWritableReportOrNotFoundProps & { transaction: OnyxEntry; }; @@ -51,7 +52,7 @@ function getTaxAmount(transaction: OnyxEntry, policy: OnyxEntry { - Navigation.goBack(backTo); + Navigation.goBack(backPath); }; const updateTaxAmount = (currentAmount: CurrentMoney) => { @@ -135,8 +139,8 @@ function IOURequestStepTaxAmountPage({ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing setMoneyRequestCurrency(transactionID, currency || CONST.CURRENCY.USD); - if (backTo) { - Navigation.goBack(backTo); + if (shouldReturnToPreviousScreen) { + navigateBack(); return; } @@ -159,15 +163,15 @@ function IOURequestStepTaxAmountPage({ { textInput.current = e; }} @@ -181,8 +185,8 @@ function IOURequestStepTaxAmountPage({ ); } -const IOURequestStepTaxAmountPageWithWritableReportOrNotFound = withWritableReportOrNotFound(IOURequestStepTaxAmountPage); +const DynamicIOURequestStepTaxAmountPageWithWritableReportOrNotFound = withWritableReportOrNotFound(IOURequestStepTaxAmountPage); -const IOURequestStepTaxAmountPageWithFullTransactionOrNotFound = withFullTransactionOrNotFound(IOURequestStepTaxAmountPageWithWritableReportOrNotFound); +const DynamicIOURequestStepTaxAmountPageWithFullTransactionOrNotFound = withFullTransactionOrNotFound(DynamicIOURequestStepTaxAmountPageWithWritableReportOrNotFound); -export default IOURequestStepTaxAmountPageWithFullTransactionOrNotFound; +export default DynamicIOURequestStepTaxAmountPageWithFullTransactionOrNotFound; diff --git a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx b/src/pages/iou/request/step/DynamicIOURequestStepTaxRatePage.tsx similarity index 90% rename from src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx rename to src/pages/iou/request/step/DynamicIOURequestStepTaxRatePage.tsx index 0c464308f063..8d954a6f1399 100644 --- a/src/pages/iou/request/step/IOURequestStepTaxRatePage.tsx +++ b/src/pages/iou/request/step/DynamicIOURequestStepTaxRatePage.tsx @@ -4,6 +4,7 @@ import TaxPicker from '@components/TaxPicker'; import {useCurrencyListActions} from '@hooks/useCurrencyList'; import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useDelegateAccountID from '@hooks/useDelegateAccountID'; +import useDynamicBackPath from '@hooks/useDynamicBackPath'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; import usePermissions from '@hooks/usePermissions'; @@ -21,6 +22,7 @@ import {setDraftSplitTransaction} from '@userActions/IOU/Split'; import {updateMoneyRequestTaxRate} from '@userActions/IOU/UpdateMoneyRequest'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; +import {DYNAMIC_ROUTES} from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; import type {Policy, Transaction} from '@src/types/onyx'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; @@ -29,7 +31,7 @@ import withFullTransactionOrNotFound from './withFullTransactionOrNotFound'; import withWritableReportOrNotFound from './withWritableReportOrNotFound'; import type {WithWritableReportOrNotFoundProps} from './withWritableReportOrNotFound'; -type IOURequestStepTaxRatePageProps = WithWritableReportOrNotFoundProps & { +type IOURequestStepTaxRatePageProps = WithWritableReportOrNotFoundProps & { transaction: OnyxEntry; }; @@ -42,7 +44,7 @@ function getTaxAmount(policy: OnyxEntry, transaction: OnyxEntry { - Navigation.goBack(backTo); + Navigation.goBack(backPath); }; const taxRateTitle = getTaxRateTitle(policy, currentTransaction, isMovingTransactionFromTrackExpense(action), policyForMovingExpenses); @@ -145,7 +148,7 @@ function IOURequestStepTaxRatePage({ headerTitle={translate('iou.taxRate')} onBackButtonPress={navigateBack} shouldShowWrapper - testID="IOURequestStepTaxRatePage" + testID="DynamicIOURequestStepTaxRatePage" > ; +type DynamicIOURequestStepUpgradePageProps = PlatformStackScreenProps; -function IOURequestStepUpgrade({ +function DynamicIOURequestStepUpgradePage({ route: { - params: {transactionID, action, reportID, shouldSubmitExpense, upgradePath, iouType, backTo}, + params: {transactionID, action, reportID, shouldSubmitExpense, upgradePath, iouType}, }, -}: IOURequestStepUpgradeProps) { +}: DynamicIOURequestStepUpgradePageProps) { const styles = useThemeStyles(); const {translate} = useLocalize(); @@ -57,6 +59,7 @@ function IOURequestStepUpgrade({ const activePolicy = useActivePolicy(); const hasActiveAdminPolicies = useHasActiveAdminPolicies(); const lastWorkspaceNumber = useLastWorkspaceNumber(); + const backPath = useDynamicBackPath(DYNAMIC_ROUTES.MONEY_REQUEST_UPGRADE.path); const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${transactionID}`); const [selectedReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${reportID}`); @@ -175,13 +178,13 @@ function IOURequestStepUpgrade({ switch (upgradePath) { case CONST.UPGRADE_PATHS.DISTANCE_RATES: { if (!policyID || !reportID) { - Navigation.goBack(); + Navigation.goBack(backPath); return; } // In case we get here from /:action/track/... route we need to navigate to // /:action/submit/... when shouldSubmitExpense === true as transaction is not selfDM anymore - const backToRoute = shouldSubmitExpense ? ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute(action, CONST.IOU.TYPE.SUBMIT, transactionID, reportID) : undefined; + const backToRoute = shouldSubmitExpense ? ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute(action, CONST.IOU.TYPE.SUBMIT, transactionID, reportID) : backPath; Navigation.goBack(backToRoute, {compareParams: false}); @@ -204,28 +207,28 @@ function IOURequestStepUpgrade({ case CONST.UPGRADE_PATHS.REPORTS: if (action === CONST.IOU.ACTION.CREATE && policyID) { const {reportID: newReportID} = createReportForCurrentUser(policyID); - Navigation.goBack(); + Navigation.goBack(backPath); // Wait until the upgrade RHP is closed before opening the created report from Reports. Navigation.setNavigationActionToMicrotaskQueue(() => { navigateToCreatedReportInReports(newReportID); }); } else { - Navigation.goBack(); + Navigation.goBack(backPath); navigateWithMicrotask(ROUTES.MONEY_REQUEST_STEP_REPORT.getRoute(action, CONST.IOU.TYPE.SUBMIT, transactionID, reportID)); } break; case CONST.UPGRADE_PATHS.CATEGORIES: - Navigation.goBack(); - navigateWithMicrotask(backTo ?? ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(action, CONST.IOU.TYPE.SUBMIT, transactionID, reportID)); + Navigation.goBack(backPath); + navigateWithMicrotask(createDynamicRoute(DYNAMIC_ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(action, CONST.IOU.TYPE.SUBMIT, transactionID, reportID))); break; default: - Navigation.goBack(); + Navigation.goBack(backPath); } }, [ action, - backTo, + backPath, navigateWithMicrotask, reportID, shouldSubmitExpense, @@ -329,7 +332,7 @@ function IOURequestStepUpgrade({ {(!!isUpgraded || !showConfirmationForm) && ( Navigation.goBack()} + onBackButtonPress={() => Navigation.goBack(backPath)} /> )} {!showConfirmationForm && ( @@ -377,4 +380,4 @@ function IOURequestStepUpgrade({ ); } -export default IOURequestStepUpgrade; +export default DynamicIOURequestStepUpgradePage; diff --git a/src/pages/iou/request/step/IOURequestStepCategoryCreate.tsx b/src/pages/iou/request/step/IOURequestStepCategoryCreate.tsx index b9cb603d444b..9e6f7ee5ed29 100644 --- a/src/pages/iou/request/step/IOURequestStepCategoryCreate.tsx +++ b/src/pages/iou/request/step/IOURequestStepCategoryCreate.tsx @@ -35,7 +35,7 @@ function IOURequestStepCategoryCreate({ report: reportReal, reportDraft, route: { - params: {transactionID, action, iouType, reportID, reportActionID, backTo}, + params: {transactionID, action, iouType, reportID, backTo}, }, transaction, }: IOURequestStepCategoryCreateProps) { @@ -163,7 +163,7 @@ function IOURequestStepCategoryCreate({ > Navigation.goBack(ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(action, iouType, transactionID, reportID, backTo, reportActionID))} + onBackButtonPress={() => Navigation.goBack(backTo)} shouldShowWrapper testID="IOURequestStepCategoryCreate" > diff --git a/src/pages/iou/request/step/withFullTransactionOrNotFound.tsx b/src/pages/iou/request/step/withFullTransactionOrNotFound.tsx index f37b4127d942..8d72efbdf76e 100644 --- a/src/pages/iou/request/step/withFullTransactionOrNotFound.tsx +++ b/src/pages/iou/request/step/withFullTransactionOrNotFound.tsx @@ -32,14 +32,14 @@ type MoneyRequestRouteName = | typeof SCREENS.MONEY_REQUEST.STEP_WAYPOINT | typeof SCREENS.MONEY_REQUEST.STEP_DESCRIPTION | typeof SCREENS.MONEY_REQUEST.STEP_DATE - | typeof SCREENS.MONEY_REQUEST.STEP_TAX_AMOUNT + | typeof SCREENS.MONEY_REQUEST.DYNAMIC_STEP_TAX_AMOUNT | typeof SCREENS.MONEY_REQUEST.STEP_PARTICIPANTS | typeof SCREENS.MONEY_REQUEST.STEP_MERCHANT | typeof SCREENS.MONEY_REQUEST.STEP_TAG | typeof SCREENS.MONEY_REQUEST.STEP_DISTANCE_RATE | typeof SCREENS.MONEY_REQUEST.STEP_CONFIRMATION - | typeof SCREENS.MONEY_REQUEST.STEP_CATEGORY - | typeof SCREENS.MONEY_REQUEST.STEP_TAX_RATE + | typeof SCREENS.MONEY_REQUEST.DYNAMIC_STEP_CATEGORY + | typeof SCREENS.MONEY_REQUEST.DYNAMIC_STEP_TAX_RATE | typeof SCREENS.MONEY_REQUEST.STEP_SCAN | typeof SCREENS.MONEY_REQUEST.STEP_SEND_FROM | typeof SCREENS.MONEY_REQUEST.STEP_REPORT diff --git a/src/pages/iou/request/step/withWritableReportOrNotFound.tsx b/src/pages/iou/request/step/withWritableReportOrNotFound.tsx index 5eb13936ed83..c506e864272e 100644 --- a/src/pages/iou/request/step/withWritableReportOrNotFound.tsx +++ b/src/pages/iou/request/step/withWritableReportOrNotFound.tsx @@ -28,10 +28,10 @@ type MoneyRequestRouteName = | typeof SCREENS.MONEY_REQUEST.STEP_WAYPOINT | typeof SCREENS.MONEY_REQUEST.STEP_DESCRIPTION | typeof SCREENS.MONEY_REQUEST.STEP_DATE - | typeof SCREENS.MONEY_REQUEST.STEP_CATEGORY + | typeof SCREENS.MONEY_REQUEST.DYNAMIC_STEP_CATEGORY | typeof SCREENS.MONEY_REQUEST.STEP_DISTANCE_RATE | typeof SCREENS.MONEY_REQUEST.STEP_CONFIRMATION - | typeof SCREENS.MONEY_REQUEST.STEP_TAX_RATE + | typeof SCREENS.MONEY_REQUEST.DYNAMIC_STEP_TAX_RATE | typeof SCREENS.MONEY_REQUEST.STEP_AMOUNT | typeof SCREENS.MONEY_REQUEST.STEP_DISTANCE | typeof SCREENS.MONEY_REQUEST.CREATE @@ -39,14 +39,14 @@ type MoneyRequestRouteName = | typeof SCREENS.MONEY_REQUEST.STEP_TAG | typeof SCREENS.MONEY_REQUEST.STEP_PARTICIPANTS | typeof SCREENS.MONEY_REQUEST.STEP_MERCHANT - | typeof SCREENS.MONEY_REQUEST.STEP_TAX_AMOUNT + | typeof SCREENS.MONEY_REQUEST.DYNAMIC_STEP_TAX_AMOUNT | typeof SCREENS.MONEY_REQUEST.STEP_SCAN | typeof SCREENS.MONEY_REQUEST.STEP_SEND_FROM | typeof SCREENS.MONEY_REQUEST.STEP_REPORT | typeof SCREENS.MONEY_REQUEST.STEP_COMPANY_INFO - | typeof SCREENS.MONEY_REQUEST.STEP_ATTENDEES - | typeof SCREENS.MONEY_REQUEST.STEP_ACCOUNTANT - | typeof SCREENS.MONEY_REQUEST.STEP_UPGRADE + | typeof SCREENS.MONEY_REQUEST.DYNAMIC_STEP_ATTENDEES + | typeof SCREENS.MONEY_REQUEST.DYNAMIC_STEP_ACCOUNTANT + | typeof SCREENS.MONEY_REQUEST.DYNAMIC_STEP_UPGRADE | typeof SCREENS.MONEY_REQUEST.STEP_DESTINATION | typeof SCREENS.MONEY_REQUEST.STEP_TIME | typeof SCREENS.MONEY_REQUEST.STEP_TIME_EDIT diff --git a/tests/unit/ReportUtilsTest.ts b/tests/unit/ReportUtilsTest.ts index 236cc0b76f82..f6d48e3ad3b9 100644 --- a/tests/unit/ReportUtilsTest.ts +++ b/tests/unit/ReportUtilsTest.ts @@ -21,6 +21,7 @@ import type {FormulaContext} from '@libs/Formula'; import getBase62ReportID from '@libs/getBase62ReportID'; import {translate} from '@libs/Localize'; import Log from '@libs/Log'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import getReportURLForCurrentContext from '@libs/Navigation/helpers/getReportURLForCurrentContext'; import isSearchTopmostFullScreenRoute from '@libs/Navigation/helpers/isSearchTopmostFullScreenRoute'; import Navigation from '@libs/Navigation/Navigation'; @@ -171,7 +172,7 @@ import {buildOptimisticTransaction} from '@libs/TransactionUtils'; import CONST from '@src/CONST'; import IntlStore from '@src/languages/IntlStore'; import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; +import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; import type { BankAccountList, Beta, @@ -15755,7 +15756,17 @@ describe('ReportUtils', () => { // Then it should navigate to the category step expect(Navigation.navigate).toHaveBeenCalledWith( - ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(CONST.IOU.ACTION.CATEGORIZE, CONST.IOU.TYPE.SUBMIT, transaction.transactionID, policyExpenseReport.reportID), + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(CONST.IOU.ACTION.CATEGORIZE, CONST.IOU.TYPE.SUBMIT, transaction.transactionID, policyExpenseReport.reportID), + ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute( + CONST.IOU.ACTION.CATEGORIZE, + CONST.IOU.TYPE.SUBMIT, + transaction.transactionID, + policyExpenseReport.reportID, + undefined, + true, + ), + ), ); }); @@ -15798,7 +15809,17 @@ describe('ReportUtils', () => { // Then it should automatically pick the available policy and navigate to the category step expect(Navigation.navigate).toHaveBeenCalledWith( - ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(CONST.IOU.ACTION.CATEGORIZE, CONST.IOU.TYPE.SUBMIT, transaction.transactionID, policyExpenseReport.reportID), + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(CONST.IOU.ACTION.CATEGORIZE, CONST.IOU.TYPE.SUBMIT, transaction.transactionID, policyExpenseReport.reportID), + ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute( + CONST.IOU.ACTION.CATEGORIZE, + CONST.IOU.TYPE.SUBMIT, + transaction.transactionID, + policyExpenseReport.reportID, + undefined, + true, + ), + ), ); }); @@ -15828,15 +15849,16 @@ describe('ReportUtils', () => { // Then it should navigate to the upgrade page because no policies were found to categorize with expect(Navigation.navigate).toHaveBeenCalledWith( - ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ - action: CONST.IOU.ACTION.CATEGORIZE, - iouType: CONST.IOU.TYPE.SUBMIT, - transactionID: transaction.transactionID, - reportID: '1', - backTo: '', - upgradePath: CONST.UPGRADE_PATHS.CATEGORIES, - shouldSubmitExpense: true, - }), + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ + action: CONST.IOU.ACTION.CATEGORIZE, + iouType: CONST.IOU.TYPE.SUBMIT, + transactionID: transaction.transactionID, + reportID: '1', + upgradePath: CONST.UPGRADE_PATHS.CATEGORIES, + shouldSubmitExpense: true, + }), + ), ); }); @@ -15879,15 +15901,16 @@ describe('ReportUtils', () => { // Then it should navigate to the upgrade page because it's ambiguous which policy to use expect(Navigation.navigate).toHaveBeenCalledWith( - ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ - action: CONST.IOU.ACTION.CATEGORIZE, - iouType: CONST.IOU.TYPE.SUBMIT, - transactionID: transaction.transactionID, - reportID: '1', - backTo: '', - upgradePath: CONST.UPGRADE_PATHS.CATEGORIES, - shouldSubmitExpense: true, - }), + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_UPGRADE.getRoute({ + action: CONST.IOU.ACTION.CATEGORIZE, + iouType: CONST.IOU.TYPE.SUBMIT, + transactionID: transaction.transactionID, + reportID: '1', + upgradePath: CONST.UPGRADE_PATHS.CATEGORIES, + shouldSubmitExpense: true, + }), + ), ); }); @@ -15974,7 +15997,17 @@ describe('ReportUtils', () => { // Then it should NOT navigate to restricted action page, but to category step expect(Navigation.navigate).not.toHaveBeenCalledWith(ROUTES.RESTRICTED_ACTION.getRoute(activePolicy.id)); expect(Navigation.navigate).toHaveBeenCalledWith( - ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(CONST.IOU.ACTION.CATEGORIZE, CONST.IOU.TYPE.SUBMIT, transaction.transactionID, policyExpenseReport.reportID), + createDynamicRoute( + DYNAMIC_ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(CONST.IOU.ACTION.CATEGORIZE, CONST.IOU.TYPE.SUBMIT, transaction.transactionID, policyExpenseReport.reportID), + ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute( + CONST.IOU.ACTION.CATEGORIZE, + CONST.IOU.TYPE.SUBMIT, + transaction.transactionID, + policyExpenseReport.reportID, + undefined, + true, + ), + ), ); });