@logicflow/core 2.2.0 → 2.2.1

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 (236) hide show
  1. package/dist/index.css +3 -2
  2. package/dist/index.min.js +1 -1
  3. package/dist/index.min.js.map +1 -1
  4. package/es/LogicFlow.d.ts +9 -0
  5. package/es/LogicFlow.js +0 -1
  6. package/es/constant/index.d.ts +1 -1
  7. package/es/constant/index.js +1 -1
  8. package/es/constant/theme.d.ts +136 -0
  9. package/es/constant/theme.js +680 -0
  10. package/es/index.css +3 -2
  11. package/es/model/GraphModel.d.ts +10 -2
  12. package/es/model/GraphModel.js +48 -14
  13. package/es/model/TransformModel.js +9 -9
  14. package/es/model/edge/BaseEdgeModel.js +7 -2
  15. package/es/model/edge/PolylineEdgeModel.d.ts +7 -0
  16. package/es/model/edge/PolylineEdgeModel.js +136 -7
  17. package/es/model/node/BaseNodeModel.d.ts +12 -1
  18. package/es/model/node/BaseNodeModel.js +9 -2
  19. package/es/model/node/HtmlNodeModel.d.ts +12 -0
  20. package/es/model/node/HtmlNodeModel.js +19 -0
  21. package/es/model/node/PolygonNodeModel.js +3 -3
  22. package/es/options.d.ts +4 -2
  23. package/es/style/index.css +3 -2
  24. package/es/style/index.less +3 -2
  25. package/es/style/raw.d.ts +1 -1
  26. package/es/style/raw.js +1 -1
  27. package/es/tool/MultipleSelectTool.js +10 -5
  28. package/es/util/drag.js +0 -1
  29. package/es/util/edge.d.ts +40 -1
  30. package/es/util/edge.js +43 -9
  31. package/es/util/geometry.d.ts +8 -0
  32. package/es/util/geometry.js +79 -0
  33. package/es/util/theme.d.ts +2 -65
  34. package/es/util/theme.js +4 -281
  35. package/es/view/Anchor.d.ts +1 -0
  36. package/es/view/Anchor.js +24 -21
  37. package/es/view/Control.d.ts +5 -0
  38. package/es/view/Control.js +44 -57
  39. package/es/view/edge/BaseEdge.js +9 -0
  40. package/es/view/edge/PolylineEdge.js +13 -2
  41. package/es/view/node/BaseNode.d.ts +1 -0
  42. package/es/view/node/BaseNode.js +23 -11
  43. package/es/view/node/HtmlNode.js +2 -4
  44. package/es/view/overlay/CanvasOverlay.js +5 -2
  45. package/es/view/overlay/Grid.d.ts +12 -1
  46. package/es/view/overlay/Grid.js +85 -23
  47. package/es/view/overlay/OutlineOverlay.d.ts +1 -0
  48. package/es/view/overlay/OutlineOverlay.js +18 -17
  49. package/es/view/overlay/gridConfig.d.ts +46 -0
  50. package/es/view/overlay/gridConfig.js +99 -0
  51. package/es/view/shape/Polygon.d.ts +0 -7
  52. package/es/view/shape/Polygon.js +12 -43
  53. package/lib/LogicFlow.d.ts +9 -0
  54. package/lib/LogicFlow.js +0 -1
  55. package/lib/constant/index.d.ts +1 -1
  56. package/lib/constant/index.js +16 -2
  57. package/lib/constant/theme.d.ts +136 -0
  58. package/lib/constant/theme.js +683 -0
  59. package/lib/index.css +3 -2
  60. package/lib/model/GraphModel.d.ts +10 -2
  61. package/lib/model/GraphModel.js +49 -15
  62. package/lib/model/TransformModel.js +9 -9
  63. package/lib/model/edge/BaseEdgeModel.js +7 -2
  64. package/lib/model/edge/PolylineEdgeModel.d.ts +7 -0
  65. package/lib/model/edge/PolylineEdgeModel.js +136 -7
  66. package/lib/model/node/BaseNodeModel.d.ts +12 -1
  67. package/lib/model/node/BaseNodeModel.js +9 -2
  68. package/lib/model/node/HtmlNodeModel.d.ts +12 -0
  69. package/lib/model/node/HtmlNodeModel.js +19 -0
  70. package/lib/model/node/PolygonNodeModel.js +3 -3
  71. package/lib/options.d.ts +4 -2
  72. package/lib/style/index.css +3 -2
  73. package/lib/style/index.less +3 -2
  74. package/lib/style/raw.d.ts +1 -1
  75. package/lib/style/raw.js +1 -1
  76. package/lib/tool/MultipleSelectTool.js +10 -5
  77. package/lib/util/drag.js +0 -1
  78. package/lib/util/edge.d.ts +40 -1
  79. package/lib/util/edge.js +43 -9
  80. package/lib/util/geometry.d.ts +8 -0
  81. package/lib/util/geometry.js +81 -1
  82. package/lib/util/theme.d.ts +2 -65
  83. package/lib/util/theme.js +15 -292
  84. package/lib/view/Anchor.d.ts +1 -0
  85. package/lib/view/Anchor.js +24 -21
  86. package/lib/view/Control.d.ts +5 -0
  87. package/lib/view/Control.js +44 -57
  88. package/lib/view/edge/BaseEdge.js +9 -0
  89. package/lib/view/edge/PolylineEdge.js +13 -2
  90. package/lib/view/node/BaseNode.d.ts +1 -0
  91. package/lib/view/node/BaseNode.js +22 -10
  92. package/lib/view/node/HtmlNode.js +1 -3
  93. package/lib/view/overlay/CanvasOverlay.js +5 -2
  94. package/lib/view/overlay/Grid.d.ts +12 -1
  95. package/lib/view/overlay/Grid.js +83 -21
  96. package/lib/view/overlay/OutlineOverlay.d.ts +1 -0
  97. package/lib/view/overlay/OutlineOverlay.js +18 -17
  98. package/lib/view/overlay/gridConfig.d.ts +46 -0
  99. package/lib/view/overlay/gridConfig.js +104 -0
  100. package/lib/view/shape/Polygon.d.ts +0 -7
  101. package/lib/view/shape/Polygon.js +13 -45
  102. package/package.json +6 -1
  103. package/.turbo/turbo-build$colon$dev.log +0 -10
  104. package/.turbo/turbo-build.log +0 -33
  105. package/CHANGELOG.md +0 -1849
  106. package/__tests__/algorithm/egde.test.ts +0 -131
  107. package/__tests__/algorithm/index.test.ts +0 -74
  108. package/__tests__/algorithm/outline.test.ts +0 -43
  109. package/__tests__/bugs/1545-spec.test.ts +0 -42
  110. package/__tests__/event/event.test.ts +0 -22
  111. package/__tests__/history/history.test.ts +0 -28
  112. package/__tests__/logicflow.test.ts +0 -575
  113. package/__tests__/model/graphmodel.test.ts +0 -87
  114. package/__tests__/util/compatible.test.ts +0 -48
  115. package/__tests__/util/edge.test.ts +0 -224
  116. package/__tests__/util/geometry.test.ts +0 -14
  117. package/__tests__/util/graph.test.ts +0 -16
  118. package/__tests__/util/matrix.test.ts +0 -41
  119. package/__tests__/util/node.test.ts +0 -68
  120. package/__tests__/util/sampling.test.ts +0 -12
  121. package/__tests__/util/vector.test.ts +0 -50
  122. package/__tests__/util/zIndex.test.ts +0 -10
  123. package/src/LogicFlow.tsx +0 -2008
  124. package/src/algorithm/edge.ts +0 -67
  125. package/src/algorithm/index.ts +0 -70
  126. package/src/algorithm/outline.ts +0 -77
  127. package/src/algorithm/rotate.ts +0 -55
  128. package/src/common/drag.ts +0 -219
  129. package/src/common/history.ts +0 -108
  130. package/src/common/index.ts +0 -6
  131. package/src/common/keyboard.ts +0 -108
  132. package/src/common/matrix.ts +0 -122
  133. package/src/common/vector.ts +0 -93
  134. package/src/constant/index.ts +0 -179
  135. package/src/event/event.md +0 -66
  136. package/src/event/eventArgs.ts +0 -643
  137. package/src/event/eventEmitter.ts +0 -156
  138. package/src/history/index.ts +0 -119
  139. package/src/index.less +0 -1
  140. package/src/index.ts +0 -26
  141. package/src/keyboard/index.ts +0 -112
  142. package/src/keyboard/shortcut.ts +0 -200
  143. package/src/model/BaseModel.ts +0 -250
  144. package/src/model/EditConfigModel.ts +0 -334
  145. package/src/model/GraphModel.ts +0 -1788
  146. package/src/model/NestedTransformModel.ts +0 -121
  147. package/src/model/SnaplineModel.ts +0 -256
  148. package/src/model/TransformModel.ts +0 -258
  149. package/src/model/edge/BaseEdgeModel.ts +0 -777
  150. package/src/model/edge/BezierEdgeModel.ts +0 -197
  151. package/src/model/edge/LineEdgeModel.ts +0 -36
  152. package/src/model/edge/PolylineEdgeModel.ts +0 -672
  153. package/src/model/edge/index.ts +0 -4
  154. package/src/model/index.ts +0 -9
  155. package/src/model/node/BaseNodeModel.ts +0 -949
  156. package/src/model/node/CircleNodeModel.ts +0 -91
  157. package/src/model/node/DiamondNodeModel.ts +0 -132
  158. package/src/model/node/EllipseNodeModel.ts +0 -98
  159. package/src/model/node/HtmlNodeModel.ts +0 -50
  160. package/src/model/node/PolygonNodeModel.ts +0 -150
  161. package/src/model/node/RectNodeModel.ts +0 -69
  162. package/src/model/node/TextNodeModel.ts +0 -54
  163. package/src/model/node/index.ts +0 -8
  164. package/src/options.ts +0 -145
  165. package/src/style/index.less +0 -261
  166. package/src/style/raw.ts +0 -220
  167. package/src/tool/MultipleSelectTool.tsx +0 -132
  168. package/src/tool/TextEditTool.tsx +0 -193
  169. package/src/tool/index.ts +0 -101
  170. package/src/typings.d.ts +0 -5
  171. package/src/util/animation.ts +0 -29
  172. package/src/util/browser.ts +0 -4
  173. package/src/util/compatible.ts +0 -15
  174. package/src/util/drag.ts +0 -220
  175. package/src/util/edge.ts +0 -1060
  176. package/src/util/geometry.ts +0 -55
  177. package/src/util/graph.ts +0 -46
  178. package/src/util/index.ts +0 -17
  179. package/src/util/matrix.ts +0 -129
  180. package/src/util/mobx.ts +0 -23
  181. package/src/util/node.ts +0 -543
  182. package/src/util/raf.ts +0 -28
  183. package/src/util/resize.ts +0 -606
  184. package/src/util/sampling.ts +0 -85
  185. package/src/util/theme.ts +0 -375
  186. package/src/util/uuid.ts +0 -26
  187. package/src/util/vector.ts +0 -93
  188. package/src/util/zIndex.ts +0 -6
  189. package/src/view/Anchor.tsx +0 -445
  190. package/src/view/Control.tsx +0 -512
  191. package/src/view/Graph.tsx +0 -141
  192. package/src/view/Rotate.tsx +0 -113
  193. package/src/view/behavior/dnd.ts +0 -162
  194. package/src/view/behavior/index.ts +0 -2
  195. package/src/view/behavior/snapline.ts +0 -16
  196. package/src/view/edge/AdjustPoint.tsx +0 -425
  197. package/src/view/edge/Arrow.tsx +0 -54
  198. package/src/view/edge/BaseEdge.tsx +0 -650
  199. package/src/view/edge/BezierEdge.tsx +0 -101
  200. package/src/view/edge/LineEdge.tsx +0 -81
  201. package/src/view/edge/PolylineEdge.tsx +0 -299
  202. package/src/view/edge/index.ts +0 -6
  203. package/src/view/index.ts +0 -8
  204. package/src/view/node/BaseNode.tsx +0 -571
  205. package/src/view/node/CircleNode.tsx +0 -21
  206. package/src/view/node/DiamondNode.tsx +0 -24
  207. package/src/view/node/EllipseNode.tsx +0 -22
  208. package/src/view/node/HtmlNode.tsx +0 -95
  209. package/src/view/node/PolygonNode.tsx +0 -28
  210. package/src/view/node/RectNode.tsx +0 -30
  211. package/src/view/node/TextNode.tsx +0 -39
  212. package/src/view/node/index.ts +0 -8
  213. package/src/view/overlay/BackgroundOverlay.tsx +0 -34
  214. package/src/view/overlay/BezierAdjustOverlay.tsx +0 -150
  215. package/src/view/overlay/CanvasOverlay.tsx +0 -288
  216. package/src/view/overlay/Grid.tsx +0 -162
  217. package/src/view/overlay/ModificationOverlay.tsx +0 -31
  218. package/src/view/overlay/OutlineOverlay.tsx +0 -170
  219. package/src/view/overlay/SnaplineOverlay.tsx +0 -44
  220. package/src/view/overlay/ToolOverlay.tsx +0 -65
  221. package/src/view/overlay/getTransformHoc.tsx +0 -50
  222. package/src/view/overlay/index.ts +0 -8
  223. package/src/view/shape/Circle.tsx +0 -41
  224. package/src/view/shape/Ellipse.tsx +0 -42
  225. package/src/view/shape/Line.tsx +0 -39
  226. package/src/view/shape/Path.tsx +0 -22
  227. package/src/view/shape/Polygon.tsx +0 -91
  228. package/src/view/shape/Polyline.tsx +0 -31
  229. package/src/view/shape/Rect.tsx +0 -44
  230. package/src/view/shape/Text.tsx +0 -169
  231. package/src/view/shape/index.ts +0 -8
  232. package/src/view/text/BaseText.tsx +0 -134
  233. package/src/view/text/LineText.tsx +0 -168
  234. package/src/view/text/index.ts +0 -2
  235. package/stats.html +0 -4842
  236. package/tsconfig.json +0 -18
