Skip to content

Commit 909a308

Browse files
authored
Merge pull request Expensify#65670 from daledah/fix/65407
fix: go back when deleting Netsuite custom list
2 parents 6ecbf8f + 018f304 commit 909a308

2 files changed

Lines changed: 31 additions & 20 deletions

File tree

src/ROUTES.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2226,8 +2226,12 @@ const ROUTES = {
22262226
},
22272227
POLICY_ACCOUNTING_NETSUITE_IMPORT_CUSTOM_FIELD_MAPPING: {
22282228
route: 'workspaces/:policyID/accounting/netsuite/import/custom/:importCustomField',
2229-
getRoute: (policyID: string, importCustomField: ValueOf<typeof CONST.NETSUITE_CONFIG.IMPORT_CUSTOM_FIELDS>) =>
2230-
`workspaces/${policyID}/accounting/netsuite/import/custom/${importCustomField as string}` as const,
2229+
getRoute: (policyID: string | undefined, importCustomField: ValueOf<typeof CONST.NETSUITE_CONFIG.IMPORT_CUSTOM_FIELDS>) => {
2230+
if (!policyID) {
2231+
Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_NETSUITE_IMPORT_CUSTOM_FIELD_MAPPING route');
2232+
}
2233+
return `workspaces/${policyID}/accounting/netsuite/import/custom/${importCustomField as string}` as const;
2234+
},
22312235
},
22322236
POLICY_ACCOUNTING_NETSUITE_IMPORT_CUSTOM_FIELD_VIEW: {
22332237
route: 'workspaces/:policyID/accounting/netsuite/import/custom/:importCustomField/view/:valueIndex',
@@ -2236,8 +2240,12 @@ const ROUTES = {
22362240
},
22372241
POLICY_ACCOUNTING_NETSUITE_IMPORT_CUSTOM_FIELD_EDIT: {
22382242
route: 'workspaces/:policyID/accounting/netsuite/import/custom/:importCustomField/edit/:valueIndex/:fieldName',
2239-
getRoute: (policyID: string, importCustomField: ValueOf<typeof CONST.NETSUITE_CONFIG.IMPORT_CUSTOM_FIELDS>, valueIndex: number, fieldName: string) =>
2240-
`workspaces/${policyID}/accounting/netsuite/import/custom/${importCustomField as string}/edit/${valueIndex}/${fieldName}` as const,
2243+
getRoute: (policyID: string | undefined, importCustomField: ValueOf<typeof CONST.NETSUITE_CONFIG.IMPORT_CUSTOM_FIELDS>, valueIndex: number, fieldName: string) => {
2244+
if (!policyID) {
2245+
Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_NETSUITE_IMPORT_CUSTOM_FIELD_EDIT route');
2246+
}
2247+
return `workspaces/${policyID}/accounting/netsuite/import/custom/${importCustomField as string}/edit/${valueIndex}/${fieldName}` as const;
2248+
},
22412249
},
22422250
POLICY_ACCOUNTING_NETSUITE_IMPORT_CUSTOM_LIST_ADD: {
22432251
route: 'workspaces/:policyID/accounting/netsuite/import/custom-list/new',

src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldView.tsx

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,12 @@ import OfflineWithFeedback from '@components/OfflineWithFeedback';
99
import useLocalize from '@hooks/useLocalize';
1010
import useThemeStyles from '@hooks/useThemeStyles';
1111
import {updateNetSuiteCustomLists, updateNetSuiteCustomSegments} from '@libs/actions/connections/NetSuiteCommands';
12-
import * as ErrorUtils from '@libs/ErrorUtils';
12+
import {clearNetSuiteErrorField, clearNetSuitePendingField, removeNetSuiteCustomFieldByIndex} from '@libs/actions/Policy/Policy';
13+
import {getLatestErrorField} from '@libs/ErrorUtils';
1314
import Navigation from '@libs/Navigation/Navigation';
14-
import * as PolicyUtils from '@libs/PolicyUtils';
15-
import {settingsPendingAction} from '@libs/PolicyUtils';
15+
import {getNameFromNetSuiteCustomField, isNetSuiteCustomFieldPropertyEditable, isNetSuiteCustomSegmentRecord, settingsPendingAction} from '@libs/PolicyUtils';
1616
import withPolicyConnections from '@pages/workspace/withPolicyConnections';
1717
import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections';
18-
import * as Policy from '@userActions/Policy/Policy';
1918
import CONST from '@src/CONST';
2019
import type {TranslationPaths} from '@src/languages/types';
2120
import ROUTES from '@src/ROUTES';
@@ -43,7 +42,7 @@ function NetSuiteImportCustomFieldView({
4342
params: {importCustomField, valueIndex},
4443
},
4544
}: NetSuiteImportCustomFieldViewProps) {
46-
const policyID = policy?.id ?? '-1';
45+
const policyID = policy?.id;
4746
const styles = useThemeStyles();
4847
const {translate} = useLocalize();
4948
const [isRemoveModalOpen, setIsRemoveModalOpen] = useState<boolean>(false);
@@ -53,16 +52,17 @@ function NetSuiteImportCustomFieldView({
5352

5453
const customField: CustomField | undefined = allRecords[valueIndex];
5554
const fieldList =
56-
customField && PolicyUtils.isNetSuiteCustomSegmentRecord(customField)
57-
? CONST.NETSUITE_CONFIG.CUSTOM_SEGMENT_FIELDS
58-
: [INPUT_IDS.LIST_NAME, INPUT_IDS.TRANSACTION_FIELD_ID, INPUT_IDS.MAPPING];
55+
customField && isNetSuiteCustomSegmentRecord(customField) ? CONST.NETSUITE_CONFIG.CUSTOM_SEGMENT_FIELDS : [INPUT_IDS.LIST_NAME, INPUT_IDS.TRANSACTION_FIELD_ID, INPUT_IDS.MAPPING];
5956

6057
const removeRecord = useCallback(() => {
58+
if (!policyID) {
59+
return;
60+
}
6161
if (customField) {
6262
// We allow multiple custom list records with the same internalID. Hence it is safe to remove by index.
6363
const filteredRecords = allRecords.filter((_, index) => index !== Number(valueIndex));
6464

65-
if (PolicyUtils.isNetSuiteCustomSegmentRecord(customField)) {
65+
if (isNetSuiteCustomSegmentRecord(customField)) {
6666
updateNetSuiteCustomSegments(
6767
policyID,
6868
filteredRecords as NetSuiteCustomSegment[],
@@ -80,13 +80,13 @@ function NetSuiteImportCustomFieldView({
8080
);
8181
}
8282
}
83-
Navigation.navigate(ROUTES.POLICY_ACCOUNTING_NETSUITE_IMPORT_CUSTOM_FIELD_MAPPING.getRoute(policyID, importCustomField));
83+
Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_IMPORT_CUSTOM_FIELD_MAPPING.getRoute(policyID, importCustomField));
8484
}, [allRecords, customField, importCustomField, policyID, valueIndex]);
8585

8686
return (
8787
<ConnectionLayout
8888
displayName={NetSuiteImportCustomFieldView.displayName}
89-
headerTitleAlreadyTranslated={customField ? PolicyUtils.getNameFromNetSuiteCustomField(customField) : ''}
89+
headerTitleAlreadyTranslated={customField ? getNameFromNetSuiteCustomField(customField) : ''}
9090
accessVariants={[CONST.POLICY.ACCESS_VARIANTS.ADMIN, CONST.POLICY.ACCESS_VARIANTS.CONTROL]}
9191
policyID={policyID}
9292
featureName={CONST.POLICY.MORE_FEATURES.ARE_CONNECTIONS_ENABLED}
@@ -98,21 +98,24 @@ function NetSuiteImportCustomFieldView({
9898
>
9999
{!!customField && (
100100
<OfflineWithFeedback
101-
errors={ErrorUtils.getLatestErrorField(config ?? {}, `${importCustomField}_${valueIndex}`)}
101+
errors={getLatestErrorField(config ?? {}, `${importCustomField}_${valueIndex}`)}
102102
errorRowStyles={[styles.ph5, styles.pv3]}
103103
pendingAction={settingsPendingAction([`${importCustomField}_${valueIndex}`], config?.pendingFields)}
104104
onClose={() => {
105-
Policy.clearNetSuiteErrorField(policyID, `${importCustomField}_${valueIndex}`);
105+
if (!policyID) {
106+
return;
107+
}
108+
clearNetSuiteErrorField(policyID, `${importCustomField}_${valueIndex}`);
106109
const pendingAction = settingsPendingAction([`${importCustomField}_${valueIndex}`], config?.pendingFields);
107110
if (pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD) {
108-
Policy.removeNetSuiteCustomFieldByIndex(allRecords, policyID, importCustomField, valueIndex);
111+
removeNetSuiteCustomFieldByIndex(allRecords, policyID, importCustomField, valueIndex);
109112
Navigation.goBack();
110113
}
111-
Policy.clearNetSuitePendingField(policyID, `${importCustomField}_${valueIndex}`);
114+
clearNetSuitePendingField(policyID, `${importCustomField}_${valueIndex}`);
112115
}}
113116
>
114117
{fieldList.map((fieldName) => {
115-
const isEditable = !config?.pendingFields?.[importCustomField] && PolicyUtils.isNetSuiteCustomFieldPropertyEditable(customField, fieldName);
118+
const isEditable = !config?.pendingFields?.[importCustomField] && isNetSuiteCustomFieldPropertyEditable(customField, fieldName);
116119
return (
117120
<MenuItemWithTopDescription
118121
key={fieldName}

0 commit comments

Comments
 (0)