-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[DOP-22355] add transform node (#67)
* [DOP-22355] add transform node * [DOP-22355] fix after review --------- Co-authored-by: Zabilsya <kvcherniko@mts.ru>
- Loading branch information
Showing
21 changed files
with
203 additions
and
35 deletions.
There are no files selected for viewing
6 changes: 6 additions & 0 deletions
6
src/features/transfer/MutateTransferForm/components/FilterRows/index.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
import React, { memo } from 'react'; | ||
|
||
/** TODO: [DOP-22361] Add component content */ | ||
export const FilterRows = memo(() => { | ||
return <div>FilterRowsNode</div>; | ||
}); |
31 changes: 31 additions & 0 deletions
31
src/features/transfer/MutateTransferForm/components/FilterRowsNode/FilterRowsNode.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
import React, { useMemo } from 'react'; | ||
import { CanvasNode } from '@shared/ui'; | ||
import { Handle, Position } from '@xyflow/react'; | ||
import { FilterOutlined } from '@ant-design/icons'; | ||
|
||
import { FilterRows } from '../FilterRows'; | ||
import { TransferCanvasEdge } from '../TransferConnectionsCanvas'; | ||
|
||
import { FilterRowsNodeProps } from './types'; | ||
|
||
export const FilterRowsNode = ({}: FilterRowsNodeProps) => { | ||
const icon = useMemo(() => { | ||
return <FilterOutlined />; | ||
}, []); | ||
|
||
const children = useMemo(() => { | ||
return ( | ||
<> | ||
<Handle type="target" position={Position.Left} id={TransferCanvasEdge.FILTER_ROWS_TARGET} /> | ||
<FilterRows /> | ||
<Handle type="source" position={Position.Right} id={TransferCanvasEdge.FILTER_ROWS_SOURCE} /> | ||
</> | ||
); | ||
}, []); | ||
|
||
return ( | ||
<CanvasNode title="Filter rows" icon={icon}> | ||
{children} | ||
</CanvasNode> | ||
); | ||
}; |
2 changes: 2 additions & 0 deletions
2
src/features/transfer/MutateTransferForm/components/FilterRowsNode/index.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
export * from './FilterRowsNode'; | ||
export * from './types'; |
8 changes: 8 additions & 0 deletions
8
src/features/transfer/MutateTransferForm/components/FilterRowsNode/types.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
import { Node, NodeProps } from '@xyflow/react'; | ||
|
||
import { TransferCanvasTransformNodeType } from '../TransferConnectionsCanvas'; | ||
|
||
export interface FilterRowsNodeData | ||
extends Node<Record<string, unknown>, TransferCanvasTransformNodeType.FILTER_ROWS> {} | ||
|
||
export interface FilterRowsNodeProps extends NodeProps<FilterRowsNodeData> {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
3 changes: 0 additions & 3 deletions
3
src/features/transfer/MutateTransferForm/components/SourceParamsNode/styles.module.less
This file was deleted.
Oops, something went wrong.
4 changes: 2 additions & 2 deletions
4
src/features/transfer/MutateTransferForm/components/SourceParamsNode/types.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,8 @@ | ||
import { Node, NodeProps } from '@xyflow/react'; | ||
|
||
import { SourceParamsProps } from '../SourceParams'; | ||
import { TransferCanvasNode } from '../TransferConnectionsCanvas'; | ||
import { TransferCanvasDefaultNodeType } from '../TransferConnectionsCanvas'; | ||
|
||
export interface SourceParamsNodeData extends Node<SourceParamsProps, TransferCanvasNode.SOURCE> {} | ||
export interface SourceParamsNodeData extends Node<SourceParamsProps, TransferCanvasDefaultNodeType.SOURCE> {} | ||
|
||
export interface SourceParamsNodeProps extends NodeProps<SourceParamsNodeData> {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
3 changes: 0 additions & 3 deletions
3
src/features/transfer/MutateTransferForm/components/TargetParamsNode/styles.module.less
This file was deleted.
Oops, something went wrong.
4 changes: 2 additions & 2 deletions
4
src/features/transfer/MutateTransferForm/components/TargetParamsNode/types.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,8 @@ | ||
import { Node, NodeProps } from '@xyflow/react'; | ||
|
||
import { TargetParamsProps } from '../TargetParams'; | ||
import { TransferCanvasNode } from '../TransferConnectionsCanvas'; | ||
import { TransferCanvasDefaultNodeType } from '../TransferConnectionsCanvas'; | ||
|
||
export interface TargetParamsNodeData extends Node<TargetParamsProps, TransferCanvasNode.TARGET> {} | ||
export interface TargetParamsNodeData extends Node<TargetParamsProps, TransferCanvasDefaultNodeType.TARGET> {} | ||
|
||
export interface TargetParamsNodeProps extends NodeProps<TargetParamsNodeData> {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
14 changes: 11 additions & 3 deletions
14
src/features/transfer/MutateTransferForm/components/TransferConnectionsCanvas/types.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,18 +1,26 @@ | ||
import { FilterRowsNodeData } from '../FilterRowsNode'; | ||
import { SourceParamsNodeData } from '../SourceParamsNode'; | ||
import { TargetParamsNodeData } from '../TargetParamsNode'; | ||
|
||
import { GetInitialNodesProps } from './utils'; | ||
|
||
export interface TransferCanvasProps extends GetInitialNodesProps {} | ||
export interface TransferCanvasProps | ||
extends Pick<GetInitialNodesProps, 'groupId' | 'initialSourceConnectionType' | 'initialTargetConnectionType'> {} | ||
|
||
export type TransferCanvasNodeData = SourceParamsNodeData | TargetParamsNodeData; | ||
export type TransferCanvasNodeData = SourceParamsNodeData | TargetParamsNodeData | FilterRowsNodeData; | ||
|
||
export enum TransferCanvasNode { | ||
export enum TransferCanvasDefaultNodeType { | ||
SOURCE = 'SOURCE', | ||
TARGET = 'TARGET', | ||
} | ||
|
||
export enum TransferCanvasTransformNodeType { | ||
FILTER_ROWS = 'FILTER_ROWS', | ||
} | ||
|
||
export enum TransferCanvasEdge { | ||
SOURCE = 'SOURCE', | ||
TARGET = 'TARGET', | ||
FILTER_ROWS_SOURCE = 'FILTER_ROWS_SOURCE', | ||
FILTER_ROWS_TARGET = 'FILTER_ROWS_TARGET', | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
28 changes: 28 additions & 0 deletions
28
src/features/transfer/MutateTransferForm/components/TransformButtons/TransformButtons.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
import React, { memo } from 'react'; | ||
import { Button, Typography } from 'antd'; | ||
|
||
import { TransferCanvasTransformNodeType } from '../TransferConnectionsCanvas'; | ||
|
||
import classes from './styles.module.less'; | ||
import { useHandleNodes } from './hooks'; | ||
|
||
const { Text } = Typography; | ||
|
||
export const TransformButtons = memo(() => { | ||
const { transformNodeTypes, handleAddTransformNode } = useHandleNodes(); | ||
|
||
return ( | ||
<div className={classes.root}> | ||
<Text strong>You can add some data transforms:</Text> | ||
<div className={classes.buttons}> | ||
<Button | ||
type="primary" | ||
onClick={() => handleAddTransformNode(TransferCanvasTransformNodeType.FILTER_ROWS)} | ||
disabled={transformNodeTypes ? transformNodeTypes[TransferCanvasTransformNodeType.FILTER_ROWS] : false} | ||
> | ||
Filter rows | ||
</Button> | ||
</div> | ||
</div> | ||
); | ||
}); |
1 change: 1 addition & 0 deletions
1
src/features/transfer/MutateTransferForm/components/TransformButtons/hooks/index.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
export * from './useHandleNodes'; |
52 changes: 52 additions & 0 deletions
52
...res/transfer/MutateTransferForm/components/TransformButtons/hooks/useHandleNodes/index.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
import { useReactFlow } from '@xyflow/react'; | ||
import { useState } from 'react'; | ||
|
||
import { TransferCanvasDefaultNodeType, TransferCanvasTransformNodeType } from '../../../TransferConnectionsCanvas'; | ||
|
||
/** Hook for handling nodes and edges data (add, delete) */ | ||
export const useHandleNodes = () => { | ||
const [transformNodeTypes, setTransformNodeTypes] = useState<Record<TransferCanvasTransformNodeType, true>>(); | ||
const { getNodes, getEdges, setNodes, setEdges } = useReactFlow(); | ||
|
||
const addNewNode = (nodeType: TransferCanvasTransformNodeType) => { | ||
const newNode = { | ||
id: nodeType, | ||
type: nodeType, | ||
position: { x: 0, y: 0 }, | ||
data: {}, | ||
}; | ||
|
||
const nodes = getNodes(); | ||
|
||
const firstNodes = nodes.slice(0, nodes.length - 1); | ||
const lastNode = nodes[nodes.length - 1]; | ||
const newNodes = firstNodes.concat(newNode).concat(lastNode); | ||
|
||
setNodes(newNodes.map((node, index) => ({ ...node, position: { x: index * 500, y: 0 } }))); | ||
}; | ||
|
||
const addNewEdge = (nodeType: TransferCanvasTransformNodeType) => { | ||
const edges = getEdges(); | ||
|
||
const newEdge = { | ||
id: `edge-${edges.length + 1}`, | ||
source: nodeType, | ||
target: TransferCanvasDefaultNodeType.TARGET, | ||
animated: true, | ||
}; | ||
|
||
const firstEdges = edges.slice(0, edges.length - 1); | ||
const lastEdge = { ...edges[edges.length - 1], target: nodeType }; | ||
const newEdges = firstEdges.concat(lastEdge).concat(newEdge); | ||
|
||
setEdges(newEdges); | ||
}; | ||
|
||
const handleAddTransformNode = (nodeType: TransferCanvasTransformNodeType) => { | ||
setTransformNodeTypes((state) => ({ ...state, [nodeType]: true })); | ||
addNewNode(nodeType); | ||
addNewEdge(nodeType); | ||
}; | ||
|
||
return { transformNodeTypes, handleAddTransformNode }; | ||
}; |
1 change: 1 addition & 0 deletions
1
src/features/transfer/MutateTransferForm/components/TransformButtons/index.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
export * from './TransformButtons'; |
20 changes: 20 additions & 0 deletions
20
src/features/transfer/MutateTransferForm/components/TransformButtons/styles.module.less
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
.root { | ||
display: flex; | ||
flex-direction: column; | ||
gap: 8px; | ||
position: absolute; | ||
bottom: 0; | ||
left: 50%; | ||
transform: translateX(-50%); | ||
background-color: @white; | ||
margin-bottom: 15px; | ||
border-radius: 16px; | ||
padding: 16px; | ||
z-index: 5; | ||
|
||
.buttons { | ||
display: flex; | ||
align-items: center; | ||
gap: 12px; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,30 +1,39 @@ | ||
import { Background, BackgroundVariant, Controls, Edge, MiniMap, Node, ReactFlow } from '@xyflow/react'; | ||
import React from 'react'; | ||
import { Background, BackgroundVariant, Controls, Edge, MiniMap, Node, ReactFlow, useReactFlow } from '@xyflow/react'; | ||
import React, { useEffect } from 'react'; | ||
|
||
import classes from './styles.module.less'; | ||
import { CanvasProps } from './types'; | ||
|
||
export const Canvas = <N extends Node, E extends Edge>(props: CanvasProps<N, E>) => { | ||
export const Canvas = <N extends Node, E extends Edge>({ children, nodes, ...props }: CanvasProps<N, E>) => { | ||
const { fitView } = useReactFlow(); | ||
|
||
/** Set appropriate zoom of canvas when nodes count has changed */ | ||
useEffect(() => { | ||
fitView({ duration: 200 }); | ||
}, [nodes?.length, fitView]); | ||
|
||
return ( | ||
<ReactFlow | ||
className={classes.root} | ||
attributionPosition="top-right" | ||
nodesFocusable | ||
elementsSelectable | ||
nodesConnectable={false} | ||
nodes={nodes} | ||
nodesDraggable | ||
panOnScroll={false} | ||
panOnDrag | ||
zoomOnScroll | ||
zoomOnPinch | ||
zoomOnDoubleClick={false} | ||
fitViewOptions={{ duration: 200, padding: 1 }} | ||
fitViewOptions={{ duration: 200, padding: 0.5 }} | ||
fitView | ||
{...props} | ||
> | ||
<Background bgColor="#f0f2f5" variant={BackgroundVariant.Cross} size={3} /> | ||
<Controls /> | ||
<MiniMap /> | ||
{children} | ||
</ReactFlow> | ||
); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters