diff --git a/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionAuthBasic/index.tsx b/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionAuthBasic/index.tsx
index d9960b5e..450542cd 100644
--- a/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionAuthBasic/index.tsx
+++ b/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionAuthBasic/index.tsx
@@ -8,7 +8,10 @@ export const ConnectionAuthBasic = () => {
return (
<>
-
+ {/* Hide Form.Item control, because its value is set in 'useSelectConnectionType' hook */}
+
+
+
diff --git a/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionAuthS3/index.tsx b/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionAuthS3/index.tsx
index 5fd5d07b..7ede18ad 100644
--- a/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionAuthS3/index.tsx
+++ b/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionAuthS3/index.tsx
@@ -8,7 +8,10 @@ export const ConnectionAuthS3 = () => {
return (
<>
-
+ {/* Hide Form.Item control, because its value is set in 'useSelectConnectionType' hook */}
+
+
+
diff --git a/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionOracle/index.tsx b/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionOracle/index.tsx
index 70eacf50..915b508b 100644
--- a/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionOracle/index.tsx
+++ b/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionOracle/index.tsx
@@ -11,15 +11,18 @@ export const ConnectionOracle = () => {
const [isSidDisabled, setSidDisabled] = useState(false);
const changeDisabledFields = useCallback(() => {
- const serviceName = form.getFieldValue('service_name');
- const sid = form.getFieldValue('sid');
+ const serviceName = form.getFieldValue(['connection_data', 'service_name']);
+ const sid = form.getFieldValue(['connection_data', 'sid']);
setServiceNameDisabled(!!sid);
setSidDisabled(!!serviceName);
}, [form]);
const handleFieldChange = () => {
changeDisabledFields();
- form.validateFields(['service_name', 'sid']);
+ form.validateFields([
+ ['connection_data', 'service_name'],
+ ['connection_data', 'sid'],
+ ]);
};
//* It needs to validate required fields service_name and sid correctly if they have initial values
diff --git a/src/entities/group/api/hooks/useGetInitialGroup/index.ts b/src/entities/group/api/hooks/useGetInitialGroup/index.ts
index e5387a1d..2d29e456 100644
--- a/src/entities/group/api/hooks/useGetInitialGroup/index.ts
+++ b/src/entities/group/api/hooks/useGetInitialGroup/index.ts
@@ -10,5 +10,6 @@ export const useGetInitialGroup = ({ id }: GetGroupRequest): UseQueryResult groupService.getGroup({ id }),
enabled: !!id,
+ throwOnError: false,
});
};
diff --git a/src/entities/transfer/api/types.ts b/src/entities/transfer/api/types.ts
index d85158a7..fd018b81 100644
--- a/src/entities/transfer/api/types.ts
+++ b/src/entities/transfer/api/types.ts
@@ -38,6 +38,7 @@ export type TransferConnectionParamFieldName = 'source_params' | 'target_params'
export interface TransferStrategyParams {
type: 'full' | 'incremental';
+ increment_by?: string;
}
interface TransferParamsHive {
diff --git a/src/entities/transfer/index.ts b/src/entities/transfer/index.ts
index 93c999ea..1a554c55 100644
--- a/src/entities/transfer/index.ts
+++ b/src/entities/transfer/index.ts
@@ -1,3 +1,2 @@
export * from './api';
-export * from './constants';
export * from './ui';
diff --git a/src/features/transfer/MutateTransferForm/components/StrategyParams/components/IncrementByForm/index.tsx b/src/features/transfer/MutateTransferForm/components/StrategyParams/components/IncrementByForm/index.tsx
new file mode 100644
index 00000000..1bd19f40
--- /dev/null
+++ b/src/features/transfer/MutateTransferForm/components/StrategyParams/components/IncrementByForm/index.tsx
@@ -0,0 +1,24 @@
+import React from 'react';
+import { ConnectionType } from '@shared/types';
+import { Form, Input } from 'antd';
+
+import { IncrementByFormProps } from './types';
+
+export const IncrementByForm = ({ sourceConnectionType }: IncrementByFormProps) => {
+ switch (sourceConnectionType) {
+ case ConnectionType.CLICKHOUSE:
+ case ConnectionType.HIVE:
+ case ConnectionType.MS_SQL:
+ case ConnectionType.MY_SQL:
+ case ConnectionType.ORACLE:
+ case ConnectionType.POSTGRES:
+ return (
+
+
+
+ );
+ case ConnectionType.HDFS:
+ case ConnectionType.S3:
+ return null;
+ }
+};
diff --git a/src/features/transfer/MutateTransferForm/components/StrategyParams/components/IncrementByForm/types.ts b/src/features/transfer/MutateTransferForm/components/StrategyParams/components/IncrementByForm/types.ts
new file mode 100644
index 00000000..34b63b9b
--- /dev/null
+++ b/src/features/transfer/MutateTransferForm/components/StrategyParams/components/IncrementByForm/types.ts
@@ -0,0 +1,5 @@
+import { ConnectionType } from '@shared/types';
+
+export interface IncrementByFormProps {
+ sourceConnectionType: ConnectionType;
+}
diff --git a/src/entities/transfer/constants.ts b/src/features/transfer/MutateTransferForm/components/StrategyParams/components/StrategyTypeForm/constants.ts
similarity index 81%
rename from src/entities/transfer/constants.ts
rename to src/features/transfer/MutateTransferForm/components/StrategyParams/components/StrategyTypeForm/constants.ts
index 166c16ef..2d9801b6 100644
--- a/src/entities/transfer/constants.ts
+++ b/src/features/transfer/MutateTransferForm/components/StrategyParams/components/StrategyTypeForm/constants.ts
@@ -1,7 +1,6 @@
+import { TransferStrategyParams } from '@entities/transfer';
import { prepareOptionsForSelect } from '@shared/ui';
-import { TransferStrategyParams } from './api';
-
export const TRANSFER_STRATEGY_PARAMS_SELECT_OPTIONS = prepareOptionsForSelect({
data: ['full', 'incremental'],
renderLabel: (data) => data,
diff --git a/src/features/transfer/MutateTransferForm/components/StrategyParams/components/StrategyTypeForm/index.tsx b/src/features/transfer/MutateTransferForm/components/StrategyParams/components/StrategyTypeForm/index.tsx
new file mode 100644
index 00000000..7a97aa2a
--- /dev/null
+++ b/src/features/transfer/MutateTransferForm/components/StrategyParams/components/StrategyTypeForm/index.tsx
@@ -0,0 +1,40 @@
+import React, { useLayoutEffect, useState } from 'react';
+import { Select } from '@shared/ui';
+import { Form } from 'antd';
+import { ConnectionType } from '@shared/types';
+
+import { TRANSFER_STRATEGY_PARAMS_SELECT_OPTIONS } from './constants';
+import { StrategyTypeFormProps } from './types';
+
+export const StrategyTypeForm = ({ sourceConnectionType }: StrategyTypeFormProps) => {
+ const [isDisabled, setDisabled] = useState(false);
+ const formInstance = Form.useFormInstance();
+
+ // change strategy_params type value and disabled field state depending on source connection type
+ useLayoutEffect(() => {
+ switch (sourceConnectionType) {
+ case ConnectionType.HDFS:
+ case ConnectionType.S3:
+ setDisabled(true);
+ return formInstance.setFieldValue(['strategy_params', 'type'], 'full');
+ case ConnectionType.CLICKHOUSE:
+ case ConnectionType.HIVE:
+ case ConnectionType.MS_SQL:
+ case ConnectionType.MY_SQL:
+ case ConnectionType.ORACLE:
+ case ConnectionType.POSTGRES:
+ return setDisabled(false);
+ }
+ }, [formInstance, sourceConnectionType]);
+
+ return (
+
+
+
+ );
+};
diff --git a/src/features/transfer/MutateTransferForm/components/StrategyParams/components/StrategyTypeForm/types.ts b/src/features/transfer/MutateTransferForm/components/StrategyParams/components/StrategyTypeForm/types.ts
new file mode 100644
index 00000000..2f8831ee
--- /dev/null
+++ b/src/features/transfer/MutateTransferForm/components/StrategyParams/components/StrategyTypeForm/types.ts
@@ -0,0 +1,5 @@
+import { ConnectionType } from '@shared/types';
+
+export interface StrategyTypeFormProps {
+ sourceConnectionType: ConnectionType;
+}
diff --git a/src/features/transfer/MutateTransferForm/components/StrategyParams/components/index.ts b/src/features/transfer/MutateTransferForm/components/StrategyParams/components/index.ts
new file mode 100644
index 00000000..966834df
--- /dev/null
+++ b/src/features/transfer/MutateTransferForm/components/StrategyParams/components/index.ts
@@ -0,0 +1,2 @@
+export * from './IncrementByForm';
+export * from './StrategyTypeForm';
diff --git a/src/features/transfer/MutateTransferForm/components/StrategyParams/index.tsx b/src/features/transfer/MutateTransferForm/components/StrategyParams/index.tsx
new file mode 100644
index 00000000..ec468a05
--- /dev/null
+++ b/src/features/transfer/MutateTransferForm/components/StrategyParams/index.tsx
@@ -0,0 +1,28 @@
+import React from 'react';
+import { Fieldset } from '@shared/ui';
+import { Form } from 'antd';
+import { TransferStrategyParams } from '@entities/transfer';
+import { ConnectionType } from '@shared/types';
+
+import { IncrementByForm, StrategyTypeForm } from './components';
+
+export const StrategyParams = () => {
+ const formInstance = Form.useFormInstance();
+
+ /* useWatch takes a value from Form.Item, but useFormInstance takes one from general form state
+ * useWatch returns undefined when Form.Item has not rendered yet
+ * https://github.com/ant-design/ant-design/issues/49010
+ */
+ Form.useWatch(['source_params', 'type']);
+ Form.useWatch(['strategy_params', 'type']);
+
+ const sourceConnectionType = formInstance.getFieldValue(['source_params', 'type']) as ConnectionType;
+ const strategyParamsType = formInstance.getFieldValue(['strategy_params', 'type']) as TransferStrategyParams['type'];
+
+ return (
+
+ );
+};
diff --git a/src/features/transfer/MutateTransferForm/components/index.ts b/src/features/transfer/MutateTransferForm/components/index.ts
index 266bceae..007c7fb5 100644
--- a/src/features/transfer/MutateTransferForm/components/index.ts
+++ b/src/features/transfer/MutateTransferForm/components/index.ts
@@ -2,3 +2,4 @@ export * from './SourceParams';
export * from './TargetParams';
export * from './TransferSchedule';
export * from './TransferConnections';
+export * from './StrategyParams';
diff --git a/src/features/transfer/MutateTransferForm/index.tsx b/src/features/transfer/MutateTransferForm/index.tsx
index 7563106f..6193c53f 100644
--- a/src/features/transfer/MutateTransferForm/index.tsx
+++ b/src/features/transfer/MutateTransferForm/index.tsx
@@ -1,11 +1,10 @@
import React from 'react';
import { QueueQueryKey, queueService } from '@entities/queue';
-import { TRANSFER_STRATEGY_PARAMS_SELECT_OPTIONS } from '@entities/transfer';
-import { ControlButtons, Fieldset, FormCurrentGroupDescription, ManagedSelect, Select } from '@shared/ui';
+import { ControlButtons, Fieldset, FormCurrentGroupDescription, ManagedSelect } from '@shared/ui';
import { Form, Input } from 'antd';
import { MutateTransferFormProps } from './types';
-import { TransferConnections, TransferSchedule } from './components';
+import { StrategyParams, TransferConnections, TransferSchedule } from './components';
export const MutateTransferForm = ({ group, onCancel }: MutateTransferFormProps) => {
return (
@@ -31,14 +30,12 @@ export const MutateTransferForm = ({ group, onCancel }: MutateTransferFormProps)
placeholder="Select queue"
/>
-
-
-
-
+
+
diff --git a/src/features/transfer/TransferDetailInfo/components/TransferStrategyParams/index.tsx b/src/features/transfer/TransferDetailInfo/components/TransferStrategyParams/index.tsx
new file mode 100644
index 00000000..6a49bbd3
--- /dev/null
+++ b/src/features/transfer/TransferDetailInfo/components/TransferStrategyParams/index.tsx
@@ -0,0 +1,19 @@
+import React from 'react';
+import { Descriptions } from 'antd';
+
+import { TransferStrategyParamsProps } from './types';
+
+export const TransferStrategyParams = ({ data, ...props }: TransferStrategyParamsProps) => {
+ return (
+
+
+ {data.type}
+
+ {data.increment_by && (
+
+ {data.increment_by}
+
+ )}
+
+ );
+};
diff --git a/src/features/transfer/TransferDetailInfo/components/TransferStrategyParams/types.ts b/src/features/transfer/TransferDetailInfo/components/TransferStrategyParams/types.ts
new file mode 100644
index 00000000..6b6b29b1
--- /dev/null
+++ b/src/features/transfer/TransferDetailInfo/components/TransferStrategyParams/types.ts
@@ -0,0 +1,6 @@
+import { Transfer } from '@entities/transfer';
+import { DescriptionsProps } from 'antd';
+
+export interface TransferStrategyParamsProps extends DescriptionsProps {
+ data: Transfer['strategy_params'];
+}
diff --git a/src/features/transfer/TransferDetailInfo/components/index.ts b/src/features/transfer/TransferDetailInfo/components/index.ts
index b71fed24..bb8613d7 100644
--- a/src/features/transfer/TransferDetailInfo/components/index.ts
+++ b/src/features/transfer/TransferDetailInfo/components/index.ts
@@ -1,2 +1,3 @@
export * from './TransferParams';
export * from './TransferFileFormatData';
+export * from './TransferStrategyParams';
diff --git a/src/features/transfer/TransferDetailInfo/index.tsx b/src/features/transfer/TransferDetailInfo/index.tsx
index f3faeaab..ffe2ea35 100644
--- a/src/features/transfer/TransferDetailInfo/index.tsx
+++ b/src/features/transfer/TransferDetailInfo/index.tsx
@@ -5,7 +5,7 @@ import { CronService } from '@shared/services';
import { TransferDetailInfoProps } from './types';
import classes from './styles.module.less';
-import { TransferParams } from './components';
+import { TransferParams, TransferStrategyParams } from './components';
export const TransferDetailInfo = ({
transfer,
@@ -38,8 +38,8 @@ export const TransferDetailInfo = ({
{new CronService(transfer.schedule).getSchedule()}
)}
-
- {transfer.strategy_params.type}
+
+
{connectionSource.name}