1
1
import React from 'react'
2
- import { Graph , Node , Path , Edge , Platform } from '@antv/x6'
2
+ import { Graph , Node , Path , Edge , Platform , StringExt } from '@antv/x6'
3
3
import { Selection } from '@antv/x6-plugin-selection'
4
- import { StringExt } from '@antv/x6-common'
5
4
import classnames from 'classnames'
6
5
import insertCss from 'insert-css'
7
6
import { register } from '@antv/x6-react-shape'
@@ -57,12 +56,16 @@ const PROCESSING_TYPE_LIST = [
57
56
58
57
// 不同节点类型的icon
59
58
const NODE_TYPE_LOGO = {
60
- INPUT : 'https://mdn.alipayobjects.com/huamei_f4t1bn/afts/img/A*RXnuTpQ22xkAAAAAAAAAAAAADtOHAQ/original' , // 数据输入
61
- FILTER : 'https://mdn.alipayobjects.com/huamei_f4t1bn/afts/img/A*ZJ6qToit8P4AAAAAAAAAAAAADtOHAQ/original' , // 数据筛选
59
+ INPUT :
60
+ 'https://mdn.alipayobjects.com/huamei_f4t1bn/afts/img/A*RXnuTpQ22xkAAAAAAAAAAAAADtOHAQ/original' , // 数据输入
61
+ FILTER :
62
+ 'https://mdn.alipayobjects.com/huamei_f4t1bn/afts/img/A*ZJ6qToit8P4AAAAAAAAAAAAADtOHAQ/original' , // 数据筛选
62
63
JOIN : 'https://mdn.alipayobjects.com/huamei_f4t1bn/afts/img/A*EHqyQoDeBvIAAAAAAAAAAAAADtOHAQ/original' , // 数据连接
63
- UNION : 'https://mdn.alipayobjects.com/huamei_f4t1bn/afts/img/A*k4eyRaXv8gsAAAAAAAAAAAAADtOHAQ/original' , // 数据合并
64
+ UNION :
65
+ 'https://mdn.alipayobjects.com/huamei_f4t1bn/afts/img/A*k4eyRaXv8gsAAAAAAAAAAAAADtOHAQ/original' , // 数据合并
64
66
AGG : 'https://mdn.alipayobjects.com/huamei_f4t1bn/afts/img/A*TKG8R6nfYiAAAAAAAAAAAAAADtOHAQ/original' , // 数据聚合
65
- OUTPUT : 'https://mdn.alipayobjects.com/huamei_f4t1bn/afts/img/A*zUgORbGg1HIAAAAAAAAAAAAADtOHAQ/original' , // 数据输出
67
+ OUTPUT :
68
+ 'https://mdn.alipayobjects.com/huamei_f4t1bn/afts/img/A*zUgORbGg1HIAAAAAAAAAAAAADtOHAQ/original' , // 数据输出
66
69
}
67
70
68
71
/**
@@ -105,7 +108,7 @@ const getDownstreamNodePosition = (
105
108
106
109
return {
107
110
x : minX !== Infinity ? minX : position . x + dx ,
108
- y : maxY !== - Infinity ? maxY + dy : position . y ,
111
+ y : maxY !== - Infinity ? maxY + dy : position . y ,
109
112
}
110
113
}
111
114
@@ -161,8 +164,12 @@ export const createNode = (
161
164
return { }
162
165
}
163
166
let newNode = { }
164
- const sameTypeNodes = graph . getNodes ( ) . filter ( item => item . getData ( ) ?. type === type ) ;
165
- const typeName = PROCESSING_TYPE_LIST ?. find ( ( item ) => item . type === type ) ?. name ;
167
+ const sameTypeNodes = graph
168
+ . getNodes ( )
169
+ . filter ( ( item ) => item . getData ( ) ?. type === type )
170
+ const typeName = PROCESSING_TYPE_LIST ?. find (
171
+ ( item ) => item . type === type ,
172
+ ) ?. name
166
173
const id = StringExt . uuid ( )
167
174
const node = {
168
175
id,
@@ -243,21 +250,24 @@ class DataProcessingDagNode extends React.Component<{
243
250
getPlusDagMenu = ( ) => {
244
251
return (
245
252
< ul >
246
- {
247
- PROCESSING_TYPE_LIST . map ( ( item ) => {
248
- const content = (
249
- < a onClick = { ( ) => this . clickPlusDragMenu ( item . type ) } >
250
- < i
251
- className = "node-mini-logo"
252
- style = { { backgroundImage : `url(${ NODE_TYPE_LOGO [ item . type ] } )` } }
253
- />
254
-
255
- < span > { item . name } </ span >
256
- </ a >
257
- )
258
- return < li className = "each-sub-menu" > { content } </ li >
259
- } )
260
- }
253
+ { PROCESSING_TYPE_LIST . map ( ( item ) => {
254
+ const content = (
255
+ // eslint-disable-next-line
256
+ < a onClick = { ( ) => this . clickPlusDragMenu ( item . type ) } >
257
+ < i
258
+ className = "node-mini-logo"
259
+ style = { { backgroundImage : `url(${ NODE_TYPE_LOGO [ item . type ] } )` } }
260
+ />
261
+
262
+ < span > { item . name } </ span >
263
+ </ a >
264
+ )
265
+ return (
266
+ < li className = "each-sub-menu" key = { item . type } >
267
+ { content }
268
+ </ li >
269
+ )
270
+ } ) }
261
271
</ ul >
262
272
)
263
273
}
@@ -273,9 +283,12 @@ class DataProcessingDagNode extends React.Component<{
273
283
onMainMouseEnter = ( ) => {
274
284
const { node } = this . props
275
285
// 获取该节点下的所有连接桩
276
- const ports = node . getPorts ( ) || [ ] ;
286
+ const ports = node . getPorts ( ) || [ ]
277
287
ports . forEach ( ( port ) => {
278
- node . setPortProp ( port . id , 'attrs/circle' , { fill : '#fff' , stroke : '#85A5FF' } )
288
+ node . setPortProp ( port . id , 'attrs/circle' , {
289
+ fill : '#fff' ,
290
+ stroke : '#85A5FF' ,
291
+ } )
279
292
} )
280
293
}
281
294
@@ -285,7 +298,10 @@ class DataProcessingDagNode extends React.Component<{
285
298
// 获取该节点下的所有连接桩
286
299
const ports = node . getPorts ( ) || [ ]
287
300
ports . forEach ( ( port ) => {
288
- node . setPortProp ( port . id , 'attrs/circle' , { fill : 'transparent' , stroke : 'transparent' } )
301
+ node . setPortProp ( port . id , 'attrs/circle' , {
302
+ fill : 'transparent' ,
303
+ stroke : 'transparent' ,
304
+ } )
289
305
} )
290
306
}
291
307
@@ -404,21 +420,31 @@ Graph.registerConnector(
404
420
( sourcePoint , targetPoint ) => {
405
421
const hgap = Math . abs ( targetPoint . x - sourcePoint . x )
406
422
const path = new Path ( )
407
- path . appendSegment ( Path . createSegment ( 'M' , sourcePoint . x - 4 , sourcePoint . y ) )
408
- path . appendSegment ( Path . createSegment ( 'L' , sourcePoint . x + 12 , sourcePoint . y ) )
423
+ path . appendSegment (
424
+ Path . createSegment ( 'M' , sourcePoint . x - 4 , sourcePoint . y ) ,
425
+ )
426
+ path . appendSegment (
427
+ Path . createSegment ( 'L' , sourcePoint . x + 12 , sourcePoint . y ) ,
428
+ )
409
429
// 水平三阶贝塞尔曲线
410
430
path . appendSegment (
411
431
Path . createSegment (
412
432
'C' ,
413
- sourcePoint . x < targetPoint . x ? sourcePoint . x + hgap / 2 : sourcePoint . x - hgap / 2 ,
433
+ sourcePoint . x < targetPoint . x
434
+ ? sourcePoint . x + hgap / 2
435
+ : sourcePoint . x - hgap / 2 ,
414
436
sourcePoint . y ,
415
- sourcePoint . x < targetPoint . x ? targetPoint . x - hgap / 2 : targetPoint . x + hgap / 2 ,
437
+ sourcePoint . x < targetPoint . x
438
+ ? targetPoint . x - hgap / 2
439
+ : targetPoint . x + hgap / 2 ,
416
440
targetPoint . y ,
417
441
targetPoint . x - 6 ,
418
442
targetPoint . y ,
419
443
) ,
420
444
)
421
- path . appendSegment ( Path . createSegment ( 'L' , targetPoint . x + 2 , targetPoint . y ) )
445
+ path . appendSegment (
446
+ Path . createSegment ( 'L' , targetPoint . x + 2 , targetPoint . y ) ,
447
+ )
422
448
423
449
return path . serialize ( )
424
450
} ,
@@ -521,7 +547,7 @@ const graph: Graph = new Graph({
521
547
} )
522
548
} ,
523
549
// 连接桩校验
524
- validateConnection ( { sourceView , targetView , sourceMagnet, targetMagnet } ) {
550
+ validateConnection ( { sourceMagnet, targetMagnet } ) {
525
551
// 只能从输出链接桩创建连接
526
552
if ( ! sourceMagnet || sourceMagnet . getAttribute ( 'port-group' ) === 'in' ) {
527
553
return false
@@ -535,14 +561,16 @@ const graph: Graph = new Graph({
535
561
} ,
536
562
} )
537
563
538
- graph . use ( new Selection ( {
539
- enabled : true ,
540
- multiple : true ,
541
- rubberEdge : true ,
542
- rubberNode : true ,
543
- modifiers : 'shift' ,
544
- rubberband : true ,
545
- } ) )
564
+ graph . use (
565
+ new Selection ( {
566
+ enabled : true ,
567
+ multiple : true ,
568
+ rubberEdge : true ,
569
+ rubberNode : true ,
570
+ modifiers : 'shift' ,
571
+ rubberband : true ,
572
+ } ) ,
573
+ )
546
574
547
575
// 节点状态列表
548
576
const nodeStatusList = [
@@ -565,7 +593,7 @@ const nodeStatusList = [
565
593
{
566
594
id : 'node-4' ,
567
595
status : 'error' ,
568
- statusMsg : '错误信息示例'
596
+ statusMsg : '错误信息示例' ,
569
597
} ,
570
598
]
571
599
@@ -656,7 +684,6 @@ fetch('/data/data-processing-dag.json')
656
684
} , 3000 )
657
685
} )
658
686
659
-
660
687
insertCss ( `
661
688
.data-processing-dag-node {
662
689
display: flex;
0 commit comments