diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 8ae64484e922..28d2b18b6a0f 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -124,6 +124,22 @@ const DYNAMIC_ROUTES = { getRoute: (country = '') => `country?country=${country}`, queryParams: ['country'], }, + WORKSPACE_OVERVIEW_PLAN: { + path: 'plan', + entryScreens: [SCREENS.WORKSPACE.PROFILE], + }, + WORKSPACE_INVITE: { + path: 'invite', + entryScreens: [SCREENS.WORKSPACE.PROFILE, SCREENS.WORKSPACE.MEMBERS], + }, + WORKSPACE_INVITE_MESSAGE: { + path: 'invite-message', + entryScreens: [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_INVITE], + }, + WORKSPACE_INVITE_MESSAGE_ROLE: { + path: 'role', + entryScreens: [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_INVITE_MESSAGE, SCREENS.WORKSPACE.COMPANY_CARDS_ASSIGN_CARD_INVITE_NEW_MEMBER, SCREENS.WORKSPACE.EXPENSIFY_CARD_ISSUE_NEW], + }, KEYBOARD_SHORTCUTS: { path: 'keyboard-shortcuts', entryScreens: ['*'], @@ -1625,24 +1641,6 @@ const ROUTES = { return `${getUrlWithBackToParam(`workspaces/${policyID}`, backTo)}` as const; }, }, - WORKSPACE_INVITE: { - route: 'workspaces/:policyID/invite', - - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation - getRoute: (policyID: string, backTo?: string) => `${getUrlWithBackToParam(`workspaces/${policyID}/invite`, backTo)}` as const, - }, - WORKSPACE_INVITE_MESSAGE: { - route: 'workspaces/:policyID/invite-message', - - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation - getRoute: (policyID: string, backTo?: string) => `${getUrlWithBackToParam(`workspaces/${policyID}/invite-message`, backTo)}` as const, - }, - WORKSPACE_INVITE_MESSAGE_ROLE: { - route: 'workspaces/:policyID/invite-message/role', - - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation - getRoute: (policyID: string, backTo?: string) => `${getUrlWithBackToParam(`workspaces/${policyID}/invite-message/role`, backTo)}` as const, - }, WORKSPACE_INVITE_MESSAGE_APPROVER: { route: 'workspaces/:policyID/invite-message/approver', @@ -1671,12 +1669,6 @@ const ROUTES = { return getUrlWithBackToParam(`workspaces/${policyID}/overview/address` as const, backTo); }, }, - WORKSPACE_OVERVIEW_PLAN: { - route: 'workspaces/:policyID/overview/plan', - - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation - getRoute: (policyID: string, backTo?: string) => getUrlWithBackToParam(`workspaces/${policyID}/overview/plan` as const, backTo), - }, WORKSPACE_ACCOUNTING: { route: 'workspaces/:policyID/accounting', getRoute: (policyID: string) => `workspaces/${policyID}/accounting` as const, diff --git a/src/SCREENS.ts b/src/SCREENS.ts index 25ab65497427..0b34df90b022 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -705,9 +705,9 @@ const SCREENS = { MEMBERS_IMPORT: 'Members_Import', MEMBERS_IMPORTED: 'Members_Imported', MEMBERS_IMPORTED_CONFIRMATION: 'Members_Imported_Confirmation', - INVITE: 'Workspace_Invite', - INVITE_MESSAGE: 'Workspace_Invite_Message', - INVITE_MESSAGE_ROLE: 'Workspace_Invite_Message_Role', + DYNAMIC_WORKSPACE_INVITE: 'Dynamic_Workspace_Invite', + DYNAMIC_WORKSPACE_INVITE_MESSAGE: 'Dynamic_Workspace_Invite_Message', + DYNAMIC_WORKSPACE_INVITE_MESSAGE_ROLE: 'Dynamic_Workspace_Invite_Message_Role', INVITE_MESSAGE_APPROVER: 'Workspace_Invite_Message_Approver', CATEGORIES: 'Workspace_Categories', TAGS: 'Workspace_Tags', @@ -744,7 +744,7 @@ const SCREENS = { TAG_GL_CODE: 'Tag_GL_Code', CURRENCY: 'Workspace_Overview_Currency', ADDRESS: 'Workspace_Overview_Address', - PLAN: 'Workspace_Overview_Plan_Type', + DYNAMIC_WORKSPACE_OVERVIEW_PLAN: 'Dynamic_Workspace_Overview_Plan_Type', WORKFLOWS: 'Workspace_Workflows', WORKFLOWS_PAYER: 'Workspace_Workflows_Payer', WORKFLOWS_APPROVALS_NEW: 'Workspace_Approvals_New', diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx index d8f765bcb46b..e7a413775309 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx @@ -483,7 +483,7 @@ const SettingsModalStackNavigator = createModalStackNavigator require('../../../../pages/settings/Subscription/RequestEarlyCancellationPage').default, [SCREENS.SETTINGS.SUBSCRIPTION.SUBSCRIPTION_DOWNGRADE_BLOCKED]: () => require('../../../../pages/settings/Subscription/SubscriptionPlan/SubscriptionPlanDowngradeBlockedPage').default, - [SCREENS.WORKSPACE.INVITE]: () => require('../../../../pages/workspace/WorkspaceInvitePage').default, + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_INVITE]: () => require('../../../../pages/workspace/DynamicWorkspaceInvitePage').default, [SCREENS.WORKSPACE.MEMBERS_IMPORT]: () => require('../../../../pages/workspace/members/ImportMembersPage').default, [SCREENS.WORKSPACE.MEMBERS_IMPORTED]: () => require('../../../../pages/workspace/members/ImportedMembersPage').default, [SCREENS.WORKSPACE.MEMBERS_IMPORTED_CONFIRMATION]: () => require('../../../../pages/workspace/members/ImportedMembersConfirmationPage').default, @@ -498,8 +498,8 @@ const SettingsModalStackNavigator = createModalStackNavigator('../../../../pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsApprovalLimitPage').default, [SCREENS.WORKSPACE.WORKFLOWS_APPROVALS_OVER_LIMIT_APPROVER]: () => require('../../../../pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsOverLimitApproverPage').default, - [SCREENS.WORKSPACE.INVITE_MESSAGE]: () => require('../../../../pages/workspace/WorkspaceInviteMessagePage').default, - [SCREENS.WORKSPACE.INVITE_MESSAGE_ROLE]: () => require('../../../../pages/workspace/WorkspaceInviteMessageRolePage').default, + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_INVITE_MESSAGE]: () => require('../../../../pages/workspace/DynamicWorkspaceInviteMessagePage').default, + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_INVITE_MESSAGE_ROLE]: () => require('../../../../pages/workspace/DynamicWorkspaceInviteMessageRolePage').default, [SCREENS.WORKSPACE.INVITE_MESSAGE_APPROVER]: () => require('../../../../pages/workspace/WorkspaceInviteMessageApproverPage').default, [SCREENS.WORKSPACE.WORKFLOWS_PAYER]: () => require('../../../../pages/workspace/workflows/WorkspaceWorkflowsPayerPage').default, [SCREENS.WORKSPACE.NAME]: () => require('../../../../pages/workspace/WorkspaceNamePage').default, @@ -510,7 +510,7 @@ const SettingsModalStackNavigator = createModalStackNavigator require('../../../../pages/workspace/categories/CategorySettingsPage').default, [SCREENS.WORKSPACE.CATEGORY_REQUIRED_FIELDS]: () => require('../../../../pages/workspace/categories/CategoryRequiredFieldsPage').default, [SCREENS.WORKSPACE.ADDRESS]: () => require('../../../../pages/workspace/WorkspaceOverviewAddressPage').default, - [SCREENS.WORKSPACE.PLAN]: () => require('../../../../pages/workspace/WorkspaceOverviewPlanTypePage').default, + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_OVERVIEW_PLAN]: () => require('../../../../pages/workspace/DynamicWorkspaceOverviewPlanTypePage').default, [SCREENS.WORKSPACE.CATEGORIES_SETTINGS]: () => require('../../../../pages/workspace/categories/WorkspaceCategoriesSettingsPage').default, [SCREENS.WORKSPACE.CATEGORIES_IMPORT]: () => require('../../../../pages/workspace/categories/ImportCategoriesPage').default, [SCREENS.WORKSPACE.CATEGORIES_IMPORTED]: () => require('../../../../pages/workspace/categories/ImportedCategoriesPage').default, diff --git a/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts b/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts index 645407d89e53..97d78694d881 100755 --- a/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts +++ b/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts @@ -8,7 +8,6 @@ const WORKSPACE_TO_RHP: Partial['config'] = { [SCREENS.WORKSPACE.ADDRESS]: { path: ROUTES.WORKSPACE_OVERVIEW_ADDRESS.route, }, - [SCREENS.WORKSPACE.PLAN]: { - path: ROUTES.WORKSPACE_OVERVIEW_PLAN.route, - }, + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_OVERVIEW_PLAN]: DYNAMIC_ROUTES.WORKSPACE_OVERVIEW_PLAN.path, [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_IMPORT]: {path: ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_IMPORT.route}, [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_CHART_OF_ACCOUNTS]: {path: ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_CHART_OF_ACCOUNTS.route}, [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_CLASSES]: {path: ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_CLASSES.route}, @@ -924,9 +922,7 @@ const config: LinkingOptions['config'] = { [SCREENS.WORKSPACE.COMPANY_CARDS_ASSIGN_CARD_INVITE_NEW_MEMBER]: { path: ROUTES.WORKSPACE_COMPANY_CARDS_ASSIGN_CARD_INVITE_NEW_MEMBER.route, }, - [SCREENS.WORKSPACE.INVITE]: { - path: ROUTES.WORKSPACE_INVITE.route, - }, + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_INVITE]: DYNAMIC_ROUTES.WORKSPACE_INVITE.path, [SCREENS.WORKSPACE.MEMBERS_IMPORT]: { path: ROUTES.WORKSPACE_MEMBERS_IMPORT.route, }, @@ -957,12 +953,8 @@ const config: LinkingOptions['config'] = { [SCREENS.WORKSPACE.WORKFLOWS_APPROVALS_OVER_LIMIT_APPROVER]: { path: ROUTES.WORKSPACE_WORKFLOWS_APPROVALS_OVER_LIMIT_APPROVER.route, }, - [SCREENS.WORKSPACE.INVITE_MESSAGE]: { - path: ROUTES.WORKSPACE_INVITE_MESSAGE.route, - }, - [SCREENS.WORKSPACE.INVITE_MESSAGE_ROLE]: { - path: ROUTES.WORKSPACE_INVITE_MESSAGE_ROLE.route, - }, + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_INVITE_MESSAGE]: DYNAMIC_ROUTES.WORKSPACE_INVITE_MESSAGE.path, + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_INVITE_MESSAGE_ROLE]: DYNAMIC_ROUTES.WORKSPACE_INVITE_MESSAGE_ROLE.path, [SCREENS.WORKSPACE.INVITE_MESSAGE_APPROVER]: { path: ROUTES.WORKSPACE_INVITE_MESSAGE_APPROVER.route, }, diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index c700549e279b..8c66f0f224b3 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -302,10 +302,8 @@ type SettingsNavigatorParamList = { [SCREENS.WORKSPACE.DESCRIPTION]: undefined; [SCREENS.WORKSPACE.CLIENT_ID]: undefined; [SCREENS.WORKSPACE.SHARE]: undefined; - [SCREENS.WORKSPACE.INVITE]: { + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_INVITE]: { 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.MEMBERS_IMPORT]: { policyID: string; @@ -316,15 +314,11 @@ type SettingsNavigatorParamList = { [SCREENS.WORKSPACE.MEMBERS_IMPORTED_CONFIRMATION]: { policyID: string; }; - [SCREENS.WORKSPACE.INVITE_MESSAGE]: { + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_INVITE_MESSAGE]: { 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.INVITE_MESSAGE_ROLE]: { + [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_INVITE_MESSAGE_ROLE]: { 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.INVITE_MESSAGE_APPROVER]: { policyID: string; diff --git a/src/pages/workspace/WorkspaceInviteMessagePage.tsx b/src/pages/workspace/DynamicWorkspaceInviteMessagePage.tsx similarity index 66% rename from src/pages/workspace/WorkspaceInviteMessagePage.tsx rename to src/pages/workspace/DynamicWorkspaceInviteMessagePage.tsx index ad6af75835ae..a779f11182ed 100644 --- a/src/pages/workspace/WorkspaceInviteMessagePage.tsx +++ b/src/pages/workspace/DynamicWorkspaceInviteMessagePage.tsx @@ -1,26 +1,30 @@ import React from 'react'; import type {WithCurrentUserPersonalDetailsProps} from '@components/withCurrentUserPersonalDetails'; import withCurrentUserPersonalDetails from '@components/withCurrentUserPersonalDetails'; +import useDynamicBackPath from '@hooks/useDynamicBackPath'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; import type {SettingsNavigatorParamList} from '@navigation/types'; +import {DYNAMIC_ROUTES} from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; import WorkspaceInviteMessageComponent from './members/WorkspaceInviteMessageComponent'; import withPolicyAndFullscreenLoading from './withPolicyAndFullscreenLoading'; import type {WithPolicyAndFullscreenLoadingProps} from './withPolicyAndFullscreenLoading'; -type WorkspaceInviteMessagePageProps = WithPolicyAndFullscreenLoadingProps & +type DynamicWorkspaceInviteMessagePageProps = WithPolicyAndFullscreenLoadingProps & WithCurrentUserPersonalDetailsProps & - PlatformStackScreenProps; + PlatformStackScreenProps; + +function DynamicWorkspaceInviteMessagePage({policy, route, currentUserPersonalDetails}: DynamicWorkspaceInviteMessagePageProps) { + const backPath = useDynamicBackPath(DYNAMIC_ROUTES.WORKSPACE_INVITE_MESSAGE.path); -function WorkspaceInviteMessagePage({policy, route, currentUserPersonalDetails}: WorkspaceInviteMessagePageProps) { return ( ); } -export default withPolicyAndFullscreenLoading(withCurrentUserPersonalDetails(WorkspaceInviteMessagePage)); +export default withPolicyAndFullscreenLoading(withCurrentUserPersonalDetails(DynamicWorkspaceInviteMessagePage)); diff --git a/src/pages/workspace/WorkspaceInviteMessageRolePage.tsx b/src/pages/workspace/DynamicWorkspaceInviteMessageRolePage.tsx similarity index 76% rename from src/pages/workspace/WorkspaceInviteMessageRolePage.tsx rename to src/pages/workspace/DynamicWorkspaceInviteMessageRolePage.tsx index bbcbf165dfb1..f689b5a08907 100644 --- a/src/pages/workspace/WorkspaceInviteMessageRolePage.tsx +++ b/src/pages/workspace/DynamicWorkspaceInviteMessageRolePage.tsx @@ -1,6 +1,7 @@ import React from 'react'; import ScreenWrapper from '@components/ScreenWrapper'; import WorkspaceMemberRoleList from '@components/WorkspaceMemberRoleList'; +import useDynamicBackPath from '@hooks/useDynamicBackPath'; import useOnyx from '@hooks/useOnyx'; import {setWorkspaceInviteRoleDraft} from '@libs/actions/Policy/Member'; import Navigation from '@libs/Navigation/Navigation'; @@ -9,6 +10,7 @@ import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; import {goBackFromInvalidPolicy} from '@libs/PolicyUtils'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; +import {DYNAMIC_ROUTES} from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; import isLoadingOnyxValue from '@src/types/utils/isLoadingOnyxValue'; @@ -16,11 +18,13 @@ import AccessOrNotFoundWrapper from './AccessOrNotFoundWrapper'; import withPolicyAndFullscreenLoading from './withPolicyAndFullscreenLoading'; import type {WithPolicyAndFullscreenLoadingProps} from './withPolicyAndFullscreenLoading'; -type WorkspaceInviteMessageRolePageProps = WithPolicyAndFullscreenLoadingProps & PlatformStackScreenProps; +type DynamicWorkspaceInviteMessageRolePageProps = WithPolicyAndFullscreenLoadingProps & + PlatformStackScreenProps; -function WorkspaceInviteMessageRolePage({policy, route}: WorkspaceInviteMessageRolePageProps) { +function DynamicWorkspaceInviteMessageRolePage({policy, route}: DynamicWorkspaceInviteMessageRolePageProps) { const [role = CONST.POLICY.ROLE.USER, roleResult] = useOnyx(`${ONYXKEYS.COLLECTION.WORKSPACE_INVITE_ROLE_DRAFT}${route.params.policyID}`); const isOnyxLoading = isLoadingOnyxValue(roleResult); + const backPath = useDynamicBackPath(DYNAMIC_ROUTES.WORKSPACE_INVITE_MESSAGE_ROLE.path); return ( { setWorkspaceInviteRoleDraft(route.params.policyID, value); Navigation.setNavigationActionToMicrotaskQueue(() => { - Navigation.goBack(route.params.backTo); + Navigation.goBack(backPath); }); }} - navigateBackTo={route.params.backTo} + navigateBackTo={backPath} /> ); } -export default withPolicyAndFullscreenLoading(WorkspaceInviteMessageRolePage); +export default withPolicyAndFullscreenLoading(DynamicWorkspaceInviteMessageRolePage); diff --git a/src/pages/workspace/WorkspaceInvitePage.tsx b/src/pages/workspace/DynamicWorkspaceInvitePage.tsx similarity index 95% rename from src/pages/workspace/WorkspaceInvitePage.tsx rename to src/pages/workspace/DynamicWorkspaceInvitePage.tsx index 0a2498726a78..8cc834fab62a 100644 --- a/src/pages/workspace/WorkspaceInvitePage.tsx +++ b/src/pages/workspace/DynamicWorkspaceInvitePage.tsx @@ -7,6 +7,7 @@ import SelectionListWithSections from '@components/SelectionList/SelectionListWi import type {Section} from '@components/SelectionList/SelectionListWithSections/types'; import withNavigationTransitionEnd from '@components/withNavigationTransitionEnd'; import type {WithNavigationTransitionEndProps} from '@components/withNavigationTransitionEnd'; +import useDynamicBackPath from '@hooks/useDynamicBackPath'; import useLocalize from '@hooks/useLocalize'; import useNetwork from '@hooks/useNetwork'; import useOnyx from '@hooks/useOnyx'; @@ -19,6 +20,7 @@ import {READ_COMMANDS} from '@libs/API/types'; import {canUseTouchScreen} from '@libs/DeviceCapabilities'; import HttpUtils from '@libs/HttpUtils'; import {appendCountryCode} from '@libs/LoginUtils'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import Navigation from '@libs/Navigation/Navigation'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; import {getHeaderMessage, getParticipantsOption} from '@libs/OptionsListUtils'; @@ -28,7 +30,7 @@ import type {OptionData} from '@libs/ReportUtils'; import type {SettingsNavigatorParamList} from '@navigation/types'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; +import {DYNAMIC_ROUTES} from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; import type {InvitedEmailsToAccountIDs} from '@src/types/onyx'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; @@ -38,11 +40,12 @@ import type {WithPolicyAndFullscreenLoadingProps} from './withPolicyAndFullscree type WorkspaceInvitePageProps = WithPolicyAndFullscreenLoadingProps & WithNavigationTransitionEndProps & - PlatformStackScreenProps; + PlatformStackScreenProps; -function WorkspaceInvitePage({route, policy}: WorkspaceInvitePageProps) { +function DynamicWorkspaceInvitePage({route, policy}: WorkspaceInvitePageProps) { const styles = useThemeStyles(); const {translate} = useLocalize(); + const dynamicBackPath = useDynamicBackPath(DYNAMIC_ROUTES.WORKSPACE_INVITE.path); const [didScreenTransitionEnd, setDidScreenTransitionEnd] = useState(false); const [isSearchingForReports] = useOnyx(ONYXKEYS.RAM_ONLY_IS_SEARCHING_FOR_REPORTS); const [countryCode = CONST.DEFAULT_COUNTRY_CODE] = useOnyx(ONYXKEYS.COUNTRY_CODE); @@ -175,7 +178,7 @@ function WorkspaceInvitePage({route, policy}: WorkspaceInvitePageProps) { invitedEmailsToAccountIDs[login] = Number(accountID); } setWorkspaceInviteMembersDraft(route.params.policyID, invitedEmailsToAccountIDs); - Navigation.navigate(ROUTES.WORKSPACE_INVITE_MESSAGE.getRoute(route.params.policyID, Navigation.getActiveRoute())); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_INVITE_MESSAGE.path)); }, [route.params.policyID, selectedOptions]); const [policyName, shouldShowAlertPrompt] = useMemo(() => [policy?.name ?? '', !isEmptyObject(policy?.errors)], [policy?.name, policy?.errors]); @@ -250,7 +253,7 @@ function WorkspaceInvitePage({route, policy}: WorkspaceInvitePageProps) { subtitle={policyName} onBackButtonPress={() => { clearErrors(route.params.policyID); - Navigation.goBack(route.params.backTo); + Navigation.goBack(dynamicBackPath); }} /> ; isSelected: boolean; }; -function WorkspaceOverviewPlanTypePage({policy}: WithPolicyProps) { +function DynamicWorkspaceOverviewPlanTypePage({policy}: WithPolicyProps) { const [currentPlan, setCurrentPlan] = useState(policy?.type); const policyID = policy?.id; const {translate} = useLocalize(); @@ -164,4 +164,4 @@ function WorkspaceOverviewPlanTypePage({policy}: WithPolicyProps) { ); } -export default withPolicy(WorkspaceOverviewPlanTypePage); +export default withPolicy(DynamicWorkspaceOverviewPlanTypePage); diff --git a/src/pages/workspace/WorkspaceMembersPage.tsx b/src/pages/workspace/WorkspaceMembersPage.tsx index 38284b5c0e59..0106f4800615 100644 --- a/src/pages/workspace/WorkspaceMembersPage.tsx +++ b/src/pages/workspace/WorkspaceMembersPage.tsx @@ -46,6 +46,7 @@ import {removeApprovalWorkflow as removeApprovalWorkflowAction, updateApprovalWo import {canUseTouchScreen} from '@libs/DeviceCapabilities'; import {getLatestErrorMessageField} from '@libs/ErrorUtils'; import Log from '@libs/Log'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import Navigation from '@libs/Navigation/Navigation'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; import type {WorkspaceSplitNavigatorParamList} from '@libs/Navigation/types'; @@ -69,7 +70,7 @@ import {close} from '@userActions/Modal'; import {dismissAddedWithPrimaryLoginMessages} from '@userActions/Policy/Policy'; 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 {PersonalDetails, PolicyEmployee, PolicyEmployeeList} from '@src/types/onyx'; import type {PendingAction} from '@src/types/onyx/OnyxCommon'; @@ -220,7 +221,7 @@ function WorkspaceMembersPage({personalDetails, route, policy}: WorkspaceMembers return; } clearInviteDraft(route.params.policyID); - Navigation.navigate(ROUTES.WORKSPACE_INVITE.getRoute(route.params.policyID, Navigation.getActiveRouteWithoutParams())); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_INVITE.path)); }, [route.params.policyID, isAccountLocked, showLockedAccountModal]); /** diff --git a/src/pages/workspace/WorkspaceOverviewPage.tsx b/src/pages/workspace/WorkspaceOverviewPage.tsx index 3cc1c6826a2e..3f8f8aa67143 100644 --- a/src/pages/workspace/WorkspaceOverviewPage.tsx +++ b/src/pages/workspace/WorkspaceOverviewPage.tsx @@ -47,6 +47,7 @@ import { } from '@libs/actions/Policy/Policy'; import {filterInactiveCards, getCardSettings} from '@libs/CardUtils'; import {getLatestErrorField, getLatestErrorMessage} from '@libs/ErrorUtils'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import Navigation from '@libs/Navigation/Navigation'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; import type {WorkspaceSplitNavigatorParamList} from '@libs/Navigation/types'; @@ -68,7 +69,7 @@ import StringUtils from '@libs/StringUtils'; import {isSubscriptionTypeOfInvoicing, shouldCalculateBillNewDot} 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 type SCREENS from '@src/SCREENS'; import {ownerPoliciesSelector} from '@src/selectors/Policy'; import {reimbursementAccountErrorSelector} from '@src/selectors/ReimbursementAccount'; @@ -166,7 +167,7 @@ function WorkspaceOverviewPage({policyDraft, policy: policyProp, route}: Workspa if (!policyID) { return; } - Navigation.navigate(ROUTES.WORKSPACE_OVERVIEW_PLAN.getRoute(policyID)); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_OVERVIEW_PLAN.path)); }; const policyName = policy?.name ?? ''; const policyDescription = policy?.description ?? translate('workspace.common.defaultDescription'); @@ -423,7 +424,7 @@ function WorkspaceOverviewPage({policyDraft, policy: policyProp, route}: Workspa return; } clearInviteDraft(route.params.policyID); - Navigation.navigate(ROUTES.WORKSPACE_INVITE.getRoute(route.params.policyID, Navigation.getActiveRouteWithoutParams())); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_INVITE.path)); }; const canLeave = !isOwner; diff --git a/src/pages/workspace/members/WorkspaceInviteMessageComponent.tsx b/src/pages/workspace/members/WorkspaceInviteMessageComponent.tsx index aa5f9c3200b4..f3c77be1c73b 100644 --- a/src/pages/workspace/members/WorkspaceInviteMessageComponent.tsx +++ b/src/pages/workspace/members/WorkspaceInviteMessageComponent.tsx @@ -23,6 +23,7 @@ import {openExternalLink} from '@libs/actions/Link'; import {addMembersToWorkspace, clearWorkspaceInviteApproverDraft, clearWorkspaceInviteRoleDraft} from '@libs/actions/Policy/Member'; import {setWorkspaceInviteMessageDraft} from '@libs/actions/Policy/Policy'; import getIsNarrowLayout from '@libs/getIsNarrowLayout'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import Navigation from '@libs/Navigation/Navigation'; import {getPersonalDetailsForAccountIDs} from '@libs/OptionsListUtils'; import {getDisplayNameOrDefault, getPersonalDetailByEmail} from '@libs/PersonalDetailsUtils'; @@ -32,7 +33,7 @@ import variables from '@styles/variables'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import AccessOrNotFoundWrapper from '@src/pages/workspace/AccessOrNotFoundWrapper'; -import ROUTES from '@src/ROUTES'; +import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; import type {Route as Routes} from '@src/ROUTES'; import INPUT_IDS from '@src/types/form/WorkspaceInviteMessageForm'; import type {PersonalDetails} from '@src/types/onyx'; @@ -275,7 +276,7 @@ function WorkspaceInviteMessageComponent({ description={translate('common.role')} shouldShowRightIcon onPress={() => { - Navigation.navigate(ROUTES.WORKSPACE_INVITE_MESSAGE_ROLE.getRoute(policyID, Navigation.getActiveRoute())); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_INVITE_MESSAGE_ROLE.path)); }} /> {!!shouldShowApproverRow && ( diff --git a/src/pages/workspace/withPolicy.tsx b/src/pages/workspace/withPolicy.tsx index 5ee7ce28d9a1..046bf1d7fe22 100644 --- a/src/pages/workspace/withPolicy.tsx +++ b/src/pages/workspace/withPolicy.tsx @@ -20,9 +20,9 @@ type PolicyRouteName = | typeof SCREENS.WORKSPACE.MEMBERS | typeof SCREENS.WORKSPACE.EXPENSIFY_CARD | typeof SCREENS.WORKSPACE.COMPANY_CARDS - | typeof SCREENS.WORKSPACE.INVITE - | typeof SCREENS.WORKSPACE.INVITE_MESSAGE - | typeof SCREENS.WORKSPACE.INVITE_MESSAGE_ROLE + | typeof SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_INVITE + | typeof SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_INVITE_MESSAGE + | typeof SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_INVITE_MESSAGE_ROLE | typeof SCREENS.WORKSPACE.INVITE_MESSAGE_APPROVER | typeof SCREENS.WORKSPACE.WORKFLOWS_PAYER | typeof SCREENS.WORKSPACE.WORKFLOWS