From f052397c8ee42c43baa25dd3ca751a17ff29d30a Mon Sep 17 00:00:00 2001 From: daledah Date: Wed, 9 Jul 2025 00:02:00 +0700 Subject: [PATCH 1/2] fix: go back when deleting Netsuite custom list --- .../netsuite/import/NetSuiteImportCustomFieldView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldView.tsx b/src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldView.tsx index cb6513e785c1c..f3086d5d24634 100644 --- a/src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldView.tsx +++ b/src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldView.tsx @@ -80,7 +80,7 @@ function NetSuiteImportCustomFieldView({ ); } } - Navigation.navigate(ROUTES.POLICY_ACCOUNTING_NETSUITE_IMPORT_CUSTOM_FIELD_MAPPING.getRoute(policyID, importCustomField)); + Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_IMPORT_CUSTOM_FIELD_MAPPING.getRoute(policyID, importCustomField)); }, [allRecords, customField, importCustomField, policyID, valueIndex]); return ( From 018f30432c2cfa4015931d4f058fc64db09c1188 Mon Sep 17 00:00:00 2001 From: daledah Date: Wed, 9 Jul 2025 00:06:16 +0700 Subject: [PATCH 2/2] fix: lint --- src/ROUTES.ts | 16 ++++++--- .../import/NetSuiteImportCustomFieldView.tsx | 33 ++++++++++--------- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/ROUTES.ts b/src/ROUTES.ts index a89e1c753fee9..66e5c07fcaa9e 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -2218,8 +2218,12 @@ const ROUTES = { }, POLICY_ACCOUNTING_NETSUITE_IMPORT_CUSTOM_FIELD_MAPPING: { route: 'workspaces/:policyID/accounting/netsuite/import/custom/:importCustomField', - getRoute: (policyID: string, importCustomField: ValueOf) => - `workspaces/${policyID}/accounting/netsuite/import/custom/${importCustomField as string}` as const, + getRoute: (policyID: string | undefined, importCustomField: ValueOf) => { + if (!policyID) { + Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_NETSUITE_IMPORT_CUSTOM_FIELD_MAPPING route'); + } + return `workspaces/${policyID}/accounting/netsuite/import/custom/${importCustomField as string}` as const; + }, }, POLICY_ACCOUNTING_NETSUITE_IMPORT_CUSTOM_FIELD_VIEW: { route: 'workspaces/:policyID/accounting/netsuite/import/custom/:importCustomField/view/:valueIndex', @@ -2228,8 +2232,12 @@ const ROUTES = { }, POLICY_ACCOUNTING_NETSUITE_IMPORT_CUSTOM_FIELD_EDIT: { route: 'workspaces/:policyID/accounting/netsuite/import/custom/:importCustomField/edit/:valueIndex/:fieldName', - getRoute: (policyID: string, importCustomField: ValueOf, valueIndex: number, fieldName: string) => - `workspaces/${policyID}/accounting/netsuite/import/custom/${importCustomField as string}/edit/${valueIndex}/${fieldName}` as const, + getRoute: (policyID: string | undefined, importCustomField: ValueOf, valueIndex: number, fieldName: string) => { + if (!policyID) { + Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_NETSUITE_IMPORT_CUSTOM_FIELD_EDIT route'); + } + return `workspaces/${policyID}/accounting/netsuite/import/custom/${importCustomField as string}/edit/${valueIndex}/${fieldName}` as const; + }, }, POLICY_ACCOUNTING_NETSUITE_IMPORT_CUSTOM_LIST_ADD: { route: 'workspaces/:policyID/accounting/netsuite/import/custom-list/new', diff --git a/src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldView.tsx b/src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldView.tsx index f3086d5d24634..6f25fe3c44e5d 100644 --- a/src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldView.tsx +++ b/src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldView.tsx @@ -9,13 +9,12 @@ import OfflineWithFeedback from '@components/OfflineWithFeedback'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; import {updateNetSuiteCustomLists, updateNetSuiteCustomSegments} from '@libs/actions/connections/NetSuiteCommands'; -import * as ErrorUtils from '@libs/ErrorUtils'; +import {clearNetSuiteErrorField, clearNetSuitePendingField, removeNetSuiteCustomFieldByIndex} from '@libs/actions/Policy/Policy'; +import {getLatestErrorField} from '@libs/ErrorUtils'; import Navigation from '@libs/Navigation/Navigation'; -import * as PolicyUtils from '@libs/PolicyUtils'; -import {settingsPendingAction} from '@libs/PolicyUtils'; +import {getNameFromNetSuiteCustomField, isNetSuiteCustomFieldPropertyEditable, isNetSuiteCustomSegmentRecord, settingsPendingAction} from '@libs/PolicyUtils'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; -import * as Policy from '@userActions/Policy/Policy'; import CONST from '@src/CONST'; import type {TranslationPaths} from '@src/languages/types'; import ROUTES from '@src/ROUTES'; @@ -43,7 +42,7 @@ function NetSuiteImportCustomFieldView({ params: {importCustomField, valueIndex}, }, }: NetSuiteImportCustomFieldViewProps) { - const policyID = policy?.id ?? '-1'; + const policyID = policy?.id; const styles = useThemeStyles(); const {translate} = useLocalize(); const [isRemoveModalOpen, setIsRemoveModalOpen] = useState(false); @@ -53,16 +52,17 @@ function NetSuiteImportCustomFieldView({ const customField: CustomField | undefined = allRecords[valueIndex]; const fieldList = - customField && PolicyUtils.isNetSuiteCustomSegmentRecord(customField) - ? CONST.NETSUITE_CONFIG.CUSTOM_SEGMENT_FIELDS - : [INPUT_IDS.LIST_NAME, INPUT_IDS.TRANSACTION_FIELD_ID, INPUT_IDS.MAPPING]; + customField && isNetSuiteCustomSegmentRecord(customField) ? CONST.NETSUITE_CONFIG.CUSTOM_SEGMENT_FIELDS : [INPUT_IDS.LIST_NAME, INPUT_IDS.TRANSACTION_FIELD_ID, INPUT_IDS.MAPPING]; const removeRecord = useCallback(() => { + if (!policyID) { + return; + } if (customField) { // We allow multiple custom list records with the same internalID. Hence it is safe to remove by index. const filteredRecords = allRecords.filter((_, index) => index !== Number(valueIndex)); - if (PolicyUtils.isNetSuiteCustomSegmentRecord(customField)) { + if (isNetSuiteCustomSegmentRecord(customField)) { updateNetSuiteCustomSegments( policyID, filteredRecords as NetSuiteCustomSegment[], @@ -86,7 +86,7 @@ function NetSuiteImportCustomFieldView({ return ( {!!customField && ( { - Policy.clearNetSuiteErrorField(policyID, `${importCustomField}_${valueIndex}`); + if (!policyID) { + return; + } + clearNetSuiteErrorField(policyID, `${importCustomField}_${valueIndex}`); const pendingAction = settingsPendingAction([`${importCustomField}_${valueIndex}`], config?.pendingFields); if (pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD) { - Policy.removeNetSuiteCustomFieldByIndex(allRecords, policyID, importCustomField, valueIndex); + removeNetSuiteCustomFieldByIndex(allRecords, policyID, importCustomField, valueIndex); Navigation.goBack(); } - Policy.clearNetSuitePendingField(policyID, `${importCustomField}_${valueIndex}`); + clearNetSuitePendingField(policyID, `${importCustomField}_${valueIndex}`); }} > {fieldList.map((fieldName) => { - const isEditable = !config?.pendingFields?.[importCustomField] && PolicyUtils.isNetSuiteCustomFieldPropertyEditable(customField, fieldName); + const isEditable = !config?.pendingFields?.[importCustomField] && isNetSuiteCustomFieldPropertyEditable(customField, fieldName); return (