Skip to content

Commit

Permalink
📝 feat: update node type (#51)
Browse files Browse the repository at this point in the history
* 📝 fix: rm params

* 📝 fix: rm baseIntro less

* 📝 fix: rm quickUse less

* 📝 fix: rm flowEditor less

* 📝 fix: rm flowView less

* 📝 fix: rm custom edge and node less

* 📝 fix: rm much node demo

* ✨ feat: min and max zoom

* 📝 feat: css fix

* 📝 feat: on Node change

* 📝 feat: node item type

* 📝 feat: floe edge type

---------

Co-authored-by: jiangchu <jiangchu.wzy@antgroup.com>
  • Loading branch information
ModestFun and jiangchu committed Dec 14, 2023
1 parent 8746db5 commit abe196d
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 28 deletions.
9 changes: 8 additions & 1 deletion src/BasicNode/index.tsx
Expand Up @@ -87,7 +87,14 @@ const BasicNode: React.FC<{
{zoom <= 0.1 ? `${String(label).substring(0, 3)}...` : label}
</ArtboardTitle>
)}
<div className={cx(styles.nodeWrap, styles[getClsFromSelectType(selectType)], className)}>
<div
className={cx(
styles.nodeWrap,
styles[getClsFromSelectType(selectType)],
className,
'nodrag',
)}
>
<img className={'img'} src={logo} alt="" />
<div className={'content'}>
<div className={'title'}>
Expand Down
7 changes: 3 additions & 4 deletions src/FlowView/constants.tsx
@@ -1,5 +1,4 @@
import { Node } from 'reactflow';
import { DefaultNodeType, FlowNodeType, NodeTypeDataMap } from '../constants';

