Skip to content

Commit 4e39fde

Browse files
authored
[DOP-31559] Hide File filter if source is not of type File
1 parent 833d928 commit 4e39fde

File tree

15 files changed

+150
-67
lines changed

15 files changed

+150
-67
lines changed

src/entities/transformation/constants.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { ConnectionType } from '@shared/types';
12
import { createContext } from 'react';
23

34
import {
@@ -17,9 +18,9 @@ const SHOW_BUTTONS_CONTEXT_INITIAL_VALUE: ShowButtonsContextProps = {
1718
export const ShowButtonsContext = createContext<ShowButtonsContextProps>(SHOW_BUTTONS_CONTEXT_INITIAL_VALUE);
1819

1920
export const TRANSFORMATIONS_FORM_DEFAULT_VALUE: TransformationsForm = {
21+
[TransformationType.FILTER_FILE]: [],
2022
[TransformationType.FILTER_ROWS]: [],
2123
[TransformationType.FILTER_COLUMNS]: [],
22-
[TransformationType.FILTER_FILE]: [],
2324
};
2425

2526
export const TRANSFORMATIONS_REQUEST_DEFAULT_VALUE: Transformations = [
@@ -65,3 +66,24 @@ export const TRANSFORMATION_FILTER_FILE_TYPE_DISPLAY = {
6566
[TransformationFilterFileType.FILE_SIZE_MIN]: 'fileSizeMin',
6667
[TransformationFilterFileType.FILE_SIZE_MAX]: 'fileSizeMax',
6768
} as const;
69+
70+
const FILE_TRANSFORMATION_TYPES = Object.values(TransformationType);
71+
72+
const DB_TRANSFORMATION_TYPES = FILE_TRANSFORMATION_TYPES.filter((type) => type !== TransformationType.FILTER_FILE);
73+
74+
export const CONNECTION_TYPE_SUPPORT_TRANSFORMATION_TYPES: Record<ConnectionType, TransformationType[]> = {
75+
[ConnectionType.CLICKHOUSE]: DB_TRANSFORMATION_TYPES,
76+
[ConnectionType.FTP]: FILE_TRANSFORMATION_TYPES,
77+
[ConnectionType.FTPS]: FILE_TRANSFORMATION_TYPES,
78+
[ConnectionType.HDFS]: DB_TRANSFORMATION_TYPES,
79+
[ConnectionType.HIVE]: DB_TRANSFORMATION_TYPES,
80+
[ConnectionType.ICEBERG]: DB_TRANSFORMATION_TYPES,
81+
[ConnectionType.MSSQL]: DB_TRANSFORMATION_TYPES,
82+
[ConnectionType.MYSQL]: DB_TRANSFORMATION_TYPES,
83+
[ConnectionType.ORACLE]: DB_TRANSFORMATION_TYPES,
84+
[ConnectionType.POSTGRES]: DB_TRANSFORMATION_TYPES,
85+
[ConnectionType.S3]: DB_TRANSFORMATION_TYPES,
86+
[ConnectionType.SAMBA]: FILE_TRANSFORMATION_TYPES,
87+
[ConnectionType.SFTP]: FILE_TRANSFORMATION_TYPES,
88+
[ConnectionType.WEBDAV]: FILE_TRANSFORMATION_TYPES,
89+
};

src/entities/transformation/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,9 @@ export interface TransformationFilterFileForm {
110110
export type Transformations = Array<TransformationFilterRows | TransformationFilterColumns | TransformationFilterFile>;
111111

112112
export interface TransformationsForm {
113+
[TransformationType.FILTER_FILE]?: TransformationFilterFileForm['filters'];
113114
[TransformationType.FILTER_ROWS]?: TransformationFilterRows['filters'];
114115
[TransformationType.FILTER_COLUMNS]?: TransformationFilterColumns['filters'];
115-
[TransformationType.FILTER_FILE]?: TransformationFilterFileForm['filters'];
116116
}
117117

118118
export type TransformationsFormNestedType<T extends keyof TransformationsForm> =

src/entities/transformation/ui/TransformationForm/components/TransformationFormItem/hooks/useGetNestedTypesSelectOptions/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ export const useGetNestedTypesSelectOptions = (transformationType: Transformatio
3737
TransformationType,
3838
OptionItem<TransformationFilterRowsType | TransformationFilterColumnsType | TransformationFilterFileType>[]
3939
> = {
40+
[TransformationType.FILTER_FILE]: filterFileTypeSelectOptions,
4041
[TransformationType.FILTER_ROWS]: filterRowsTypeSelectOptions,
4142
[TransformationType.FILTER_COLUMNS]: filterColumnsTypeSelectOptions,
42-
[TransformationType.FILTER_FILE]: filterFileTypeSelectOptions,
4343
};
4444

4545
return filterOptions;

src/features/transfer/MutateTransferForm/components/TransferConnectionsCanvas/TransferConnectionsCanvas.tsx

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
import React, { useMemo } from 'react';
1+
import { useMemo } from 'react';
22
import { Canvas } from '@shared/ui';
33
import { ReactFlowProvider } from '@xyflow/react';
44
import { Form } from 'antd';
55
import { ShowButtonsContext, TransformationsForm, TransformationType } from '@entities/transformation';
66

77
import { TransformButtons } from '../TransformButtons';
8+
import { useSupportedTransformationTypes } from '../../hooks';
89

910
import { TransferCanvasProps } from './types';
1011
import { getInitialEdges, getInitialNodes } from './utils';
@@ -15,6 +16,7 @@ import '@xyflow/react/dist/style.css';
1516

1617
export const TransferConnectionsCanvas = ({ groupId, isDisplayedButtons = true }: TransferCanvasProps) => {
1718
const formInstance = Form.useFormInstance();
19+
const { supportedTransformationTypes } = useSupportedTransformationTypes();
1820

1921
const initialTransformations = useMemo(() => {
2022
return formInstance.getFieldValue('transformations') as TransformationsForm;
@@ -23,11 +25,17 @@ export const TransferConnectionsCanvas = ({ groupId, isDisplayedButtons = true }
2325
const initialNodes = useMemo(() => {
2426
return getInitialNodes({
2527
groupId,
26-
hasFilterRows: !!initialTransformations[TransformationType.FILTER_ROWS]?.length,
27-
hasFilterColumns: !!initialTransformations[TransformationType.FILTER_COLUMNS]?.length,
28-
hasFilterFile: !!initialTransformations[TransformationType.FILTER_FILE]?.length,
28+
hasFilterFile:
29+
supportedTransformationTypes.includes(TransformationType.FILTER_FILE) &&
30+
!!initialTransformations[TransformationType.FILTER_FILE]?.length,
31+
hasFilterRows:
32+
supportedTransformationTypes.includes(TransformationType.FILTER_ROWS) &&
33+
!!initialTransformations[TransformationType.FILTER_ROWS]?.length,
34+
hasFilterColumns:
35+
supportedTransformationTypes.includes(TransformationType.FILTER_COLUMNS) &&
36+
!!initialTransformations[TransformationType.FILTER_COLUMNS]?.length,
2937
});
30-
}, [groupId, initialTransformations]);
38+
}, [groupId, supportedTransformationTypes, initialTransformations]);
3139

3240
const initialEdges = useMemo(() => {
3341
return getInitialEdges(initialNodes);
Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { NodeTypes } from '@xyflow/react';
2+
import { TransformationType } from '@entities/transformation';
23

34
import { SourceParamsNode } from '../SourceParamsNode';
45
import { TargetParamsNode } from '../TargetParamsNode';
@@ -11,32 +12,54 @@ import { TransferCanvasDefaultNodeType, TransferCanvasEdgeType, TransferCanvasTr
1112
export const NODE_TYPES: NodeTypes = {
1213
[TransferCanvasDefaultNodeType.SOURCE]: SourceParamsNode,
1314
[TransferCanvasDefaultNodeType.TARGET]: TargetParamsNode,
15+
[TransferCanvasTransformNodeType.FILTER_FILE]: FilterFileNode,
1416
[TransferCanvasTransformNodeType.FILTER_ROWS]: FilterRowsNode,
1517
[TransferCanvasTransformNodeType.FILTER_COLUMNS]: FilterColumnsNode,
16-
[TransferCanvasTransformNodeType.FILTER_FILE]: FilterFileNode,
1718
};
1819

1920
export const NODE_TYPES_ID = {
2021
[TransferCanvasDefaultNodeType.SOURCE]: '1',
21-
[TransferCanvasTransformNodeType.FILTER_ROWS]: '2',
22-
[TransferCanvasTransformNodeType.FILTER_COLUMNS]: '3',
23-
[TransferCanvasTransformNodeType.FILTER_FILE]: '4',
22+
[TransferCanvasTransformNodeType.FILTER_FILE]: '2',
23+
[TransferCanvasTransformNodeType.FILTER_ROWS]: '3',
24+
[TransferCanvasTransformNodeType.FILTER_COLUMNS]: '4',
2425
[TransferCanvasDefaultNodeType.TARGET]: '5',
2526
};
2627

2728
export const EDGE_TYPES_ID = {
2829
[TransferCanvasEdgeType.SOURCE]: '1',
29-
[TransferCanvasEdgeType.FILTER_ROWS]: '2',
30-
[TransferCanvasEdgeType.FILTER_COLUMNS]: '3',
31-
[TransferCanvasEdgeType.FILTER_FILE]: '4',
30+
[TransferCanvasEdgeType.FILTER_FILE]: '2',
31+
[TransferCanvasEdgeType.FILTER_ROWS]: '3',
32+
[TransferCanvasEdgeType.FILTER_COLUMNS]: '4',
3233
[TransferCanvasEdgeType.TARGET]: '5',
3334
};
3435

3536
export const NODE_POSITION_X_GAP_DEFAULT = 500;
3637
export const NODE_POSITION_X_GAP_LARGE = 1000;
3738

3839
export const TRANSFER_CANVAS_TRANSFORM_NODE_TYPE_NAME_DISPLAY = {
40+
[TransferCanvasTransformNodeType.FILTER_FILE]: 'filterFile',
3941
[TransferCanvasTransformNodeType.FILTER_ROWS]: 'filterRows',
4042
[TransferCanvasTransformNodeType.FILTER_COLUMNS]: 'filterColumns',
41-
[TransferCanvasTransformNodeType.FILTER_FILE]: 'filterFile',
4243
} as const;
44+
45+
export const TRANSFER_CANVAS_NODE_TYPE_TO_TRANSFORM_TYPE_MAP: Record<
46+
TransferCanvasTransformNodeType,
47+
TransformationType
48+
> = {
49+
[TransferCanvasTransformNodeType.FILTER_FILE]: TransformationType.FILTER_FILE,
50+
[TransferCanvasTransformNodeType.FILTER_ROWS]: TransformationType.FILTER_ROWS,
51+
[TransferCanvasTransformNodeType.FILTER_COLUMNS]: TransformationType.FILTER_COLUMNS,
52+
} as const;
53+
54+
export const TRANSFER_TRANSFORM_TYPE_TO_CANVAS_NODE_TYPE_MAP: Record<
55+
TransformationType,
56+
TransferCanvasTransformNodeType
57+
> = {
58+
[TransformationType.FILTER_FILE]: TransferCanvasTransformNodeType.FILTER_FILE,
59+
[TransformationType.FILTER_ROWS]: TransferCanvasTransformNodeType.FILTER_ROWS,
60+
[TransformationType.FILTER_COLUMNS]: TransferCanvasTransformNodeType.FILTER_COLUMNS,
61+
} as const;
62+
63+
export const TRANSFER_CANVAS_FILTER_NODES = Object.values(
64+
TransferCanvasTransformNodeType,
65+
) as TransferCanvasTransformNodeType[];

src/features/transfer/MutateTransferForm/components/TransferConnectionsCanvas/types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,16 @@ export enum TransferCanvasDefaultNodeType {
2323
}
2424

2525
export enum TransferCanvasTransformNodeType {
26+
FILTER_FILE = 'FILTER_FILE',
2627
FILTER_ROWS = 'FILTER_ROWS',
2728
FILTER_COLUMNS = 'FILTER_COLUMNS',
28-
FILTER_FILE = 'FILTER_FILE',
2929
}
3030

3131
export enum TransferCanvasEdgeType {
3232
SOURCE = 'SOURCE',
33+
FILTER_FILE = 'FILTER_FILE',
3334
FILTER_ROWS = 'FILTER_ROWS',
3435
FILTER_COLUMNS = 'FILTER_COLUMNS',
35-
FILTER_FILE = 'FILTER_FILE',
3636
TARGET = 'TARGET',
3737
}
3838

src/features/transfer/MutateTransferForm/components/TransferConnectionsCanvas/utils/getInitialNodes/getInitialNodes.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,30 +21,30 @@ export const getInitialNodes = ({
2121

2222
let nodeIndex = 1;
2323

24-
if (hasFilterRows) {
24+
if (hasFilterFile) {
2525
nodes.push({
26-
id: NODE_TYPES_ID[TransferCanvasTransformNodeType.FILTER_ROWS],
27-
type: TransferCanvasTransformNodeType.FILTER_ROWS,
26+
id: NODE_TYPES_ID[TransferCanvasTransformNodeType.FILTER_FILE],
27+
type: TransferCanvasTransformNodeType.FILTER_FILE,
2828
data: {},
2929
position: setNodePosition(nodeIndex),
3030
});
3131
nodeIndex++;
3232
}
3333

34-
if (hasFilterColumns) {
34+
if (hasFilterRows) {
3535
nodes.push({
36-
id: NODE_TYPES_ID[TransferCanvasTransformNodeType.FILTER_COLUMNS],
37-
type: TransferCanvasTransformNodeType.FILTER_COLUMNS,
36+
id: NODE_TYPES_ID[TransferCanvasTransformNodeType.FILTER_ROWS],
37+
type: TransferCanvasTransformNodeType.FILTER_ROWS,
3838
data: {},
3939
position: setNodePosition(nodeIndex),
4040
});
4141
nodeIndex++;
4242
}
4343

44-
if (hasFilterFile) {
44+
if (hasFilterColumns) {
4545
nodes.push({
46-
id: NODE_TYPES_ID[TransferCanvasTransformNodeType.FILTER_FILE],
47-
type: TransferCanvasTransformNodeType.FILTER_FILE,
46+
id: NODE_TYPES_ID[TransferCanvasTransformNodeType.FILTER_COLUMNS],
47+
type: TransferCanvasTransformNodeType.FILTER_COLUMNS,
4848
data: {},
4949
position: setNodePosition(nodeIndex),
5050
});

src/features/transfer/MutateTransferForm/components/TransferConnectionsDefault/constants.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ import { FilterRowsFormItem } from '../FilterRowsFormItem';
88
import { FilterTypeConfig } from './types';
99

1010
export const FILTER_TYPES_CONFIG: Record<TransformationType, FilterTypeConfig> = {
11+
[TransformationType.FILTER_FILE]: {
12+
title: 'filterFile',
13+
filter: <FilterFileFormItem canHaveEmptyRecordsList />,
14+
},
1115
[TransformationType.FILTER_ROWS]: {
1216
title: 'filterRows',
1317
filter: <FilterRowsFormItem canHaveEmptyRecordsList />,
@@ -16,8 +20,4 @@ export const FILTER_TYPES_CONFIG: Record<TransformationType, FilterTypeConfig> =
1620
title: 'filterColumns',
1721
filter: <FilterColumnsFormItem canHaveEmptyRecordsList />,
1822
},
19-
[TransformationType.FILTER_FILE]: {
20-
title: 'filterFile',
21-
filter: <FilterFileFormItem canHaveEmptyRecordsList />,
22-
},
2323
} as const;

src/features/transfer/MutateTransferForm/components/TransferConnectionsDefault/index.tsx

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,29 @@
1-
import React, { useMemo } from 'react';
1+
import { useMemo } from 'react';
22
import { Fieldset } from '@shared/ui';
33
import { useTranslation } from 'react-i18next';
4+
import { TransformationType } from '@entities/transformation';
45

56
import { SourceParams } from '../SourceParams';
67
import { TargetParams } from '../TargetParams';
8+
import { useSupportedTransformationTypes } from '../../hooks';
79

810
import { TransferConnectionsDefaultProps } from './types';
911
import { FILTER_TYPES_CONFIG } from './constants';
1012

1113
export const TransferConnectionsDefault = ({ groupId }: TransferConnectionsDefaultProps) => {
1214
const { t } = useTranslation('transfer');
15+
const { supportedTransformationTypes } = useSupportedTransformationTypes();
1316

1417
const filters = useMemo(
1518
() =>
16-
Object.entries(FILTER_TYPES_CONFIG).map(([key, { title, filter }]) => (
17-
<Fieldset key={key} title={t(title, { ns: 'transformation' })}>
18-
{filter}
19-
</Fieldset>
20-
)),
21-
[t],
19+
Object.entries(FILTER_TYPES_CONFIG)
20+
.filter(([key]) => supportedTransformationTypes.includes(key as TransformationType))
21+
.map(([key, { title, filter }]) => (
22+
<Fieldset key={key} title={t(title, { ns: 'transformation' })}>
23+
{filter}
24+
</Fieldset>
25+
)),
26+
[supportedTransformationTypes, t],
2227
);
2328

2429
return (

src/features/transfer/MutateTransferForm/components/TransformButtons/TransformButtons.tsx

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { memo, useState } from 'react';
1+
import { memo, useState } from 'react';
22
import { Typography } from 'antd';
33
import { useModalState } from '@shared/hooks';
44
import { ModalWrapper } from '@shared/ui';
@@ -8,7 +8,9 @@ import { useTranslation } from 'react-i18next';
88
import {
99
TransferCanvasTransformNodeType,
1010
TRANSFER_CANVAS_TRANSFORM_NODE_TYPE_NAME_DISPLAY,
11+
TRANSFER_CANVAS_NODE_TYPE_TO_TRANSFORM_TYPE_MAP,
1112
} from '../TransferConnectionsCanvas';
13+
import { useSupportedTransformationTypes } from '../../hooks';
1214

1315
import { useHandleNodes } from './hooks';
1416
import { DeleteNode, TransformButtonItem } from './components';
@@ -20,6 +22,8 @@ export const TransformButtons = memo(() => {
2022
const { t } = useTranslation('transformation');
2123
const { transformNodeTypes, handleAddTransformNode, handleDeleteTransformNode } = useHandleNodes();
2224

25+
const { supportedTransformationTypes } = useSupportedTransformationTypes();
26+
2327
const [nodeTypeForDeleting, setNodeTypeForDeleting] = useState<TransferCanvasTransformNodeType | null>(null);
2428

2529
const { isOpened: isOpenedModal, handleOpen: openModal, handleClose: handleCloseModal } = useModalState();
@@ -38,15 +42,19 @@ export const TransformButtons = memo(() => {
3842
<div className={classes.root}>
3943
<Text strong>{t('transformations')}</Text>
4044
<div className={classes.buttons}>
41-
{Object.values(TransferCanvasTransformNodeType).map((item, index) => (
42-
<TransformButtonItem
43-
nodeType={item}
44-
isExist={transformNodeTypes ? !!transformNodeTypes[item] : false}
45-
onAddNode={handleAddTransformNode}
46-
onDeleteNode={handleOpenDeleteNodeModal}
47-
key={index}
48-
/>
49-
))}
45+
{Object.values(TransferCanvasTransformNodeType)
46+
.filter((item) =>
47+
supportedTransformationTypes.includes(TRANSFER_CANVAS_NODE_TYPE_TO_TRANSFORM_TYPE_MAP[item]),
48+
)
49+
.map((item) => (
50+
<TransformButtonItem
51+
nodeType={item}
52+
isExist={transformNodeTypes ? !!transformNodeTypes[item] : false}
53+
onAddNode={handleAddTransformNode}
54+
onDeleteNode={handleOpenDeleteNodeModal}
55+
key={item}
56+
/>
57+
))}
5058
</div>
5159
{nodeTypeForDeleting && (
5260
<ModalWrapper

0 commit comments

Comments
 (0)