diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 28d2b18b6a0f2..3cbf9794306bb 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -140,6 +140,22 @@ const DYNAMIC_ROUTES = { path: 'role', entryScreens: [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_INVITE_MESSAGE, SCREENS.WORKSPACE.COMPANY_CARDS_ASSIGN_CARD_INVITE_NEW_MEMBER, SCREENS.WORKSPACE.EXPENSIFY_CARD_ISSUE_NEW], }, + WORKSPACE_EXPENSIFY_CARD_LIMIT_TYPE: { + path: 'edit/limit-type', + entryScreens: [SCREENS.WORKSPACE.EXPENSIFY_CARD_DETAILS], + }, + WORKSPACE_EXPENSIFY_CARD_SETTINGS_ACCOUNT: { + path: 'settings-account', + entryScreens: [SCREENS.WORKSPACE.EXPENSIFY_CARD_SETTINGS, SCREENS.WORKSPACE.ACCOUNTING.RECONCILIATION_ACCOUNT_SETTINGS], + }, + WORKSPACE_EXPENSIFY_CARD_SELECT_FEED: { + path: 'select-feed', + entryScreens: [SCREENS.WORKSPACE.EXPENSIFY_CARD], + }, + WORKSPACE_EXPENSIFY_CARD_ISSUE_NEW_CONFIRM_MAGIC_CODE: { + path: 'confirm-magic-code', + entryScreens: [SCREENS.WORKSPACE.EXPENSIFY_CARD_ISSUE_NEW], + }, KEYBOARD_SHORTCUTS: { path: 'keyboard-shortcuts', entryScreens: ['*'], @@ -2648,12 +2664,6 @@ const ROUTES = { // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, cardID: string, backTo?: string) => getUrlWithBackToParam(`settings/${policyID}/expensify-card/${cardID}/edit/limit`, backTo), }, - WORKSPACE_EXPENSIFY_CARD_LIMIT_TYPE: { - route: 'workspaces/:policyID/expensify-card/:cardID/edit/limit-type', - - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation - getRoute: (policyID: string, cardID: string, backTo?: string) => getUrlWithBackToParam(`workspaces/${policyID}/expensify-card/${cardID}/edit/limit-type`, backTo), - }, EXPENSIFY_CARD_LIMIT_TYPE: { route: 'settings/:policyID/expensify-card/:cardID/edit/limit-type', @@ -2678,12 +2688,6 @@ const ROUTES = { // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, backTo?: string) => getUrlWithBackToParam(`workspaces/${policyID}/expensify-card/issue-new`, backTo), }, - WORKSPACE_EXPENSIFY_CARD_ISSUE_NEW_CONFIRM_MAGIC_CODE: { - route: 'workspaces/:policyID/expensify-card/issue-new/confirm-magic-code', - - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation - getRoute: (policyID: string, backTo?: string) => getUrlWithBackToParam(`workspaces/${policyID}/expensify-card/issue-new/confirm-magic-code`, backTo), - }, WORKSPACE_EXPENSIFY_CARD_BANK_ACCOUNT: { route: 'workspaces/:policyID/expensify-card/choose-bank-account', getRoute: (policyID: string | undefined) => { @@ -2697,18 +2701,6 @@ const ROUTES = { route: 'workspaces/:policyID/expensify-card/settings', getRoute: (policyID: string) => `workspaces/${policyID}/expensify-card/settings` as const, }, - WORKSPACE_EXPENSIFY_CARD_SETTINGS_ACCOUNT: { - route: 'workspaces/:policyID/expensify-card/settings/account', - - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation - getRoute: (policyID: string, backTo?: string) => getUrlWithBackToParam(`workspaces/${policyID}/expensify-card/settings/account`, backTo), - }, - WORKSPACE_EXPENSIFY_CARD_SELECT_FEED: { - route: 'workspaces/:policyID/expensify-card/select-feed', - - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation - getRoute: (policyID: string, backTo?: string) => getUrlWithBackToParam(`workspaces/${policyID}/expensify-card/select-feed`, backTo), - }, WORKSPACE_EXPENSIFY_CARD_SETTINGS_FREQUENCY: { route: 'workspaces/:policyID/expensify-card/settings/frequency', getRoute: (policyID: string) => `workspaces/${policyID}/expensify-card/settings/frequency` as const, diff --git a/src/SCREENS.ts b/src/SCREENS.ts index 0b34df90b022d..43b8de72c081a 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -689,13 +689,13 @@ const SCREENS = { EXPENSIFY_CARD_DETAILS: 'Workspace_ExpensifyCard_Details', EXPENSIFY_CARD_LIMIT: 'Workspace_ExpensifyCard_Limit', EXPENSIFY_CARD_ISSUE_NEW: 'Workspace_ExpensifyCard_New', - EXPENSIFY_CARD_ISSUE_NEW_CONFIRM_MAGIC_CODE: 'Workspace_ExpensifyCard_New_Confirm_Magic_Code', + DYNAMIC_WORKSPACE_EXPENSIFY_CARD_ISSUE_NEW_CONFIRM_MAGIC_CODE: 'Dynamic_Workspace_ExpensifyCard_IssueNew_ConfirmMagicCode', EXPENSIFY_CARD_NAME: 'Workspace_ExpensifyCard_Name', - EXPENSIFY_CARD_SELECT_FEED: 'Workspace_ExpensifyCard_Select_Feed', - EXPENSIFY_CARD_LIMIT_TYPE: 'Workspace_ExpensifyCard_LimitType', + DYNAMIC_WORKSPACE_EXPENSIFY_CARD_SELECT_FEED: 'Dynamic_Workspace_ExpensifyCard_Select_Feed', + DYNAMIC_WORKSPACE_EXPENSIFY_CARD_LIMIT_TYPE: 'Dynamic_Workspace_ExpensifyCard_LimitType', EXPENSIFY_CARD_BANK_ACCOUNT: 'Workspace_ExpensifyCard_BankAccount', EXPENSIFY_CARD_SETTINGS: 'Workspace_ExpensifyCard_Settings', - EXPENSIFY_CARD_SETTINGS_ACCOUNT: 'Workspace_ExpensifyCard_Settings_Account', + DYNAMIC_WORKSPACE_EXPENSIFY_CARD_SETTINGS_ACCOUNT: 'Dynamic_Workspace_ExpensifyCard_Settings_Account', EXPENSIFY_CARD_SETTINGS_FREQUENCY: 'Workspace_ExpensifyCard_Settings_Frequency', INVOICES: 'Workspace_Invoices', INVOICES_VERIFY_ACCOUNT: 'Workspace_Invoices_Verify_Account', diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx index e7a413775309a..5884fa729fac4 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx @@ -816,21 +816,23 @@ const SettingsModalStackNavigator = createModalStackNavigator('../../../../pages/workspace/companyCards/WorkspaceCompanyCardEditTransactionStartDatePage').default, [SCREENS.WORKSPACE.COMPANY_CARD_EXPORT]: () => require('../../../../pages/workspace/companyCards/WorkspaceCompanyCardAccountSelectCardPage').default, [SCREENS.WORKSPACE.EXPENSIFY_CARD_ISSUE_NEW]: () => require('../../../../pages/workspace/expensifyCard/issueNew/IssueNewCardPage').default, - [SCREENS.WORKSPACE.EXPENSIFY_CARD_ISSUE_NEW_CONFIRM_MAGIC_CODE]: () => + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_EXPENSIFY_CARD_ISSUE_NEW_CONFIRM_MAGIC_CODE]: () => require('../../../../pages/workspace/expensifyCard/issueNew/IssueNewCardConfirmMagicCodePage').default, [SCREENS.WORKSPACE.EXPENSIFY_CARD_SETTINGS]: () => require('../../../../pages/workspace/expensifyCard/WorkspaceCardSettingsPage').default, - [SCREENS.WORKSPACE.EXPENSIFY_CARD_SETTINGS_ACCOUNT]: () => require('../../../../pages/workspace/expensifyCard/WorkspaceSettlementAccountPage').default, + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_EXPENSIFY_CARD_SETTINGS_ACCOUNT]: () => + require('../../../../pages/workspace/expensifyCard/DynamicWorkspaceSettlementAccountPage').default, [SCREENS.WORKSPACE.EXPENSIFY_CARD_SETTINGS_FREQUENCY]: () => require('../../../../pages/workspace/expensifyCard/WorkspaceSettlementFrequencyPage').default, [SCREENS.WORKSPACE.TRAVEL_SETTINGS_ACCOUNT]: () => require('../../../../pages/workspace/travel/WorkspaceTravelInvoicingSettlementAccountPage').default, [SCREENS.WORKSPACE.TRAVEL_SETTINGS_FREQUENCY]: () => require('../../../../pages/workspace/travel/WorkspaceTravelInvoicingSettlementFrequencyPage').default, [SCREENS.WORKSPACE.TRAVEL_EXPORT]: () => require('../../../../pages/workspace/travel/WorkspaceTravelInvoicingExportPage').default, [SCREENS.WORKSPACE.TRAVEL_MISSING_PERSONAL_DETAILS]: () => require('../../../../pages/Travel/TravelLegalNamePage').default, - [SCREENS.WORKSPACE.EXPENSIFY_CARD_SELECT_FEED]: () => require('../../../../pages/workspace/expensifyCard/WorkspaceExpensifyCardSelectorPage').default, + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_EXPENSIFY_CARD_SELECT_FEED]: () => + require('../../../../pages/workspace/expensifyCard/WorkspaceExpensifyCardSelectorPage').default, [SCREENS.WORKSPACE.EXPENSIFY_CARD_BANK_ACCOUNT]: () => require('../../../../pages/workspace/expensifyCard/WorkspaceExpensifyCardBankAccounts').default, [SCREENS.WORKSPACE.EXPENSIFY_CARD_DETAILS]: () => require('../../../../pages/workspace/expensifyCard/WorkspaceExpensifyCardDetailsPage').default, [SCREENS.WORKSPACE.EXPENSIFY_CARD_NAME]: () => require('../../../../pages/workspace/expensifyCard/WorkspaceEditCardNamePage').default, [SCREENS.WORKSPACE.EXPENSIFY_CARD_LIMIT]: () => require('../../../../pages/workspace/expensifyCard/WorkspaceEditCardLimitPage').default, - [SCREENS.WORKSPACE.EXPENSIFY_CARD_LIMIT_TYPE]: () => require('../../../../pages/workspace/expensifyCard/WorkspaceEditCardLimitTypePage').default, + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_EXPENSIFY_CARD_LIMIT_TYPE]: () => require('../../../../pages/workspace/expensifyCard/WorkspaceEditCardLimitTypePage').default, [SCREENS.WORKSPACE.COMPANY_CARDS_SETTINGS]: () => require('../../../../pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage').default, [SCREENS.WORKSPACE.COMPANY_CARDS_SETTINGS_FEED_NAME]: () => require('../../../../pages/workspace/companyCards/WorkspaceCompanyCardsSettingsFeedNamePage').default, [SCREENS.WORKSPACE.COMPANY_CARDS_SETTINGS_STATEMENT_CLOSE_DATE]: () => diff --git a/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts b/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts index 97d78694d8818..0d71d8421404f 100755 --- a/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts +++ b/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts @@ -274,16 +274,16 @@ const WORKSPACE_TO_RHP: Partial['config'] = { [SCREENS.WORKSPACE.EXPENSIFY_CARD_ISSUE_NEW]: { path: ROUTES.WORKSPACE_EXPENSIFY_CARD_ISSUE_NEW.route, }, - [SCREENS.WORKSPACE.EXPENSIFY_CARD_ISSUE_NEW_CONFIRM_MAGIC_CODE]: { - path: ROUTES.WORKSPACE_EXPENSIFY_CARD_ISSUE_NEW_CONFIRM_MAGIC_CODE.route, - }, + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_EXPENSIFY_CARD_ISSUE_NEW_CONFIRM_MAGIC_CODE]: DYNAMIC_ROUTES.WORKSPACE_EXPENSIFY_CARD_ISSUE_NEW_CONFIRM_MAGIC_CODE.path, [SCREENS.WORKSPACE.EXPENSIFY_CARD_NAME]: { path: ROUTES.WORKSPACE_EXPENSIFY_CARD_NAME.route, }, - [SCREENS.WORKSPACE.EXPENSIFY_CARD_LIMIT_TYPE]: { - path: ROUTES.WORKSPACE_EXPENSIFY_CARD_LIMIT_TYPE.route, - }, + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_EXPENSIFY_CARD_LIMIT_TYPE]: DYNAMIC_ROUTES.WORKSPACE_EXPENSIFY_CARD_LIMIT_TYPE.path, [SCREENS.WORKSPACE.EXPENSIFY_CARD_BANK_ACCOUNT]: { path: ROUTES.WORKSPACE_EXPENSIFY_CARD_BANK_ACCOUNT.route, }, @@ -847,12 +843,9 @@ const config: LinkingOptions['config'] = { [SCREENS.WORKSPACE.EXPENSIFY_CARD_SETTINGS_FREQUENCY]: { path: ROUTES.WORKSPACE_EXPENSIFY_CARD_SETTINGS_FREQUENCY.route, }, - [SCREENS.WORKSPACE.EXPENSIFY_CARD_SETTINGS_ACCOUNT]: { - path: ROUTES.WORKSPACE_EXPENSIFY_CARD_SETTINGS_ACCOUNT.route, - }, - [SCREENS.WORKSPACE.EXPENSIFY_CARD_SELECT_FEED]: { - path: ROUTES.WORKSPACE_EXPENSIFY_CARD_SELECT_FEED.route, - }, + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_EXPENSIFY_CARD_SETTINGS_ACCOUNT]: DYNAMIC_ROUTES.WORKSPACE_EXPENSIFY_CARD_SETTINGS_ACCOUNT.path, + + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_EXPENSIFY_CARD_SELECT_FEED]: DYNAMIC_ROUTES.WORKSPACE_EXPENSIFY_CARD_SELECT_FEED.path, [SCREENS.WORKSPACE.TRAVEL_SETTINGS_ACCOUNT]: { path: ROUTES.WORKSPACE_TRAVEL_SETTINGS_ACCOUNT.route, }, diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index 8c66f0f224b35..02656c42225f1 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -1271,7 +1271,7 @@ type SettingsNavigatorParamList = { // 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.EXPENSIFY_CARD_ISSUE_NEW_CONFIRM_MAGIC_CODE]: { + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_EXPENSIFY_CARD_ISSUE_NEW_CONFIRM_MAGIC_CODE]: { 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; @@ -1282,10 +1282,11 @@ type SettingsNavigatorParamList = { [SCREENS.WORKSPACE.EXPENSIFY_CARD_SETTINGS]: { policyID: string; }; - [SCREENS.WORKSPACE.EXPENSIFY_CARD_SETTINGS_ACCOUNT]: { + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_EXPENSIFY_CARD_SETTINGS_ACCOUNT]: { + policyID: string; + }; + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_EXPENSIFY_CARD_SELECT_FEED]: { 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.EXPENSIFY_CARD_SETTINGS_FREQUENCY]: { policyID: string; @@ -1390,7 +1391,7 @@ type SettingsNavigatorParamList = { // 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.EXPENSIFY_CARD_LIMIT_TYPE]: { + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_EXPENSIFY_CARD_LIMIT_TYPE]: { policyID: string; cardID: 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 diff --git a/src/pages/workspace/accounting/reconciliation/ReconciliationAccountSettingsPage.tsx b/src/pages/workspace/accounting/reconciliation/ReconciliationAccountSettingsPage.tsx index 517506ed80e1f..8f370815ec5e5 100644 --- a/src/pages/workspace/accounting/reconciliation/ReconciliationAccountSettingsPage.tsx +++ b/src/pages/workspace/accounting/reconciliation/ReconciliationAccountSettingsPage.tsx @@ -14,6 +14,7 @@ import {getConnectionNameFromRouteParam} from '@libs/AccountingUtils'; import {getLastFourDigits} from '@libs/BankAccountUtils'; import {getCardProgramKey, getCardSettings, getEligibleBankAccountsForCard} from '@libs/CardUtils'; import Log from '@libs/Log'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; import {getDomainNameForPolicy} from '@libs/PolicyUtils'; import Navigation from '@navigation/Navigation'; @@ -21,7 +22,7 @@ import type {SettingsNavigatorParamList} from '@navigation/types'; import {updateSettlementAccount} from '@userActions/Card'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; +import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; import type {Route} from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; @@ -101,7 +102,7 @@ function ReconciliationAccountSettingsPage({route}: ReconciliationAccountSetting diff --git a/src/pages/workspace/expensifyCard/WorkspaceSettlementAccountPage.tsx b/src/pages/workspace/expensifyCard/DynamicWorkspaceSettlementAccountPage.tsx similarity index 93% rename from src/pages/workspace/expensifyCard/WorkspaceSettlementAccountPage.tsx rename to src/pages/workspace/expensifyCard/DynamicWorkspaceSettlementAccountPage.tsx index c9406a46f5c6a..5ee21c0b19d8f 100644 --- a/src/pages/workspace/expensifyCard/WorkspaceSettlementAccountPage.tsx +++ b/src/pages/workspace/expensifyCard/DynamicWorkspaceSettlementAccountPage.tsx @@ -7,6 +7,7 @@ import SettlementAccountSelector, {BankAccountListItemLeftElement} from '@compon import type {BankAccountListItem} from '@components/SettlementAccountSelector'; import Text from '@components/Text'; import useDefaultFundID from '@hooks/useDefaultFundID'; +import useDynamicBackPath from '@hooks/useDynamicBackPath'; import useEnvironment from '@hooks/useEnvironment'; import useExpensifyCardUkEuSupported from '@hooks/useExpensifyCardUkEuSupported'; import useLocalize from '@hooks/useLocalize'; @@ -25,23 +26,24 @@ import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper'; import {updateSettlementAccount as updateSettlementAccountCard} from '@userActions/Card'; 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 {BankName} from '@src/types/onyx/Bank'; import type {ConnectionName} from '@src/types/onyx/Policy'; -type WorkspaceSettlementAccountPageProps = PlatformStackScreenProps; +type WorkspaceSettlementAccountPageProps = PlatformStackScreenProps; /** * Settlement account selection page for Expensify Card. * Uses the SettlementAccountSelector component for the selection UI. */ -function WorkspaceSettlementAccountPage({route}: WorkspaceSettlementAccountPageProps) { +function DynamicWorkspaceSettlementAccountPage({route}: WorkspaceSettlementAccountPageProps) { const styles = useThemeStyles(); const {translate} = useLocalize(); const {environmentURL} = useEnvironment(); const policyID = route.params?.policyID; const defaultFundID = useDefaultFundID(policyID); + const backPath = useDynamicBackPath(DYNAMIC_ROUTES.WORKSPACE_EXPENSIFY_CARD_SETTINGS_ACCOUNT.path); const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`); const [bankAccountsList] = useOnyx(ONYXKEYS.BANK_ACCOUNT_LIST); @@ -153,11 +155,7 @@ function WorkspaceSettlementAccountPage({route}: WorkspaceSettlementAccountPageP { - if (route.params && 'backTo' in route.params && route.params.backTo) { - Navigation.goBack(route.params.backTo); - return; - } - Navigation.goBack(ROUTES.WORKSPACE_EXPENSIFY_CARD_SETTINGS.getRoute(policyID)); + Navigation.goBack(backPath); }} /> ; @@ -62,7 +63,7 @@ function WorkspaceCardSettingsPage({route}: WorkspaceCardSettingsPageProps) { description={translate('workspace.expensifyCard.settlementAccount')} title={bankAccountNumber ? `${CONST.MASKED_PAN_PREFIX}${getLastFourDigits(bankAccountNumber)}` : ''} shouldShowRightIcon - onPress={() => Navigation.navigate(ROUTES.WORKSPACE_EXPENSIFY_CARD_SETTINGS_ACCOUNT.getRoute(policyID, Navigation.getActiveRoute()))} + onPress={() => Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_EXPENSIFY_CARD_SETTINGS_ACCOUNT.path))} /> diff --git a/src/pages/workspace/expensifyCard/WorkspaceEditCardLimitTypePage.tsx b/src/pages/workspace/expensifyCard/WorkspaceEditCardLimitTypePage.tsx index 7bff8634a265d..1e42cf02419a8 100644 --- a/src/pages/workspace/expensifyCard/WorkspaceEditCardLimitTypePage.tsx +++ b/src/pages/workspace/expensifyCard/WorkspaceEditCardLimitTypePage.tsx @@ -15,6 +15,7 @@ import Text from '@components/Text'; import ValuePicker from '@components/ValuePicker'; import useCurrencyForExpensifyCard from '@hooks/useCurrencyForExpensifyCard'; import useDefaultFundID from '@hooks/useDefaultFundID'; +import useDynamicBackPath from '@hooks/useDynamicBackPath'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; import usePermissions from '@hooks/usePermissions'; @@ -33,14 +34,14 @@ import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper'; import ToggleSettingOptionRow from '@pages/workspace/workflows/ToggleSettingsOptionRow'; 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 INPUT_IDS from '@src/types/form/EditExpensifyCardLimitTypeForm'; import type {CardLimitType} from '@src/types/onyx/Card'; type WorkspaceEditCardLimitTypePageProps = PlatformStackScreenProps< SettingsNavigatorParamList, - typeof SCREENS.WORKSPACE.EXPENSIFY_CARD_LIMIT_TYPE | typeof SCREENS.EXPENSIFY_CARD.EXPENSIFY_CARD_LIMIT_TYPE + typeof SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_EXPENSIFY_CARD_LIMIT_TYPE | typeof SCREENS.EXPENSIFY_CARD.EXPENSIFY_CARD_LIMIT_TYPE >; function WorkspaceEditCardLimitTypePage({route}: WorkspaceEditCardLimitTypePageProps) { @@ -69,7 +70,8 @@ function WorkspaceEditCardLimitTypePage({route}: WorkspaceEditCardLimitTypePageP const [expirationToggle, setExpirationToggle] = useState(!!card?.nameValuePairs?.validFrom); const currency = useCurrencyForExpensifyCard({policyID}); - const isWorkspaceRhp = route.name === SCREENS.WORKSPACE.EXPENSIFY_CARD_LIMIT_TYPE; + const isWorkspaceRhp = route.name === SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_EXPENSIFY_CARD_LIMIT_TYPE; + const backPath = useDynamicBackPath(DYNAMIC_ROUTES.WORKSPACE_EXPENSIFY_CARD_LIMIT_TYPE.path); const personalDetails = usePersonalDetails(); @@ -100,11 +102,17 @@ function WorkspaceEditCardLimitTypePage({route}: WorkspaceEditCardLimitTypePageP }, [card?.nameValuePairs?.validThru, assigneeTimeZone]); const goBack = () => { + if (isWorkspaceRhp) { + Navigation.goBack(backPath); + return; + } + if (backTo) { Navigation.goBack(backTo); return; } - Navigation.goBack(isWorkspaceRhp ? ROUTES.WORKSPACE_EXPENSIFY_CARD_DETAILS.getRoute(policyID, cardID) : ROUTES.EXPENSIFY_CARD_DETAILS.getRoute(policyID, cardID)); + + Navigation.goBack(ROUTES.EXPENSIFY_CARD_DETAILS.getRoute(policyID, cardID)); }; const fetchCardLimitTypeData = () => { diff --git a/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardDetailsPage.tsx b/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardDetailsPage.tsx index d7d11a9f0a9b3..9066d5f53b2a6 100644 --- a/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardDetailsPage.tsx +++ b/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardDetailsPage.tsx @@ -28,6 +28,7 @@ import useStyleUtils from '@hooks/useStyleUtils'; import useThemeStyles from '@hooks/useThemeStyles'; import {getAllCardsForWorkspace, getCardHintText, getTranslationKeyForLimitType, isCardFrozen, maskCard} from '@libs/CardUtils'; import {convertToDisplayString} from '@libs/CurrencyUtils'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; import {getDisplayNameOrDefault} from '@libs/PersonalDetailsUtils'; @@ -40,7 +41,7 @@ import variables from '@styles/variables'; import {deactivateCard as deactivateCardAction, freezeCard as freezeCardAction, openCardDetailsPage, unfreezeCard as unfreezeCardAction} from '@userActions/Card'; 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 isLoadingOnyxValue from '@src/types/utils/isLoadingOnyxValue'; @@ -262,7 +263,7 @@ function WorkspaceExpensifyCardDetailsPage({route}: WorkspaceExpensifyCardDetail onPress={() => Navigation.navigate( isWorkspaceCardRhp - ? ROUTES.WORKSPACE_EXPENSIFY_CARD_LIMIT_TYPE.getRoute(policyID, cardID, Navigation.getActiveRoute()) + ? createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_EXPENSIFY_CARD_LIMIT_TYPE.path) : ROUTES.EXPENSIFY_CARD_LIMIT_TYPE.getRoute(policyID, cardID, Navigation.getActiveRoute()), ) } diff --git a/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardListPage.tsx b/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardListPage.tsx index f4a6c8c8b5b46..a666f75c3bd85 100644 --- a/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardListPage.tsx +++ b/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardListPage.tsx @@ -32,6 +32,7 @@ import useWindowDimensions from '@hooks/useWindowDimensions'; import {clearIssueNewCardFormData, setIssueNewCardStepAndData} from '@libs/actions/Card'; import {clearDeletePaymentMethodError} from '@libs/actions/PaymentMethods'; import {filterCardsByPersonalDetails, getCardsByCardholderName, getCardSettings, sortCardsByCardholderName} from '@libs/CardUtils'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import type {PlatformStackRouteProp} from '@libs/Navigation/PlatformStackNavigation/types'; import {getDisplayNameOrDefault} from '@libs/PersonalDetailsUtils'; import {getDescriptionForPolicyDomainCard, getMemberAccountIDsForWorkspace} from '@libs/PolicyUtils'; @@ -39,7 +40,7 @@ import Navigation from '@navigation/Navigation'; import type {WorkspaceSplitNavigatorParamList} from '@navigation/types'; 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 {Card, WorkspaceCardsList} from '@src/types/onyx'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; @@ -253,7 +254,7 @@ function WorkspaceExpensifyCardListPage({route, cardsList, fundID}: WorkspaceExp {shouldShowSelector && ( Navigation.navigate(ROUTES.WORKSPACE_EXPENSIFY_CARD_SELECT_FEED.getRoute(policyID))} + onFeedSelect={() => Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_EXPENSIFY_CARD_SELECT_FEED.path))} CardFeedIcon={cardFeedIcon} feedName={translate('workspace.common.expensifyCard')} supportingText={getDescriptionForPolicyDomainCard(settings?.domainName ?? '', policyCollection)} diff --git a/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardSelectorPage.tsx b/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardSelectorPage.tsx index 341025219486d..cb992b357f950 100644 --- a/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardSelectorPage.tsx +++ b/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardSelectorPage.tsx @@ -30,7 +30,7 @@ type ExpensifyFeedListItem = ListItem & { value: number; }; -type WorkspaceExpensifyCardSelectorPageProps = PlatformStackScreenProps; +type WorkspaceExpensifyCardSelectorPageProps = PlatformStackScreenProps; function WorkspaceExpensifyCardSelectorPage({route}: WorkspaceExpensifyCardSelectorPageProps) { const {policyID} = route.params; diff --git a/src/pages/workspace/expensifyCard/issueNew/ConfirmationStep.tsx b/src/pages/workspace/expensifyCard/issueNew/ConfirmationStep.tsx index 5a6c1516abd1a..c805aed2dfcad 100644 --- a/src/pages/workspace/expensifyCard/issueNew/ConfirmationStep.tsx +++ b/src/pages/workspace/expensifyCard/issueNew/ConfirmationStep.tsx @@ -19,11 +19,11 @@ import {getTranslationKeyForLimitType} from '@libs/CardUtils'; import {convertToShortDisplayString} from '@libs/CurrencyUtils'; import {getLatestErrorMessage} from '@libs/ErrorUtils'; import {getUserNameByEmail} from '@libs/PersonalDetailsUtils'; +import createDynamicRoute from '@navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import Navigation from '@navigation/Navigation'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import type {Route} from '@src/ROUTES'; -import ROUTES from '@src/ROUTES'; +import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; import type {IssueNewCardStep} from '@src/types/onyx/Card'; type ConfirmationStepProps = { @@ -35,12 +35,9 @@ type ConfirmationStepProps = { /** Start from step index */ startStepIndex: number; - - /** Back to route to pass to confirm magic code page */ - backTo?: Route; }; -function ConfirmationStep({policyID, stepNames, startStepIndex, backTo}: ConfirmationStepProps) { +function ConfirmationStep({policyID, stepNames, startStepIndex}: ConfirmationStepProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); const {isOffline} = useNetwork(); @@ -86,7 +83,7 @@ function ConfirmationStep({policyID, stepNames, startStepIndex, backTo}: Confirm // Redirect to the magic code page when there is an error with the user's validateCode authentication if (errorMessage.toLowerCase().includes('request a new code')) { clearIssueNewCardError(policyID); - Navigation.navigate(ROUTES.WORKSPACE_EXPENSIFY_CARD_ISSUE_NEW_CONFIRM_MAGIC_CODE.getRoute(policyID, ROUTES.WORKSPACE_EXPENSIFY_CARD.getRoute(policyID))); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_EXPENSIFY_CARD_ISSUE_NEW_CONFIRM_MAGIC_CODE.path)); } } }, [issueNewCard, isSuccessful, policyID]); @@ -102,9 +99,9 @@ function ConfirmationStep({policyID, stepNames, startStepIndex, backTo}: Confirm issueExpensifyCard(defaultFundID, policyID, isBetaEnabled(CONST.BETAS.EXPENSIFY_CARD_EU_UK) ? '' : CONST.COUNTRY.US, '', assigneeTimeZone, data); } else { // Navigate to magic code page - Navigation.navigate(ROUTES.WORKSPACE_EXPENSIFY_CARD_ISSUE_NEW_CONFIRM_MAGIC_CODE.getRoute(policyID, backTo)); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_EXPENSIFY_CARD_ISSUE_NEW_CONFIRM_MAGIC_CODE.path)); } - }, [policyID, data, account, defaultFundID, isBetaEnabled, backTo, assigneeTimeZone]); + }, [policyID, data, account, defaultFundID, isBetaEnabled, assigneeTimeZone]); const errorMessage = getLatestErrorMessage(issueNewCard) || (shouldDisableSubmitButton ? translate('workspace.card.issueNewCard.disabledApprovalForSmartLimitError') : ''); diff --git a/src/pages/workspace/expensifyCard/issueNew/IssueNewCardConfirmMagicCodePage.tsx b/src/pages/workspace/expensifyCard/issueNew/IssueNewCardConfirmMagicCodePage.tsx index 242fc4626e023..4701ac752d068 100644 --- a/src/pages/workspace/expensifyCard/issueNew/IssueNewCardConfirmMagicCodePage.tsx +++ b/src/pages/workspace/expensifyCard/issueNew/IssueNewCardConfirmMagicCodePage.tsx @@ -2,6 +2,7 @@ import React, {useCallback, useEffect} from 'react'; import {usePersonalDetails} from '@components/OnyxListItemProvider'; import ValidateCodeActionContent from '@components/ValidateCodeActionModal/ValidateCodeActionContent'; import useDefaultFundID from '@hooks/useDefaultFundID'; +import useDynamicBackPath from '@hooks/useDynamicBackPath'; import useInitial from '@hooks/useInitial'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; @@ -14,10 +15,10 @@ import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavig import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; 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'; -type IssueNewCardConfirmMagicCodePageProps = PlatformStackScreenProps; +type IssueNewCardConfirmMagicCodePageProps = PlatformStackScreenProps; function IssueNewCardConfirmMagicCodePage({route}: IssueNewCardConfirmMagicCodePageProps) { const {translate} = useLocalize(); @@ -37,6 +38,7 @@ function IssueNewCardConfirmMagicCodePage({route}: IssueNewCardConfirmMagicCodeP const personalDetails = usePersonalDetails(); const assigneePersonalDetails = Object.values(personalDetails ?? {}).find((detail) => detail?.login === data?.assigneeEmail); const assigneeTimeZone = assigneePersonalDetails?.timezone?.selected; + const backPath = useDynamicBackPath(DYNAMIC_ROUTES.WORKSPACE_EXPENSIFY_CARD_ISSUE_NEW_CONFIRM_MAGIC_CODE.path); useEffect(() => { if (!isSuccessful) { @@ -61,8 +63,8 @@ function IssueNewCardConfirmMagicCodePage({route}: IssueNewCardConfirmMagicCodeP const handleClose = useCallback(() => { resetValidateActionCodeSent(); - Navigation.goBack(ROUTES.WORKSPACE_EXPENSIFY_CARD_ISSUE_NEW.getRoute(policyID, backTo)); - }, [policyID, backTo]); + Navigation.goBack(backPath); + }, [backPath]); return ( ); case CONST.EXPENSIFY_CARD.STEP.INVITE_NEW_MEMBER: