@logicflow/core 2.2.0-alpha.7 → 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 (137) hide show
  1. package/package.json +6 -1
  2. package/.turbo/turbo-build$colon$dev.log +0 -10
  3. package/.turbo/turbo-build.log +0 -33
  4. package/CHANGELOG.md +0 -1901
  5. package/__tests__/algorithm/egde.test.ts +0 -131
  6. package/__tests__/algorithm/index.test.ts +0 -74
  7. package/__tests__/algorithm/outline.test.ts +0 -43
  8. package/__tests__/bugs/1545-spec.test.ts +0 -42
  9. package/__tests__/event/event.test.ts +0 -22
  10. package/__tests__/history/history.test.ts +0 -28
  11. package/__tests__/logicflow.test.ts +0 -575
  12. package/__tests__/model/graphmodel.test.ts +0 -87
  13. package/__tests__/util/compatible.test.ts +0 -48
  14. package/__tests__/util/edge.test.ts +0 -224
  15. package/__tests__/util/geometry.test.ts +0 -14
  16. package/__tests__/util/graph.test.ts +0 -16
  17. package/__tests__/util/matrix.test.ts +0 -41
  18. package/__tests__/util/node.test.ts +0 -68
  19. package/__tests__/util/sampling.test.ts +0 -12
  20. package/__tests__/util/vector.test.ts +0 -50
  21. package/__tests__/util/zIndex.test.ts +0 -10
  22. package/src/LogicFlow.tsx +0 -2017
  23. package/src/algorithm/edge.ts +0 -67
  24. package/src/algorithm/index.ts +0 -70
  25. package/src/algorithm/outline.ts +0 -77
  26. package/src/algorithm/rotate.ts +0 -55
  27. package/src/common/drag.ts +0 -219
  28. package/src/common/history.ts +0 -108
  29. package/src/common/index.ts +0 -6
  30. package/src/common/keyboard.ts +0 -108
  31. package/src/common/matrix.ts +0 -122
  32. package/src/common/vector.ts +0 -93
  33. package/src/constant/index.ts +0 -179
  34. package/src/constant/theme.ts +0 -708
  35. package/src/event/event.md +0 -66
  36. package/src/event/eventArgs.ts +0 -643
  37. package/src/event/eventEmitter.ts +0 -156
  38. package/src/history/index.ts +0 -119
  39. package/src/index.less +0 -1
  40. package/src/index.ts +0 -26
  41. package/src/keyboard/index.ts +0 -112
  42. package/src/keyboard/shortcut.ts +0 -200
  43. package/src/model/BaseModel.ts +0 -250
  44. package/src/model/EditConfigModel.ts +0 -334
  45. package/src/model/GraphModel.ts +0 -1824
  46. package/src/model/NestedTransformModel.ts +0 -121
  47. package/src/model/SnaplineModel.ts +0 -256
  48. package/src/model/TransformModel.ts +0 -258
  49. package/src/model/edge/BaseEdgeModel.ts +0 -785
  50. package/src/model/edge/BezierEdgeModel.ts +0 -197
  51. package/src/model/edge/LineEdgeModel.ts +0 -36
  52. package/src/model/edge/PolylineEdgeModel.ts +0 -817
  53. package/src/model/edge/index.ts +0 -4
  54. package/src/model/index.ts +0 -9
  55. package/src/model/node/BaseNodeModel.ts +0 -959
  56. package/src/model/node/CircleNodeModel.ts +0 -91
  57. package/src/model/node/DiamondNodeModel.ts +0 -132
  58. package/src/model/node/EllipseNodeModel.ts +0 -98
  59. package/src/model/node/HtmlNodeModel.ts +0 -64
  60. package/src/model/node/PolygonNodeModel.ts +0 -152
  61. package/src/model/node/RectNodeModel.ts +0 -69
  62. package/src/model/node/TextNodeModel.ts +0 -54
  63. package/src/model/node/index.ts +0 -8
  64. package/src/options.ts +0 -150
  65. package/src/style/index.less +0 -262
  66. package/src/style/raw.ts +0 -221
  67. package/src/tool/MultipleSelectTool.tsx +0 -140
  68. package/src/tool/TextEditTool.tsx +0 -193
  69. package/src/tool/index.ts +0 -101
  70. package/src/typings.d.ts +0 -5
  71. package/src/util/animation.ts +0 -29
  72. package/src/util/browser.ts +0 -4
  73. package/src/util/compatible.ts +0 -15
  74. package/src/util/drag.ts +0 -219
  75. package/src/util/edge.ts +0 -1094
  76. package/src/util/geometry.ts +0 -154
  77. package/src/util/graph.ts +0 -46
  78. package/src/util/index.ts +0 -17
  79. package/src/util/matrix.ts +0 -129
  80. package/src/util/mobx.ts +0 -23
  81. package/src/util/node.ts +0 -543
  82. package/src/util/raf.ts +0 -28
  83. package/src/util/resize.ts +0 -606
  84. package/src/util/sampling.ts +0 -85
  85. package/src/util/theme.ts +0 -84
  86. package/src/util/uuid.ts +0 -26
  87. package/src/util/vector.ts +0 -93
  88. package/src/util/zIndex.ts +0 -6
  89. package/src/view/Anchor.tsx +0 -462
  90. package/src/view/Control.tsx +0 -510
  91. package/src/view/Graph.tsx +0 -141
  92. package/src/view/Rotate.tsx +0 -113
  93. package/src/view/behavior/dnd.ts +0 -162
  94. package/src/view/behavior/index.ts +0 -2
  95. package/src/view/behavior/snapline.ts +0 -16
  96. package/src/view/edge/AdjustPoint.tsx +0 -425
  97. package/src/view/edge/Arrow.tsx +0 -54
  98. package/src/view/edge/BaseEdge.tsx +0 -660
  99. package/src/view/edge/BezierEdge.tsx +0 -101
  100. package/src/view/edge/LineEdge.tsx +0 -81
  101. package/src/view/edge/PolylineEdge.tsx +0 -311
  102. package/src/view/edge/index.ts +0 -6
  103. package/src/view/index.ts +0 -8
  104. package/src/view/node/BaseNode.tsx +0 -585
  105. package/src/view/node/CircleNode.tsx +0 -21
  106. package/src/view/node/DiamondNode.tsx +0 -24
  107. package/src/view/node/EllipseNode.tsx +0 -22
  108. package/src/view/node/HtmlNode.tsx +0 -112
  109. package/src/view/node/PolygonNode.tsx +0 -28
  110. package/src/view/node/RectNode.tsx +0 -30
  111. package/src/view/node/TextNode.tsx +0 -39
  112. package/src/view/node/index.ts +0 -8
  113. package/src/view/overlay/BackgroundOverlay.tsx +0 -34
  114. package/src/view/overlay/BezierAdjustOverlay.tsx +0 -150
  115. package/src/view/overlay/CanvasOverlay.tsx +0 -290
  116. package/src/view/overlay/Grid.tsx +0 -319
  117. package/src/view/overlay/ModificationOverlay.tsx +0 -31
  118. package/src/view/overlay/OutlineOverlay.tsx +0 -158
  119. package/src/view/overlay/SnaplineOverlay.tsx +0 -44
  120. package/src/view/overlay/ToolOverlay.tsx +0 -65
  121. package/src/view/overlay/getTransformHoc.tsx +0 -50
  122. package/src/view/overlay/gridConfig.ts +0 -103
  123. package/src/view/overlay/index.ts +0 -8
  124. package/src/view/shape/Circle.tsx +0 -41
  125. package/src/view/shape/Ellipse.tsx +0 -42
  126. package/src/view/shape/Line.tsx +0 -39
  127. package/src/view/shape/Path.tsx +0 -22
  128. package/src/view/shape/Polygon.tsx +0 -54
  129. package/src/view/shape/Polyline.tsx +0 -31
  130. package/src/view/shape/Rect.tsx +0 -44
  131. package/src/view/shape/Text.tsx +0 -168
  132. package/src/view/shape/index.ts +0 -8
  133. package/src/view/text/BaseText.tsx +0 -134
  134. package/src/view/text/LineText.tsx +0 -168
  135. package/src/view/text/index.ts +0 -2
  136. package/stats.html +0 -4842
  137. package/tsconfig.json +0 -18
