From 4e658e2936a8eeb7a8985ca4516bfd315b3dd642 Mon Sep 17 00:00:00 2001 From: huutech <20178761+huult@users.noreply.github.com> Date: Mon, 13 Apr 2026 18:36:16 +0700 Subject: [PATCH 1/2] migrate netSuite part2 v2 --- src/ROUTES.ts | 28 ++++++------------- src/SCREENS.ts | 4 +-- .../ModalStackNavigators/index.tsx | 8 +++--- .../RELATIONS/WORKSPACE_TO_RHP.ts | 4 +-- src/libs/Navigation/linkingConfig/config.ts | 8 +++--- src/libs/Navigation/types.ts | 6 ++-- ...tSuiteInvoiceItemPreferenceSelectPage.tsx} | 22 +++++++-------- ... DynamicNetSuiteInvoiceItemSelectPage.tsx} | 21 ++++++++------ .../NetSuiteExportConfigurationPage.tsx | 2 +- 9 files changed, 46 insertions(+), 57 deletions(-) rename src/pages/workspace/accounting/netsuite/export/{NetSuiteInvoiceItemPreferenceSelectPage.tsx => DynamicNetSuiteInvoiceItemPreferenceSelectPage.tsx} (87%) rename src/pages/workspace/accounting/netsuite/export/{NetSuiteInvoiceItemSelectPage.tsx => DynamicNetSuiteInvoiceItemSelectPage.tsx} (84%) diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 93afc48e0a97..6bf26f90b3e4 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -127,6 +127,14 @@ const DYNAMIC_ROUTES = { path: 'receivable-account/select', entryScreens: [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT], }, + POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT: { + path: 'invoice-item-preference/select', + entryScreens: [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_EXPORT], + }, + POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_SELECT: { + path: 'invoice-item/select', + entryScreens: [SCREENS.WORKSPACE.ACCOUNTING.DYNAMIC_NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT], + }, POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_PREFERRED_EXPORTER: { path: 'preferred-exporter', entryScreens: [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_EXPORT], @@ -3684,26 +3692,6 @@ const ROUTES = { // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(`workspaces/${policyID}/connections/netsuite/export/expenses/${expenseType as string}/destination/select` as const, backTo), }, - POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT: { - route: 'workspaces/:policyID/connections/netsuite/export/invoice-item-preference/select', - getRoute: (policyID: string | undefined, backTo?: string) => { - if (!policyID) { - Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT route'); - } - - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation - return getUrlWithBackToParam(`workspaces/${policyID}/connections/netsuite/export/invoice-item-preference/select` as const, backTo); - }, - }, - POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_SELECT: { - route: 'workspaces/:policyID/connections/netsuite/export/invoice-item-preference/invoice-item/select', - getRoute: (policyID: string | undefined) => { - if (!policyID) { - Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_SELECT route'); - } - return `workspaces/${policyID}/connections/netsuite/export/invoice-item-preference/invoice-item/select` as const; - }, - }, POLICY_ACCOUNTING_NETSUITE_TAX_POSTING_ACCOUNT_SELECT: { route: 'workspaces/:policyID/connections/netsuite/export/tax-posting-account/select', getRoute: (policyID: string) => `workspaces/${policyID}/connections/netsuite/export/tax-posting-account/select` as const, diff --git a/src/SCREENS.ts b/src/SCREENS.ts index 5fdccc4d6629..dd680a19d074 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -614,8 +614,8 @@ const SCREENS = { DYNAMIC_NETSUITE_EXPORT_EXPENSES_PAYABLE_ACCOUNT_SELECT: 'Dynamic_Policy_Accounting_NetSuite_Export_Expenses_Payable_Account_Select', DYNAMIC_NETSUITE_EXPORT_EXPENSES_JOURNAL_POSTING_PREFERENCE_SELECT: 'Dynamic_Policy_Accounting_NetSuite_Export_Expenses_Journal_Posting_Preference_Select', DYNAMIC_NETSUITE_RECEIVABLE_ACCOUNT_SELECT: 'Dynamic_Policy_Accounting_NetSuite_Receivable_Account_Select', - NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT: 'Policy_Accounting_NetSuite_Invoice_Item_Preference_Select', - NETSUITE_INVOICE_ITEM_SELECT: 'Policy_Accounting_NetSuite_Invoice_Item_Select', + DYNAMIC_NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT: 'Dynamic_Policy_Accounting_NetSuite_Invoice_Item_Preference_Select', + DYNAMIC_NETSUITE_INVOICE_ITEM_SELECT: 'Dynamic_Policy_Accounting_NetSuite_Invoice_Item_Select', NETSUITE_TAX_POSTING_ACCOUNT_SELECT: 'Policy_Accounting_NetSuite_Tax_Posting_Account_Select', NETSUITE_PROVINCIAL_TAX_POSTING_ACCOUNT_SELECT: 'Policy_Accounting_NetSuite_Provincial_Tax_Posting_Account_Select', NETSUITE_ADVANCED: 'Policy_Accounting_NetSuite_Advanced', diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx index 61b05ad6474c..bce27dea704c 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx @@ -727,10 +727,10 @@ const SettingsModalStackNavigator = createModalStackNavigator('../../../../pages/workspace/accounting/netsuite/export/DynamicNetSuiteExportExpensesJournalPostingPreferenceSelectPage').default, [SCREENS.WORKSPACE.ACCOUNTING.DYNAMIC_NETSUITE_RECEIVABLE_ACCOUNT_SELECT]: () => require('../../../../pages/workspace/accounting/netsuite/export/DynamicNetSuiteReceivableAccountSelectPage').default, - [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT]: () => - require('../../../../pages/workspace/accounting/netsuite/export/NetSuiteInvoiceItemPreferenceSelectPage').default, - [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_INVOICE_ITEM_SELECT]: () => - require('../../../../pages/workspace/accounting/netsuite/export/NetSuiteInvoiceItemSelectPage').default, + [SCREENS.WORKSPACE.ACCOUNTING.DYNAMIC_NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT]: () => + require('../../../../pages/workspace/accounting/netsuite/export/DynamicNetSuiteInvoiceItemPreferenceSelectPage').default, + [SCREENS.WORKSPACE.ACCOUNTING.DYNAMIC_NETSUITE_INVOICE_ITEM_SELECT]: () => + require('../../../../pages/workspace/accounting/netsuite/export/DynamicNetSuiteInvoiceItemSelectPage').default, [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_TAX_POSTING_ACCOUNT_SELECT]: () => require('../../../../pages/workspace/accounting/netsuite/export/NetSuiteTaxPostingAccountSelectPage').default, [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_PROVINCIAL_TAX_POSTING_ACCOUNT_SELECT]: () => diff --git a/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts b/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts index 0fbbab59be1e..b7f765f59908 100755 --- a/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts +++ b/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts @@ -134,8 +134,8 @@ const WORKSPACE_TO_RHP: Partial['config'] = { [SCREENS.WORKSPACE.ACCOUNTING.DYNAMIC_NETSUITE_EXPORT_EXPENSES_JOURNAL_POSTING_PREFERENCE_SELECT]: DYNAMIC_ROUTES.POLICY_ACCOUNTING_NETSUITE_EXPORT_EXPENSES_JOURNAL_POSTING_PREFERENCE_SELECT.path, [SCREENS.WORKSPACE.ACCOUNTING.DYNAMIC_NETSUITE_RECEIVABLE_ACCOUNT_SELECT]: DYNAMIC_ROUTES.POLICY_ACCOUNTING_NETSUITE_RECEIVABLE_ACCOUNT_SELECT.path, - [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT]: { - path: ROUTES.POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT.route, + [SCREENS.WORKSPACE.ACCOUNTING.DYNAMIC_NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT]: { + path: DYNAMIC_ROUTES.POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT.path, }, - [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_INVOICE_ITEM_SELECT]: { - path: ROUTES.POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_SELECT.route, + [SCREENS.WORKSPACE.ACCOUNTING.DYNAMIC_NETSUITE_INVOICE_ITEM_SELECT]: { + path: DYNAMIC_ROUTES.POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_SELECT.path, }, [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_TAX_POSTING_ACCOUNT_SELECT]: { path: ROUTES.POLICY_ACCOUNTING_NETSUITE_TAX_POSTING_ACCOUNT_SELECT.route, diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index b1e24a50f063..fe0966859a6d 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -1022,12 +1022,10 @@ type SettingsNavigatorParamList = { [SCREENS.WORKSPACE.ACCOUNTING.DYNAMIC_NETSUITE_RECEIVABLE_ACCOUNT_SELECT]: { policyID: string; }; - [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT]: { + [SCREENS.WORKSPACE.ACCOUNTING.DYNAMIC_NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT]: { 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.ACCOUNTING.NETSUITE_INVOICE_ITEM_SELECT]: { + [SCREENS.WORKSPACE.ACCOUNTING.DYNAMIC_NETSUITE_INVOICE_ITEM_SELECT]: { policyID: string; }; [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_TAX_POSTING_ACCOUNT_SELECT]: { diff --git a/src/pages/workspace/accounting/netsuite/export/NetSuiteInvoiceItemPreferenceSelectPage.tsx b/src/pages/workspace/accounting/netsuite/export/DynamicNetSuiteInvoiceItemPreferenceSelectPage.tsx similarity index 87% rename from src/pages/workspace/accounting/netsuite/export/NetSuiteInvoiceItemPreferenceSelectPage.tsx rename to src/pages/workspace/accounting/netsuite/export/DynamicNetSuiteInvoiceItemPreferenceSelectPage.tsx index 6fbd6ab23ad4..77574b04b05f 100644 --- a/src/pages/workspace/accounting/netsuite/export/NetSuiteInvoiceItemPreferenceSelectPage.tsx +++ b/src/pages/workspace/accounting/netsuite/export/DynamicNetSuiteInvoiceItemPreferenceSelectPage.tsx @@ -1,4 +1,3 @@ -import {useRoute} from '@react-navigation/native'; import React, {useCallback, useEffect, useMemo, useRef} from 'react'; import {View} from 'react-native'; import type {ValueOf} from 'type-fest'; @@ -9,32 +8,31 @@ import SelectionList from '@components/SelectionList'; import RadioListItem from '@components/SelectionList/ListItem/RadioListItem'; import type {ListItem, SelectionListHandle} from '@components/SelectionList/types'; import type {SelectorType} from '@components/SelectionScreen'; +import useDynamicBackPath from '@hooks/useDynamicBackPath'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; import {updateNetSuiteInvoiceItemPreference} from '@libs/actions/connections/NetSuiteCommands'; import {clearNetSuiteErrorField} from '@libs/actions/Policy/Policy'; import {getLatestErrorField} from '@libs/ErrorUtils'; -import type {PlatformStackRouteProp} from '@libs/Navigation/PlatformStackNavigation/types'; -import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import {areSettingsInErrorFields, findSelectedInvoiceItemWithDefaultSelect, settingsPendingAction} from '@libs/PolicyUtils'; import Navigation from '@navigation/Navigation'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import CONST from '@src/CONST'; -import ROUTES from '@src/ROUTES'; -import type SCREENS from '@src/SCREENS'; +import {DYNAMIC_ROUTES} from '@src/ROUTES'; type MenuListItem = ListItem & { value: ValueOf; }; -function NetSuiteInvoiceItemPreferenceSelectPage({policy}: WithPolicyConnectionsProps) { +function DynamicNetSuiteInvoiceItemPreferenceSelectPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); const policyID = policy?.id; const config = policy?.connections?.netsuite.options.config; - const route = useRoute>(); const selectionListRef = useRef>(null); + const backPath = useDynamicBackPath(DYNAMIC_ROUTES.POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT.path); const {items} = policy?.connections?.netsuite?.options.data ?? {}; const selectedItem = useMemo(() => findSelectedInvoiceItemWithDefaultSelect(items, config?.invoiceItem), [items, config?.invoiceItem]); @@ -53,8 +51,8 @@ function NetSuiteInvoiceItemPreferenceSelectPage({policy}: WithPolicyConnections ); const goBack = useCallback(() => { - Navigation.goBack(route.params.backTo ?? (policyID && ROUTES.POLICY_ACCOUNTING_NETSUITE_EXPORT.getRoute(policyID))); - }, [route.params.backTo, policyID]); + Navigation.goBack(backPath); + }, [backPath]); const selectInvoicePreference = useCallback( (row: MenuListItem) => { @@ -84,7 +82,7 @@ function NetSuiteInvoiceItemPreferenceSelectPage({policy}: WithPolicyConnections onBackButtonPress={goBack} accessVariants={[CONST.POLICY.ACCESS_VARIANTS.ADMIN]} featureName={CONST.POLICY.MORE_FEATURES.ARE_CONNECTIONS_ENABLED} - displayName="NetSuiteInvoiceItemPreferenceSelectPage" + displayName="DynamicNetSuiteInvoiceItemPreferenceSelectPage" policyID={policyID} connectionName={CONST.POLICY.CONNECTIONS.NAME.NETSUITE} shouldUseScrollView={false} @@ -125,7 +123,7 @@ function NetSuiteInvoiceItemPreferenceSelectPage({policy}: WithPolicyConnections if (!policyID) { return; } - Navigation.navigate(ROUTES.POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_SELECT.getRoute(policyID)); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_SELECT.path)); }} brickRoadIndicator={areSettingsInErrorFields([CONST.NETSUITE_CONFIG.INVOICE_ITEM], config?.errorFields) ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined} /> @@ -136,4 +134,4 @@ function NetSuiteInvoiceItemPreferenceSelectPage({policy}: WithPolicyConnections ); } -export default withPolicyConnections(NetSuiteInvoiceItemPreferenceSelectPage); +export default withPolicyConnections(DynamicNetSuiteInvoiceItemPreferenceSelectPage); diff --git a/src/pages/workspace/accounting/netsuite/export/NetSuiteInvoiceItemSelectPage.tsx b/src/pages/workspace/accounting/netsuite/export/DynamicNetSuiteInvoiceItemSelectPage.tsx similarity index 84% rename from src/pages/workspace/accounting/netsuite/export/NetSuiteInvoiceItemSelectPage.tsx rename to src/pages/workspace/accounting/netsuite/export/DynamicNetSuiteInvoiceItemSelectPage.tsx index ad350c55360d..60927c44f47b 100644 --- a/src/pages/workspace/accounting/netsuite/export/NetSuiteInvoiceItemSelectPage.tsx +++ b/src/pages/workspace/accounting/netsuite/export/DynamicNetSuiteInvoiceItemSelectPage.tsx @@ -3,6 +3,7 @@ import BlockingView from '@components/BlockingViews/BlockingView'; import RadioListItem from '@components/SelectionList/ListItem/RadioListItem'; import type {SelectorType} from '@components/SelectionScreen'; import SelectionScreen from '@components/SelectionScreen'; +import useDynamicBackPath from '@hooks/useDynamicBackPath'; import {useMemoizedLazyIllustrations} from '@hooks/useLazyAsset'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; @@ -15,28 +16,32 @@ import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import variables from '@styles/variables'; import {clearNetSuiteErrorField} from '@userActions/Policy/Policy'; import CONST from '@src/CONST'; -import ROUTES from '@src/ROUTES'; +import {DYNAMIC_ROUTES} from '@src/ROUTES'; -function NetSuiteInvoiceItemSelectPage({policy}: WithPolicyConnectionsProps) { +function DynamicNetSuiteInvoiceItemSelectPage({policy}: WithPolicyConnectionsProps) { const styles = useThemeStyles(); const {translate} = useLocalize(); const illustrations = useMemoizedLazyIllustrations(['Telescope']); const policyID = policy?.id; - const config = policy?.connections?.netsuite?.options.config; + const backPath = useDynamicBackPath(DYNAMIC_ROUTES.POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_SELECT.path); const netsuiteInvoiceItemOptions = useMemo(() => getNetSuiteInvoiceItemOptions(policy ?? undefined, config?.invoiceItem), [config?.invoiceItem, policy]); const initiallyFocusedOptionKey = useMemo(() => netsuiteInvoiceItemOptions?.find((mode) => mode.isSelected)?.keyForList, [netsuiteInvoiceItemOptions]); + const goBack = useCallback(() => { + Navigation.goBack(backPath); + }, [backPath]); + const updateInvoiceItem = useCallback( ({value}: SelectorType) => { if (config?.invoiceItem !== value && policyID) { updateNetSuiteInvoiceItem(policyID, value, config?.invoiceItem); } - Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT.getRoute(policyID), {compareParams: false}); + goBack(); }, - [policyID, config?.invoiceItem], + [policyID, config?.invoiceItem, goBack], ); const listEmptyContent = useMemo( @@ -58,12 +63,12 @@ function NetSuiteInvoiceItemSelectPage({policy}: WithPolicyConnectionsProps) { policyID={policyID} accessVariants={[CONST.POLICY.ACCESS_VARIANTS.ADMIN, CONST.POLICY.ACCESS_VARIANTS.CONTROL]} featureName={CONST.POLICY.MORE_FEATURES.ARE_CONNECTIONS_ENABLED} - displayName="NetSuiteInvoiceItemSelectPage" + displayName="DynamicNetSuiteInvoiceItemSelectPage" data={netsuiteInvoiceItemOptions} listItem={RadioListItem} onSelectRow={updateInvoiceItem} initiallyFocusedOptionKey={initiallyFocusedOptionKey} - onBackButtonPress={() => Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT.getRoute(policyID), {compareParams: false})} + onBackButtonPress={goBack} title="workspace.netsuite.invoiceItem.label" listEmptyContent={listEmptyContent} connectionName={CONST.POLICY.CONNECTIONS.NAME.NETSUITE} @@ -76,4 +81,4 @@ function NetSuiteInvoiceItemSelectPage({policy}: WithPolicyConnectionsProps) { ); } -export default withPolicyConnections(NetSuiteInvoiceItemSelectPage); +export default withPolicyConnections(DynamicNetSuiteInvoiceItemSelectPage); diff --git a/src/pages/workspace/accounting/netsuite/export/NetSuiteExportConfigurationPage.tsx b/src/pages/workspace/accounting/netsuite/export/NetSuiteExportConfigurationPage.tsx index 5ee07b3e71b3..c91377625515 100644 --- a/src/pages/workspace/accounting/netsuite/export/NetSuiteExportConfigurationPage.tsx +++ b/src/pages/workspace/accounting/netsuite/export/NetSuiteExportConfigurationPage.tsx @@ -151,7 +151,7 @@ function NetSuiteExportConfigurationPage({policy}: WithPolicyConnectionsProps) { type: 'menuitem', title: invoiceItemValue, description: translate('workspace.netsuite.invoiceItem.label'), - onPress: !policyID ? undefined : () => Navigation.navigate(ROUTES.POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT.getRoute(policyID, Navigation.getActiveRoute())), + onPress: !policyID ? undefined : () => Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT.path)), subscribedSettings: [CONST.NETSUITE_CONFIG.INVOICE_ITEM_PREFERENCE, ...(shouldShowInvoiceItemMenuItem(config) ? [CONST.NETSUITE_CONFIG.INVOICE_ITEM] : [])], }, { From 6fa9ff73a1b9c22846abb33521db6deff80aa7be Mon Sep 17 00:00:00 2001 From: huutech <20178761+huult@users.noreply.github.com> Date: Mon, 20 Apr 2026 11:01:21 +0700 Subject: [PATCH 2/2] update old route path --- src/libs/Navigation/linkingConfig/OldRoutes.ts | 1 + tests/navigation/getMatchingNewRouteTest.ts | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/src/libs/Navigation/linkingConfig/OldRoutes.ts b/src/libs/Navigation/linkingConfig/OldRoutes.ts index b234737e4058..cb88d9919783 100644 --- a/src/libs/Navigation/linkingConfig/OldRoutes.ts +++ b/src/libs/Navigation/linkingConfig/OldRoutes.ts @@ -5,6 +5,7 @@ const oldRoutes: Record = { '/r/*/settings/name': '/r/$1/details/settings/name', '/workspaces/*/overview/address': '/workspaces/$1/overview/workspace-address', '/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', '/flag/*/*': '/r/$1/flag/$1/$2', '/home-page': '/home', /* eslint-enable @typescript-eslint/naming-convention */ diff --git a/tests/navigation/getMatchingNewRouteTest.ts b/tests/navigation/getMatchingNewRouteTest.ts index ef98dc803e4b..bf387faf34c4 100644 --- a/tests/navigation/getMatchingNewRouteTest.ts +++ b/tests/navigation/getMatchingNewRouteTest.ts @@ -44,6 +44,18 @@ describe('getBestMatchingPath', () => { ); }); + it('redirects old NetSuite invoice item preference path to the new dynamic suffix shape', () => { + expect(getMatchingNewRoute('/workspaces/abc/connections/netsuite/export/invoice-item-preference/invoice-item/select')).toBe( + '/workspaces/abc/connections/netsuite/export/invoice-item-preference/select/invoice-item/select', + ); + }); + + it('preserves query params when redirecting old NetSuite invoice item preference path', () => { + expect(getMatchingNewRoute('/workspaces/abc/connections/netsuite/export/invoice-item-preference/invoice-item/select?backTo=/home')).toBe( + '/workspaces/abc/connections/netsuite/export/invoice-item-preference/select/invoice-item/select?backTo=/home', + ); + }); + it('redirects old flag comment path to report-based dynamic route', () => { expect(getMatchingNewRoute('/flag/123/456')).toBe('/r/123/flag/123/456'); });