Skip to content

Commit 9a3bf0d

Browse files
authored
Merge pull request #86947 from huult/83860-migrate-categories-settings-tags
2 parents 442aeea + efaf5f3 commit 9a3bf0d

9 files changed

Lines changed: 29 additions & 34 deletions

File tree

src/ROUTES.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,10 @@ const DYNAMIC_ROUTES = {
279279
getRoute: (country = '') => `country?country=${country}`,
280280
queryParams: ['country'],
281281
},
282+
SETTINGS_CATEGORY_EDIT: {
283+
path: 'category-edit',
284+
entryScreens: [SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORY_SETTINGS],
285+
},
282286
NOTIFICATION_PREFERENCES: {
283287
path: 'notification-preferences',
284288
entryScreens: [SCREENS.REPORT_SETTINGS.ROOT, SCREENS.PROFILE_ROOT],
@@ -1523,12 +1527,6 @@ const ROUTES = {
15231527
// eslint-disable-next-line no-restricted-syntax -- Legacy route generation
15241528
getRoute: (policyID: string, backTo = '') => getUrlWithBackToParam(`settings/${policyID}/categories/new`, backTo),
15251529
},
1526-
SETTINGS_CATEGORY_EDIT: {
1527-
route: 'settings/:policyID/category/:categoryName/edit',
1528-
1529-
// eslint-disable-next-line no-restricted-syntax -- Legacy route generation
1530-
getRoute: (policyID: string, categoryName: string, backTo = '') => getUrlWithBackToParam(`settings/${policyID}/category/${encodeURIComponent(categoryName)}/edit`, backTo),
1531-
},
15321530
SETTINGS_CATEGORIES_IMPORT: {
15331531
route: 'settings/:policyID/categories/import',
15341532

src/SCREENS.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,7 @@ const SCREENS = {
427427
SETTINGS_CATEGORY_SETTINGS: 'Settings_Category_Settings',
428428
SETTINGS_CATEGORIES_SETTINGS: 'Settings_Categories_Settings',
429429
SETTINGS_CATEGORY_CREATE: 'Settings_Category_Create',
430-
SETTINGS_CATEGORY_EDIT: 'Settings_Category_Edit',
430+
DYNAMIC_SETTINGS_CATEGORY_EDIT: 'Dynamic_Settings_Category_Edit',
431431
SETTINGS_CATEGORIES_ROOT: 'Settings_Categories',
432432
SETTINGS_CATEGORIES_IMPORT: 'Settings_Categories_Import',
433433
SETTINGS_CATEGORIES_IMPORTED: 'Settings_Categories_Imported',

src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ const ChronosScheduleOOOModalStackNavigator = createModalStackNavigator<ChronosS
314314
const CategoriesModalStackNavigator = createModalStackNavigator({
315315
[SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORIES_SETTINGS]: () => require<ReactComponentModule>('../../../../pages/workspace/categories/WorkspaceCategoriesSettingsPage').default,
316316
[SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORY_CREATE]: () => require<ReactComponentModule>('../../../../pages/workspace/categories/CreateCategoryPage').default,
317-
[SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORY_EDIT]: () => require<ReactComponentModule>('../../../../pages/workspace/categories/EditCategoryPage').default,
317+
[SCREENS.SETTINGS_CATEGORIES.DYNAMIC_SETTINGS_CATEGORY_EDIT]: () => require<ReactComponentModule>('../../../../pages/workspace/categories/EditCategoryPage').default,
318318
[SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORY_SETTINGS]: () => require<ReactComponentModule>('../../../../pages/workspace/categories/CategorySettingsPage').default,
319319
[SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORIES_IMPORT]: () => require<ReactComponentModule>('../../../../pages/workspace/categories/ImportCategoriesPage').default,
320320
[SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORIES_IMPORTED]: () => require<ReactComponentModule>('../../../../pages/workspace/categories/ImportedCategoriesPage').default,

src/libs/Navigation/linkingConfig/OldRoutes.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const oldRoutes: Record<string, string> = {
22
/* eslint-disable @typescript-eslint/naming-convention */
3+
'/settings/*/category/*/edit': '/settings/$1/category/$2/category-edit',
34
'/settings/workspaces/*': '/workspaces/$1',
45
'/settings/workspaces': '/workspaces',
56
'/r/*/settings/name': '/r/$1/details/settings/name',

src/libs/Navigation/linkingConfig/config.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1476,9 +1476,7 @@ const config: LinkingOptions<RootNavigatorParamList>['config'] = {
14761476
[SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORY_CREATE]: {
14771477
path: ROUTES.SETTINGS_CATEGORY_CREATE.route,
14781478
},
1479-
[SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORY_EDIT]: {
1480-
path: ROUTES.SETTINGS_CATEGORY_EDIT.route,
1481-
},
1479+
[SCREENS.SETTINGS_CATEGORIES.DYNAMIC_SETTINGS_CATEGORY_EDIT]: DYNAMIC_ROUTES.SETTINGS_CATEGORY_EDIT.path,
14821480
[SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORIES_IMPORT]: {
14831481
path: ROUTES.SETTINGS_CATEGORIES_IMPORT.route,
14841482
},

src/libs/Navigation/types.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -341,11 +341,9 @@ type SettingsNavigatorParamList = {
341341
// 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
342342
backTo?: Routes;
343343
};
344-
[SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORY_EDIT]: {
344+
[SCREENS.SETTINGS_CATEGORIES.DYNAMIC_SETTINGS_CATEGORY_EDIT]: {
345345
policyID: string;
346346
categoryName: string;
347-
// 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
348-
backTo?: Routes;
349347
};
350348
[SCREENS.WORKSPACE.CATEGORY_PAYROLL_CODE]: {
351349
policyID: string;

src/pages/workspace/categories/CategorySettingsPage.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import {
3030
getDecodedCategoryName,
3131
} from '@libs/CategoryUtils';
3232
import {getLatestErrorMessageField} from '@libs/ErrorUtils';
33+
import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute';
3334
import Navigation from '@libs/Navigation/Navigation';
3435
import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types';
3536
import {isDisablingOrDeletingLastEnabledCategory} from '@libs/OptionsListUtils';
@@ -41,7 +42,7 @@ import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper';
4142
import {clearCategoryErrors, deleteWorkspaceCategories, setWorkspaceCategoryEnabled} from '@userActions/Policy/Category';
4243
import CONST from '@src/CONST';
4344
import ONYXKEYS from '@src/ONYXKEYS';
44-
import ROUTES from '@src/ROUTES';
45+
import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES';
4546
import SCREENS from '@src/SCREENS';
4647

4748
type CategorySettingsPageProps =
@@ -222,9 +223,7 @@ function CategorySettingsPage({
222223
);
223224

224225
const navigateToEditCategory = () => {
225-
Navigation.navigate(
226-
isQuickSettingsFlow ? ROUTES.SETTINGS_CATEGORY_EDIT.getRoute(policyID, policyCategory.name, backTo) : ROUTES.WORKSPACE_CATEGORY_EDIT.getRoute(policyID, policyCategory.name),
227-
);
226+
Navigation.navigate(isQuickSettingsFlow ? createDynamicRoute(DYNAMIC_ROUTES.SETTINGS_CATEGORY_EDIT.path) : ROUTES.WORKSPACE_CATEGORY_EDIT.getRoute(policyID, policyCategory.name));
228227
};
229228

230229
const deleteCategory = () => {

src/pages/workspace/categories/EditCategoryPage.tsx

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React, {useCallback} from 'react';
22
import type {FormInputErrors, FormOnyxValues} from '@components/Form/types';
33
import HeaderWithBackButton from '@components/HeaderWithBackButton';
44
import ScreenWrapper from '@components/ScreenWrapper';
5+
import useDynamicBackPath from '@hooks/useDynamicBackPath';
56
import useLocalize from '@hooks/useLocalize';
67
import usePolicyData from '@hooks/usePolicyData';
78
import useThemeStyles from '@hooks/useThemeStyles';
@@ -12,21 +13,22 @@ import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper';
1213
import {renamePolicyCategory} from '@userActions/Policy/Category';
1314
import CONST from '@src/CONST';
1415
import type ONYXKEYS from '@src/ONYXKEYS';
15-
import ROUTES from '@src/ROUTES';
16+
import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES';
1617
import SCREENS from '@src/SCREENS';
1718
import CategoryForm from './CategoryForm';
1819

1920
type EditCategoryPageProps =
2021
| PlatformStackScreenProps<SettingsNavigatorParamList, typeof SCREENS.WORKSPACE.CATEGORY_EDIT>
21-
| PlatformStackScreenProps<SettingsNavigatorParamList, typeof SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORY_EDIT>;
22+
| PlatformStackScreenProps<SettingsNavigatorParamList, typeof SCREENS.SETTINGS_CATEGORIES.DYNAMIC_SETTINGS_CATEGORY_EDIT>;
2223

2324
function EditCategoryPage({route}: EditCategoryPageProps) {
24-
const {backTo, policyID, categoryName: currentCategoryName} = route.params;
25+
const {policyID, categoryName: currentCategoryName} = route.params;
2526
const policyData = usePolicyData(policyID);
2627
const {categories: policyCategories} = policyData;
2728
const styles = useThemeStyles();
2829
const {translate} = useLocalize();
29-
const isQuickSettingsFlow = route.name === SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORY_EDIT;
30+
const isQuickSettingsFlow = route.name === SCREENS.SETTINGS_CATEGORIES.DYNAMIC_SETTINGS_CATEGORY_EDIT;
31+
const backPath = useDynamicBackPath(DYNAMIC_ROUTES.SETTINGS_CATEGORY_EDIT.path);
3032

3133
const validate = useCallback(
3234
(values: FormOnyxValues<typeof ONYXKEYS.FORMS.WORKSPACE_CATEGORY_FORM>) => {
@@ -56,15 +58,10 @@ function EditCategoryPage({route}: EditCategoryPageProps) {
5658

5759
// Ensure Onyx.update is executed before navigation to prevent UI blinking issues, affecting the category name and rate.
5860
Navigation.setNavigationActionToMicrotaskQueue(() => {
59-
Navigation.goBack(
60-
isQuickSettingsFlow
61-
? ROUTES.SETTINGS_CATEGORY_SETTINGS.getRoute(policyID, currentCategoryName, backTo)
62-
: ROUTES.WORKSPACE_CATEGORY_SETTINGS.getRoute(policyID, currentCategoryName),
63-
{compareParams: false},
64-
);
61+
Navigation.goBack(isQuickSettingsFlow ? backPath : ROUTES.WORKSPACE_CATEGORY_SETTINGS.getRoute(policyID, currentCategoryName), {compareParams: false});
6562
});
6663
},
67-
[isQuickSettingsFlow, currentCategoryName, policyData, policyID, backTo],
64+
[currentCategoryName, policyData, isQuickSettingsFlow, backPath, policyID],
6865
);
6966

7067
return (
@@ -82,11 +79,7 @@ function EditCategoryPage({route}: EditCategoryPageProps) {
8279
<HeaderWithBackButton
8380
title={translate('workspace.categories.editCategory')}
8481
onBackButtonPress={() =>
85-
Navigation.goBack(
86-
isQuickSettingsFlow
87-
? ROUTES.SETTINGS_CATEGORY_SETTINGS.getRoute(route.params.policyID, route.params.categoryName, backTo)
88-
: ROUTES.WORKSPACE_CATEGORY_SETTINGS.getRoute(route.params.policyID, route.params.categoryName),
89-
)
82+
Navigation.goBack(isQuickSettingsFlow ? backPath : ROUTES.WORKSPACE_CATEGORY_SETTINGS.getRoute(route.params.policyID, route.params.categoryName))
9083
}
9184
/>
9285
<CategoryForm

tests/navigation/getMatchingNewRouteTest.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,14 @@ describe('getBestMatchingPath', () => {
4444
);
4545
});
4646

47+
it('redirects old settings category edit path to the new dynamic suffix shape', () => {
48+
expect(getMatchingNewRoute('/settings/abc/category/Meals/edit')).toBe('/settings/abc/category/Meals/category-edit');
49+
});
50+
51+
it('preserves query params when redirecting old settings category edit path', () => {
52+
expect(getMatchingNewRoute('/settings/abc/category/Meals/edit?backTo=/home')).toBe('/settings/abc/category/Meals/category-edit?backTo=/home');
53+
});
54+
4755
it('redirects old flag comment path to report-based dynamic route', () => {
4856
expect(getMatchingNewRoute('/flag/123/456')).toBe('/r/123/flag/123/456');
4957
});

0 commit comments

Comments
 (0)