diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 05872df290b3..8846ec537009 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -503,7 +503,25 @@ const ROUTES = { }, SETTINGS_CATEGORY_EDIT: { route: 'settings/:policyID/category/:categoryName/edit', - getRoute: (policyID: string, categoryName: string, backTo = '') => getUrlWithBackToParam(`settings/workspaces/${policyID}/category/${encodeURIComponent(categoryName)}/edit`, backTo), + getRoute: (policyID: string, categoryName: string, backTo = '') => getUrlWithBackToParam(`settings/${policyID}/category/${encodeURIComponent(categoryName)}/edit`, backTo), + }, + SETTINGS_CATEGORIES_IMPORT: { + route: 'settings/:policyID/categories/import', + getRoute: (policyID: string, backTo = '') => getUrlWithBackToParam(`settings/${policyID}/categories/import` as const, backTo), + }, + SETTINGS_CATEGORIES_IMPORTED: { + route: 'settings/:policyID/categories/imported', + getRoute: (policyID: string, backTo = '') => getUrlWithBackToParam(`settings/${policyID}/categories/imported` as const, backTo), + }, + SETTINGS_CATEGORY_PAYROLL_CODE: { + route: 'settings/:policyID/category/:categoryName/payroll-code', + getRoute: (policyID: string, categoryName: string, backTo = '') => + getUrlWithBackToParam(`settings/${policyID}/category/${encodeURIComponent(categoryName)}/payroll-code` as const, backTo), + }, + SETTINGS_CATEGORY_GL_CODE: { + route: 'settings/:policyID/category/:categoryName/gl-code', + getRoute: (policyID: string, categoryName: string, backTo = '') => + getUrlWithBackToParam(`settings/${policyID}/category/${encodeURIComponent(categoryName)}/gl-code` as const, backTo), }, MONEY_REQUEST_STEP_CURRENCY: { route: ':action/:iouType/currency/:transactionID/:reportID/:pageIndex?', diff --git a/src/SCREENS.ts b/src/SCREENS.ts index e22f0877b58a..24bc9e757861 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -246,6 +246,10 @@ const SCREENS = { SETTINGS_CATEGORY_CREATE: 'Settings_Category_Create', SETTINGS_CATEGORY_EDIT: 'Settings_Category_Edit', SETTINGS_CATEGORIES_ROOT: 'Settings_Categories', + SETTINGS_CATEGORIES_IMPORT: 'Settings_Categories_Import', + SETTINGS_CATEGORIES_IMPORTED: 'Settings_Categories_Imported', + SETTINGS_CATEGORY_PAYROLL_CODE: 'Settings_Category_Payroll_Code', + SETTINGS_CATEGORY_GL_CODE: 'Settings_Category_GL_Code', }, EXPENSIFY_CARD: { EXPENSIFY_CARD_DETAILS: 'Expensify_Card_Details', diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx index 695166a20197..d37086648930 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx @@ -142,6 +142,10 @@ const CategoriesModalStackNavigator = createModalStackNavigator({ [SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORY_CREATE]: () => require('../../../../pages/workspace/categories/CreateCategoryPage').default, [SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORY_EDIT]: () => require('../../../../pages/workspace/categories/EditCategoryPage').default, [SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORY_SETTINGS]: () => require('../../../../pages/workspace/categories/CategorySettingsPage').default, + [SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORIES_IMPORT]: () => require('../../../../pages/workspace/categories/ImportCategoriesPage').default, + [SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORIES_IMPORTED]: () => require('../../../../pages/workspace/categories/ImportedCategoriesPage').default, + [SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORY_PAYROLL_CODE]: () => require('../../../../pages/workspace/categories/CategoryPayrollCodePage').default, + [SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORY_GL_CODE]: () => require('../../../../pages/workspace/categories/CategoryGLCodePage').default, }); const TagsModalStackNavigator = createModalStackNavigator({ diff --git a/src/libs/Navigation/linkingConfig/config.ts b/src/libs/Navigation/linkingConfig/config.ts index 006cf73f5a8e..758f42a161eb 100644 --- a/src/libs/Navigation/linkingConfig/config.ts +++ b/src/libs/Navigation/linkingConfig/config.ts @@ -925,6 +925,24 @@ const config: LinkingOptions['config'] = { categoryName: (categoryName: string) => decodeURIComponent(categoryName), }, }, + [SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORIES_IMPORT]: { + path: ROUTES.SETTINGS_CATEGORIES_IMPORT.route, + }, + [SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORIES_IMPORTED]: { + path: ROUTES.SETTINGS_CATEGORIES_IMPORTED.route, + }, + [SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORY_PAYROLL_CODE]: { + path: ROUTES.SETTINGS_CATEGORY_PAYROLL_CODE.route, + parse: { + categoryName: (categoryName: string) => decodeURIComponent(categoryName), + }, + }, + [SCREENS.SETTINGS_CATEGORIES.SETTINGS_CATEGORY_GL_CODE]: { + path: ROUTES.SETTINGS_CATEGORY_GL_CODE.route, + parse: { + categoryName: (categoryName: string) => decodeURIComponent(categoryName), + }, + }, }, }, [SCREENS.RIGHT_MODAL.SETTINGS_TAGS]: { diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index 54b261ffcfa9..12a09ea27e1f 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -210,10 +210,12 @@ type SettingsNavigatorParamList = { [SCREENS.WORKSPACE.CATEGORY_PAYROLL_CODE]: { policyID: string; categoryName: string; + backTo?: Routes; }; [SCREENS.WORKSPACE.CATEGORY_GL_CODE]: { policyID: string; categoryName: string; + backTo?: Routes; }; [SCREENS.WORKSPACE.CATEGORY_DEFAULT_TAX_RATE]: { policyID: string; @@ -251,9 +253,11 @@ type SettingsNavigatorParamList = { }; [SCREENS.WORKSPACE.CATEGORIES_IMPORT]: { policyID: string; + backTo?: Routes; }; [SCREENS.WORKSPACE.CATEGORIES_IMPORTED]: { policyID: string; + backTo?: Routes; }; [SCREENS.WORKSPACE.TAG_CREATE]: { policyID: string; diff --git a/src/pages/workspace/categories/CategoryGLCodePage.tsx b/src/pages/workspace/categories/CategoryGLCodePage.tsx index 131f17a14242..5984495e914b 100644 --- a/src/pages/workspace/categories/CategoryGLCodePage.tsx +++ b/src/pages/workspace/categories/CategoryGLCodePage.tsx @@ -26,6 +26,7 @@ function CategoryGLCodePage({route}: EditCategoryPageProps) { const styles = useThemeStyles(); const {translate} = useLocalize(); const policyId = route.params.policyID ?? '-1'; + const backTo = route.params.backTo; const [policyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${policyId}`); const categoryName = route.params.categoryName; @@ -38,7 +39,11 @@ function CategoryGLCodePage({route}: EditCategoryPageProps) { if (newGLCode !== glCode) { Category.setPolicyCategoryGLCode(route.params.policyID, categoryName, newGLCode); } - Navigation.goBack(ROUTES.WORKSPACE_CATEGORY_SETTINGS.getRoute(route.params.policyID, categoryName)); + Navigation.goBack( + backTo + ? ROUTES.SETTINGS_CATEGORY_SETTINGS.getRoute(route.params.policyID, categoryName, backTo) + : ROUTES.WORKSPACE_CATEGORY_SETTINGS.getRoute(route.params.policyID, categoryName), + ); }, [categoryName, glCode, route.params.policyID], ); @@ -57,7 +62,13 @@ function CategoryGLCodePage({route}: EditCategoryPageProps) { > Navigation.goBack(ROUTES.WORKSPACE_CATEGORY_SETTINGS.getRoute(route.params.policyID, route.params.categoryName))} + onBackButtonPress={() => + Navigation.goBack( + backTo + ? ROUTES.SETTINGS_CATEGORY_SETTINGS.getRoute(route.params.policyID, route.params.categoryName, backTo) + : ROUTES.WORKSPACE_CATEGORY_SETTINGS.getRoute(route.params.policyID, route.params.categoryName), + ) + } /> Navigation.goBack(ROUTES.WORKSPACE_CATEGORY_SETTINGS.getRoute(route.params.policyID, route.params.categoryName))} + onBackButtonPress={() => + Navigation.goBack( + backTo + ? ROUTES.SETTINGS_CATEGORY_SETTINGS.getRoute(route.params.policyID, categoryName, backTo) + : ROUTES.WORKSPACE_CATEGORY_SETTINGS.getRoute(route.params.policyID, categoryName), + ) + } /> { - if (backTo) { - Navigation.goBack(ROUTES.SETTINGS_CATEGORIES_ROOT.getRoute(policyID, backTo)); - return; - } - Navigation.goBack(); + Navigation.goBack(backTo ? ROUTES.SETTINGS_CATEGORIES_ROOT.getRoute(policyID, backTo) : undefined); }; useEffect(() => { @@ -115,11 +111,7 @@ function CategorySettingsPage({ }; const navigateToEditCategory = () => { - if (backTo) { - Navigation.navigate(ROUTES.SETTINGS_CATEGORY_EDIT.getRoute(policyID, policyCategory.name, backTo)); - return; - } - Navigation.navigate(ROUTES.WORKSPACE_CATEGORY_EDIT.getRoute(policyID, policyCategory.name)); + Navigation.navigate(backTo ? ROUTES.SETTINGS_CATEGORY_EDIT.getRoute(policyID, policyCategory.name, backTo) : ROUTES.WORKSPACE_CATEGORY_EDIT.getRoute(policyID, policyCategory.name)); }; const deleteCategory = () => { @@ -200,7 +192,11 @@ function CategorySettingsPage({ ); return; } - Navigation.navigate(ROUTES.WORKSPACE_CATEGORY_GL_CODE.getRoute(policyID, policyCategory.name)); + Navigation.navigate( + backTo + ? ROUTES.SETTINGS_CATEGORY_GL_CODE.getRoute(policyID, policyCategory.name, backTo) + : ROUTES.WORKSPACE_CATEGORY_GL_CODE.getRoute(policyID, policyCategory.name), + ); }} shouldShowRightIcon /> @@ -220,7 +216,11 @@ function CategorySettingsPage({ ); return; } - Navigation.navigate(ROUTES.WORKSPACE_CATEGORY_PAYROLL_CODE.getRoute(policyID, policyCategory.name)); + Navigation.navigate( + backTo + ? ROUTES.SETTINGS_CATEGORY_PAYROLL_CODE.getRoute(policyID, policyCategory.name, backTo) + : ROUTES.WORKSPACE_CATEGORY_PAYROLL_CODE.getRoute(policyID, policyCategory.name), + ); }} shouldShowRightIcon /> diff --git a/src/pages/workspace/categories/CreateCategoryPage.tsx b/src/pages/workspace/categories/CreateCategoryPage.tsx index 472cba1215af..ef365bac788c 100644 --- a/src/pages/workspace/categories/CreateCategoryPage.tsx +++ b/src/pages/workspace/categories/CreateCategoryPage.tsx @@ -33,11 +33,7 @@ function CreateCategoryPage({route, policyCategories}: CreateCategoryPageProps) const createCategory = useCallback( (values: FormOnyxValues) => { Category.createPolicyCategory(route.params.policyID, values.categoryName.trim()); - if (backTo) { - Navigation.goBack(ROUTES.SETTINGS_CATEGORIES_ROOT.getRoute(route.params.policyID, backTo)); - return; - } - Navigation.goBack(); + Navigation.goBack(backTo ? ROUTES.SETTINGS_CATEGORIES_ROOT.getRoute(route.params.policyID, backTo) : undefined); }, [backTo, route.params.policyID], ); @@ -56,7 +52,7 @@ function CreateCategoryPage({route, policyCategories}: CreateCategoryPageProps) > (backTo ? Navigation.goBack(ROUTES.SETTINGS_CATEGORIES_ROOT.getRoute(route.params.policyID, backTo)) : Navigation.goBack())} + onBackButtonPress={() => Navigation.goBack(backTo ? ROUTES.SETTINGS_CATEGORIES_ROOT.getRoute(route.params.policyID, backTo) : undefined)} /> - backTo - ? Navigation.goBack(ROUTES.SETTINGS_CATEGORY_SETTINGS.getRoute(route.params.policyID, route.params.categoryName, backTo)) - : Navigation.goBack(ROUTES.WORKSPACE_CATEGORY_SETTINGS.getRoute(route.params.policyID, route.params.categoryName)) + Navigation.goBack( + backTo + ? ROUTES.SETTINGS_CATEGORY_SETTINGS.getRoute(route.params.policyID, route.params.categoryName, backTo) + : ROUTES.WORKSPACE_CATEGORY_SETTINGS.getRoute(route.params.policyID, route.params.categoryName), + ) } /> ); } diff --git a/src/pages/workspace/categories/ImportedCategoriesPage.tsx b/src/pages/workspace/categories/ImportedCategoriesPage.tsx index 041e2b77c91e..869542b729ac 100644 --- a/src/pages/workspace/categories/ImportedCategoriesPage.tsx +++ b/src/pages/workspace/categories/ImportedCategoriesPage.tsx @@ -30,6 +30,7 @@ function ImportedCategoriesPage({route}: ImportedCategoriesPageProps) { const {containsHeader = true} = spreadsheet ?? {}; const [isValidationEnabled, setIsValidationEnabled] = useState(false); const policyID = route.params.policyID; + const backTo = route.params.backTo; const [policyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${policyID}`); const policy = usePolicy(policyID); const columnNames = generateColumnNames(spreadsheet?.data?.length ?? 0); @@ -120,7 +121,7 @@ function ImportedCategoriesPage({route}: ImportedCategoriesPageProps) { const closeImportPageAndModal = () => { setIsImportingCategories(false); closeImportPage(); - Navigation.navigate(ROUTES.WORKSPACE_CATEGORIES.getRoute(policyID)); + Navigation.navigate(backTo ? ROUTES.SETTINGS_CATEGORIES_ROOT.getRoute(policyID, backTo) : ROUTES.WORKSPACE_CATEGORIES.getRoute(policyID)); }; return ( @@ -130,7 +131,7 @@ function ImportedCategoriesPage({route}: ImportedCategoriesPageProps) { > Navigation.goBack(ROUTES.WORKSPACE_CATEGORIES_IMPORT.getRoute(policyID))} + onBackButtonPress={() => Navigation.goBack(backTo ? ROUTES.SETTINGS_CATEGORIES_IMPORT.getRoute(policyID, backTo) : ROUTES.WORKSPACE_CATEGORIES_IMPORT.getRoute(policyID))} /> { - if (backTo) { - Navigation.navigate(ROUTES.SETTINGS_CATEGORY_SETTINGS.getRoute(policyId, category.keyForList, backTo)); - return; - } - Navigation.navigate(ROUTES.WORKSPACE_CATEGORY_SETTINGS.getRoute(policyId, category.keyForList)); + Navigation.navigate( + backTo ? ROUTES.SETTINGS_CATEGORY_SETTINGS.getRoute(policyId, category.keyForList, backTo) : ROUTES.WORKSPACE_CATEGORY_SETTINGS.getRoute(policyId, category.keyForList), + ); }; const navigateToCategoriesSettings = () => { - if (backTo) { - Navigation.navigate(ROUTES.SETTINGS_CATEGORIES_SETTINGS.getRoute(policyId, backTo)); - return; - } - Navigation.navigate(ROUTES.WORKSPACE_CATEGORIES_SETTINGS.getRoute(policyId)); + Navigation.navigate(backTo ? ROUTES.SETTINGS_CATEGORIES_SETTINGS.getRoute(policyId, backTo) : ROUTES.WORKSPACE_CATEGORIES_SETTINGS.getRoute(policyId)); }; const navigateToCreateCategoryPage = () => { - if (backTo) { - Navigation.navigate(ROUTES.SETTINGS_CATEGORY_CREATE.getRoute(policyId, backTo)); - return; - } - Navigation.navigate(ROUTES.WORKSPACE_CATEGORY_CREATE.getRoute(policyId)); + Navigation.navigate(backTo ? ROUTES.SETTINGS_CATEGORY_CREATE.getRoute(policyId, backTo) : ROUTES.WORKSPACE_CATEGORY_CREATE.getRoute(policyId)); }; const dismissError = (item: PolicyOption) => { @@ -312,7 +302,7 @@ function WorkspaceCategoriesPage({route}: WorkspaceCategoriesPageProps) { Modal.close(() => setIsOfflineModalVisible(true)); return; } - Navigation.navigate(ROUTES.WORKSPACE_CATEGORIES_IMPORT.getRoute(policyId)); + Navigation.navigate(backTo ? ROUTES.SETTINGS_CATEGORIES_IMPORT.getRoute(policyId, backTo) : ROUTES.WORKSPACE_CATEGORIES_IMPORT.getRoute(policyId)); }, }); }