Skip to content

Commit 4948401

Browse files
author
Zabilsya
committed
[DOP-22359] add filter file
1 parent 6b1ad3f commit 4948401

File tree

32 files changed

+219
-21
lines changed

32 files changed

+219
-21
lines changed

src/entities/transformation/types.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export enum TransformationType {
22
FILTER_ROWS = 'dataframe_rows_filter',
33
FILTER_COLUMNS = 'dataframe_columns_filter',
4+
FILTER_FILE = 'file_metadata_filter',
45
}
56

67
export enum TransformationFilterRowsType {
@@ -71,11 +72,29 @@ export interface TransformationFilterColumns {
7172
>;
7273
}
7374

74-
export type Transformations = Array<TransformationFilterRows | TransformationFilterColumns>;
75+
export enum TransformationFilterFileType {
76+
NAME_GLOB = 'name_glob',
77+
NAME_REGEXP = 'name_regexp',
78+
FILE_SIZE_MIN = 'file_size_min',
79+
FILE_SIZE_MAX = 'file_size_max',
80+
}
81+
82+
interface TransformationFilterFileItem {
83+
type: TransformationFilterFileType;
84+
value: string;
85+
}
86+
87+
export interface TransformationFilterFile {
88+
type: TransformationType.FILTER_FILE;
89+
filters: Array<TransformationFilterFileItem>;
90+
}
91+
92+
export type Transformations = Array<TransformationFilterRows | TransformationFilterColumns | TransformationFilterFile>;
7593

7694
export interface TransformationsForm {
7795
[TransformationType.FILTER_ROWS]?: TransformationFilterRows['filters'];
7896
[TransformationType.FILTER_COLUMNS]?: TransformationFilterColumns['filters'];
97+
[TransformationType.FILTER_FILE]?: TransformationFilterFile['filters'];
7998
}
8099

81100
export type TransformationsFormNestedType<T extends keyof TransformationsForm> =

src/entities/transformation/ui/FilterColumnsValue/index.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { Form, Input } from 'antd';
33
import { TransformationFilterColumnsType } from '@entities/transformation';
44

55
import { FilterColumnsValueProps } from './types';
6-
import classes from './styles.module.less';
76

87
export const FilterColumnsValue = ({ name, type }: FilterColumnsValueProps) => {
98
switch (type) {
@@ -12,13 +11,13 @@ export const FilterColumnsValue = ({ name, type }: FilterColumnsValueProps) => {
1211
return null;
1312
case TransformationFilterColumnsType.RENAME:
1413
return (
15-
<Form.Item className={classes.root} label="Value" name={[name, 'to']} rules={[{ required: true }]}>
14+
<Form.Item label="Value" name={[name, 'to']} rules={[{ required: true }]}>
1615
<Input className="nodrag" size="large" />
1716
</Form.Item>
1817
);
1918
case TransformationFilterColumnsType.CAST:
2019
return (
21-
<Form.Item className={classes.root} label="Value" name={[name, 'as_type']} rules={[{ required: true }]}>
20+
<Form.Item label="Value" name={[name, 'as_type']} rules={[{ required: true }]}>
2221
<Input className="nodrag" size="large" />
2322
</Form.Item>
2423
);

src/entities/transformation/ui/FilterColumnsValue/styles.module.less

Lines changed: 0 additions & 3 deletions
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const NAME_GLOB_REGEXP = /([*?[])/;
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import React, { useLayoutEffect, useMemo, useState } from 'react';
2+
import { Form, Input } from 'antd';
3+
import { TransformationFilterFileType, TransformationType } from '@entities/transformation';
4+
import { isValidRegex } from '@shared/utils';
5+
import { NUMBER_REGEXP } from '@shared/constants';
6+
7+
import { FilterFileValueProps } from './types';
8+
import { NAME_GLOB_REGEXP } from './constants';
9+
import classes from './styles.module.less';
10+
11+
export const FilterFileValue = ({ name, type }: FilterFileValueProps) => {
12+
const [hasFirstRender, setFirstRender] = useState(false);
13+
const formInstance = Form.useFormInstance();
14+
15+
// Reset value and error of value field after change type
16+
useLayoutEffect(() => {
17+
// Do not reset when type is an initial
18+
if (hasFirstRender) {
19+
formInstance.setFields([
20+
{
21+
name: ['transformations', TransformationType.FILTER_FILE, name, 'value'],
22+
value: '',
23+
errors: [],
24+
},
25+
]);
26+
}
27+
setFirstRender(true);
28+
// It doesn't need to check hasFirstRender
29+
// eslint-disable-next-line react-hooks/exhaustive-deps
30+
}, [formInstance, name, type]);
31+
32+
const rules = useMemo(() => {
33+
switch (type) {
34+
case TransformationFilterFileType.NAME_GLOB:
35+
return [{ required: true, pattern: NAME_GLOB_REGEXP }];
36+
case TransformationFilterFileType.NAME_REGEXP:
37+
return [{ required: true, validator: isValidRegex }];
38+
case TransformationFilterFileType.FILE_SIZE_MIN:
39+
case TransformationFilterFileType.FILE_SIZE_MAX:
40+
return [{ required: true, pattern: NUMBER_REGEXP }];
41+
default:
42+
return undefined;
43+
}
44+
}, [type]);
45+
46+
return (
47+
<Form.Item className={classes.control} label="Value" name={[name, 'value']} rules={rules} hidden={!rules}>
48+
<Input className="nodrag" size="large" />
49+
</Form.Item>
50+
);
51+
};
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
.control {
2+
width: calc(100% - 180px);
3+
flex-grow: 1;
4+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { TransformationFilterFileType } from '@entities/transformation';
2+
3+
export interface FilterFileValueProps {
4+
name: number;
5+
type?: TransformationFilterFileType;
6+
}

src/entities/transformation/ui/FilterRowsValue/index.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { Form, Input } from 'antd';
33
import { TransformationFilterRowsType } from '@entities/transformation';
44

55
import { FilterRowsValueProps } from './types';
6-
import classes from './styles.module.less';
76

87
export const FilterRowsValue = ({ name, type }: FilterRowsValueProps) => {
98
switch (type) {
@@ -13,7 +12,7 @@ export const FilterRowsValue = ({ name, type }: FilterRowsValueProps) => {
1312
return null;
1413
default:
1514
return (
16-
<Form.Item className={classes.root} label="Value" name={[name, 'value']} rules={[{ required: true }]}>
15+
<Form.Item label="Value" name={[name, 'value']} rules={[{ required: true }]}>
1716
<Input className="nodrag" size="large" />
1817
</Form.Item>
1918
);

src/entities/transformation/ui/FilterRowsValue/styles.module.less

Lines changed: 0 additions & 3 deletions
This file was deleted.

src/entities/transformation/ui/TransformationForm/TransformationForm.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ const TransformationFormComponent = <T extends TransformationType>({
4141
/>
4242
))}
4343
<Button className="nodrag" size="large" type="primary" onClick={() => add()}>
44-
Add column
44+
Add item
4545
</Button>
4646
</div>
4747
)}

0 commit comments

Comments
 (0)