diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 864cf8aa3f66..edbeaa000354 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -304,6 +304,14 @@ const DYNAMIC_ROUTES = { path: 'imported', entryScreens: [SCREENS.WORKSPACE.CATEGORIES], }, + WORKSPACE_CATEGORIES_SETTINGS: { + path: 'categories-settings', + entryScreens: [SCREENS.WORKSPACE.CATEGORIES], + }, + WORKSPACE_CATEGORY_CREATE: { + path: 'category-new', + entryScreens: [SCREENS.WORKSPACE.CATEGORIES], + }, SPEND_CATEGORY_SELECTOR: { path: 'spend-category-selector/:groupID', entryScreens: [SCREENS.WORKSPACE.CATEGORIES_SETTINGS, SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORIES_SETTINGS], @@ -2361,14 +2369,6 @@ const ROUTES = { // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam(`workspaces/pay-and-downgrade` as const, backTo), }, - WORKSPACE_CATEGORIES_SETTINGS: { - route: 'workspaces/:policyID/categories/settings', - getRoute: (policyID: string) => `workspaces/${policyID}/categories/settings` as const, - }, - WORKSPACE_CATEGORY_CREATE: { - route: 'workspaces/:policyID/categories/new', - getRoute: (policyID: string) => `workspaces/${policyID}/categories/new` as const, - }, WORKSPACE_CATEGORY_EDIT: { route: 'workspaces/:policyID/category/:categoryName/edit', getRoute: (policyID: string, categoryName: string) => `workspaces/${policyID}/category/${encodeURIComponent(categoryName)}/edit` as const, diff --git a/src/SCREENS.ts b/src/SCREENS.ts index 422f58bcf10f..78ef1401db9e 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -777,6 +777,7 @@ const SCREENS = { NAME: 'Workspace_Overview_Name', CLIENT_ID: 'Workspace_Overview_Client_ID', CATEGORY_CREATE: 'Category_Create', + DYNAMIC_CATEGORY_CREATE: 'Dynamic_Category_Create', CATEGORY_EDIT: 'Category_Edit', CATEGORY_PAYROLL_CODE: 'Category_Payroll_Code', CATEGORY_GL_CODE: 'Category_GL_Code', @@ -789,6 +790,7 @@ const SCREENS = { CATEGORY_REQUIRE_ITEMIZED_RECEIPTS_OVER: 'Category_Require_Itemized_Receipts_Over', CATEGORY_REQUIRED_FIELDS: 'Category_Required_Fields', CATEGORIES_SETTINGS: 'Categories_Settings', + DYNAMIC_CATEGORIES_SETTINGS: 'Dynamic_Categories_Settings', DYNAMIC_CATEGORIES_IMPORT: 'Dynamic_Categories_Import', DYNAMIC_CATEGORIES_IMPORTED: 'Dynamic_Categories_Imported', DYNAMIC_SPEND_CATEGORY_SELECTOR: 'Dynamic_Spend_Category_Selector', diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx index 5832b79d7093..1f6252df379e 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx @@ -525,7 +525,7 @@ const SettingsModalStackNavigator = createModalStackNavigator require('../../../../pages/workspace/categories/CategoryRequiredFieldsPage').default, [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_OVERVIEW_ADDRESS]: () => require('../../../../pages/workspace/WorkspaceOverviewAddressPage').default, [SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_OVERVIEW_PLAN]: () => require('../../../../pages/workspace/DynamicWorkspaceOverviewPlanTypePage').default, - [SCREENS.WORKSPACE.CATEGORIES_SETTINGS]: () => require('../../../../pages/workspace/categories/WorkspaceCategoriesSettingsPage').default, + [SCREENS.WORKSPACE.DYNAMIC_CATEGORIES_SETTINGS]: () => require('../../../../pages/workspace/categories/WorkspaceCategoriesSettingsPage').default, [SCREENS.WORKSPACE.DYNAMIC_CATEGORIES_IMPORT]: () => require('../../../../pages/workspace/categories/ImportCategoriesPage').default, [SCREENS.WORKSPACE.DYNAMIC_CATEGORIES_IMPORTED]: () => require('../../../../pages/workspace/categories/ImportedCategoriesPage').default, [SCREENS.WORKSPACE.DYNAMIC_SPEND_CATEGORY_SELECTOR]: () => require('../../../../pages/workspace/categories/DynamicSpendCategorySelectorPage').default, @@ -539,7 +539,7 @@ const SettingsModalStackNavigator = createModalStackNavigator require('@pages/workspace/members/WorkspaceOwnerChangeWrapperPage').default, [SCREENS.WORKSPACE.OWNER_CHANGE_SUCCESS]: () => require('../../../../pages/workspace/members/WorkspaceOwnerChangeSuccessPage').default, [SCREENS.WORKSPACE.OWNER_CHANGE_ERROR]: () => require('../../../../pages/workspace/members/WorkspaceOwnerChangeErrorPage').default, - [SCREENS.WORKSPACE.CATEGORY_CREATE]: () => require('../../../../pages/workspace/categories/CreateCategoryPage').default, + [SCREENS.WORKSPACE.DYNAMIC_CATEGORY_CREATE]: () => require('../../../../pages/workspace/categories/CreateCategoryPage').default, [SCREENS.WORKSPACE.CATEGORY_EDIT]: () => require('../../../../pages/workspace/categories/EditCategoryPage').default, [SCREENS.WORKSPACE.CATEGORY_PAYROLL_CODE]: () => require('../../../../pages/workspace/categories/CategoryPayrollCodePage').default, [SCREENS.WORKSPACE.CATEGORY_GL_CODE]: () => require('../../../../pages/workspace/categories/CategoryGLCodePage').default, diff --git a/src/libs/Navigation/linkingConfig/OldRoutes.ts b/src/libs/Navigation/linkingConfig/OldRoutes.ts index 6964b23f07f2..bdd4745ccc7b 100644 --- a/src/libs/Navigation/linkingConfig/OldRoutes.ts +++ b/src/libs/Navigation/linkingConfig/OldRoutes.ts @@ -5,6 +5,8 @@ const oldRoutes: Record = { '/settings/workspaces': '/workspaces', '/r/*/settings/name': '/r/$1/details/settings/name', '/workspaces/*/overview/address': '/workspaces/$1/overview/workspace-address', + '/workspaces/*/categories/settings': '/workspaces/$1/categories/categories-settings', + '/workspaces/*/categories/new': '/workspaces/$1/categories/category-new', '/workspaces/*/accounting/*/card-reconciliation/account': '/workspaces/$1/accounting/$2/card-reconciliation/account-reconciliation-settings', '/workspaces/*/connections/netsuite/export/invoice-item-preference/invoice-item/select': '/workspaces/$1/connections/netsuite/export/invoice-item-preference/select/invoice-item/select', '/workspaces/*/connections/quickbooks-online/advanced/autosync/accounting-method': diff --git a/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts b/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts index 10e6056c9dfa..13256acf6481 100755 --- a/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts +++ b/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts @@ -196,11 +196,11 @@ const WORKSPACE_TO_RHP: Partial['config'] = { [SCREENS.WORKSPACE.PAY_AND_DOWNGRADE]: { path: ROUTES.WORKSPACE_PAY_AND_DOWNGRADE.route, }, - [SCREENS.WORKSPACE.CATEGORIES_SETTINGS]: { - path: ROUTES.WORKSPACE_CATEGORIES_SETTINGS.route, - }, + [SCREENS.WORKSPACE.DYNAMIC_CATEGORIES_SETTINGS]: DYNAMIC_ROUTES.WORKSPACE_CATEGORIES_SETTINGS.path, [SCREENS.WORKSPACE.DYNAMIC_CATEGORIES_IMPORT]: DYNAMIC_ROUTES.WORKSPACE_CATEGORIES_IMPORT.path, [SCREENS.WORKSPACE.DYNAMIC_CATEGORIES_IMPORTED]: DYNAMIC_ROUTES.WORKSPACE_CATEGORIES_IMPORTED.path, [SCREENS.WORKSPACE.DYNAMIC_SPEND_CATEGORY_SELECTOR]: DYNAMIC_ROUTES.SPEND_CATEGORY_SELECTOR.path, @@ -1024,9 +1022,7 @@ const config: LinkingOptions['config'] = { [SCREENS.WORKSPACE.OWNER_CHANGE_CHECK]: { path: ROUTES.WORKSPACE_OWNER_CHANGE_CHECK.route, }, - [SCREENS.WORKSPACE.CATEGORY_CREATE]: { - path: ROUTES.WORKSPACE_CATEGORY_CREATE.route, - }, + [SCREENS.WORKSPACE.DYNAMIC_CATEGORY_CREATE]: DYNAMIC_ROUTES.WORKSPACE_CATEGORY_CREATE.path, [SCREENS.WORKSPACE.CATEGORY_EDIT]: { path: ROUTES.WORKSPACE_CATEGORY_EDIT.route, }, diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index 4fb05063da24..1ecd59f7ac22 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -336,10 +336,8 @@ 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.CATEGORY_CREATE]: { + [SCREENS.WORKSPACE.DYNAMIC_CATEGORY_CREATE]: { 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.SETTINGS_CATEGORIES.SETTINGS_CATEGORY_CREATE]: { policyID: string; @@ -435,10 +433,8 @@ type SettingsNavigatorParamList = { [SCREENS.WORKSPACE.PAY_AND_DOWNGRADE]: { policyID?: string; }; - [SCREENS.WORKSPACE.CATEGORIES_SETTINGS]: { + [SCREENS.WORKSPACE.DYNAMIC_CATEGORIES_SETTINGS]: { 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.SETTINGS_CATEGORIES.SETTINGS_CATEGORIES_SETTINGS]: { policyID: string; diff --git a/src/pages/workspace/categories/CreateCategoryPage.tsx b/src/pages/workspace/categories/CreateCategoryPage.tsx index 733f818475e5..8fec9338490f 100644 --- a/src/pages/workspace/categories/CreateCategoryPage.tsx +++ b/src/pages/workspace/categories/CreateCategoryPage.tsx @@ -20,7 +20,7 @@ import SCREENS from '@src/SCREENS'; import CategoryForm from './CategoryForm'; type CreateCategoryPageProps = - | PlatformStackScreenProps + | PlatformStackScreenProps | PlatformStackScreenProps; function CreateCategoryPage({route}: CreateCategoryPageProps) { @@ -28,8 +28,8 @@ function CreateCategoryPage({route}: CreateCategoryPageProps) { const [policyTags] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${route.params.policyID}`); const styles = useThemeStyles(); const {translate} = useLocalize(); - const backTo = route.params?.backTo; const isQuickSettingsFlow = route.name === SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORY_CREATE; + const backTo = isQuickSettingsFlow && 'backTo' in route.params ? route.params.backTo : undefined; const currentUserPersonalDetails = useCurrentUserPersonalDetails(); const { taskReport: setupCategoryTaskReport, diff --git a/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx b/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx index 51a0d27f03a6..d3b6ad2debe5 100644 --- a/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx +++ b/src/pages/workspace/categories/WorkspaceCategoriesPage.tsx @@ -404,11 +404,11 @@ function WorkspaceCategoriesPage({route}: WorkspaceCategoriesPageProps) { }; const navigateToCategoriesSettings = useCallback(() => { - Navigation.navigate(isQuickSettingsFlow ? ROUTES.SETTINGS_CATEGORIES_SETTINGS.getRoute(policyId, backTo) : ROUTES.WORKSPACE_CATEGORIES_SETTINGS.getRoute(policyId)); + Navigation.navigate(isQuickSettingsFlow ? ROUTES.SETTINGS_CATEGORIES_SETTINGS.getRoute(policyId, backTo) : createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_CATEGORIES_SETTINGS.path)); }, [isQuickSettingsFlow, policyId, backTo]); const navigateToCreateCategoryPage = () => { - Navigation.navigate(isQuickSettingsFlow ? ROUTES.SETTINGS_CATEGORY_CREATE.getRoute(policyId, backTo) : ROUTES.WORKSPACE_CATEGORY_CREATE.getRoute(policyId)); + Navigation.navigate(isQuickSettingsFlow ? ROUTES.SETTINGS_CATEGORY_CREATE.getRoute(policyId, backTo) : createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_CATEGORY_CREATE.path)); }; const dismissError = (item: ListItem) => { diff --git a/src/pages/workspace/categories/WorkspaceCategoriesSettingsPage.tsx b/src/pages/workspace/categories/WorkspaceCategoriesSettingsPage.tsx index c27d257f9a1a..0c80cbc9d2d6 100644 --- a/src/pages/workspace/categories/WorkspaceCategoriesSettingsPage.tsx +++ b/src/pages/workspace/categories/WorkspaceCategoriesSettingsPage.tsx @@ -28,18 +28,19 @@ import SCREENS from '@src/SCREENS'; type WorkspaceCategoriesSettingsPageProps = WithPolicyConnectionsProps & ( - | PlatformStackScreenProps + | PlatformStackScreenProps | PlatformStackScreenProps ); function WorkspaceCategoriesSettingsPage({policy, route}: WorkspaceCategoriesSettingsPageProps) { - const {policyID, backTo} = route.params; + const {policyID} = route.params; const styles = useThemeStyles(); const {translate} = useLocalize(); const policyData = usePolicyData(policyID); const isConnectedToAccounting = Object.keys(policy?.connections ?? {}).length > 0; const currentConnectionName = getCurrentConnectionName(policy); const isQuickSettingsFlow = route.name === SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORIES_SETTINGS; + const backTo = isQuickSettingsFlow && 'backTo' in route.params ? route.params.backTo : undefined; const toggleSubtitle = isConnectedToAccounting && currentConnectionName ? translate('workspace.categories.needCategoryForExportToIntegration', currentConnectionName) : undefined; const updateWorkspaceRequiresCategory = useCallback( diff --git a/src/pages/workspace/withPolicy.tsx b/src/pages/workspace/withPolicy.tsx index 1f54e398fa20..604e1cfa9240 100644 --- a/src/pages/workspace/withPolicy.tsx +++ b/src/pages/workspace/withPolicy.tsx @@ -42,7 +42,7 @@ type PolicyRouteName = | typeof SCREENS.WORKSPACE.OWNER_CHANGE_CHECK | typeof SCREENS.WORKSPACE.TAX_EDIT | typeof SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_OVERVIEW_ADDRESS - | typeof SCREENS.WORKSPACE.CATEGORIES_SETTINGS + | typeof SCREENS.WORKSPACE.DYNAMIC_CATEGORIES_SETTINGS | typeof SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORIES_SETTINGS | typeof SCREENS.WORKSPACE.DISTANCE_RATE_TAX_RATE_EDIT | typeof SCREENS.WORKSPACE.DISTANCE_RATE_TAX_RECLAIMABLE_ON_EDIT