Skip to content

Commit 5a7b411

Browse files
committed
Remove useState in favor of Form.useWatch
1 parent a190951 commit 5a7b411

2 files changed

Lines changed: 17 additions & 45 deletions

File tree

  • src
    • entities/connection/ui/ConnectionTypeForm/components/ConnectionOracle
    • features/transfer/MutateTransferForm/components/StrategyParams/components/StrategyTypeForm

src/entities/connection/ui/ConnectionTypeForm/components/ConnectionOracle/index.tsx

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useCallback, useEffect, useState } from 'react';
1+
import React from 'react';
22
import { Form, Input, InputNumber } from 'antd';
33
import { useTranslation } from 'react-i18next';
44

@@ -9,30 +9,19 @@ export const ConnectionOracle = () => {
99
const { t } = useTranslation('connection');
1010
const form = Form.useFormInstance();
1111

12-
const [isServiceNameDisabled, setServiceNameDisabled] = useState(false);
13-
const [isSidDisabled, setSidDisabled] = useState(false);
12+
Form.useWatch(['connection_data', 'service_name'], form);
13+
Form.useWatch(['connection_data', 'sid'], form);
1414

15-
const changeDisabledFields = useCallback(() => {
16-
const serviceName = form.getFieldValue(['connection_data', 'service_name']);
17-
const sid = form.getFieldValue(['connection_data', 'sid']);
18-
setServiceNameDisabled(!!sid);
19-
setSidDisabled(!!serviceName);
20-
}, [form]);
15+
const serviceName = form.getFieldValue(['connection_data', 'service_name']);
16+
const sid = form.getFieldValue(['connection_data', 'sid']);
2117

2218
const handleFieldChange = () => {
23-
changeDisabledFields();
2419
form.validateFields([
2520
['connection_data', 'service_name'],
2621
['connection_data', 'sid'],
2722
]);
2823
};
2924

30-
//* It needs to validate required fields service_name and sid correctly if they have initial values
31-
useEffect(() => {
32-
// eslint-disable-next-line react-hooks/set-state-in-effect
33-
changeDisabledFields();
34-
}, [changeDisabledFields]);
35-
3625
return (
3726
<>
3827
<Form.Item label={t('host')} name={['connection_data', 'host']} rules={[{ required: true }]}>
@@ -46,24 +35,24 @@ export const ConnectionOracle = () => {
4635
name={['connection_data', 'service_name']}
4736
rules={[
4837
{
49-
required: !isServiceNameDisabled,
38+
required: !sid,
5039
message: t('oracle.serviceNameOrSidRequired'),
5140
},
5241
]}
5342
>
54-
<Input size="large" disabled={isServiceNameDisabled} onChange={handleFieldChange} placeholder="XEPDB1" />
43+
<Input size="large" disabled={!!sid} onChange={handleFieldChange} placeholder="XEPDB1" />
5544
</Form.Item>
5645
<Form.Item
5746
label={t('oracle.sid')}
5847
name={['connection_data', 'sid']}
5948
rules={[
6049
{
61-
required: !isSidDisabled,
50+
required: !serviceName,
6251
message: t('oracle.serviceNameOrSidRequired'),
6352
},
6453
]}
6554
>
66-
<Input size="large" disabled={isSidDisabled} onChange={handleFieldChange} />
55+
<Input size="large" disabled={!!serviceName} onChange={handleFieldChange} />
6756
</Form.Item>
6857
<ConnectionAuthBasic />
6958
</>

src/features/transfer/MutateTransferForm/components/StrategyParams/components/StrategyTypeForm/index.tsx

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import React, { useLayoutEffect, useState } from 'react';
1+
import React from 'react';
22
import { Select } from '@shared/ui';
33
import { Form } from 'antd';
4+
import { TransferStrategyType } from '@entities/transfer';
45
import { ConnectionType } from '@shared/types';
56
import { useTranslation } from 'react-i18next';
67

@@ -11,31 +12,13 @@ export const StrategyTypeForm = ({ sourceConnectionType }: StrategyTypeFormProps
1112
const { t } = useTranslation('transfer');
1213
const strategyParamsSelectOptions = useGetStrategyParamsSelectOptions();
1314

14-
const [isDisabled, setDisabled] = useState(false);
1515
const formInstance = Form.useFormInstance();
16+
Form.useWatch(['strategy_params', 'type'], formInstance);
1617

17-
// change strategy_params type value and disabled field state depending on source connection type
18-
useLayoutEffect(() => {
19-
switch (sourceConnectionType) {
20-
case ConnectionType.HDFS:
21-
case ConnectionType.S3:
22-
// eslint-disable-next-line react-hooks/set-state-in-effect
23-
setDisabled(true);
24-
return formInstance.setFieldValue(['strategy_params', 'type'], 'full');
25-
case ConnectionType.CLICKHOUSE:
26-
case ConnectionType.FTP:
27-
case ConnectionType.FTPS:
28-
case ConnectionType.HIVE:
29-
case ConnectionType.MSSQL:
30-
case ConnectionType.MYSQL:
31-
case ConnectionType.ORACLE:
32-
case ConnectionType.POSTGRES:
33-
case ConnectionType.SAMBA:
34-
case ConnectionType.SFTP:
35-
case ConnectionType.WEBDAV:
36-
return setDisabled(false);
37-
}
38-
}, [formInstance, sourceConnectionType]);
18+
const supportsOnlyFull = sourceConnectionType === ConnectionType.HDFS || sourceConnectionType === ConnectionType.S3;
19+
if (supportsOnlyFull) {
20+
formInstance.setFieldValue(['strategy_params', 'type'], TransferStrategyType.FULL);
21+
}
3922

4023
return (
4124
<Form.Item
@@ -48,7 +31,7 @@ export const StrategyTypeForm = ({ sourceConnectionType }: StrategyTypeFormProps
4831
size="large"
4932
options={strategyParamsSelectOptions}
5033
placeholder={t('selectStrategy')}
51-
disabled={isDisabled}
34+
disabled={supportsOnlyFull}
5235
/>
5336
</Form.Item>
5437
);

0 commit comments

Comments
 (0)