@@ -1,425 +0,0 @@
1
- import { createElement as h, Component } from 'preact/compat'
2
- import LogicFlow from '../../LogicFlow'
3
- import { GraphModel, BaseNodeModel, BaseEdgeModel, Model } from '../../model'
4
- import {
5
- IDragParams,
6
- StepDrag,
7
- formatAnchorConnectValidateData,
8
- targetNodeInfo,
9
- NodeContaint,
10
- } from '../../util'
11
- import { ElementState, EventType, ModelType } from '../../constant'
12
- import Point = LogicFlow.Point
13
- import NodeData = LogicFlow.NodeData
14
- import AnchorConfig = Model.AnchorConfig
15
-
16
- interface IProps {
17
- x: number
18
- y: number
19
- type: AdjustType
20
- id?: string
21
- getAdjustPointShape: (
22
- x: number,
23
- y: number,
24
- model: BaseEdgeModel,
25
- ) => h.JSX.Element | null
26
- graphModel: GraphModel
27
- edgeModel: BaseEdgeModel
28
- }
29
-
30
- interface IState {
31
- dragging: boolean
32
- endX: number
33
- endY: number
34
- }
35
-
36
- interface OldEdge {
37
- startPoint: Point
38
- endPoint: Point
39
- pointsList: Point[]
40
- }
41
-
42
- export enum AdjustType {
43
- SOURCE = 'SOURCE',
44
- TARGET = 'TARGET',
45
- }
46
-
47
- export class AdjustPoint extends Component<IProps, IState> {
48
- stepDragData: any
49
- stepDrag: StepDrag
50
- oldEdge?: OldEdge
51
- preTargetNode: any
52
- targetRuleResults: Map<any, any>
53
- sourceRuleResults: Map<any, any>
54
-
55
- constructor(props: IProps) {
56
- super()
57
- this.state = {
58
- dragging: false,
59
- endX: 0,
60
- endY: 0,
61
- }
62
- this.targetRuleResults = new Map()
63
- this.sourceRuleResults = new Map()
64
- const { type, edgeModel, graphModel } = props
65
- const { eventCenter } = graphModel
66
- this.stepDragData = {
67
- type,
68
- edgeData: edgeModel.getData(),
69
- }
70
- this.stepDrag = new StepDrag({
71
- onDragStart: this.onDragStart,
72
- onDragging: this.onDragging,
73
- onDragEnd: this.onDragEnd,
74
- eventType: 'ADJUST_POINT',
75
- isStopPropagation: false,
76
- eventCenter,
77
- data: this.stepDragData,
78
- })
79
- }
80
-
81
- handleMouseDown = (ev: PointerEvent) => {
82
- if (this.stepDrag) {
83
- this.stepDrag.handleMouseDown(ev)
84
- }
85
- }
86
- onDragStart = () => {
87
- const { x, y, edgeModel } = this.props
88
- const { startPoint, endPoint, pointsList } = edgeModel
89
- // 记录下原始路径信息,在调整中,如果放弃调整,进行路径还原
90
- this.oldEdge = {
91
- startPoint,
92
- endPoint,
93
- pointsList,
94
- }
95
- this.setState({
96
- endX: x,
97
- endY: y,
98
- dragging: true,
99
- })
100
- // 拖拽AdjustPoint时不修改edgeModel.isHitable,避免偶尔会出现边不能点击问题(https://github.com/didi/LogicFlow/issues/974)
101
- // edgeModel.isHitable = false;
102
- }
103
- onDragging = ({ deltaX, deltaY }: IDragParams) => {
104
- const { endX, endY } = this.state
105
- const { graphModel, type } = this.props
106
- const { transformModel, editConfigModel } = graphModel
107
- const [x, y] = transformModel.moveCanvasPointByHtml(
108
- [endX, endY],
109
- deltaX,
110
- deltaY,
111
- )
112
- this.setState({
113
- endX: x,
114
- endY: y,
115
- dragging: true,
116
- })
117
- // 调整过程中实时更新路径
118
- const { edgeModel } = this.props
119
- const info = targetNodeInfo(
120
- {
121
- x: endX,
122
- y: endY,
123
- },
124
- graphModel,
125
- )
126
- // 如果一定的坐标能够找到目标节点,预结算当前节点与目标节点的路径进行展示
127
- if (info && info.node && this.isAllowAdjust(info).pass) {
128
- const { startPoint, endPoint, sourceNode, targetNode } = edgeModel
129
- const params =
130
- type === AdjustType.SOURCE
131
- ? {
132
- startPoint: {
133
- x: info.anchor.x,
134
- y: info.anchor.y,
135
- },
136
- endPoint: {
137
- x: endPoint.x,
138
- y: endPoint.y,
139
- },
140
- sourceNode: info.node,
141
- targetNode,
142
- }
143
- : {
144
- startPoint: {
145
- x: startPoint.x,
146
- y: startPoint.y,
147
- },
148
- endPoint: {
149
- x: info.anchor.x,
150
- y: info.anchor.y,
151
- },
152
- sourceNode,
153
- targetNode: info.node,
154
- }
155
- edgeModel.updateAfterAdjustStartAndEnd(params)
156
- } else {
157
- // 如果没有找到目标节点,更新起终点为当前坐标
158
- type === AdjustType.SOURCE
159
- ? edgeModel.updateStartPoint({ x, y })
160
- : edgeModel.updateEndPoint({ x, y })
161
- }
162
- if (edgeModel.text.value && editConfigModel.adjustEdge) {
163
- edgeModel.setText(
164
- Object.assign({}, edgeModel.text, edgeModel.textPosition),
165
- )
166
- }
167
- }
168
- onDragEnd = ({ event }: Partial<IDragParams>) => {
169
- try {
170
- // 将状态置为非拖拽状态
171
- this.setState({
172
- dragging: false,
173
- })
174
- const { graphModel, edgeModel, type } = this.props
175
- // 拖拽AdjustPoint时不修改edgeModel.isHitable,避免偶尔会出现边不能点击问题(https://github.com/didi/LogicFlow/issues/974)
176
- // edgeModel.isHitable = true;
177
- const { endX, endY, dragging } = this.state
178
- const info = targetNodeInfo(
179
- {
180
- x: endX,
181
- y: endY,
182
- },
183
- graphModel,
184
- )
185
- // 没有dragging就结束边
186
- if (!dragging) return
187
- // 如果找到目标节点,删除老边,创建新边
188
- let needRecoveryEdge = false
189
- let createEdgeInfo: LogicFlow.EdgeConfig
190
- if (info && info.node) {
191
- const { pass, msg, newTargetNode } = this.isAllowAdjust(info)
192
- if (pass) {
193
- const {
194
- text,
195
- sourceAnchorId = '',
196
- targetAnchorId = '',
197
- ...rest
198
- } = edgeModel.getData()
199
- createEdgeInfo = {
200
- sourceAnchorId,
201
- targetAnchorId,
202
- ...rest,
203
- text: text?.value || '',
204
- }
205
- // 根据调整点是边的起点或重点,计算创建边需要的参数
206
- if (type === AdjustType.SOURCE) {
207
- const sourceNode = graphModel.getNodeModelById(info.node.id)
208
- const targetNode = graphModel.getNodeModelById(
209
- edgeModel.targetNodeId,
210
- )
211
- const edgeInfo = graphModel.edgeGenerator?.(
212
- sourceNode?.getData() as NodeData,
213
- targetNode?.getData() as NodeData,
214
- createEdgeInfo,
215
- )
216
- createEdgeInfo = {
217
- ...edgeInfo,
218
- sourceNodeId: info.node.id,
219
- sourceAnchorId: info.anchor.id,
220
- startPoint: {
221
- x: info.anchor.x,
222
- y: info.anchor.y,
223
- },
224
- targetNodeId: edgeModel.targetNodeId,
225
- endPoint: { ...edgeModel.endPoint },
226
- }
227
- // 找到的是原有的源节点上的原锚点时,还原边
228
- if (
229
- edgeModel.sourceNodeId === info.node.id &&
230
- edgeModel.sourceAnchorId === info.anchor.id
231
- ) {
232
- needRecoveryEdge = true
233
- }
234
- } else if (type === AdjustType.TARGET) {
235
- const sourceNode = graphModel.getNodeModelById(
236
- edgeModel.sourceNodeId,
237
- )
238
- const targetNode = graphModel.getNodeModelById(info.node.id)
239
- const edgeInfo = graphModel.edgeGenerator?.(
240
- sourceNode?.getData() as NodeData,
241
- targetNode?.getData() as NodeData,
242
- createEdgeInfo,
243
- )
244
- createEdgeInfo = {
245
- ...edgeInfo,
246
- sourceNodeId: edgeModel.sourceNodeId,
247
- startPoint: { ...edgeModel.startPoint },
248
- targetNodeId: info.node.id,
249
- targetAnchorId: info.anchor.id,
250
- endPoint: {
251
- x: info.anchor.x,
252
- y: info.anchor.y,
253
- },
254
- }
255
- // 找到的是原有的目标节点上的原锚点时,还原边
256
- if (
257
- edgeModel.targetNodeId === info.node.id &&
258
- edgeModel.targetAnchorId === info.anchor.id
259
- ) {
260
- needRecoveryEdge = true
261
- }
262
- }
263
- } else {
264
- // 如果没有通过校验,还原边并抛出CONNECTION_NOT_ALLOWED事件
265
- needRecoveryEdge = true
266
- const nodeData = newTargetNode.getData()
267
- graphModel.eventCenter.emit(EventType.CONNECTION_NOT_ALLOWED, {
268
- data: nodeData,
269
- msg,
270
- })
271
- }
272
- } else {
273
- // 如果没有找到目标节点,还原边
274
- needRecoveryEdge = true
275
- }
276
- if (!needRecoveryEdge) {
277
- // 为了保证id不变必须要先删除老边,再创建新边,创建新边是会判断是否有重复的id
278
- // 删除老边
279
- const oldEdgeData = edgeModel.getData()
280
- graphModel.deleteEdgeById(edgeModel.id)
281
- // 创建新边
282
- const edge = graphModel.addEdge({ ...createEdgeInfo! })
283
- // 向外抛出事件
284
- graphModel.eventCenter.emit(EventType.EDGE_EXCHANGE_NODE, {
285
- data: {
286
- newEdge: edge.getData(),
287
- oldEdge: oldEdgeData,
288
- },
289
- })
290
- } else {
291
- // 如果没有找到目标节点或者没有通过校验,还原边
292
- this.recoveryEdge()
293
- }
294
- this.preTargetNode?.setElementState(ElementState.DEFAULT)
295
- } finally {
296
- const { graphModel } = this.props
297
- graphModel.eventCenter.emit(EventType.ADJUST_POINT_DRAGEND, {
298
- e: event,
299
- data: this.stepDragData,
300
- })
301
- }
302
- }
303
- // 还原边
304
- recoveryEdge = () => {
305
- const { edgeModel } = this.props
306
- const { startPoint, endPoint, pointsList } = this.oldEdge!
307
- edgeModel.updateStartPoint(startPoint)
308
- edgeModel.updateEndPoint(endPoint)
309
- // 折线和曲线还需要更新其pointsList
310
- if (edgeModel.modelType !== ModelType.LINE_EDGE) {
311
- edgeModel.pointsList = pointsList ?? []
312
- edgeModel.initPoints()
313
- }
314
- }
315
- // 调整点的样式默认从主题中读取, 可以复写此方法进行更加个性化的自定义
316
- // 目前仅支持圆形图标进行标识,可以从圆形的r和颜色上进行调整
317
- getAdjustPointStyle = () => {
318
- const {
319
- graphModel: { theme },
320
- } = this.props
321
- const { edgeAdjust } = theme
322
-
323
- return edgeAdjust
324
- }
325
-
326
- isAllowAdjust(info: NodeContaint): {
327
- pass: boolean
328
- msg?: string
329
- newTargetNode: BaseNodeModel
330
- } {
331
- const {
332
- edgeModel: { id, sourceNode, targetNode, sourceAnchorId, targetAnchorId },
333
- type,
334
- } = this.props
335
- // const newTargetNode = info.node;
336
- let newSourceNode: BaseNodeModel
337
- let newTargetNode: BaseNodeModel
338
- let newSourceAnchor: AnchorConfig
339
- let newTargetAnchor: AnchorConfig
340
-
341
- // 如果调整的是连线起点
342
- if (type === AdjustType.SOURCE) {
343
- newSourceNode = info.node
344
- newTargetNode = targetNode
345
- newSourceAnchor = info.anchor
346
- newTargetAnchor = targetNode.getAnchorInfo(targetAnchorId)!
347
- } else {
348
- newSourceNode = sourceNode
349
- newTargetNode = info.node
350
- newTargetAnchor = info.anchor
351
- newSourceAnchor = sourceNode.getAnchorInfo(sourceAnchorId)!
352
- }
353
- // 如果前一个接触的节点和此时接触的节点不相等,则将前一个节点状态重新设置为默认状态。
354
- if (this.preTargetNode && this.preTargetNode !== info.node) {
355
- this.preTargetNode.setElementState(ElementState.DEFAULT)
356
- }
357
- this.preTargetNode = info.node
358
- // #500 不允许锚点自己连自己, 在锚点一开始连接的时候, 不触发自己连接自己的校验。
359
- if (newTargetAnchor.id === newSourceAnchor.id) {
360
- return {
361
- pass: false,
362
- msg: '',
363
- newTargetNode,
364
- }
365
- }
366
- const targetInfoId = `${newSourceNode.id}_${newTargetNode.id}_${newSourceAnchor.id}_${newTargetAnchor.id}`
367
- // 查看鼠标是否进入过target,若有检验结果,表示进入过, 就不重复计算了。
368
- if (!this.targetRuleResults.has(targetInfoId)) {
369
- const sourceRuleResult = newSourceNode.isAllowConnectedAsSource(
370
- newTargetNode,
371
- newSourceAnchor,
372
- newTargetAnchor,
373
- id,
374
- )
375
- const targetRuleResult = newTargetNode.isAllowConnectedAsTarget(
376
- newSourceNode,
377
- newSourceAnchor,
378
- newTargetAnchor,
379
- id,
380
- )
381
- this.sourceRuleResults.set(
382
- targetInfoId,
383
- formatAnchorConnectValidateData(sourceRuleResult),
384
- )
385
- this.targetRuleResults.set(
386
- targetInfoId,
387
- formatAnchorConnectValidateData(targetRuleResult),
388
- )
389
- }
390
- const { isAllPass: isSourcePass, msg: sourceMsg } =
391
- this.sourceRuleResults.get(targetInfoId)
392
- const { isAllPass: isTargetPass, msg: targetMsg } =
393
- this.targetRuleResults.get(targetInfoId)
394
- // 实时提示出即将连接的节点是否允许连接
395
- const state =
396
- isSourcePass && isTargetPass
397
- ? ElementState.ALLOW_CONNECT
398
- : ElementState.NOT_ALLOW_CONNECT
399
- if (type === AdjustType.SOURCE) {
400
- newSourceNode.setElementState(state)
401
- } else {
402
- newTargetNode.setElementState(state)
403
- }
404
- return {
405
- pass: isSourcePass && isTargetPass,
406
- msg: targetMsg || sourceMsg,
407
- newTargetNode,
408
- }
409
- }
410
-
411
- render() {
412
- const { x, y, getAdjustPointShape, edgeModel } = this.props
413
- const { dragging } = this.state
414
- return (
415
- <g
416
- pointerEvents={dragging ? 'none' : ''}
417
- onPointerDown={this.handleMouseDown}
418
- >
419
- {!dragging ? getAdjustPointShape(x, y, edgeModel) : ''}
420
- </g>
421
- )
422
- }
423
- }
424
-
425
- export default AdjustPoint
@@ -1,54 +0,0 @@
1
- import { Component } from 'preact/compat'
2
- import { Path } from '../shape'
3
- import LogicFlow from '../../LogicFlow'
4
- import { getVerticalPointOfLine } from '../../algorithm'
5
- import ArrowInfo = LogicFlow.ArrowInfo
6
-
7
- export type ArrowStyle = {
8
- stroke?: string
9
- fill?: string
10
- strokeWidth?: number
11
- offset: number
12
- refX?: number
13
- refY?: number
14
- verticalLength: number
15
- }
16
-
17
- type ArrowAttributesType = {
18
- d: string
19
- } & ArrowStyle
20
-
21
- type IProps = {
22
- arrowInfo: ArrowInfo
23
- style: ArrowStyle
24
- }
25
-
26
- export class Arrow extends Component<IProps> {
27
- getArrowAttributes(): ArrowAttributesType {
28
- const { arrowInfo, style } = this.props
29
- const { start, end } = arrowInfo
30
- const config = {
31
- start,
32
- end,
33
- offset: style.offset,
34
- verticalLength: style.verticalLength,
35
- type: 'end',
36
- }
37
- const { leftX, leftY, rightX, rightY } = getVerticalPointOfLine(config)
38
- return {
39
- d: `M${leftX} ${leftY} L${end.x} ${end.y} L${rightX} ${rightY} z`,
40
- ...style,
41
- }
42
- }
43
-
44
- getShape() {
45
- const { d, strokeWidth, stroke, fill } = this.getArrowAttributes()
46
- return <Path d={d} fill={fill} strokeWidth={strokeWidth} stroke={stroke} />
47
- }
48
-
49
- render() {
50
- return <g className="lf-arrow">{this.getShape()}</g>
51
- }
52
- }
53
-
54
- export default Arrow