@steedos/steedos-plugin-schema-builder 2.5.13 → 2.5.14-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/package.json +3 -3
  2. package/package.service.js +7 -5
  3. package/plugin.config.yml +0 -4
  4. package/webapp/index.html +0 -0
  5. package/webapp/package.json +0 -53
  6. package/webapp/src/g6/behavior/activate-relations/index.tsx +0 -160
  7. package/webapp/src/g6/behavior/darg/index.tsx +0 -146
  8. package/webapp/src/g6/behavior/index.tsx +0 -5
  9. package/webapp/src/g6/model/editor-background.png +0 -0
  10. package/webapp/src/g6/model/index.tsx +0 -574
  11. package/webapp/src/g6/model/model-node.tsx +0 -1080
  12. package/webapp/src/g6/model/model.scss +0 -163
  13. package/webapp/src/g6/model/toolbar.tsx +0 -360
  14. package/webapp/src/g6/shape/base-sharp/index.tsx +0 -19
  15. package/webapp/src/g6/shape/index.tsx +0 -0
  16. package/webapp/src/g6/util/graph.tsx +0 -60
  17. package/webapp/src/g6/util/hooks.tsx +0 -26
  18. package/webapp/src/g6/util/index.tsx +0 -20
  19. package/webapp/src/hook/index.tsx +0 -47
  20. package/webapp/src/index.tsx +0 -25
  21. package/webapp/src/page/dva-model/index.tsx +0 -70
  22. package/webapp/src/page/dva-model/reducer/arrange.tsx +0 -16
  23. package/webapp/src/page/dva-model/reducer/index.tsx +0 -7
  24. package/webapp/src/page/dva-model/reducer/init.tsx +0 -61
  25. package/webapp/src/page/dva-model/reducer/model.tsx +0 -126
  26. package/webapp/src/page/dva-model/reducer/on-expand.tsx +0 -27
  27. package/webapp/src/page/dva-model/style.tsx +0 -88
  28. package/webapp/src/page/hooks/callback.tsx +0 -54
  29. package/webapp/src/page/hooks/fullscreen.tsx +0 -34
  30. package/webapp/src/page/hooks/pagehooks.tsx +0 -127
  31. package/webapp/src/page/hooks/resize.tsx +0 -20
  32. package/webapp/src/page/index.tsx +0 -393
  33. package/webapp/src/page/model-navi/index.tsx +0 -329
  34. package/webapp/src/page/model-navi/style.scss +0 -111
  35. package/webapp/src/page/util/index.tsx +0 -234
  36. package/webapp/src/page/util/layout-nodes/index.tsx +0 -185
  37. package/webapp/src/pdm/index.tsx +0 -50
  38. package/webapp/src/pdm/pdm-json/index.js +0 -224
  39. package/webapp/src/pdm/pdm-json/removeDiacritics.js +0 -96
  40. package/webapp/src/style.less +0 -14
  41. package/webapp/src/tree/index.tsx +0 -46
  42. package/webapp/src/tree/style.scss +0 -26
  43. package/webapp/src/type/field.tsx +0 -10
  44. package/webapp/src/type/index.tsx +0 -3
  45. package/webapp/src/type/model.tsx +0 -12
  46. package/webapp/src/type/module.tsx +0 -4
  47. package/webapp/webconfig.config.js +0 -57
