orcasvn-react-diagrams 0.1.66 → 0.1.71
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 +675 -510
- package/dist/cjs/types/components/paper.d.ts +6 -4
- package/dist/cjs/types/mocks/diamondElement.d.ts +1 -1
- package/dist/cjs/types/mocks/rectangularFrameElement.d.ts +1 -1
- package/dist/cjs/types/models/IEditorContext.d.ts +4 -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 +4 -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 +675 -510
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/components/paper.d.ts +6 -4
- package/dist/esm/types/mocks/diamondElement.d.ts +1 -1
- package/dist/esm/types/mocks/rectangularFrameElement.d.ts +1 -1
- package/dist/esm/types/models/IEditorContext.d.ts +4 -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 +4 -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 +42 -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
|
}
|
|
@@ -7446,10 +7489,10 @@ var getAbsolutePosition = function (element) {
|
|
|
7446
7489
|
x: element.position.x,
|
|
7447
7490
|
y: element.position.y,
|
|
7448
7491
|
};
|
|
7449
|
-
if (element.positionAnchor ===
|
|
7450
|
-
|
|
7451
|
-
|
|
7452
|
-
}
|
|
7492
|
+
// if (element.positionAnchor === PositioningAnchor.Center) {
|
|
7493
|
+
// elemenetPositionWithTopLeftAnchor.x -= element.size.width / 2;
|
|
7494
|
+
// elemenetPositionWithTopLeftAnchor.y -= element.size.height / 2;
|
|
7495
|
+
// }
|
|
7453
7496
|
if (!parentElement) {
|
|
7454
7497
|
return __assign({}, elemenetPositionWithTopLeftAnchor);
|
|
7455
7498
|
}
|
|
@@ -7479,10 +7522,10 @@ var transformAbsPositionToElementRelativePosition = function (position, element)
|
|
|
7479
7522
|
x: position.x - absoluteParentElement.x,
|
|
7480
7523
|
y: position.y - absoluteParentElement.y,
|
|
7481
7524
|
};
|
|
7482
|
-
if (element.positionAnchor ===
|
|
7483
|
-
|
|
7484
|
-
|
|
7485
|
-
}
|
|
7525
|
+
// if (element.positionAnchor === PositioningAnchor.Center) {
|
|
7526
|
+
// result.x += element.size.width / 2;
|
|
7527
|
+
// result.y += element.size.height / 2;
|
|
7528
|
+
// }
|
|
7486
7529
|
return result;
|
|
7487
7530
|
};
|
|
7488
7531
|
var transformAbsPositionToRelativePositionInsideElement = function (absolutePosition, parentAbsolutePosition) {
|
|
@@ -7891,7 +7934,10 @@ var SelectionFrame = function (props) {
|
|
|
7891
7934
|
}
|
|
7892
7935
|
return (React.createElement(React.Fragment, null,
|
|
7893
7936
|
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:
|
|
7937
|
+
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) {
|
|
7938
|
+
propOnMouseUp === null || propOnMouseUp === void 0 ? void 0 : propOnMouseUp(ev);
|
|
7939
|
+
setDraggingRect(false);
|
|
7940
|
+
} }),
|
|
7895
7941
|
propResizability.enabled ?
|
|
7896
7942
|
(React.createElement("circle", { cursor: 'se-resize', cx: leftX + width, cy: topY + height, r: r, fill: 'blue', stroke: 'blue', onMouseDown: circleHandleMouseDown })) : null));
|
|
7897
7943
|
};
|
|
@@ -7899,10 +7945,7 @@ var SelectionFrame = function (props) {
|
|
|
7899
7945
|
var useSelectionFrame = function (props) {
|
|
7900
7946
|
React.useEffect(function () {
|
|
7901
7947
|
//log selection frame rendering
|
|
7902
|
-
if (props.targetSVGElement) {
|
|
7903
|
-
console.debug('Rendering SelectionFrame for targetSVGElement:', props.targetSVGElement);
|
|
7904
|
-
}
|
|
7905
|
-
else {
|
|
7948
|
+
if (!props.targetSVGElement) {
|
|
7906
7949
|
console.warn('No targetSVGElement provided for SelectionFrame.');
|
|
7907
7950
|
}
|
|
7908
7951
|
if (props.targetSVGElement && props.container) {
|
|
@@ -8464,7 +8507,9 @@ function CloseIcon(_a) {
|
|
|
8464
8507
|
// 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
8508
|
var IElementLink = function (_a) {
|
|
8466
8509
|
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,
|
|
8510
|
+
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,
|
|
8511
|
+
//TODO: get rid of this
|
|
8512
|
+
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
8513
|
var _g = React.useState(path), pathStr = _g[0], setPathStr = _g[1];
|
|
8469
8514
|
var _h = React.useState(pointsProp !== null && pointsProp !== void 0 ? pointsProp : []), points = _h[0], setPoints = _h[1];
|
|
8470
8515
|
var _j = React.useState(false), isDragging = _j[0], setIsDragging = _j[1];
|
|
@@ -8481,6 +8526,7 @@ var IElementLink = function (_a) {
|
|
|
8481
8526
|
var isFirstRender = React.useRef(true);
|
|
8482
8527
|
var onPointsChangedRef = React.useRef();
|
|
8483
8528
|
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.
|
|
8529
|
+
var timeFromMouseDownToUpRef = React.useRef(0);
|
|
8484
8530
|
var angleMarkerStart = '0';
|
|
8485
8531
|
var angleMarkerEnd = '0';
|
|
8486
8532
|
var markerStartPosition;
|
|
@@ -8503,7 +8549,7 @@ var IElementLink = function (_a) {
|
|
|
8503
8549
|
return function () {
|
|
8504
8550
|
paperClickListener.off();
|
|
8505
8551
|
};
|
|
8506
|
-
}, []);
|
|
8552
|
+
}, [onPaperClicked, onDeselected]);
|
|
8507
8553
|
// Reset selected label when an element is selected
|
|
8508
8554
|
React.useEffect(function () {
|
|
8509
8555
|
var elementSelectedListener = onElementSelected(function () {
|
|
@@ -8516,34 +8562,32 @@ var IElementLink = function (_a) {
|
|
|
8516
8562
|
return function () {
|
|
8517
8563
|
elementSelectedListener.off();
|
|
8518
8564
|
};
|
|
8519
|
-
}, []);
|
|
8565
|
+
}, [onElementSelected, onDeselected]);
|
|
8520
8566
|
// Store onPointsChanged in a ref to avoid unnecessary re-renders
|
|
8521
8567
|
React.useEffect(function () {
|
|
8522
8568
|
onPointsChangedRef.current = onPointsChanged;
|
|
8523
8569
|
}, [onPointsChanged]);
|
|
8524
8570
|
// Notify parent component when points change
|
|
8525
8571
|
React.useEffect(function () {
|
|
8526
|
-
var _a;
|
|
8527
8572
|
if (isFirstRender.current) {
|
|
8528
8573
|
isFirstRender.current = false;
|
|
8529
8574
|
return;
|
|
8530
8575
|
}
|
|
8531
|
-
|
|
8532
|
-
}, [JSON.stringify(points)]);
|
|
8576
|
+
}, []);
|
|
8533
8577
|
React.useLayoutEffect(function () {
|
|
8534
|
-
var pointsList = __spreadArray(__spreadArray([
|
|
8578
|
+
var pointsList = __spreadArray(__spreadArray([{ x: sourcePositionX, y: sourcePositionY }], points, true), [{ x: targetPositionX, y: targetPositionY }], false);
|
|
8535
8579
|
var _pathStr = createSmoothPathString(pointsList, undefined, false);
|
|
8536
8580
|
setPathStr(_pathStr);
|
|
8537
|
-
}, [
|
|
8581
|
+
}, [sourcePositionX, sourcePositionY, points, targetPositionX, targetPositionY]);
|
|
8538
8582
|
React.useEffect(function () {
|
|
8539
8583
|
if (!pathStr)
|
|
8540
8584
|
return;
|
|
8541
8585
|
onPathChanged === null || onPathChanged === void 0 ? void 0 : onPathChanged(pathStr, id);
|
|
8542
|
-
}, [pathStr, id]);
|
|
8543
|
-
var addMovingPoint = function (mouseDownedOnPaperPos, points) {
|
|
8586
|
+
}, [pathStr, id, onPathChanged]);
|
|
8587
|
+
var addMovingPoint = React.useCallback(function (mouseDownedOnPaperPos, points) {
|
|
8544
8588
|
//Position of the new point on the path
|
|
8545
8589
|
var paperPosition = mouseDownedOnPaperPos;
|
|
8546
|
-
var newPoints = addPointToList(paperPosition, __spreadArray(__spreadArray([
|
|
8590
|
+
var newPoints = addPointToList(paperPosition, __spreadArray(__spreadArray([{ x: sourcePositionX, y: sourcePositionY }], points, true), [{ x: targetPositionX, y: targetPositionY }], false), pathRef.current);
|
|
8547
8591
|
var pointsWithoutStartEndPoint = newPoints.slice(1, newPoints.length - 1);
|
|
8548
8592
|
var addedIndex = pointsWithoutStartEndPoint.findIndex(function (p) { return p.x === paperPosition.x && p.y === paperPosition.y; });
|
|
8549
8593
|
var leftPointIndex = addedIndex - 1;
|
|
@@ -8589,12 +8633,13 @@ var IElementLink = function (_a) {
|
|
|
8589
8633
|
draggingPointIndex: _draggingPointIndex,
|
|
8590
8634
|
points: pointsWithoutStartEndPoint,
|
|
8591
8635
|
};
|
|
8592
|
-
};
|
|
8636
|
+
}, [sourcePositionX, sourcePositionY, targetPositionX, targetPositionY]);
|
|
8593
8637
|
React.useEffect(function () {
|
|
8594
8638
|
//handle when creating and moving point
|
|
8595
8639
|
var handleMouseMove = function (ev) {
|
|
8596
8640
|
var mouseEvent = ev;
|
|
8597
8641
|
if (isDragging && container) {
|
|
8642
|
+
console.info('Mouse move on link');
|
|
8598
8643
|
var paperPosition_1 = windowsPositionToPaperPosition({
|
|
8599
8644
|
x: mouseEvent.clientX,
|
|
8600
8645
|
y: mouseEvent.clientY
|
|
@@ -8614,8 +8659,13 @@ var IElementLink = function (_a) {
|
|
|
8614
8659
|
}
|
|
8615
8660
|
};
|
|
8616
8661
|
var mouseUp = function () {
|
|
8662
|
+
console.info('Mouse up on link');
|
|
8617
8663
|
draggingPointIndexRef.current = undefined;
|
|
8618
8664
|
setIsDragging(false);
|
|
8665
|
+
//trigger onPointsChanged
|
|
8666
|
+
if (onPointsChangedRef.current) {
|
|
8667
|
+
onPointsChangedRef.current(points, id);
|
|
8668
|
+
}
|
|
8619
8669
|
};
|
|
8620
8670
|
container === null || container === void 0 ? void 0 : container.addEventListener('mousemove', handleMouseMove);
|
|
8621
8671
|
container === null || container === void 0 ? void 0 : container.addEventListener('mouseup', mouseUp);
|
|
@@ -8623,9 +8673,14 @@ var IElementLink = function (_a) {
|
|
|
8623
8673
|
container === null || container === void 0 ? void 0 : container.removeEventListener('mousemove', handleMouseMove);
|
|
8624
8674
|
container === null || container === void 0 ? void 0 : container.removeEventListener('mouseup', mouseUp);
|
|
8625
8675
|
};
|
|
8626
|
-
}, [container, isDragging, zoom, points]);
|
|
8676
|
+
}, [container, isDragging, zoom, points, id, addMovingPoint]);
|
|
8677
|
+
React.useEffect(function () {
|
|
8678
|
+
console.info("Container changed in link", id);
|
|
8679
|
+
}, [addMovingPoint]);
|
|
8627
8680
|
var handleMouseDownOnPath = function (ev) {
|
|
8628
8681
|
ev.preventDefault();
|
|
8682
|
+
console.info('Mouse down on link');
|
|
8683
|
+
timeFromMouseDownToUpRef.current = Date.now();
|
|
8629
8684
|
//add point if click on path
|
|
8630
8685
|
setIsDragging(true);
|
|
8631
8686
|
};
|
|
@@ -8639,11 +8694,11 @@ var IElementLink = function (_a) {
|
|
|
8639
8694
|
onLabelMoved(newPosition.x, newPosition.y, 'middle');
|
|
8640
8695
|
break;
|
|
8641
8696
|
case sourceLabelRef.current:
|
|
8642
|
-
newPosition = transformAbsPositionToRelativePositionInsideElement({ x: newX, y: newY },
|
|
8697
|
+
newPosition = transformAbsPositionToRelativePositionInsideElement({ x: newX, y: newY }, { x: sourcePositionX, y: sourcePositionY });
|
|
8643
8698
|
onLabelMoved(newPosition.x, newPosition.y, 'source');
|
|
8644
8699
|
break;
|
|
8645
8700
|
case targetLabelRef.current:
|
|
8646
|
-
newPosition = transformAbsPositionToRelativePositionInsideElement({ x: newX, y: newY },
|
|
8701
|
+
newPosition = transformAbsPositionToRelativePositionInsideElement({ x: newX, y: newY }, { x: targetPositionX, y: targetPositionY });
|
|
8647
8702
|
onLabelMoved(newPosition.x, newPosition.y, 'target');
|
|
8648
8703
|
break;
|
|
8649
8704
|
}
|
|
@@ -8675,6 +8730,11 @@ var IElementLink = function (_a) {
|
|
|
8675
8730
|
}
|
|
8676
8731
|
};
|
|
8677
8732
|
var handleClickPath = function () {
|
|
8733
|
+
if (Date.now() - timeFromMouseDownToUpRef.current > 400) {
|
|
8734
|
+
//Prevent click event when dragging
|
|
8735
|
+
return;
|
|
8736
|
+
}
|
|
8737
|
+
console.info('Click link', id);
|
|
8678
8738
|
setIsSelectedLink(true);
|
|
8679
8739
|
onSelected === null || onSelected === void 0 ? void 0 : onSelected();
|
|
8680
8740
|
};
|
|
@@ -8717,22 +8777,22 @@ var IElementLink = function (_a) {
|
|
|
8717
8777
|
if ((_b = pathRef.current) === null || _b === void 0 ? void 0 : _b.getAttribute('d')) {
|
|
8718
8778
|
if (markerStart) {
|
|
8719
8779
|
markerStartPosition = pathRef.current.getPointAtLength(markerDistanceFromPort);
|
|
8720
|
-
angleMarkerStart = calculateAngleWithOx(
|
|
8780
|
+
angleMarkerStart = calculateAngleWithOx({ x: sourcePositionX, y: sourcePositionY }, markerStartPosition);
|
|
8721
8781
|
}
|
|
8722
8782
|
if (markerEnd) {
|
|
8723
8783
|
markerEndPosition = pathRef.current.getPointAtLength(pathRef.current.getTotalLength() - markerDistanceFromPort);
|
|
8724
|
-
angleMarkerEnd = calculateAngleWithOx(markerEndPosition,
|
|
8784
|
+
angleMarkerEnd = calculateAngleWithOx(markerEndPosition, { x: targetPositionX, y: targetPositionY });
|
|
8725
8785
|
}
|
|
8726
8786
|
centerPathPosition = (_c = pathRef.current) === null || _c === void 0 ? void 0 : _c.getPointAtLength(pathRef.current.getTotalLength() / 2);
|
|
8727
8787
|
}
|
|
8728
8788
|
return (React.createElement("g", null,
|
|
8729
8789
|
React.createElement("path", { ref: pathRef, d: pathStr, className: isSelectedLink ? CSS_CLASS_LINK_SELECTED : '', fill: "none", stroke: stroke || LINK_DEFAULT_COLOR, strokeWidth: strokeWidth }),
|
|
8730
8790
|
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 },
|
|
8791
|
+
removable !== false && isSelectedLink && centerPathPosition && React.createElement("svg", { x: centerPathPosition.x - 10, y: centerPathPosition.y - 10 },
|
|
8732
8792
|
React.createElement(CloseIcon, { onClick: onClickDelete })),
|
|
8733
8793
|
label && renderLabel(label, 'middle', centerPathPosition),
|
|
8734
|
-
sourceLabel && renderLabel(sourceLabel, 'source',
|
|
8735
|
-
targetLabel && renderLabel(targetLabel, 'target',
|
|
8794
|
+
sourceLabel && renderLabel(sourceLabel, 'source', { x: sourcePositionX, y: sourcePositionY }),
|
|
8795
|
+
targetLabel && renderLabel(targetLabel, 'target', { x: targetPositionX, y: targetPositionY }),
|
|
8736
8796
|
markerStartPosition && React.createElement("g", { transform: "rotate(".concat(angleMarkerStart, ")"), style: { transformOrigin: 'center', transformBox: 'content-box' } },
|
|
8737
8797
|
React.createElement("svg", { x: markerStartPosition.x - markerSize / 2, y: markerStartPosition.y - markerSize / 2, width: markerSize, height: markerSize }, markerStart)),
|
|
8738
8798
|
markerEndPosition && React.createElement("g", { transform: "rotate(".concat(angleMarkerEnd, ")"), style: { transformOrigin: 'center', transformBox: 'content-box' } },
|
|
@@ -8789,58 +8849,41 @@ var ElementWrapper = React.forwardRef(function (_a, ref) {
|
|
|
8789
8849
|
});
|
|
8790
8850
|
|
|
8791
8851
|
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
8852
|
var _paperEventEmitterContext = React.useContext(paperEventEmitterContext);
|
|
8853
|
+
// const elementObj = props.element;
|
|
8854
|
+
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;
|
|
8855
|
+
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;
|
|
8856
|
+
var propPorts = props.element.ports;
|
|
8857
|
+
//state for position
|
|
8858
|
+
var _b = React.useState(__assign({}, props.element.position)), position = _b[0], setPosition = _b[1];
|
|
8859
|
+
//state for size
|
|
8860
|
+
var _c = React.useState(__assign({}, props.element.size)), size = _c[0], setSize = _c[1];
|
|
8861
|
+
var _d = React.useState(), selectedPort = _d[0], setSelectedPort = _d[1];
|
|
8862
|
+
var _e = React.useState(), hoveredPort = _e[0], setHoveredPort = _e[1];
|
|
8863
|
+
var _f = React.useState([]), ports = _f[0], setPorts = _f[1];
|
|
8864
|
+
var _g = React.useState(props.element.texts || []), texts = _g[0], setTexts = _g[1];
|
|
8865
|
+
var _h = React.useState(false), someElementLinkStarted = _h[0], setSomeElementLinkStarted = _h[1];
|
|
8866
|
+
var _j = React.useState(), potentialPortPosition = _j[0], setPotentialPortPosition = _j[1];
|
|
8867
|
+
//Zoom
|
|
8803
8868
|
var zoom = useZoomContext().zoom;
|
|
8869
|
+
var zoomRef = React.useRef(zoom);
|
|
8804
8870
|
var elementRef = React.useRef(null);
|
|
8805
8871
|
React.useImperativeHandle(forwardedRef, function () { return elementRef.current; });
|
|
8806
8872
|
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]);
|
|
8873
|
+
var portsRef = React.useRef([]);
|
|
8832
8874
|
//Normalize port position
|
|
8833
8875
|
var normalizePortPosition = React.useCallback(function (tempNewPosition) {
|
|
8834
|
-
var newPosition = correctPortPositionInElement(tempNewPosition, width, height, portMoveableAreas, portSlideRailSVGClassName, elementRef.current || undefined);
|
|
8876
|
+
var newPosition = correctPortPositionInElement(tempNewPosition, size.width, size.height, portMoveableAreas, portSlideRailSVGClassName, elementRef.current || undefined);
|
|
8835
8877
|
return newPosition || tempNewPosition;
|
|
8836
|
-
}, [width, height, portMoveableAreas, portSlideRailSVGClassName]);
|
|
8837
|
-
//
|
|
8838
|
-
React.
|
|
8878
|
+
}, [size.width, size.height, portMoveableAreas, portSlideRailSVGClassName]);
|
|
8879
|
+
//set port ref when ports state is changed
|
|
8880
|
+
React.useLayoutEffect(function () {
|
|
8881
|
+
portsRef.current = ports;
|
|
8882
|
+
}, [ports]);
|
|
8883
|
+
//Handle ports state when propPorts is changed
|
|
8884
|
+
var handlePortsState = React.useCallback(function (newPorts) {
|
|
8839
8885
|
setPorts(function (prev) {
|
|
8840
|
-
var
|
|
8841
|
-
if (propPorts === undefined)
|
|
8842
|
-
return [];
|
|
8843
|
-
var newState = (_a = propPorts.map(function (p, index) {
|
|
8886
|
+
var newState = newPorts === null || newPorts === void 0 ? void 0 : newPorts.map(function (p, index) {
|
|
8844
8887
|
var prevPortState = prev.find(function (_p) { return _p.id === p.id; });
|
|
8845
8888
|
var newPortState;
|
|
8846
8889
|
//If port is existed, keep the ref of the port
|
|
@@ -8853,45 +8896,85 @@ var Element = React.forwardRef(function (props, forwardedRef) {
|
|
|
8853
8896
|
//Handle the case new port is created and the ref of the port is not defined
|
|
8854
8897
|
if (!newPortState.ref) {
|
|
8855
8898
|
var newPosition = normalizePortPosition(newPortState.position);
|
|
8856
|
-
|
|
8857
|
-
_paperEventEmitterContext.emitPortMoved(p, id, newPortState.position, newPosition)
|
|
8899
|
+
// onPortMoved?.(p, id, newPortState.position, newPosition)
|
|
8900
|
+
// _paperEventEmitterContext.emitPortMoved(p, id, newPortState.position, newPosition)
|
|
8858
8901
|
newPortState.position = newPosition;
|
|
8859
8902
|
newPortState.ref = React.createRef();
|
|
8860
8903
|
}
|
|
8861
8904
|
return newPortState;
|
|
8862
|
-
})
|
|
8905
|
+
});
|
|
8863
8906
|
return newState;
|
|
8864
8907
|
});
|
|
8865
|
-
}, [
|
|
8866
|
-
|
|
8867
|
-
|
|
8868
|
-
|
|
8869
|
-
|
|
8870
|
-
|
|
8908
|
+
}, [normalizePortPosition]);
|
|
8909
|
+
var getParentAbsolutePosition = React.useCallback(function () {
|
|
8910
|
+
return props.element.parentElement ? getAbsolutePosition(props.element.parentElement) : undefined;
|
|
8911
|
+
}, [props.element.parentElement]);
|
|
8912
|
+
var getElementAbsPosition = React.useCallback(function () {
|
|
8913
|
+
var newPosition = {
|
|
8914
|
+
x: position.x,
|
|
8915
|
+
y: position.y,
|
|
8916
|
+
};
|
|
8917
|
+
var parentAbsolutePosition = getParentAbsolutePosition();
|
|
8918
|
+
if (parentAbsolutePosition) {
|
|
8919
|
+
newPosition.x += parentAbsolutePosition.x;
|
|
8920
|
+
newPosition.y += parentAbsolutePosition.y;
|
|
8921
|
+
}
|
|
8922
|
+
return newPosition;
|
|
8923
|
+
}, [position, getParentAbsolutePosition]);
|
|
8924
|
+
var elementAbsPosition = React.useMemo(function () { return getElementAbsPosition(); }, [getElementAbsPosition]);
|
|
8925
|
+
//update element position
|
|
8926
|
+
var updateElementPosition = React.useCallback(function (newPosition) {
|
|
8927
|
+
setPosition({ x: newPosition.x, y: newPosition.y });
|
|
8928
|
+
props.element.position = { x: newPosition.x, y: newPosition.y };
|
|
8929
|
+
}, [props.element]);
|
|
8930
|
+
//update element size
|
|
8931
|
+
var updateElementSize = React.useCallback(function (newSize) {
|
|
8932
|
+
setSize({ width: newSize.width, height: newSize.height });
|
|
8933
|
+
props.element.size = { width: newSize.width, height: newSize.height };
|
|
8934
|
+
}, [props.element]);
|
|
8935
|
+
//Listen to manually trigger render event
|
|
8871
8936
|
React.useEffect(function () {
|
|
8872
|
-
var
|
|
8873
|
-
|
|
8874
|
-
|
|
8875
|
-
|
|
8876
|
-
|
|
8877
|
-
return port;
|
|
8937
|
+
var off = onManuallyTriggerRenderPort === null || onManuallyTriggerRenderPort === void 0 ? void 0 : onManuallyTriggerRenderPort(function (portId, elementId) {
|
|
8938
|
+
if (elementId !== id)
|
|
8939
|
+
return;
|
|
8940
|
+
logger.info('onManuallyTriggerRenderPort', id);
|
|
8941
|
+
handlePortsState(portsRef.current);
|
|
8878
8942
|
});
|
|
8879
|
-
|
|
8880
|
-
|
|
8943
|
+
return function () {
|
|
8944
|
+
off === null || off === void 0 ? void 0 : off();
|
|
8945
|
+
};
|
|
8946
|
+
}, [id, onManuallyTriggerRenderPort, handlePortsState, props.element]);
|
|
8947
|
+
//Initialize ports state
|
|
8948
|
+
React.useEffect(function () {
|
|
8949
|
+
handlePortsState(propPorts || []);
|
|
8950
|
+
}, [handlePortsState, propPorts]);
|
|
8951
|
+
// const normalizePortsPosition = useCallback(() => {
|
|
8952
|
+
// const newPorts = portsRef.current.map(port => {
|
|
8953
|
+
// const newPosition = normalizePortPosition(port.position);
|
|
8954
|
+
// port.position = newPosition;
|
|
8955
|
+
// return port;
|
|
8956
|
+
// });
|
|
8957
|
+
// return newPorts;
|
|
8958
|
+
// }, [normalizePortPosition]);
|
|
8959
|
+
// //Normalize port position when element is resized
|
|
8960
|
+
// useEffect(() => {
|
|
8961
|
+
// //const newPorts = normalizePortsPosition();
|
|
8962
|
+
// //handlePortsState(newPorts);
|
|
8963
|
+
// }, [size, _paperEventEmitterContext, id, normalizePortPosition, onPortMoved, normalizePortsPosition, handlePortsState]);
|
|
8881
8964
|
//Listen trigger of Delete key, handle delete port is selected
|
|
8882
8965
|
React.useEffect(function () {
|
|
8883
8966
|
var listener = _paperEventEmitterContext.onCommandDeleteSelectedPort(function () {
|
|
8884
|
-
if (selectedPort) {
|
|
8967
|
+
if (selectedPort && selectedPort.removable !== false) {
|
|
8885
8968
|
var newPorts = portsRef.current.filter(function (p) { return p.id !== selectedPort.id; });
|
|
8886
|
-
|
|
8969
|
+
handlePortsState(newPorts);
|
|
8887
8970
|
setSelectedPort(undefined);
|
|
8888
|
-
onPortsChanged
|
|
8971
|
+
//onPortsChanged?.(newPorts, id)
|
|
8889
8972
|
}
|
|
8890
8973
|
});
|
|
8891
8974
|
return function () {
|
|
8892
8975
|
listener.off();
|
|
8893
8976
|
};
|
|
8894
|
-
}, [_paperEventEmitterContext, id,
|
|
8977
|
+
}, [_paperEventEmitterContext, id, selectedPort, handlePortsState, props.element.ports]);
|
|
8895
8978
|
React.useEffect(function () {
|
|
8896
8979
|
//Listener onMouseDown event on #paper-container
|
|
8897
8980
|
var eventListener = _paperEventEmitterContext.onPaperClicked(function (ev) {
|
|
@@ -8904,26 +8987,38 @@ var Element = React.forwardRef(function (props, forwardedRef) {
|
|
|
8904
8987
|
React.useEffect(function () {
|
|
8905
8988
|
//listen element resize to update position of the ports by element size.
|
|
8906
8989
|
var eleResizeListener = _paperEventEmitterContext.onElementResized(id, function () {
|
|
8907
|
-
|
|
8990
|
+
//let isChanged = false;
|
|
8908
8991
|
var newPorts = portsRef.current.map(function (port) {
|
|
8909
8992
|
var newPosition = normalizePortPosition({ x: port.position.x, y: port.position.y });
|
|
8910
8993
|
//Check port moved
|
|
8911
8994
|
if (port.position.x !== newPosition.x || port.position.y !== newPosition.y) {
|
|
8912
|
-
isChanged = true;
|
|
8995
|
+
//isChanged = true;
|
|
8913
8996
|
_paperEventEmitterContext.emitPortMoved(port, id, port.position, newPosition);
|
|
8914
8997
|
}
|
|
8915
8998
|
port.position = newPosition;
|
|
8916
8999
|
return port;
|
|
8917
9000
|
});
|
|
8918
|
-
|
|
8919
|
-
if (isChanged) {
|
|
8920
|
-
|
|
8921
|
-
}
|
|
9001
|
+
handlePortsState(newPorts);
|
|
9002
|
+
// if (isChanged) {
|
|
9003
|
+
// onPortsChanged?.(newPorts, id);
|
|
9004
|
+
// }
|
|
8922
9005
|
});
|
|
8923
9006
|
return function () {
|
|
8924
9007
|
eleResizeListener.off();
|
|
8925
9008
|
};
|
|
8926
|
-
}, [_paperEventEmitterContext, id,
|
|
9009
|
+
}, [_paperEventEmitterContext, id, normalizePortPosition, size, portMoveableAreas, portSlideRailSVGClassName, handlePortsState, props.element.ports]);
|
|
9010
|
+
//list to port added
|
|
9011
|
+
React.useEffect(function () {
|
|
9012
|
+
var _a, _b;
|
|
9013
|
+
//Listen a new port added, then re-render the element component
|
|
9014
|
+
var off = (_b = (_a = props.element).onAddedPort) === null || _b === void 0 ? void 0 : _b.call(_a, function (newPort) {
|
|
9015
|
+
logger.info("A new port has been added to element ".concat(id));
|
|
9016
|
+
handlePortsState(props.element.ports || []);
|
|
9017
|
+
});
|
|
9018
|
+
return function () {
|
|
9019
|
+
off === null || off === void 0 ? void 0 : off();
|
|
9020
|
+
};
|
|
9021
|
+
}, [handlePortsState, id, props.element]);
|
|
8927
9022
|
//Listen creating element link started, ended.
|
|
8928
9023
|
React.useEffect(function () {
|
|
8929
9024
|
var elementStartedListener = _paperEventEmitterContext.onElementLinkStarted(function (tempLink) {
|
|
@@ -8973,30 +9068,30 @@ var Element = React.forwardRef(function (props, forwardedRef) {
|
|
|
8973
9068
|
var handleSelectedPort = React.useCallback(function (portId, e) {
|
|
8974
9069
|
e.stopPropagation();
|
|
8975
9070
|
logger.debug('Port selected', portId, e);
|
|
8976
|
-
var port =
|
|
9071
|
+
var port = ports.find(function (p) { return p.id === portId; });
|
|
8977
9072
|
if (!port)
|
|
8978
9073
|
return;
|
|
8979
9074
|
setSelectedPort(port);
|
|
8980
9075
|
_paperEventEmitterContext.emitPortSelected(port, id);
|
|
8981
|
-
}, [id, _paperEventEmitterContext]);
|
|
9076
|
+
}, [ports, id, _paperEventEmitterContext]);
|
|
8982
9077
|
//Calculate the position of the 4 vertices of a rectangle relative to element
|
|
8983
9078
|
var calculateSlideRailRectSVGPositions = React.useCallback(function (slideRailSVG) {
|
|
8984
9079
|
var coordinates = getRectangleCorners(slideRailSVG);
|
|
8985
9080
|
var ownerSVG = slideRailSVG.ownerSVGElement;
|
|
8986
9081
|
var rotationAngle = getElementRotationInfo(ownerSVG);
|
|
8987
9082
|
if (rotationAngle !== 0) {
|
|
8988
|
-
var rotationCenterX = width / 2;
|
|
8989
|
-
var rotationCenterY = height / 2;
|
|
9083
|
+
var rotationCenterX = size.width / 2;
|
|
9084
|
+
var rotationCenterY = size.height / 2;
|
|
8990
9085
|
coordinates = getRotatedRectangleCoordinates(coordinates, rotationCenterX, rotationCenterY, rotationAngle);
|
|
8991
9086
|
}
|
|
8992
9087
|
return coordinates;
|
|
8993
|
-
}, [
|
|
9088
|
+
}, [size]);
|
|
8994
9089
|
var getSlideRailSVG = React.useCallback(function (portSlideRailSVGClassName) {
|
|
8995
9090
|
var _a;
|
|
8996
9091
|
var slideRailSVG = (_a = elementRef.current) === null || _a === void 0 ? void 0 : _a.querySelector(".".concat(portSlideRailSVGClassName));
|
|
8997
9092
|
return slideRailSVG;
|
|
8998
9093
|
}, []);
|
|
8999
|
-
var handlePortMove = function (newX, newY) {
|
|
9094
|
+
var handlePortMove = React.useCallback(function (newX, newY) {
|
|
9000
9095
|
if (!selectedPort)
|
|
9001
9096
|
return;
|
|
9002
9097
|
var oldPosition = __assign({}, selectedPort.position);
|
|
@@ -9008,11 +9103,14 @@ var Element = React.forwardRef(function (props, forwardedRef) {
|
|
|
9008
9103
|
var newPosition = normalizePortPosition(tempNewPosition);
|
|
9009
9104
|
if (newPosition) {
|
|
9010
9105
|
selectedPort.position = newPosition;
|
|
9106
|
+
//onPortMoved?.(selectedPort, id, oldPosition, newPosition)
|
|
9107
|
+
handlePortsState(portsRef.current);
|
|
9108
|
+
if (_paperEventEmitterContext.emitter.listenerCount(EVENT_NAME.PORT_MOVED) > 0) {
|
|
9109
|
+
_paperEventEmitterContext.emitPortMoved(selectedPort, id, oldPosition, newPosition);
|
|
9110
|
+
}
|
|
9011
9111
|
onPortMoved === null || onPortMoved === void 0 ? void 0 : onPortMoved(selectedPort, id, oldPosition, newPosition);
|
|
9012
|
-
setPorts(__spreadArray([], portsRef.current, true));
|
|
9013
|
-
_paperEventEmitterContext.emitPortMoved(selectedPort, id, oldPosition, newPosition);
|
|
9014
9112
|
}
|
|
9015
|
-
};
|
|
9113
|
+
}, [selectedPort, elementAbsPosition, normalizePortPosition, _paperEventEmitterContext, id, onPortMoved, handlePortsState]);
|
|
9016
9114
|
//Handle when mouse down on port
|
|
9017
9115
|
var handlePortMouseDown = React.useCallback(function (portId, e) {
|
|
9018
9116
|
e.stopPropagation();
|
|
@@ -9023,7 +9121,7 @@ var Element = React.forwardRef(function (props, forwardedRef) {
|
|
|
9023
9121
|
return;
|
|
9024
9122
|
_paperEventEmitterContext.emitPortMouseDown(e, port, id);
|
|
9025
9123
|
onPortMouseDown === null || onPortMouseDown === void 0 ? void 0 : onPortMouseDown(e, port, id);
|
|
9026
|
-
}, [id,
|
|
9124
|
+
}, [id, _paperEventEmitterContext, onPortMouseDown]);
|
|
9027
9125
|
//Handle when mouse up on port
|
|
9028
9126
|
var handlePortMouseUp = React.useCallback(function (portId, e) {
|
|
9029
9127
|
e.stopPropagation();
|
|
@@ -9036,50 +9134,44 @@ var Element = React.forwardRef(function (props, forwardedRef) {
|
|
|
9036
9134
|
if (potentialPortPosition) {
|
|
9037
9135
|
setPotentialPortPosition(undefined);
|
|
9038
9136
|
}
|
|
9039
|
-
}, [id, onPortMouseUp,
|
|
9137
|
+
}, [_paperEventEmitterContext, id, onPortMouseUp, potentialPortPosition]);
|
|
9040
9138
|
//Update state when label of port is moved
|
|
9041
9139
|
var handlePortLabelMoved = React.useCallback(function (newX, newY, portId) {
|
|
9042
|
-
|
|
9043
|
-
|
|
9044
|
-
|
|
9045
|
-
|
|
9046
|
-
|
|
9047
|
-
|
|
9048
|
-
|
|
9049
|
-
|
|
9050
|
-
|
|
9051
|
-
|
|
9052
|
-
|
|
9053
|
-
|
|
9054
|
-
|
|
9055
|
-
});
|
|
9056
|
-
}, []);
|
|
9140
|
+
handlePortsState(portsRef.current.map(function (p) {
|
|
9141
|
+
if (p.id === portId && p.label) {
|
|
9142
|
+
var newLabel = Object.assign(Object.create(Object.getPrototypeOf(p.label)), p.label);
|
|
9143
|
+
var newPosition = {
|
|
9144
|
+
x: newX,
|
|
9145
|
+
y: newY
|
|
9146
|
+
};
|
|
9147
|
+
newLabel.position = newPosition;
|
|
9148
|
+
p.label = newLabel;
|
|
9149
|
+
}
|
|
9150
|
+
return p;
|
|
9151
|
+
}));
|
|
9152
|
+
}, [handlePortsState]);
|
|
9057
9153
|
//Update state when label of port is resized
|
|
9058
9154
|
var handlePortLabelResized = React.useCallback(function (width, height, portId) {
|
|
9059
|
-
|
|
9060
|
-
|
|
9061
|
-
|
|
9062
|
-
|
|
9063
|
-
|
|
9064
|
-
|
|
9065
|
-
|
|
9066
|
-
|
|
9067
|
-
|
|
9068
|
-
|
|
9069
|
-
});
|
|
9070
|
-
}, []);
|
|
9155
|
+
handlePortsState(portsRef.current.map(function (p) {
|
|
9156
|
+
if (p.id === portId && p.label) {
|
|
9157
|
+
p.label.size = {
|
|
9158
|
+
width: width,
|
|
9159
|
+
height: height
|
|
9160
|
+
};
|
|
9161
|
+
}
|
|
9162
|
+
return p;
|
|
9163
|
+
}));
|
|
9164
|
+
}, [handlePortsState]);
|
|
9071
9165
|
//Update state when label of port is changed content
|
|
9072
9166
|
var handlePortLabelContentChanged = React.useCallback(function (ev, newValue, portId) {
|
|
9073
|
-
|
|
9074
|
-
|
|
9075
|
-
|
|
9076
|
-
|
|
9077
|
-
|
|
9078
|
-
|
|
9079
|
-
|
|
9080
|
-
|
|
9081
|
-
}, []);
|
|
9082
|
-
function handleElementMouseMove(ev) {
|
|
9167
|
+
handlePortsState(portsRef.current.map(function (p) {
|
|
9168
|
+
if (p.id === portId && p.label) {
|
|
9169
|
+
p.label.content = newValue;
|
|
9170
|
+
}
|
|
9171
|
+
return p;
|
|
9172
|
+
}));
|
|
9173
|
+
}, [handlePortsState]);
|
|
9174
|
+
var handleElementMouseMove = React.useCallback(function (ev) {
|
|
9083
9175
|
//ev.stopPropagation(); //Can't use stopPropagation here, because do not create tempLink
|
|
9084
9176
|
onMouseMove === null || onMouseMove === void 0 ? void 0 : onMouseMove(ev, id);
|
|
9085
9177
|
if (someElementLinkStarted && elementRef.current) {
|
|
@@ -9106,19 +9198,19 @@ var Element = React.forwardRef(function (props, forwardedRef) {
|
|
|
9106
9198
|
setPotentialPortPosition(undefined);
|
|
9107
9199
|
}
|
|
9108
9200
|
}
|
|
9109
|
-
}
|
|
9110
|
-
|
|
9201
|
+
}, [onMouseMove, id, someElementLinkStarted, container, zoom, getElementAbsPosition, normalizePortPosition, hoveredPort]);
|
|
9202
|
+
var handleElementMouseLeave = React.useCallback(function (ev) {
|
|
9111
9203
|
ev.stopPropagation();
|
|
9112
9204
|
onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave(ev, id);
|
|
9113
9205
|
if (someElementLinkStarted) { //If an element link is being created, clear the placeholder when the mouse leaves the element.
|
|
9114
9206
|
setPotentialPortPosition(undefined);
|
|
9115
9207
|
}
|
|
9116
|
-
}
|
|
9117
|
-
var handleElementMouseDown = function (ev) {
|
|
9208
|
+
}, [onMouseLeave, id, someElementLinkStarted]);
|
|
9209
|
+
var handleElementMouseDown = React.useCallback(function (ev) {
|
|
9118
9210
|
ev.stopPropagation();
|
|
9119
9211
|
onMouseDown === null || onMouseDown === void 0 ? void 0 : onMouseDown(ev, id);
|
|
9120
|
-
};
|
|
9121
|
-
var handleElementMouseUp = function (ev) {
|
|
9212
|
+
}, [onMouseDown, id]);
|
|
9213
|
+
var handleElementMouseUp = React.useCallback(function (ev) {
|
|
9122
9214
|
ev.stopPropagation();
|
|
9123
9215
|
onMouseUp === null || onMouseUp === void 0 ? void 0 : onMouseUp(ev, id);
|
|
9124
9216
|
//If an element link is being created, trigger onMouseUpAtLinkedPortPlaceholder when the mouse up the element.
|
|
@@ -9127,16 +9219,16 @@ var Element = React.forwardRef(function (props, forwardedRef) {
|
|
|
9127
9219
|
onMouseUpAtLinkedPortPlaceholder === null || onMouseUpAtLinkedPortPlaceholder === void 0 ? void 0 : onMouseUpAtLinkedPortPlaceholder(newElementLink, potentialPortPosition, id);
|
|
9128
9220
|
elementLinkStarted.current = undefined;
|
|
9129
9221
|
}
|
|
9130
|
-
};
|
|
9222
|
+
}, [potentialPortPosition, elementLinkStarted, onMouseUpAtLinkedPortPlaceholder, id]);
|
|
9131
9223
|
//Handle when mouse move on port
|
|
9132
9224
|
var handlePortMouseMove = React.useCallback(function (portId) {
|
|
9133
9225
|
if (someElementLinkStarted) {
|
|
9134
|
-
var port =
|
|
9226
|
+
var port = ports.find(function (p) { return p.id === portId; });
|
|
9135
9227
|
if (!port)
|
|
9136
9228
|
return;
|
|
9137
9229
|
setHoveredPort(port);
|
|
9138
9230
|
}
|
|
9139
|
-
}, [someElementLinkStarted]);
|
|
9231
|
+
}, [someElementLinkStarted, ports]);
|
|
9140
9232
|
//Handle when mouse leave on port
|
|
9141
9233
|
var handlePortMouseLeave = React.useCallback(function () {
|
|
9142
9234
|
if (someElementLinkStarted)
|
|
@@ -9145,11 +9237,11 @@ var Element = React.forwardRef(function (props, forwardedRef) {
|
|
|
9145
9237
|
//Handle when context menu is opened on port
|
|
9146
9238
|
var handlePortContextMenu = React.useCallback(function (portId, e) {
|
|
9147
9239
|
e.preventDefault();
|
|
9148
|
-
var port =
|
|
9240
|
+
var port = ports.find(function (p) { return p.id === portId; });
|
|
9149
9241
|
if (!port)
|
|
9150
9242
|
return;
|
|
9151
9243
|
onPortContextMenu === null || onPortContextMenu === void 0 ? void 0 : onPortContextMenu(port, id, e);
|
|
9152
|
-
}, [onPortContextMenu, id]);
|
|
9244
|
+
}, [ports, onPortContextMenu, id]);
|
|
9153
9245
|
//Get rotate angle of port by port direction is defined.
|
|
9154
9246
|
var rotatePort = React.useCallback(function (x, y) {
|
|
9155
9247
|
// logger.info('calculating port rotation', x, y)
|
|
@@ -9164,8 +9256,8 @@ var Element = React.forwardRef(function (props, forwardedRef) {
|
|
|
9164
9256
|
switch (portDirection) {
|
|
9165
9257
|
case exports.SubObjectDirection.Radial:
|
|
9166
9258
|
var center = {
|
|
9167
|
-
x: width / 2,
|
|
9168
|
-
y: height / 2
|
|
9259
|
+
x: size.width / 2,
|
|
9260
|
+
y: size.height / 2
|
|
9169
9261
|
};
|
|
9170
9262
|
rotationAngle = calculateAngleWithOx(normalizedPosition, center);
|
|
9171
9263
|
break;
|
|
@@ -9190,46 +9282,149 @@ var Element = React.forwardRef(function (props, forwardedRef) {
|
|
|
9190
9282
|
break;
|
|
9191
9283
|
}
|
|
9192
9284
|
return rotationAngle;
|
|
9193
|
-
}, [width, height, portSlideRailSVGClassName, portDirection, getSlideRailSVG, normalizePortPosition, calculateSlideRailRectSVGPositions]);
|
|
9194
|
-
|
|
9195
|
-
|
|
9196
|
-
|
|
9197
|
-
|
|
9198
|
-
|
|
9285
|
+
}, [size.width, size.height, portSlideRailSVGClassName, portDirection, getSlideRailSVG, normalizePortPosition, calculateSlideRailRectSVGPositions]);
|
|
9286
|
+
// const prevElms = elementsRef.current;
|
|
9287
|
+
var handleTextChanged = React.useCallback(function (textId, content) {
|
|
9288
|
+
var textToUpdate = texts === null || texts === void 0 ? void 0 : texts.find(function (t) { return t.id === textId; });
|
|
9289
|
+
if (!textToUpdate)
|
|
9290
|
+
return;
|
|
9291
|
+
textToUpdate.content = content;
|
|
9292
|
+
setTexts(__spreadArray([], texts, true));
|
|
9293
|
+
}, [texts]);
|
|
9294
|
+
// const renderedShape = useMemo(() => {
|
|
9295
|
+
// if (renderShape) return renderShape(props);
|
|
9296
|
+
// return null;
|
|
9297
|
+
// }, [props, size, position, renderShape])
|
|
9298
|
+
var adjustElementPositionOnParentPortArea = React.useCallback(function (toBeAdjustedPosition, isAbsolutePosition) {
|
|
9299
|
+
if (isAbsolutePosition === void 0) { isAbsolutePosition = false; }
|
|
9300
|
+
if (props.element.moveAsPortOnParent && props.element.parentElement && parentDOM) {
|
|
9301
|
+
var newRelativePosition = {
|
|
9302
|
+
x: toBeAdjustedPosition.x,
|
|
9303
|
+
y: toBeAdjustedPosition.y
|
|
9304
|
+
};
|
|
9305
|
+
if (isAbsolutePosition) {
|
|
9306
|
+
newRelativePosition = transformAbsPositionToElementRelativePosition(toBeAdjustedPosition, props.element);
|
|
9307
|
+
}
|
|
9308
|
+
return correctPortPositionInElement(newRelativePosition, props.element.size.width, props.element.size.height, props.element.parentElement.portMoveableAreas, props.element.parentElement.portSlideRailSVGClassName, parentDOM);
|
|
9309
|
+
}
|
|
9310
|
+
return toBeAdjustedPosition;
|
|
9311
|
+
}, [props.element, parentDOM]);
|
|
9312
|
+
//update absolute position of element and absolute position of children elements
|
|
9313
|
+
// const updateElementPosition = (element: IElementInTreeState, x: number, y: number, isRelativePosition?: boolean): IElementInTreeState => {
|
|
9314
|
+
// if (isRelativePosition) {
|
|
9315
|
+
// element.position.x = x;
|
|
9316
|
+
// element.position.y = y;
|
|
9317
|
+
// } else {
|
|
9318
|
+
// const relativePosition = transformAbsPositionToElementRelativePosition({ x, y }, element)
|
|
9319
|
+
// element.position.x = relativePosition.x;
|
|
9320
|
+
// element.position.y = relativePosition.y;
|
|
9321
|
+
// }
|
|
9322
|
+
// return element;
|
|
9323
|
+
// }
|
|
9199
9324
|
//Re-render port again after rendered to automation rotate port
|
|
9200
9325
|
//Because elementRef.current equals null in first render so automation rotate port is incorrect.
|
|
9201
9326
|
//TODO: check if this is still needed -> Still needed
|
|
9202
|
-
|
|
9203
|
-
|
|
9204
|
-
|
|
9205
|
-
|
|
9206
|
-
}, [])
|
|
9207
|
-
//
|
|
9208
|
-
|
|
9209
|
-
|
|
9210
|
-
|
|
9211
|
-
|
|
9212
|
-
|
|
9213
|
-
|
|
9214
|
-
: 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 :
|
|
9215
|
-
ports.map(function (p, index) {
|
|
9216
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
9217
|
-
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 },
|
|
9218
|
-
selectedPort && selectedPort.id === p.id && (hoveredPort === null || hoveredPort === void 0 ? void 0 : hoveredPort.id) !== p.id &&
|
|
9219
|
-
(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: {
|
|
9220
|
-
enabled: false,
|
|
9221
|
-
keepRatio: false
|
|
9222
|
-
}, objectX: elementAbsPosition.x + selectedPort.position.x, objectY: elementAbsPosition.y + selectedPort.position.y, onMove: handlePortMove, zoom: zoom })),
|
|
9223
|
-
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: {
|
|
9327
|
+
// useLayoutEffect(() => {
|
|
9328
|
+
// if (elementRef.current) {
|
|
9329
|
+
// handlePortsState(portsRef.current);
|
|
9330
|
+
// }
|
|
9331
|
+
// }, [handlePortsState])
|
|
9332
|
+
//cache render ports
|
|
9333
|
+
var renderedPorts = React.useMemo(function () {
|
|
9334
|
+
return ports === null || ports === void 0 ? void 0 : ports.map(function (p, index) {
|
|
9335
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
9336
|
+
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 },
|
|
9337
|
+
selectedPort && selectedPort.id === p.id && (hoveredPort === null || hoveredPort === void 0 ? void 0 : hoveredPort.id) !== p.id &&
|
|
9338
|
+
(React.createElement(SelectionFrame, { container: container, targetSVGElement: ((_g = p.ref) === null || _g === void 0 ? void 0 : _g.current) || undefined, resizability: {
|
|
9224
9339
|
enabled: false,
|
|
9225
9340
|
keepRatio: false
|
|
9226
|
-
}, zoom: zoom }))
|
|
9227
|
-
|
|
9228
|
-
|
|
9229
|
-
|
|
9230
|
-
|
|
9231
|
-
|
|
9232
|
-
|
|
9341
|
+
}, objectX: elementAbsPosition.x + selectedPort.position.x, objectY: elementAbsPosition.y + selectedPort.position.y, onMove: handlePortMove, zoom: zoom })),
|
|
9342
|
+
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: {
|
|
9343
|
+
enabled: false,
|
|
9344
|
+
keepRatio: false
|
|
9345
|
+
}, zoom: zoom })));
|
|
9346
|
+
});
|
|
9347
|
+
}, [ports, elementAbsPosition, defaultPortSize, container, rotatePort, handlePortLabelMoved, handlePortLabelResized, handlePortLabelContentChanged, handleSelectedPort, handlePortMouseDown, handlePortMouseUp, handlePortMouseMove, handlePortMouseLeave, handlePortContextMenu, selectedPort, hoveredPort, handlePortMove, zoom]);
|
|
9348
|
+
//cache render texts
|
|
9349
|
+
var renderedTexts = React.useMemo(function () {
|
|
9350
|
+
return texts === null || texts === void 0 ? void 0 : texts.map(function (t, index) {
|
|
9351
|
+
var _a, _b;
|
|
9352
|
+
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); } });
|
|
9353
|
+
});
|
|
9354
|
+
}, [id, texts, container, elementAbsPosition, handleTextChanged]);
|
|
9355
|
+
//log element render
|
|
9356
|
+
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);
|
|
9357
|
+
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 :
|
|
9358
|
+
renderShape(props),
|
|
9359
|
+
!!container && !!beingSelected &&
|
|
9360
|
+
React.createElement(SelectionFrame, { key: id, container: container, targetSVGElement: elementRef.current || undefined, resizability: resizability || {
|
|
9361
|
+
enabled: true,
|
|
9362
|
+
keepRatio: true
|
|
9363
|
+
}, 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,
|
|
9364
|
+
//movingOffsetThreshold: ELEMENT_MOVING_OFFSET_THRESHOLD,
|
|
9365
|
+
onMouseDown: function (ev) {
|
|
9366
|
+
windowsPositionToPaperPosition({
|
|
9367
|
+
x: ev.clientX,
|
|
9368
|
+
y: ev.clientY
|
|
9369
|
+
}, container, zoomRef.current);
|
|
9370
|
+
onMouseDown === null || onMouseDown === void 0 ? void 0 : onMouseDown(ev, id);
|
|
9371
|
+
}, onMouseUp: function (ev) {
|
|
9372
|
+
windowsPositionToPaperPosition({
|
|
9373
|
+
x: ev.clientX,
|
|
9374
|
+
y: ev.clientY
|
|
9375
|
+
}, container, zoomRef.current);
|
|
9376
|
+
onMouseUp === null || onMouseUp === void 0 ? void 0 : onMouseUp(ev, id);
|
|
9377
|
+
}, onMove: function (newX, newY) {
|
|
9378
|
+
var _a;
|
|
9379
|
+
var oldPosition = __assign({}, position);
|
|
9380
|
+
// Relative position to the paper container
|
|
9381
|
+
var paperPosition = {
|
|
9382
|
+
x: newX,
|
|
9383
|
+
y: newY
|
|
9384
|
+
};
|
|
9385
|
+
//Call onElementMoving to check if the element should be moved or not
|
|
9386
|
+
if (onMoving) {
|
|
9387
|
+
var _b = (_a = onMoving(props.element, paperPosition)) !== null && _a !== void 0 ? _a : {}, horizontalAllowed = _b.horizontalAllowed, verticalAllowed = _b.verticalAllowed;
|
|
9388
|
+
//If both horizontalAllowed and verticalAllowed are false, do not move the element
|
|
9389
|
+
if (!horizontalAllowed && !verticalAllowed) {
|
|
9390
|
+
return;
|
|
9391
|
+
}
|
|
9392
|
+
//If horizontalAllowed is false, keep the old x position
|
|
9393
|
+
if (!horizontalAllowed) {
|
|
9394
|
+
paperPosition.x = oldPosition.x;
|
|
9395
|
+
}
|
|
9396
|
+
//If verticalAllowed is false, keep the old y position
|
|
9397
|
+
if (!verticalAllowed) {
|
|
9398
|
+
paperPosition.y = oldPosition.y;
|
|
9399
|
+
}
|
|
9400
|
+
}
|
|
9401
|
+
logger.info("Element ".concat(props.element.id, " is dragging to position ").concat(JSON.stringify(paperPosition)));
|
|
9402
|
+
//Adjust position of element if it should move as a port on parent port area
|
|
9403
|
+
if (props.element.moveAsPortOnParent && props.element.parentElement) {
|
|
9404
|
+
paperPosition = adjustElementPositionOnParentPortArea(paperPosition, true);
|
|
9405
|
+
updateElementPosition(paperPosition);
|
|
9406
|
+
}
|
|
9407
|
+
else {
|
|
9408
|
+
var relativePosition = transformAbsPositionToElementRelativePosition(paperPosition, props.element);
|
|
9409
|
+
updateElementPosition(relativePosition);
|
|
9410
|
+
}
|
|
9411
|
+
//let newElementPosition = updateElementPosition(props.element, newPosition.x, newPosition.y, true)
|
|
9412
|
+
logger.info("Element ".concat(props.element.id, " is moving to relative position ").concat(JSON.stringify(props.element.position)));
|
|
9413
|
+
onMoved === null || onMoved === void 0 ? void 0 : onMoved(props.element, oldPosition, paperPosition);
|
|
9414
|
+
}, onResize: function (width, height) {
|
|
9415
|
+
var oldSize = size;
|
|
9416
|
+
var newSize = { width: width, height: height };
|
|
9417
|
+
updateElementSize(newSize);
|
|
9418
|
+
if (onResized) {
|
|
9419
|
+
onResized(props.element, oldSize, newSize);
|
|
9420
|
+
}
|
|
9421
|
+
} }),
|
|
9422
|
+
potentialPortPosition && (portPlaceholderShape
|
|
9423
|
+
? React.createElement("svg", { x: potentialPortPosition.x, y: potentialPortPosition.y }, portPlaceholderShape)
|
|
9424
|
+
: 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 })),
|
|
9425
|
+
renderedPorts,
|
|
9426
|
+
renderedTexts,
|
|
9427
|
+
children));
|
|
9233
9428
|
});
|
|
9234
9429
|
var Element$1 = React.memo(Element);
|
|
9235
9430
|
|
|
@@ -9476,35 +9671,44 @@ function convertElementsToTree(elements) {
|
|
|
9476
9671
|
return parsedElementsInTree;
|
|
9477
9672
|
}
|
|
9478
9673
|
var Paper = function (props) {
|
|
9479
|
-
var _a,
|
|
9480
|
-
|
|
9481
|
-
|
|
9482
|
-
var
|
|
9483
|
-
var
|
|
9484
|
-
var
|
|
9485
|
-
var
|
|
9486
|
-
var
|
|
9487
|
-
var
|
|
9488
|
-
var
|
|
9489
|
-
var
|
|
9490
|
-
var
|
|
9674
|
+
var _a = React.useState({ elements: [], elementsInTree: [] }), elementsState = _a[0], setElementsState = _a[1];
|
|
9675
|
+
// const [elements, setElements] = React.useState<IElementState[]>([]);
|
|
9676
|
+
// const [elementsInTree, setElementsInTree] = React.useState<IElementInTreeState[]>([]);
|
|
9677
|
+
var _b = React.useState(), selectedElement = _b[0], setSelectedElement = _b[1];
|
|
9678
|
+
var _c = React.useState(false), autoEnabledDraggingSelectedElement = _c[0], setAutoEnabledDraggingSelectedElement = _c[1];
|
|
9679
|
+
var _d = React.useState([]), links = _d[0], setLinks = _d[1];
|
|
9680
|
+
var _e = React.useState(), selectedLink = _e[0], setSelectedLink = _e[1];
|
|
9681
|
+
var _f = React.useState(null), tempLink = _f[0], setTempLink = _f[1];
|
|
9682
|
+
var _g = React.useState([]), texts = _g[0], setTexts = _g[1];
|
|
9683
|
+
var _h = React.useState(), selectedText = _h[0], setSelectedText = _h[1];
|
|
9684
|
+
var _j = React.useState(null), selectedElementSVG = _j[0], setSelectedElementSVG = _j[1];
|
|
9685
|
+
var _k = React.useState(false), mouseDownedOnPaper = _k[0], setMouseDownedOnPaper = _k[1];
|
|
9491
9686
|
var paperEventEmitter = React.useContext(paperEventEmitterContext);
|
|
9492
9687
|
var zoom = useZoomContext().zoom;
|
|
9493
9688
|
var zoomRef = React.useRef(zoom);
|
|
9494
9689
|
var paperContainerRef = React.useRef(null);
|
|
9495
9690
|
var tempLinkRef = React.useRef(tempLink); //Cache tempLink to avoid re-render when tempLink changed
|
|
9496
|
-
var elementsRef = React.useRef(
|
|
9691
|
+
var elementsRef = React.useRef([]); //Cache elements to avoid re-render when elements changed
|
|
9497
9692
|
var linksRef = React.useRef(links); //Cache links to avoid re-render when links changed
|
|
9498
9693
|
var textsRef = React.useRef(texts); //Cache texts to avoid re-render when texts changed
|
|
9499
9694
|
var size = props.size;
|
|
9500
|
-
var
|
|
9501
|
-
|
|
9695
|
+
var onPortMoved = props.onPortMoved, onPortSelected = props.onPortSelected, onPortMouseDown = props.onPortMouseDown, onPortMouseUp = props.onPortMouseUp,
|
|
9696
|
+
//onPortsChanged,
|
|
9697
|
+
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;
|
|
9698
|
+
var handleElementsState = React.useCallback(function (elements) {
|
|
9699
|
+
var elementsInTree = convertElementsToTree(elements);
|
|
9700
|
+
setElementsState({ elements: __spreadArray([], elements, true), elementsInTree: elementsInTree });
|
|
9701
|
+
// elementsRef.current = [...elements];
|
|
9702
|
+
}, []);
|
|
9703
|
+
var rerenderWhenAnyElementChanged = React.useCallback(function () {
|
|
9704
|
+
setElementsState(function (prev) { return ({ elements: __spreadArray([], prev.elements, true), elementsInTree: __spreadArray([], prev.elementsInTree, true) }); });
|
|
9705
|
+
}, []);
|
|
9502
9706
|
React.useEffect(function () {
|
|
9503
9707
|
zoomRef.current = zoom;
|
|
9504
9708
|
}, [zoom]);
|
|
9505
9709
|
React.useEffect(function () {
|
|
9506
|
-
|
|
9507
|
-
}, [props.elements]);
|
|
9710
|
+
handleElementsState(props.elements);
|
|
9711
|
+
}, [handleElementsState, props.elements]);
|
|
9508
9712
|
React.useEffect(function () {
|
|
9509
9713
|
setLinks(__spreadArray([], props.links || [], true));
|
|
9510
9714
|
}, [props.links]);
|
|
@@ -9513,36 +9717,45 @@ var Paper = function (props) {
|
|
|
9513
9717
|
}, [props.texts]);
|
|
9514
9718
|
React.useEffect(function () {
|
|
9515
9719
|
var off = manuallyTriggerRenderElementHandler(function (elementId) {
|
|
9516
|
-
|
|
9517
|
-
|
|
9518
|
-
if (
|
|
9519
|
-
|
|
9520
|
-
|
|
9720
|
+
//find the element
|
|
9721
|
+
var element = elementsState.elements.find(function (elm) { return elm.id === elementId; });
|
|
9722
|
+
if (!element)
|
|
9723
|
+
return;
|
|
9724
|
+
element.version = (element.version || 0) + 1;
|
|
9725
|
+
handleElementsState(elementsState.elements);
|
|
9521
9726
|
});
|
|
9522
9727
|
return function () {
|
|
9523
9728
|
off();
|
|
9524
9729
|
};
|
|
9525
|
-
}, [manuallyTriggerRenderElementHandler, onElementsChanged,
|
|
9730
|
+
}, [elementsState.elements, handleElementsState, manuallyTriggerRenderElementHandler, onElementsChanged, rerenderWhenAnyElementChanged]);
|
|
9526
9731
|
React.useEffect(function () {
|
|
9527
|
-
|
|
9528
|
-
|
|
9529
|
-
|
|
9530
|
-
|
|
9732
|
+
if (manuallySelectElementHandler) {
|
|
9733
|
+
var off_1 = manuallySelectElementHandler(function (element) {
|
|
9734
|
+
setSelectedElement(element || undefined);
|
|
9735
|
+
if (element) {
|
|
9736
|
+
onElementSelected === null || onElementSelected === void 0 ? void 0 : onElementSelected(element);
|
|
9737
|
+
}
|
|
9738
|
+
});
|
|
9739
|
+
return function () {
|
|
9740
|
+
off_1();
|
|
9741
|
+
};
|
|
9742
|
+
}
|
|
9743
|
+
}, [manuallySelectElementHandler, onElementSelected]);
|
|
9744
|
+
React.useEffect(function () {
|
|
9745
|
+
if (manuallyTriggerDraggingElementHandler) {
|
|
9746
|
+
var off_2 = manuallyTriggerDraggingElementHandler(function (element) {
|
|
9747
|
+
setSelectedElement(element);
|
|
9531
9748
|
onElementSelected === null || onElementSelected === void 0 ? void 0 : onElementSelected(element);
|
|
9532
|
-
|
|
9533
|
-
|
|
9534
|
-
|
|
9535
|
-
|
|
9536
|
-
|
|
9537
|
-
|
|
9538
|
-
|
|
9539
|
-
return function () {
|
|
9540
|
-
offs.forEach(function (off) { return off(); });
|
|
9541
|
-
};
|
|
9542
|
-
}, [manuallySelectElementHandler, manuallyTriggerDraggingElementHandler, onElementSelected]);
|
|
9749
|
+
setAutoEnabledDraggingSelectedElement(true);
|
|
9750
|
+
});
|
|
9751
|
+
return function () {
|
|
9752
|
+
off_2();
|
|
9753
|
+
};
|
|
9754
|
+
}
|
|
9755
|
+
}, [elementsState.elements, manuallyTriggerDraggingElementHandler, onElementSelected]);
|
|
9543
9756
|
React.useEffect(function () {
|
|
9544
9757
|
if (manuallyTriggerStartedLinkingHandler) {
|
|
9545
|
-
var
|
|
9758
|
+
var off_3 = manuallyTriggerStartedLinkingHandler(function (sourceElement, sourcePort) {
|
|
9546
9759
|
var newLink = {
|
|
9547
9760
|
id: generateUniqueId(),
|
|
9548
9761
|
points: [],
|
|
@@ -9553,19 +9766,19 @@ var Paper = function (props) {
|
|
|
9553
9766
|
paperEventEmitter.emitElementLinkStarted(newLink);
|
|
9554
9767
|
});
|
|
9555
9768
|
return function () {
|
|
9556
|
-
|
|
9769
|
+
off_3();
|
|
9557
9770
|
};
|
|
9558
9771
|
}
|
|
9559
9772
|
}, [manuallyTriggerStartedLinkingHandler, paperEventEmitter]);
|
|
9560
|
-
|
|
9561
|
-
|
|
9562
|
-
|
|
9563
|
-
}, [elements])
|
|
9564
|
-
//Cache elements to avoid re-render when elements changed
|
|
9565
|
-
|
|
9566
|
-
|
|
9567
|
-
|
|
9568
|
-
}, [elements, updateElementsTree])
|
|
9773
|
+
// const updateElementsTree = useCallback(() => {
|
|
9774
|
+
// const parsedElementsInTree = convertElementsToTree(element)
|
|
9775
|
+
// setElementsInTree(parsedElementsInTree)
|
|
9776
|
+
// }, [elements])
|
|
9777
|
+
// //Cache elements to avoid re-render when elements changed
|
|
9778
|
+
// useEffect(() => {
|
|
9779
|
+
// elementsRef.current = elements;
|
|
9780
|
+
// updateElementsTree();
|
|
9781
|
+
// }, [elements, updateElementsTree])
|
|
9569
9782
|
//Cache links to avoid re-render when links changed
|
|
9570
9783
|
React.useEffect(function () {
|
|
9571
9784
|
linksRef.current = links;
|
|
@@ -9601,7 +9814,7 @@ var Paper = function (props) {
|
|
|
9601
9814
|
setSelectedElementSVG(null);
|
|
9602
9815
|
setSelectedLink(undefined);
|
|
9603
9816
|
//broadcast selected port to parent component
|
|
9604
|
-
var element =
|
|
9817
|
+
var element = elementsState.elements.find(function (e) { return e.id === elementId; });
|
|
9605
9818
|
if (element) {
|
|
9606
9819
|
onPortSelected === null || onPortSelected === void 0 ? void 0 : onPortSelected(port, element);
|
|
9607
9820
|
}
|
|
@@ -9609,40 +9822,44 @@ var Paper = function (props) {
|
|
|
9609
9822
|
return function () {
|
|
9610
9823
|
portSelectedListener.off();
|
|
9611
9824
|
};
|
|
9612
|
-
}, [paperEventEmitter, onPortSelected]);
|
|
9825
|
+
}, [paperEventEmitter, onPortSelected, elementsState]);
|
|
9613
9826
|
React.useEffect(function () {
|
|
9614
9827
|
//Listen parent of elements changed, then update elements tree
|
|
9615
|
-
var parentChangedCancelers =
|
|
9828
|
+
var parentChangedCancelers = elementsState.elements.map(function (element) {
|
|
9616
9829
|
var _a;
|
|
9617
9830
|
return (_a = element.onParentChanged) === null || _a === void 0 ? void 0 : _a.call(element, function (newPa, oldPa) {
|
|
9618
9831
|
logger.info('onParentChanged');
|
|
9619
|
-
|
|
9832
|
+
handleElementsState(elementsState.elements);
|
|
9620
9833
|
});
|
|
9621
9834
|
});
|
|
9622
|
-
|
|
9623
|
-
|
|
9835
|
+
return function () {
|
|
9836
|
+
parentChangedCancelers.forEach(function (canceller) { return canceller === null || canceller === void 0 ? void 0 : canceller(); });
|
|
9837
|
+
};
|
|
9838
|
+
}, [handleElementsState, rerenderWhenAnyElementChanged, elementsState]);
|
|
9839
|
+
React.useEffect(function () {
|
|
9840
|
+
//Listen a new text added, then re-render the element component
|
|
9841
|
+
//TODO: to be moved to Element component
|
|
9842
|
+
var addedTextCancelers = elementsRef.current.map(function (element) {
|
|
9624
9843
|
var _a;
|
|
9625
|
-
return (_a = element.
|
|
9626
|
-
logger.info("A new
|
|
9627
|
-
|
|
9628
|
-
|
|
9629
|
-
|
|
9630
|
-
|
|
9631
|
-
|
|
9632
|
-
|
|
9633
|
-
|
|
9634
|
-
|
|
9635
|
-
|
|
9636
|
-
|
|
9637
|
-
onElementsChanged(newElements);
|
|
9638
|
-
}
|
|
9844
|
+
return (_a = element.onAddedText) === null || _a === void 0 ? void 0 : _a.call(element, function (newText) {
|
|
9845
|
+
logger.info("A new text has been added to element ".concat(element.id));
|
|
9846
|
+
rerenderWhenAnyElementChanged();
|
|
9847
|
+
});
|
|
9848
|
+
});
|
|
9849
|
+
// Listen a text deleted, then re-render the element component
|
|
9850
|
+
//TODO: to be moved to Element component
|
|
9851
|
+
var deletedTextCancelers = elementsRef.current.map(function (element) {
|
|
9852
|
+
var _a;
|
|
9853
|
+
return (_a = element.onDeletedText) === null || _a === void 0 ? void 0 : _a.call(element, function (deletedTextId) {
|
|
9854
|
+
logger.info("A text has been deleted from element ".concat(element.id));
|
|
9855
|
+
rerenderWhenAnyElementChanged();
|
|
9639
9856
|
});
|
|
9640
9857
|
});
|
|
9641
9858
|
return function () {
|
|
9642
|
-
|
|
9643
|
-
|
|
9859
|
+
addedTextCancelers.forEach(function (canceller) { return canceller(); });
|
|
9860
|
+
deletedTextCancelers.forEach(function (canceller) { return canceller(); });
|
|
9644
9861
|
};
|
|
9645
|
-
}, [
|
|
9862
|
+
}, [elementsState.elements, onElementsChanged, rerenderWhenAnyElementChanged]);
|
|
9646
9863
|
// //Update elements tree when length of elements change
|
|
9647
9864
|
// useEffect(() => {
|
|
9648
9865
|
// updateElementsTree();
|
|
@@ -9660,15 +9877,15 @@ var Paper = function (props) {
|
|
|
9660
9877
|
//Listen command delete selected for element
|
|
9661
9878
|
React.useEffect(function () {
|
|
9662
9879
|
var listener = paperEventEmitter.onCommandDeleteSelectedElement(function () {
|
|
9663
|
-
if (selectedElement) {
|
|
9880
|
+
if (selectedElement && selectedElement.removable !== false) {
|
|
9664
9881
|
selectedElement.parentElement = undefined; //Remove parent element to avoid memory leak. This will remove the element from the parent element's childrenElements array.
|
|
9665
9882
|
var deletedChildElements = getChildOfElement(selectedElement);
|
|
9666
9883
|
var deletedElementIds_1 = __spreadArray(__spreadArray([], deletedChildElements, true), [selectedElement], false).map(function (e) { return e.id; });
|
|
9667
|
-
var prevElements =
|
|
9884
|
+
var prevElements = elementsState.elements;
|
|
9668
9885
|
var newElements = prevElements.filter(function (e) { return !deletedElementIds_1.includes(e.id); });
|
|
9669
9886
|
onElementDeleted === null || onElementDeleted === void 0 ? void 0 : onElementDeleted(selectedElement);
|
|
9670
9887
|
//Set state to re-render component
|
|
9671
|
-
|
|
9888
|
+
handleElementsState(newElements);
|
|
9672
9889
|
if (onElementsChanged) {
|
|
9673
9890
|
onElementsChanged(newElements);
|
|
9674
9891
|
}
|
|
@@ -9690,14 +9907,20 @@ var Paper = function (props) {
|
|
|
9690
9907
|
return function () {
|
|
9691
9908
|
listener.off();
|
|
9692
9909
|
};
|
|
9693
|
-
}, [selectedElement, onElementSelected, onElementsChanged, onLinksChanged, getChildOfElement, paperEventEmitter, onElementDeleted]);
|
|
9910
|
+
}, [selectedElement, elementsState, onElementSelected, onElementsChanged, onLinksChanged, getChildOfElement, paperEventEmitter, onElementDeleted, handleElementsState]);
|
|
9911
|
+
var removeElementLink = React.useCallback(function (elementLink) {
|
|
9912
|
+
if (elementLink.removable === false)
|
|
9913
|
+
return linksRef.current;
|
|
9914
|
+
var prevLinks = linksRef.current;
|
|
9915
|
+
var newLinks = prevLinks.filter(function (l) { return l.id !== elementLink.id; });
|
|
9916
|
+
return newLinks;
|
|
9917
|
+
}, []);
|
|
9694
9918
|
//Listen command delete selected for link
|
|
9695
9919
|
React.useEffect(function () {
|
|
9696
9920
|
var listener = paperEventEmitter.onCommandDeleteSelectedLink(function () {
|
|
9697
9921
|
if (selectedLink) {
|
|
9698
|
-
var
|
|
9699
|
-
|
|
9700
|
-
setLinks(links);
|
|
9922
|
+
var newLinks = removeElementLink(selectedLink);
|
|
9923
|
+
setLinks(newLinks);
|
|
9701
9924
|
setSelectedLink(undefined);
|
|
9702
9925
|
if (onLinksChanged) {
|
|
9703
9926
|
onLinksChanged(newLinks);
|
|
@@ -9711,11 +9934,11 @@ var Paper = function (props) {
|
|
|
9711
9934
|
return function () {
|
|
9712
9935
|
listener.off();
|
|
9713
9936
|
};
|
|
9714
|
-
}, [selectedLink, onLinksChanged, onLinkSelected,
|
|
9937
|
+
}, [selectedLink, onLinksChanged, onLinkSelected, paperEventEmitter, removeElementLink]);
|
|
9715
9938
|
//Listen command delete selected for Text
|
|
9716
9939
|
React.useEffect(function () {
|
|
9717
9940
|
var listener = paperEventEmitter.onCommandDeleteSelectedText(function () {
|
|
9718
|
-
if (selectedText) {
|
|
9941
|
+
if (selectedText && selectedText.removable !== false) {
|
|
9719
9942
|
var prevTexts = textsRef.current;
|
|
9720
9943
|
var newTexts = prevTexts.filter(function (t) { return t.id !== selectedText.id; });
|
|
9721
9944
|
setTexts(newTexts);
|
|
@@ -9804,32 +10027,59 @@ var Paper = function (props) {
|
|
|
9804
10027
|
y: yPosOnPaper
|
|
9805
10028
|
});
|
|
9806
10029
|
};
|
|
9807
|
-
var
|
|
9808
|
-
//
|
|
9809
|
-
|
|
9810
|
-
var
|
|
9811
|
-
|
|
9812
|
-
var
|
|
10030
|
+
var handleElementMoved = React.useCallback(function (element, oldPosition, paperPosition) {
|
|
10031
|
+
// Start updating the position of links connected to the selected element
|
|
10032
|
+
var childElements = getChildOfElement(element);
|
|
10033
|
+
var elementIds = __spreadArray(__spreadArray([], childElements.map(function (e) { return e.id; }), true), [element.id], false);
|
|
10034
|
+
var offsetX = element.position.x - oldPosition.x;
|
|
10035
|
+
var offsetY = element.position.y - oldPosition.y;
|
|
10036
|
+
// Update position of all points of links that are connected to the selected element
|
|
10037
|
+
var newLinks = linksRef.current.map(function (link) {
|
|
10038
|
+
var isUpdate = elementIds.includes(link.sourceElement.id) && elementIds.includes(link.targetElement.id);
|
|
10039
|
+
if (link.points && isUpdate) {
|
|
10040
|
+
link.points.forEach(function (p) {
|
|
10041
|
+
p.x += offsetX;
|
|
10042
|
+
p.y += offsetY;
|
|
10043
|
+
});
|
|
10044
|
+
}
|
|
10045
|
+
return link;
|
|
10046
|
+
});
|
|
9813
10047
|
setLinks(newLinks);
|
|
9814
|
-
|
|
9815
|
-
|
|
10048
|
+
// onLinksChanged?.(newLinks);
|
|
10049
|
+
// End updating the position of links connected to the selected element
|
|
10050
|
+
if (onElementMoved) {
|
|
10051
|
+
onElementMoved(element.position, element, paperPosition);
|
|
9816
10052
|
}
|
|
9817
|
-
|
|
9818
|
-
|
|
9819
|
-
|
|
9820
|
-
|
|
9821
|
-
|
|
9822
|
-
|
|
9823
|
-
if (onLinksChanged) {
|
|
9824
|
-
onLinksChanged(newLinks);
|
|
10053
|
+
paperEventEmitter.emitElementMoved(element, oldPosition, element.position);
|
|
10054
|
+
setMouseDownedOnPaper(false);
|
|
10055
|
+
}, [getChildOfElement, onElementMoved, paperEventEmitter]);
|
|
10056
|
+
var handleElementResized = React.useCallback(function (element, oldSize, newSize) {
|
|
10057
|
+
if (onElementResized) {
|
|
10058
|
+
onElementResized(newSize, element);
|
|
9825
10059
|
}
|
|
9826
|
-
|
|
10060
|
+
paperEventEmitter.emitElementResized(element, oldSize, newSize);
|
|
10061
|
+
setMouseDownedOnPaper(false);
|
|
10062
|
+
}, [paperEventEmitter, onElementResized]);
|
|
10063
|
+
// const handlePathChange = useCallback((path: string, id: string) => {
|
|
10064
|
+
// //Update path of element link, that changed
|
|
10065
|
+
// //const prevLinks = linksRef.current;
|
|
10066
|
+
// const updatedLink = linksRef.current.find(l => l.id === id)
|
|
10067
|
+
// if (updatedLink) {
|
|
10068
|
+
// updatedLink.path = path;
|
|
10069
|
+
// }
|
|
10070
|
+
// }, [])
|
|
10071
|
+
//TODO: to be cleaned
|
|
10072
|
+
var handlePointsOfLinkChange = React.useCallback(function (points, linkId) {
|
|
10073
|
+
var updatedLinkIndex = linksRef.current.findIndex(function (l) { return l.id === linkId; });
|
|
10074
|
+
linksRef.current[updatedLinkIndex].points = points;
|
|
10075
|
+
}, []);
|
|
9827
10076
|
var handlePortMoved = React.useCallback(function (port, elementId, oldPosition, newPosition) {
|
|
9828
|
-
var
|
|
10077
|
+
var _a;
|
|
10078
|
+
var element = elementsState.elements.find(function (e) { return e.id === elementId; });
|
|
9829
10079
|
if (element) {
|
|
9830
10080
|
//set links equals a clone links to re-render links with new position
|
|
9831
10081
|
var prevLinks = linksRef.current;
|
|
9832
|
-
|
|
10082
|
+
prevLinks.map(function (link) {
|
|
9833
10083
|
var _a, _b;
|
|
9834
10084
|
if (link.sourceElement.id === elementId && link.sourcePort.id === port.id) {
|
|
9835
10085
|
link.sourcePort.position = newPosition;
|
|
@@ -9851,10 +10101,10 @@ var Paper = function (props) {
|
|
|
9851
10101
|
return link;
|
|
9852
10102
|
});
|
|
9853
10103
|
});
|
|
9854
|
-
if (onLinksChanged) {
|
|
9855
|
-
|
|
9856
|
-
}
|
|
9857
|
-
|
|
10104
|
+
// if (onLinksChanged) {
|
|
10105
|
+
// onLinksChanged(newLinks)
|
|
10106
|
+
// }
|
|
10107
|
+
//const newElements = elementsRef.current;
|
|
9858
10108
|
// newElements[updatedElementIndex].ports = newElements[updatedElementIndex].ports?.map(p => {
|
|
9859
10109
|
// if (p.id === port.id) {
|
|
9860
10110
|
// p.position = newPosition
|
|
@@ -9863,37 +10113,50 @@ var Paper = function (props) {
|
|
|
9863
10113
|
// })
|
|
9864
10114
|
//Update port position in element, not re-render
|
|
9865
10115
|
//To avoid re-render
|
|
9866
|
-
setElements(
|
|
9867
|
-
|
|
9868
|
-
|
|
9869
|
-
|
|
9870
|
-
|
|
9871
|
-
|
|
9872
|
-
|
|
9873
|
-
|
|
9874
|
-
|
|
9875
|
-
|
|
9876
|
-
});
|
|
9877
|
-
}
|
|
9878
|
-
return newElements;
|
|
9879
|
-
});
|
|
9880
|
-
if (onElementsChanged) {
|
|
9881
|
-
onElementsChanged(newElements);
|
|
10116
|
+
// setElements(prev => {
|
|
10117
|
+
// const newElements = [...prev]
|
|
10118
|
+
var updatedElement = elementsState.elements.find(function (e) { return e.id === elementId; });
|
|
10119
|
+
if (updatedElement) {
|
|
10120
|
+
updatedElement.ports = (_a = updatedElement.ports) === null || _a === void 0 ? void 0 : _a.map(function (p) {
|
|
10121
|
+
if (p.id === port.id) {
|
|
10122
|
+
p.position = newPosition;
|
|
10123
|
+
}
|
|
10124
|
+
return p;
|
|
10125
|
+
});
|
|
9882
10126
|
}
|
|
10127
|
+
rerenderWhenAnyElementChanged();
|
|
10128
|
+
// return newElements
|
|
10129
|
+
// });
|
|
9883
10130
|
if (onPortMoved) {
|
|
9884
10131
|
onPortMoved(newPosition, port, element);
|
|
9885
10132
|
}
|
|
9886
10133
|
}
|
|
9887
|
-
}, [onPortMoved,
|
|
10134
|
+
}, [onPortMoved, elementsState, rerenderWhenAnyElementChanged]);
|
|
10135
|
+
React.useEffect(function () {
|
|
10136
|
+
//on port manually trigger render
|
|
10137
|
+
var off = manuallyTriggerRenderPortHandler(function (portId, elementId) {
|
|
10138
|
+
var _a;
|
|
10139
|
+
//find the element
|
|
10140
|
+
var element = elementsState.elements.find(function (e) { return e.id === elementId; });
|
|
10141
|
+
//find the port
|
|
10142
|
+
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; });
|
|
10143
|
+
if (!element || !port)
|
|
10144
|
+
return;
|
|
10145
|
+
//rerender links connected to the port
|
|
10146
|
+
handlePortMoved(port, elementId, __assign({}, port.position), __assign({}, port.position));
|
|
10147
|
+
});
|
|
10148
|
+
return function () {
|
|
10149
|
+
off();
|
|
10150
|
+
};
|
|
10151
|
+
}, [manuallyTriggerRenderPortHandler, handlePortMoved, elementsState]);
|
|
9888
10152
|
//Handle creating a new element link
|
|
9889
10153
|
var handlePortMouseDown = React.useCallback(function (ev, port, elementId) {
|
|
9890
10154
|
ev.stopPropagation();
|
|
9891
|
-
var element =
|
|
10155
|
+
var element = elementsState.elements.find(function (e) { return e.id === elementId; });
|
|
9892
10156
|
var paperPosition = windowsPositionToPaperPosition({
|
|
9893
10157
|
x: ev.clientX,
|
|
9894
10158
|
y: ev.clientY
|
|
9895
10159
|
}, paperContainerRef.current, zoomRef.current);
|
|
9896
|
-
console.log(paperPosition);
|
|
9897
10160
|
//broadcast port mouse down to parent component
|
|
9898
10161
|
if (element) {
|
|
9899
10162
|
onPortMouseDown === null || onPortMouseDown === void 0 ? void 0 : onPortMouseDown(port, element, paperPosition);
|
|
@@ -9909,7 +10172,7 @@ var Paper = function (props) {
|
|
|
9909
10172
|
setTempLink(newLink);
|
|
9910
10173
|
paperEventEmitter.emitElementLinkStarted(newLink);
|
|
9911
10174
|
}
|
|
9912
|
-
}, [paperEventEmitter, onPortMouseDown]);
|
|
10175
|
+
}, [paperEventEmitter, elementsState, onPortMouseDown]);
|
|
9913
10176
|
var createElementLink = React.useCallback(function (sourcePort, sourceElement, targetPort, targetElement) {
|
|
9914
10177
|
//if no onCreatingLink prop, no link will be created
|
|
9915
10178
|
if (!onCreatingLink) {
|
|
@@ -9920,14 +10183,14 @@ var Paper = function (props) {
|
|
|
9920
10183
|
return null;
|
|
9921
10184
|
//Automatic bending, if is not defined points
|
|
9922
10185
|
if (!newElementLink.points || newElementLink.points.length === 0) {
|
|
9923
|
-
var
|
|
9924
|
-
newElementLink = automationAddPointsToLink(newElementLink,
|
|
10186
|
+
var elements = elementsState.elements;
|
|
10187
|
+
newElementLink = automationAddPointsToLink(newElementLink, elements, MAX_LINK_KNOT_COUNT);
|
|
9925
10188
|
}
|
|
9926
10189
|
return newElementLink;
|
|
9927
|
-
}, [onCreatingLink]);
|
|
10190
|
+
}, [onCreatingLink, elementsState]);
|
|
9928
10191
|
var handlePortMouseUp = React.useCallback(function (ev, port, elementId) {
|
|
9929
10192
|
ev.stopPropagation();
|
|
9930
|
-
var element =
|
|
10193
|
+
var element = elementsState.elements.find(function (e) { return e.id === elementId; });
|
|
9931
10194
|
var paperPosition = windowsPositionToPaperPosition({
|
|
9932
10195
|
x: ev.clientX,
|
|
9933
10196
|
y: ev.clientY
|
|
@@ -9943,7 +10206,7 @@ var Paper = function (props) {
|
|
|
9943
10206
|
var newElementLink = null;
|
|
9944
10207
|
if (isMouseUpOnNotSelf) {
|
|
9945
10208
|
var _a = tempLinkRef.current, sourcePort = _a.sourcePort, sourceElement = _a.sourceElement;
|
|
9946
|
-
var targetElement =
|
|
10209
|
+
var targetElement = elementsState.elements.find(function (e) { return e.id === elementId; });
|
|
9947
10210
|
newElementLink = createElementLink(sourcePort, sourceElement, port, targetElement);
|
|
9948
10211
|
}
|
|
9949
10212
|
if (newElementLink) {
|
|
@@ -9960,14 +10223,14 @@ var Paper = function (props) {
|
|
|
9960
10223
|
}
|
|
9961
10224
|
setTempLink(null);
|
|
9962
10225
|
}
|
|
9963
|
-
}, [paperEventEmitter, createElementLink, onPortMouseUp, onLinksChanged]);
|
|
9964
|
-
|
|
9965
|
-
|
|
9966
|
-
|
|
9967
|
-
|
|
9968
|
-
|
|
9969
|
-
|
|
9970
|
-
}, [onPortsChanged])
|
|
10226
|
+
}, [paperEventEmitter, elementsState, createElementLink, onPortMouseUp, onLinksChanged]);
|
|
10227
|
+
// const handlePortsChanged = useCallback((ports: IPort[], elementId: string) => {
|
|
10228
|
+
// const element = elementsRef.current.find(e => e.id === elementId);
|
|
10229
|
+
// if (element) {
|
|
10230
|
+
// //broadcast ports changed to parent component
|
|
10231
|
+
// onPortsChanged(ports, element);
|
|
10232
|
+
// }
|
|
10233
|
+
// }, [onPortsChanged])
|
|
9971
10234
|
var handleLinkLabelMoved = React.useCallback(function (newX, newY, index, labelType) {
|
|
9972
10235
|
var prevLinks = linksRef.current;
|
|
9973
10236
|
var newLinks = __spreadArray([], prevLinks, true);
|
|
@@ -10059,19 +10322,6 @@ var Paper = function (props) {
|
|
|
10059
10322
|
var handleDeselectLink = function (link, index) {
|
|
10060
10323
|
setSelectedLink(undefined);
|
|
10061
10324
|
};
|
|
10062
|
-
//update absolute position of element and absolute position of children elements
|
|
10063
|
-
var updateElementPosition = function (element, x, y, isRelativePosition) {
|
|
10064
|
-
if (isRelativePosition) {
|
|
10065
|
-
element.position.x = x;
|
|
10066
|
-
element.position.y = y;
|
|
10067
|
-
}
|
|
10068
|
-
else {
|
|
10069
|
-
var relativePosition = transformAbsPositionToElementRelativePosition({ x: x, y: y }, element);
|
|
10070
|
-
element.position.x = relativePosition.x;
|
|
10071
|
-
element.position.y = relativePosition.y;
|
|
10072
|
-
}
|
|
10073
|
-
return element;
|
|
10074
|
-
};
|
|
10075
10325
|
/*
|
|
10076
10326
|
Cache to avoid re-initializing the function when the component re-renders to
|
|
10077
10327
|
avoid causing the components using it to re-render unnecessarily
|
|
@@ -10101,17 +10351,16 @@ var Paper = function (props) {
|
|
|
10101
10351
|
}, [handleLinkLabelContentChanged]);
|
|
10102
10352
|
var handleClickLinkDelete = React.useCallback(function (link, index) {
|
|
10103
10353
|
return function () {
|
|
10104
|
-
var
|
|
10105
|
-
var newLinks = __spreadArray([], prevLinks, true);
|
|
10106
|
-
newLinks.splice(index, 1);
|
|
10354
|
+
var newLinks = removeElementLink(link);
|
|
10107
10355
|
setLinks(newLinks);
|
|
10356
|
+
setSelectedLink(undefined);
|
|
10108
10357
|
if (onLinksChanged) {
|
|
10109
10358
|
onLinksChanged(newLinks);
|
|
10110
10359
|
}
|
|
10111
10360
|
};
|
|
10112
|
-
}, [onLinksChanged]);
|
|
10361
|
+
}, [onLinksChanged, removeElementLink]);
|
|
10113
10362
|
var handleMouseUpAtLinkedPortPlaceholder = React.useCallback(function (link, position, targetElementId) {
|
|
10114
|
-
var targetElement =
|
|
10363
|
+
var targetElement = elementsState.elements.find(function (e) { return e.id === targetElementId; });
|
|
10115
10364
|
if (!targetElement)
|
|
10116
10365
|
return;
|
|
10117
10366
|
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));
|
|
@@ -10141,24 +10390,20 @@ var Paper = function (props) {
|
|
|
10141
10390
|
//Clear tempLink
|
|
10142
10391
|
setTempLink(null);
|
|
10143
10392
|
paperEventEmitter.emitElementLinkEnded();
|
|
10144
|
-
}, [onCreatingPortByLinking, createElementLink, paperEventEmitter, onLinksChanged]);
|
|
10145
|
-
|
|
10146
|
-
|
|
10147
|
-
|
|
10148
|
-
|
|
10149
|
-
|
|
10150
|
-
|
|
10151
|
-
|
|
10152
|
-
|
|
10153
|
-
|
|
10154
|
-
|
|
10155
|
-
|
|
10156
|
-
|
|
10157
|
-
|
|
10158
|
-
if (onElementsChanged) {
|
|
10159
|
-
onElementsChanged(newElements);
|
|
10160
|
-
}
|
|
10161
|
-
}, [onElementsChanged]);
|
|
10393
|
+
}, [onCreatingPortByLinking, elementsState, createElementLink, paperEventEmitter, onLinksChanged]);
|
|
10394
|
+
// const handleElementTextChange = useCallback((elementId: string, textId: string, newContent: string) => {
|
|
10395
|
+
// // const prevElms = elementsRef.current;
|
|
10396
|
+
// elementsState.elements.forEach(curEle => {
|
|
10397
|
+
// //Find changed text of element to update the content for it.
|
|
10398
|
+
// if (curEle.id === elementId && curEle.texts) {
|
|
10399
|
+
// const updatedTextId = curEle.texts.findIndex(t => t.id === textId)
|
|
10400
|
+
// if (updatedTextId !== undefined) {
|
|
10401
|
+
// curEle.texts[updatedTextId].content = newContent;
|
|
10402
|
+
// }
|
|
10403
|
+
// }
|
|
10404
|
+
// })
|
|
10405
|
+
// rerenderWhenAnyElementChanged();
|
|
10406
|
+
// }, [rerenderWhenAnyElementChanged, elementsState])
|
|
10162
10407
|
var handleElementClicked = React.useCallback(function (elementId, e, ref) {
|
|
10163
10408
|
e.stopPropagation();
|
|
10164
10409
|
var tempLink = tempLinkRef.current;
|
|
@@ -10168,7 +10413,7 @@ var Paper = function (props) {
|
|
|
10168
10413
|
paperEventEmitter.emitElementLinkEnded();
|
|
10169
10414
|
}
|
|
10170
10415
|
else {
|
|
10171
|
-
var element =
|
|
10416
|
+
var element = elementsState.elements.find(function (e) { return e.id === elementId; });
|
|
10172
10417
|
// Select the element only if it is selectable
|
|
10173
10418
|
if (element && element.selectable) {
|
|
10174
10419
|
setSelectedElementSVG(ref);
|
|
@@ -10178,24 +10423,24 @@ var Paper = function (props) {
|
|
|
10178
10423
|
}
|
|
10179
10424
|
}
|
|
10180
10425
|
setMouseDownedOnPaper(false);
|
|
10181
|
-
}, [paperEventEmitter]);
|
|
10426
|
+
}, [paperEventEmitter, elementsState.elements]);
|
|
10182
10427
|
var handlePortContextMenu = React.useCallback(function (port, elementId, e) {
|
|
10183
10428
|
e.preventDefault();
|
|
10184
|
-
var element =
|
|
10429
|
+
var element = elementsState.elements.find(function (e) { return e.id === elementId; });
|
|
10185
10430
|
if (element) {
|
|
10186
10431
|
onPortContextMenu === null || onPortContextMenu === void 0 ? void 0 : onPortContextMenu(port, element, e);
|
|
10187
10432
|
}
|
|
10188
|
-
}, [onPortContextMenu]);
|
|
10433
|
+
}, [onPortContextMenu, elementsState]);
|
|
10189
10434
|
var handleContextMenu = React.useCallback(function (elementId, e, ref) {
|
|
10190
10435
|
e.preventDefault();
|
|
10191
|
-
var element =
|
|
10436
|
+
var element = elementsState.elements.find(function (e) { return e.id === elementId; });
|
|
10192
10437
|
if (element) {
|
|
10193
10438
|
handleElementClicked(elementId, e, ref);
|
|
10194
10439
|
onElementContextMenu === null || onElementContextMenu === void 0 ? void 0 : onElementContextMenu(element, e);
|
|
10195
10440
|
}
|
|
10196
|
-
}, [onElementContextMenu, handleElementClicked]);
|
|
10441
|
+
}, [onElementContextMenu, handleElementClicked, elementsState]);
|
|
10197
10442
|
var handleMouseUp = React.useCallback(function (ev, elementId) {
|
|
10198
|
-
var element =
|
|
10443
|
+
var element = elementsState.elements.find(function (ele) { return ele.id === elementId; });
|
|
10199
10444
|
var paperPosition = windowsPositionToPaperPosition({
|
|
10200
10445
|
x: ev.clientX,
|
|
10201
10446
|
y: ev.clientY
|
|
@@ -10203,9 +10448,9 @@ var Paper = function (props) {
|
|
|
10203
10448
|
if (element) {
|
|
10204
10449
|
onElementMouseUp === null || onElementMouseUp === void 0 ? void 0 : onElementMouseUp(ev, element, paperPosition);
|
|
10205
10450
|
}
|
|
10206
|
-
}, [onElementMouseUp]);
|
|
10451
|
+
}, [onElementMouseUp, elementsState]);
|
|
10207
10452
|
var handleMouseDown = React.useCallback(function (ev, elementId) {
|
|
10208
|
-
var element =
|
|
10453
|
+
var element = elementsState.elements.find(function (ele) { return ele.id === elementId; });
|
|
10209
10454
|
var paperPosition = windowsPositionToPaperPosition({
|
|
10210
10455
|
x: ev.clientX,
|
|
10211
10456
|
y: ev.clientY
|
|
@@ -10213,9 +10458,9 @@ var Paper = function (props) {
|
|
|
10213
10458
|
if (element) {
|
|
10214
10459
|
onElementMouseDown === null || onElementMouseDown === void 0 ? void 0 : onElementMouseDown(ev, element, paperPosition);
|
|
10215
10460
|
}
|
|
10216
|
-
}, [onElementMouseDown]);
|
|
10461
|
+
}, [onElementMouseDown, elementsState]);
|
|
10217
10462
|
var handleMouseMove = React.useCallback(function (ev, elementId) {
|
|
10218
|
-
var element =
|
|
10463
|
+
var element = elementsState.elements.find(function (ele) { return ele.id === elementId; });
|
|
10219
10464
|
var paperPosition = windowsPositionToPaperPosition({
|
|
10220
10465
|
x: ev.clientX,
|
|
10221
10466
|
y: ev.clientY
|
|
@@ -10223,9 +10468,9 @@ var Paper = function (props) {
|
|
|
10223
10468
|
if (element) {
|
|
10224
10469
|
onElementMouseMove === null || onElementMouseMove === void 0 ? void 0 : onElementMouseMove(ev, element, paperPosition);
|
|
10225
10470
|
}
|
|
10226
|
-
}, [onElementMouseMove]);
|
|
10471
|
+
}, [onElementMouseMove, elementsState]);
|
|
10227
10472
|
var handleMouseLeave = React.useCallback(function (ev, elementId) {
|
|
10228
|
-
var element =
|
|
10473
|
+
var element = elementsState.elements.find(function (ele) { return ele.id === elementId; });
|
|
10229
10474
|
var paperPosition = windowsPositionToPaperPosition({
|
|
10230
10475
|
x: ev.clientX,
|
|
10231
10476
|
y: ev.clientY
|
|
@@ -10233,116 +10478,43 @@ var Paper = function (props) {
|
|
|
10233
10478
|
if (element) {
|
|
10234
10479
|
onElementMouseLeave === null || onElementMouseLeave === void 0 ? void 0 : onElementMouseLeave(ev, element, paperPosition);
|
|
10235
10480
|
}
|
|
10236
|
-
}, [onElementMouseLeave]);
|
|
10481
|
+
}, [onElementMouseLeave, elementsState]);
|
|
10237
10482
|
var renderElementInTree = React.useCallback(function (element) {
|
|
10483
|
+
var _a;
|
|
10238
10484
|
logger.info("Rendering element tree for element ".concat(element.id));
|
|
10239
10485
|
//use the defined react element or the default Element component
|
|
10240
10486
|
var ReactElement = element.reactElement || Element$1;
|
|
10241
10487
|
return (React.createElement("g", { id: "group-of-element-".concat(element.id), key: element.id },
|
|
10242
|
-
React.createElement(ReactElement, { key: "element-".concat(element.id
|
|
10488
|
+
React.createElement(ReactElement, { key: "element-".concat(element.id, "-").concat(element.version), element: element,
|
|
10489
|
+
//id={element.id}
|
|
10490
|
+
//ref={(refDOM) => element.DOM = refDOM}
|
|
10491
|
+
//height={element.size.height}
|
|
10492
|
+
//width={element.size.width}
|
|
10493
|
+
//x={element.positionAnchor === PositioningAnchor.Center ? element.position.x - element.size.width / 2 : element.position.x}
|
|
10494
|
+
//y={element.positionAnchor === PositioningAnchor.Center ? element.position.y - element.size.height / 2 : element.position.y}
|
|
10495
|
+
//selectable={element.selectable}
|
|
10496
|
+
onClick: handleElementClicked, onContextMenu: handleContextMenu, onMouseUp: handleMouseUp, onMouseDown: handleMouseDown, onMouseMove: handleMouseMove, onMouseLeave: handleMouseLeave, onMoving: onElementMoving, onMoved: handleElementMoved, onResized: handleElementResized, container: paperContainerRef.current,
|
|
10497
|
+
// renderShape={element.renderShape}
|
|
10498
|
+
// cssClass={element.cssClass}
|
|
10499
|
+
// texts={element.texts}
|
|
10500
|
+
// ports={element.ports}
|
|
10501
|
+
// portMoveableAreas={element.portMoveableAreas}
|
|
10502
|
+
// portSlideRailSVGClassName={element.portSlideRailSVGClassName}
|
|
10503
|
+
// portDirection={element.portDirection}
|
|
10504
|
+
// defaultPortSize={element.defaultPortSize}
|
|
10505
|
+
onPortMoved: handlePortMoved, onPortMouseDown: handlePortMouseDown, onPortMouseUp: handlePortMouseUp,
|
|
10506
|
+
// onPortsChanged={handlePortsChanged}
|
|
10507
|
+
onPortContextMenu: handlePortContextMenu,
|
|
10243
10508
|
// portPlaceholderShape={(<Circle x={0} y={0} width={10} height={10} fill='red' positioningAnchor={PositioningAnchor.Center} />)}
|
|
10244
|
-
onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder,
|
|
10245
|
-
|
|
10246
|
-
|
|
10247
|
-
|
|
10248
|
-
enabled: true,
|
|
10249
|
-
keepRatio: true
|
|
10250
|
-
}, 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,
|
|
10251
|
-
//movingOffsetThreshold: ELEMENT_MOVING_OFFSET_THRESHOLD,
|
|
10252
|
-
onMouseDown: function (ev) {
|
|
10253
|
-
if (selectedElement) {
|
|
10254
|
-
var paperPosition = windowsPositionToPaperPosition({
|
|
10255
|
-
x: ev.clientX,
|
|
10256
|
-
y: ev.clientY
|
|
10257
|
-
}, paperContainerRef.current, zoomRef.current);
|
|
10258
|
-
onElementMouseDown === null || onElementMouseDown === void 0 ? void 0 : onElementMouseDown(ev, selectedElement, paperPosition);
|
|
10259
|
-
}
|
|
10260
|
-
}, onMouseUp: function (ev) {
|
|
10261
|
-
if (selectedElement) {
|
|
10262
|
-
var paperPosition = windowsPositionToPaperPosition({
|
|
10263
|
-
x: ev.clientX,
|
|
10264
|
-
y: ev.clientY
|
|
10265
|
-
}, paperContainerRef.current, zoomRef.current);
|
|
10266
|
-
onElementMouseUp === null || onElementMouseUp === void 0 ? void 0 : onElementMouseUp(ev, selectedElement, paperPosition);
|
|
10267
|
-
}
|
|
10268
|
-
}, onMove: function (newX, newY) {
|
|
10269
|
-
if (!selectedElement)
|
|
10270
|
-
return;
|
|
10271
|
-
var oldPosition = __assign({}, selectedElement.position);
|
|
10272
|
-
// Relative position to the paper container
|
|
10273
|
-
var paperPosition = {
|
|
10274
|
-
x: newX,
|
|
10275
|
-
y: newY
|
|
10276
|
-
};
|
|
10277
|
-
//Call onElementMoving to check if the element should be moved or not
|
|
10278
|
-
if (onElementMoving) {
|
|
10279
|
-
var isSkip = onElementMoving(selectedElement, paperPosition);
|
|
10280
|
-
if (!isSkip) {
|
|
10281
|
-
return;
|
|
10282
|
-
}
|
|
10283
|
-
}
|
|
10284
|
-
logger.info("Element ".concat(selectedElement.id, " is dragging to position ").concat(JSON.stringify(paperPosition)));
|
|
10285
|
-
//Adjust position of element if it should move as a port on parent port area
|
|
10286
|
-
if (selectedElement.moveAsPortOnParent && selectedElement.parentElement) {
|
|
10287
|
-
paperPosition = adjustElementPositionOnParentPortArea(selectedElement, paperPosition, true);
|
|
10288
|
-
updateElementPosition(selectedElement, paperPosition.x, paperPosition.y, true);
|
|
10289
|
-
}
|
|
10290
|
-
else {
|
|
10291
|
-
updateElementPosition(selectedElement, paperPosition.x, paperPosition.y, false);
|
|
10292
|
-
}
|
|
10293
|
-
//let newElementPosition = updateElementPosition(selectedElement, newPosition.x, newPosition.y, true)
|
|
10294
|
-
var indexSelectedElement = elements.findIndex(function (e) { return e.id === selectedElement.id; });
|
|
10295
|
-
logger.info("Element ".concat(selectedElement.id, " is moving to relative position ").concat(JSON.stringify(selectedElement.position)));
|
|
10296
|
-
// Start updating the position of links connected to the selected element
|
|
10297
|
-
var childElements = getChildOfElement(selectedElement);
|
|
10298
|
-
var elementIds = __spreadArray(__spreadArray([], childElements.map(function (e) { return e.id; }), true), [selectedElement.id], false);
|
|
10299
|
-
var offsetX = selectedElement.position.x - oldPosition.x;
|
|
10300
|
-
var offsetY = selectedElement.position.y - oldPosition.y;
|
|
10301
|
-
// Update position of all points of links that are connected to the selected element
|
|
10302
|
-
var newLinks = linksRef.current.map(function (link) {
|
|
10303
|
-
var isUpdate = elementIds.includes(link.sourceElement.id) && elementIds.includes(link.targetElement.id);
|
|
10304
|
-
if (link.points && isUpdate) {
|
|
10305
|
-
link.points.forEach(function (p) {
|
|
10306
|
-
p.x += offsetX;
|
|
10307
|
-
p.y += offsetY;
|
|
10308
|
-
});
|
|
10309
|
-
}
|
|
10310
|
-
return link;
|
|
10311
|
-
});
|
|
10312
|
-
onLinksChanged === null || onLinksChanged === void 0 ? void 0 : onLinksChanged(newLinks);
|
|
10313
|
-
// End updating the position of links connected to the selected element
|
|
10314
|
-
//Set state to re-render UI with new position
|
|
10315
|
-
setElementsInTree(function (prev) { return __spreadArray([], prev, true); });
|
|
10316
|
-
if (onElementMoved) {
|
|
10317
|
-
console.log('onElementMoved', selectedElement.position, paperPosition);
|
|
10318
|
-
onElementMoved(selectedElement.position, selectedElement, indexSelectedElement, paperPosition);
|
|
10319
|
-
}
|
|
10320
|
-
paperEventEmitter.emitElementMoved(selectedElement, oldPosition, selectedElement.position);
|
|
10321
|
-
setMouseDownedOnPaper(false);
|
|
10322
|
-
}, onResize: function (width, height) {
|
|
10323
|
-
if (!selectedElement)
|
|
10324
|
-
return;
|
|
10325
|
-
var indexSelectedElement = elements.findIndex(function (e) { return e.id === selectedElement.id; });
|
|
10326
|
-
var oldSize = selectedElement.size;
|
|
10327
|
-
var newSize = { width: width, height: height };
|
|
10328
|
-
elements[indexSelectedElement].size = newSize;
|
|
10329
|
-
var newElements = __spreadArray([], elements, true);
|
|
10330
|
-
setElements(newElements);
|
|
10331
|
-
if (onElementsChanged) {
|
|
10332
|
-
onElementsChanged(newElements);
|
|
10333
|
-
}
|
|
10334
|
-
if (onElementResized) {
|
|
10335
|
-
onElementResized(newSize, selectedElement, indexSelectedElement);
|
|
10336
|
-
}
|
|
10337
|
-
paperEventEmitter.emitElementResized(selectedElement, oldSize, newSize);
|
|
10338
|
-
setMouseDownedOnPaper(false);
|
|
10339
|
-
} }))));
|
|
10340
|
-
}, [manuallyTriggerRenderPortHandler, handleElementClicked, handleContextMenu, handleMouseUp, handleMouseDown, handleMouseMove, handleMouseLeave, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handlePortsChanged, 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, elements, getChildOfElement, paperEventEmitter, onElementResized, onElementsChanged, onElementMoved, onElementMouseDown, onElementMouseUp, onLinksChanged, onElementMoving]);
|
|
10509
|
+
onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder,
|
|
10510
|
+
// onTextUpdated={handleElementTextChange}
|
|
10511
|
+
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))));
|
|
10512
|
+
}, [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]);
|
|
10341
10513
|
var ElementsInTree = React.useMemo(function () {
|
|
10342
|
-
return elementsInTree.map(function (element, index) {
|
|
10514
|
+
return elementsState.elementsInTree.map(function (element, index) {
|
|
10343
10515
|
return renderElementInTree(element);
|
|
10344
10516
|
});
|
|
10345
|
-
}, [elementsInTree, renderElementInTree]);
|
|
10517
|
+
}, [elementsState.elementsInTree, renderElementInTree]);
|
|
10346
10518
|
return (React.createElement("div", { style: { position: "relative" } },
|
|
10347
10519
|
React.createElement(Ruler, { squareSize: 100, border: '1px dashed grey' }),
|
|
10348
10520
|
React.createElement("svg", { tabIndex: 0, width: size.width, height: size.height, ref: paperContainerRef, id: "paper-container", onMouseMove: handlePaperMouseMove, onMouseDown: handleMouseDownOnPaper, onMouseUp: handleMouseUpOnPaper },
|
|
@@ -10350,18 +10522,11 @@ var Paper = function (props) {
|
|
|
10350
10522
|
links && links.map(function (link, index) {
|
|
10351
10523
|
if (!link.targetElement || !link.targetPort)
|
|
10352
10524
|
return null;
|
|
10353
|
-
return (React.createElement(ElementLink, { key: link.id, id: link.id, path: link.path,
|
|
10354
|
-
|
|
10355
|
-
|
|
10356
|
-
}, targetPosition: {
|
|
10357
|
-
x: getAbsolutePosition(link.targetElement).x + link.targetPort.position.x,
|
|
10358
|
-
y: getAbsolutePosition(link.targetElement).y + link.targetPort.position.y
|
|
10359
|
-
}, 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) }));
|
|
10525
|
+
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,
|
|
10526
|
+
//onPathChanged={handlePathChange}
|
|
10527
|
+
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) }));
|
|
10360
10528
|
}),
|
|
10361
|
-
(tempLink === null || tempLink === void 0 ? void 0 : tempLink.tempTargetPosition) && React.createElement(ElementLink, { id: tempLink.id, points: tempLink.points,
|
|
10362
|
-
x: getAbsolutePosition(tempLink.sourceElement).x + tempLink.sourcePort.position.x,
|
|
10363
|
-
y: getAbsolutePosition(tempLink.sourceElement).y + tempLink.sourcePort.position.y
|
|
10364
|
-
}, targetPosition: tempLink.tempTargetPosition, container: paperContainerRef.current, markerStart: tempLink.markerStart, markerEnd: tempLink.markerEnd, markerDistanceFromPort: tempLink.markerDistanceFromPort, markerSize: tempLink.markerSize }),
|
|
10529
|
+
(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 }),
|
|
10365
10530
|
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 () {
|
|
10366
10531
|
setSelectedText(text);
|
|
10367
10532
|
} })); })),
|
|
@@ -10418,9 +10583,6 @@ var Editor = function (_a) {
|
|
|
10418
10583
|
var handlePortSelected = React.useCallback(function (port, element) {
|
|
10419
10584
|
editorContext.onPortSelectedHandler(port, element);
|
|
10420
10585
|
}, [editorContext]);
|
|
10421
|
-
var handlePortsChanged = React.useCallback(function (ports, element) {
|
|
10422
|
-
element.ports = ports;
|
|
10423
|
-
}, []);
|
|
10424
10586
|
var handlePortContextMenu = React.useCallback(function (port, element, event) {
|
|
10425
10587
|
editorContext.onPortContextMenuHandler(port, element, event);
|
|
10426
10588
|
}, [editorContext]);
|
|
@@ -10473,7 +10635,7 @@ var Editor = function (_a) {
|
|
|
10473
10635
|
if (editorContext.onElementMovingHandler) {
|
|
10474
10636
|
return editorContext.onElementMovingHandler(element, newPaperPosition);
|
|
10475
10637
|
}
|
|
10476
|
-
return true;
|
|
10638
|
+
return { horizontalAllowed: true, verticalAllowed: true };
|
|
10477
10639
|
}, [editorContext]);
|
|
10478
10640
|
var handleOnCreatingPortByLinking = React.useCallback(function (sourceElement, sourcePort, targetElement, position) {
|
|
10479
10641
|
if (editorContext.onCreatingPortByLinkingHandler) {
|
|
@@ -10491,11 +10653,14 @@ var Editor = function (_a) {
|
|
|
10491
10653
|
editorContext.onPaperMouseUpHandler(position);
|
|
10492
10654
|
}, [editorContext]);
|
|
10493
10655
|
var handleElementRemoved = React.useCallback(function (element) {
|
|
10494
|
-
|
|
10656
|
+
var _a;
|
|
10657
|
+
editorContext.onElementRemovedHandler(element.id, (_a = element.parentElement) === null || _a === void 0 ? void 0 : _a.id);
|
|
10495
10658
|
}, [editorContext]);
|
|
10496
10659
|
return (React.createElement(EditorConfigurationContextProvider, { value: editorContext.configuration },
|
|
10497
10660
|
React.createElement(ZoomContextProvider, null,
|
|
10498
|
-
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,
|
|
10661
|
+
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,
|
|
10662
|
+
//onPortsChanged={handlePortsChanged}
|
|
10663
|
+
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) }))));
|
|
10499
10664
|
};
|
|
10500
10665
|
|
|
10501
10666
|
exports.CircleRC = Circle;
|