@flowgram.ai/free-layout-core 0.1.0-alpha.17 → 0.1.0-alpha.19
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.
- package/dist/esm/{chunk-O4WKIIW2.js → chunk-3UW6BHP2.js} +1 -1
- package/dist/esm/chunk-3UW6BHP2.js.map +1 -0
- package/dist/esm/index.js +161 -55
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/typings/index.js +1 -1
- package/dist/esm/typings/workflow-operation.js +1 -1
- package/dist/index.d.mts +7 -5
- package/dist/index.d.ts +7 -5
- package/dist/index.js +159 -50
- package/dist/index.js.map +1 -1
- package/dist/typings/index.d.mts +1 -1
- package/dist/typings/index.d.ts +1 -1
- package/dist/typings/index.js.map +1 -1
- package/dist/typings/workflow-drag.d.mts +1 -1
- package/dist/typings/workflow-drag.d.ts +1 -1
- package/dist/typings/workflow-json.d.mts +1 -1
- package/dist/typings/workflow-json.d.ts +1 -1
- package/dist/typings/workflow-line.d.mts +1 -1
- package/dist/typings/workflow-line.d.ts +1 -1
- package/dist/typings/workflow-node.d.mts +1 -1
- package/dist/typings/workflow-node.d.ts +1 -1
- package/dist/typings/workflow-operation.d.mts +9 -0
- package/dist/typings/workflow-operation.d.ts +9 -0
- package/dist/typings/workflow-operation.js.map +1 -1
- package/dist/typings/workflow-registry.d.mts +1 -1
- package/dist/typings/workflow-registry.d.ts +1 -1
- package/dist/typings/workflow-sub-canvas.d.mts +1 -1
- package/dist/typings/workflow-sub-canvas.d.ts +1 -1
- package/dist/{workflow-node-entity-B-9mEm2k.d.mts → workflow-node-entity-DH5qlw7I.d.mts} +41 -7
- package/dist/{workflow-node-entity-DvBGZ5Ve.d.ts → workflow-node-entity-DWVtlA2a.d.ts} +41 -7
- package/package.json +9 -9
- package/dist/esm/chunk-O4WKIIW2.js.map +0 -1
package/dist/index.d.mts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { PlaygroundConfigEntity, CommandService, PlaygroundDragEvent, EntityData } from '@flowgram.ai/core';
|
|
2
2
|
export { bindConfigEntity, useConfigEntity, useEntities, useEntityDataFromContext, useEntityFromContext, useListenEvents, usePlayground, usePlaygroundContainer, usePlaygroundContext, useRefresh, useService } from '@flowgram.ai/core';
|
|
3
3
|
import { NodeFormProps } from '@flowgram.ai/node';
|
|
4
|
-
import {
|
|
5
|
-
import { W as WorkflowJSON, L as LineCenterPoint, a as WorkflowDocument, b as WorkflowNodeEntity, c as WorkflowHoverService, d as WorkflowLinesManager, e as WorkflowSelectService, f as WorkflowDocumentOptions, g as LineEventProps, N as NodesDragEvent, h as WorkflowNodeJSON, i as WorkflowPortEntity, j as WorkflowLineEntity, O as OnDragLineEnd, k as LineRenderType, l as WorkflowLineRenderContribution, m as LinePosition } from './workflow-node-entity-
|
|
6
|
-
export { X as HoverPosition, F as LINE_HOVER_DISTANCE, x as LineColor, y as LineColors, w as LinePoint, v as LinePointLocation, u as LineType, C as NodesDragEndEvent, B as NodesDragStartEvent, D as NodesDraggingEvent, P as POINT_RADIUS, K as PORT_SIZE, p as WORKFLOW_LINE_ENTITY, Y as WorkfloEntityHoverable, s as WorkflowContentChangeEvent, r as WorkflowContentChangeType, _ as WorkflowDocumentOptionsDefault, Z as WorkflowDocumentProvider, V as WorkflowEntityHoverable, H as WorkflowLineEntityOpts, I as WorkflowLineInfo, G as WorkflowLinePortInfo, z as WorkflowLineRenderContributionFactory, J as WorkflowLineUIState, T as WorkflowNodeLines, U as WorkflowNodeLinesData, t as WorkflowNodeMeta, S as WorkflowNodePortsData, M as WorkflowPort, R as WorkflowPortEntityOpts, n as WorkflowPortType, Q as WorkflowPorts, A as WorkflowSubCanvas, q as domReactToBounds, o as getPortEntityId, E as onDragLineEndParams } from './workflow-node-entity-
|
|
4
|
+
import { FlowNodeType, FlowOperationBaseServiceImpl, FlowNodeEntityOrId, FlowNodeEntity } from '@flowgram.ai/document';
|
|
5
|
+
import { W as WorkflowJSON, L as LineCenterPoint, a as WorkflowDocument, b as WorkflowNodeEntity, c as WorkflowHoverService, d as WorkflowLinesManager, e as WorkflowSelectService, f as WorkflowDocumentOptions, g as LineEventProps, N as NodesDragEvent, h as WorkflowNodeJSON, i as WorkflowPortEntity, j as WorkflowLineEntity, O as OnDragLineEnd, k as LineRenderType, l as WorkflowLineRenderContribution, m as LinePosition } from './workflow-node-entity-DH5qlw7I.mjs';
|
|
6
|
+
export { X as HoverPosition, F as LINE_HOVER_DISTANCE, x as LineColor, y as LineColors, w as LinePoint, v as LinePointLocation, u as LineType, C as NodesDragEndEvent, B as NodesDragStartEvent, D as NodesDraggingEvent, P as POINT_RADIUS, K as PORT_SIZE, p as WORKFLOW_LINE_ENTITY, Y as WorkfloEntityHoverable, s as WorkflowContentChangeEvent, r as WorkflowContentChangeType, _ as WorkflowDocumentOptionsDefault, Z as WorkflowDocumentProvider, V as WorkflowEntityHoverable, H as WorkflowLineEntityOpts, I as WorkflowLineInfo, G as WorkflowLinePortInfo, z as WorkflowLineRenderContributionFactory, J as WorkflowLineUIState, T as WorkflowNodeLines, U as WorkflowNodeLinesData, t as WorkflowNodeMeta, S as WorkflowNodePortsData, M as WorkflowPort, R as WorkflowPortEntityOpts, n as WorkflowPortType, Q as WorkflowPorts, A as WorkflowSubCanvas, q as domReactToBounds, o as getPortEntityId, E as onDragLineEndParams } from './workflow-node-entity-DH5qlw7I.mjs';
|
|
7
7
|
import * as _flowgram_ai_utils from '@flowgram.ai/utils';
|
|
8
8
|
import { IPoint, Rectangle, DisposableCollection, Disposable } from '@flowgram.ai/utils';
|
|
9
9
|
export { compose, composeAsync, delay } from '@flowgram.ai/utils';
|
|
@@ -75,7 +75,7 @@ declare class WorkflowDragService {
|
|
|
75
75
|
protected linesManager: WorkflowLinesManager;
|
|
76
76
|
protected commandService: CommandService;
|
|
77
77
|
protected selectService: WorkflowSelectService;
|
|
78
|
-
protected operationService:
|
|
78
|
+
protected operationService: WorkflowOperationBaseService;
|
|
79
79
|
readonly options: WorkflowDocumentOptions;
|
|
80
80
|
private _onDragLineEventEmitter;
|
|
81
81
|
readonly onDragLineEventChange: _flowgram_ai_utils.Event<LineEventProps>;
|
|
@@ -228,9 +228,11 @@ declare class WorkflowResetLayoutService {
|
|
|
228
228
|
|
|
229
229
|
declare class WorkflowOperationBaseServiceImpl extends FlowOperationBaseServiceImpl implements WorkflowOperationBaseService {
|
|
230
230
|
protected document: WorkflowDocument;
|
|
231
|
+
linesManager: WorkflowLinesManager;
|
|
231
232
|
private onNodePostionUpdateEmitter;
|
|
232
233
|
readonly onNodePostionUpdate: _flowgram_ai_utils.Event<NodePostionUpdateEvent>;
|
|
233
234
|
updateNodePosition(nodeOrId: FlowNodeEntityOrId, position: IPoint): void;
|
|
235
|
+
fromJSON(json: WorkflowJSON): void;
|
|
234
236
|
}
|
|
235
237
|
|
|
236
238
|
/**
|
|
@@ -355,7 +357,7 @@ interface NodeRenderReturnType {
|
|
|
355
357
|
* 更新节点的扩展数据
|
|
356
358
|
* @param extInfo
|
|
357
359
|
*/
|
|
358
|
-
updateExtInfo<T = any>(extInfo: T): void;
|
|
360
|
+
updateExtInfo<T = any>(extInfo: T, fullUpdate?: boolean): void;
|
|
359
361
|
/**
|
|
360
362
|
* 展开/收起节点
|
|
361
363
|
* @param expanded
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { PlaygroundConfigEntity, CommandService, PlaygroundDragEvent, EntityData } from '@flowgram.ai/core';
|
|
2
2
|
export { bindConfigEntity, useConfigEntity, useEntities, useEntityDataFromContext, useEntityFromContext, useListenEvents, usePlayground, usePlaygroundContainer, usePlaygroundContext, useRefresh, useService } from '@flowgram.ai/core';
|
|
3
3
|
import { NodeFormProps } from '@flowgram.ai/node';
|
|
4
|
-
import {
|
|
5
|
-
import { W as WorkflowJSON, L as LineCenterPoint, a as WorkflowDocument, b as WorkflowNodeEntity, c as WorkflowHoverService, d as WorkflowLinesManager, e as WorkflowSelectService, f as WorkflowDocumentOptions, g as LineEventProps, N as NodesDragEvent, h as WorkflowNodeJSON, i as WorkflowPortEntity, j as WorkflowLineEntity, O as OnDragLineEnd, k as LineRenderType, l as WorkflowLineRenderContribution, m as LinePosition } from './workflow-node-entity-
|
|
6
|
-
export { X as HoverPosition, F as LINE_HOVER_DISTANCE, x as LineColor, y as LineColors, w as LinePoint, v as LinePointLocation, u as LineType, C as NodesDragEndEvent, B as NodesDragStartEvent, D as NodesDraggingEvent, P as POINT_RADIUS, K as PORT_SIZE, p as WORKFLOW_LINE_ENTITY, Y as WorkfloEntityHoverable, s as WorkflowContentChangeEvent, r as WorkflowContentChangeType, _ as WorkflowDocumentOptionsDefault, Z as WorkflowDocumentProvider, V as WorkflowEntityHoverable, H as WorkflowLineEntityOpts, I as WorkflowLineInfo, G as WorkflowLinePortInfo, z as WorkflowLineRenderContributionFactory, J as WorkflowLineUIState, T as WorkflowNodeLines, U as WorkflowNodeLinesData, t as WorkflowNodeMeta, S as WorkflowNodePortsData, M as WorkflowPort, R as WorkflowPortEntityOpts, n as WorkflowPortType, Q as WorkflowPorts, A as WorkflowSubCanvas, q as domReactToBounds, o as getPortEntityId, E as onDragLineEndParams } from './workflow-node-entity-
|
|
4
|
+
import { FlowNodeType, FlowOperationBaseServiceImpl, FlowNodeEntityOrId, FlowNodeEntity } from '@flowgram.ai/document';
|
|
5
|
+
import { W as WorkflowJSON, L as LineCenterPoint, a as WorkflowDocument, b as WorkflowNodeEntity, c as WorkflowHoverService, d as WorkflowLinesManager, e as WorkflowSelectService, f as WorkflowDocumentOptions, g as LineEventProps, N as NodesDragEvent, h as WorkflowNodeJSON, i as WorkflowPortEntity, j as WorkflowLineEntity, O as OnDragLineEnd, k as LineRenderType, l as WorkflowLineRenderContribution, m as LinePosition } from './workflow-node-entity-DWVtlA2a.js';
|
|
6
|
+
export { X as HoverPosition, F as LINE_HOVER_DISTANCE, x as LineColor, y as LineColors, w as LinePoint, v as LinePointLocation, u as LineType, C as NodesDragEndEvent, B as NodesDragStartEvent, D as NodesDraggingEvent, P as POINT_RADIUS, K as PORT_SIZE, p as WORKFLOW_LINE_ENTITY, Y as WorkfloEntityHoverable, s as WorkflowContentChangeEvent, r as WorkflowContentChangeType, _ as WorkflowDocumentOptionsDefault, Z as WorkflowDocumentProvider, V as WorkflowEntityHoverable, H as WorkflowLineEntityOpts, I as WorkflowLineInfo, G as WorkflowLinePortInfo, z as WorkflowLineRenderContributionFactory, J as WorkflowLineUIState, T as WorkflowNodeLines, U as WorkflowNodeLinesData, t as WorkflowNodeMeta, S as WorkflowNodePortsData, M as WorkflowPort, R as WorkflowPortEntityOpts, n as WorkflowPortType, Q as WorkflowPorts, A as WorkflowSubCanvas, q as domReactToBounds, o as getPortEntityId, E as onDragLineEndParams } from './workflow-node-entity-DWVtlA2a.js';
|
|
7
7
|
import * as _flowgram_ai_utils from '@flowgram.ai/utils';
|
|
8
8
|
import { IPoint, Rectangle, DisposableCollection, Disposable } from '@flowgram.ai/utils';
|
|
9
9
|
export { compose, composeAsync, delay } from '@flowgram.ai/utils';
|
|
@@ -75,7 +75,7 @@ declare class WorkflowDragService {
|
|
|
75
75
|
protected linesManager: WorkflowLinesManager;
|
|
76
76
|
protected commandService: CommandService;
|
|
77
77
|
protected selectService: WorkflowSelectService;
|
|
78
|
-
protected operationService:
|
|
78
|
+
protected operationService: WorkflowOperationBaseService;
|
|
79
79
|
readonly options: WorkflowDocumentOptions;
|
|
80
80
|
private _onDragLineEventEmitter;
|
|
81
81
|
readonly onDragLineEventChange: _flowgram_ai_utils.Event<LineEventProps>;
|
|
@@ -228,9 +228,11 @@ declare class WorkflowResetLayoutService {
|
|
|
228
228
|
|
|
229
229
|
declare class WorkflowOperationBaseServiceImpl extends FlowOperationBaseServiceImpl implements WorkflowOperationBaseService {
|
|
230
230
|
protected document: WorkflowDocument;
|
|
231
|
+
linesManager: WorkflowLinesManager;
|
|
231
232
|
private onNodePostionUpdateEmitter;
|
|
232
233
|
readonly onNodePostionUpdate: _flowgram_ai_utils.Event<NodePostionUpdateEvent>;
|
|
233
234
|
updateNodePosition(nodeOrId: FlowNodeEntityOrId, position: IPoint): void;
|
|
235
|
+
fromJSON(json: WorkflowJSON): void;
|
|
234
236
|
}
|
|
235
237
|
|
|
236
238
|
/**
|
|
@@ -355,7 +357,7 @@ interface NodeRenderReturnType {
|
|
|
355
357
|
* 更新节点的扩展数据
|
|
356
358
|
* @param extInfo
|
|
357
359
|
*/
|
|
358
|
-
updateExtInfo<T = any>(extInfo: T): void;
|
|
360
|
+
updateExtInfo<T = any>(extInfo: T, fullUpdate?: boolean): void;
|
|
359
361
|
/**
|
|
360
362
|
* 展开/收起节点
|
|
361
363
|
* @param expanded
|
package/dist/index.js
CHANGED
|
@@ -225,6 +225,27 @@ var import_core5 = require("@flowgram.ai/core");
|
|
|
225
225
|
var import_utils5 = require("@flowgram.ai/utils");
|
|
226
226
|
var import_document3 = require("@flowgram.ai/document");
|
|
227
227
|
var import_core4 = require("@flowgram.ai/core");
|
|
228
|
+
|
|
229
|
+
// src/utils/location-config-to-point.ts
|
|
230
|
+
function locationConfigToPoint(bounds, config, _offset = { x: 0, y: 0 }) {
|
|
231
|
+
const offset = { ..._offset };
|
|
232
|
+
if (config.left !== void 0) {
|
|
233
|
+
offset.x += typeof config.left === "string" ? parseFloat(config.left) * 0.01 * bounds.width : config.left;
|
|
234
|
+
} else if (config.right !== void 0) {
|
|
235
|
+
offset.x += bounds.width - (typeof config.right === "string" ? parseFloat(config.right) * 0.01 * bounds.width : config.right);
|
|
236
|
+
}
|
|
237
|
+
if (config.top !== void 0) {
|
|
238
|
+
offset.y += typeof config.top === "string" ? parseFloat(config.top) * 0.01 * bounds.height : config.top;
|
|
239
|
+
} else if (config.bottom !== void 0) {
|
|
240
|
+
offset.y += bounds.height - (typeof config.bottom === "string" ? parseFloat(config.bottom) * 0.01 * bounds.height : config.bottom);
|
|
241
|
+
}
|
|
242
|
+
return {
|
|
243
|
+
x: bounds.x + offset.x,
|
|
244
|
+
y: bounds.y + offset.y
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// src/entities/workflow-port-entity.ts
|
|
228
249
|
var PORT_SIZE = 24;
|
|
229
250
|
var WorkflowPortEntity = class extends import_core4.Entity {
|
|
230
251
|
constructor(opts) {
|
|
@@ -237,6 +258,7 @@ var WorkflowPortEntity = class extends import_core4.Entity {
|
|
|
237
258
|
this.portType = opts.type;
|
|
238
259
|
this._disabled = opts.disabled;
|
|
239
260
|
this._offset = opts.offset;
|
|
261
|
+
this._locationConfig = opts.locationConfig;
|
|
240
262
|
this._location = opts.location;
|
|
241
263
|
this._size = opts.size;
|
|
242
264
|
this.node = opts.node;
|
|
@@ -284,7 +306,7 @@ var WorkflowPortEntity = class extends import_core4.Entity {
|
|
|
284
306
|
return "right";
|
|
285
307
|
}
|
|
286
308
|
get point() {
|
|
287
|
-
const { targetElement } = this;
|
|
309
|
+
const { targetElement, _locationConfig } = this;
|
|
288
310
|
const { bounds } = this.node.getData(import_document3.FlowNodeTransformData);
|
|
289
311
|
const location2 = this.location;
|
|
290
312
|
if (targetElement) {
|
|
@@ -299,8 +321,14 @@ var WorkflowPortEntity = class extends import_core4.Entity {
|
|
|
299
321
|
location: location2
|
|
300
322
|
};
|
|
301
323
|
}
|
|
302
|
-
|
|
324
|
+
if (_locationConfig) {
|
|
325
|
+
return {
|
|
326
|
+
...locationConfigToPoint(bounds, _locationConfig, this._offset),
|
|
327
|
+
location: location2
|
|
328
|
+
};
|
|
329
|
+
}
|
|
303
330
|
const offset = this._offset || { x: 0, y: 0 };
|
|
331
|
+
let point = { x: 0, y: 0 };
|
|
304
332
|
switch (location2) {
|
|
305
333
|
case "left":
|
|
306
334
|
point = bounds.leftCenter;
|
|
@@ -413,6 +441,10 @@ var WorkflowPortEntity = class extends import_core4.Entity {
|
|
|
413
441
|
this._offset = data.offset;
|
|
414
442
|
changed = true;
|
|
415
443
|
}
|
|
444
|
+
if (import_utils5.Compare.isChanged(data.locationConfig, this._locationConfig)) {
|
|
445
|
+
this._locationConfig = data.locationConfig;
|
|
446
|
+
changed = true;
|
|
447
|
+
}
|
|
416
448
|
if (import_utils5.Compare.isChanged(data.size, this._size)) {
|
|
417
449
|
this._size = data.size;
|
|
418
450
|
changed = true;
|
|
@@ -1513,10 +1545,11 @@ function initFormDataFromJSON(node, json, isFirstCreate) {
|
|
|
1513
1545
|
// src/workflow-document-option.ts
|
|
1514
1546
|
var WorkflowDocumentOptions = Symbol("WorkflowDocumentOptions");
|
|
1515
1547
|
var WorkflowDocumentOptionsDefault = {
|
|
1516
|
-
cursors: {
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1548
|
+
// cursors: {
|
|
1549
|
+
// grab: 'url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjEiIHZpZXdCb3g9IjAgMCAyMCAyMSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMC40ODczIDIuNjIzNzhDOS45MDczMSAyLjYyMzc4IDkuNDM3MTMgMy4wOTM5NiA5LjQzNzEzIDMuNjczOTZWNS4xNDM3NkM5LjM5NDI4IDQuNDAyNzQgOC43Nzk3OCAzLjgxNTA0IDguMDI4MDIgMy44MTUwNEM3LjI0ODQ4IDMuODE1MDQgNi42MTY1MyA0LjQ0Njk5IDYuNjE2NTMgNS4yMjY1M1YxMS44Mjg5TDUuNjc0MTggMTEuMDA0OUM1LjE1NDg3IDEwLjU1MDkgNC40MDk1IDEwLjQ2MzYgMy43OTkzOCAxMC43ODU1TDMuNjk2OTQgMTAuODM5NkMzLjA2MjE3IDExLjE3NDUgMi45MjI2IDEyLjAyMjggMy40MTY2MiAxMi41NDM0TDcuMzM5NTkgMTYuNjc3NVYxNy4zMjU5QzcuMzM5NTkgMTcuNzg2MiA3LjcxMjY5IDE4LjE1OTMgOC4xNzI5MiAxOC4xNTkzSDEzLjgwODRDMTQuMjY4NyAxOC4xNTkzIDE0LjY0MTcgMTcuNzg2MiAxNC42NDE3IDE3LjMyNTlWMTYuNzkzNUMxNS44MDk0IDE1LjY0ODUgMTYuNDY3MyAxNC4wODE5IDE2LjQ2NzMgMTIuNDQ2NVYxMS40OTY3TDE2LjQ2NzEgNi42MzY4NUMxNi40NjcxIDUuOTU2MyAxNS45MTU0IDUuNDA0NjEgMTUuMjM0OCA1LjQwNDYxQzE0LjU1NDMgNS40MDQ2MSAxNC4wMDI2IDUuOTU2MyAxNC4wMDI2IDYuNjM2ODVMMTQuMDAyMSA1LjA0NzI4QzE0LjAwMjEgNC4zNjY3MyAxMy40NTA0IDMuODE1MDQgMTIuNzY5OCAzLjgxNTA0QzEyLjA4OTMgMy44MTUwNCAxMS41Mzc2IDQuMzY2NzMgMTEuNTM3NiA1LjA0NzI4TDExLjUzNzUgMy42NzM5NUMxMS41Mzc1IDMuMDkzOTYgMTEuMDY3MyAyLjYyMzc4IDEwLjQ4NzMgMi42MjM3OFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTAuNDg3NCAxLjM3NDAyQzExLjM2MTIgMS4zNzQwMiAxMi4xMjExIDEuODYxMTggMTIuNTEwNSAyLjU3ODY4QzEyLjU5NTggMi41Njk4MyAxMi42ODIzIDIuNTY1MjggMTIuNzcgMi41NjUyOEMxMy44Mjc4IDIuNTY1MjggMTQuNzMxMSAzLjIyNzAxIDE1LjA4ODUgNC4xNTkxMUMxNS4xMzcgNC4xNTYyOSAxNS4xODU4IDQuMTU0ODYgMTUuMjM1IDQuMTU0ODZDMTYuNjA1OSA0LjE1NDg2IDE3LjcxNzIgNS4yNjYxOSAxNy43MTcyIDYuNjM3MDlMMTcuNzE3NCAxMi40NDY3QzE3LjcxNzQgMTQuMjM1NSAxNy4wNjQ0IDE1Ljk1NTkgMTUuODkxOSAxNy4yOTA0VjE3LjMyNjJDMTUuODkxOSAxOC40NzY4IDE0Ljk1OTEgMTkuNDA5NSAxMy44MDg1IDE5LjQwOTVIOC4xNzMwNkM3LjAyMjQ3IDE5LjQwOTUgNi4wODk3MyAxOC40NzY4IDYuMDg5NzMgMTcuMzI2MlYxNy4xNzY0TDIuNTEwMDMgMTMuNDA0MUMxLjQ0NTk5IDEyLjI4MjggMS43NDY2IDEwLjQ1NTUgMy4xMTM3OSA5LjczNDI0TDMuMjE2MjQgOS42ODAxOUMzLjg5MTY4IDkuMzIzODMgNC42NjE4NSA5LjI1NDAxIDUuMzY2NjYgOS40NTE5OFY1LjIyNjc4QzUuMzY2NjYgMy43NTY4NyA2LjU1ODI2IDIuNTY1MjggOC4wMjgxNiAyLjU2NTI4QzguMTcyOTMgMi41NjUyOCA4LjMxNDk5IDIuNTc2ODQgOC40NTM0NyAyLjU5OTA3QzguODM5NDMgMS44NzA0MiA5LjYwNTQ2IDEuMzc0MDIgMTAuNDg3NCAxLjM3NDAyWk0xMi40NDc2IDMuODU3ODdWOS40NzY0NkMxMi40NDc2IDkuNzI4NTIgMTIuMjQzMyA5LjkzMjg1IDExLjk5MTMgOS45MzI4NUMxMS43MzkyIDkuOTMyODUgMTEuNTM0OSA5LjcyODUyIDExLjUzNDkgOS40NzY0NlYzLjc5NjU1QzExLjUzNDkgMy43Nzk1NiAxMS41MzU4IDMuNzYyNzcgMTEuNTM3NiAzLjc0NjI2VjMuNjc0MkMxMS41Mzc2IDMuNDMyODIgMTEuNDU2MiAzLjIxMDQ2IDExLjMxOTMgMy4wMzMwOUMxMS4xMjcyIDIuNzg0MjggMTAuODI2MSAyLjYyNDAyIDEwLjQ4NzQgMi42MjQwMkMxMC4xMjM4IDIuNjI0MDIgOS44MDMzMiAyLjgwODg2IDkuNjE0ODMgMy4wODk3QzkuNTAyNjkgMy4yNTY3OSA5LjQzNzI2IDMuNDU3ODUgOS40MzcyNiAzLjY3NDJWMy43ODU3M0M5LjQzNzM1IDMuNzg5MzMgOS40MzczOSAzLjc5Mjk0IDkuNDM3MzkgMy43OTY1NVY5LjkwMTdDOS40MzczOSAxMC4xNTM3IDkuMjMzMDYgMTAuMzU4MSA4Ljk4MTAxIDEwLjM1ODFDOC43Mjg5NSAxMC4zNTgxIDguNTI0NjIgMTAuMTUzNyA4LjUyNDYyIDkuOTAxN1YzLjkwNTA3QzguNDE3NzMgMy44NjQ5IDguMzA0NjggMy44MzczMiA4LjE4NzI2IDMuODI0MTVDOC4xMzUwNCAzLjgxODI5IDguMDgxOTUgMy44MTUyOCA4LjAyODE2IDMuODE1MjhDNy4yNDg2MSAzLjgxNTI4IDYuNjE2NjYgNC40NDcyMyA2LjYxNjY2IDUuMjI2NzhWMTEuODI5Mkw1LjY3NDMxIDExLjAwNTJDNS41Nzg2OCAxMC45MjE2IDUuNDc1MzcgMTAuODUwNCA1LjM2NjY2IDEwLjc5MTlDNC44ODUwNiAxMC41MzI5IDQuMjk3MjggMTAuNTIzMSAzLjc5OTUyIDEwLjc4NThMMy42OTcwNyAxMC44Mzk4QzMuMDYyMzEgMTEuMTc0NyAyLjkyMjczIDEyLjAyMzEgMy40MTY3NSAxMi41NDM3TDcuMzM5NzMgMTYuNjc3N1YxNy4zMjYyQzcuMzM5NzMgMTcuNzg2NCA3LjcxMjgyIDE4LjE1OTUgOC4xNzMwNiAxOC4xNTk1SDEzLjgwODVDMTQuMjY4OCAxOC4xNTk1IDE0LjY0MTkgMTcuNzg2NCAxNC42NDE5IDE3LjMyNjJWMTYuNzkzOEMxNS43Mzc5IDE1LjcxOSAxNi4zODQ3IDE0LjI3MjggMTYuNDYgMTIuNzQ3QzE2LjQ2NDEgMTIuNjY0MSAxNi40NjY1IDEyLjU4MDkgMTYuNDY3MiAxMi40OTc1TDE2LjQ2NzQgMTIuNDQ2N0wxNi40NjcyIDYuNjM3MDlDMTYuNDY3MiA1Ljk2MjMgMTUuOTI0OCA1LjQxNDE5IDE1LjI1MjIgNS40MDQ5N0wxNS4yMzUgNS40MDQ4NkMxNS4xMjQ2IDUuNDA0ODYgMTUuMDE3NyA1LjQxOTM2IDE0LjkxNTkgNS40NDY1NlY5LjYwMjI2QzE0LjkxNTkgOS44NTQzMSAxNC43MTE2IDEwLjA1ODYgMTQuNDU5NSAxMC4wNTg2QzE0LjIwNzUgMTAuMDU4NiAxNC4wMDMxIDkuODU0MzEgMTQuMDAzMSA5LjYwMjI2VjYuNjA1MTRDMTQuMDAyOSA2LjYxNTc2IDE0LjAwMjcgNi42MjY0MSAxNC4wMDI3IDYuNjM3MDlWOS4yNzcwNUwxNC4wMDIyIDUuMDQ3NTJDMTQuMDAyMiA0Ljg2OTEzIDEzLjk2NDMgNC42OTk2IDEzLjg5NjEgNC41NDY1M0MxMy43MDY0IDQuMTIwNzIgMTMuMjgyMiAzLjgyMjM1IDEyLjc4NzYgMy44MTU0MUwxMi43NyAzLjgxNTI4QzEyLjY1ODQgMy44MTUyOCAxMi41NTA0IDMuODMwMSAxMi40NDc2IDMuODU3ODdaIiBmaWxsPSIjMUQxQzIzIi8+Cjwvc3ZnPg=="), auto',
|
|
1550
|
+
// grabbing:
|
|
1551
|
+
// 'url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjEiIHZpZXdCb3g9IjAgMCAyMCAyMSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02LjYxODE3IDUuNTk4NzVDNi42MTgxNyA0LjgxOTIgNy4yNTAxMiA0LjE4NzI2IDguMDI5NjcgNC4xODcyNkM4Ljc3ODczIDQuMTg3MjYgOS4zOTE1MiA0Ljc3MDc1IDkuNDM4MjkgNS41MDgwMUM5LjQ1OTkyIDQuOTQ3MSA5LjkyMTQ3IDQuNDk5MDIgMTAuNDg3NyA0LjQ5OTAyQzExLjA2NzcgNC40OTkwMiAxMS41Mzc4IDQuOTY5MiAxMS41Mzc4IDUuNTQ5MTlWOC43NjI0NkwxMS41Mzc5IDYuNzExNUMxMS41Mzc5IDYuMDMwOTUgMTIuMDg5NiA1LjQ3OTI2IDEyLjc3MDIgNS40NzkyNkMxMy40NTA3IDUuNDc5MjYgMTQuMDAyNCA2LjAzMDk1IDE0LjAwMjQgNi43MTE1TDE0LjAwMjQgOC43NjI0NkwxNC4wMDI5IDguMDE5ODNDMTQuMDAyOSA3LjMzOTI5IDE0LjU1NDYgNi43ODc1OSAxNS4yMzUyIDYuNzg3NTlDMTUuOTE1NyA2Ljc4NzU5IDE2LjQ2NzQgNy4zMzkyOCAxNi40Njc0IDguMDE5ODNWMTEuNDk3TDE2LjQ2NzUgMTIuNDQ2N0MxNi40Njc1IDE0LjA4MjEgMTUuODA5NiAxNS42NDg3IDE0LjY0MiAxNi43OTM4VjE3LjMyNjJDMTQuNjQyIDE3Ljc4NjQgMTQuMjY4OSAxOC4xNTk1IDEzLjgwODcgMTguMTU5NUg4LjE3MzE3QzcuNzEyOTMgMTguMTU5NSA3LjMzOTg0IDE3Ljc4NjQgNy4zMzk4NCAxNy4zMjYyVjE1Ljk0MjRMNS4zNDU2MiAxNC43NTM0QzQuNTg5MjQgMTQuMzAyNCA0LjEyNTkxIDEzLjQ4NjcgNC4xMjU4OSAxMi42MDYxTDQuMTI1ODMgOS4yODM4M0M0LjEyNTgyIDguOTU0MjcgNC4zMjAwMyA4LjY1NTY2IDQuNjIxMjkgOC41MjIwNUw2LjYxODE3IDcuNjM2MzRWNS41OTg3NVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTAuNDg3OCAzLjI0OTAyQzExLjI3OTYgMy4yNDkwMiAxMS45Nzc4IDMuNjQ5MDIgMTIuMzkxNyA0LjI1Nzk2QzEyLjUxNTEgNC4yMzkwNiAxMi42NDE2IDQuMjI5MjYgMTIuNzcwMyA0LjIyOTI2QzEzLjcyMjQgNC4yMjkyNiAxNC41NDkzIDQuNzY1MzEgMTQuOTY1NyA1LjU1MjA3QzE1LjA1NDMgNS41NDI1IDE1LjE0NDIgNS41Mzc1OSAxNS4yMzUzIDUuNTM3NTlDMTYuNjA2MiA1LjUzNzU5IDE3LjcxNzYgNi42NDg5MyAxNy43MTc2IDguMDE5ODNMMTcuNzE3NyAxMi40NDY3QzE3LjcxNzcgMTQuMjM1NSAxNy4wNjQ3IDE1Ljk1NTkgMTUuODkyMSAxNy4yOTA0VjE3LjMyNjJDMTUuODkyMSAxOC40NzY4IDE0Ljk1OTQgMTkuNDA5NSAxMy44MDg4IDE5LjQwOTVIOC4xNzMzMkM3LjAyMjczIDE5LjQwOTUgNi4wODk5OCAxOC40NzY4IDYuMDg5OTggMTcuMzI2MlYxNi42NTI0TDQuNzA1NjMgMTUuODI3QzMuNTcxMDYgMTUuMTUwNSAyLjg3NjA3IDEzLjkyNzEgMi44NzYwNCAxMi42MDYxTDIuODc1OTggOS4yODM4NUMyLjg3NTk2IDguNDU5OTYgMy4zNjE0OSA3LjcxMzQ1IDQuMTE0NjIgNy4zNzk0TDUuMzY4MzIgNi44MjMzM1Y1LjU5ODc1QzUuMzY4MzIgNC4xMjg4NSA2LjU1OTkxIDIuOTM3MjYgOC4wMjk4MiAyLjkzNzI2QzguNjA4MzEgMi45MzcyNiA5LjE0MzU1IDMuMTIxNyA5LjU4MDA1IDMuNDM1MDVDOS44NTg1MyAzLjMxNTMyIDEwLjE2NTQgMy4yNDkwMiAxMC40ODc4IDMuMjQ5MDJaTTEyLjQ0NzkgNS41MjE4NlY5LjQ3NTU3QzEyLjQ0NzkgOS43Mjc2MiAxMi4yNDM2IDkuOTMxOTUgMTEuOTkxNiA5LjkzMTk1QzExLjc1NjggOS45MzE5NSAxMS41NjM0IDkuNzU0NjUgMTEuNTM4IDkuNTI2NjNDMTEuNTM2MSA5LjUwOTg3IDExLjUzNTIgOS40OTI4MyAxMS41MzUyIDkuNDc1NTdWNS40NzE1OEMxMS41MTU0IDUuMjAwODMgMTEuMzkzIDQuOTU4NTggMTEuMjA2NiA0Ljc4MzU4QzExLjAxODggNC42MDcxMSAxMC43NjU5IDQuNDk5MDIgMTAuNDg3OCA0LjQ5OTAyQzEwLjQ3NjYgNC40OTkwMiAxMC40NjU0IDQuNDk5MTkgMTAuNDU0MiA0LjQ5OTU0QzkuOTAzNDcgNC41MTY4NCA5LjQ1OTY0IDQuOTU4MjQgOS40Mzg0NCA1LjUwODAxQzkuNDM4MiA1LjUwNDMgOS40Mzc5NSA1LjUwMDU4IDkuNDM3NjkgNS40OTY4OFY5LjkwMjQzQzkuNDM3NjkgMTAuMTU0NSA5LjIzMzM2IDEwLjM1ODggOC45ODEzMSAxMC4zNTg4QzguNzI5MjUgMTAuMzU4OCA4LjUyNDkyIDEwLjE1NDUgOC41MjQ5MiA5LjkwMjQzVjQuMjc2NTNDOC4zNzA4NiA0LjIxODgyIDguMjA0MDIgNC4xODcyNiA4LjAyOTgyIDQuMTg3MjZDNy4yNTAyNyA0LjE4NzI2IDYuNjE4MzIgNC44MTkyIDYuNjE4MzIgNS41OTg3NUw2LjYxODI3IDkuOTc1OTlDNi42MTgyNyAxMC4yMjggNi40MTM5NCAxMC40MzI0IDYuMTYxODkgMTAuNDMyNEM1LjkwOTgzIDEwLjQzMjQgNS43MDU1IDEwLjIyOCA1LjcwNTUgOS45NzU5OVY4LjA0MTIyTDQuNjIxNDQgOC41MjIwNUM0LjMyMDE4IDguNjU1NjYgNC4xMjU5NyA4Ljk1NDI3IDQuMTI1OTggOS4yODM4M0w0LjEyNjA0IDEyLjYwNjFDNC4xMjYwNiAxMy40ODY3IDQuNTg5MzkgMTQuMzAyNCA1LjM0NTc2IDE0Ljc1MzRMNy4zMzk5OCAxNS45NDI0VjE3LjMyNjJDNy4zMzk5OCAxNy43ODY0IDcuNzEzMDggMTguMTU5NSA4LjE3MzMyIDE4LjE1OTVIMTMuODA4OEMxNC4yNjkgMTguMTU5NSAxNC42NDIxIDE3Ljc4NjQgMTQuNjQyMSAxNy4zMjYyVjE2Ljc5MzhDMTUuNzM4MSAxNS43MTkgMTYuMzg1IDE0LjI3MjggMTYuNDYwMyAxMi43NDdDMTYuNDY0NiAxMi42NiAxNi40NjcgMTIuNTcyOCAxNi40Njc2IDEyLjQ4NTRMMTYuNDY3NyAxMi40NDY3TDE2LjQ2NzYgOC4wMTk4M0MxNi40Njc2IDcuMzQ1MDQgMTUuOTI1MiA2Ljc5NjkzIDE1LjI1MjUgNi43ODc3MUwxNS4yMzUzIDYuNzg3NTlDMTUuMTI1IDYuNzg3NTkgMTUuMDE4IDYuODAyMSAxNC45MTYyIDYuODI5MzFWOS42MDEzNkMxNC45MTYyIDkuODUzNDIgMTQuNzExOSAxMC4wNTc3IDE0LjQ1OTggMTAuMDU3N0MxNC4yMDc4IDEwLjA1NzcgMTQuMDAzNCA5Ljg1MzQxIDE0LjAwMzQgOS42MDEzNlY3Ljk4OTg1QzE0LjAwMzIgNy45OTk4MiAxNC4wMDMxIDguMDA5ODEgMTQuMDAzMSA4LjAxOTgzTDE0LjAwMzQgOS42MDEzNkwxNC4wMDI1IDYuNzExNUMxNC4wMDI1IDYuNDQ5NzQgMTMuOTIwOSA2LjIwNzA1IDEzLjc4MTggNi4wMDc0OEMxMy41NjIgNS42OTI0MiAxMy4xOTg5IDUuNDg0ODMgMTIuNzg3IDUuNDc5MzdMMTIuNzcwMyA1LjQ3OTI2QzEyLjY1ODggNS40NzkyNiAxMi41NTA3IDUuNDk0MDggMTIuNDQ3OSA1LjUyMTg2WiIgZmlsbD0iIzFEMUMyMyIvPgo8L3N2Zz4="), auto',
|
|
1552
|
+
// },
|
|
1520
1553
|
fromNodeJSON(node, json, isFirstCreate) {
|
|
1521
1554
|
initFormDataFromJSON(node, json, isFirstCreate);
|
|
1522
1555
|
return;
|
|
@@ -2104,6 +2137,9 @@ var WorkflowDocument = class extends import_document8.FlowDocument {
|
|
|
2104
2137
|
this._loading = false;
|
|
2105
2138
|
this.onLoadedEmitter.fire();
|
|
2106
2139
|
}
|
|
2140
|
+
/**
|
|
2141
|
+
* @deprecated use `ctx.operation.fromJSON` instead
|
|
2142
|
+
*/
|
|
2107
2143
|
async reload(json, delayTime = 0) {
|
|
2108
2144
|
if (this.disposed) return;
|
|
2109
2145
|
this._loading = true;
|
|
@@ -2124,7 +2160,7 @@ var WorkflowDocument = class extends import_document8.FlowDocument {
|
|
|
2124
2160
|
edges: json.edges ?? []
|
|
2125
2161
|
};
|
|
2126
2162
|
this.entityManager.changeEntityLocked = true;
|
|
2127
|
-
this.
|
|
2163
|
+
this.batchAddFromJSON(workflowJSON);
|
|
2128
2164
|
this.entityManager.changeEntityLocked = false;
|
|
2129
2165
|
this.transformer.loading = false;
|
|
2130
2166
|
if (fireRender) {
|
|
@@ -2144,9 +2180,17 @@ var WorkflowDocument = class extends import_document8.FlowDocument {
|
|
|
2144
2180
|
* 创建流程节点
|
|
2145
2181
|
* @param json
|
|
2146
2182
|
*/
|
|
2147
|
-
createWorkflowNode(json, isClone = false,
|
|
2183
|
+
createWorkflowNode(json, isClone = false, parentID) {
|
|
2184
|
+
return this._createWorkflowNode(json, { parentID });
|
|
2185
|
+
}
|
|
2186
|
+
/**
|
|
2187
|
+
* 创建流程节点
|
|
2188
|
+
* @param json
|
|
2189
|
+
*/
|
|
2190
|
+
_createWorkflowNode(json, options) {
|
|
2191
|
+
const { parentID, onNodeCreated, onEdgeCreated } = options ?? {};
|
|
2148
2192
|
const isExistedNode = this.getNode(json.id);
|
|
2149
|
-
const parent = this.getNode(
|
|
2193
|
+
const parent = this.getNode(parentID ?? this.root.id) ?? this.root;
|
|
2150
2194
|
const node = this.addNode(
|
|
2151
2195
|
{
|
|
2152
2196
|
...json,
|
|
@@ -2173,15 +2217,19 @@ var WorkflowDocument = class extends import_document8.FlowDocument {
|
|
|
2173
2217
|
node.getData(import_core14.TransformData).update({
|
|
2174
2218
|
position
|
|
2175
2219
|
});
|
|
2176
|
-
if (formMeta && formData
|
|
2177
|
-
formData.
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2220
|
+
if (formMeta && formData) {
|
|
2221
|
+
if (!formData.formModel.initialized) {
|
|
2222
|
+
formData.createForm(formMeta, json.data);
|
|
2223
|
+
formData.onDataChange(() => {
|
|
2224
|
+
this.fireContentChange({
|
|
2225
|
+
type: "NODE_DATA_CHANGE" /* NODE_DATA_CHANGE */,
|
|
2226
|
+
toJSON: () => formData.toJSON(),
|
|
2227
|
+
entity: node
|
|
2228
|
+
});
|
|
2183
2229
|
});
|
|
2184
|
-
}
|
|
2230
|
+
} else {
|
|
2231
|
+
formData.updateFormValues(json.data);
|
|
2232
|
+
}
|
|
2185
2233
|
}
|
|
2186
2234
|
const positionData = node.getData(import_core14.PositionData);
|
|
2187
2235
|
if (!isExistedNode) {
|
|
@@ -2220,11 +2268,12 @@ var WorkflowDocument = class extends import_document8.FlowDocument {
|
|
|
2220
2268
|
});
|
|
2221
2269
|
}
|
|
2222
2270
|
if (json.blocks) {
|
|
2223
|
-
this.
|
|
2271
|
+
this.batchAddFromJSON(
|
|
2224
2272
|
{ nodes: json.blocks, edges: json.edges ?? [] },
|
|
2225
2273
|
{
|
|
2226
2274
|
parent: node,
|
|
2227
|
-
|
|
2275
|
+
onNodeCreated,
|
|
2276
|
+
onEdgeCreated
|
|
2228
2277
|
}
|
|
2229
2278
|
);
|
|
2230
2279
|
}
|
|
@@ -2356,7 +2405,7 @@ var WorkflowDocument = class extends import_document8.FlowDocument {
|
|
|
2356
2405
|
throw new Error(`[WorkflowDocument.createWorkflowNodeByType] Node Id "${id}" duplicated.`);
|
|
2357
2406
|
}
|
|
2358
2407
|
}
|
|
2359
|
-
return this.
|
|
2408
|
+
return this._createWorkflowNode(
|
|
2360
2409
|
{
|
|
2361
2410
|
...json,
|
|
2362
2411
|
id,
|
|
@@ -2367,13 +2416,15 @@ var WorkflowDocument = class extends import_document8.FlowDocument {
|
|
|
2367
2416
|
blocks: json?.blocks,
|
|
2368
2417
|
edges: json?.edges
|
|
2369
2418
|
},
|
|
2370
|
-
|
|
2371
|
-
parentID
|
|
2419
|
+
{ parentID }
|
|
2372
2420
|
);
|
|
2373
2421
|
}
|
|
2374
2422
|
getAllNodes() {
|
|
2375
2423
|
return this.entityManager.getEntities(WorkflowNodeEntity).filter((n) => n.id !== import_document8.FlowNodeBaseType.ROOT);
|
|
2376
2424
|
}
|
|
2425
|
+
getAllEdges() {
|
|
2426
|
+
return this.entityManager.getEntities(WorkflowLineEntity);
|
|
2427
|
+
}
|
|
2377
2428
|
getAllPorts() {
|
|
2378
2429
|
return this.entityManager.getEntities(WorkflowPortEntity).filter((p) => p.node.id !== import_document8.FlowNodeBaseType.ROOT);
|
|
2379
2430
|
}
|
|
@@ -2474,7 +2525,7 @@ var WorkflowDocument = class extends import_document8.FlowDocument {
|
|
|
2474
2525
|
x: json.meta.position.x + 30,
|
|
2475
2526
|
y: json.meta.position.y + 30
|
|
2476
2527
|
};
|
|
2477
|
-
return this.
|
|
2528
|
+
return this._createWorkflowNode(
|
|
2478
2529
|
{
|
|
2479
2530
|
id: newNodeId || `1${nanoid2()}`,
|
|
2480
2531
|
type: node.flowNodeType,
|
|
@@ -2486,16 +2537,17 @@ var WorkflowDocument = class extends import_document8.FlowDocument {
|
|
|
2486
2537
|
blocks: json.blocks,
|
|
2487
2538
|
edges: json.edges
|
|
2488
2539
|
},
|
|
2489
|
-
|
|
2490
|
-
|
|
2540
|
+
{
|
|
2541
|
+
parentID: node.parent?.id
|
|
2542
|
+
}
|
|
2491
2543
|
);
|
|
2492
2544
|
}
|
|
2493
|
-
copyNodeFromJSON(flowNodeType, nodeJSON, newNodeId, position,
|
|
2545
|
+
copyNodeFromJSON(flowNodeType, nodeJSON, newNodeId, position, parentID) {
|
|
2494
2546
|
position = position || {
|
|
2495
2547
|
x: nodeJSON.meta.position.x + 30,
|
|
2496
2548
|
y: nodeJSON.meta.position.y + 30
|
|
2497
2549
|
};
|
|
2498
|
-
return this.
|
|
2550
|
+
return this._createWorkflowNode(
|
|
2499
2551
|
{
|
|
2500
2552
|
id: newNodeId || `1${nanoid2()}`,
|
|
2501
2553
|
type: flowNodeType,
|
|
@@ -2507,8 +2559,9 @@ var WorkflowDocument = class extends import_document8.FlowDocument {
|
|
|
2507
2559
|
blocks: nodeJSON.blocks,
|
|
2508
2560
|
edges: nodeJSON.edges
|
|
2509
2561
|
},
|
|
2510
|
-
|
|
2511
|
-
|
|
2562
|
+
{
|
|
2563
|
+
parentID
|
|
2564
|
+
}
|
|
2512
2565
|
);
|
|
2513
2566
|
}
|
|
2514
2567
|
canRemove(node, silent) {
|
|
@@ -2563,13 +2616,19 @@ var WorkflowDocument = class extends import_document8.FlowDocument {
|
|
|
2563
2616
|
* 批量添加节点
|
|
2564
2617
|
*/
|
|
2565
2618
|
batchAddFromJSON(json, options) {
|
|
2566
|
-
const { parent = this.root,
|
|
2567
|
-
const
|
|
2619
|
+
const { parent = this.root, onNodeCreated, onEdgeCreated } = options ?? {};
|
|
2620
|
+
const parentID = this.getNodeSubCanvas(parent)?.canvasNode.id ?? parent.id;
|
|
2568
2621
|
const processedJSON = buildGroupJSON(json);
|
|
2569
2622
|
const nodes = processedJSON.nodes.map(
|
|
2570
|
-
(nodeJSON) => this.
|
|
2623
|
+
(nodeJSON) => this._createWorkflowNode(nodeJSON, {
|
|
2624
|
+
parentID,
|
|
2625
|
+
onNodeCreated,
|
|
2626
|
+
onEdgeCreated
|
|
2627
|
+
})
|
|
2571
2628
|
);
|
|
2572
|
-
const edges = processedJSON.edges.map((edge) => this.createWorkflowLine(edge,
|
|
2629
|
+
const edges = processedJSON.edges.map((edge) => this.createWorkflowLine(edge, parentID)).filter(Boolean);
|
|
2630
|
+
nodes.forEach((node) => options?.onNodeCreated?.(node));
|
|
2631
|
+
edges.forEach((edge) => options?.onEdgeCreated?.(edge));
|
|
2573
2632
|
return { nodes, edges };
|
|
2574
2633
|
}
|
|
2575
2634
|
getNodeSubCanvas(node) {
|
|
@@ -2618,7 +2677,7 @@ var WorkflowDocument = class extends import_document8.FlowDocument {
|
|
|
2618
2677
|
}
|
|
2619
2678
|
return lineJSON;
|
|
2620
2679
|
}
|
|
2621
|
-
createWorkflowLine(json,
|
|
2680
|
+
createWorkflowLine(json, parentID) {
|
|
2622
2681
|
const fromNode = this.getNode(json.sourceNodeID);
|
|
2623
2682
|
const toNode = this.getNode(json.targetNodeID);
|
|
2624
2683
|
if (!fromNode || !toNode) {
|
|
@@ -2631,10 +2690,10 @@ var WorkflowDocument = class extends import_document8.FlowDocument {
|
|
|
2631
2690
|
toPort: json.targetPortID,
|
|
2632
2691
|
data: json.data
|
|
2633
2692
|
};
|
|
2634
|
-
if (!
|
|
2693
|
+
if (!parentID) {
|
|
2635
2694
|
return this.linesManager.createLine(lineInfo);
|
|
2636
2695
|
}
|
|
2637
|
-
const canvasNode = this.getNode(
|
|
2696
|
+
const canvasNode = this.getNode(parentID);
|
|
2638
2697
|
if (!canvasNode) {
|
|
2639
2698
|
return this.linesManager.createLine(lineInfo);
|
|
2640
2699
|
}
|
|
@@ -3097,20 +3156,16 @@ var WorkflowDragService = class {
|
|
|
3097
3156
|
})
|
|
3098
3157
|
);
|
|
3099
3158
|
const containerTransform = container.getData(import_core15.TransformData);
|
|
3100
|
-
|
|
3101
|
-
|
|
3102
|
-
|
|
3103
|
-
y: containerTransform.position.y + bounds.y
|
|
3104
|
-
}
|
|
3159
|
+
this.operationService.updateNodePosition(container, {
|
|
3160
|
+
x: containerTransform.position.x + bounds.x,
|
|
3161
|
+
y: containerTransform.position.y + bounds.y
|
|
3105
3162
|
});
|
|
3106
3163
|
this.document.layout.updateAffectedTransform(container);
|
|
3107
3164
|
container.blocks.forEach((node) => {
|
|
3108
3165
|
const transform = node.getData(import_core15.TransformData);
|
|
3109
|
-
|
|
3110
|
-
|
|
3111
|
-
|
|
3112
|
-
y: transform.position.y - bounds.y
|
|
3113
|
-
}
|
|
3166
|
+
this.operationService.updateNodePosition(node, {
|
|
3167
|
+
x: transform.position.x - bounds.x,
|
|
3168
|
+
y: transform.position.y - bounds.y
|
|
3114
3169
|
});
|
|
3115
3170
|
this.document.layout.updateAffectedTransform(node);
|
|
3116
3171
|
});
|
|
@@ -3431,7 +3486,7 @@ __decorateClass([
|
|
|
3431
3486
|
(0, import_inversify6.inject)(WorkflowSelectService)
|
|
3432
3487
|
], WorkflowDragService.prototype, "selectService", 2);
|
|
3433
3488
|
__decorateClass([
|
|
3434
|
-
(0, import_inversify6.inject)(
|
|
3489
|
+
(0, import_inversify6.inject)(WorkflowOperationBaseService)
|
|
3435
3490
|
], WorkflowDragService.prototype, "operationService", 2);
|
|
3436
3491
|
__decorateClass([
|
|
3437
3492
|
(0, import_inversify6.inject)(WorkflowDocumentOptions)
|
|
@@ -3579,10 +3634,64 @@ var WorkflowOperationBaseServiceImpl = class extends import_document12.FlowOpera
|
|
|
3579
3634
|
newPosition: position
|
|
3580
3635
|
});
|
|
3581
3636
|
}
|
|
3637
|
+
fromJSON(json) {
|
|
3638
|
+
if (this.document.disposed) return;
|
|
3639
|
+
const workflowJSON = {
|
|
3640
|
+
nodes: json.nodes ?? [],
|
|
3641
|
+
edges: json.edges ?? []
|
|
3642
|
+
};
|
|
3643
|
+
const oldNodes = this.document.getAllNodes();
|
|
3644
|
+
const oldEdges = this.linesManager.getAllLines();
|
|
3645
|
+
const oldPositionMap = new Map(
|
|
3646
|
+
oldNodes.map((node) => [
|
|
3647
|
+
node.id,
|
|
3648
|
+
{
|
|
3649
|
+
x: node.transform.transform.position.x,
|
|
3650
|
+
y: node.transform.transform.position.y
|
|
3651
|
+
}
|
|
3652
|
+
])
|
|
3653
|
+
);
|
|
3654
|
+
const newNodes = [];
|
|
3655
|
+
const newEdges = [];
|
|
3656
|
+
this.document.batchAddFromJSON(workflowJSON, {
|
|
3657
|
+
onNodeCreated: (node) => newNodes.push(node),
|
|
3658
|
+
onEdgeCreated: (edge) => newEdges.push(edge)
|
|
3659
|
+
});
|
|
3660
|
+
const newEdgeIDSet = new Set(newEdges.map((edge) => edge.id));
|
|
3661
|
+
oldEdges.forEach((edge) => {
|
|
3662
|
+
if (!newEdgeIDSet.has(edge.id)) {
|
|
3663
|
+
edge.dispose();
|
|
3664
|
+
return;
|
|
3665
|
+
}
|
|
3666
|
+
});
|
|
3667
|
+
const newNodeIDSet = new Set(newNodes.map((node) => node.id));
|
|
3668
|
+
oldNodes.forEach((node) => {
|
|
3669
|
+
if (!newNodeIDSet.has(node.id)) {
|
|
3670
|
+
node.dispose();
|
|
3671
|
+
return;
|
|
3672
|
+
}
|
|
3673
|
+
const oldPosition = oldPositionMap.get(node.id);
|
|
3674
|
+
const newPosition = {
|
|
3675
|
+
x: node.transform.transform.position.x,
|
|
3676
|
+
y: node.transform.transform.position.y
|
|
3677
|
+
};
|
|
3678
|
+
if (oldPosition && (oldPosition.x !== newPosition.x || oldPosition.y !== newPosition.y)) {
|
|
3679
|
+
this.onNodePostionUpdateEmitter.fire({
|
|
3680
|
+
node,
|
|
3681
|
+
oldPosition,
|
|
3682
|
+
newPosition
|
|
3683
|
+
});
|
|
3684
|
+
}
|
|
3685
|
+
});
|
|
3686
|
+
this.document.fireRender();
|
|
3687
|
+
}
|
|
3582
3688
|
};
|
|
3583
3689
|
__decorateClass([
|
|
3584
3690
|
(0, import_inversify8.inject)(WorkflowDocument)
|
|
3585
3691
|
], WorkflowOperationBaseServiceImpl.prototype, "document", 2);
|
|
3692
|
+
__decorateClass([
|
|
3693
|
+
(0, import_inversify8.inject)(WorkflowLinesManager)
|
|
3694
|
+
], WorkflowOperationBaseServiceImpl.prototype, "linesManager", 2);
|
|
3586
3695
|
|
|
3587
3696
|
// src/hooks/use-playground-readonly-state.ts
|
|
3588
3697
|
var import_react = require("react");
|
|
@@ -3680,8 +3789,8 @@ function useNodeRender(nodeFromProps) {
|
|
|
3680
3789
|
}, []);
|
|
3681
3790
|
const getExtInfo = (0, import_react2.useCallback)(() => node.getExtInfo(), [node]);
|
|
3682
3791
|
const updateExtInfo = (0, import_react2.useCallback)(
|
|
3683
|
-
(data) => {
|
|
3684
|
-
node.updateExtInfo(data);
|
|
3792
|
+
(data, fullUpdate) => {
|
|
3793
|
+
node.updateExtInfo(data, fullUpdate);
|
|
3685
3794
|
},
|
|
3686
3795
|
[node]
|
|
3687
3796
|
);
|
|
@@ -3716,7 +3825,7 @@ function useNodeRender(nodeFromProps) {
|
|
|
3716
3825
|
if (form) {
|
|
3717
3826
|
form.updateFormValues(values);
|
|
3718
3827
|
} else {
|
|
3719
|
-
updateExtInfo(values);
|
|
3828
|
+
updateExtInfo(values, true);
|
|
3720
3829
|
}
|
|
3721
3830
|
},
|
|
3722
3831
|
node,
|