@@ -4,13 +4,15 @@ import '@logicflow/core/es/index.css'
4
4
5
5
import { Button , Card , Divider , Flex } from 'antd'
6
6
import { useEffect , useRef } from 'react'
7
- import { combine , square , star , uml , user , reactNode } from './nodes'
7
+ import { combine , square , star , uml , user } from './nodes'
8
8
import { animation , connection } from './edges'
9
9
10
- import GraphConfigData = LogicFlow . GraphConfigData
10
+ import GraphData = LogicFlow . GraphData
11
11
import './index.less'
12
12
13
- const defaultConfig : Partial < LogicFlow . Options > = {
13
+ import OnDragNodeConfig = LogicFlow . OnDragNodeConfig
14
+
15
+ const config : Partial < LogicFlow . Options > = {
14
16
isSilentMode : false ,
15
17
stopScrollGraph : true ,
16
18
stopZoomGraph : true ,
@@ -38,7 +40,11 @@ const defaultConfig: Partial<LogicFlow.Options> = {
38
40
} ,
39
41
text : {
40
42
color : '#b85450' ,
41
- fontSize : 14 ,
43
+ fontSize : 12 ,
44
+ } ,
45
+ inputText : {
46
+ background : 'black' ,
47
+ color : 'white' ,
42
48
} ,
43
49
} ,
44
50
}
@@ -57,7 +63,7 @@ const customTheme: Partial<LogicFlow.Theme> = {
57
63
lineHeight : 1.5 ,
58
64
fontSize : 13 ,
59
65
textWidth : 100 ,
60
- } , // 确认 textWidth 是否必传
66
+ } , // 确认 textWidth 是否必传 ❓
61
67
polyline : {
62
68
stroke : 'red' ,
63
69
} ,
@@ -70,41 +76,40 @@ const customTheme: Partial<LogicFlow.Theme> = {
70
76
verticalLength : 2 , // 箭头垂直于边的距离
71
77
} ,
72
78
}
73
- const data : GraphConfigData = {
79
+ const data = {
74
80
nodes : [
75
81
{
76
82
id : 'custom-node-1' ,
77
83
rotate : 1.1722738811284763 ,
78
84
text : {
79
85
x : 600 ,
80
86
y : 200 ,
81
- value : 'xxxxx ' ,
87
+ value : 'node-1 ' ,
82
88
} ,
83
89
type : 'rect' ,
84
90
x : 600 ,
85
91
y : 200 ,
92
+ properties : {
93
+ width : 80 ,
94
+ height : 120 ,
95
+ } ,
86
96
} ,
87
97
{
88
- id : 'custom-react-node-1' ,
89
- text : {
90
- x : 200 ,
91
- y : 500 ,
92
- value : 'custom-react-node' ,
93
- } ,
94
- type : 'custom-react-node' ,
95
- x : 200 ,
96
- y : 500 ,
98
+ id : 'custom-node-2' ,
99
+ text : 'node-2' ,
100
+ type : 'polygon' ,
101
+ x : 90 ,
102
+ y : 94 ,
97
103
} ,
98
104
] ,
99
- edges : [ ] ,
100
105
}
101
106
102
107
export default function BasicNode ( ) {
103
108
const lfRef = useRef < LogicFlow > ( )
104
109
const containerRef = useRef < HTMLDivElement > ( null )
105
110
106
111
const registerElements = ( lf : LogicFlow ) => {
107
- const elements = [
112
+ const elements : LogicFlow . RegisterConfig [ ] = [
108
113
// edges
109
114
animation ,
110
115
connection ,
@@ -114,7 +119,6 @@ export default function BasicNode() {
114
119
star ,
115
120
uml ,
116
121
user ,
117
- reactNode ,
118
122
]
119
123
120
124
map ( elements , ( customElement ) => {
@@ -131,10 +135,10 @@ export default function BasicNode() {
131
135
useEffect ( ( ) => {
132
136
if ( ! lfRef . current ) {
133
137
const lf = new LogicFlow ( {
134
- ...defaultConfig ,
138
+ ...config ,
135
139
container : containerRef . current as HTMLElement ,
136
140
// hideAnchors: true,
137
- // width: 1200 ,
141
+ // width: 800 ,
138
142
// height: 400,
139
143
// adjustNodePosition: false,
140
144
// isSilentMode: true,
@@ -150,6 +154,7 @@ export default function BasicNode() {
150
154
adjustEdgeStartAndEnd : true ,
151
155
// adjustEdge: false,
152
156
allowRotate : true ,
157
+ // allowResize: true,
153
158
edgeTextEdit : true ,
154
159
keyboard : {
155
160
enabled : true ,
@@ -175,18 +180,12 @@ export default function BasicNode() {
175
180
background : {
176
181
color : '#FFFFFF' ,
177
182
} ,
178
- // grid: true,
179
- grid : {
180
- size : 20 ,
181
- } ,
183
+ grid : true ,
184
+ // grid: {
185
+ // size: 1 ,
186
+ // },
182
187
edgeTextDraggable : true ,
183
188
edgeType : 'bezier' ,
184
- // style: {
185
- // inputText: {
186
- // background: 'black',
187
- // color: 'white',
188
- // },
189
- // },
190
189
// 全局自定义id
191
190
// edgeGenerator: (sourceNode, targetNode, currentEdge) => {
192
191
// // 起始节点类型 rect 时使用 自定义的边 custom-edge
@@ -291,38 +290,23 @@ export default function BasicNode() {
291
290
292
291
const handleTurnAnimationOn = ( ) => {
293
292
if ( lfRef . current ) {
294
- const { edges } = lfRef . current . getGraphRawData ( )
293
+ const { edges } = lfRef . current . getGraphData ( ) as GraphData
295
294
forEach ( edges , ( edge ) => {
296
295
lfRef . current ?. openEdgeAnimation ( edge . id )
297
296
} )
298
297
}
299
298
}
300
299
const handleTurnAnimationOff = ( ) => {
301
300
if ( lfRef . current ) {
302
- const { edges } = lfRef . current . getGraphRawData ( )
301
+ const { edges } = lfRef . current . getGraphData ( ) as GraphData
303
302
forEach ( edges , ( edge ) => {
304
303
lfRef . current ?. closeEdgeAnimation ( edge . id )
305
304
} )
306
305
}
307
306
}
308
307
309
- const handleDragRect = ( ) => {
310
- lfRef ?. current ?. dnd . startDrag ( {
311
- type : 'rect' ,
312
- text : 'rect' ,
313
- } )
314
- }
315
- const handleDragCircle = ( ) => {
316
- lfRef ?. current ?. dnd . startDrag ( {
317
- type : 'circle' ,
318
- text : 'circle' ,
319
- } )
320
- }
321
- const handleDragText = ( ) => {
322
- lfRef ?. current ?. dnd . startDrag ( {
323
- type : 'text' ,
324
- text : '文本节点' ,
325
- } )
308
+ const handleDragItem = ( node : OnDragNodeConfig ) => {
309
+ lfRef ?. current ?. dnd . startDrag ( node )
326
310
}
327
311
328
312
return (
@@ -461,9 +445,95 @@ export default function BasicNode() {
461
445
节点面板
462
446
</ Divider >
463
447
< Flex wrap = "wrap" gap = "small" justify = "center" align = "center" >
464
- < div className = "rect dnd-item" onMouseDown = { handleDragRect } />
465
- < div className = "circle dnd-item" onMouseDown = { handleDragCircle } />
466
- < div className = "text dnd-item" onMouseDown = { handleDragText } >
448
+ < div
449
+ className = "dnd-item wrapper"
450
+ onMouseDown = { ( ) =>
451
+ handleDragItem ( {
452
+ type : 'rect' ,
453
+ text : 'rect' ,
454
+ } )
455
+ }
456
+ >
457
+ rect
458
+ </ div >
459
+ < div
460
+ className = "dnd-item wrapper"
461
+ onMouseDown = { ( ) => {
462
+ handleDragItem ( {
463
+ type : 'circle' ,
464
+ text : 'circle' ,
465
+ } )
466
+ } }
467
+ >
468
+ circle
469
+ </ div >
470
+ < div
471
+ className = "dnd-item wrapper"
472
+ onMouseDown = { ( ) => {
473
+ handleDragItem ( {
474
+ type : 'diamond' ,
475
+ text : 'diamond' ,
476
+ } )
477
+ } }
478
+ >
479
+ diamond
480
+ </ div >
481
+ < div
482
+ className = "dnd-item wrapper"
483
+ onMouseDown = { ( ) => {
484
+ handleDragItem ( {
485
+ type : 'ellipse' ,
486
+ text : 'ellipse' ,
487
+ properties : {
488
+ rx : 40 ,
489
+ ry : 80 ,
490
+ } ,
491
+ } )
492
+ } }
493
+ >
494
+ ellipse
495
+ </ div >
496
+ < div
497
+ className = "dnd-item wrapper"
498
+ onMouseDown = { ( ) => {
499
+ handleDragItem ( {
500
+ type : 'html' ,
501
+ text : 'html' ,
502
+ } )
503
+ } }
504
+ >
505
+ html
506
+ </ div >
507
+ < div
508
+ className = "dnd-item wrapper"
509
+ onMouseDown = { ( ) => {
510
+ handleDragItem ( {
511
+ type : 'polygon' ,
512
+ text : 'polygon' ,
513
+ properties : {
514
+ width : 110 ,
515
+ height : 100 ,
516
+ style : {
517
+ fill : '#ffd591' ,
518
+ stroke : '#ffa940' ,
519
+ strokeWidth : 2 ,
520
+ fillRule : 'evenodd' ,
521
+ } ,
522
+ } ,
523
+ } )
524
+ } }
525
+ >
526
+ polygon
527
+ </ div >
528
+ < div
529
+ className = "dnd-item text"
530
+ onMouseDown = { ( ) => {
531
+ handleDragItem ( {
532
+ type : 'text' ,
533
+ text : '文本' ,
534
+ } )
535
+ } }
536
+ >
467
537
文本
468
538
</ div >
469
539
</ Flex >
0 commit comments