orcasvn-react-diagrams 0.1.67 → 0.1.72
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/cjs/index.js +637 -453
- package/dist/cjs/types/components/paper.d.ts +7 -3
- package/dist/cjs/types/mocks/diamondElement.d.ts +1 -1
- package/dist/cjs/types/mocks/editorContextTriggerRenderElements.d.ts +2 -0
- package/dist/cjs/types/mocks/rectangularFrameElement.d.ts +1 -1
- package/dist/cjs/types/models/IEditorContext.d.ts +5 -1
- package/dist/cjs/types/models/IElement.d.ts +5 -0
- package/dist/cjs/types/models/IElementLink.d.ts +1 -0
- package/dist/cjs/types/models/IElementLinkProps.d.ts +5 -2
- package/dist/cjs/types/models/IElementProps.d.ts +10 -22
- package/dist/cjs/types/models/IPort.d.ts +1 -0
- package/dist/cjs/types/models/IText.d.ts +1 -0
- package/dist/cjs/types/models/implementations/EditorContext.d.ts +5 -1
- package/dist/cjs/types/models/implementations/Element.d.ts +6 -1
- package/dist/cjs/types/models/implementations/ElementLink.d.ts +2 -1
- package/dist/cjs/types/models/implementations/Port.d.ts +2 -1
- package/dist/cjs/types/models/implementations/Text.d.ts +2 -1
- package/dist/esm/index.js +637 -453
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/components/paper.d.ts +7 -3
- package/dist/esm/types/mocks/diamondElement.d.ts +1 -1
- package/dist/esm/types/mocks/editorContextTriggerRenderElements.d.ts +2 -0
- package/dist/esm/types/mocks/rectangularFrameElement.d.ts +1 -1
- package/dist/esm/types/models/IEditorContext.d.ts +5 -1
- package/dist/esm/types/models/IElement.d.ts +5 -0
- package/dist/esm/types/models/IElementLink.d.ts +1 -0
- package/dist/esm/types/models/IElementLinkProps.d.ts +5 -2
- package/dist/esm/types/models/IElementProps.d.ts +10 -22
- package/dist/esm/types/models/IPort.d.ts +1 -0
- package/dist/esm/types/models/IText.d.ts +1 -0
- package/dist/esm/types/models/implementations/EditorContext.d.ts +5 -1
- package/dist/esm/types/models/implementations/Element.d.ts +6 -1
- package/dist/esm/types/models/implementations/ElementLink.d.ts +2 -1
- package/dist/esm/types/models/implementations/Port.d.ts +2 -1
- package/dist/esm/types/models/implementations/Text.d.ts +2 -1
- package/dist/index.d.ts +44 -27
- package/package.json +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -484,7 +484,8 @@ function generateUniqueId() {
|
|
|
484
484
|
}
|
|
485
485
|
|
|
486
486
|
var Element$2 = /** @class */ (function () {
|
|
487
|
-
function Element(id, x, y, width, height, selectable, cssClass, renderShape, texts, ports, portMovealeAreas, portSlideRailSVGClassName, portDirection, parentElement, textsPlaceHolderClassName, textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition) {
|
|
487
|
+
function Element(id, x, y, width, height, selectable, removable, cssClass, renderShape, texts, ports, portMovealeAreas, portSlideRailSVGClassName, portDirection, parentElement, textsPlaceHolderClassName, textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition) {
|
|
488
|
+
if (removable === void 0) { removable = true; }
|
|
488
489
|
if (portMovealeAreas === void 0) { portMovealeAreas = []; }
|
|
489
490
|
this.positionAnchor = exports.PositioningAnchor.TopLeft;
|
|
490
491
|
this._childrenElements = [];
|
|
@@ -498,6 +499,7 @@ var Element$2 = /** @class */ (function () {
|
|
|
498
499
|
this._position = { x: x, y: y };
|
|
499
500
|
this._size = { width: width, height: height };
|
|
500
501
|
this.selectable = selectable === undefined ? true : selectable;
|
|
502
|
+
this.removable = removable;
|
|
501
503
|
this.cssClass = cssClass;
|
|
502
504
|
this.renderShape = renderShape;
|
|
503
505
|
this.texts = texts;
|
|
@@ -607,7 +609,7 @@ var Element$2 = /** @class */ (function () {
|
|
|
607
609
|
};
|
|
608
610
|
Element.prototype.addPort = function (newPort) {
|
|
609
611
|
if (this.ports) {
|
|
610
|
-
this.ports.
|
|
612
|
+
this.ports = __spreadArray(__spreadArray([], this.ports, true), [newPort], false);
|
|
611
613
|
}
|
|
612
614
|
else {
|
|
613
615
|
this.ports = [newPort];
|
|
@@ -629,7 +631,7 @@ var Element$2 = /** @class */ (function () {
|
|
|
629
631
|
if (index === -1) {
|
|
630
632
|
throw new Error("Port with id ".concat(id, " is not found"));
|
|
631
633
|
}
|
|
632
|
-
this.ports.
|
|
634
|
+
this.ports = this.ports.filter(function (p) { return p.id !== id; });
|
|
633
635
|
this._eventEmitter.emit('deletedPort', id);
|
|
634
636
|
};
|
|
635
637
|
Element.prototype.onDeletedPort = function (callback) {
|
|
@@ -645,6 +647,41 @@ var Element$2 = /** @class */ (function () {
|
|
|
645
647
|
return undefined;
|
|
646
648
|
return this.ports.find(function (p) { return p.id === id; });
|
|
647
649
|
};
|
|
650
|
+
Element.prototype.addText = function (newText) {
|
|
651
|
+
if (this.texts) {
|
|
652
|
+
this.texts.push(newText);
|
|
653
|
+
}
|
|
654
|
+
else {
|
|
655
|
+
this.texts = [newText];
|
|
656
|
+
}
|
|
657
|
+
this._eventEmitter.emit('addedText', newText);
|
|
658
|
+
};
|
|
659
|
+
Element.prototype.onAddedText = function (callback) {
|
|
660
|
+
var _this = this;
|
|
661
|
+
this._eventEmitter.on('addedText', callback);
|
|
662
|
+
var canceller = function () {
|
|
663
|
+
_this._eventEmitter.off('addedText', callback);
|
|
664
|
+
};
|
|
665
|
+
return canceller;
|
|
666
|
+
};
|
|
667
|
+
Element.prototype.deleteText = function (id) {
|
|
668
|
+
if (!this.texts)
|
|
669
|
+
return;
|
|
670
|
+
var index = this.texts.findIndex(function (t) { return t.id === id; });
|
|
671
|
+
if (index === -1) {
|
|
672
|
+
throw new Error("Text with id ".concat(id, " is not found"));
|
|
673
|
+
}
|
|
674
|
+
this.texts.splice(index, 1);
|
|
675
|
+
this._eventEmitter.emit('deletedText', id);
|
|
676
|
+
};
|
|
677
|
+
Element.prototype.onDeletedText = function (callback) {
|
|
678
|
+
var _this = this;
|
|
679
|
+
this._eventEmitter.on('deletedText', callback);
|
|
680
|
+
var canceller = function () {
|
|
681
|
+
_this._eventEmitter.off('deletedText', callback);
|
|
682
|
+
};
|
|
683
|
+
return canceller;
|
|
684
|
+
};
|
|
648
685
|
return Element;
|
|
649
686
|
}());
|
|
650
687
|
|
|
@@ -697,7 +734,8 @@ var CustomShape = React.forwardRef(function (props, ref) {
|
|
|
697
734
|
});
|
|
698
735
|
|
|
699
736
|
var Port$1 = /** @class */ (function () {
|
|
700
|
-
function Port(id, x, y, label, shapeRenderer, width, height) {
|
|
737
|
+
function Port(id, x, y, label, shapeRenderer, width, height, removable) {
|
|
738
|
+
if (removable === void 0) { removable = true; }
|
|
701
739
|
var _this = this;
|
|
702
740
|
//internal properties
|
|
703
741
|
this._eventEmitter = new EventEmitter();
|
|
@@ -720,6 +758,7 @@ var Port$1 = /** @class */ (function () {
|
|
|
720
758
|
props.children));
|
|
721
759
|
});
|
|
722
760
|
}
|
|
761
|
+
this.removable = removable;
|
|
723
762
|
}
|
|
724
763
|
Object.defineProperty(Port.prototype, "id", {
|
|
725
764
|
get: function () {
|
|
@@ -733,7 +772,8 @@ var Port$1 = /** @class */ (function () {
|
|
|
733
772
|
|
|
734
773
|
var ElementLink$1 = /** @class */ (function () {
|
|
735
774
|
// constructor(id: string | null, sourceElement: IElement, sourcePort: IPort, targetElement: IElement, targetPort: IPort, tempTargetPosition: IPosition, points?: IPosition[]);
|
|
736
|
-
function ElementLink(id, sourceElement, sourcePort, targetElement, targetPort, tempTargetPosition, points, path, markerStart, markerEnd, markerDistanceFromPort, markerSize, label, sourceLabel, targetLabel) {
|
|
775
|
+
function ElementLink(id, sourceElement, sourcePort, targetElement, targetPort, tempTargetPosition, points, path, markerStart, markerEnd, markerDistanceFromPort, markerSize, label, sourceLabel, targetLabel, removable) {
|
|
776
|
+
if (removable === void 0) { removable = true; }
|
|
737
777
|
this.id = id || generateUniqueId();
|
|
738
778
|
this.sourceElement = sourceElement;
|
|
739
779
|
this.sourcePort = sourcePort;
|
|
@@ -766,12 +806,14 @@ var ElementLink$1 = /** @class */ (function () {
|
|
|
766
806
|
this.sourceLabel = sourceLabel;
|
|
767
807
|
if (targetLabel)
|
|
768
808
|
this.targetLabel = targetLabel;
|
|
809
|
+
this.removable = removable;
|
|
769
810
|
}
|
|
770
811
|
return ElementLink;
|
|
771
812
|
}());
|
|
772
813
|
|
|
773
814
|
var Text$2 = /** @class */ (function () {
|
|
774
|
-
function Text(id, content, width, height, editable, selectable, x, y, align, fontSize, border, style) {
|
|
815
|
+
function Text(id, content, width, height, editable, selectable, removable, x, y, align, fontSize, border, style) {
|
|
816
|
+
if (removable === void 0) { removable = true; }
|
|
775
817
|
this._id = id || generateUniqueId();
|
|
776
818
|
this.content = content;
|
|
777
819
|
this.align = align;
|
|
@@ -781,6 +823,7 @@ var Text$2 = /** @class */ (function () {
|
|
|
781
823
|
this.style = style;
|
|
782
824
|
this.editable = editable;
|
|
783
825
|
this.selectable = selectable;
|
|
826
|
+
this.removable = removable;
|
|
784
827
|
if (selectable === undefined) {
|
|
785
828
|
this.selectable = true; // Default to true if not specified
|
|
786
829
|
}
|
|
@@ -799,6 +842,7 @@ var Text$2 = /** @class */ (function () {
|
|
|
799
842
|
}());
|
|
800
843
|
|
|
801
844
|
var EVENT_MANUALLY_RENDER_ELEMENT = 'manuallyRenderElement';
|
|
845
|
+
var EVENT_MANUALLY_RENDER_ELEMENTS = 'manuallyRenderElements';
|
|
802
846
|
var EVENT_MANUALLY_RENDER_PORT = 'manuallyRenderPort';
|
|
803
847
|
var EVENT_EDITOR_CONTEXT_UPDATED = 'editorContextUpdated';
|
|
804
848
|
var EVENT_PAPER_CLICKED = 'paperClicked';
|
|
@@ -1088,6 +1132,13 @@ var EditorContext = /** @class */ (function () {
|
|
|
1088
1132
|
EditorContext.prototype.manuallyTriggerRenderElementHandler = function (callback) {
|
|
1089
1133
|
return this.addEventListener(EVENT_MANUALLY_RENDER_ELEMENT, callback);
|
|
1090
1134
|
};
|
|
1135
|
+
EditorContext.prototype.triggerRenderElements = function () {
|
|
1136
|
+
this._eventEmitter.emit(EVENT_MANUALLY_RENDER_ELEMENTS);
|
|
1137
|
+
};
|
|
1138
|
+
/** @internal */
|
|
1139
|
+
EditorContext.prototype.manuallyTriggerRenderElementsHandler = function (callback) {
|
|
1140
|
+
return this.addEventListener(EVENT_MANUALLY_RENDER_ELEMENTS, callback);
|
|
1141
|
+
};
|
|
1091
1142
|
EditorContext.prototype.triggerRenderPort = function (portId, elementId) {
|
|
1092
1143
|
this._eventEmitter.emit(EVENT_MANUALLY_RENDER_PORT, portId, elementId);
|
|
1093
1144
|
};
|
|
@@ -7446,10 +7497,10 @@ var getAbsolutePosition = function (element) {
|
|
|
7446
7497
|
x: element.position.x,
|
|
7447
7498
|
y: element.position.y,
|
|
7448
7499
|
};
|
|
7449
|
-
if (element.positionAnchor ===
|
|
7450
|
-
|
|
7451
|
-
|
|
7452
|
-
}
|
|
7500
|
+
// if (element.positionAnchor === PositioningAnchor.Center) {
|
|
7501
|
+
// elemenetPositionWithTopLeftAnchor.x -= element.size.width / 2;
|
|
7502
|
+
// elemenetPositionWithTopLeftAnchor.y -= element.size.height / 2;
|
|
7503
|
+
// }
|
|
7453
7504
|
if (!parentElement) {
|
|
7454
7505
|
return __assign({}, elemenetPositionWithTopLeftAnchor);
|
|
7455
7506
|
}
|
|
@@ -7479,10 +7530,10 @@ var transformAbsPositionToElementRelativePosition = function (position, element)
|
|
|
7479
7530
|
x: position.x - absoluteParentElement.x,
|
|
7480
7531
|
y: position.y - absoluteParentElement.y,
|
|
7481
7532
|
};
|
|
7482
|
-
if (element.positionAnchor ===
|
|
7483
|
-
|
|
7484
|
-
|
|
7485
|
-
}
|
|
7533
|
+
// if (element.positionAnchor === PositioningAnchor.Center) {
|
|
7534
|
+
// result.x += element.size.width / 2;
|
|
7535
|
+
// result.y += element.size.height / 2;
|
|
7536
|
+
// }
|
|
7486
7537
|
return result;
|
|
7487
7538
|
};
|
|
7488
7539
|
var transformAbsPositionToRelativePositionInsideElement = function (absolutePosition, parentAbsolutePosition) {
|
|
@@ -7891,7 +7942,10 @@ var SelectionFrame = function (props) {
|
|
|
7891
7942
|
}
|
|
7892
7943
|
return (React.createElement(React.Fragment, null,
|
|
7893
7944
|
PropDragDropHandlerElement && React.createElement(PropDragDropHandlerElement, { dragging: draggingRect, onMouseDown: addRectHandleMouseDown }),
|
|
7894
|
-
React.createElement("rect", { vectorEffect: "non-scaling-stroke", x: leftX, y: topY, width: width, height: height, fill: 'none', stroke: 'blue', strokeWidth: propStrokeWidth || 5, cursor: draggingRect ? 'grabbing' : 'grab', onMouseDown: addRectHandleMouseDown, onMouseUp:
|
|
7945
|
+
React.createElement("rect", { vectorEffect: "non-scaling-stroke", x: leftX, y: topY, width: width, height: height, fill: 'none', stroke: 'blue', strokeWidth: propStrokeWidth || 5, cursor: draggingRect ? 'grabbing' : 'grab', onMouseDown: addRectHandleMouseDown, onMouseUp: function (ev) {
|
|
7946
|
+
propOnMouseUp === null || propOnMouseUp === void 0 ? void 0 : propOnMouseUp(ev);
|
|
7947
|
+
setDraggingRect(false);
|
|
7948
|
+
} }),
|
|
7895
7949
|
propResizability.enabled ?
|
|
7896
7950
|
(React.createElement("circle", { cursor: 'se-resize', cx: leftX + width, cy: topY + height, r: r, fill: 'blue', stroke: 'blue', onMouseDown: circleHandleMouseDown })) : null));
|
|
7897
7951
|
};
|
|
@@ -7899,10 +7953,7 @@ var SelectionFrame = function (props) {
|
|
|
7899
7953
|
var useSelectionFrame = function (props) {
|
|
7900
7954
|
React.useEffect(function () {
|
|
7901
7955
|
//log selection frame rendering
|
|
7902
|
-
if (props.targetSVGElement) {
|
|
7903
|
-
console.debug('Rendering SelectionFrame for targetSVGElement:', props.targetSVGElement);
|
|
7904
|
-
}
|
|
7905
|
-
else {
|
|
7956
|
+
if (!props.targetSVGElement) {
|
|
7906
7957
|
console.warn('No targetSVGElement provided for SelectionFrame.');
|
|
7907
7958
|
}
|
|
7908
7959
|
if (props.targetSVGElement && props.container) {
|
|
@@ -8464,7 +8515,9 @@ function CloseIcon(_a) {
|
|
|
8464
8515
|
// const makerEnd = <path d="M0 0 L 20 10 L0 20 Z" fill="blue"></path>//<path d="M0 0 L 10 5 L0 10 Z"></path>
|
|
8465
8516
|
var IElementLink = function (_a) {
|
|
8466
8517
|
var _b, _c;
|
|
8467
|
-
var id = _a.id, path = _a.path, stroke = _a.stroke, _d = _a.strokeWidth, strokeWidth = _d === void 0 ? 4 : _d, pointsProp = _a.points,
|
|
8518
|
+
var id = _a.id, path = _a.path, stroke = _a.stroke, _d = _a.strokeWidth, strokeWidth = _d === void 0 ? 4 : _d, pointsProp = _a.points, sourcePositionX = _a.sourcePositionX, sourcePositionY = _a.sourcePositionY, targetPositionX = _a.targetPositionX, targetPositionY = _a.targetPositionY, removable = _a.removable,
|
|
8519
|
+
//TODO: get rid of this
|
|
8520
|
+
onPathChanged = _a.onPathChanged, onClickDelete = _a.onClickDelete, onSelected = _a.onSelected, onDeselected = _a.onDeselected, onPointsChanged = _a.onPointsChanged, container = _a.container, markerStart = _a.markerStart, markerEnd = _a.markerEnd, _e = _a.markerDistanceFromPort, markerDistanceFromPort = _e === void 0 ? LINK_MARKER_DISTANCE_FROM_PORT : _e, _f = _a.markerSize, markerSize = _f === void 0 ? LINK_MARKER_SIZE : _f, label = _a.label, sourceLabel = _a.sourceLabel, targetLabel = _a.targetLabel, onLabelMoved = _a.onLabelMoved, onLabelResized = _a.onLabelResized, onLabelContentChanged = _a.onLabelContentChanged;
|
|
8468
8521
|
var _g = React.useState(path), pathStr = _g[0], setPathStr = _g[1];
|
|
8469
8522
|
var _h = React.useState(pointsProp !== null && pointsProp !== void 0 ? pointsProp : []), points = _h[0], setPoints = _h[1];
|
|
8470
8523
|
var _j = React.useState(false), isDragging = _j[0], setIsDragging = _j[1];
|
|
@@ -8481,6 +8534,7 @@ var IElementLink = function (_a) {
|
|
|
8481
8534
|
var isFirstRender = React.useRef(true);
|
|
8482
8535
|
var onPointsChangedRef = React.useRef();
|
|
8483
8536
|
var draggingPointIndexRef = React.useRef(); // Ref to store the index of the point being dragged. No need to store it in state, as it is only used during the drag operation.
|
|
8537
|
+
var timeFromMouseDownToUpRef = React.useRef(0);
|
|
8484
8538
|
var angleMarkerStart = '0';
|
|
8485
8539
|
var angleMarkerEnd = '0';
|
|
8486
8540
|
var markerStartPosition;
|
|
@@ -8503,7 +8557,7 @@ var IElementLink = function (_a) {
|
|
|
8503
8557
|
return function () {
|
|
8504
8558
|
paperClickListener.off();
|
|
8505
8559
|
};
|
|
8506
|
-
}, []);
|
|
8560
|
+
}, [onPaperClicked, onDeselected]);
|
|
8507
8561
|
// Reset selected label when an element is selected
|
|
8508
8562
|
React.useEffect(function () {
|
|
8509
8563
|
var elementSelectedListener = onElementSelected(function () {
|
|
@@ -8516,34 +8570,32 @@ var IElementLink = function (_a) {
|
|
|
8516
8570
|
return function () {
|
|
8517
8571
|
elementSelectedListener.off();
|
|
8518
8572
|
};
|
|
8519
|
-
}, []);
|
|
8573
|
+
}, [onElementSelected, onDeselected]);
|
|
8520
8574
|
// Store onPointsChanged in a ref to avoid unnecessary re-renders
|
|
8521
8575
|
React.useEffect(function () {
|
|
8522
8576
|
onPointsChangedRef.current = onPointsChanged;
|
|
8523
8577
|
}, [onPointsChanged]);
|
|
8524
8578
|
// Notify parent component when points change
|
|
8525
8579
|
React.useEffect(function () {
|
|
8526
|
-
var _a;
|
|
8527
8580
|
if (isFirstRender.current) {
|
|
8528
8581
|
isFirstRender.current = false;
|
|
8529
8582
|
return;
|
|
8530
8583
|
}
|
|
8531
|
-
|
|
8532
|
-
}, [JSON.stringify(points)]);
|
|
8584
|
+
}, []);
|
|
8533
8585
|
React.useLayoutEffect(function () {
|
|
8534
|
-
var pointsList = __spreadArray(__spreadArray([
|
|
8586
|
+
var pointsList = __spreadArray(__spreadArray([{ x: sourcePositionX, y: sourcePositionY }], points, true), [{ x: targetPositionX, y: targetPositionY }], false);
|
|
8535
8587
|
var _pathStr = createSmoothPathString(pointsList, undefined, false);
|
|
8536
8588
|
setPathStr(_pathStr);
|
|
8537
|
-
}, [
|
|
8589
|
+
}, [sourcePositionX, sourcePositionY, points, targetPositionX, targetPositionY]);
|
|
8538
8590
|
React.useEffect(function () {
|
|
8539
8591
|
if (!pathStr)
|
|
8540
8592
|
return;
|
|
8541
8593
|
onPathChanged === null || onPathChanged === void 0 ? void 0 : onPathChanged(pathStr, id);
|
|
8542
|
-
}, [pathStr, id]);
|
|
8543
|
-
var addMovingPoint = function (mouseDownedOnPaperPos, points) {
|
|
8594
|
+
}, [pathStr, id, onPathChanged]);
|
|
8595
|
+
var addMovingPoint = React.useCallback(function (mouseDownedOnPaperPos, points) {
|
|
8544
8596
|
//Position of the new point on the path
|
|
8545
8597
|
var paperPosition = mouseDownedOnPaperPos;
|
|
8546
|
-
var newPoints = addPointToList(paperPosition, __spreadArray(__spreadArray([
|
|
8598
|
+
var newPoints = addPointToList(paperPosition, __spreadArray(__spreadArray([{ x: sourcePositionX, y: sourcePositionY }], points, true), [{ x: targetPositionX, y: targetPositionY }], false), pathRef.current);
|
|
8547
8599
|
var pointsWithoutStartEndPoint = newPoints.slice(1, newPoints.length - 1);
|
|
8548
8600
|
var addedIndex = pointsWithoutStartEndPoint.findIndex(function (p) { return p.x === paperPosition.x && p.y === paperPosition.y; });
|
|
8549
8601
|
var leftPointIndex = addedIndex - 1;
|
|
@@ -8589,12 +8641,13 @@ var IElementLink = function (_a) {
|
|
|
8589
8641
|
draggingPointIndex: _draggingPointIndex,
|
|
8590
8642
|
points: pointsWithoutStartEndPoint,
|
|
8591
8643
|
};
|
|
8592
|
-
};
|
|
8644
|
+
}, [sourcePositionX, sourcePositionY, targetPositionX, targetPositionY]);
|
|
8593
8645
|
React.useEffect(function () {
|
|
8594
8646
|
//handle when creating and moving point
|
|
8595
8647
|
var handleMouseMove = function (ev) {
|
|
8596
8648
|
var mouseEvent = ev;
|
|
8597
8649
|
if (isDragging && container) {
|
|
8650
|
+
console.info('Mouse move on link');
|
|
8598
8651
|
var paperPosition_1 = windowsPositionToPaperPosition({
|
|
8599
8652
|
x: mouseEvent.clientX,
|
|
8600
8653
|
y: mouseEvent.clientY
|
|
@@ -8614,8 +8667,13 @@ var IElementLink = function (_a) {
|
|
|
8614
8667
|
}
|
|
8615
8668
|
};
|
|
8616
8669
|
var mouseUp = function () {
|
|
8670
|
+
console.info('Mouse up on link');
|
|
8617
8671
|
draggingPointIndexRef.current = undefined;
|
|
8618
8672
|
setIsDragging(false);
|
|
8673
|
+
//trigger onPointsChanged
|
|
8674
|
+
if (onPointsChangedRef.current) {
|
|
8675
|
+
onPointsChangedRef.current(points, id);
|
|
8676
|
+
}
|
|
8619
8677
|
};
|
|
8620
8678
|
container === null || container === void 0 ? void 0 : container.addEventListener('mousemove', handleMouseMove);
|
|
8621
8679
|
container === null || container === void 0 ? void 0 : container.addEventListener('mouseup', mouseUp);
|
|
@@ -8623,9 +8681,14 @@ var IElementLink = function (_a) {
|
|
|
8623
8681
|
container === null || container === void 0 ? void 0 : container.removeEventListener('mousemove', handleMouseMove);
|
|
8624
8682
|
container === null || container === void 0 ? void 0 : container.removeEventListener('mouseup', mouseUp);
|
|
8625
8683
|
};
|
|
8626
|
-
}, [container, isDragging, zoom, points]);
|
|
8684
|
+
}, [container, isDragging, zoom, points, id, addMovingPoint]);
|
|
8685
|
+
React.useEffect(function () {
|
|
8686
|
+
console.info("Container changed in link", id);
|
|
8687
|
+
}, [addMovingPoint]);
|
|
8627
8688
|
var handleMouseDownOnPath = function (ev) {
|
|
8628
8689
|
ev.preventDefault();
|
|
8690
|
+
console.info('Mouse down on link');
|
|
8691
|
+
timeFromMouseDownToUpRef.current = Date.now();
|
|
8629
8692
|
//add point if click on path
|
|
8630
8693
|
setIsDragging(true);
|
|
8631
8694
|
};
|
|
@@ -8639,11 +8702,11 @@ var IElementLink = function (_a) {
|
|
|
8639
8702
|
onLabelMoved(newPosition.x, newPosition.y, 'middle');
|
|
8640
8703
|
break;
|
|
8641
8704
|
case sourceLabelRef.current:
|
|
8642
|
-
newPosition = transformAbsPositionToRelativePositionInsideElement({ x: newX, y: newY },
|
|
8705
|
+
newPosition = transformAbsPositionToRelativePositionInsideElement({ x: newX, y: newY }, { x: sourcePositionX, y: sourcePositionY });
|
|
8643
8706
|
onLabelMoved(newPosition.x, newPosition.y, 'source');
|
|
8644
8707
|
break;
|
|
8645
8708
|
case targetLabelRef.current:
|
|
8646
|
-
newPosition = transformAbsPositionToRelativePositionInsideElement({ x: newX, y: newY },
|
|
8709
|
+
newPosition = transformAbsPositionToRelativePositionInsideElement({ x: newX, y: newY }, { x: targetPositionX, y: targetPositionY });
|
|
8647
8710
|
onLabelMoved(newPosition.x, newPosition.y, 'target');
|
|
8648
8711
|
break;
|
|
8649
8712
|
}
|
|
@@ -8675,6 +8738,11 @@ var IElementLink = function (_a) {
|
|
|
8675
8738
|
}
|
|
8676
8739
|
};
|
|
8677
8740
|
var handleClickPath = function () {
|
|
8741
|
+
if (Date.now() - timeFromMouseDownToUpRef.current > 400) {
|
|
8742
|
+
//Prevent click event when dragging
|
|
8743
|
+
return;
|
|
8744
|
+
}
|
|
8745
|
+
console.info('Click link', id);
|
|
8678
8746
|
setIsSelectedLink(true);
|
|
8679
8747
|
onSelected === null || onSelected === void 0 ? void 0 : onSelected();
|
|
8680
8748
|
};
|
|
@@ -8717,22 +8785,22 @@ var IElementLink = function (_a) {
|
|
|
8717
8785
|
if ((_b = pathRef.current) === null || _b === void 0 ? void 0 : _b.getAttribute('d')) {
|
|
8718
8786
|
if (markerStart) {
|
|
8719
8787
|
markerStartPosition = pathRef.current.getPointAtLength(markerDistanceFromPort);
|
|
8720
|
-
angleMarkerStart = calculateAngleWithOx(
|
|
8788
|
+
angleMarkerStart = calculateAngleWithOx({ x: sourcePositionX, y: sourcePositionY }, markerStartPosition);
|
|
8721
8789
|
}
|
|
8722
8790
|
if (markerEnd) {
|
|
8723
8791
|
markerEndPosition = pathRef.current.getPointAtLength(pathRef.current.getTotalLength() - markerDistanceFromPort);
|
|
8724
|
-
angleMarkerEnd = calculateAngleWithOx(markerEndPosition,
|
|
8792
|
+
angleMarkerEnd = calculateAngleWithOx(markerEndPosition, { x: targetPositionX, y: targetPositionY });
|
|
8725
8793
|
}
|
|
8726
8794
|
centerPathPosition = (_c = pathRef.current) === null || _c === void 0 ? void 0 : _c.getPointAtLength(pathRef.current.getTotalLength() / 2);
|
|
8727
8795
|
}
|
|
8728
8796
|
return (React.createElement("g", null,
|
|
8729
8797
|
React.createElement("path", { ref: pathRef, d: pathStr, className: isSelectedLink ? CSS_CLASS_LINK_SELECTED : '', fill: "none", stroke: stroke || LINK_DEFAULT_COLOR, strokeWidth: strokeWidth }),
|
|
8730
8798
|
React.createElement("path", { d: pathStr, fill: "none", stroke: 'transparent', strokeWidth: LINK_CLICKABLE_STROKE_WIDTH, onClick: handleClickPath, onMouseDown: handleMouseDownOnPath }),
|
|
8731
|
-
isSelectedLink && centerPathPosition && React.createElement("svg", { x: centerPathPosition.x - 10, y: centerPathPosition.y - 10 },
|
|
8799
|
+
removable !== false && isSelectedLink && centerPathPosition && React.createElement("svg", { x: centerPathPosition.x - 10, y: centerPathPosition.y - 10 },
|
|
8732
8800
|
React.createElement(CloseIcon, { onClick: onClickDelete })),
|
|
8733
8801
|
label && renderLabel(label, 'middle', centerPathPosition),
|
|
8734
|
-
sourceLabel && renderLabel(sourceLabel, 'source',
|
|
8735
|
-
targetLabel && renderLabel(targetLabel, 'target',
|
|
8802
|
+
sourceLabel && renderLabel(sourceLabel, 'source', { x: sourcePositionX, y: sourcePositionY }),
|
|
8803
|
+
targetLabel && renderLabel(targetLabel, 'target', { x: targetPositionX, y: targetPositionY }),
|
|
8736
8804
|
markerStartPosition && React.createElement("g", { transform: "rotate(".concat(angleMarkerStart, ")"), style: { transformOrigin: 'center', transformBox: 'content-box' } },
|
|
8737
8805
|
React.createElement("svg", { x: markerStartPosition.x - markerSize / 2, y: markerStartPosition.y - markerSize / 2, width: markerSize, height: markerSize }, markerStart)),
|
|
8738
8806
|
markerEndPosition && React.createElement("g", { transform: "rotate(".concat(angleMarkerEnd, ")"), style: { transformOrigin: 'center', transformBox: 'content-box' } },
|
|
@@ -8789,58 +8857,41 @@ var ElementWrapper = React.forwardRef(function (_a, ref) {
|
|
|
8789
8857
|
});
|
|
8790
8858
|
|
|
8791
8859
|
var Element = React.forwardRef(function (props, forwardedRef) {
|
|
8792
|
-
var id = props.id, x = props.x, y = props.y, width = props.width, height = props.height, cssClass = props.cssClass, portPlaceholderShape = props.portPlaceholderShape, children = props.children, container = props.container, parentAbsolutePosition = props.parentAbsolutePosition, textsPlaceHolderFlexStyle = props.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition = props.textsPlaceHolderFlexboxPosition, textsPlaceHolderClassName = props.textsPlaceHolderClassName, texts = props.texts, portSlideRailSVGClassName = props.portSlideRailSVGClassName, portMoveableAreas = props.portMoveableAreas, portDirection = props.portDirection, defaultPortSize = props.defaultPortSize, onClick = props.onClick, onContextMenu = props.onContextMenu, renderShape = props.renderShape; props.onMoved; var onPortMoved = props.onPortMoved; props.onResized; var onPortMouseDown = props.onPortMouseDown, onPortMouseUp = props.onPortMouseUp, onMouseMove = props.onMouseMove, onMouseLeave = props.onMouseLeave, onMouseUp = props.onMouseUp, onMouseDown = props.onMouseDown, onMouseUpAtLinkedPortPlaceholder = props.onMouseUpAtLinkedPortPlaceholder, onTextUpdated = props.onTextUpdated, onPortContextMenu = props.onPortContextMenu, onPortsChanged = props.onPortsChanged, onManuallyTriggerRenderPort = props.onManuallyTriggerRenderPort;
|
|
8793
|
-
var propPorts = props.ports;
|
|
8794
|
-
var _a = React.useState(), selectedPort = _a[0], setSelectedPort = _a[1];
|
|
8795
|
-
var _b = React.useState(), hoveredPort = _b[0], setHoveredPort = _b[1];
|
|
8796
|
-
var _c = React.useState((propPorts === null || propPorts === void 0 ? void 0 : propPorts.map(function (p) {
|
|
8797
|
-
var portState = __assign(__assign({}, p), { ref: React.createRef() });
|
|
8798
|
-
return portState;
|
|
8799
|
-
})) || []), ports = _c[0], setPorts = _c[1];
|
|
8800
|
-
var _d = React.useState(false), someElementLinkStarted = _d[0], setSomeElementLinkStarted = _d[1];
|
|
8801
|
-
var _e = React.useState(), potentialPortPosition = _e[0], setPotentialPortPosition = _e[1];
|
|
8802
8860
|
var _paperEventEmitterContext = React.useContext(paperEventEmitterContext);
|
|
8861
|
+
// const elementObj = props.element;
|
|
8862
|
+
var beingSelected = props.beingSelected, portPlaceholderShape = props.portPlaceholderShape, children = props.children, container = props.container, onMouseUp = props.onMouseUp, onMouseDown = props.onMouseDown, onMouseLeave = props.onMouseLeave, onMouseMove = props.onMouseMove, onMoving = props.onMoving, onMoved = props.onMoved, onResized = props.onResized, onPortMoved = props.onPortMoved, onPortMouseDown = props.onPortMouseDown, onPortMouseUp = props.onPortMouseUp, onClick = props.onClick, onContextMenu = props.onContextMenu, onPortContextMenu = props.onPortContextMenu, onMouseUpAtLinkedPortPlaceholder = props.onMouseUpAtLinkedPortPlaceholder, onManuallyTriggerRenderPort = props.onManuallyTriggerRenderPort, draggingByDefault = props.draggingByDefault, parentDOM = props.parentDOM;
|
|
8863
|
+
var _a = props.element, id = _a.id, cssClass = _a.cssClass, textsPlaceHolderClassName = _a.textsPlaceHolderClassName, portSlideRailSVGClassName = _a.portSlideRailSVGClassName, portMoveableAreas = _a.portMoveableAreas, portDirection = _a.portDirection, defaultPortSize = _a.defaultPortSize, textsPlaceHolderFlexStyle = _a.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition = _a.textsPlaceHolderFlexboxPosition, resizability = _a.resizability, renderShape = _a.renderShape;
|
|
8864
|
+
var propPorts = props.element.ports;
|
|
8865
|
+
//state for position
|
|
8866
|
+
var _b = React.useState(__assign({}, props.element.position)), position = _b[0], setPosition = _b[1];
|
|
8867
|
+
//state for size
|
|
8868
|
+
var _c = React.useState(__assign({}, props.element.size)), size = _c[0], setSize = _c[1];
|
|
8869
|
+
var _d = React.useState(), selectedPort = _d[0], setSelectedPort = _d[1];
|
|
8870
|
+
var _e = React.useState(), hoveredPort = _e[0], setHoveredPort = _e[1];
|
|
8871
|
+
var _f = React.useState([]), ports = _f[0], setPorts = _f[1];
|
|
8872
|
+
var _g = React.useState(props.element.texts || []), texts = _g[0], setTexts = _g[1];
|
|
8873
|
+
var _h = React.useState(false), someElementLinkStarted = _h[0], setSomeElementLinkStarted = _h[1];
|
|
8874
|
+
var _j = React.useState(), potentialPortPosition = _j[0], setPotentialPortPosition = _j[1];
|
|
8875
|
+
//Zoom
|
|
8803
8876
|
var zoom = useZoomContext().zoom;
|
|
8877
|
+
var zoomRef = React.useRef(zoom);
|
|
8804
8878
|
var elementRef = React.useRef(null);
|
|
8805
8879
|
React.useImperativeHandle(forwardedRef, function () { return elementRef.current; });
|
|
8806
8880
|
var elementLinkStarted = React.useRef();
|
|
8807
|
-
var portsRef = React.useRef(
|
|
8808
|
-
var getElementAbsPosition = React.useCallback(function () {
|
|
8809
|
-
var position = {
|
|
8810
|
-
x: x,
|
|
8811
|
-
y: y,
|
|
8812
|
-
};
|
|
8813
|
-
if (parentAbsolutePosition) {
|
|
8814
|
-
position.x += parentAbsolutePosition.x;
|
|
8815
|
-
position.y += parentAbsolutePosition.y;
|
|
8816
|
-
}
|
|
8817
|
-
return position;
|
|
8818
|
-
}, [x, y, parentAbsolutePosition]);
|
|
8819
|
-
var elementAbsPosition = React.useMemo(function () { return getElementAbsPosition(); }, [getElementAbsPosition]);
|
|
8820
|
-
//Listen to manually trigger render event
|
|
8821
|
-
React.useEffect(function () {
|
|
8822
|
-
var off = onManuallyTriggerRenderPort === null || onManuallyTriggerRenderPort === void 0 ? void 0 : onManuallyTriggerRenderPort(function (portId, elementId) {
|
|
8823
|
-
if (elementId !== id)
|
|
8824
|
-
return;
|
|
8825
|
-
logger.info('onManuallyTriggerRenderPort', id);
|
|
8826
|
-
setPorts(function (prev) { return __spreadArray([], prev, true); });
|
|
8827
|
-
});
|
|
8828
|
-
return function () {
|
|
8829
|
-
off === null || off === void 0 ? void 0 : off();
|
|
8830
|
-
};
|
|
8831
|
-
}, [id, onManuallyTriggerRenderPort]);
|
|
8881
|
+
var portsRef = React.useRef([]);
|
|
8832
8882
|
//Normalize port position
|
|
8833
8883
|
var normalizePortPosition = React.useCallback(function (tempNewPosition) {
|
|
8834
|
-
var newPosition = correctPortPositionInElement(tempNewPosition, width, height, portMoveableAreas, portSlideRailSVGClassName, elementRef.current || undefined);
|
|
8884
|
+
var newPosition = correctPortPositionInElement(tempNewPosition, size.width, size.height, portMoveableAreas, portSlideRailSVGClassName, elementRef.current || undefined);
|
|
8835
8885
|
return newPosition || tempNewPosition;
|
|
8836
|
-
}, [width, height, portMoveableAreas, portSlideRailSVGClassName]);
|
|
8837
|
-
//
|
|
8838
|
-
React.
|
|
8886
|
+
}, [size.width, size.height, portMoveableAreas, portSlideRailSVGClassName]);
|
|
8887
|
+
//set port ref when ports state is changed
|
|
8888
|
+
React.useLayoutEffect(function () {
|
|
8889
|
+
portsRef.current = ports;
|
|
8890
|
+
}, [ports]);
|
|
8891
|
+
//Handle ports state when propPorts is changed
|
|
8892
|
+
var handlePortsState = React.useCallback(function (newPorts) {
|
|
8839
8893
|
setPorts(function (prev) {
|
|
8840
|
-
var
|
|
8841
|
-
if (propPorts === undefined)
|
|
8842
|
-
return [];
|
|
8843
|
-
var newState = (_a = propPorts.map(function (p, index) {
|
|
8894
|
+
var newState = newPorts === null || newPorts === void 0 ? void 0 : newPorts.map(function (p, index) {
|
|
8844
8895
|
var prevPortState = prev.find(function (_p) { return _p.id === p.id; });
|
|
8845
8896
|
var newPortState;
|
|
8846
8897
|
//If port is existed, keep the ref of the port
|
|
@@ -8853,45 +8904,85 @@ var Element = React.forwardRef(function (props, forwardedRef) {
|
|
|
8853
8904
|
//Handle the case new port is created and the ref of the port is not defined
|
|
8854
8905
|
if (!newPortState.ref) {
|
|
8855
8906
|
var newPosition = normalizePortPosition(newPortState.position);
|
|
8856
|
-
|
|
8857
|
-
_paperEventEmitterContext.emitPortMoved(p, id, newPortState.position, newPosition)
|
|
8907
|
+
// onPortMoved?.(p, id, newPortState.position, newPosition)
|
|
8908
|
+
// _paperEventEmitterContext.emitPortMoved(p, id, newPortState.position, newPosition)
|
|
8858
8909
|
newPortState.position = newPosition;
|
|
8859
8910
|
newPortState.ref = React.createRef();
|
|
8860
8911
|
}
|
|
8861
8912
|
return newPortState;
|
|
8862
|
-
})
|
|
8913
|
+
});
|
|
8863
8914
|
return newState;
|
|
8864
8915
|
});
|
|
8865
|
-
}, [
|
|
8866
|
-
|
|
8867
|
-
|
|
8868
|
-
|
|
8869
|
-
|
|
8870
|
-
|
|
8916
|
+
}, [normalizePortPosition]);
|
|
8917
|
+
var getParentAbsolutePosition = React.useCallback(function () {
|
|
8918
|
+
return props.element.parentElement ? getAbsolutePosition(props.element.parentElement) : undefined;
|
|
8919
|
+
}, [props.element.parentElement]);
|
|
8920
|
+
var getElementAbsPosition = React.useCallback(function () {
|
|
8921
|
+
var newPosition = {
|
|
8922
|
+
x: position.x,
|
|
8923
|
+
y: position.y,
|
|
8924
|
+
};
|
|
8925
|
+
var parentAbsolutePosition = getParentAbsolutePosition();
|
|
8926
|
+
if (parentAbsolutePosition) {
|
|
8927
|
+
newPosition.x += parentAbsolutePosition.x;
|
|
8928
|
+
newPosition.y += parentAbsolutePosition.y;
|
|
8929
|
+
}
|
|
8930
|
+
return newPosition;
|
|
8931
|
+
}, [position, getParentAbsolutePosition]);
|
|
8932
|
+
var elementAbsPosition = React.useMemo(function () { return getElementAbsPosition(); }, [getElementAbsPosition]);
|
|
8933
|
+
//update element position
|
|
8934
|
+
var updateElementPosition = React.useCallback(function (newPosition) {
|
|
8935
|
+
setPosition({ x: newPosition.x, y: newPosition.y });
|
|
8936
|
+
props.element.position = { x: newPosition.x, y: newPosition.y };
|
|
8937
|
+
}, [props.element]);
|
|
8938
|
+
//update element size
|
|
8939
|
+
var updateElementSize = React.useCallback(function (newSize) {
|
|
8940
|
+
setSize({ width: newSize.width, height: newSize.height });
|
|
8941
|
+
props.element.size = { width: newSize.width, height: newSize.height };
|
|
8942
|
+
}, [props.element]);
|
|
8943
|
+
//Listen to manually trigger render event
|
|
8871
8944
|
React.useEffect(function () {
|
|
8872
|
-
var
|
|
8873
|
-
|
|
8874
|
-
|
|
8875
|
-
|
|
8876
|
-
|
|
8877
|
-
return port;
|
|
8945
|
+
var off = onManuallyTriggerRenderPort === null || onManuallyTriggerRenderPort === void 0 ? void 0 : onManuallyTriggerRenderPort(function (portId, elementId) {
|
|
8946
|
+
if (elementId !== id)
|
|
8947
|
+
return;
|
|
8948
|
+
logger.info('onManuallyTriggerRenderPort', id);
|
|
8949
|
+
handlePortsState(portsRef.current);
|
|
8878
8950
|
});
|
|
8879
|
-
|
|
8880
|
-
|
|
8951
|
+
return function () {
|
|
8952
|
+
off === null || off === void 0 ? void 0 : off();
|
|
8953
|
+
};
|
|
8954
|
+
}, [id, onManuallyTriggerRenderPort, handlePortsState, props.element]);
|
|
8955
|
+
//Initialize ports state
|
|
8956
|
+
React.useEffect(function () {
|
|
8957
|
+
handlePortsState(propPorts || []);
|
|
8958
|
+
}, [handlePortsState, propPorts]);
|
|
8959
|
+
// const normalizePortsPosition = useCallback(() => {
|
|
8960
|
+
// const newPorts = portsRef.current.map(port => {
|
|
8961
|
+
// const newPosition = normalizePortPosition(port.position);
|
|
8962
|
+
// port.position = newPosition;
|
|
8963
|
+
// return port;
|
|
8964
|
+
// });
|
|
8965
|
+
// return newPorts;
|
|
8966
|
+
// }, [normalizePortPosition]);
|
|
8967
|
+
// //Normalize port position when element is resized
|
|
8968
|
+
// useEffect(() => {
|
|
8969
|
+
// //const newPorts = normalizePortsPosition();
|
|
8970
|
+
// //handlePortsState(newPorts);
|
|
8971
|
+
// }, [size, _paperEventEmitterContext, id, normalizePortPosition, onPortMoved, normalizePortsPosition, handlePortsState]);
|
|
8881
8972
|
//Listen trigger of Delete key, handle delete port is selected
|
|
8882
8973
|
React.useEffect(function () {
|
|
8883
8974
|
var listener = _paperEventEmitterContext.onCommandDeleteSelectedPort(function () {
|
|
8884
|
-
if (selectedPort) {
|
|
8975
|
+
if (selectedPort && selectedPort.removable !== false) {
|
|
8885
8976
|
var newPorts = portsRef.current.filter(function (p) { return p.id !== selectedPort.id; });
|
|
8886
|
-
|
|
8977
|
+
handlePortsState(newPorts);
|
|
8887
8978
|
setSelectedPort(undefined);
|
|
8888
|
-
onPortsChanged
|
|
8979
|
+
//onPortsChanged?.(newPorts, id)
|
|
8889
8980
|
}
|
|
8890
8981
|
});
|
|
8891
8982
|
return function () {
|
|
8892
8983
|
listener.off();
|
|
8893
8984
|
};
|
|
8894
|
-
}, [_paperEventEmitterContext, id,
|
|
8985
|
+
}, [_paperEventEmitterContext, id, selectedPort, handlePortsState, props.element.ports]);
|
|
8895
8986
|
React.useEffect(function () {
|
|
8896
8987
|
//Listener onMouseDown event on #paper-container
|
|
8897
8988
|
var eventListener = _paperEventEmitterContext.onPaperClicked(function (ev) {
|
|
@@ -8904,26 +8995,38 @@ var Element = React.forwardRef(function (props, forwardedRef) {
|
|
|
8904
8995
|
React.useEffect(function () {
|
|
8905
8996
|
//listen element resize to update position of the ports by element size.
|
|
8906
8997
|
var eleResizeListener = _paperEventEmitterContext.onElementResized(id, function () {
|
|
8907
|
-
|
|
8998
|
+
//let isChanged = false;
|
|
8908
8999
|
var newPorts = portsRef.current.map(function (port) {
|
|
8909
9000
|
var newPosition = normalizePortPosition({ x: port.position.x, y: port.position.y });
|
|
8910
9001
|
//Check port moved
|
|
8911
9002
|
if (port.position.x !== newPosition.x || port.position.y !== newPosition.y) {
|
|
8912
|
-
isChanged = true;
|
|
9003
|
+
//isChanged = true;
|
|
8913
9004
|
_paperEventEmitterContext.emitPortMoved(port, id, port.position, newPosition);
|
|
8914
9005
|
}
|
|
8915
9006
|
port.position = newPosition;
|
|
8916
9007
|
return port;
|
|
8917
9008
|
});
|
|
8918
|
-
|
|
8919
|
-
if (isChanged) {
|
|
8920
|
-
|
|
8921
|
-
}
|
|
9009
|
+
handlePortsState(newPorts);
|
|
9010
|
+
// if (isChanged) {
|
|
9011
|
+
// onPortsChanged?.(newPorts, id);
|
|
9012
|
+
// }
|
|
8922
9013
|
});
|
|
8923
9014
|
return function () {
|
|
8924
9015
|
eleResizeListener.off();
|
|
8925
9016
|
};
|
|
8926
|
-
}, [_paperEventEmitterContext, id,
|
|
9017
|
+
}, [_paperEventEmitterContext, id, normalizePortPosition, size, portMoveableAreas, portSlideRailSVGClassName, handlePortsState, props.element.ports]);
|
|
9018
|
+
//list to port added
|
|
9019
|
+
React.useEffect(function () {
|
|
9020
|
+
var _a, _b;
|
|
9021
|
+
//Listen a new port added, then re-render the element component
|
|
9022
|
+
var off = (_b = (_a = props.element).onAddedPort) === null || _b === void 0 ? void 0 : _b.call(_a, function (newPort) {
|
|
9023
|
+
logger.info("A new port has been added to element ".concat(id));
|
|
9024
|
+
handlePortsState(props.element.ports || []);
|
|
9025
|
+
});
|
|
9026
|
+
return function () {
|
|
9027
|
+
off === null || off === void 0 ? void 0 : off();
|
|
9028
|
+
};
|
|
9029
|
+
}, [handlePortsState, id, props.element]);
|
|
8927
9030
|
//Listen creating element link started, ended.
|
|
8928
9031
|
React.useEffect(function () {
|
|
8929
9032
|
var elementStartedListener = _paperEventEmitterContext.onElementLinkStarted(function (tempLink) {
|
|
@@ -8973,30 +9076,30 @@ var Element = React.forwardRef(function (props, forwardedRef) {
|
|
|
8973
9076
|
var handleSelectedPort = React.useCallback(function (portId, e) {
|
|
8974
9077
|
e.stopPropagation();
|
|
8975
9078
|
logger.debug('Port selected', portId, e);
|
|
8976
|
-
var port =
|
|
9079
|
+
var port = ports.find(function (p) { return p.id === portId; });
|
|
8977
9080
|
if (!port)
|
|
8978
9081
|
return;
|
|
8979
9082
|
setSelectedPort(port);
|
|
8980
9083
|
_paperEventEmitterContext.emitPortSelected(port, id);
|
|
8981
|
-
}, [id, _paperEventEmitterContext]);
|
|
9084
|
+
}, [ports, id, _paperEventEmitterContext]);
|
|
8982
9085
|
//Calculate the position of the 4 vertices of a rectangle relative to element
|
|
8983
9086
|
var calculateSlideRailRectSVGPositions = React.useCallback(function (slideRailSVG) {
|
|
8984
9087
|
var coordinates = getRectangleCorners(slideRailSVG);
|
|
8985
9088
|
var ownerSVG = slideRailSVG.ownerSVGElement;
|
|
8986
9089
|
var rotationAngle = getElementRotationInfo(ownerSVG);
|
|
8987
9090
|
if (rotationAngle !== 0) {
|
|
8988
|
-
var rotationCenterX = width / 2;
|
|
8989
|
-
var rotationCenterY = height / 2;
|
|
9091
|
+
var rotationCenterX = size.width / 2;
|
|
9092
|
+
var rotationCenterY = size.height / 2;
|
|
8990
9093
|
coordinates = getRotatedRectangleCoordinates(coordinates, rotationCenterX, rotationCenterY, rotationAngle);
|
|
8991
9094
|
}
|
|
8992
9095
|
return coordinates;
|
|
8993
|
-
}, [
|
|
9096
|
+
}, [size]);
|
|
8994
9097
|
var getSlideRailSVG = React.useCallback(function (portSlideRailSVGClassName) {
|
|
8995
9098
|
var _a;
|
|
8996
9099
|
var slideRailSVG = (_a = elementRef.current) === null || _a === void 0 ? void 0 : _a.querySelector(".".concat(portSlideRailSVGClassName));
|
|
8997
9100
|
return slideRailSVG;
|
|
8998
9101
|
}, []);
|
|
8999
|
-
var handlePortMove = function (newX, newY) {
|
|
9102
|
+
var handlePortMove = React.useCallback(function (newX, newY) {
|
|
9000
9103
|
if (!selectedPort)
|
|
9001
9104
|
return;
|
|
9002
9105
|
var oldPosition = __assign({}, selectedPort.position);
|
|
@@ -9008,13 +9111,14 @@ var Element = React.forwardRef(function (props, forwardedRef) {
|
|
|
9008
9111
|
var newPosition = normalizePortPosition(tempNewPosition);
|
|
9009
9112
|
if (newPosition) {
|
|
9010
9113
|
selectedPort.position = newPosition;
|
|
9011
|
-
onPortMoved
|
|
9012
|
-
|
|
9114
|
+
//onPortMoved?.(selectedPort, id, oldPosition, newPosition)
|
|
9115
|
+
handlePortsState(portsRef.current);
|
|
9013
9116
|
if (_paperEventEmitterContext.emitter.listenerCount(EVENT_NAME.PORT_MOVED) > 0) {
|
|
9014
9117
|
_paperEventEmitterContext.emitPortMoved(selectedPort, id, oldPosition, newPosition);
|
|
9015
9118
|
}
|
|
9119
|
+
onPortMoved === null || onPortMoved === void 0 ? void 0 : onPortMoved(selectedPort, id, oldPosition, newPosition);
|
|
9016
9120
|
}
|
|
9017
|
-
};
|
|
9121
|
+
}, [selectedPort, elementAbsPosition, normalizePortPosition, _paperEventEmitterContext, id, onPortMoved, handlePortsState]);
|
|
9018
9122
|
//Handle when mouse down on port
|
|
9019
9123
|
var handlePortMouseDown = React.useCallback(function (portId, e) {
|
|
9020
9124
|
e.stopPropagation();
|
|
@@ -9025,7 +9129,7 @@ var Element = React.forwardRef(function (props, forwardedRef) {
|
|
|
9025
9129
|
return;
|
|
9026
9130
|
_paperEventEmitterContext.emitPortMouseDown(e, port, id);
|
|
9027
9131
|
onPortMouseDown === null || onPortMouseDown === void 0 ? void 0 : onPortMouseDown(e, port, id);
|
|
9028
|
-
}, [id,
|
|
9132
|
+
}, [id, _paperEventEmitterContext, onPortMouseDown]);
|
|
9029
9133
|
//Handle when mouse up on port
|
|
9030
9134
|
var handlePortMouseUp = React.useCallback(function (portId, e) {
|
|
9031
9135
|
e.stopPropagation();
|
|
@@ -9038,50 +9142,44 @@ var Element = React.forwardRef(function (props, forwardedRef) {
|
|
|
9038
9142
|
if (potentialPortPosition) {
|
|
9039
9143
|
setPotentialPortPosition(undefined);
|
|
9040
9144
|
}
|
|
9041
|
-
}, [id, onPortMouseUp,
|
|
9145
|
+
}, [_paperEventEmitterContext, id, onPortMouseUp, potentialPortPosition]);
|
|
9042
9146
|
//Update state when label of port is moved
|
|
9043
9147
|
var handlePortLabelMoved = React.useCallback(function (newX, newY, portId) {
|
|
9044
|
-
|
|
9045
|
-
|
|
9046
|
-
|
|
9047
|
-
|
|
9048
|
-
|
|
9049
|
-
|
|
9050
|
-
|
|
9051
|
-
|
|
9052
|
-
|
|
9053
|
-
|
|
9054
|
-
|
|
9055
|
-
|
|
9056
|
-
|
|
9057
|
-
});
|
|
9058
|
-
}, []);
|
|
9148
|
+
handlePortsState(portsRef.current.map(function (p) {
|
|
9149
|
+
if (p.id === portId && p.label) {
|
|
9150
|
+
var newLabel = Object.assign(Object.create(Object.getPrototypeOf(p.label)), p.label);
|
|
9151
|
+
var newPosition = {
|
|
9152
|
+
x: newX,
|
|
9153
|
+
y: newY
|
|
9154
|
+
};
|
|
9155
|
+
newLabel.position = newPosition;
|
|
9156
|
+
p.label = newLabel;
|
|
9157
|
+
}
|
|
9158
|
+
return p;
|
|
9159
|
+
}));
|
|
9160
|
+
}, [handlePortsState]);
|
|
9059
9161
|
//Update state when label of port is resized
|
|
9060
9162
|
var handlePortLabelResized = React.useCallback(function (width, height, portId) {
|
|
9061
|
-
|
|
9062
|
-
|
|
9063
|
-
|
|
9064
|
-
|
|
9065
|
-
|
|
9066
|
-
|
|
9067
|
-
|
|
9068
|
-
|
|
9069
|
-
|
|
9070
|
-
|
|
9071
|
-
});
|
|
9072
|
-
}, []);
|
|
9163
|
+
handlePortsState(portsRef.current.map(function (p) {
|
|
9164
|
+
if (p.id === portId && p.label) {
|
|
9165
|
+
p.label.size = {
|
|
9166
|
+
width: width,
|
|
9167
|
+
height: height
|
|
9168
|
+
};
|
|
9169
|
+
}
|
|
9170
|
+
return p;
|
|
9171
|
+
}));
|
|
9172
|
+
}, [handlePortsState]);
|
|
9073
9173
|
//Update state when label of port is changed content
|
|
9074
9174
|
var handlePortLabelContentChanged = React.useCallback(function (ev, newValue, portId) {
|
|
9075
|
-
|
|
9076
|
-
|
|
9077
|
-
|
|
9078
|
-
|
|
9079
|
-
|
|
9080
|
-
|
|
9081
|
-
|
|
9082
|
-
|
|
9083
|
-
}, []);
|
|
9084
|
-
function handleElementMouseMove(ev) {
|
|
9175
|
+
handlePortsState(portsRef.current.map(function (p) {
|
|
9176
|
+
if (p.id === portId && p.label) {
|
|
9177
|
+
p.label.content = newValue;
|
|
9178
|
+
}
|
|
9179
|
+
return p;
|
|
9180
|
+
}));
|
|
9181
|
+
}, [handlePortsState]);
|
|
9182
|
+
var handleElementMouseMove = React.useCallback(function (ev) {
|
|
9085
9183
|
//ev.stopPropagation(); //Can't use stopPropagation here, because do not create tempLink
|
|
9086
9184
|
onMouseMove === null || onMouseMove === void 0 ? void 0 : onMouseMove(ev, id);
|
|
9087
9185
|
if (someElementLinkStarted && elementRef.current) {
|
|
@@ -9108,19 +9206,19 @@ var Element = React.forwardRef(function (props, forwardedRef) {
|
|
|
9108
9206
|
setPotentialPortPosition(undefined);
|
|
9109
9207
|
}
|
|
9110
9208
|
}
|
|
9111
|
-
}
|
|
9112
|
-
|
|
9209
|
+
}, [onMouseMove, id, someElementLinkStarted, container, zoom, getElementAbsPosition, normalizePortPosition, hoveredPort]);
|
|
9210
|
+
var handleElementMouseLeave = React.useCallback(function (ev) {
|
|
9113
9211
|
ev.stopPropagation();
|
|
9114
9212
|
onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave(ev, id);
|
|
9115
9213
|
if (someElementLinkStarted) { //If an element link is being created, clear the placeholder when the mouse leaves the element.
|
|
9116
9214
|
setPotentialPortPosition(undefined);
|
|
9117
9215
|
}
|
|
9118
|
-
}
|
|
9119
|
-
var handleElementMouseDown = function (ev) {
|
|
9216
|
+
}, [onMouseLeave, id, someElementLinkStarted]);
|
|
9217
|
+
var handleElementMouseDown = React.useCallback(function (ev) {
|
|
9120
9218
|
ev.stopPropagation();
|
|
9121
9219
|
onMouseDown === null || onMouseDown === void 0 ? void 0 : onMouseDown(ev, id);
|
|
9122
|
-
};
|
|
9123
|
-
var handleElementMouseUp = function (ev) {
|
|
9220
|
+
}, [onMouseDown, id]);
|
|
9221
|
+
var handleElementMouseUp = React.useCallback(function (ev) {
|
|
9124
9222
|
ev.stopPropagation();
|
|
9125
9223
|
onMouseUp === null || onMouseUp === void 0 ? void 0 : onMouseUp(ev, id);
|
|
9126
9224
|
//If an element link is being created, trigger onMouseUpAtLinkedPortPlaceholder when the mouse up the element.
|
|
@@ -9129,16 +9227,16 @@ var Element = React.forwardRef(function (props, forwardedRef) {
|
|
|
9129
9227
|
onMouseUpAtLinkedPortPlaceholder === null || onMouseUpAtLinkedPortPlaceholder === void 0 ? void 0 : onMouseUpAtLinkedPortPlaceholder(newElementLink, potentialPortPosition, id);
|
|
9130
9228
|
elementLinkStarted.current = undefined;
|
|
9131
9229
|
}
|
|
9132
|
-
};
|
|
9230
|
+
}, [potentialPortPosition, elementLinkStarted, onMouseUpAtLinkedPortPlaceholder, id]);
|
|
9133
9231
|
//Handle when mouse move on port
|
|
9134
9232
|
var handlePortMouseMove = React.useCallback(function (portId) {
|
|
9135
9233
|
if (someElementLinkStarted) {
|
|
9136
|
-
var port =
|
|
9234
|
+
var port = ports.find(function (p) { return p.id === portId; });
|
|
9137
9235
|
if (!port)
|
|
9138
9236
|
return;
|
|
9139
9237
|
setHoveredPort(port);
|
|
9140
9238
|
}
|
|
9141
|
-
}, [someElementLinkStarted]);
|
|
9239
|
+
}, [someElementLinkStarted, ports]);
|
|
9142
9240
|
//Handle when mouse leave on port
|
|
9143
9241
|
var handlePortMouseLeave = React.useCallback(function () {
|
|
9144
9242
|
if (someElementLinkStarted)
|
|
@@ -9147,11 +9245,11 @@ var Element = React.forwardRef(function (props, forwardedRef) {
|
|
|
9147
9245
|
//Handle when context menu is opened on port
|
|
9148
9246
|
var handlePortContextMenu = React.useCallback(function (portId, e) {
|
|
9149
9247
|
e.preventDefault();
|
|
9150
|
-
var port =
|
|
9248
|
+
var port = ports.find(function (p) { return p.id === portId; });
|
|
9151
9249
|
if (!port)
|
|
9152
9250
|
return;
|
|
9153
9251
|
onPortContextMenu === null || onPortContextMenu === void 0 ? void 0 : onPortContextMenu(port, id, e);
|
|
9154
|
-
}, [onPortContextMenu, id]);
|
|
9252
|
+
}, [ports, onPortContextMenu, id]);
|
|
9155
9253
|
//Get rotate angle of port by port direction is defined.
|
|
9156
9254
|
var rotatePort = React.useCallback(function (x, y) {
|
|
9157
9255
|
// logger.info('calculating port rotation', x, y)
|
|
@@ -9166,8 +9264,8 @@ var Element = React.forwardRef(function (props, forwardedRef) {
|
|
|
9166
9264
|
switch (portDirection) {
|
|
9167
9265
|
case exports.SubObjectDirection.Radial:
|
|
9168
9266
|
var center = {
|
|
9169
|
-
x: width / 2,
|
|
9170
|
-
y: height / 2
|
|
9267
|
+
x: size.width / 2,
|
|
9268
|
+
y: size.height / 2
|
|
9171
9269
|
};
|
|
9172
9270
|
rotationAngle = calculateAngleWithOx(normalizedPosition, center);
|
|
9173
9271
|
break;
|
|
@@ -9192,46 +9290,149 @@ var Element = React.forwardRef(function (props, forwardedRef) {
|
|
|
9192
9290
|
break;
|
|
9193
9291
|
}
|
|
9194
9292
|
return rotationAngle;
|
|
9195
|
-
}, [width, height, portSlideRailSVGClassName, portDirection, getSlideRailSVG, normalizePortPosition, calculateSlideRailRectSVGPositions]);
|
|
9196
|
-
|
|
9197
|
-
|
|
9198
|
-
|
|
9199
|
-
|
|
9200
|
-
|
|
9293
|
+
}, [size.width, size.height, portSlideRailSVGClassName, portDirection, getSlideRailSVG, normalizePortPosition, calculateSlideRailRectSVGPositions]);
|
|
9294
|
+
// const prevElms = elementsRef.current;
|
|
9295
|
+
var handleTextChanged = React.useCallback(function (textId, content) {
|
|
9296
|
+
var textToUpdate = texts === null || texts === void 0 ? void 0 : texts.find(function (t) { return t.id === textId; });
|
|
9297
|
+
if (!textToUpdate)
|
|
9298
|
+
return;
|
|
9299
|
+
textToUpdate.content = content;
|
|
9300
|
+
setTexts(__spreadArray([], texts, true));
|
|
9301
|
+
}, [texts]);
|
|
9302
|
+
// const renderedShape = useMemo(() => {
|
|
9303
|
+
// if (renderShape) return renderShape(props);
|
|
9304
|
+
// return null;
|
|
9305
|
+
// }, [props, size, position, renderShape])
|
|
9306
|
+
var adjustElementPositionOnParentPortArea = React.useCallback(function (toBeAdjustedPosition, isAbsolutePosition) {
|
|
9307
|
+
if (isAbsolutePosition === void 0) { isAbsolutePosition = false; }
|
|
9308
|
+
if (props.element.moveAsPortOnParent && props.element.parentElement && parentDOM) {
|
|
9309
|
+
var newRelativePosition = {
|
|
9310
|
+
x: toBeAdjustedPosition.x,
|
|
9311
|
+
y: toBeAdjustedPosition.y
|
|
9312
|
+
};
|
|
9313
|
+
if (isAbsolutePosition) {
|
|
9314
|
+
newRelativePosition = transformAbsPositionToElementRelativePosition(toBeAdjustedPosition, props.element);
|
|
9315
|
+
}
|
|
9316
|
+
return correctPortPositionInElement(newRelativePosition, props.element.size.width, props.element.size.height, props.element.parentElement.portMoveableAreas, props.element.parentElement.portSlideRailSVGClassName, parentDOM);
|
|
9317
|
+
}
|
|
9318
|
+
return toBeAdjustedPosition;
|
|
9319
|
+
}, [props.element, parentDOM]);
|
|
9320
|
+
//update absolute position of element and absolute position of children elements
|
|
9321
|
+
// const updateElementPosition = (element: IElementInTreeState, x: number, y: number, isRelativePosition?: boolean): IElementInTreeState => {
|
|
9322
|
+
// if (isRelativePosition) {
|
|
9323
|
+
// element.position.x = x;
|
|
9324
|
+
// element.position.y = y;
|
|
9325
|
+
// } else {
|
|
9326
|
+
// const relativePosition = transformAbsPositionToElementRelativePosition({ x, y }, element)
|
|
9327
|
+
// element.position.x = relativePosition.x;
|
|
9328
|
+
// element.position.y = relativePosition.y;
|
|
9329
|
+
// }
|
|
9330
|
+
// return element;
|
|
9331
|
+
// }
|
|
9201
9332
|
//Re-render port again after rendered to automation rotate port
|
|
9202
9333
|
//Because elementRef.current equals null in first render so automation rotate port is incorrect.
|
|
9203
9334
|
//TODO: check if this is still needed -> Still needed
|
|
9204
9335
|
// useLayoutEffect(() => {
|
|
9205
9336
|
// if (elementRef.current) {
|
|
9206
|
-
//
|
|
9337
|
+
// handlePortsState(portsRef.current);
|
|
9207
9338
|
// }
|
|
9208
|
-
// }, [])
|
|
9209
|
-
//
|
|
9210
|
-
|
|
9211
|
-
|
|
9212
|
-
|
|
9213
|
-
|
|
9214
|
-
|
|
9215
|
-
|
|
9216
|
-
: React.createElement("rect", { x: potentialPortPosition.x - PORT_PLACEHOLDER_DEFAULT_STROKE_WIDTH / 2, y: potentialPortPosition.y - PORT_PLACEHOLDER_DEFAULT_STROKE_WIDTH / 2, width: PORT_PLACEHOLDER_DEFAULT_STROKE_WIDTH, height: PORT_PLACEHOLDER_DEFAULT_STROKE_WIDTH, rx: PORT_PLACEHOLDER_DEFAULT_SIZE, ry: PORT_PLACEHOLDER_DEFAULT_SIZE, stroke: PORT_PLACEHOLDER_DEFAULT_STROKE, fill: "none", strokeWidth: 3 })), ports === null || ports === void 0 ? void 0 :
|
|
9217
|
-
ports.map(function (p, index) {
|
|
9218
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
9219
|
-
return React.createElement(Port, { key: p.id, ref: p.ref, id: p.id, x: p.position.x, y: p.position.y, parentAbsolutePosition: elementAbsPosition, width: (_c = (_b = (_a = p.size) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : defaultPortSize) !== null && _c !== void 0 ? _c : PORT_DEFAULT_SIZE, height: (_f = (_e = (_d = p.size) === null || _d === void 0 ? void 0 : _d.height) !== null && _e !== void 0 ? _e : defaultPortSize) !== null && _f !== void 0 ? _f : PORT_DEFAULT_SIZE, container: container, calculateRotationAngle: rotatePort, label: p.label, onPortLabelMoved: handlePortLabelMoved, onPortLabelResized: handlePortLabelResized, onPortLabelContentChanged: handlePortLabelContentChanged, onSelected: handleSelectedPort, onMouseDown: handlePortMouseDown, onMouseUp: handlePortMouseUp, onMouseMove: handlePortMouseMove, onMouseLeave: handlePortMouseLeave, onContextMenu: handlePortContextMenu, renderShape: p.renderShape },
|
|
9220
|
-
selectedPort && selectedPort.id === p.id && (hoveredPort === null || hoveredPort === void 0 ? void 0 : hoveredPort.id) !== p.id &&
|
|
9221
|
-
(React.createElement(SelectionFrame, { container: container, targetSVGElement: ((_g = selectedPort === null || selectedPort === void 0 ? void 0 : selectedPort.ref) === null || _g === void 0 ? void 0 : _g.current) || undefined, resizability: {
|
|
9222
|
-
enabled: false,
|
|
9223
|
-
keepRatio: false
|
|
9224
|
-
}, objectX: elementAbsPosition.x + selectedPort.position.x, objectY: elementAbsPosition.y + selectedPort.position.y, onMove: handlePortMove, zoom: zoom })),
|
|
9225
|
-
hoveredPort && hoveredPort.id === p.id && (React.createElement(SelectionFrame, { container: container, targetSVGElement: ((_h = hoveredPort === null || hoveredPort === void 0 ? void 0 : hoveredPort.ref) === null || _h === void 0 ? void 0 : _h.current) || undefined, resizability: {
|
|
9339
|
+
// }, [handlePortsState])
|
|
9340
|
+
//cache render ports
|
|
9341
|
+
var renderedPorts = React.useMemo(function () {
|
|
9342
|
+
return ports === null || ports === void 0 ? void 0 : ports.map(function (p, index) {
|
|
9343
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
9344
|
+
return React.createElement(Port, { key: p.id, ref: p.ref, id: p.id, x: p.position.x, y: p.position.y, parentAbsolutePosition: elementAbsPosition, width: (_c = (_b = (_a = p.size) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : defaultPortSize) !== null && _c !== void 0 ? _c : PORT_DEFAULT_SIZE, height: (_f = (_e = (_d = p.size) === null || _d === void 0 ? void 0 : _d.height) !== null && _e !== void 0 ? _e : defaultPortSize) !== null && _f !== void 0 ? _f : PORT_DEFAULT_SIZE, container: container, calculateRotationAngle: rotatePort, label: p.label, onPortLabelMoved: handlePortLabelMoved, onPortLabelResized: handlePortLabelResized, onPortLabelContentChanged: handlePortLabelContentChanged, onSelected: handleSelectedPort, onMouseDown: handlePortMouseDown, onMouseUp: handlePortMouseUp, onMouseMove: handlePortMouseMove, onMouseLeave: handlePortMouseLeave, onContextMenu: handlePortContextMenu, renderShape: p.renderShape },
|
|
9345
|
+
selectedPort && selectedPort.id === p.id && (hoveredPort === null || hoveredPort === void 0 ? void 0 : hoveredPort.id) !== p.id &&
|
|
9346
|
+
(React.createElement(SelectionFrame, { container: container, targetSVGElement: ((_g = p.ref) === null || _g === void 0 ? void 0 : _g.current) || undefined, resizability: {
|
|
9226
9347
|
enabled: false,
|
|
9227
9348
|
keepRatio: false
|
|
9228
|
-
}, zoom: zoom }))
|
|
9229
|
-
|
|
9230
|
-
|
|
9231
|
-
|
|
9232
|
-
|
|
9233
|
-
|
|
9234
|
-
|
|
9349
|
+
}, objectX: elementAbsPosition.x + selectedPort.position.x, objectY: elementAbsPosition.y + selectedPort.position.y, onMove: handlePortMove, zoom: zoom })),
|
|
9350
|
+
hoveredPort && hoveredPort.id === p.id && (React.createElement(SelectionFrame, { container: container, targetSVGElement: ((_h = hoveredPort === null || hoveredPort === void 0 ? void 0 : hoveredPort.ref) === null || _h === void 0 ? void 0 : _h.current) || undefined, resizability: {
|
|
9351
|
+
enabled: false,
|
|
9352
|
+
keepRatio: false
|
|
9353
|
+
}, zoom: zoom })));
|
|
9354
|
+
});
|
|
9355
|
+
}, [ports, elementAbsPosition, defaultPortSize, container, rotatePort, handlePortLabelMoved, handlePortLabelResized, handlePortLabelContentChanged, handleSelectedPort, handlePortMouseDown, handlePortMouseUp, handlePortMouseMove, handlePortMouseLeave, handlePortContextMenu, selectedPort, hoveredPort, handlePortMove, zoom]);
|
|
9356
|
+
//cache render texts
|
|
9357
|
+
var renderedTexts = React.useMemo(function () {
|
|
9358
|
+
return texts === null || texts === void 0 ? void 0 : texts.map(function (t, index) {
|
|
9359
|
+
var _a, _b;
|
|
9360
|
+
return React.createElement(Text$1, { id: t.id, key: index, content: t.content, x: ((_a = t.position) === null || _a === void 0 ? void 0 : _a.x) || 0, y: ((_b = t.position) === null || _b === void 0 ? void 0 : _b.y) || 0, width: t.size.width, height: t.size.height, editable: t.editable, selectable: t.selectable, align: t.align, fontSize: t.fontSize, border: t.border, container: container, style: t.style, parentAbsolutePosition: elementAbsPosition, onContentChanged: function (ev, newContent) { return handleTextChanged(t.id, newContent); } });
|
|
9361
|
+
});
|
|
9362
|
+
}, [id, texts, container, elementAbsPosition, handleTextChanged]);
|
|
9363
|
+
//log element render
|
|
9364
|
+
logger.debug('Rendering Element', id, position.x, position.y, size.width, size.height, cssClass, portPlaceholderShape, children, container, getParentAbsolutePosition(), textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition, textsPlaceHolderClassName, texts, ports, portSlideRailSVGClassName, portMoveableAreas, portDirection, defaultPortSize);
|
|
9365
|
+
return (React.createElement(ElementWrapper, { key: "ElementWrapper", ref: elementRef, x: position.x, y: position.y, cssClass: cssClass, onClick: function (e) { return onClick ? onClick(id, e, elementRef.current) : true; }, onMouseMove: handleElementMouseMove, onMouseLeave: handleElementMouseLeave, onMouseDown: handleElementMouseDown, onMouseUp: handleElementMouseUp, onContextMenu: function (e) { return onContextMenu ? onContextMenu(id, e, elementRef.current) : true; } }, renderShape === null || renderShape === void 0 ? void 0 :
|
|
9366
|
+
renderShape(props),
|
|
9367
|
+
!!container && !!beingSelected &&
|
|
9368
|
+
React.createElement(SelectionFrame, { key: id, container: container, targetSVGElement: elementRef.current || undefined, resizability: resizability || {
|
|
9369
|
+
enabled: true,
|
|
9370
|
+
keepRatio: true
|
|
9371
|
+
}, objectX: elementAbsPosition === null || elementAbsPosition === void 0 ? void 0 : elementAbsPosition.x, objectY: elementAbsPosition === null || elementAbsPosition === void 0 ? void 0 : elementAbsPosition.y, width: size.width, height: size.height, zoom: zoom, draggingByDefault: draggingByDefault,
|
|
9372
|
+
//movingOffsetThreshold: ELEMENT_MOVING_OFFSET_THRESHOLD,
|
|
9373
|
+
onMouseDown: function (ev) {
|
|
9374
|
+
windowsPositionToPaperPosition({
|
|
9375
|
+
x: ev.clientX,
|
|
9376
|
+
y: ev.clientY
|
|
9377
|
+
}, container, zoomRef.current);
|
|
9378
|
+
onMouseDown === null || onMouseDown === void 0 ? void 0 : onMouseDown(ev, id);
|
|
9379
|
+
}, onMouseUp: function (ev) {
|
|
9380
|
+
windowsPositionToPaperPosition({
|
|
9381
|
+
x: ev.clientX,
|
|
9382
|
+
y: ev.clientY
|
|
9383
|
+
}, container, zoomRef.current);
|
|
9384
|
+
onMouseUp === null || onMouseUp === void 0 ? void 0 : onMouseUp(ev, id);
|
|
9385
|
+
}, onMove: function (newX, newY) {
|
|
9386
|
+
var _a;
|
|
9387
|
+
var oldPosition = __assign({}, position);
|
|
9388
|
+
// Relative position to the paper container
|
|
9389
|
+
var paperPosition = {
|
|
9390
|
+
x: newX,
|
|
9391
|
+
y: newY
|
|
9392
|
+
};
|
|
9393
|
+
//Call onElementMoving to check if the element should be moved or not
|
|
9394
|
+
if (onMoving) {
|
|
9395
|
+
var _b = (_a = onMoving(props.element, paperPosition)) !== null && _a !== void 0 ? _a : {}, horizontalAllowed = _b.horizontalAllowed, verticalAllowed = _b.verticalAllowed;
|
|
9396
|
+
//If both horizontalAllowed and verticalAllowed are false, do not move the element
|
|
9397
|
+
if (!horizontalAllowed && !verticalAllowed) {
|
|
9398
|
+
return;
|
|
9399
|
+
}
|
|
9400
|
+
//If horizontalAllowed is false, keep the old x position
|
|
9401
|
+
if (!horizontalAllowed) {
|
|
9402
|
+
paperPosition.x = oldPosition.x;
|
|
9403
|
+
}
|
|
9404
|
+
//If verticalAllowed is false, keep the old y position
|
|
9405
|
+
if (!verticalAllowed) {
|
|
9406
|
+
paperPosition.y = oldPosition.y;
|
|
9407
|
+
}
|
|
9408
|
+
}
|
|
9409
|
+
logger.info("Element ".concat(props.element.id, " is dragging to position ").concat(JSON.stringify(paperPosition)));
|
|
9410
|
+
//Adjust position of element if it should move as a port on parent port area
|
|
9411
|
+
if (props.element.moveAsPortOnParent && props.element.parentElement) {
|
|
9412
|
+
paperPosition = adjustElementPositionOnParentPortArea(paperPosition, true);
|
|
9413
|
+
updateElementPosition(paperPosition);
|
|
9414
|
+
}
|
|
9415
|
+
else {
|
|
9416
|
+
var relativePosition = transformAbsPositionToElementRelativePosition(paperPosition, props.element);
|
|
9417
|
+
updateElementPosition(relativePosition);
|
|
9418
|
+
}
|
|
9419
|
+
//let newElementPosition = updateElementPosition(props.element, newPosition.x, newPosition.y, true)
|
|
9420
|
+
logger.info("Element ".concat(props.element.id, " is moving to relative position ").concat(JSON.stringify(props.element.position)));
|
|
9421
|
+
onMoved === null || onMoved === void 0 ? void 0 : onMoved(props.element, oldPosition, paperPosition);
|
|
9422
|
+
}, onResize: function (width, height) {
|
|
9423
|
+
var oldSize = size;
|
|
9424
|
+
var newSize = { width: width, height: height };
|
|
9425
|
+
updateElementSize(newSize);
|
|
9426
|
+
if (onResized) {
|
|
9427
|
+
onResized(props.element, oldSize, newSize);
|
|
9428
|
+
}
|
|
9429
|
+
} }),
|
|
9430
|
+
potentialPortPosition && (portPlaceholderShape
|
|
9431
|
+
? React.createElement("svg", { x: potentialPortPosition.x, y: potentialPortPosition.y }, portPlaceholderShape)
|
|
9432
|
+
: React.createElement("rect", { x: potentialPortPosition.x - PORT_PLACEHOLDER_DEFAULT_STROKE_WIDTH / 2, y: potentialPortPosition.y - PORT_PLACEHOLDER_DEFAULT_STROKE_WIDTH / 2, width: PORT_PLACEHOLDER_DEFAULT_STROKE_WIDTH, height: PORT_PLACEHOLDER_DEFAULT_STROKE_WIDTH, rx: PORT_PLACEHOLDER_DEFAULT_SIZE, ry: PORT_PLACEHOLDER_DEFAULT_SIZE, stroke: PORT_PLACEHOLDER_DEFAULT_STROKE, fill: "none", strokeWidth: 3 })),
|
|
9433
|
+
renderedPorts,
|
|
9434
|
+
renderedTexts,
|
|
9435
|
+
children));
|
|
9235
9436
|
});
|
|
9236
9437
|
var Element$1 = React.memo(Element);
|
|
9237
9438
|
|
|
@@ -9478,36 +9679,34 @@ function convertElementsToTree(elements) {
|
|
|
9478
9679
|
return parsedElementsInTree;
|
|
9479
9680
|
}
|
|
9480
9681
|
var Paper = function (props) {
|
|
9481
|
-
var _a,
|
|
9482
|
-
var _c = React.useState({ elements: [], elementsInTree: [] }), elementsState = _c[0], setElementsState = _c[1];
|
|
9682
|
+
var _a = React.useState({ elements: [], elementsInTree: [] }), elementsState = _a[0], setElementsState = _a[1];
|
|
9483
9683
|
// const [elements, setElements] = React.useState<IElementState[]>([]);
|
|
9484
9684
|
// const [elementsInTree, setElementsInTree] = React.useState<IElementInTreeState[]>([]);
|
|
9485
|
-
var
|
|
9486
|
-
var
|
|
9487
|
-
var
|
|
9488
|
-
var
|
|
9489
|
-
var
|
|
9490
|
-
var
|
|
9491
|
-
var
|
|
9492
|
-
var
|
|
9493
|
-
var
|
|
9685
|
+
var _b = React.useState(), selectedElement = _b[0], setSelectedElement = _b[1];
|
|
9686
|
+
var _c = React.useState(false), autoEnabledDraggingSelectedElement = _c[0], setAutoEnabledDraggingSelectedElement = _c[1];
|
|
9687
|
+
var _d = React.useState([]), links = _d[0], setLinks = _d[1];
|
|
9688
|
+
var _e = React.useState(), selectedLink = _e[0], setSelectedLink = _e[1];
|
|
9689
|
+
var _f = React.useState(null), tempLink = _f[0], setTempLink = _f[1];
|
|
9690
|
+
var _g = React.useState([]), texts = _g[0], setTexts = _g[1];
|
|
9691
|
+
var _h = React.useState(), selectedText = _h[0], setSelectedText = _h[1];
|
|
9692
|
+
var _j = React.useState(null), selectedElementSVG = _j[0], setSelectedElementSVG = _j[1];
|
|
9693
|
+
var _k = React.useState(false), mouseDownedOnPaper = _k[0], setMouseDownedOnPaper = _k[1];
|
|
9494
9694
|
var paperEventEmitter = React.useContext(paperEventEmitterContext);
|
|
9495
9695
|
var zoom = useZoomContext().zoom;
|
|
9496
9696
|
var zoomRef = React.useRef(zoom);
|
|
9497
9697
|
var paperContainerRef = React.useRef(null);
|
|
9498
9698
|
var tempLinkRef = React.useRef(tempLink); //Cache tempLink to avoid re-render when tempLink changed
|
|
9499
|
-
|
|
9699
|
+
//const elementsRef = useRef<IElementState[]>([]); //Cache elements to avoid re-render when elements changed
|
|
9500
9700
|
var linksRef = React.useRef(links); //Cache links to avoid re-render when links changed
|
|
9501
9701
|
var textsRef = React.useRef(texts); //Cache texts to avoid re-render when texts changed
|
|
9502
9702
|
var size = props.size;
|
|
9503
|
-
var selectedElementAbsPosition = React.useMemo(function () { return selectedElement ? getAbsolutePosition(selectedElement) : null; }, [selectedElement, (_a = selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.position) === null || _a === void 0 ? void 0 : _a.x, (_b = selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.position) === null || _b === void 0 ? void 0 : _b.y, selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.size]);
|
|
9504
9703
|
var onPortMoved = props.onPortMoved, onPortSelected = props.onPortSelected, onPortMouseDown = props.onPortMouseDown, onPortMouseUp = props.onPortMouseUp,
|
|
9505
9704
|
//onPortsChanged,
|
|
9506
|
-
onPortContextMenu = props.onPortContextMenu, onElementSelected = props.onElementSelected, onElementsChanged = props.onElementsChanged, onElementResized = props.onElementResized, onElementContextMenu = props.onElementContextMenu, onElementMouseUp = props.onElementMouseUp, onElementMouseDown = props.onElementMouseDown, onElementMouseMove = props.onElementMouseMove, onElementMoved = props.onElementMoved, onElementMouseLeave = props.onElementMouseLeave, onElementDeleted = props.onElementDeleted, onLinksChanged = props.onLinksChanged, onLinkSelected = props.onLinkSelected, onTextSelected = props.onTextSelected, onTextsChanged = props.onTextsChanged, manuallyTriggerRenderElementHandler = props.manuallyTriggerRenderElementHandler, manuallyTriggerRenderPortHandler = props.manuallyTriggerRenderPortHandler, onCreatingPortByLinking = props.onCreatingPortByLinking, onCreatingLink = props.onCreatingLink, onElementMoving = props.onElementMoving, manuallySelectElementHandler = props.manuallySelectElementHandler, manuallyTriggerDraggingElementHandler = props.manuallyTriggerDraggingElementHandler, manuallyTriggerStartedLinkingHandler = props.manuallyTriggerStartedLinkingHandler;
|
|
9705
|
+
onPortContextMenu = props.onPortContextMenu, onElementSelected = props.onElementSelected, onElementsChanged = props.onElementsChanged, onElementResized = props.onElementResized, onElementContextMenu = props.onElementContextMenu, onElementMouseUp = props.onElementMouseUp, onElementMouseDown = props.onElementMouseDown, onElementMouseMove = props.onElementMouseMove, onElementMoved = props.onElementMoved, onElementMouseLeave = props.onElementMouseLeave, onElementDeleted = props.onElementDeleted, onLinksChanged = props.onLinksChanged, onLinkSelected = props.onLinkSelected, onTextSelected = props.onTextSelected, onTextsChanged = props.onTextsChanged, manuallyTriggerRenderElementsHandler = props.manuallyTriggerRenderElementsHandler, manuallyTriggerRenderElementHandler = props.manuallyTriggerRenderElementHandler, manuallyTriggerRenderPortHandler = props.manuallyTriggerRenderPortHandler, onCreatingPortByLinking = props.onCreatingPortByLinking, onCreatingLink = props.onCreatingLink, onElementMoving = props.onElementMoving, manuallySelectElementHandler = props.manuallySelectElementHandler, manuallyTriggerDraggingElementHandler = props.manuallyTriggerDraggingElementHandler, manuallyTriggerStartedLinkingHandler = props.manuallyTriggerStartedLinkingHandler;
|
|
9507
9706
|
var handleElementsState = React.useCallback(function (elements) {
|
|
9508
9707
|
var elementsInTree = convertElementsToTree(elements);
|
|
9509
9708
|
setElementsState({ elements: __spreadArray([], elements, true), elementsInTree: elementsInTree });
|
|
9510
|
-
elementsRef.current =
|
|
9709
|
+
// elementsRef.current = [...elements];
|
|
9511
9710
|
}, []);
|
|
9512
9711
|
var rerenderWhenAnyElementChanged = React.useCallback(function () {
|
|
9513
9712
|
setElementsState(function (prev) { return ({ elements: __spreadArray([], prev.elements, true), elementsInTree: __spreadArray([], prev.elementsInTree, true) }); });
|
|
@@ -9525,37 +9724,57 @@ var Paper = function (props) {
|
|
|
9525
9724
|
setTexts(__spreadArray([], props.texts, true));
|
|
9526
9725
|
}, [props.texts]);
|
|
9527
9726
|
React.useEffect(function () {
|
|
9528
|
-
var off =
|
|
9529
|
-
|
|
9530
|
-
|
|
9531
|
-
|
|
9532
|
-
|
|
9533
|
-
// }
|
|
9727
|
+
var off = manuallyTriggerRenderElementsHandler(function () {
|
|
9728
|
+
elementsState.elements.forEach(function (element) {
|
|
9729
|
+
element.version = (element.version || 0) + 1;
|
|
9730
|
+
});
|
|
9731
|
+
handleElementsState(elementsState.elements);
|
|
9534
9732
|
});
|
|
9535
9733
|
return function () {
|
|
9536
9734
|
off();
|
|
9537
9735
|
};
|
|
9538
|
-
}, [
|
|
9736
|
+
}, [elementsState.elements, handleElementsState, manuallyTriggerRenderElementsHandler]);
|
|
9539
9737
|
React.useEffect(function () {
|
|
9540
|
-
var
|
|
9541
|
-
|
|
9542
|
-
|
|
9543
|
-
if (element)
|
|
9544
|
-
|
|
9545
|
-
|
|
9546
|
-
|
|
9547
|
-
|
|
9548
|
-
setSelectedElement(element);
|
|
9549
|
-
onElementSelected === null || onElementSelected === void 0 ? void 0 : onElementSelected(element);
|
|
9550
|
-
setAutoEnabledDraggingSelectedElement(true);
|
|
9551
|
-
}));
|
|
9738
|
+
var off = manuallyTriggerRenderElementHandler(function (elementId) {
|
|
9739
|
+
//find the element
|
|
9740
|
+
var element = elementsState.elements.find(function (elm) { return elm.id === elementId; });
|
|
9741
|
+
if (!element)
|
|
9742
|
+
return;
|
|
9743
|
+
element.version = (element.version || 0) + 1;
|
|
9744
|
+
handleElementsState(elementsState.elements);
|
|
9745
|
+
});
|
|
9552
9746
|
return function () {
|
|
9553
|
-
|
|
9747
|
+
off();
|
|
9554
9748
|
};
|
|
9555
|
-
}, [
|
|
9749
|
+
}, [elementsState.elements, handleElementsState, manuallyTriggerRenderElementHandler, onElementsChanged, rerenderWhenAnyElementChanged]);
|
|
9750
|
+
React.useEffect(function () {
|
|
9751
|
+
if (manuallySelectElementHandler) {
|
|
9752
|
+
var off_1 = manuallySelectElementHandler(function (element) {
|
|
9753
|
+
setSelectedElement(element || undefined);
|
|
9754
|
+
if (element) {
|
|
9755
|
+
onElementSelected === null || onElementSelected === void 0 ? void 0 : onElementSelected(element);
|
|
9756
|
+
}
|
|
9757
|
+
});
|
|
9758
|
+
return function () {
|
|
9759
|
+
off_1();
|
|
9760
|
+
};
|
|
9761
|
+
}
|
|
9762
|
+
}, [manuallySelectElementHandler, onElementSelected]);
|
|
9763
|
+
React.useEffect(function () {
|
|
9764
|
+
if (manuallyTriggerDraggingElementHandler) {
|
|
9765
|
+
var off_2 = manuallyTriggerDraggingElementHandler(function (element) {
|
|
9766
|
+
setSelectedElement(element);
|
|
9767
|
+
onElementSelected === null || onElementSelected === void 0 ? void 0 : onElementSelected(element);
|
|
9768
|
+
setAutoEnabledDraggingSelectedElement(true);
|
|
9769
|
+
});
|
|
9770
|
+
return function () {
|
|
9771
|
+
off_2();
|
|
9772
|
+
};
|
|
9773
|
+
}
|
|
9774
|
+
}, [elementsState.elements, manuallyTriggerDraggingElementHandler, onElementSelected]);
|
|
9556
9775
|
React.useEffect(function () {
|
|
9557
9776
|
if (manuallyTriggerStartedLinkingHandler) {
|
|
9558
|
-
var
|
|
9777
|
+
var off_3 = manuallyTriggerStartedLinkingHandler(function (sourceElement, sourcePort) {
|
|
9559
9778
|
var newLink = {
|
|
9560
9779
|
id: generateUniqueId(),
|
|
9561
9780
|
points: [],
|
|
@@ -9566,7 +9785,7 @@ var Paper = function (props) {
|
|
|
9566
9785
|
paperEventEmitter.emitElementLinkStarted(newLink);
|
|
9567
9786
|
});
|
|
9568
9787
|
return function () {
|
|
9569
|
-
|
|
9788
|
+
off_3();
|
|
9570
9789
|
};
|
|
9571
9790
|
}
|
|
9572
9791
|
}, [manuallyTriggerStartedLinkingHandler, paperEventEmitter]);
|
|
@@ -9614,7 +9833,7 @@ var Paper = function (props) {
|
|
|
9614
9833
|
setSelectedElementSVG(null);
|
|
9615
9834
|
setSelectedLink(undefined);
|
|
9616
9835
|
//broadcast selected port to parent component
|
|
9617
|
-
var element =
|
|
9836
|
+
var element = elementsState.elements.find(function (e) { return e.id === elementId; });
|
|
9618
9837
|
if (element) {
|
|
9619
9838
|
onPortSelected === null || onPortSelected === void 0 ? void 0 : onPortSelected(port, element);
|
|
9620
9839
|
}
|
|
@@ -9622,36 +9841,44 @@ var Paper = function (props) {
|
|
|
9622
9841
|
return function () {
|
|
9623
9842
|
portSelectedListener.off();
|
|
9624
9843
|
};
|
|
9625
|
-
}, [paperEventEmitter, onPortSelected]);
|
|
9844
|
+
}, [paperEventEmitter, onPortSelected, elementsState]);
|
|
9626
9845
|
React.useEffect(function () {
|
|
9627
9846
|
//Listen parent of elements changed, then update elements tree
|
|
9628
|
-
var parentChangedCancelers =
|
|
9847
|
+
var parentChangedCancelers = elementsState.elements.map(function (element) {
|
|
9629
9848
|
var _a;
|
|
9630
9849
|
return (_a = element.onParentChanged) === null || _a === void 0 ? void 0 : _a.call(element, function (newPa, oldPa) {
|
|
9631
9850
|
logger.info('onParentChanged');
|
|
9632
|
-
handleElementsState(
|
|
9851
|
+
handleElementsState(elementsState.elements);
|
|
9633
9852
|
});
|
|
9634
9853
|
});
|
|
9635
|
-
|
|
9636
|
-
|
|
9854
|
+
return function () {
|
|
9855
|
+
parentChangedCancelers.forEach(function (canceller) { return canceller === null || canceller === void 0 ? void 0 : canceller(); });
|
|
9856
|
+
};
|
|
9857
|
+
}, [handleElementsState, rerenderWhenAnyElementChanged, elementsState]);
|
|
9858
|
+
React.useEffect(function () {
|
|
9859
|
+
//Listen a new text added, then re-render the element component
|
|
9860
|
+
//TODO: to be moved to Element component
|
|
9861
|
+
var addedTextCancelers = elementsState.elements.map(function (element) {
|
|
9637
9862
|
var _a;
|
|
9638
|
-
return (_a = element.
|
|
9639
|
-
logger.info("A new
|
|
9640
|
-
|
|
9641
|
-
|
|
9642
|
-
|
|
9643
|
-
|
|
9644
|
-
|
|
9645
|
-
|
|
9646
|
-
|
|
9863
|
+
return (_a = element.onAddedText) === null || _a === void 0 ? void 0 : _a.call(element, function (newText) {
|
|
9864
|
+
logger.info("A new text has been added to element ".concat(element.id));
|
|
9865
|
+
rerenderWhenAnyElementChanged();
|
|
9866
|
+
});
|
|
9867
|
+
});
|
|
9868
|
+
// Listen a text deleted, then re-render the element component
|
|
9869
|
+
//TODO: to be moved to Element component
|
|
9870
|
+
var deletedTextCancelers = elementsState.elements.map(function (element) {
|
|
9871
|
+
var _a;
|
|
9872
|
+
return (_a = element.onDeletedText) === null || _a === void 0 ? void 0 : _a.call(element, function (deletedTextId) {
|
|
9873
|
+
logger.info("A text has been deleted from element ".concat(element.id));
|
|
9647
9874
|
rerenderWhenAnyElementChanged();
|
|
9648
9875
|
});
|
|
9649
9876
|
});
|
|
9650
9877
|
return function () {
|
|
9651
|
-
|
|
9652
|
-
|
|
9878
|
+
addedTextCancelers.forEach(function (canceller) { return canceller(); });
|
|
9879
|
+
deletedTextCancelers.forEach(function (canceller) { return canceller(); });
|
|
9653
9880
|
};
|
|
9654
|
-
}, [
|
|
9881
|
+
}, [elementsState.elements, onElementsChanged, rerenderWhenAnyElementChanged]);
|
|
9655
9882
|
// //Update elements tree when length of elements change
|
|
9656
9883
|
// useEffect(() => {
|
|
9657
9884
|
// updateElementsTree();
|
|
@@ -9669,11 +9896,11 @@ var Paper = function (props) {
|
|
|
9669
9896
|
//Listen command delete selected for element
|
|
9670
9897
|
React.useEffect(function () {
|
|
9671
9898
|
var listener = paperEventEmitter.onCommandDeleteSelectedElement(function () {
|
|
9672
|
-
if (selectedElement) {
|
|
9899
|
+
if (selectedElement && selectedElement.removable !== false) {
|
|
9673
9900
|
selectedElement.parentElement = undefined; //Remove parent element to avoid memory leak. This will remove the element from the parent element's childrenElements array.
|
|
9674
9901
|
var deletedChildElements = getChildOfElement(selectedElement);
|
|
9675
9902
|
var deletedElementIds_1 = __spreadArray(__spreadArray([], deletedChildElements, true), [selectedElement], false).map(function (e) { return e.id; });
|
|
9676
|
-
var prevElements =
|
|
9903
|
+
var prevElements = elementsState.elements;
|
|
9677
9904
|
var newElements = prevElements.filter(function (e) { return !deletedElementIds_1.includes(e.id); });
|
|
9678
9905
|
onElementDeleted === null || onElementDeleted === void 0 ? void 0 : onElementDeleted(selectedElement);
|
|
9679
9906
|
//Set state to re-render component
|
|
@@ -9699,14 +9926,20 @@ var Paper = function (props) {
|
|
|
9699
9926
|
return function () {
|
|
9700
9927
|
listener.off();
|
|
9701
9928
|
};
|
|
9702
|
-
}, [selectedElement, onElementSelected, onElementsChanged, onLinksChanged, getChildOfElement, paperEventEmitter, onElementDeleted, handleElementsState]);
|
|
9929
|
+
}, [selectedElement, elementsState, onElementSelected, onElementsChanged, onLinksChanged, getChildOfElement, paperEventEmitter, onElementDeleted, handleElementsState]);
|
|
9930
|
+
var removeElementLink = React.useCallback(function (elementLink) {
|
|
9931
|
+
if (elementLink.removable === false)
|
|
9932
|
+
return linksRef.current;
|
|
9933
|
+
var prevLinks = linksRef.current;
|
|
9934
|
+
var newLinks = prevLinks.filter(function (l) { return l.id !== elementLink.id; });
|
|
9935
|
+
return newLinks;
|
|
9936
|
+
}, []);
|
|
9703
9937
|
//Listen command delete selected for link
|
|
9704
9938
|
React.useEffect(function () {
|
|
9705
9939
|
var listener = paperEventEmitter.onCommandDeleteSelectedLink(function () {
|
|
9706
9940
|
if (selectedLink) {
|
|
9707
|
-
var
|
|
9708
|
-
|
|
9709
|
-
setLinks(links);
|
|
9941
|
+
var newLinks = removeElementLink(selectedLink);
|
|
9942
|
+
setLinks(newLinks);
|
|
9710
9943
|
setSelectedLink(undefined);
|
|
9711
9944
|
if (onLinksChanged) {
|
|
9712
9945
|
onLinksChanged(newLinks);
|
|
@@ -9720,11 +9953,11 @@ var Paper = function (props) {
|
|
|
9720
9953
|
return function () {
|
|
9721
9954
|
listener.off();
|
|
9722
9955
|
};
|
|
9723
|
-
}, [selectedLink, onLinksChanged, onLinkSelected,
|
|
9956
|
+
}, [selectedLink, onLinksChanged, onLinkSelected, paperEventEmitter, removeElementLink]);
|
|
9724
9957
|
//Listen command delete selected for Text
|
|
9725
9958
|
React.useEffect(function () {
|
|
9726
9959
|
var listener = paperEventEmitter.onCommandDeleteSelectedText(function () {
|
|
9727
|
-
if (selectedText) {
|
|
9960
|
+
if (selectedText && selectedText.removable !== false) {
|
|
9728
9961
|
var prevTexts = textsRef.current;
|
|
9729
9962
|
var newTexts = prevTexts.filter(function (t) { return t.id !== selectedText.id; });
|
|
9730
9963
|
setTexts(newTexts);
|
|
@@ -9813,33 +10046,59 @@ var Paper = function (props) {
|
|
|
9813
10046
|
y: yPosOnPaper
|
|
9814
10047
|
});
|
|
9815
10048
|
};
|
|
9816
|
-
var
|
|
9817
|
-
//
|
|
9818
|
-
|
|
9819
|
-
var
|
|
9820
|
-
|
|
9821
|
-
var
|
|
10049
|
+
var handleElementMoved = React.useCallback(function (element, oldPosition, paperPosition) {
|
|
10050
|
+
// Start updating the position of links connected to the selected element
|
|
10051
|
+
var childElements = getChildOfElement(element);
|
|
10052
|
+
var elementIds = __spreadArray(__spreadArray([], childElements.map(function (e) { return e.id; }), true), [element.id], false);
|
|
10053
|
+
var offsetX = element.position.x - oldPosition.x;
|
|
10054
|
+
var offsetY = element.position.y - oldPosition.y;
|
|
10055
|
+
// Update position of all points of links that are connected to the selected element
|
|
10056
|
+
var newLinks = linksRef.current.map(function (link) {
|
|
10057
|
+
var isUpdate = elementIds.includes(link.sourceElement.id) && elementIds.includes(link.targetElement.id);
|
|
10058
|
+
if (link.points && isUpdate) {
|
|
10059
|
+
link.points.forEach(function (p) {
|
|
10060
|
+
p.x += offsetX;
|
|
10061
|
+
p.y += offsetY;
|
|
10062
|
+
});
|
|
10063
|
+
}
|
|
10064
|
+
return link;
|
|
10065
|
+
});
|
|
9822
10066
|
setLinks(newLinks);
|
|
9823
|
-
|
|
9824
|
-
|
|
10067
|
+
// onLinksChanged?.(newLinks);
|
|
10068
|
+
// End updating the position of links connected to the selected element
|
|
10069
|
+
if (onElementMoved) {
|
|
10070
|
+
onElementMoved(element.position, element, paperPosition);
|
|
9825
10071
|
}
|
|
9826
|
-
|
|
9827
|
-
|
|
9828
|
-
|
|
9829
|
-
|
|
9830
|
-
|
|
9831
|
-
|
|
9832
|
-
if (onLinksChanged) {
|
|
9833
|
-
onLinksChanged(newLinks);
|
|
10072
|
+
paperEventEmitter.emitElementMoved(element, oldPosition, element.position);
|
|
10073
|
+
setMouseDownedOnPaper(false);
|
|
10074
|
+
}, [getChildOfElement, onElementMoved, paperEventEmitter]);
|
|
10075
|
+
var handleElementResized = React.useCallback(function (element, oldSize, newSize) {
|
|
10076
|
+
if (onElementResized) {
|
|
10077
|
+
onElementResized(newSize, element);
|
|
9834
10078
|
}
|
|
9835
|
-
|
|
10079
|
+
paperEventEmitter.emitElementResized(element, oldSize, newSize);
|
|
10080
|
+
setMouseDownedOnPaper(false);
|
|
10081
|
+
}, [paperEventEmitter, onElementResized]);
|
|
10082
|
+
// const handlePathChange = useCallback((path: string, id: string) => {
|
|
10083
|
+
// //Update path of element link, that changed
|
|
10084
|
+
// //const prevLinks = linksRef.current;
|
|
10085
|
+
// const updatedLink = linksRef.current.find(l => l.id === id)
|
|
10086
|
+
// if (updatedLink) {
|
|
10087
|
+
// updatedLink.path = path;
|
|
10088
|
+
// }
|
|
10089
|
+
// }, [])
|
|
10090
|
+
//TODO: to be cleaned
|
|
10091
|
+
var handlePointsOfLinkChange = React.useCallback(function (points, linkId) {
|
|
10092
|
+
var updatedLinkIndex = linksRef.current.findIndex(function (l) { return l.id === linkId; });
|
|
10093
|
+
linksRef.current[updatedLinkIndex].points = points;
|
|
10094
|
+
}, []);
|
|
9836
10095
|
var handlePortMoved = React.useCallback(function (port, elementId, oldPosition, newPosition) {
|
|
9837
10096
|
var _a;
|
|
9838
|
-
var element =
|
|
10097
|
+
var element = elementsState.elements.find(function (e) { return e.id === elementId; });
|
|
9839
10098
|
if (element) {
|
|
9840
10099
|
//set links equals a clone links to re-render links with new position
|
|
9841
10100
|
var prevLinks = linksRef.current;
|
|
9842
|
-
|
|
10101
|
+
prevLinks.map(function (link) {
|
|
9843
10102
|
var _a, _b;
|
|
9844
10103
|
if (link.sourceElement.id === elementId && link.sourcePort.id === port.id) {
|
|
9845
10104
|
link.sourcePort.position = newPosition;
|
|
@@ -9861,9 +10120,9 @@ var Paper = function (props) {
|
|
|
9861
10120
|
return link;
|
|
9862
10121
|
});
|
|
9863
10122
|
});
|
|
9864
|
-
if (onLinksChanged) {
|
|
9865
|
-
|
|
9866
|
-
}
|
|
10123
|
+
// if (onLinksChanged) {
|
|
10124
|
+
// onLinksChanged(newLinks)
|
|
10125
|
+
// }
|
|
9867
10126
|
//const newElements = elementsRef.current;
|
|
9868
10127
|
// newElements[updatedElementIndex].ports = newElements[updatedElementIndex].ports?.map(p => {
|
|
9869
10128
|
// if (p.id === port.id) {
|
|
@@ -9875,7 +10134,7 @@ var Paper = function (props) {
|
|
|
9875
10134
|
//To avoid re-render
|
|
9876
10135
|
// setElements(prev => {
|
|
9877
10136
|
// const newElements = [...prev]
|
|
9878
|
-
var updatedElement =
|
|
10137
|
+
var updatedElement = elementsState.elements.find(function (e) { return e.id === elementId; });
|
|
9879
10138
|
if (updatedElement) {
|
|
9880
10139
|
updatedElement.ports = (_a = updatedElement.ports) === null || _a === void 0 ? void 0 : _a.map(function (p) {
|
|
9881
10140
|
if (p.id === port.id) {
|
|
@@ -9891,16 +10150,32 @@ var Paper = function (props) {
|
|
|
9891
10150
|
onPortMoved(newPosition, port, element);
|
|
9892
10151
|
}
|
|
9893
10152
|
}
|
|
9894
|
-
}, [onPortMoved,
|
|
10153
|
+
}, [onPortMoved, elementsState, rerenderWhenAnyElementChanged]);
|
|
10154
|
+
React.useEffect(function () {
|
|
10155
|
+
//on port manually trigger render
|
|
10156
|
+
var off = manuallyTriggerRenderPortHandler(function (portId, elementId) {
|
|
10157
|
+
var _a;
|
|
10158
|
+
//find the element
|
|
10159
|
+
var element = elementsState.elements.find(function (e) { return e.id === elementId; });
|
|
10160
|
+
//find the port
|
|
10161
|
+
var port = (_a = element === null || element === void 0 ? void 0 : element.ports) === null || _a === void 0 ? void 0 : _a.find(function (p) { return p.id === portId; });
|
|
10162
|
+
if (!element || !port)
|
|
10163
|
+
return;
|
|
10164
|
+
//rerender links connected to the port
|
|
10165
|
+
handlePortMoved(port, elementId, __assign({}, port.position), __assign({}, port.position));
|
|
10166
|
+
});
|
|
10167
|
+
return function () {
|
|
10168
|
+
off();
|
|
10169
|
+
};
|
|
10170
|
+
}, [manuallyTriggerRenderPortHandler, handlePortMoved, elementsState]);
|
|
9895
10171
|
//Handle creating a new element link
|
|
9896
10172
|
var handlePortMouseDown = React.useCallback(function (ev, port, elementId) {
|
|
9897
10173
|
ev.stopPropagation();
|
|
9898
|
-
var element =
|
|
10174
|
+
var element = elementsState.elements.find(function (e) { return e.id === elementId; });
|
|
9899
10175
|
var paperPosition = windowsPositionToPaperPosition({
|
|
9900
10176
|
x: ev.clientX,
|
|
9901
10177
|
y: ev.clientY
|
|
9902
10178
|
}, paperContainerRef.current, zoomRef.current);
|
|
9903
|
-
console.log(paperPosition);
|
|
9904
10179
|
//broadcast port mouse down to parent component
|
|
9905
10180
|
if (element) {
|
|
9906
10181
|
onPortMouseDown === null || onPortMouseDown === void 0 ? void 0 : onPortMouseDown(port, element, paperPosition);
|
|
@@ -9916,7 +10191,7 @@ var Paper = function (props) {
|
|
|
9916
10191
|
setTempLink(newLink);
|
|
9917
10192
|
paperEventEmitter.emitElementLinkStarted(newLink);
|
|
9918
10193
|
}
|
|
9919
|
-
}, [paperEventEmitter, onPortMouseDown]);
|
|
10194
|
+
}, [paperEventEmitter, elementsState, onPortMouseDown]);
|
|
9920
10195
|
var createElementLink = React.useCallback(function (sourcePort, sourceElement, targetPort, targetElement) {
|
|
9921
10196
|
//if no onCreatingLink prop, no link will be created
|
|
9922
10197
|
if (!onCreatingLink) {
|
|
@@ -9927,14 +10202,14 @@ var Paper = function (props) {
|
|
|
9927
10202
|
return null;
|
|
9928
10203
|
//Automatic bending, if is not defined points
|
|
9929
10204
|
if (!newElementLink.points || newElementLink.points.length === 0) {
|
|
9930
|
-
var elements =
|
|
10205
|
+
var elements = elementsState.elements;
|
|
9931
10206
|
newElementLink = automationAddPointsToLink(newElementLink, elements, MAX_LINK_KNOT_COUNT);
|
|
9932
10207
|
}
|
|
9933
10208
|
return newElementLink;
|
|
9934
|
-
}, [onCreatingLink]);
|
|
10209
|
+
}, [onCreatingLink, elementsState]);
|
|
9935
10210
|
var handlePortMouseUp = React.useCallback(function (ev, port, elementId) {
|
|
9936
10211
|
ev.stopPropagation();
|
|
9937
|
-
var element =
|
|
10212
|
+
var element = elementsState.elements.find(function (e) { return e.id === elementId; });
|
|
9938
10213
|
var paperPosition = windowsPositionToPaperPosition({
|
|
9939
10214
|
x: ev.clientX,
|
|
9940
10215
|
y: ev.clientY
|
|
@@ -9950,7 +10225,7 @@ var Paper = function (props) {
|
|
|
9950
10225
|
var newElementLink = null;
|
|
9951
10226
|
if (isMouseUpOnNotSelf) {
|
|
9952
10227
|
var _a = tempLinkRef.current, sourcePort = _a.sourcePort, sourceElement = _a.sourceElement;
|
|
9953
|
-
var targetElement =
|
|
10228
|
+
var targetElement = elementsState.elements.find(function (e) { return e.id === elementId; });
|
|
9954
10229
|
newElementLink = createElementLink(sourcePort, sourceElement, port, targetElement);
|
|
9955
10230
|
}
|
|
9956
10231
|
if (newElementLink) {
|
|
@@ -9967,7 +10242,7 @@ var Paper = function (props) {
|
|
|
9967
10242
|
}
|
|
9968
10243
|
setTempLink(null);
|
|
9969
10244
|
}
|
|
9970
|
-
}, [paperEventEmitter, createElementLink, onPortMouseUp, onLinksChanged]);
|
|
10245
|
+
}, [paperEventEmitter, elementsState, createElementLink, onPortMouseUp, onLinksChanged]);
|
|
9971
10246
|
// const handlePortsChanged = useCallback((ports: IPort[], elementId: string) => {
|
|
9972
10247
|
// const element = elementsRef.current.find(e => e.id === elementId);
|
|
9973
10248
|
// if (element) {
|
|
@@ -10066,19 +10341,6 @@ var Paper = function (props) {
|
|
|
10066
10341
|
var handleDeselectLink = function (link, index) {
|
|
10067
10342
|
setSelectedLink(undefined);
|
|
10068
10343
|
};
|
|
10069
|
-
//update absolute position of element and absolute position of children elements
|
|
10070
|
-
var updateElementPosition = function (element, x, y, isRelativePosition) {
|
|
10071
|
-
if (isRelativePosition) {
|
|
10072
|
-
element.position.x = x;
|
|
10073
|
-
element.position.y = y;
|
|
10074
|
-
}
|
|
10075
|
-
else {
|
|
10076
|
-
var relativePosition = transformAbsPositionToElementRelativePosition({ x: x, y: y }, element);
|
|
10077
|
-
element.position.x = relativePosition.x;
|
|
10078
|
-
element.position.y = relativePosition.y;
|
|
10079
|
-
}
|
|
10080
|
-
return element;
|
|
10081
|
-
};
|
|
10082
10344
|
/*
|
|
10083
10345
|
Cache to avoid re-initializing the function when the component re-renders to
|
|
10084
10346
|
avoid causing the components using it to re-render unnecessarily
|
|
@@ -10108,17 +10370,16 @@ var Paper = function (props) {
|
|
|
10108
10370
|
}, [handleLinkLabelContentChanged]);
|
|
10109
10371
|
var handleClickLinkDelete = React.useCallback(function (link, index) {
|
|
10110
10372
|
return function () {
|
|
10111
|
-
var
|
|
10112
|
-
var newLinks = __spreadArray([], prevLinks, true);
|
|
10113
|
-
newLinks.splice(index, 1);
|
|
10373
|
+
var newLinks = removeElementLink(link);
|
|
10114
10374
|
setLinks(newLinks);
|
|
10375
|
+
setSelectedLink(undefined);
|
|
10115
10376
|
if (onLinksChanged) {
|
|
10116
10377
|
onLinksChanged(newLinks);
|
|
10117
10378
|
}
|
|
10118
10379
|
};
|
|
10119
|
-
}, [onLinksChanged]);
|
|
10380
|
+
}, [onLinksChanged, removeElementLink]);
|
|
10120
10381
|
var handleMouseUpAtLinkedPortPlaceholder = React.useCallback(function (link, position, targetElementId) {
|
|
10121
|
-
var targetElement =
|
|
10382
|
+
var targetElement = elementsState.elements.find(function (e) { return e.id === targetElementId; });
|
|
10122
10383
|
if (!targetElement)
|
|
10123
10384
|
return;
|
|
10124
10385
|
logger.info("A port could have been created at position ".concat(JSON.stringify(position), " on element ").concat(targetElementId, " by linking from element ").concat(link.sourceElement.id));
|
|
@@ -10148,20 +10409,20 @@ var Paper = function (props) {
|
|
|
10148
10409
|
//Clear tempLink
|
|
10149
10410
|
setTempLink(null);
|
|
10150
10411
|
paperEventEmitter.emitElementLinkEnded();
|
|
10151
|
-
}, [onCreatingPortByLinking, createElementLink, paperEventEmitter, onLinksChanged]);
|
|
10152
|
-
|
|
10153
|
-
|
|
10154
|
-
|
|
10155
|
-
|
|
10156
|
-
|
|
10157
|
-
|
|
10158
|
-
|
|
10159
|
-
|
|
10160
|
-
|
|
10161
|
-
|
|
10162
|
-
|
|
10163
|
-
|
|
10164
|
-
}, [rerenderWhenAnyElementChanged])
|
|
10412
|
+
}, [onCreatingPortByLinking, elementsState, createElementLink, paperEventEmitter, onLinksChanged]);
|
|
10413
|
+
// const handleElementTextChange = useCallback((elementId: string, textId: string, newContent: string) => {
|
|
10414
|
+
// // const prevElms = elementsRef.current;
|
|
10415
|
+
// elementsState.elements.forEach(curEle => {
|
|
10416
|
+
// //Find changed text of element to update the content for it.
|
|
10417
|
+
// if (curEle.id === elementId && curEle.texts) {
|
|
10418
|
+
// const updatedTextId = curEle.texts.findIndex(t => t.id === textId)
|
|
10419
|
+
// if (updatedTextId !== undefined) {
|
|
10420
|
+
// curEle.texts[updatedTextId].content = newContent;
|
|
10421
|
+
// }
|
|
10422
|
+
// }
|
|
10423
|
+
// })
|
|
10424
|
+
// rerenderWhenAnyElementChanged();
|
|
10425
|
+
// }, [rerenderWhenAnyElementChanged, elementsState])
|
|
10165
10426
|
var handleElementClicked = React.useCallback(function (elementId, e, ref) {
|
|
10166
10427
|
e.stopPropagation();
|
|
10167
10428
|
var tempLink = tempLinkRef.current;
|
|
@@ -10171,7 +10432,7 @@ var Paper = function (props) {
|
|
|
10171
10432
|
paperEventEmitter.emitElementLinkEnded();
|
|
10172
10433
|
}
|
|
10173
10434
|
else {
|
|
10174
|
-
var element =
|
|
10435
|
+
var element = elementsState.elements.find(function (e) { return e.id === elementId; });
|
|
10175
10436
|
// Select the element only if it is selectable
|
|
10176
10437
|
if (element && element.selectable) {
|
|
10177
10438
|
setSelectedElementSVG(ref);
|
|
@@ -10181,24 +10442,24 @@ var Paper = function (props) {
|
|
|
10181
10442
|
}
|
|
10182
10443
|
}
|
|
10183
10444
|
setMouseDownedOnPaper(false);
|
|
10184
|
-
}, [paperEventEmitter]);
|
|
10445
|
+
}, [paperEventEmitter, elementsState.elements]);
|
|
10185
10446
|
var handlePortContextMenu = React.useCallback(function (port, elementId, e) {
|
|
10186
10447
|
e.preventDefault();
|
|
10187
|
-
var element =
|
|
10448
|
+
var element = elementsState.elements.find(function (e) { return e.id === elementId; });
|
|
10188
10449
|
if (element) {
|
|
10189
10450
|
onPortContextMenu === null || onPortContextMenu === void 0 ? void 0 : onPortContextMenu(port, element, e);
|
|
10190
10451
|
}
|
|
10191
|
-
}, [onPortContextMenu]);
|
|
10452
|
+
}, [onPortContextMenu, elementsState]);
|
|
10192
10453
|
var handleContextMenu = React.useCallback(function (elementId, e, ref) {
|
|
10193
10454
|
e.preventDefault();
|
|
10194
|
-
var element =
|
|
10455
|
+
var element = elementsState.elements.find(function (e) { return e.id === elementId; });
|
|
10195
10456
|
if (element) {
|
|
10196
10457
|
handleElementClicked(elementId, e, ref);
|
|
10197
10458
|
onElementContextMenu === null || onElementContextMenu === void 0 ? void 0 : onElementContextMenu(element, e);
|
|
10198
10459
|
}
|
|
10199
|
-
}, [onElementContextMenu, handleElementClicked]);
|
|
10460
|
+
}, [onElementContextMenu, handleElementClicked, elementsState]);
|
|
10200
10461
|
var handleMouseUp = React.useCallback(function (ev, elementId) {
|
|
10201
|
-
var element =
|
|
10462
|
+
var element = elementsState.elements.find(function (ele) { return ele.id === elementId; });
|
|
10202
10463
|
var paperPosition = windowsPositionToPaperPosition({
|
|
10203
10464
|
x: ev.clientX,
|
|
10204
10465
|
y: ev.clientY
|
|
@@ -10206,9 +10467,9 @@ var Paper = function (props) {
|
|
|
10206
10467
|
if (element) {
|
|
10207
10468
|
onElementMouseUp === null || onElementMouseUp === void 0 ? void 0 : onElementMouseUp(ev, element, paperPosition);
|
|
10208
10469
|
}
|
|
10209
|
-
}, [onElementMouseUp]);
|
|
10470
|
+
}, [onElementMouseUp, elementsState]);
|
|
10210
10471
|
var handleMouseDown = React.useCallback(function (ev, elementId) {
|
|
10211
|
-
var element =
|
|
10472
|
+
var element = elementsState.elements.find(function (ele) { return ele.id === elementId; });
|
|
10212
10473
|
var paperPosition = windowsPositionToPaperPosition({
|
|
10213
10474
|
x: ev.clientX,
|
|
10214
10475
|
y: ev.clientY
|
|
@@ -10216,9 +10477,9 @@ var Paper = function (props) {
|
|
|
10216
10477
|
if (element) {
|
|
10217
10478
|
onElementMouseDown === null || onElementMouseDown === void 0 ? void 0 : onElementMouseDown(ev, element, paperPosition);
|
|
10218
10479
|
}
|
|
10219
|
-
}, [onElementMouseDown]);
|
|
10480
|
+
}, [onElementMouseDown, elementsState]);
|
|
10220
10481
|
var handleMouseMove = React.useCallback(function (ev, elementId) {
|
|
10221
|
-
var element =
|
|
10482
|
+
var element = elementsState.elements.find(function (ele) { return ele.id === elementId; });
|
|
10222
10483
|
var paperPosition = windowsPositionToPaperPosition({
|
|
10223
10484
|
x: ev.clientX,
|
|
10224
10485
|
y: ev.clientY
|
|
@@ -10226,9 +10487,9 @@ var Paper = function (props) {
|
|
|
10226
10487
|
if (element) {
|
|
10227
10488
|
onElementMouseMove === null || onElementMouseMove === void 0 ? void 0 : onElementMouseMove(ev, element, paperPosition);
|
|
10228
10489
|
}
|
|
10229
|
-
}, [onElementMouseMove]);
|
|
10490
|
+
}, [onElementMouseMove, elementsState]);
|
|
10230
10491
|
var handleMouseLeave = React.useCallback(function (ev, elementId) {
|
|
10231
|
-
var element =
|
|
10492
|
+
var element = elementsState.elements.find(function (ele) { return ele.id === elementId; });
|
|
10232
10493
|
var paperPosition = windowsPositionToPaperPosition({
|
|
10233
10494
|
x: ev.clientX,
|
|
10234
10495
|
y: ev.clientY
|
|
@@ -10236,109 +10497,38 @@ var Paper = function (props) {
|
|
|
10236
10497
|
if (element) {
|
|
10237
10498
|
onElementMouseLeave === null || onElementMouseLeave === void 0 ? void 0 : onElementMouseLeave(ev, element, paperPosition);
|
|
10238
10499
|
}
|
|
10239
|
-
}, [onElementMouseLeave]);
|
|
10500
|
+
}, [onElementMouseLeave, elementsState]);
|
|
10240
10501
|
var renderElementInTree = React.useCallback(function (element) {
|
|
10502
|
+
var _a;
|
|
10241
10503
|
logger.info("Rendering element tree for element ".concat(element.id));
|
|
10242
10504
|
//use the defined react element or the default Element component
|
|
10243
10505
|
var ReactElement = element.reactElement || Element$1;
|
|
10244
10506
|
return (React.createElement("g", { id: "group-of-element-".concat(element.id), key: element.id },
|
|
10245
|
-
React.createElement(ReactElement, { key: "element-".concat(element.id
|
|
10507
|
+
React.createElement(ReactElement, { key: "element-".concat(element.id, "-").concat(element.version), element: element,
|
|
10508
|
+
//id={element.id}
|
|
10509
|
+
//ref={(refDOM) => element.DOM = refDOM}
|
|
10510
|
+
//height={element.size.height}
|
|
10511
|
+
//width={element.size.width}
|
|
10512
|
+
//x={element.positionAnchor === PositioningAnchor.Center ? element.position.x - element.size.width / 2 : element.position.x}
|
|
10513
|
+
//y={element.positionAnchor === PositioningAnchor.Center ? element.position.y - element.size.height / 2 : element.position.y}
|
|
10514
|
+
//selectable={element.selectable}
|
|
10515
|
+
onClick: handleElementClicked, onContextMenu: handleContextMenu, onMouseUp: handleMouseUp, onMouseDown: handleMouseDown, onMouseMove: handleMouseMove, onMouseLeave: handleMouseLeave, onMoving: onElementMoving, onMoved: handleElementMoved, onResized: handleElementResized, container: paperContainerRef.current,
|
|
10516
|
+
// renderShape={element.renderShape}
|
|
10517
|
+
// cssClass={element.cssClass}
|
|
10518
|
+
// texts={element.texts}
|
|
10519
|
+
// ports={element.ports}
|
|
10520
|
+
// portMoveableAreas={element.portMoveableAreas}
|
|
10521
|
+
// portSlideRailSVGClassName={element.portSlideRailSVGClassName}
|
|
10522
|
+
// portDirection={element.portDirection}
|
|
10523
|
+
// defaultPortSize={element.defaultPortSize}
|
|
10524
|
+
onPortMoved: handlePortMoved, onPortMouseDown: handlePortMouseDown, onPortMouseUp: handlePortMouseUp,
|
|
10246
10525
|
// onPortsChanged={handlePortsChanged}
|
|
10247
10526
|
onPortContextMenu: handlePortContextMenu,
|
|
10248
10527
|
// portPlaceholderShape={(<Circle x={0} y={0} width={10} height={10} fill='red' positioningAnchor={PositioningAnchor.Center} />)}
|
|
10249
|
-
onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder,
|
|
10250
|
-
|
|
10251
|
-
|
|
10252
|
-
|
|
10253
|
-
enabled: true,
|
|
10254
|
-
keepRatio: true
|
|
10255
|
-
}, objectX: selectedElementAbsPosition === null || selectedElementAbsPosition === void 0 ? void 0 : selectedElementAbsPosition.x, objectY: selectedElementAbsPosition === null || selectedElementAbsPosition === void 0 ? void 0 : selectedElementAbsPosition.y, width: selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.size.width, height: selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.size.height, zoom: zoom, draggingByDefault: autoEnabledDraggingSelectedElement,
|
|
10256
|
-
//movingOffsetThreshold: ELEMENT_MOVING_OFFSET_THRESHOLD,
|
|
10257
|
-
onMouseDown: function (ev) {
|
|
10258
|
-
if (selectedElement) {
|
|
10259
|
-
var paperPosition = windowsPositionToPaperPosition({
|
|
10260
|
-
x: ev.clientX,
|
|
10261
|
-
y: ev.clientY
|
|
10262
|
-
}, paperContainerRef.current, zoomRef.current);
|
|
10263
|
-
onElementMouseDown === null || onElementMouseDown === void 0 ? void 0 : onElementMouseDown(ev, selectedElement, paperPosition);
|
|
10264
|
-
}
|
|
10265
|
-
}, onMouseUp: function (ev) {
|
|
10266
|
-
if (selectedElement) {
|
|
10267
|
-
var paperPosition = windowsPositionToPaperPosition({
|
|
10268
|
-
x: ev.clientX,
|
|
10269
|
-
y: ev.clientY
|
|
10270
|
-
}, paperContainerRef.current, zoomRef.current);
|
|
10271
|
-
onElementMouseUp === null || onElementMouseUp === void 0 ? void 0 : onElementMouseUp(ev, selectedElement, paperPosition);
|
|
10272
|
-
}
|
|
10273
|
-
}, onMove: function (newX, newY) {
|
|
10274
|
-
if (!selectedElement)
|
|
10275
|
-
return;
|
|
10276
|
-
var oldPosition = __assign({}, selectedElement.position);
|
|
10277
|
-
// Relative position to the paper container
|
|
10278
|
-
var paperPosition = {
|
|
10279
|
-
x: newX,
|
|
10280
|
-
y: newY
|
|
10281
|
-
};
|
|
10282
|
-
//Call onElementMoving to check if the element should be moved or not
|
|
10283
|
-
if (onElementMoving) {
|
|
10284
|
-
var isSkip = onElementMoving(selectedElement, paperPosition);
|
|
10285
|
-
if (!isSkip) {
|
|
10286
|
-
return;
|
|
10287
|
-
}
|
|
10288
|
-
}
|
|
10289
|
-
logger.info("Element ".concat(selectedElement.id, " is dragging to position ").concat(JSON.stringify(paperPosition)));
|
|
10290
|
-
//Adjust position of element if it should move as a port on parent port area
|
|
10291
|
-
if (selectedElement.moveAsPortOnParent && selectedElement.parentElement) {
|
|
10292
|
-
paperPosition = adjustElementPositionOnParentPortArea(selectedElement, paperPosition, true);
|
|
10293
|
-
updateElementPosition(selectedElement, paperPosition.x, paperPosition.y, true);
|
|
10294
|
-
}
|
|
10295
|
-
else {
|
|
10296
|
-
updateElementPosition(selectedElement, paperPosition.x, paperPosition.y, false);
|
|
10297
|
-
}
|
|
10298
|
-
//let newElementPosition = updateElementPosition(selectedElement, newPosition.x, newPosition.y, true)
|
|
10299
|
-
var indexSelectedElement = elementsRef.current.findIndex(function (e) { return e.id === selectedElement.id; });
|
|
10300
|
-
logger.info("Element ".concat(selectedElement.id, " is moving to relative position ").concat(JSON.stringify(selectedElement.position)));
|
|
10301
|
-
// Start updating the position of links connected to the selected element
|
|
10302
|
-
var childElements = getChildOfElement(selectedElement);
|
|
10303
|
-
var elementIds = __spreadArray(__spreadArray([], childElements.map(function (e) { return e.id; }), true), [selectedElement.id], false);
|
|
10304
|
-
var offsetX = selectedElement.position.x - oldPosition.x;
|
|
10305
|
-
var offsetY = selectedElement.position.y - oldPosition.y;
|
|
10306
|
-
// Update position of all points of links that are connected to the selected element
|
|
10307
|
-
var newLinks = linksRef.current.map(function (link) {
|
|
10308
|
-
var isUpdate = elementIds.includes(link.sourceElement.id) && elementIds.includes(link.targetElement.id);
|
|
10309
|
-
if (link.points && isUpdate) {
|
|
10310
|
-
link.points.forEach(function (p) {
|
|
10311
|
-
p.x += offsetX;
|
|
10312
|
-
p.y += offsetY;
|
|
10313
|
-
});
|
|
10314
|
-
}
|
|
10315
|
-
return link;
|
|
10316
|
-
});
|
|
10317
|
-
onLinksChanged === null || onLinksChanged === void 0 ? void 0 : onLinksChanged(newLinks);
|
|
10318
|
-
// End updating the position of links connected to the selected element
|
|
10319
|
-
//Set state to re-render UI with new position
|
|
10320
|
-
rerenderWhenAnyElementChanged();
|
|
10321
|
-
if (onElementMoved) {
|
|
10322
|
-
console.log('onElementMoved', selectedElement.position, paperPosition);
|
|
10323
|
-
onElementMoved(selectedElement.position, selectedElement, indexSelectedElement, paperPosition);
|
|
10324
|
-
}
|
|
10325
|
-
paperEventEmitter.emitElementMoved(selectedElement, oldPosition, selectedElement.position);
|
|
10326
|
-
setMouseDownedOnPaper(false);
|
|
10327
|
-
}, onResize: function (width, height) {
|
|
10328
|
-
if (!selectedElement)
|
|
10329
|
-
return;
|
|
10330
|
-
var indexSelectedElement = elementsRef.current.findIndex(function (e) { return e.id === selectedElement.id; });
|
|
10331
|
-
var oldSize = selectedElement.size;
|
|
10332
|
-
var newSize = { width: width, height: height };
|
|
10333
|
-
elementsRef.current[indexSelectedElement].size = newSize;
|
|
10334
|
-
rerenderWhenAnyElementChanged();
|
|
10335
|
-
if (onElementResized) {
|
|
10336
|
-
onElementResized(newSize, selectedElement, indexSelectedElement);
|
|
10337
|
-
}
|
|
10338
|
-
paperEventEmitter.emitElementResized(selectedElement, oldSize, newSize);
|
|
10339
|
-
setMouseDownedOnPaper(false);
|
|
10340
|
-
} }))));
|
|
10341
|
-
}, [manuallyTriggerRenderPortHandler, handleElementClicked, handleContextMenu, handleMouseUp, handleMouseDown, handleMouseMove, handleMouseLeave, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handlePortContextMenu, handleMouseUpAtLinkedPortPlaceholder, handleElementTextChange, selectedElement, selectedElementSVG, selectedElementAbsPosition === null || selectedElementAbsPosition === void 0 ? void 0 : selectedElementAbsPosition.x, selectedElementAbsPosition === null || selectedElementAbsPosition === void 0 ? void 0 : selectedElementAbsPosition.y, zoom, autoEnabledDraggingSelectedElement, getChildOfElement, paperEventEmitter, onElementResized, onElementMoved, onElementMouseDown, onElementMouseUp, onLinksChanged, onElementMoving, rerenderWhenAnyElementChanged]);
|
|
10528
|
+
onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder,
|
|
10529
|
+
// onTextUpdated={handleElementTextChange}
|
|
10530
|
+
onManuallyTriggerRenderPort: manuallyTriggerRenderPortHandler, parentDOM: (_a = element.parentElementInTree) === null || _a === void 0 ? void 0 : _a.DOM, beingSelected: (selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.id) === element.id, draggingByDefault: autoEnabledDraggingSelectedElement && (selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.id) === element.id }, element.childrenElementsInTree && element.childrenElementsInTree.map(renderElementInTree))));
|
|
10531
|
+
}, [handleElementClicked, handleContextMenu, handleMouseUp, handleMouseDown, handleMouseMove, handleMouseLeave, onElementMoving, handleElementMoved, handleElementResized, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handlePortContextMenu, handleMouseUpAtLinkedPortPlaceholder, manuallyTriggerRenderPortHandler, selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.id, autoEnabledDraggingSelectedElement]);
|
|
10342
10532
|
var ElementsInTree = React.useMemo(function () {
|
|
10343
10533
|
return elementsState.elementsInTree.map(function (element, index) {
|
|
10344
10534
|
return renderElementInTree(element);
|
|
@@ -10351,18 +10541,11 @@ var Paper = function (props) {
|
|
|
10351
10541
|
links && links.map(function (link, index) {
|
|
10352
10542
|
if (!link.targetElement || !link.targetPort)
|
|
10353
10543
|
return null;
|
|
10354
|
-
return (React.createElement(ElementLink, { key: link.id, id: link.id, path: link.path,
|
|
10355
|
-
|
|
10356
|
-
|
|
10357
|
-
}, targetPosition: {
|
|
10358
|
-
x: getAbsolutePosition(link.targetElement).x + link.targetPort.position.x,
|
|
10359
|
-
y: getAbsolutePosition(link.targetElement).y + link.targetPort.position.y
|
|
10360
|
-
}, points: link.points, onPathChanged: handlePathChange, onPointsChanged: handlePointsOfLinkChange, onClickDelete: handleClickLinkDelete(link, index), onSelected: function () { return handleSelectLink(link); }, onDeselected: function () { return handleDeselectLink(); }, container: paperContainerRef.current, markerStart: link.markerStart, markerEnd: link.markerEnd, markerDistanceFromPort: link.markerDistanceFromPort, markerSize: link.markerSize, label: link.label, sourceLabel: link.sourceLabel, targetLabel: link.targetLabel, onLabelMoved: onLabelMoved(index), onLabelResized: onLabelResized(index), onLabelContentChanged: onLabelContentChanged(index) }));
|
|
10544
|
+
return (React.createElement(ElementLink, { key: link.id, id: link.id, path: link.path, sourcePositionX: getAbsolutePosition(link.sourceElement).x + link.sourcePort.position.x, sourcePositionY: getAbsolutePosition(link.sourceElement).y + link.sourcePort.position.y, targetPositionX: getAbsolutePosition(link.targetElement).x + link.targetPort.position.x, targetPositionY: getAbsolutePosition(link.targetElement).y + link.targetPort.position.y, points: link.points,
|
|
10545
|
+
//onPathChanged={handlePathChange}
|
|
10546
|
+
onPointsChanged: handlePointsOfLinkChange, onClickDelete: handleClickLinkDelete(link, index), onSelected: function () { return handleSelectLink(link); }, onDeselected: function () { return handleDeselectLink(); }, container: paperContainerRef.current, markerStart: link.markerStart, markerEnd: link.markerEnd, markerDistanceFromPort: link.markerDistanceFromPort, markerSize: link.markerSize, label: link.label, sourceLabel: link.sourceLabel, targetLabel: link.targetLabel, onLabelMoved: onLabelMoved(index), onLabelResized: onLabelResized(index), onLabelContentChanged: onLabelContentChanged(index) }));
|
|
10361
10547
|
}),
|
|
10362
|
-
(tempLink === null || tempLink === void 0 ? void 0 : tempLink.tempTargetPosition) && React.createElement(ElementLink, { id: tempLink.id, points: tempLink.points,
|
|
10363
|
-
x: getAbsolutePosition(tempLink.sourceElement).x + tempLink.sourcePort.position.x,
|
|
10364
|
-
y: getAbsolutePosition(tempLink.sourceElement).y + tempLink.sourcePort.position.y
|
|
10365
|
-
}, targetPosition: tempLink.tempTargetPosition, container: paperContainerRef.current, markerStart: tempLink.markerStart, markerEnd: tempLink.markerEnd, markerDistanceFromPort: tempLink.markerDistanceFromPort, markerSize: tempLink.markerSize }),
|
|
10548
|
+
(tempLink === null || tempLink === void 0 ? void 0 : tempLink.tempTargetPosition) && React.createElement(ElementLink, { id: tempLink.id, points: tempLink.points, sourcePositionX: getAbsolutePosition(tempLink.sourceElement).x + tempLink.sourcePort.position.x, sourcePositionY: getAbsolutePosition(tempLink.sourceElement).y + tempLink.sourcePort.position.y, targetPositionX: tempLink.tempTargetPosition.x, targetPositionY: tempLink.tempTargetPosition.y, container: paperContainerRef.current, markerStart: tempLink.markerStart, markerEnd: tempLink.markerEnd, markerDistanceFromPort: tempLink.markerDistanceFromPort, markerSize: tempLink.markerSize }),
|
|
10366
10549
|
texts.map(function (text, index) { return (React.createElement(Text$1, { key: text.id, id: text.id, x: text.position.x, y: text.position.y, width: text.size.width, height: text.size.height, editable: text.editable, selectable: text.selectable, fontSize: text.fontSize, border: text.border, container: paperContainerRef.current, content: text.content, align: text.align, onSelected: function () {
|
|
10367
10550
|
setSelectedText(text);
|
|
10368
10551
|
} })); })),
|
|
@@ -10471,7 +10654,7 @@ var Editor = function (_a) {
|
|
|
10471
10654
|
if (editorContext.onElementMovingHandler) {
|
|
10472
10655
|
return editorContext.onElementMovingHandler(element, newPaperPosition);
|
|
10473
10656
|
}
|
|
10474
|
-
return true;
|
|
10657
|
+
return { horizontalAllowed: true, verticalAllowed: true };
|
|
10475
10658
|
}, [editorContext]);
|
|
10476
10659
|
var handleOnCreatingPortByLinking = React.useCallback(function (sourceElement, sourcePort, targetElement, position) {
|
|
10477
10660
|
if (editorContext.onCreatingPortByLinkingHandler) {
|
|
@@ -10489,13 +10672,14 @@ var Editor = function (_a) {
|
|
|
10489
10672
|
editorContext.onPaperMouseUpHandler(position);
|
|
10490
10673
|
}, [editorContext]);
|
|
10491
10674
|
var handleElementRemoved = React.useCallback(function (element) {
|
|
10492
|
-
|
|
10675
|
+
var _a;
|
|
10676
|
+
editorContext.onElementRemovedHandler(element.id, (_a = element.parentElement) === null || _a === void 0 ? void 0 : _a.id);
|
|
10493
10677
|
}, [editorContext]);
|
|
10494
10678
|
return (React.createElement(EditorConfigurationContextProvider, { value: editorContext.configuration },
|
|
10495
10679
|
React.createElement(ZoomContextProvider, null,
|
|
10496
10680
|
React.createElement(Paper$1, { key: "paper", size: { width: width, height: height }, elements: elements, links: links, texts: texts, onPaperClicked: handlePaperClicked, onPortMouseDown: handlePortMouseDown, onPortMouseUp: handlePortMouseUp, onPortMoved: handlePortMoved, onPortSelected: handlePortSelected,
|
|
10497
10681
|
//onPortsChanged={handlePortsChanged}
|
|
10498
|
-
onPortContextMenu: handlePortContextMenu, onElementContextMenu: handleElementContextMenu, onElementMoved: handleElementMoved, onElementResized: handleElementResized, onElementSelected: handleElementSelected, onElementMouseLeave: handleElementMouseLeave, onElementMouseMove: handleElementMouseMove, onElementMouseDown: handleElementMouseDown, onElementMouseUp: handleElementMouseUp, onElementDeleted: handleElementRemoved, onElementsChanged: handleElementsChanged, onCreatingLink: handleOnCreatingLink, onElementMoving: handleOnElementMoving, onCreatingPortByLinking: handleOnCreatingPortByLinking, onLinkSelected: handleLinkSelected, onLinksChanged: handleLinksChanged, onTextSelected: handleTextSelected, onTextsChanged: handleTextsChanged, onPaperMouseMoved: handlePaperMouseMoved, onPaperMouseUp: handlePaperMouseUp, onPaperMouseDown: handlePaperMouseDown, manuallyTriggerRenderElementHandler: editorContext.manuallyTriggerRenderElementHandler.bind(editorContext), manuallyTriggerRenderPortHandler: editorContext.manuallyTriggerRenderPortHandler.bind(editorContext), manuallySelectElementHandler: editorContext.manuallySelectElementHandler.bind(editorContext), manuallyTriggerDraggingElementHandler: editorContext.manuallyTriggerDraggingElementHandler.bind(editorContext), manuallyTriggerStartedLinkingHandler: editorContext.manuallyTriggerStartedLinkingHandler.bind(editorContext) }))));
|
|
10682
|
+
onPortContextMenu: handlePortContextMenu, onElementContextMenu: handleElementContextMenu, onElementMoved: handleElementMoved, onElementResized: handleElementResized, onElementSelected: handleElementSelected, onElementMouseLeave: handleElementMouseLeave, onElementMouseMove: handleElementMouseMove, onElementMouseDown: handleElementMouseDown, onElementMouseUp: handleElementMouseUp, onElementDeleted: handleElementRemoved, onElementsChanged: handleElementsChanged, onCreatingLink: handleOnCreatingLink, onElementMoving: handleOnElementMoving, onCreatingPortByLinking: handleOnCreatingPortByLinking, onLinkSelected: handleLinkSelected, onLinksChanged: handleLinksChanged, onTextSelected: handleTextSelected, onTextsChanged: handleTextsChanged, onPaperMouseMoved: handlePaperMouseMoved, onPaperMouseUp: handlePaperMouseUp, onPaperMouseDown: handlePaperMouseDown, manuallyTriggerRenderElementsHandler: editorContext.manuallyTriggerRenderElementsHandler.bind(editorContext), manuallyTriggerRenderElementHandler: editorContext.manuallyTriggerRenderElementHandler.bind(editorContext), manuallyTriggerRenderPortHandler: editorContext.manuallyTriggerRenderPortHandler.bind(editorContext), manuallySelectElementHandler: editorContext.manuallySelectElementHandler.bind(editorContext), manuallyTriggerDraggingElementHandler: editorContext.manuallyTriggerDraggingElementHandler.bind(editorContext), manuallyTriggerStartedLinkingHandler: editorContext.manuallyTriggerStartedLinkingHandler.bind(editorContext) }))));
|
|
10499
10683
|
};
|
|
10500
10684
|
|
|
10501
10685
|
exports.CircleRC = Circle;
|