@@ -1,574 +0,0 @@
1
- import G6 from '@antv/g6'
2
- import Immer from 'immer'
3
- import _ from 'lodash'
4
- import React, { useEffect, useRef, useState } from 'react'
5
- import { register } from './model-node'
6
- import './model.scss'
7
- import Toolbar from './toolbar'
8
- import { useSelector } from '../../hook'
9
- // import intl from './../util/intel'
10
- const MINZOOM = 0.01
11
- const MAXZOOM = 1.1
12
- export const render = (container, data, props, setZoom, lockMinZoom) => {
13
- let width = props.width
14
- let height = props.height
15
- const { styleConfig } = props
16
- const nodes = data.nodes
17
- let graph = new G6.Graph({
18
- // renderer:"svg",
19
- // groupByTypes: false,
20
- fitView: true,
21
- container,
22
- minZoom: lockMinZoom ? 0.6 : MINZOOM,
23
- maxZoom: MAXZOOM,
24
- width,
25
- height,
26
- // autoPaint: false,
27
- // layout: {
28
- // type: 'fruchterman',
29
- // gravity: 20, // 可选
30
- // speed: 2, // 可选
31
- // clustering: true, // 可选
32
- // clusterGravity: 30, // 可选
33
- // maxIteration: 2000, // 可选,迭代次数
34
- // workerEnabled: true // 可选,开启 web-worker }
35
- // },
36
- // layout : {
37
- // alphaDecay: 0.2 ,
38
- // type: 'force',
39
- // // collideStrength: 0.5,
40
- // // nodeSpacing: (d) => {
41
- // // if (d.id === 'model-SYS-CENTER-POINT') {
42
- // // return 500;
43
- // // }
44
- // // return -150;
45
- // // },
46
-
47
- // // nodeStrength: d => {
48
- // // if (d.id === 'model-SYS-CENTER-POINT') {
49
- // // return : 500;
50
- // // }
51
- // // return 0;
52
- // // },
53
- // preventOverlap: true,
54
- // onLayoutEnd: () => {
55
- // graph.fitView(0)
56
- // }
57
-
58
- // },
59
- animate: true,
60
- defaultEdge: styleConfig.default.edge,
61
- edgeStateStyles: {
62
- default: styleConfig.default.edge,
63
- active: {
64
- opacity: 1,
65
- size: 3,
66
- }
67
- },
68
- modes: {
69
- default: [
70
- 'drag-canvas', {
71
- type: 'zoom-canvas',
72
- // enableOptimize: true,
73
- minZoom: MINZOOM,
74
- maxZoom: MAXZOOM,
75
- },
76
- {
77
- type: 'drag-node',
78
- // enableDelegate: true,
79
- // delegate: false,
80
- // delegateStyle: {
81
- // strokeOpacity: 0, fillOpacity: 0
82
- // }
83
- },
84
- {
85
- type: 'edge-tooltip',
86
- formatText: (model) => {
87
- return model.tooltip;
88
- },
89
- offset: 10
90
- },
91
- {
92
- type: 'activate-relations',
93
- // resetSelected: true,
94
- trigger: 'click'
95
- },
96
- ],
97
- },
98
- plugins: [
99
- new G6.Minimap({
100
- type: 'delegate',
101
- viewportClassName: 'g6-minimap-viewport-erd',
102
- delegateStyle: {
103
- fill: 'rgba(0,0,0,0.10)',
104
- },
105
- })
106
- ],
107
- })
108
- graph.data({ nodes, edges: data.edges })
109
- graph.render()
110
- // alert(nodes.length)
111
- graph.get('canvas').set('localRefresh', false)
112
- graph.on('node:dblclick', (ev) => {
113
- const node = ev.item
114
- node.toFront()
115
- graph.paint()
116
-
117
- if (props.nodeDbClick) {
118
- props.nodeDbClick(ev.item.getModel().id)
119
- }
120
- })
121
-
122
- const whZoom = _.throttle(() => {
123
- const zoom = graph.getZoom()
124
- setZoom(zoom)
125
- }, 100)
126
-
127
- graph.on('canvas:dragstart', () => {
128
- const canvasElement = graph.get('canvas').get('el')
129
- canvasElement.style.cursor = 'grabbing'
130
- })
131
-
132
- // graph.on('afterlayout', () => {
133
- // // alert()
134
- // setTimeout(()=>{
135
- // graph.fitView(0)
136
- // }, 500)
137
-
138
- // })
139
-
140
- // canvas:dragend
141
- graph.on('canvas:dragend', () => {
142
- const canvasElement = graph.get('canvas').get('el')
143
- canvasElement.style.cursor = 'grab'
144
- })
145
-
146
- graph.on('wheelzoom', (e) => {
147
- whZoom()
148
- })
149
- graph.on('node:mouseout', (ev) => {
150
- const {
151
- item,
152
- } = ev
153
- const autoPaint = graph.get('autoPaint')
154
- graph.setAutoPaint(false)
155
- item.getContainer().findAll((sharp) => sharp.attr('fieldHover')).forEach((sharp) => {
156
- if (sharp.attr('fill-old')) {
157
- sharp.attr('fill', sharp.attr('fill-old'))
158
- sharp.attr('fill-old', undefined)
159
- }
160
-
161
- if (sharp.attr('opacity-old')) {
162
- sharp.attr('opacity', sharp.attr('opacity-old'))
163
- sharp.attr('opacity-old', undefined)
164
- }
165
- })
166
- graph.paint()
167
- graph.setAutoPaint(autoPaint)
168
- })
169
- graph.on('node:mousemove', (ev) => {
170
- const {
171
- target,
172
- item,
173
- } = ev // alert(target.attr('text'))
174
-
175
- const autoPaint = graph.get('autoPaint')
176
- graph.get('canvas').set('localRefresh', false)
177
- graph.setAutoPaint(false) // if (target.attr('fieldBg')) {
178
- // item.setState('fieldHover-' + target.attr('fieldName'), true)
179
- // }
180
-
181
- const fieldName = target.attr('fieldName')
182
- item.getContainer().findAll((sharp) => sharp.attr('fieldHover')).forEach((sharp) => {
183
- if (sharp.attr('fill-old')) {
184
- sharp.attr('fill', sharp.attr('fill-old'))
185
- sharp.attr('fill-old', undefined)
186
- }
187
-
188
- if (sharp.attr('fieldHoverShow')) {
189
- sharp.attr('opacity', 0) // sharp.attr('opacity-old', undefined)
190
- }
191
-
192
- if (sharp.attr('fieldName') === fieldName) {
193
- sharp.attr('fill-old', sharp.attr('fill'))
194
- sharp.attr('fill', sharp.attr('fieldBg') ? 'rgb(204,204,204)' : 'white')
195
-
196
- if (sharp.attr('fieldHoverShow')) {
197
- sharp.attr('opacity-old', sharp.attr('opacity')) // alert(sharp.attr('opacity'))
198
-
199
- sharp.attr('opacity', 1)
200
- }
201
- }
202
- }) // item.refresh()
203
-
204
- graph.paint()
205
- graph.setAutoPaint(autoPaint)
206
- })
207
-
208
- // click
209
-
210
- graph.on('node:click', (ev) => {
211
- const {
212
- target,
213
- } = ev
214
-
215
- if (target.attr('click')) {
216
- props.toolBarCommand && props.toolBarCommand('click', {
217
- node: ev.item.getModel().id,
218
- arg: target.attr('arg'),
219
- click: target.attr('click'),
220
- })
221
- } else {
222
- props.toolBarCommand && props.toolBarCommand('nodeClick', {
223
- node: ev.item.getModel().id,
224
- })
225
-
226
- if (props.nodeClick) {
227
- props.nodeClick(ev.item.getModel().id)
228
- }
229
- }
230
- })
231
- graph.on('node:dragend', (ev) => {
232
- const shape = ev.target
233
- const node = ev.item
234
- const edges = node.getEdges()
235
- const x = ev.x
236
- edges.forEach((edge) => {
237
- const sourceNode = edge.getSource()
238
- const targetNode = edge.getTarget()
239
-
240
- if (node === sourceNode) {
241
- const edgeModel = edge.getModel()
242
- const isTo = x < targetNode.getModel().x
243
- const i = edgeModel.fieldIndex
244
- const l = edgeModel.fieldsLength
245
- if (sourceNode === targetNode) {
246
- graph.updateItem(edge, {
247
- // sourceAnchor: !isTo ? i + 2 : 2 + i + l,
248
- // targetAnchor: edge.targetAnchor,
249
- })
250
- } else {
251
- graph.updateItem(edge, {
252
- sourceAnchor: !isTo ? i + 2 : 2 + i + l,
253
- // targetAnchor: isTo ? 0 : 1,
254
- })
255
-
256
- }
257
-
258
- } else {
259
- const edgeModel = edge.getModel()
260
- const isTo = sourceNode.getModel().x < x
261
- const i = edgeModel.fieldIndex
262
- const l = edgeModel.fieldsLength
263
-
264
- if (sourceNode === targetNode) {
265
- graph.updateItem(edge, {
266
- // sourceAnchor: !isTo ? i + 2 : 2 + i + l,
267
- // targetAnchor: undefined,
268
- })
269
- } else {
270
- graph.updateItem(edge, {
271
- sourceAnchor: !isTo ? i + 2 : 2 + i + l,
272
- // targetAnchor: isTo ? 0 : 1,
273
- })
274
- }
275
- }
276
- }) // ----获取所有的边
277
- // ----获取所有关联模型
278
- // ----计算位置
279
- // ----重新设置锚点
280
- // node.toFront()
281
-
282
- graph.paint() // console.log(shape)
283
- })
284
- graph.on('beforepaint', _.throttle(() => {
285
- // alert()
286
- const isExporting = graph['isExporting']
287
- const gWidth = graph.get('width')
288
- const gHeight = graph.get('height')
289
- // 获取视窗左上角对应画布的坐标点
290
- const topLeft = graph.getPointByCanvas(0, 0) // 获取视窗右下角对应画布坐标点
291
-
292
- const bottomRight = graph.getPointByCanvas(gWidth, gHeight)
293
- graph.getNodes().filter((a) => !a.isSys).forEach((node) => {
294
- const model = node.getModel()
295
- if (model.isSys) {
296
- node.getContainer().hide()
297
- return
298
- }
299
- if (isExporting) return
300
- const {
301
- config,
302
- data: _data,
303
- } = model
304
- const h = (config.headerHeight + _data.fields.length * config.fieldHeight + 4) / 2
305
- const w = config.width / 2 // 如果节点不在视窗中,隐藏该节点,则不绘制
306
- // note:由于此应用中有minimap,直接隐藏节点会影响缩略图视图,直接隐藏节点具体内容
307
-
308
- if (!model.selected && (model.x + w < topLeft.x - 200 || model.x - w > bottomRight.x || model.y + h < topLeft.y || model.y - h > bottomRight.y)) {
309
- node.getContainer().hide()
310
- } else {
311
- // 节点在视窗中,则展示
312
- node.getContainer().show()
313
- }
314
- })
315
- const edges = graph.getEdges()
316
- edges.forEach((edge) => {
317
- let sourceNode = edge.get('sourceNode')
318
- let targetNode = edge.get('targetNode')
319
- const targetModel = targetNode.getModel()
320
- if (!edge.getModel().self) {
321
- const isTo = targetModel.x > sourceNode.getModel().x
322
- const targetAnchor = (isTo ? 0 : 1)
323
- if (targetModel.targetAnchor !== targetAnchor)
324
- // edge.set('targetAnchor', targetAnchor)
325
- graph.updateItem(edge, { targetAnchor })
326
- }
327
-
328
- if (targetModel.isSys) {
329
- edge.hide()
330
- return
331
- }
332
- if (isExporting) return
333
-
334
- if (!sourceNode.getContainer().get('visible') && !targetNode.getContainer().get('visible')) {
335
- edge.hide()
336
- } else {
337
- edge.show()
338
- }
339
- })
340
- }, 300)) // graph.on('node:dblclick', (ev) => {
341
- // })
342
-
343
- return graph
344
- }
345
-
346
- const useUpdateItem = ({ currentModel, graph, showNameOrLabel }) => {
347
- useEffect(() => {
348
-
349
- if (graph) {
350
- const gnodes = graph.getNodes()
351
- if (!gnodes.length) return
352
- // alert(nodes.length)
353
- const zoomNum = graph.getZoom()
354
- // alert(JSON.stringify(nodes))
355
- gnodes.forEach((node) => {
356
- if (node.isSys) return
357
- const nodeModel = node.getModel()
358
- const nodeId = nodeModel.id
359
- const data = nodeModel ? nodeModel.data : undefined
360
- const isNoModule = (currentModel || '').indexOf('module-') >= 0 && ((data && data.moduleKey) !== currentModel)
361
- const isKeySharp = zoomNum <= 0.20 * 2
362
- const isCardSharp = zoomNum <= 0.05 * 2
363
- // alert(isKeySharp)
364
- graph.updateItem(node, {
365
- selected: nodeId === currentModel,
366
- noSelected: node !== currentModel,
367
- isNoModule,
368
- isKeySharp,
369
- isCardSharp,
370
- showNameOrLabel
371
- })
372
- })
373
-
374
- // const edges = graph.getEdges()
375
- // if(edges.length && currentModel){
376
- // edges.forEach(edge => {
377
- // if (edge.isSys) return
378
- // graph.setItemState(edge, 'active', true )
379
- // // edge.attr('stroke','red')
380
- // })
381
- // }
382
-
383
- // graph.paint()
384
- }
385
-
386
- }, [currentModel, graph && graph.getZoom(), graph?.getNodes(), showNameOrLabel])
387
- }
388
-
389
- export const ErdPage = (props) => {
390
- // const [data , setData ] = useState(props.graph)
391
- const { lockMinZoom, showNameOrLabel } = useSelector((s) => s[props.namespace])
392
- const containerRef = useRef({})
393
- const [graph, setGraph] = useState<any>(null)
394
- const {
395
- zoom,
396
- setZoom,
397
- } = useLocal()
398
-
399
-
400
- useEffect(() => {
401
- if (graph && props.width > 0 && props.height > 0) {
402
- // alert(props.width)
403
- graph.changeSize(props.width, props.height)
404
- graph.fitView(0) // alert(props.width)
405
-
406
- }
407
- }, [props.width, props.height])
408
-
409
- const setNodeXY = (nodesDict, node) => {
410
- const { id } = node
411
-
412
- if (nodesDict[id]) {
413
- node.x = nodesDict[id].x
414
- node.y = nodesDict[id].y
415
- return true
416
- }
417
- return false
418
- }
419
-
420
- useEffect(() => {
421
- if (graph && graph.getNodes().length) {
422
- // graph.updateLayout({
423
- // alphaDecay : 1 - graph.getNodes().length / 20
424
- // })
425
- // if(graph.getNodes().length <= 5)
426
- // {
427
- // // alert()
428
- // graph.updateLayout({
429
- // alphaDecay :1
430
- // })
431
- // }
432
- graph.fitView(0)
433
- // alert(111)
434
- }
435
-
436
- }, [graph?.getNodes().length >= 1])
437
-
438
- useEffect(() => {
439
- // alert(lockMinZoom)
440
- if (graph) {
441
- // minZoom: lockMinZoom ? 0.6 : MINZOOM,
442
- if (graph.getZoom() < 0.6) {
443
- graph.getNodes().filter((a) => !a.isSys).forEach((node) => {
444
- node.getContainer().show()
445
- graph.updateItem(node, {
446
- isKeySharp: false,
447
- isCardSharp: false,
448
- })
449
- })
450
- const gwidth = graph.get('width')
451
- const gheight = graph.get('height')
452
- const point = graph.getCanvasByPoint(gwidth / 2, gheight / 2)
453
- // graph.moveTo({x: point.x , y : point.y})
454
- graph.zoomTo(0.6, { x: point.x, y: point.y })
455
- }
456
- graph.setMinZoom(lockMinZoom ? 0.6 : MINZOOM)
457
- }
458
- }, [lockMinZoom])
459
-
460
-
461
- useUpdateItem({ currentModel: props.currentModel, graph, showNameOrLabel })
462
-
463
- useEffect(() => {
464
- register({ colors: props.colors })
465
- const g = render(containerRef.current, props.graph, props, setZoom, lockMinZoom)
466
- setGraph(g) // tslint:disable-next-line: no-unused-expression
467
-
468
- props.setGraph && props.setGraph(g)
469
- return () => {
470
- // alert(0)
471
- if (graph) {
472
- graph.destroy()
473
- }
474
- }
475
- }, [])
476
- useEffect(() => {
477
- // setGraph(render(containerRef.current, data, props))
478
- if (graph) {
479
- // })
480
- const data = props.graph // alert(JSON.stringify(data))
481
-
482
- if (data.nodes.length >= 1) {
483
-
484
- // graph.refresh()
485
- // alert()
486
- // graph.updateLayout({
487
- // alphaDecay: 1 ,
488
- // type: data.nodes.length <= 5 ? 'random' : 'force',
489
- // nodeSpacing: -150 ,
490
- // preventOverlap: true,
491
- // onLayoutEnd: () => {
492
- // graph.fitView(0)
493
- // }
494
- // })
495
- // graph.layout()
496
- // const graphString = sessionStorage.getItem('console-erd-graph')
497
- // // alert(graphString)
498
- // const nodesDict = graphString && JSON.parse(graphString)
499
- // data.nodes.forEach((node) => {
500
- // if (nodesDict) {
501
- // setNodeXY(nodesDict, node)
502
- // }
503
- // })
504
- console.log(data)
505
- graph.changeData(data)
506
- graph.updateLayout({
507
- type: data.nodes.length > 3 ? 'force' : 'circular',
508
- condense: true,
509
- cols: 3,
510
- workerEnabled: true,
511
- linkDistance: 0 ,
512
- alphaDecay: 0.2 ,
513
- // begin: [ 0, 0 ],
514
- preventOverlap: true,
515
- collideStrength: 0.5,
516
- nodeSpacing: -180,
517
-
518
- // nodeStrength: d => {
519
- // if (d.id === 'model-SYS-CENTER-POINT') {
520
- // return 500;
521
- // }
522
- // return 0;
523
- // },
524
- onLayoutEnd: () => {
525
- graph.fitView(0)
526
- const zoom = graph.getZoom()
527
- graph.findAll('node', (node) => true).map((node) => {
528
- // const isKeySharp = zoomNum <= 0.20 * 2
529
- // const isCardSharp = zoomNum <= 0.05 * 2
530
- graph.updateItem(node, {
531
- isKeySharp: zoom < 0.4,
532
- isCardSharp: zoom <= 0.1,
533
- })
534
- })
535
- setZoom(zoom)
536
- }
537
- })
538
-
539
- // data.nodes.length > 3 || setTimeout(() => {
540
- // graph.fitView(0)
541
- // const zoom = graph.getZoom()
542
- // graph.findAll('node', (node) => true).map((node) => {
543
- // // const isKeySharp = zoomNum <= 0.20 * 2
544
- // // const isCardSharp = zoomNum <= 0.05 * 2
545
- // graph.updateItem(node, {
546
- // isKeySharp: zoom < 0.4,
547
- // isCardSharp: zoom <= 0.1,
548
- // })
549
- // })
550
- // // alert(zoom)
551
- // setZoom(zoom)
552
- // }, 500)
553
-
554
- } else {
555
- graph.clear() // graph.fitView(0)
556
- graph.refresh()
557
- graph.paint()
558
- }
559
- }
560
- }, [props.graph])
561
-
562
- return (
563
- <div className='model-page'>
564
- <Toolbar setUpdateId={props.setUpdateId} namespace={props.namespace} zoom={zoom} {...props} graph={graph} currentModel={props.currentModel} toolBarCommands={props.toolBarCommands} />
565
- <div id='graph' ref={(ref) => containerRef.current = ref} className='graph' /></div>)
566
- }
567
-
568
- const useLocal = () => {
569
- const [zoom, setZoom] = useState(0)
570
- return {
571
- zoom,
572
- setZoom,
573
- }
574
- }