diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 2c9b79f2fc8e..00d0914a5e0d 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -540,6 +540,10 @@ const DYNAMIC_ROUTES = { path: 'select-feed', entryScreens: [SCREENS.WORKSPACE.EXPENSIFY_CARD], }, + WORKSPACE_COMPANY_CARDS_ADD_NEW: { + path: 'add-card-feed', + entryScreens: [SCREENS.WORKSPACE.COMPANY_CARDS, SCREENS.WORKSPACE.COMPANY_CARDS_SELECT_FEED], + }, WORKSPACE_EXPENSIFY_CARD_ISSUE_NEW_CONFIRM_MAGIC_CODE: { path: 'confirm-magic-code', entryScreens: [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_EXPENSIFY_CARD_ISSUE_NEW], @@ -2692,11 +2696,6 @@ const ROUTES = { return getUrlWithBackToParam(`workspaces/${policyID}/company-cards/${feed}/bank-connection`, backTo); }, }, - WORKSPACE_COMPANY_CARDS_ADD_NEW: { - route: 'workspaces/:policyID/company-cards/add-card-feed', - - getRoute: (policyID: string, backTo?: string) => getUrlWithBackToParam(`workspaces/${policyID}/company-cards/add-card-feed`, backTo), - }, WORKSPACE_COMPANY_CARDS_IMPORT_SPREADSHEET: { route: 'workspaces/:policyID/company-cards/add-card-feed/import', getRoute: (policyID: string) => `workspaces/${policyID}/company-cards/add-card-feed/import` as const, diff --git a/src/SCREENS.ts b/src/SCREENS.ts index e0efc25942ed..88a2b0d2c54c 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -726,7 +726,7 @@ const SCREENS = { COMPANY_CARDS_ASSIGN_CARD_INVITE_NEW_MEMBER: 'Workspace_CompanyCards_AssignCard_Invite_New_Member', COMPANY_CARDS_SELECT_FEED: 'Workspace_CompanyCards_Select_Feed', COMPANY_CARDS_BANK_CONNECTION: 'Workspace_CompanyCards_BankConnection', - COMPANY_CARDS_ADD_NEW: 'Workspace_CompanyCards_New', + DYNAMIC_WORKSPACE_COMPANY_CARDS_ADD_NEW: 'Dynamic_Workspace_CompanyCards_New', COMPANY_CARDS_IMPORT_SPREADSHEET: 'Workspace_CompanyCards_Import_Spreadsheet', COMPANY_CARDS_IMPORTED: 'Workspace_CompanyCards_Imported', COMPANY_CARDS_TYPE: 'Workspace_CompanyCards_Type', diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx index 5241583c5d08..a92738b638e0 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx @@ -943,7 +943,7 @@ const SettingsModalStackNavigator = createModalStackNavigator require('../../../../pages/workspace/companyCards/assignCard/InviteNewMemberStep').default, [SCREENS.WORKSPACE.COMPANY_CARDS_SELECT_FEED]: () => require('../../../../pages/workspace/companyCards/WorkspaceCompanyCardFeedSelectorPage').default, [SCREENS.WORKSPACE.COMPANY_CARDS_BANK_CONNECTION]: () => require('../../../../pages/workspace/companyCards/BankConnection').default, - [SCREENS.WORKSPACE.COMPANY_CARDS_ADD_NEW]: () => require('../../../../pages/workspace/companyCards/addNew/AddNewCardPage').default, + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_COMPANY_CARDS_ADD_NEW]: () => require('../../../../pages/workspace/companyCards/addNew/AddNewCardPage').default, [SCREENS.WORKSPACE.COMPANY_CARDS_IMPORT_SPREADSHEET]: () => require('../../../../pages/workspace/companyCards/addNew/CompanyCardsImportSpreadsheetPage').default, [SCREENS.WORKSPACE.COMPANY_CARDS_IMPORTED]: () => require('../../../../pages/workspace/companyCards/addNew/CompanyCardsImportedPage').default, [SCREENS.WORKSPACE.COMPANY_CARDS_LAYOUT_NAME]: () => require('../../../../pages/workspace/companyCards/addNew/CompanyCardLayoutNamePage').default, diff --git a/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts b/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts index 1efa9b448f7b..2c4f713bc803 100755 --- a/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts +++ b/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts @@ -276,7 +276,7 @@ const WORKSPACE_TO_RHP: Partial['config'] = { [SCREENS.WORKSPACE.EXPENSIFY_CARD_DETAILS]: { path: ROUTES.WORKSPACE_EXPENSIFY_CARD_DETAILS.route, }, - [SCREENS.WORKSPACE.COMPANY_CARDS_ADD_NEW]: { - path: ROUTES.WORKSPACE_COMPANY_CARDS_ADD_NEW.route, - }, + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_COMPANY_CARDS_ADD_NEW]: DYNAMIC_ROUTES.WORKSPACE_COMPANY_CARDS_ADD_NEW.path, [SCREENS.WORKSPACE.COMPANY_CARDS_IMPORT_SPREADSHEET]: { path: ROUTES.WORKSPACE_COMPANY_CARDS_IMPORT_SPREADSHEET.route, }, diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index 06d7338abed4..f9c38445b201 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -2702,10 +2702,8 @@ type WorkspaceSplitNavigatorParamList = { // 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.WORKSPACE.COMPANY_CARDS_ADD_NEW]: { + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_COMPANY_CARDS_ADD_NEW]: { policyID: 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.WORKSPACE.COMPANY_CARDS_IMPORT_SPREADSHEET]: { policyID: string; diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardFeedSelectorPage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardFeedSelectorPage.tsx index a23e99311011..743050d350de 100644 --- a/src/pages/workspace/companyCards/WorkspaceCompanyCardFeedSelectorPage.tsx +++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardFeedSelectorPage.tsx @@ -30,6 +30,7 @@ import {getLinkedPolicyName} from '@libs/CardFeedUtils'; import {getCardFeedIcon, getCardFeedWithDomainID, getCustomOrFormattedFeedName, getPlaidInstitutionIconUrl} from '@libs/CardUtils'; import {getMicroSecondOnyxErrorWithTranslationKey} from '@libs/ErrorUtils'; import {isEmailPublicDomain} from '@libs/LoginUtils'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; import Navigation from '@navigation/Navigation'; @@ -40,7 +41,7 @@ import {clearAddNewCardFlow, linkCardFeedToPolicy} from '@userActions/CompanyCar 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 SCREENS from '@src/SCREENS'; import type {CompanyCardFeedWithNumber} from '@src/types/onyx/CardFeeds'; import type {Errors} from '@src/types/onyx/OnyxCommon'; @@ -119,7 +120,7 @@ function WorkspaceCompanyCardFeedSelectorPage({route}: WorkspaceCompanyCardFeedS ); return; } - Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS_ADD_NEW.getRoute(policyID)); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_COMPANY_CARDS_ADD_NEW.path)); }; const goBack = () => Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS.getRoute(policyID)); diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardPageEmptyState.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardPageEmptyState.tsx index 7942c036cf6e..1dfd800598bd 100644 --- a/src/pages/workspace/companyCards/WorkspaceCompanyCardPageEmptyState.tsx +++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardPageEmptyState.tsx @@ -13,12 +13,13 @@ import usePolicy from '@hooks/usePolicy'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useThemeStyles from '@hooks/useThemeStyles'; import {hasIssuedExpensifyCard} from '@libs/CardUtils'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import Navigation from '@libs/Navigation/Navigation'; import colors from '@styles/theme/colors'; import {clearAddNewCardFlow} from '@userActions/CompanyCards'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; +import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; import WorkspaceCompanyCardExpensifyCardPromotionBanner from './WorkspaceCompanyCardExpensifyCardPromotionBanner'; type WorkspaceCompanyCardPageEmptyStateProps = { @@ -103,7 +104,7 @@ function WorkspaceCompanyCardPageEmptyState({policyID, shouldShowGBDisclaimer}: return; } clearAddNewCardFlow(); - Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS_ADD_NEW.getRoute(policy.id)); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_COMPANY_CARDS_ADD_NEW.path)); }; return ( diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardsVerifyAccountPage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardsVerifyAccountPage.tsx index b17fb199a74d..aed9124e79ff 100644 --- a/src/pages/workspace/companyCards/WorkspaceCompanyCardsVerifyAccountPage.tsx +++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardsVerifyAccountPage.tsx @@ -2,12 +2,13 @@ import React from 'react'; import {useCurrencyListState} from '@hooks/useCurrencyList'; import useOnyx from '@hooks/useOnyx'; import usePolicy from '@hooks/usePolicy'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; import type {SettingsNavigatorParamList} from '@navigation/types'; import VerifyAccountPageBase from '@pages/settings/VerifyAccountPageBase'; import {clearAddNewCardFlow, seedCardFeedRefresh} from '@userActions/CompanyCards'; import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; +import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; type WorkspaceCompanyCardsVerifyAccountPageProps = PlatformStackScreenProps; @@ -41,7 +42,7 @@ function WorkspaceCompanyCardsVerifyAccountPage({route}: WorkspaceCompanyCardsVe return ( ); diff --git a/src/pages/workspace/companyCards/addNew/CompanyCardLayoutNamePage.tsx b/src/pages/workspace/companyCards/addNew/CompanyCardLayoutNamePage.tsx index f5d79117c3c6..8b9a9ac66b9b 100644 --- a/src/pages/workspace/companyCards/addNew/CompanyCardLayoutNamePage.tsx +++ b/src/pages/workspace/companyCards/addNew/CompanyCardLayoutNamePage.tsx @@ -11,6 +11,7 @@ import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; import useThemeStyles from '@hooks/useThemeStyles'; import {addErrorMessage} from '@libs/ErrorUtils'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; import {getFieldRequiredErrors, isValidInputLength} from '@libs/ValidationUtils'; import Navigation from '@navigation/Navigation'; @@ -19,7 +20,7 @@ import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper'; import {setAddNewCompanyCardStepAndData} from '@userActions/CompanyCards'; 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 INPUT_IDS from '@src/types/form/CompanyCardLayoutNameForm'; @@ -27,6 +28,7 @@ type CompanyCardLayoutNamePageProps = PlatformStackScreenProps): FormInputErrors => { @@ -64,7 +66,7 @@ function CompanyCardLayoutNamePage({route}: CompanyCardLayoutNamePageProps) { > Navigation.goBack(ROUTES.WORKSPACE_COMPANY_CARDS_ADD_NEW.getRoute(policyID))} + onBackButtonPress={() => Navigation.goBack(dynamicAddNewPath)} /> >(); + const route = useRoute>(); const [addNewCard] = useOnyx(ONYXKEYS.ADD_NEW_COMPANY_CARD); const shouldUseAdvancedFields = addNewCard?.data?.useAdvancedFields ?? false; const companyCardLayoutName = addNewCard?.data?.companyCardLayoutName ?? ''; diff --git a/src/pages/workspace/companyCards/addNew/SelectBankStep.tsx b/src/pages/workspace/companyCards/addNew/SelectBankStep.tsx index 525abe53efe5..4e33e7f8d64c 100644 --- a/src/pages/workspace/companyCards/addNew/SelectBankStep.tsx +++ b/src/pages/workspace/companyCards/addNew/SelectBankStep.tsx @@ -1,4 +1,3 @@ -import {useRoute} from '@react-navigation/native'; import React, {useCallback, useMemo, useState} from 'react'; import {View} from 'react-native'; import type {ValueOf} from 'type-fest'; @@ -17,19 +16,14 @@ import useThemeIllustrations from '@hooks/useThemeIllustrations'; import useThemeStyles from '@hooks/useThemeStyles'; import {isUsingStagingApi} from '@libs/ApiUtils'; import {getBankCardDetailsImage, getCorrectStepForPlaidSelectedBank} from '@libs/CardUtils'; -import Navigation from '@navigation/Navigation'; -import type {PlatformStackRouteProp} from '@navigation/PlatformStackNavigation/types'; -import type {WorkspaceSplitNavigatorParamList} from '@navigation/types'; import variables from '@styles/variables'; import {setAddNewCompanyCardStepAndData} from '@userActions/CompanyCards'; import CONFIG from '@src/CONFIG'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import type SCREENS from '@src/SCREENS'; function SelectBankStep() { const {translate} = useLocalize(); - const route = useRoute>(); const styles = useThemeStyles(); const illustrations = useThemeIllustrations(); const companyCardBankIcons = useCompanyCardBankIcons(); @@ -58,10 +52,6 @@ function SelectBankStep() { }, [bankSelected, isOtherBankSelected]); const handleBackButtonPress = () => { - if (route?.params?.backTo) { - Navigation.navigate(route.params.backTo); - return; - } setAddNewCompanyCardStepAndData({step: CONST.COMPANY_CARDS.STEP.SELECT_FEED_TYPE, data: {selectedBank: null}}); }; diff --git a/src/pages/workspace/companyCards/addNew/SelectCountryStep.tsx b/src/pages/workspace/companyCards/addNew/SelectCountryStep.tsx index cfaa28fc5dc4..6de1917bfc9a 100644 --- a/src/pages/workspace/companyCards/addNew/SelectCountryStep.tsx +++ b/src/pages/workspace/companyCards/addNew/SelectCountryStep.tsx @@ -1,4 +1,3 @@ -import {useRoute} from '@react-navigation/native'; import React, {useState} from 'react'; import {View} from 'react-native'; import CollapsibleHeaderOnKeyboard from '@components/CollapsibleHeaderOnKeyboard'; @@ -20,13 +19,10 @@ import searchOptions from '@libs/searchOptions'; import moveInitialSelectionToTop from '@libs/SelectionListOrderUtils'; import StringUtils from '@libs/StringUtils'; import Navigation from '@navigation/Navigation'; -import type {PlatformStackRouteProp} from '@navigation/PlatformStackNavigation/types'; -import type {WorkspaceSplitNavigatorParamList} from '@navigation/types'; import {clearAddNewCardFlow, setAddNewCompanyCardStepAndData} from '@userActions/CompanyCards'; import CONST from '@src/CONST'; import type {TranslationPaths} from '@src/languages/types'; import ONYXKEYS from '@src/ONYXKEYS'; -import type SCREENS from '@src/SCREENS'; type CountryStepProps = { policyID?: string; @@ -34,7 +30,6 @@ type CountryStepProps = { function SelectCountryStep({policyID}: CountryStepProps) { const {translate} = useLocalize(); - const route = useRoute>(); const styles = useThemeStyles(); const policy = usePolicy(policyID); const {currencyList} = useCurrencyListState(); @@ -70,10 +65,6 @@ function SelectCountryStep({policyID}: CountryStepProps) { }; const handleBackButtonPress = () => { - if (route?.params?.backTo) { - Navigation.navigate(route.params.backTo); - return; - } Navigation.goBack(); }; diff --git a/src/pages/workspace/upgrade/WorkspaceUpgradePage.tsx b/src/pages/workspace/upgrade/WorkspaceUpgradePage.tsx index 4d625ae8aca7..5a9480fe74cc 100644 --- a/src/pages/workspace/upgrade/WorkspaceUpgradePage.tsx +++ b/src/pages/workspace/upgrade/WorkspaceUpgradePage.tsx @@ -13,6 +13,7 @@ import useThemeStyles from '@hooks/useThemeStyles'; import {updateQuickbooksOnlineSyncClasses, updateQuickbooksOnlineSyncCustomers, updateQuickbooksOnlineSyncLocations} from '@libs/actions/connections/QuickbooksOnline'; import {updateXeroMappings} from '@libs/actions/connections/Xero'; import {enablePolicyTravel} from '@libs/actions/Policy/Travel'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import Navigation from '@libs/Navigation/Navigation'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; @@ -38,7 +39,7 @@ import { upgradeToCorporate, } from '@src/libs/actions/Policy/Policy'; import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; +import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; import {ownerPoliciesSelector} from '@src/selectors/Policy'; import type {Policy} from '@src/types/onyx'; @@ -123,7 +124,7 @@ function WorkspaceUpgradePage({route}: WorkspaceUpgradePageProps) { } } case CONST.UPGRADE_FEATURE_INTRO_MAPPING.companyCards.id: - Navigation.navigate(ROUTES.WORKSPACE_COMPANY_CARDS_ADD_NEW.getRoute(policyID, ROUTES.WORKSPACE_COMPANY_CARDS_SELECT_FEED.getRoute(policyID))); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_COMPANY_CARDS_ADD_NEW.path, ROUTES.WORKSPACE_COMPANY_CARDS_SELECT_FEED.getRoute(policyID))); return; case CONST.UPGRADE_FEATURE_INTRO_MAPPING.rules.id: case CONST.UPGRADE_FEATURE_INTRO_MAPPING.perDiem.id: