Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 22 additions & 1 deletion src/entities/transformation/constants.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,30 @@
import { createContext } from 'react';

import { ShowButtonsContextProps } from './types';
import { ShowButtonsContextProps, Transformations, TransformationsForm, TransformationType } from './types';

const SHOW_BUTTONS_CONTEXT_INITIAL_VALUE: ShowButtonsContextProps = {
isDisplayed: true,
};

export const ShowButtonsContext = createContext<ShowButtonsContextProps>(SHOW_BUTTONS_CONTEXT_INITIAL_VALUE);

export const TRANSFORMATIONS_FORM_DEFAULT_VALUE: TransformationsForm = {
[TransformationType.FILTER_ROWS]: [],
[TransformationType.FILTER_COLUMNS]: [],
[TransformationType.FILTER_FILE]: [],
};

export const TRANSFORMATIONS_REQUEST_DEFAULT_VALUE: Transformations = [
{
type: TransformationType.FILTER_ROWS,
filters: [],
},
{
type: TransformationType.FILTER_COLUMNS,
filters: [],
},
{
type: TransformationType.FILTER_FILE,
filters: [],
},
];
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { parseFileSize } from '@entities/file/@x/transformation';
import { TransformationFilterFileType, Transformations, TransformationsForm, TransformationType } from '../../types';

/** Util for mapping of transformations data from backend to appropriate form value type */
export const prepareTransformationForm = (data: Transformations): TransformationsForm => {
export const prepareTransformationForm = (data: Transformations): Partial<TransformationsForm> => {
return data.reduce((prev, curr) => {
switch (curr.type) {
case TransformationType.FILTER_ROWS:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,37 +1,40 @@
import { TRANSFORMATIONS_FORM_DEFAULT_VALUE, TRANSFORMATIONS_REQUEST_DEFAULT_VALUE } from '../../constants';
import { TransformationFilterFileType, Transformations, TransformationsForm, TransformationType } from '../../types';

/** Util for mapping of transformations data from form value to appropriate type for backend */
export const prepareTransformationRequest = (data?: TransformationsForm): Transformations => {
if (!data) {
return [];
return TRANSFORMATIONS_REQUEST_DEFAULT_VALUE;
}

return (Object.keys(data) as Array<keyof TransformationsForm>).map((key) => {
switch (key) {
case TransformationType.FILTER_ROWS:
return {
type: TransformationType.FILTER_ROWS,
filters: data[key] || [],
};
case TransformationType.FILTER_COLUMNS:
return {
type: TransformationType.FILTER_COLUMNS,
filters: data[key] || [],
};
case TransformationType.FILTER_FILE:
return {
type: TransformationType.FILTER_FILE,
filters: (data[key] || []).map((filter) => {
switch (filter.type) {
case TransformationFilterFileType.NAME_GLOB:
case TransformationFilterFileType.NAME_REGEXP:
return filter;
case TransformationFilterFileType.FILE_SIZE_MIN:
case TransformationFilterFileType.FILE_SIZE_MAX:
return { type: filter.type, value: `${filter.extra_value}${filter.unit}` };
}
}),
};
}
});
return (Object.keys({ ...TRANSFORMATIONS_FORM_DEFAULT_VALUE, ...data }) as Array<keyof TransformationsForm>).map(
(key) => {
switch (key) {
case TransformationType.FILTER_ROWS:
return {
type: TransformationType.FILTER_ROWS,
filters: data[key] || [],
};
case TransformationType.FILTER_COLUMNS:
return {
type: TransformationType.FILTER_COLUMNS,
filters: data[key] || [],
};
case TransformationType.FILTER_FILE:
return {
type: TransformationType.FILTER_FILE,
filters: (data[key] || []).map((filter) => {
switch (filter.type) {
case TransformationFilterFileType.NAME_GLOB:
case TransformationFilterFileType.NAME_REGEXP:
return filter;
case TransformationFilterFileType.FILE_SIZE_MIN:
case TransformationFilterFileType.FILE_SIZE_MAX:
return { type: filter.type, value: `${filter.extra_value}${filter.unit}` };
}
}),
};
}
},
);
};
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ export const TransferConnectionsCanvas = ({ groupId, isDisplayedButtons = true }
const initialNodes = useMemo(() => {
return getInitialNodes({
groupId,
hasFilterRows: !!initialTransformations[TransformationType.FILTER_ROWS],
hasFilterColumns: !!initialTransformations[TransformationType.FILTER_COLUMNS],
hasFilterFile: !!initialTransformations[TransformationType.FILTER_FILE],
hasFilterRows: !!initialTransformations[TransformationType.FILTER_ROWS]?.length,
hasFilterColumns: !!initialTransformations[TransformationType.FILTER_COLUMNS]?.length,
hasFilterFile: !!initialTransformations[TransformationType.FILTER_FILE]?.length,
});
}, [groupId, initialTransformations]);

Expand Down
7 changes: 3 additions & 4 deletions src/shared/ui/ManagedForm/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,10 @@ export const ManagedForm = <T extends object, R>({
const onFinish = (values: T) => {
setLoading(true);
mutate(values, {
onSuccess: (response) => {
onSuccess: async (response) => {
await Promise.all(keysInvalidateQueries.map((params) => queryClient.invalidateQueries(...params)));
onSuccess(response);
keysInvalidateQueries.forEach((params) => {
queryClient.invalidateQueries(...params);
});

if (isHiddenLoadingOnSuccess) {
setLoading(false);
}
Expand Down
4 changes: 3 additions & 1 deletion src/widgets/transfer/CreateTransfer/constants.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import { TRANSFORMATIONS_FORM_DEFAULT_VALUE } from '@entities/transformation';

export const CREATE_TRANSFER_INITIAL_VALUES = {
is_scheduled: false,
transformations: {},
transformations: TRANSFORMATIONS_FORM_DEFAULT_VALUE,
};