@@ -1,250 +0,0 @@
1
- import GraphModel from './GraphModel'
2
- import { BaseNodeModel } from './node'
3
- import LogicFlow from '../LogicFlow'
4
- import { ElementState } from '../constant'
5
-
6
- export namespace Model {
7
- import PropertiesType = LogicFlow.PropertiesType
8
- export type AdditionStateDataType = Record<string, unknown>
9
- export type PropertyType = Record<string, unknown>
10
- export type VectorType = [number, number]
11
- export type IsAllowMove = {
12
- x: boolean
13
- y: boolean
14
- }
15
-
16
- export type AnchorConfig = {
17
- id?: string
18
- x: number
19
- y: number
20
- [key: string]: unknown
21
- }
22
- export type AnchorInfo = {
23
- index: number
24
- anchor: AnchorConfig
25
- }
26
-
27
- export type ConnectRule = {
28
- message: string
29
- validate: (
30
- source?: BaseNodeModel,
31
- target?: BaseNodeModel,
32
- sourceAnchor?: AnchorConfig,
33
- targetAnchor?: AnchorConfig,
34
- /**
35
- * REMIND: 调整的边的 id
36
- * 在开启 adjustEdgeStartAndEnd 后调整边连接的节点时会传入
37
- * 详见:https://github.com/didi/LogicFlow/issues/926#issuecomment-1371823306
38
- */
39
- edgeID?: string,
40
- ) => boolean | undefined
41
- }
42
- export type ConnectRuleResult = {
43
- isAllPass: boolean
44
- msg?: string
45
- }
46
-
47
- /**
48
- * 限制节点移动规则
49
- * model: 移动节点的 model
50
- * deltaX: 移动的 X 轴距离
51
- * deltaY: 移动的 Y 轴距离
52
- */
53
- export type NodeMoveRule = (
54
- model: BaseNodeModel,
55
- deltaX: number,
56
- deltaY: number,
57
- ) => boolean | IsAllowMove
58
-
59
- /**
60
- * 限制节点resize规则
61
- * model: 移动节点的 model
62
- * deltaX: 中心点移动的 X 轴距离
63
- * deltaY: 中心点移动的 Y 轴距离
64
- * width: 中心点新的width
65
- * height: 中心点新的height
66
- */
67
- export type NodeResizeRule = (
68
- model: BaseNodeModel,
69
- deltaX: number,
70
- deltaY: number,
71
- width: number,
72
- height: number,
73
- ) => boolean
74
-
75
- export type AdjustEdgeStartAndEndParams = {
76
- startPoint: LogicFlow.Point
77
- endPoint: LogicFlow.Point
78
- sourceNode?: BaseNodeModel
79
- targetNode?: BaseNodeModel
80
- }
81
-
82
- // 定义边界数据结构,左上坐标 + 右下坐标定位一个矩形
83
- // TODO: 在使用该类型的 API 中,都要做声明,返回值格式已更新
84
- export type BoxBoundsPoint = {
85
- minX: number // Left Top X
86
- minY: number // Left Top Y
87
- maxX: number // Right Bottom X
88
- maxY: number // Right Bottom Y
89
- }
90
-
91
- export interface BoxBounds extends BoxBoundsPoint {
92
- x: number
93
- y: number
94
- width: number
95
- height: number
96
- centerX: number
97
- centerY: number
98
- }
99
-
100
- export type OutlineInfo = {
101
- x: number
102
- y: number
103
- x1: number
104
- y1: number
105
- }
106
-
107
- export interface BoxBounds {
108
- x: number
109
- y: number
110
- width: number
111
- height: number
112
- minX: number
113
- minY: number
114
- maxX: number
115
- maxY: number
116
- centerX: number
117
- centerY: number
118
- }
119
-
120
- export interface BaseModel<P extends PropertiesType = PropertiesType> {
121
- /**
122
- * 节点或边对应的 ID.
123
- *
124
- * 默认情况下,使用 uuidV4 生成。如需自定义,可通过传入 createId 方法覆盖。
125
- */
126
- id: string
127
-
128
- /**
129
- * model 对应的图形外观类型 (eg: 圆形、矩形、多边形等)
130
- *
131
- * 不可自定义,用于 LogicFlow 内部计算使用
132
- */
133
- readonly modelType: string
134
-
135
- /**
136
- * 请勿直接修改属性,如果想要将一个节点类型修改为另一个类型。(直接禁止修改不就可以了 public readonly)
137
- * `lf.graphModel.changeEdgeType` or `lf.graphModel.changeNodeType`
138
- *
139
- * 流程图元素类型,自定义元素时对应的标识
140
- * 在 logicflow/core 中对应着 rect/circle/polyline 这种
141
- * 在实际项目中,我们会基于业务类型进行自定义 type.
142
- * 例如 BPMN 场景中,我们会定义开始节点的类型为 bpmn:start-event
143
- *
144
- * 与 modelType 的区别是,type 更多的是业务上的类型,而 modelType 则是外观上的类型。
145
- * 例如 bpmn.js 的开始节点和结束节点 type 分别为 'bpmn:start-event' 和 'bpmn:end-event'。
146
- * 但是他们的 modelType 都是 circle-node,因为他们的外观都是基于圆形自定义而来。
147
- */
148
- readonly type: string
149
- graphModel: GraphModel
150
-
151
- /**
152
- * 状态附加数据,例如显示菜单,菜单的位置信息
153
- * @deprecated: 请勿使用,即将废弃
154
- */
155
- additionStateData?: AdditionStateDataType
156
-
157
- /**
158
- * Rule 相关配置,包括连入、连出、移动等
159
- */
160
- targetRules?: ConnectRule[]
161
- sourceRules?: ConnectRule[]
162
- moveRules?: NodeMoveRule[]
163
- hasSetTargetRules?: boolean
164
- hasSetSourceRules?: boolean
165
-
166
- /**
167
- * 元素上的文本
168
- *
169
- * LogicFlow 中存在两种文本:1. 脱离边和节点单独存在的问题;2. 必须和边、节点关联的文本
170
- * 此属性控制的是第二种。节点和边在删除、调整的同时,其关联的文本也会对应删除、调整。
171
- */
172
- text: LogicFlow.TextConfig
173
- properties: P
174
-
175
- isSelected: boolean // 元素是否被选中
176
- isHovered: boolean // 鼠标是否悬停在元素上
177
- // TODO: 确认拼写 fix typo(兼容拼写错误的情况)
178
- isHitable: boolean // TODO: 错误拼写,兼容拼写错误的情况 REMIND TO REMOVE
179
- isHittable: boolean // 细粒度控制节点是否对用户操作进行反应
180
- draggable: boolean // 是否可拖拽
181
- visible: boolean // 元素是否显示
182
- virtual: boolean // 元素是否可以通过 getGraphData 获取到
183
-
184
- /**
185
- * 元素堆叠的层级,默认情况下节点 zIndex 值为 1,边 zIndex 为 0
186
- */
187
- zIndex: number
188
-
189
- /**
190
- * 元素状态: 不同状态不应不同元素的显示效果(无法直接修改)
191
- */
192
- readonly state: ElementState
193
-
194
- /**
195
- * 创建节点 ID
196
- *
197
- * 默认情况下,LogicFlow 内部使用 uuidV4 生成 id。在自定义节点的时候,可以重写此方法,
198
- * 基于自己的规则生成 id。
199
- * 注意 📢:此方法必须是同步方法,如果想要异步修改 ID,建议删除此节点后在同一位置创建一个新的节点
200
- * @overridable 可被重写
201
- * @returns string
202
- */
203
- createId: () => string | null
204
-
205
- // Actions
206
- isAllowMoveNode?: (deltaX: number, deltaY: number) => boolean | IsAllowMove
207
- moveText: (deltaX: number, deltaY: number) => void
208
- moveTo?: (x: number, y: number, isIgnoreRule: boolean) => boolean
209
- getMoveDistance?: (
210
- deltaX: number,
211
- deltaY: number,
212
- isIgnoreRule: boolean,
213
- ) => VectorType
214
- move?: (x: number, y: number, isIgnoreRule: boolean) => boolean
215
- updateText: (text: string) => void
216
-
217
- setSelected: (isSelected: boolean) => void
218
- setHovered: (isHovered: boolean) => void
219
- setHitable: (isHittable: boolean) => void // TODO: 拼写错误 fix typo(兼容拼写错误的情况)
220
- setHittable: (isHittable: boolean) => void
221
-
222
- setZIndex: (zIndex?: number) => void
223
- updateAttributes: (attributes: LogicFlow.AttributesType) => void
224
- /**
225
- * 设置 Node | Edge 等 model 的状态
226
- * @param state 状态
227
- * @param additionStateData 额外的参数
228
- */
229
- setElementState: (
230
- state: ElementState,
231
- additionStateData?: AdditionStateDataType,
232
- ) => void
233
-
234
- getData: () => Record<string, unknown>
235
- getProperties: () => PropertyType
236
- setProperty: (key: string, val: unknown) => void
237
- setProperties: (properties: PropertyType) => void
238
- deleteProperty: (key: string) => void
239
-
240
- getNodeStyle?: () => LogicFlow.CommonTheme
241
- getEdgeStyle?: () => LogicFlow.EdgeTheme
242
- getTextStyle: () => LogicFlow.TextNodeTheme
243
- getAnchorStyle?: () => LogicFlow.AnchorTheme
244
- getAnchorLineStyle?: () => LogicFlow.AnchorLineTheme
245
- getOutlineStyle: () => LogicFlow.OutlineTheme
246
- setStyle: (key: string, val: LogicFlow.CommonThemePropTypes) => void
247
- setStyles: (styles: LogicFlow.CommonTheme) => void
248
- updateStyles: (styles: LogicFlow.CommonTheme) => void
249
- }
250
- }
@@ -1,334 +0,0 @@
1
- import { assign, isBoolean, isUndefined, pick } from 'lodash-es'
2
- import { observable, action } from 'mobx'
3
- import { TextMode } from '../constant'
4
-
5
- export interface IEditConfigType {
6
- /**
7
- * 是否为静默模式
8
- */
9
- isSilentMode: boolean
10
- /**
11
- * 禁止缩放画布
12
- */
13
- stopZoomGraph: boolean
14
- /**
15
- * 禁止鼠标滚动移动画布
16
- */
17
- stopScrollGraph: boolean
18
- /**
19
- * 禁止拖动画布,默认为false
20
- * - true:完全禁止移动
21
- * - vertical: 禁止垂直方向拖动
22
- * - horizontal:禁止水平方向拖动
23
- * - [number, number, number, number]:[minX, minY, maxX, maxY] 画布可拖动范围
24
- */
25
- stopMoveGraph:
26
- | boolean
27
- | 'vertical'
28
- | 'horizontal'
29
- | [number, number, number, number]
30
- /**
31
- * 允许调整边
32
- */
33
- adjustEdge: boolean
34
- /**
35
- * 允许调整边的中间点
36
- */
37
- adjustEdgeMiddle: boolean
38
- /**
39
- * 允许调整边起点和终点
40
- */
41
- adjustEdgeStartAndEnd: boolean
42
- /**
43
- * 允许调整边起点
44
- */
45
- adjustEdgeStart: boolean
46
- /**
47
- * 允许调整边的终点
48
- */
49
- adjustEdgeEnd: boolean
50
- /**
51
- * 允许拖动节点
52
- */
53
- adjustNodePosition: boolean
54
- /**
55
- * 隐藏节点所有锚点
56
- */
57
- hideAnchors: boolean
58
- /**
59
- * 是否允许节点旋转(旋转点的显隐)
60
- */
61
- allowRotate: boolean
62
- /**
63
- * 是否允许节点缩放(缩放调整点的显隐)
64
- */
65
- allowResize: boolean
66
- /**
67
- * 是否自动展开
68
- */
69
- autoExpand: boolean
70
- /**
71
- * 显示节点悬浮时的外框
72
- */
73
- hoverOutline: boolean
74
- /**
75
- * 节点被选中时是否显示outline
76
- */
77
- nodeSelectedOutline: boolean
78
- /**
79
- * 边被选中时是否显示outline
80
- */
81
- edgeSelectedOutline: boolean
82
- /**
83
- * 允许文本可编辑
84
- */
85
- textEdit: boolean
86
- /**
87
- * 允许节点文本可以编辑
88
- */
89
- nodeTextEdit: boolean
90
- /**
91
- * 允许边文本可以编辑
92
- */
93
- edgeTextEdit: boolean
94
- /**
95
- * 允许文本可拖拽(文本包括Text、Label)
96
- */
97
- textDraggable: boolean
98
- /**
99
- * 允许节点文本可以拖拽
100
- */
101
- nodeTextDraggable: boolean
102
- /**
103
- * 允许边文本可以拖拽
104
- */
105
- edgeTextDraggable: boolean
106
- /**
107
- * 多选按键, 支持meta(cmd)、shift、alt
108
- * 不支持ctrl,ctrl会触发contextmenu
109
- */
110
- multipleSelectKey: string
111
-
112
- /**
113
- * 2.0.0 新增配置,启用 Label 后生效
114
- * 是否支持多文本,文本文字是否垂直展示
115
- * 当前文本类型
116
- */
117
- nodeTextMultiple: boolean
118
- edgeTextMultiple: boolean
119
- nodeTextVertical: boolean
120
- edgeTextVertical: boolean
121
- textMode: TextMode
122
- // 节点文本类型
123
- nodeTextMode: TextMode
124
- // 边文本类型
125
- edgeTextMode: TextMode
126
- // 开启网格对齐
127
- snapGrid: boolean
128
- isPinching: boolean
129
- }
130
-
131
- export type IConfigKeys = keyof IEditConfigType
132
-
133
- const silentModeConfig = {
134
- // SilentMode 下允许用户操作画布
135
- stopZoomGraph: false,
136
- stopScrollGraph: false,
137
- stopMoveGraph: false,
138
- // 节点 & 边相关配置
139
- adjustEdge: false,
140
- adjustEdgeStartAndEnd: false,
141
- adjustNodePosition: false,
142
- hideAnchors: true,
143
- allowRotate: false,
144
- allowResize: false,
145
- nodeSelectedOutline: true,
146
- // 文本相关配置
147
- textEdit: false,
148
- nodeTextEdit: false,
149
- edgeTextEdit: false,
150
- textDraggable: false,
151
- nodeTextDraggable: false,
152
- edgeTextDraggable: false,
153
- }
154
-
155
- const allKeys = [
156
- 'isSilentMode', // 是否为静默模式
157
- 'stopZoomGraph', // 禁止缩放画布
158
- 'stopScrollGraph', // 禁止鼠标滚动移动画布
159
- 'stopMoveGraph', // 禁止拖动画布
160
- 'snapGrid', // 是否开启网格对齐
161
- 'adjustEdge', // 允许调整边
162
- 'adjustEdgeMiddle', // 允许调整边中点
163
- 'adjustEdgeStartAndEnd', // 允许调整边起点和终点
164
- 'adjustEdgeStart', // 允许调整边起点
165
- 'adjustEdgeEnd', // 允许调整边终点
166
- 'adjustNodePosition', // 允许拖动节点
167
- 'hideAnchors', // 隐藏节点所有锚点
168
- 'allowRotate', // 是否允许节点旋转
169
- 'allowResize', // 是否允许节点缩放
170
- 'autoExpand', // 是否自动展开
171
- 'hoverOutline', // 显示节点悬浮时的外框
172
- 'nodeSelectedOutline', // 节点被选中时是否显示 outline
173
- 'edgeSelectedOutline', // 边被选中时是否显示 outline
174
- 'textEdit', // 是否允许文本可编辑(全局)
175
- 'nodeTextEdit', // 允许节点文本可以编辑
176
- 'edgeTextEdit', // 允许边文本可以编辑
177
- 'textDraggable', // 是否允许文本可拖拽(全局)
178
- 'nodeTextDraggable', // 允许节点文本可以拖拽
179
- 'edgeTextDraggable', // 允许边文本可以拖拽
180
- 'multipleSelectKey', // 多选按键
181
-
182
- // 2.0.0 新增配置
183
- 'textMode', // 文本模式(全局)
184
- 'nodeTextMode', // 节点文本模式
185
- 'edgeTextMode', // 边文本模式
186
- 'nodeTextMultiple', // 是否支持多个节点文本
187
- 'edgeTextMultiple', // 是否支持多个边文本
188
- 'nodeTextVertical', // 节点文本是否纵向显示
189
- 'edgeTextVertical', // 边文本是否纵向显示
190
- 'isPinching', //是否是双指捏合态
191
- ] as const
192
-
193
- /**
194
- * 页面编辑配置
195
- */
196
- export class EditConfigModel {
197
- stagedConfig?: Partial<IEditConfigType> // 暂存「设置为静默模式之前」的配置,在取消静默模式后恢复
198
-
199
- /*********************************************************
200
- * 画布相关配置
201
- ********************************************************/
202
- @observable isSilentMode = false
203
- @observable stopZoomGraph = false
204
- @observable stopMoveGraph = false
205
- @observable stopScrollGraph = false
206
- @observable snapGrid = false
207
- @observable isPinching = false
208
- /*********************************************************
209
- * 文本相关配置(全局)
210
- ********************************************************/
211
- @observable textMode = TextMode.TEXT // 全局的 textMode 设置
212
- @observable textEdit = true
213
- @observable textDraggable = false
214
- // 节点
215
- @observable nodeTextEdit = true
216
- @observable nodeTextDraggable = false
217
- @observable nodeTextMultiple = false // 是否支持多个节点文本
218
- @observable nodeTextVertical = false // 节点文本朝向是否是纵向
219
- @observable nodeTextMode = TextMode.TEXT // 节点文本模式
220
- // 边
221
- @observable edgeTextMode = TextMode.TEXT // 边文本模式
222
- @observable edgeTextEdit = true
223
- @observable edgeTextDraggable = false
224
- @observable edgeTextMultiple = false // 是否支持多个边文本
225
- @observable edgeTextVertical = false // 边文本朝向是否是纵向
226
- /*********************************************************
227
- * 节点相关配置
228
- ********************************************************/
229
- @observable hideAnchors = false
230
- @observable allowRotate = false
231
- @observable allowResize = false
232
- @observable hoverOutline = true
233
- @observable nodeSelectedOutline = true
234
- @observable adjustNodePosition = true
235
- @observable autoExpand = false
236
- /*********************************************************
237
- * 边相关配置
238
- ********************************************************/
239
- @observable adjustEdge = true
240
- @observable adjustEdgeMiddle = false
241
- @observable adjustEdgeStartAndEnd = false
242
- @observable adjustEdgeStart = false
243
- @observable adjustEdgeEnd = false
244
- @observable edgeSelectedOutline = true
245
- /*********************************************************
246
- * 其他
247
- ********************************************************/
248
- multipleSelectKey = ''
249
-
250
- constructor(config: Partial<IEditConfigType>) {
251
- assign(this, this.computeConfig(config))
252
- }
253
-
254
- @action
255
- updateEditConfig(config: Partial<IEditConfigType>) {
256
- const newConfig = this.computeConfig(config)
257
- assign(this, newConfig)
258
- }
259
-
260
- // TODO: 确认一下这个函数的逻辑,是否会有误合并的问题
261
- computeConfig(config: Partial<IEditConfigType>) {
262
- const {
263
- isSilentMode,
264
- textDraggable,
265
- textMode,
266
- textEdit,
267
- adjustEdgeStartAndEnd,
268
- } = config
269
- const conf: Partial<IEditConfigType> = {}
270
-
271
- // false 表示从静默模式恢复
272
- if (isSilentMode === false) {
273
- assign(conf, this.stagedConfig)
274
- }
275
-
276
- // 如果不传,默认 undefined 表示非静默模式
277
- if (isSilentMode === true && isSilentMode !== this.isSilentMode) {
278
- // https://github.com/didi/LogicFlow/issues/1180
279
- // 如果重复调用 isSilentMode=true 多次,会导致 this.stagedConfig 状态保存错误:保存为修改之后的 Config
280
- // 因此需要阻止重复赋值为 true,使用 config.isSilentMode !== this.isSilentMode
281
- const silentConfig = pick(silentModeConfig, allKeys)
282
- // 暂存修改之前的所有配置项
283
- this.stagedConfig = pick(this, allKeys)
284
-
285
- assign(conf, silentConfig)
286
- }
287
-
288
- // 如果不传,默认undefined表示允许文本编辑
289
- if (!isUndefined(textEdit)) {
290
- assign(conf, {
291
- nodeTextEdit: textEdit,
292
- edgeTextEdit: textEdit,
293
- })
294
- }
295
-
296
- if (!isUndefined(textDraggable)) {
297
- assign(conf, {
298
- nodeTextDraggable: textDraggable,
299
- edgeTextDraggable: textDraggable,
300
- })
301
- }
302
-
303
- if (textMode) {
304
- assign(conf, {
305
- nodeTextMode: textMode,
306
- edgeTextMode: textMode,
307
- })
308
- }
309
-
310
- if (isBoolean(adjustEdgeStartAndEnd)) {
311
- assign(conf, {
312
- adjustEdgeStart: adjustEdgeStartAndEnd,
313
- adjustEdgeEnd: adjustEdgeStartAndEnd,
314
- })
315
- }
316
-
317
- const userConfig = pick(config, allKeys)
318
- return assign(conf, userConfig)
319
- }
320
-
321
- @action
322
- updateTextMode(textMode: TextMode) {
323
- // 如果更新全局 textMode,同时更新节点和边的 textMode
324
- this.textMode = textMode
325
- this.edgeTextMode = textMode
326
- this.nodeTextMode = textMode
327
- }
328
-
329
- getConfig(): IEditConfigType {
330
- return pick(this, allKeys)
331
- }
332
- }
333
-
334
- export default EditConfigModel