export enum SelectType {
SELECT = 'SELECT',
Expand All @@ -15,7 +14,7 @@ export interface InitialNode extends Node {
height?: number;
}

export interface NodeMapItem<T extends FlowNodeType = DefaultNodeType<FlowNodeType>> {
export interface NodeMapItem<T = any, U extends string | undefined = string | undefined> {
id: string;
key?: string;
left?: string[];
Expand All @@ -29,7 +28,7 @@ export interface NodeMapItem<T extends FlowNodeType = DefaultNodeType<FlowNodeTy
danger?: boolean;
dangerCount?: number;
type?: 'input' | 'output' | 'default';
flowNodeType?: T | string;
flowNodeType?: U;
className?: string;
select?: SelectType;
isGroup?: boolean;
Expand All @@ -39,7 +38,7 @@ export interface NodeMapItem<T extends FlowNodeType = DefaultNodeType<FlowNodeTy
qualityScore?: string;
subDanger?: boolean;
logo?: string;
data: NodeTypeDataMap[T];
data: T;
nodeType?: string;
zoom?: number;
label?: string;
Expand Down
14 changes: 8 additions & 6 deletions src/FlowView/demos/index.style.ts
@@ -1,6 +1,6 @@
import { createStyles } from 'antd-style';

const useStyles = createStyles(() => {
const useStyles = createStyles(({ css }) => {
return {
dangerLogo: {
width: '28px',
Expand All @@ -13,11 +13,13 @@ const useStyles = createStyles(() => {
alignItems: 'center',
img: { width: '8px', height: '9px' },
},
container: {
width: '100%',
height: '600px',
'.ant-progress-text': { textAlign: 'center' },
},
container: css`
width: 100%;
height: 600px;
.ant-progress-text {
text-align: center !important;
}
`,
CustomWrap: {
width: '300px',
height: '100px',
Expand Down
4 changes: 4 additions & 0 deletions src/FlowView/index.tsx
Expand Up @@ -24,6 +24,8 @@ const FlowView: React.FC<Partial<FlowViewProps>> = (props) => {
onPaneClick = initFn,
onNodeClick = initFn,
onEdgeClick = initFn,
onNodesChange = initFn,
onEdgesChange = initFn,
nodes = [],
edges = [],
nodeTypes = {},
Expand Down Expand Up @@ -112,6 +114,8 @@ const FlowView: React.FC<Partial<FlowViewProps>> = (props) => {
onPaneClick={handlePaneClick}
onNodeClick={handleNodeClick}
onEdgeClick={handleEdgeClick}
onNodesChange={onNodesChange}
onEdgesChange={onEdgesChange}
nodes={renderNodes}
edges={renderEdges}
nodeTypes={nodeTypesMemo}
Expand Down
26 changes: 11 additions & 15 deletions src/constants.tsx
Expand Up @@ -3,8 +3,7 @@ import React, {
type CSSProperties,
type MouseEvent as ReactMouseEvent,
} from 'react';
import ReactFlow, { Edge, EdgeProps, Node, NodeProps } from 'reactflow';
import { NodeMapItem } from './FlowView/constants';
import ReactFlow, { Edge, EdgeChange, EdgeProps, Node, NodeChange, NodeProps } from 'reactflow';

export enum SelectType {
SELECT = 'SELECT',
Expand Down Expand Up @@ -44,28 +43,23 @@ export interface NodeTypeDataMap {
lineageGroup: BasicGroupNodeData[];
}

export type FlowNodeType = keyof NodeTypeDataMap;

export type NodeHandler = {
[T in FlowNodeType]: (node: NodeMapItem) => React.ReactNode;
};

export type DefaultNodeType<T> = T extends FlowNodeType ? T : 'lineage';
export interface FlowViewNode<T extends FlowNodeType = DefaultNodeType<FlowNodeType>> {
export interface FlowViewNode<T = any, U extends string | undefined = string | undefined> {
id: string;
select?: SelectType;
data: NodeTypeDataMap[T] | any;
type?: T | string;
data: T;
type?: U;
label?: string;
width?: number;
height?: number;
style?: CSSProperties;
className?: string;
position?: {
x: number;
y: number;
};
}

export interface FlowViewEdge {
export interface FlowViewEdge<T = any, U extends string | undefined = string | undefined> {
id: string;
source: string;
target: string;
Expand All @@ -74,16 +68,18 @@ export interface FlowViewEdge {
animated?: boolean;
select?: SelectType;
label?: string;
type?: EdgeType | string;
type?: U;
className?: string;
data?: any;
data?: T;
}

export interface FlowViewProps {
onNodeDragStart?: (event: ReactMouseEvent, node: Node, nodes: Node[]) => void;
onPaneClick?: (event: ReactMouseEvent) => void;
onNodeClick?: (event: ReactMouseEvent, node: Node) => void;
onEdgeClick?: (event: ReactMouseEvent, edge: Edge) => void;
onNodesChange?: (changes: NodeChange[]) => void;
onEdgesChange?: (changes: EdgeChange[]) => void;
flowProps?: ComponentProps<typeof ReactFlow>;
nodes: FlowViewNode[];
edges: FlowViewEdge[];
Expand Down
22 changes: 20 additions & 2 deletions src/index.ts
@@ -1,4 +1,13 @@
import { BaseEdge, EdgeLabelRenderer, EdgeProps, Handle, Position, getBezierPath } from 'reactflow';
import {
BaseEdge,
EdgeLabelRenderer,
EdgeProps,
Handle,
Position,
getBezierPath,
useEdgesState,
useNodesState,
} from 'reactflow';

export * from './Background';
export { default as Background } from './Background';
Expand All @@ -22,4 +31,13 @@ export { NodeField, useNodeFieldStyles } from './NodeField';
export type { ExtraAction } from './NodeField';
export { default as RadiusEdge } from './RadiusEdge';
export * from './constants';
export { BaseEdge, EdgeLabelRenderer, Handle, Position, getBezierPath, type EdgeProps };
export {
BaseEdge,
EdgeLabelRenderer,
Handle,
Position,
getBezierPath,
useEdgesState,
useNodesState,
type EdgeProps,
};

0 comments on commit abe196d

Please sign in to comment.