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 cb6513e785c1c..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[], @@ -80,13 +80,13 @@ 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 ( {!!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 (