orcasvn-react-diagrams 0.1.33 → 0.1.35
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 +365 -268
- package/dist/cjs/types/components/paper.d.ts +3 -0
- package/dist/cjs/types/models/implementations/EditorContext.d.ts +3 -0
- package/dist/cjs/types/utils/elementLinkUtil.d.ts +2 -0
- package/dist/cjs/types/utils/positionUtil.d.ts +1 -0
- package/dist/esm/index.js +365 -268
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/components/paper.d.ts +3 -0
- package/dist/esm/types/models/implementations/EditorContext.d.ts +3 -0
- package/dist/esm/types/utils/elementLinkUtil.d.ts +2 -0
- package/dist/esm/types/utils/positionUtil.d.ts +1 -0
- package/dist/index.d.ts +3 -0
- package/package.json +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -837,6 +837,9 @@ var EditorContext = /** @class */ (function () {
|
|
|
837
837
|
get: function () {
|
|
838
838
|
return this._elements;
|
|
839
839
|
},
|
|
840
|
+
set: function (value) {
|
|
841
|
+
this._elements = value;
|
|
842
|
+
},
|
|
840
843
|
enumerable: false,
|
|
841
844
|
configurable: true
|
|
842
845
|
});
|
|
@@ -844,6 +847,9 @@ var EditorContext = /** @class */ (function () {
|
|
|
844
847
|
get: function () {
|
|
845
848
|
return this._links;
|
|
846
849
|
},
|
|
850
|
+
set: function (value) {
|
|
851
|
+
this._links = value;
|
|
852
|
+
},
|
|
847
853
|
enumerable: false,
|
|
848
854
|
configurable: true
|
|
849
855
|
});
|
|
@@ -851,6 +857,9 @@ var EditorContext = /** @class */ (function () {
|
|
|
851
857
|
get: function () {
|
|
852
858
|
return this._texts;
|
|
853
859
|
},
|
|
860
|
+
set: function (value) {
|
|
861
|
+
this._texts = value;
|
|
862
|
+
},
|
|
854
863
|
enumerable: false,
|
|
855
864
|
configurable: true
|
|
856
865
|
});
|
|
@@ -858,6 +867,10 @@ var EditorContext = /** @class */ (function () {
|
|
|
858
867
|
return this._elements.find(function (e) { return e.id === elementId; });
|
|
859
868
|
};
|
|
860
869
|
EditorContext.prototype.addElement = function (element) {
|
|
870
|
+
//check if element with the same id already exists
|
|
871
|
+
if (this._elements.find(function (e) { return e.id === element.id; })) {
|
|
872
|
+
throw new Error("Element with id ".concat(element.id, " already exists"));
|
|
873
|
+
}
|
|
861
874
|
this._elements = __spreadArray(__spreadArray([], this._elements, true), [element], false);
|
|
862
875
|
this._eventEmitter.emit(EVENT_EDITOR_CONTEXT_UPDATED);
|
|
863
876
|
};
|
|
@@ -869,6 +882,10 @@ var EditorContext = /** @class */ (function () {
|
|
|
869
882
|
return this._links.find(function (l) { return l.id === linkId; });
|
|
870
883
|
};
|
|
871
884
|
EditorContext.prototype.addLink = function (link) {
|
|
885
|
+
//check if link with the same id already exists
|
|
886
|
+
if (this._links.find(function (l) { return l.id === link.id; })) {
|
|
887
|
+
throw new Error("Link with id ".concat(link.id, " already exists"));
|
|
888
|
+
}
|
|
872
889
|
this._links = __spreadArray(__spreadArray([], this._links, true), [link], false);
|
|
873
890
|
this._eventEmitter.emit(EVENT_EDITOR_CONTEXT_UPDATED);
|
|
874
891
|
};
|
|
@@ -880,6 +897,10 @@ var EditorContext = /** @class */ (function () {
|
|
|
880
897
|
return this._texts.find(function (t) { return t.id === textId; });
|
|
881
898
|
};
|
|
882
899
|
EditorContext.prototype.addText = function (text) {
|
|
900
|
+
//check if text with the same id already exists
|
|
901
|
+
if (this._texts.find(function (t) { return t.id === text.id; })) {
|
|
902
|
+
throw new Error("Text with id ".concat(text.id, " already exists"));
|
|
903
|
+
}
|
|
883
904
|
this._texts = __spreadArray(__spreadArray([], this._texts, true), [text], false);
|
|
884
905
|
this._eventEmitter.emit(EVENT_EDITOR_CONTEXT_UPDATED);
|
|
885
906
|
};
|
|
@@ -7621,13 +7642,15 @@ var generateSubstitutePosition = function (intersectedPosition, targetPosition,
|
|
|
7621
7642
|
};
|
|
7622
7643
|
}
|
|
7623
7644
|
else {
|
|
7645
|
+
//Translate to the left of vertex 1
|
|
7624
7646
|
var leftPosition = {
|
|
7625
|
-
x:
|
|
7626
|
-
y:
|
|
7647
|
+
x: vertex1Position.x - translationOffset,
|
|
7648
|
+
y: vertex1Position.y,
|
|
7627
7649
|
};
|
|
7650
|
+
//Translate to the right of vertex 2
|
|
7628
7651
|
var rightPosition = {
|
|
7629
|
-
x:
|
|
7630
|
-
y:
|
|
7652
|
+
x: vertex2Position.x + translationOffset,
|
|
7653
|
+
y: vertex2Position.y,
|
|
7631
7654
|
};
|
|
7632
7655
|
replacementPosition = findNearestPosition([leftPosition, rightPosition], targetPosition);
|
|
7633
7656
|
}
|
|
@@ -7644,13 +7667,15 @@ var generateSubstitutePosition = function (intersectedPosition, targetPosition,
|
|
|
7644
7667
|
};
|
|
7645
7668
|
}
|
|
7646
7669
|
else {
|
|
7670
|
+
//Translate to the left of vertex 4
|
|
7647
7671
|
var leftPosition = {
|
|
7648
|
-
x:
|
|
7649
|
-
y:
|
|
7672
|
+
x: vertex4Position.x - translationOffset,
|
|
7673
|
+
y: vertex4Position.y,
|
|
7650
7674
|
};
|
|
7675
|
+
//Translate to the right of vertex 3
|
|
7651
7676
|
var rightPosition = {
|
|
7652
|
-
x:
|
|
7653
|
-
y:
|
|
7677
|
+
x: vertex3Position.x + translationOffset,
|
|
7678
|
+
y: vertex3Position.y,
|
|
7654
7679
|
};
|
|
7655
7680
|
replacementPosition = findNearestPosition([leftPosition, rightPosition], targetPosition);
|
|
7656
7681
|
}
|
|
@@ -7667,13 +7692,15 @@ var generateSubstitutePosition = function (intersectedPosition, targetPosition,
|
|
|
7667
7692
|
};
|
|
7668
7693
|
}
|
|
7669
7694
|
else {
|
|
7695
|
+
//Translate to the top of vertex 1
|
|
7670
7696
|
var topPosition = {
|
|
7671
|
-
x:
|
|
7672
|
-
y:
|
|
7697
|
+
x: vertex1Position.x,
|
|
7698
|
+
y: vertex1Position.y - translationOffset,
|
|
7673
7699
|
};
|
|
7700
|
+
//Translate to the bottom of vertex 4
|
|
7674
7701
|
var bottomPosition = {
|
|
7675
|
-
x:
|
|
7676
|
-
y:
|
|
7702
|
+
x: vertex4Position.x,
|
|
7703
|
+
y: vertex4Position.y + translationOffset,
|
|
7677
7704
|
};
|
|
7678
7705
|
replacementPosition = findNearestPosition([topPosition, bottomPosition], targetPosition);
|
|
7679
7706
|
}
|
|
@@ -7690,13 +7717,15 @@ var generateSubstitutePosition = function (intersectedPosition, targetPosition,
|
|
|
7690
7717
|
};
|
|
7691
7718
|
}
|
|
7692
7719
|
else {
|
|
7720
|
+
//Translate to the top of vertex 2
|
|
7693
7721
|
var topPosition = {
|
|
7694
|
-
x:
|
|
7695
|
-
y:
|
|
7722
|
+
x: vertex2Position.x,
|
|
7723
|
+
y: vertex2Position.y - translationOffset,
|
|
7696
7724
|
};
|
|
7725
|
+
//Translate to the bottom of vertex 3
|
|
7697
7726
|
var bottomPosition = {
|
|
7698
|
-
x:
|
|
7699
|
-
y:
|
|
7727
|
+
x: vertex3Position.x,
|
|
7728
|
+
y: vertex3Position.y + translationOffset,
|
|
7700
7729
|
};
|
|
7701
7730
|
replacementPosition = findNearestPosition([topPosition, bottomPosition], targetPosition);
|
|
7702
7731
|
}
|
|
@@ -7711,23 +7740,38 @@ var getRelativePosition = function (clientPosition, relativeElement) {
|
|
|
7711
7740
|
};
|
|
7712
7741
|
};
|
|
7713
7742
|
var getFourVertexesOfBBoxFromElement = function (element) {
|
|
7743
|
+
var absolutePosition = getAbsolutePosition(element);
|
|
7714
7744
|
var vertex1Position = {
|
|
7715
|
-
x:
|
|
7716
|
-
y:
|
|
7745
|
+
x: absolutePosition.x,
|
|
7746
|
+
y: absolutePosition.y
|
|
7717
7747
|
};
|
|
7718
7748
|
var vertex2Position = {
|
|
7719
|
-
x:
|
|
7720
|
-
y:
|
|
7749
|
+
x: absolutePosition.x + element.size.width,
|
|
7750
|
+
y: absolutePosition.y
|
|
7721
7751
|
};
|
|
7722
7752
|
var vertex3Position = {
|
|
7723
|
-
x:
|
|
7724
|
-
y:
|
|
7753
|
+
x: absolutePosition.x + element.size.width,
|
|
7754
|
+
y: absolutePosition.y + element.size.height
|
|
7725
7755
|
};
|
|
7726
7756
|
var vertex4Position = {
|
|
7727
|
-
x:
|
|
7728
|
-
y:
|
|
7757
|
+
x: absolutePosition.x,
|
|
7758
|
+
y: absolutePosition.y + element.size.height
|
|
7729
7759
|
};
|
|
7730
7760
|
return [vertex1Position, vertex2Position, vertex3Position, vertex4Position];
|
|
7761
|
+
};
|
|
7762
|
+
//get absolute position of element
|
|
7763
|
+
var getAbsolutePosition = function (element) {
|
|
7764
|
+
var parentElement = element.parentElement;
|
|
7765
|
+
if (!parentElement) {
|
|
7766
|
+
return __assign({}, element.position);
|
|
7767
|
+
}
|
|
7768
|
+
var absoluteParentElement = getAbsolutePosition(parentElement);
|
|
7769
|
+
var x = element.position.x + absoluteParentElement.x;
|
|
7770
|
+
var y = element.position.y + absoluteParentElement.y;
|
|
7771
|
+
return {
|
|
7772
|
+
x: x,
|
|
7773
|
+
y: y,
|
|
7774
|
+
};
|
|
7731
7775
|
};
|
|
7732
7776
|
|
|
7733
7777
|
var makerStart = React.createElement("circle", { cx: 10, cy: 10, r: 10, fill: "blue" });
|
|
@@ -8059,22 +8103,12 @@ var Element = function (props) {
|
|
|
8059
8103
|
var elementRef = React.useRef(null);
|
|
8060
8104
|
var elementLinkStarted = React.useRef();
|
|
8061
8105
|
var portsRef = React.useRef(ports);
|
|
8062
|
-
React.useEffect(function () {
|
|
8063
|
-
console.log('changed props.children', texts === null || texts === void 0 ? void 0 : texts[0].content);
|
|
8064
|
-
}, [props.children]);
|
|
8065
|
-
React.useEffect(function () {
|
|
8066
|
-
return function () {
|
|
8067
|
-
var _a;
|
|
8068
|
-
console.log('un mount', (_a = texts === null || texts === void 0 ? void 0 : texts[0]) === null || _a === void 0 ? void 0 : _a.content);
|
|
8069
|
-
};
|
|
8070
|
-
}, []);
|
|
8071
8106
|
//Listen to manually trigger render event
|
|
8072
8107
|
React.useEffect(function () {
|
|
8073
8108
|
var _a;
|
|
8074
8109
|
var off = (_a = props.onManuallyTriggerRenderPort) === null || _a === void 0 ? void 0 : _a.call(props, function (portId, elementId) {
|
|
8075
8110
|
if (elementId !== id)
|
|
8076
8111
|
return;
|
|
8077
|
-
console.log('onManuallyTriggerRenderPort', id);
|
|
8078
8112
|
setPorts(function (prev) { return __spreadArray([], prev, true); });
|
|
8079
8113
|
});
|
|
8080
8114
|
return function () {
|
|
@@ -8728,6 +8762,59 @@ function useKeyboardCommands(_a) {
|
|
|
8728
8762
|
}, [element]);
|
|
8729
8763
|
}
|
|
8730
8764
|
|
|
8765
|
+
//Automatically add points on the link so that the link does not cross elements, default maximum 10 points
|
|
8766
|
+
var automationAddPointsToLink = function (eleLink, elements, limitPoint) {
|
|
8767
|
+
if (!eleLink.targetElement || !eleLink.targetPort) {
|
|
8768
|
+
throw new Error("Target element is not found in element link");
|
|
8769
|
+
}
|
|
8770
|
+
var sourceElement = eleLink.sourceElement, sourcePort = eleLink.sourcePort, targetElement = eleLink.targetElement, targetPort = eleLink.targetPort;
|
|
8771
|
+
var absolutePositionOfSourceEle = getAbsolutePosition(sourceElement);
|
|
8772
|
+
var absolutePositionOfTargetEle = getAbsolutePosition(targetElement);
|
|
8773
|
+
var sourcePosition = {
|
|
8774
|
+
x: absolutePositionOfSourceEle.x + sourcePort.position.x,
|
|
8775
|
+
y: absolutePositionOfSourceEle.y + sourcePort.position.y
|
|
8776
|
+
};
|
|
8777
|
+
var targetPosition = {
|
|
8778
|
+
x: absolutePositionOfTargetEle.x + targetPort.position.x,
|
|
8779
|
+
y: absolutePositionOfTargetEle.y + targetPort.position.y
|
|
8780
|
+
};
|
|
8781
|
+
var fourVertexesOfSourceEleBBox = getFourVertexesOfBBoxFromElement(sourceElement);
|
|
8782
|
+
var fourVertexesOfTargetEleBBox = getFourVertexesOfBBoxFromElement(targetElement);
|
|
8783
|
+
var projectedSourcePositionOnBBox = findNearestProjectedPoint(sourcePosition, [
|
|
8784
|
+
[fourVertexesOfSourceEleBBox[0], fourVertexesOfSourceEleBBox[1]],
|
|
8785
|
+
[fourVertexesOfSourceEleBBox[1], fourVertexesOfSourceEleBBox[2]],
|
|
8786
|
+
[fourVertexesOfSourceEleBBox[2], fourVertexesOfSourceEleBBox[3]],
|
|
8787
|
+
[fourVertexesOfSourceEleBBox[3], fourVertexesOfSourceEleBBox[0]],
|
|
8788
|
+
]);
|
|
8789
|
+
var projectedTargetPositionOnBBox = findNearestProjectedPoint(targetPosition, [
|
|
8790
|
+
[fourVertexesOfTargetEleBBox[0], fourVertexesOfTargetEleBBox[1]],
|
|
8791
|
+
[fourVertexesOfTargetEleBBox[1], fourVertexesOfTargetEleBBox[2]],
|
|
8792
|
+
[fourVertexesOfTargetEleBBox[2], fourVertexesOfTargetEleBBox[3]],
|
|
8793
|
+
[fourVertexesOfTargetEleBBox[3], fourVertexesOfTargetEleBBox[0]],
|
|
8794
|
+
]);
|
|
8795
|
+
var numberOfPoints = 0;
|
|
8796
|
+
//create points between the start and end points, to create a line segment that passes through the points without intersecting the elements
|
|
8797
|
+
function generatePositions(sourcePosition, targetPosition, elements) {
|
|
8798
|
+
var firstIntersection = getFirstIntersection(sourcePosition, targetPosition, elements);
|
|
8799
|
+
//If there is no intersection point, then the line connecting the two points does not intersect any element.
|
|
8800
|
+
if (!firstIntersection || limitPoint === numberOfPoints)
|
|
8801
|
+
return [];
|
|
8802
|
+
var nearestIntersection = firstIntersection.nearestIntersection; firstIntersection.intersectionPointsList; var intersectedElement = firstIntersection.element;
|
|
8803
|
+
//Calculate to create a replacement point
|
|
8804
|
+
var replacementPosition = generateSubstitutePosition(nearestIntersection, targetPosition, intersectedElement);
|
|
8805
|
+
//Increases the number of points found by 1
|
|
8806
|
+
numberOfPoints += 1;
|
|
8807
|
+
//Create points with the starting point being the sourcePosition and the ending point being the newly created point
|
|
8808
|
+
var prependedPoints = generatePositions(sourcePosition, replacementPosition, elements);
|
|
8809
|
+
//Create points with the starting point being the new newly created point and the ending point being the targetPosition
|
|
8810
|
+
var appendedPoints = generatePositions(replacementPosition, targetPosition, elements);
|
|
8811
|
+
return __spreadArray(__spreadArray(__spreadArray([], prependedPoints, true), [replacementPosition], false), appendedPoints, true);
|
|
8812
|
+
}
|
|
8813
|
+
var points = generatePositions(projectedSourcePositionOnBBox, projectedTargetPositionOnBBox, elements);
|
|
8814
|
+
eleLink.points = points;
|
|
8815
|
+
return eleLink;
|
|
8816
|
+
};
|
|
8817
|
+
|
|
8731
8818
|
function convertElementsToTree(elements) {
|
|
8732
8819
|
//Find child elements in the child elements, that is possible child of element, then return element with child of it.
|
|
8733
8820
|
function findChildElementsOfNode(elementNodeInTree, possibleChildElements) {
|
|
@@ -8738,11 +8825,6 @@ function convertElementsToTree(elements) {
|
|
|
8738
8825
|
var foundChildElements = possibleChildElements.filter(function (ele) { var _a; return ((_a = ele.parentElement) === null || _a === void 0 ? void 0 : _a.id) === elementNodeInTree.id; });
|
|
8739
8826
|
var orphanedElements = possibleChildElements.filter(function (ele) { var _a; return ((_a = ele.parentElement) === null || _a === void 0 ? void 0 : _a.id) !== elementNodeInTree.id; });
|
|
8740
8827
|
var childElementsWithChild = foundChildElements.map(function (_elementNodeInTree) {
|
|
8741
|
-
var relativePosition = {
|
|
8742
|
-
x: _elementNodeInTree.position.x - elementNodeInTree.position.x,
|
|
8743
|
-
y: _elementNodeInTree.position.y - elementNodeInTree.position.y,
|
|
8744
|
-
};
|
|
8745
|
-
_elementNodeInTree.relativePosition = relativePosition;
|
|
8746
8828
|
var newNode = findChildElementsOfNode(_elementNodeInTree, orphanedElements);
|
|
8747
8829
|
return newNode;
|
|
8748
8830
|
});
|
|
@@ -8752,7 +8834,6 @@ function convertElementsToTree(elements) {
|
|
|
8752
8834
|
var parentElms = elements.filter(function (e) { return !e.parentElement; });
|
|
8753
8835
|
var childElms = elements.filter(function (e) { return e.parentElement; });
|
|
8754
8836
|
var parsedElementsInTree = parentElms.map(function (ele) {
|
|
8755
|
-
ele.relativePosition = ele.position;
|
|
8756
8837
|
var eleWithChild = findChildElementsOfNode(ele, childElms);
|
|
8757
8838
|
return eleWithChild;
|
|
8758
8839
|
});
|
|
@@ -8773,10 +8854,9 @@ var Paper = function (props) {
|
|
|
8773
8854
|
var paperContainerRef = React.useRef(null);
|
|
8774
8855
|
var tempLinkRef = React.useRef(tempLink); //Cache tempLink to avoid re-render when tempLink changed
|
|
8775
8856
|
var elementsRef = React.useRef(elements); //Cache elements to avoid re-render when elements changed
|
|
8857
|
+
var linksRef = React.useRef(links); //Cache links to avoid re-render when links changed
|
|
8858
|
+
var textsRef = React.useRef(texts); //Cache texts to avoid re-render when texts changed
|
|
8776
8859
|
var size = props.size;
|
|
8777
|
-
React.useEffect(function () {
|
|
8778
|
-
console.log('Render Paper');
|
|
8779
|
-
});
|
|
8780
8860
|
React.useEffect(function () {
|
|
8781
8861
|
setElements(props.elements);
|
|
8782
8862
|
}, [props.elements]);
|
|
@@ -8788,17 +8868,27 @@ var Paper = function (props) {
|
|
|
8788
8868
|
}, [props.texts]);
|
|
8789
8869
|
React.useEffect(function () {
|
|
8790
8870
|
var off = props.onManuallyTriggerRenderElement(function (elementId) {
|
|
8791
|
-
|
|
8792
|
-
|
|
8871
|
+
setElements(__spreadArray([], elements, true));
|
|
8872
|
+
if (props.onElementsChanged) {
|
|
8873
|
+
props.onElementsChanged(__spreadArray([], elements, true));
|
|
8874
|
+
}
|
|
8793
8875
|
});
|
|
8794
8876
|
return function () {
|
|
8795
8877
|
off();
|
|
8796
8878
|
};
|
|
8797
|
-
}, [props.onManuallyTriggerRenderElement]);
|
|
8879
|
+
}, [props.onManuallyTriggerRenderElement, props.onElementsChanged, elements]);
|
|
8798
8880
|
//Cache elements to avoid re-render when elements changed
|
|
8799
8881
|
React.useEffect(function () {
|
|
8800
8882
|
elementsRef.current = elements;
|
|
8801
8883
|
}, [elements]);
|
|
8884
|
+
//Cache links to avoid re-render when links changed
|
|
8885
|
+
React.useEffect(function () {
|
|
8886
|
+
linksRef.current = links;
|
|
8887
|
+
}, [links]);
|
|
8888
|
+
//Cache texts to avoid re-render when texts changed
|
|
8889
|
+
React.useEffect(function () {
|
|
8890
|
+
textsRef.current = texts;
|
|
8891
|
+
}, [texts]);
|
|
8802
8892
|
useKeyboardCommands({
|
|
8803
8893
|
element: paperContainerRef.current
|
|
8804
8894
|
});
|
|
@@ -8846,7 +8936,6 @@ var Paper = function (props) {
|
|
|
8846
8936
|
var parentChangedCancelers = elementsRef.current.map(function (element) {
|
|
8847
8937
|
var _a;
|
|
8848
8938
|
return (_a = element.onParentChanged) === null || _a === void 0 ? void 0 : _a.call(element, function (newPa, oldPa) {
|
|
8849
|
-
console.log('onParentChanged');
|
|
8850
8939
|
updateElementsTree();
|
|
8851
8940
|
});
|
|
8852
8941
|
});
|
|
@@ -8855,13 +8944,18 @@ var Paper = function (props) {
|
|
|
8855
8944
|
var _a;
|
|
8856
8945
|
return (_a = element.onAddedPort) === null || _a === void 0 ? void 0 : _a.call(element, function (newPort) {
|
|
8857
8946
|
console.log("A new port has been added to element ".concat(element.id));
|
|
8858
|
-
|
|
8859
|
-
|
|
8947
|
+
var prevElements = elementsRef.current;
|
|
8948
|
+
var newElements = prevElements.map(function (ele) {
|
|
8860
8949
|
if (ele.id === element.id) {
|
|
8861
8950
|
ele.ports = __spreadArray([], (ele.ports || []), true);
|
|
8862
8951
|
}
|
|
8863
8952
|
return ele;
|
|
8864
|
-
});
|
|
8953
|
+
});
|
|
8954
|
+
//Set state to re-render component
|
|
8955
|
+
setElements(newElements);
|
|
8956
|
+
if (props.onElementsChanged) {
|
|
8957
|
+
props.onElementsChanged(newElements);
|
|
8958
|
+
}
|
|
8865
8959
|
});
|
|
8866
8960
|
});
|
|
8867
8961
|
return function () {
|
|
@@ -8890,8 +8984,20 @@ var Paper = function (props) {
|
|
|
8890
8984
|
if (selectedElement) {
|
|
8891
8985
|
var deletedChildElements = getDeletedChildElements(selectedElement);
|
|
8892
8986
|
var deletedElementIds_1 = __spreadArray(__spreadArray([], deletedChildElements, true), [selectedElement], false).map(function (e) { return e.id; });
|
|
8893
|
-
|
|
8894
|
-
|
|
8987
|
+
var prevElements = elementsRef.current;
|
|
8988
|
+
var newElements = prevElements.filter(function (e) { return !deletedElementIds_1.includes(e.id); });
|
|
8989
|
+
//Set state to re-render component
|
|
8990
|
+
setElements(newElements);
|
|
8991
|
+
if (props.onElementsChanged) {
|
|
8992
|
+
props.onElementsChanged(newElements);
|
|
8993
|
+
}
|
|
8994
|
+
//Update links
|
|
8995
|
+
var prevLinks = linksRef.current;
|
|
8996
|
+
var newLinks = prevLinks.filter(function (l) { return !deletedElementIds_1.includes(l.sourceElement.id) && !deletedElementIds_1.includes(l.targetElement.id); });
|
|
8997
|
+
setLinks(newLinks);
|
|
8998
|
+
if (props.onLinksChanged) {
|
|
8999
|
+
props.onLinksChanged(newLinks);
|
|
9000
|
+
}
|
|
8895
9001
|
setSelectedElement(undefined);
|
|
8896
9002
|
setSelectedElementSVG(null);
|
|
8897
9003
|
}
|
|
@@ -8903,14 +9009,19 @@ var Paper = function (props) {
|
|
|
8903
9009
|
return function () {
|
|
8904
9010
|
listener.off();
|
|
8905
9011
|
};
|
|
8906
|
-
}, [selectedElement]);
|
|
9012
|
+
}, [selectedElement, props.onElementsChanged]);
|
|
8907
9013
|
//Listen command delete selected for link
|
|
8908
9014
|
React.useEffect(function () {
|
|
8909
9015
|
var _a;
|
|
8910
9016
|
var listener = paperEventEmitter.onCommandDeleteSelectedLink(function () {
|
|
8911
9017
|
if (selectedLink) {
|
|
8912
|
-
|
|
9018
|
+
var prevLinks = linksRef.current;
|
|
9019
|
+
var newLinks = prevLinks.filter(function (l) { return l.id !== selectedLink.id; });
|
|
9020
|
+
setLinks(links);
|
|
8913
9021
|
setSelectedLink(undefined);
|
|
9022
|
+
if (props.onLinksChanged) {
|
|
9023
|
+
props.onLinksChanged(newLinks);
|
|
9024
|
+
}
|
|
8914
9025
|
}
|
|
8915
9026
|
});
|
|
8916
9027
|
//broadcast selected link to parent component
|
|
@@ -8920,13 +9031,18 @@ var Paper = function (props) {
|
|
|
8920
9031
|
return function () {
|
|
8921
9032
|
listener.off();
|
|
8922
9033
|
};
|
|
8923
|
-
}, [selectedLink]);
|
|
9034
|
+
}, [selectedLink, props.onLinksChanged]);
|
|
8924
9035
|
//Listen command delete selected for Text
|
|
8925
9036
|
React.useEffect(function () {
|
|
8926
9037
|
var _a;
|
|
8927
9038
|
var listener = paperEventEmitter.onCommandDeleteSelectedText(function () {
|
|
8928
9039
|
if (selectedText) {
|
|
8929
|
-
|
|
9040
|
+
var prevTexts = textsRef.current;
|
|
9041
|
+
var newTexts = prevTexts.filter(function (t) { return t.id !== selectedText.id; });
|
|
9042
|
+
setTexts(newTexts);
|
|
9043
|
+
if (props.onTextsChanged) {
|
|
9044
|
+
props.onTextsChanged(newTexts);
|
|
9045
|
+
}
|
|
8930
9046
|
setSelectedText(undefined);
|
|
8931
9047
|
}
|
|
8932
9048
|
});
|
|
@@ -8937,58 +9053,7 @@ var Paper = function (props) {
|
|
|
8937
9053
|
return function () {
|
|
8938
9054
|
listener.off();
|
|
8939
9055
|
};
|
|
8940
|
-
}, [selectedText]);
|
|
8941
|
-
//Automatically add points on the link so that the link does not cross elements, default maximum 10 points
|
|
8942
|
-
var automationAddPointsToLink = React.useCallback(function (eleLink, limitPoint) {
|
|
8943
|
-
if (limitPoint === void 0) { limitPoint = 10; }
|
|
8944
|
-
if (!eleLink.targetElement) {
|
|
8945
|
-
throw new Error("Target element is not found in element link");
|
|
8946
|
-
}
|
|
8947
|
-
var sourceElement = eleLink.sourceElement, sourcePort = eleLink.sourcePort, targetElement = eleLink.targetElement, targetPort = eleLink.targetPort;
|
|
8948
|
-
var sourcePosition = {
|
|
8949
|
-
x: sourceElement.position.x + sourcePort.position.x,
|
|
8950
|
-
y: sourceElement.position.y + sourcePort.position.y
|
|
8951
|
-
};
|
|
8952
|
-
var targetPosition = {
|
|
8953
|
-
x: targetElement.position.x + targetPort.position.x,
|
|
8954
|
-
y: targetElement.position.y + targetPort.position.y
|
|
8955
|
-
};
|
|
8956
|
-
var fourVertexesOfSourceEleBBox = getFourVertexesOfBBoxFromElement(sourceElement);
|
|
8957
|
-
var fourVertexesOfTargetEleBBox = getFourVertexesOfBBoxFromElement(targetElement);
|
|
8958
|
-
var projectedSourcePositionOnBBox = findNearestProjectedPoint(sourcePosition, [
|
|
8959
|
-
[fourVertexesOfSourceEleBBox[0], fourVertexesOfSourceEleBBox[1]],
|
|
8960
|
-
[fourVertexesOfSourceEleBBox[1], fourVertexesOfSourceEleBBox[2]],
|
|
8961
|
-
[fourVertexesOfSourceEleBBox[2], fourVertexesOfSourceEleBBox[3]],
|
|
8962
|
-
[fourVertexesOfSourceEleBBox[3], fourVertexesOfSourceEleBBox[0]],
|
|
8963
|
-
]);
|
|
8964
|
-
var projectedTargetPositionOnBBox = findNearestProjectedPoint(targetPosition, [
|
|
8965
|
-
[fourVertexesOfTargetEleBBox[0], fourVertexesOfTargetEleBBox[1]],
|
|
8966
|
-
[fourVertexesOfTargetEleBBox[1], fourVertexesOfTargetEleBBox[2]],
|
|
8967
|
-
[fourVertexesOfTargetEleBBox[2], fourVertexesOfTargetEleBBox[3]],
|
|
8968
|
-
[fourVertexesOfTargetEleBBox[3], fourVertexesOfTargetEleBBox[0]],
|
|
8969
|
-
]);
|
|
8970
|
-
var numberOfPoints = 0;
|
|
8971
|
-
//create points between the start and end points, to create a line segment that passes through the points without intersecting the elements
|
|
8972
|
-
function generatePositions(sourcePosition, targetPosition, elements) {
|
|
8973
|
-
var firstIntersection = getFirstIntersection(sourcePosition, targetPosition, elements);
|
|
8974
|
-
//If there is no intersection point, then the line connecting the two points does not intersect any element.
|
|
8975
|
-
if (!firstIntersection || limitPoint === numberOfPoints)
|
|
8976
|
-
return [];
|
|
8977
|
-
var nearestIntersection = firstIntersection.nearestIntersection; firstIntersection.intersectionPointsList; var intersectedElement = firstIntersection.element;
|
|
8978
|
-
//Calculate to create a replacement point
|
|
8979
|
-
var replacementPosition = generateSubstitutePosition(nearestIntersection, targetPosition, intersectedElement);
|
|
8980
|
-
//Increases the number of points found by 1
|
|
8981
|
-
numberOfPoints += 1;
|
|
8982
|
-
//Create points with the starting point being the sourcePosition and the ending point being the newly created point
|
|
8983
|
-
var prependedPoints = generatePositions(sourcePosition, replacementPosition, elements);
|
|
8984
|
-
//Create points with the starting point being the new newly created point and the ending point being the targetPosition
|
|
8985
|
-
var appendedPoints = generatePositions(replacementPosition, targetPosition, elements);
|
|
8986
|
-
return __spreadArray(__spreadArray(__spreadArray([], prependedPoints, true), [replacementPosition], false), appendedPoints, true);
|
|
8987
|
-
}
|
|
8988
|
-
var elements = elementsRef.current;
|
|
8989
|
-
var points = generatePositions(projectedSourcePositionOnBBox, projectedTargetPositionOnBBox, elements);
|
|
8990
|
-
return __assign(__assign({}, eleLink), { points: points });
|
|
8991
|
-
}, []);
|
|
9056
|
+
}, [selectedText, props.onTextsChanged]);
|
|
8992
9057
|
var handlePaperMouseMove = function (ev) {
|
|
8993
9058
|
var _a;
|
|
8994
9059
|
//if there is a temp link, update the temp target point
|
|
@@ -9053,17 +9118,22 @@ var Paper = function (props) {
|
|
|
9053
9118
|
};
|
|
9054
9119
|
var handlePathChange = React.useCallback(function (path, id) {
|
|
9055
9120
|
//Update path of element link, that changed
|
|
9056
|
-
|
|
9057
|
-
|
|
9058
|
-
|
|
9059
|
-
|
|
9060
|
-
|
|
9061
|
-
|
|
9121
|
+
// const prevLinks = linksRef.current;
|
|
9122
|
+
var updatedLinkIndex = links.findIndex(function (l) { return l.id === id; });
|
|
9123
|
+
links[updatedLinkIndex].path = path;
|
|
9124
|
+
var newLinks = __spreadArray([], links, true);
|
|
9125
|
+
setLinks(newLinks);
|
|
9126
|
+
if (props.onLinksChanged) {
|
|
9127
|
+
props.onLinksChanged(newLinks);
|
|
9128
|
+
}
|
|
9129
|
+
}, [props.onLinksChanged, links]);
|
|
9062
9130
|
var handlePortMoved = React.useCallback(function (port, elementId, oldPosition, newPosition) {
|
|
9131
|
+
var _a;
|
|
9063
9132
|
var element = elementsRef.current.find(function (e) { return e.id === elementId; });
|
|
9064
9133
|
if (element) {
|
|
9065
9134
|
//set links equals a clone links to re-render links with new position
|
|
9066
|
-
|
|
9135
|
+
var prevLinks = linksRef.current;
|
|
9136
|
+
var newLinks = prevLinks.map(function (link) {
|
|
9067
9137
|
var _a, _b;
|
|
9068
9138
|
if (link.sourceElement.id === elementId && link.sourcePort.id === port.id) {
|
|
9069
9139
|
link.sourcePort.position = newPosition;
|
|
@@ -9072,24 +9142,30 @@ var Paper = function (props) {
|
|
|
9072
9142
|
link.targetPort.position = newPosition;
|
|
9073
9143
|
}
|
|
9074
9144
|
return link;
|
|
9075
|
-
}); });
|
|
9076
|
-
//Update port position in element, not re-render
|
|
9077
|
-
setElements(function (prevElements) {
|
|
9078
|
-
var _a;
|
|
9079
|
-
var updatedElementIndex = prevElements.findIndex(function (e) { return e.id === elementId; });
|
|
9080
|
-
prevElements[updatedElementIndex].ports = (_a = prevElements[updatedElementIndex].ports) === null || _a === void 0 ? void 0 : _a.map(function (p) {
|
|
9081
|
-
if (p.id === port.id) {
|
|
9082
|
-
p.position = newPosition;
|
|
9083
|
-
}
|
|
9084
|
-
return p;
|
|
9085
|
-
});
|
|
9086
|
-
return prevElements;
|
|
9087
9145
|
});
|
|
9146
|
+
setLinks(newLinks);
|
|
9147
|
+
if (props.onLinksChanged) {
|
|
9148
|
+
props.onLinksChanged(newLinks);
|
|
9149
|
+
}
|
|
9150
|
+
var newElements = elementsRef.current;
|
|
9151
|
+
var updatedElementIndex = newElements.findIndex(function (e) { return e.id === elementId; });
|
|
9152
|
+
newElements[updatedElementIndex].ports = (_a = newElements[updatedElementIndex].ports) === null || _a === void 0 ? void 0 : _a.map(function (p) {
|
|
9153
|
+
if (p.id === port.id) {
|
|
9154
|
+
p.position = newPosition;
|
|
9155
|
+
}
|
|
9156
|
+
return p;
|
|
9157
|
+
});
|
|
9158
|
+
//Update port position in element, not re-render
|
|
9159
|
+
//To avoid re-render
|
|
9160
|
+
setElements(newElements);
|
|
9161
|
+
if (props.onElementsChanged) {
|
|
9162
|
+
props.onElementsChanged(newElements);
|
|
9163
|
+
}
|
|
9088
9164
|
if (props.onPortMoved) {
|
|
9089
9165
|
props.onPortMoved(newPosition, port, element);
|
|
9090
9166
|
}
|
|
9091
9167
|
}
|
|
9092
|
-
}, [props.onPortMoved]);
|
|
9168
|
+
}, [props.onPortMoved, props.onElementsChanged, props.onLinksChanged]);
|
|
9093
9169
|
//Handle creating a new element link
|
|
9094
9170
|
var handlePortMouseDown = React.useCallback(function (ev, port, elementId) {
|
|
9095
9171
|
var _a;
|
|
@@ -9121,10 +9197,11 @@ var Paper = function (props) {
|
|
|
9121
9197
|
return null;
|
|
9122
9198
|
//Automatic bending, if is not defined points
|
|
9123
9199
|
if (!newElementLink.points || newElementLink.points.length === 0) {
|
|
9124
|
-
|
|
9200
|
+
var elements_1 = elementsRef.current;
|
|
9201
|
+
newElementLink = automationAddPointsToLink(newElementLink, elements_1, MAX_LINK_KNOT_COUNT);
|
|
9125
9202
|
}
|
|
9126
9203
|
return newElementLink;
|
|
9127
|
-
}, [props.onCreatingLink
|
|
9204
|
+
}, [props.onCreatingLink]);
|
|
9128
9205
|
var handlePortMouseUp = React.useCallback(function (ev, port, elementId) {
|
|
9129
9206
|
var _a;
|
|
9130
9207
|
ev.stopPropagation();
|
|
@@ -9137,112 +9214,123 @@ var Paper = function (props) {
|
|
|
9137
9214
|
if (tempLinkRef.current) {
|
|
9138
9215
|
//Check if mouse up point is mouse down point or not
|
|
9139
9216
|
var isMouseUpOnNotSelf = tempLinkRef.current.sourcePort.id !== port.id || tempLinkRef.current.sourceElement.id !== elementId;
|
|
9140
|
-
var
|
|
9217
|
+
var newElementLink = null;
|
|
9141
9218
|
if (isMouseUpOnNotSelf) {
|
|
9142
9219
|
var _b = tempLinkRef.current, sourcePort = _b.sourcePort, sourceElement = _b.sourceElement;
|
|
9143
9220
|
var targetElement = elementsRef.current.find(function (e) { return e.id === elementId; });
|
|
9144
|
-
|
|
9221
|
+
newElementLink = createElementLink(sourcePort, sourceElement, port, targetElement);
|
|
9145
9222
|
}
|
|
9146
|
-
if (
|
|
9147
|
-
|
|
9148
|
-
|
|
9223
|
+
if (newElementLink) {
|
|
9224
|
+
var prevLinks = linksRef.current;
|
|
9225
|
+
var newLinks = __spreadArray(__spreadArray([], prevLinks, true), [newElementLink], false);
|
|
9226
|
+
setLinks(newLinks);
|
|
9227
|
+
if (props.onLinksChanged) {
|
|
9228
|
+
props.onLinksChanged(newLinks);
|
|
9229
|
+
}
|
|
9230
|
+
paperEventEmitter.emitElementLinkEnded(newElementLink);
|
|
9149
9231
|
}
|
|
9150
9232
|
else {
|
|
9151
9233
|
paperEventEmitter.emitElementLinkEnded();
|
|
9152
9234
|
}
|
|
9153
9235
|
setTempLink(null);
|
|
9154
9236
|
}
|
|
9155
|
-
}, [paperEventEmitter, createElementLink, props.onPortMouseUp]);
|
|
9237
|
+
}, [paperEventEmitter, createElementLink, props.onPortMouseUp, props.onLinksChanged]);
|
|
9156
9238
|
var handleLinkLabelMoved = React.useCallback(function (offsetX, offsetY, index, labelType) {
|
|
9157
|
-
|
|
9158
|
-
|
|
9159
|
-
|
|
9160
|
-
|
|
9161
|
-
|
|
9162
|
-
|
|
9163
|
-
|
|
9164
|
-
|
|
9165
|
-
|
|
9166
|
-
|
|
9167
|
-
|
|
9168
|
-
|
|
9169
|
-
}
|
|
9170
|
-
case 'source': {
|
|
9171
|
-
var oldPosition = currentLink.sourceLabel.position || LINK_SOURCE_LABEL_POSITION_FROM_SOURCE_PORT;
|
|
9172
|
-
var newPosition = {
|
|
9173
|
-
x: oldPosition.x + offsetX,
|
|
9174
|
-
y: oldPosition.y + offsetY,
|
|
9175
|
-
};
|
|
9176
|
-
currentLink.sourceLabel.position = newPosition;
|
|
9177
|
-
break;
|
|
9178
|
-
}
|
|
9179
|
-
case 'target': {
|
|
9180
|
-
var oldPosition = currentLink.targetLabel.position || LINK_TARGET_LABEL_POSITION_FROM_TARGET_PORT;
|
|
9181
|
-
var newPosition = {
|
|
9182
|
-
x: oldPosition.x + offsetX,
|
|
9183
|
-
y: oldPosition.y + offsetY,
|
|
9184
|
-
};
|
|
9185
|
-
currentLink.targetLabel.position = newPosition;
|
|
9186
|
-
break;
|
|
9187
|
-
}
|
|
9239
|
+
var prevLinks = linksRef.current;
|
|
9240
|
+
var newLinks = __spreadArray([], prevLinks, true);
|
|
9241
|
+
var currentLink = newLinks[index];
|
|
9242
|
+
switch (labelType) {
|
|
9243
|
+
case 'middle': {
|
|
9244
|
+
var oldPosition = currentLink.label.position || LINK_LABEL_POSITION_FROM_LINK_MID_POINT;
|
|
9245
|
+
var newPosition = {
|
|
9246
|
+
x: oldPosition.x + offsetX,
|
|
9247
|
+
y: oldPosition.y + offsetY,
|
|
9248
|
+
};
|
|
9249
|
+
currentLink.label.position = newPosition;
|
|
9250
|
+
break;
|
|
9188
9251
|
}
|
|
9189
|
-
|
|
9190
|
-
|
|
9191
|
-
|
|
9252
|
+
case 'source': {
|
|
9253
|
+
var oldPosition = currentLink.sourceLabel.position || LINK_SOURCE_LABEL_POSITION_FROM_SOURCE_PORT;
|
|
9254
|
+
var newPosition = {
|
|
9255
|
+
x: oldPosition.x + offsetX,
|
|
9256
|
+
y: oldPosition.y + offsetY,
|
|
9257
|
+
};
|
|
9258
|
+
currentLink.sourceLabel.position = newPosition;
|
|
9259
|
+
break;
|
|
9260
|
+
}
|
|
9261
|
+
case 'target': {
|
|
9262
|
+
var oldPosition = currentLink.targetLabel.position || LINK_TARGET_LABEL_POSITION_FROM_TARGET_PORT;
|
|
9263
|
+
var newPosition = {
|
|
9264
|
+
x: oldPosition.x + offsetX,
|
|
9265
|
+
y: oldPosition.y + offsetY,
|
|
9266
|
+
};
|
|
9267
|
+
currentLink.targetLabel.position = newPosition;
|
|
9268
|
+
break;
|
|
9269
|
+
}
|
|
9270
|
+
}
|
|
9271
|
+
setLinks(newLinks);
|
|
9272
|
+
if (props.onLinksChanged) {
|
|
9273
|
+
props.onLinksChanged(newLinks);
|
|
9274
|
+
}
|
|
9275
|
+
}, [props.onLinksChanged]);
|
|
9192
9276
|
var handleLinkLabelResized = React.useCallback(function (width, height, index, labelType) {
|
|
9193
|
-
|
|
9194
|
-
|
|
9195
|
-
|
|
9196
|
-
|
|
9197
|
-
|
|
9198
|
-
|
|
9199
|
-
|
|
9200
|
-
|
|
9201
|
-
|
|
9202
|
-
|
|
9203
|
-
|
|
9204
|
-
}
|
|
9205
|
-
case 'source': {
|
|
9206
|
-
var newSize = {
|
|
9207
|
-
width: width,
|
|
9208
|
-
height: height,
|
|
9209
|
-
};
|
|
9210
|
-
currentLink.sourceLabel.size = newSize;
|
|
9211
|
-
break;
|
|
9212
|
-
}
|
|
9213
|
-
case 'target': {
|
|
9214
|
-
var newSize = {
|
|
9215
|
-
width: width,
|
|
9216
|
-
height: height,
|
|
9217
|
-
};
|
|
9218
|
-
currentLink.targetLabel.size = newSize;
|
|
9219
|
-
break;
|
|
9220
|
-
}
|
|
9277
|
+
var prevLinks = linksRef.current;
|
|
9278
|
+
var newLinks = __spreadArray([], prevLinks, true);
|
|
9279
|
+
var currentLink = newLinks[index];
|
|
9280
|
+
switch (labelType) {
|
|
9281
|
+
case 'middle': {
|
|
9282
|
+
var newSize = {
|
|
9283
|
+
width: width,
|
|
9284
|
+
height: height,
|
|
9285
|
+
};
|
|
9286
|
+
currentLink.label.size = newSize;
|
|
9287
|
+
break;
|
|
9221
9288
|
}
|
|
9222
|
-
|
|
9223
|
-
|
|
9224
|
-
|
|
9289
|
+
case 'source': {
|
|
9290
|
+
var newSize = {
|
|
9291
|
+
width: width,
|
|
9292
|
+
height: height,
|
|
9293
|
+
};
|
|
9294
|
+
currentLink.sourceLabel.size = newSize;
|
|
9295
|
+
break;
|
|
9296
|
+
}
|
|
9297
|
+
case 'target': {
|
|
9298
|
+
var newSize = {
|
|
9299
|
+
width: width,
|
|
9300
|
+
height: height,
|
|
9301
|
+
};
|
|
9302
|
+
currentLink.targetLabel.size = newSize;
|
|
9303
|
+
break;
|
|
9304
|
+
}
|
|
9305
|
+
}
|
|
9306
|
+
setLinks(newLinks);
|
|
9307
|
+
if (props.onLinksChanged) {
|
|
9308
|
+
props.onLinksChanged(newLinks);
|
|
9309
|
+
}
|
|
9310
|
+
}, [props.onLinksChanged]);
|
|
9225
9311
|
var handleLinkLabelContentChanged = React.useCallback(function (newValue, index, labelType) {
|
|
9226
|
-
|
|
9227
|
-
|
|
9228
|
-
|
|
9229
|
-
|
|
9230
|
-
|
|
9231
|
-
|
|
9232
|
-
|
|
9233
|
-
}
|
|
9234
|
-
case 'source': {
|
|
9235
|
-
currentLink.sourceLabel.content = newValue;
|
|
9236
|
-
break;
|
|
9237
|
-
}
|
|
9238
|
-
case 'target': {
|
|
9239
|
-
currentLink.targetLabel.content = newValue;
|
|
9240
|
-
break;
|
|
9241
|
-
}
|
|
9312
|
+
var prevLinks = linksRef.current;
|
|
9313
|
+
var newLinks = __spreadArray([], prevLinks, true);
|
|
9314
|
+
var currentLink = newLinks[index];
|
|
9315
|
+
switch (labelType) {
|
|
9316
|
+
case 'middle': {
|
|
9317
|
+
currentLink.label.content = newValue;
|
|
9318
|
+
break;
|
|
9242
9319
|
}
|
|
9243
|
-
|
|
9244
|
-
|
|
9245
|
-
|
|
9320
|
+
case 'source': {
|
|
9321
|
+
currentLink.sourceLabel.content = newValue;
|
|
9322
|
+
break;
|
|
9323
|
+
}
|
|
9324
|
+
case 'target': {
|
|
9325
|
+
currentLink.targetLabel.content = newValue;
|
|
9326
|
+
break;
|
|
9327
|
+
}
|
|
9328
|
+
}
|
|
9329
|
+
setLinks(newLinks);
|
|
9330
|
+
if (props.onLinksChanged) {
|
|
9331
|
+
props.onLinksChanged(newLinks);
|
|
9332
|
+
}
|
|
9333
|
+
}, [props.onLinksChanged]);
|
|
9246
9334
|
var handleSelectLink = function (link, index) {
|
|
9247
9335
|
setSelectedLink(link);
|
|
9248
9336
|
};
|
|
@@ -9253,9 +9341,6 @@ var Paper = function (props) {
|
|
|
9253
9341
|
var updateElementPosition = function (element, movementX, movementY) {
|
|
9254
9342
|
element.position.x += movementX;
|
|
9255
9343
|
element.position.y += movementY;
|
|
9256
|
-
if (element.childrenElementsInTree && element.childrenElementsInTree.length > 0) {
|
|
9257
|
-
element.childrenElementsInTree = element.childrenElementsInTree.map(function (child) { return updateElementPosition(child, movementX, movementY); });
|
|
9258
|
-
}
|
|
9259
9344
|
return element;
|
|
9260
9345
|
};
|
|
9261
9346
|
//use selection frame
|
|
@@ -9274,10 +9359,6 @@ var Paper = function (props) {
|
|
|
9274
9359
|
return;
|
|
9275
9360
|
var oldPosition = __assign({}, selectedElement.position);
|
|
9276
9361
|
var newElementPosition = updateElementPosition(selectedElement, offsetX, offsetY);
|
|
9277
|
-
newElementPosition.relativePosition = {
|
|
9278
|
-
x: newElementPosition.relativePosition.x + offsetX,
|
|
9279
|
-
y: newElementPosition.relativePosition.y + offsetY
|
|
9280
|
-
};
|
|
9281
9362
|
var indexSelectedElement = elements.findIndex(function (e) { return e.id === selectedElement.id; });
|
|
9282
9363
|
//Set state to re-render UI with new position
|
|
9283
9364
|
setElementsInTree(function (prev) { return __spreadArray([], prev, true); });
|
|
@@ -9294,7 +9375,11 @@ var Paper = function (props) {
|
|
|
9294
9375
|
var oldSize = selectedElement.size;
|
|
9295
9376
|
var newSize = { width: width, height: height };
|
|
9296
9377
|
elements[indexSelectedElement].size = newSize;
|
|
9297
|
-
|
|
9378
|
+
var newElements = __spreadArray([], elements, true);
|
|
9379
|
+
setElements(newElements);
|
|
9380
|
+
if (props.onElementsChanged) {
|
|
9381
|
+
props.onElementsChanged(newElements);
|
|
9382
|
+
}
|
|
9298
9383
|
if (props.onElementResized) {
|
|
9299
9384
|
props.onElementResized(newSize, selectedElement, indexSelectedElement);
|
|
9300
9385
|
}
|
|
@@ -9331,18 +9416,20 @@ var Paper = function (props) {
|
|
|
9331
9416
|
}, [handleLinkLabelContentChanged]);
|
|
9332
9417
|
var handleClickLinkDelete = React.useCallback(function (link, index) {
|
|
9333
9418
|
return function () {
|
|
9334
|
-
|
|
9335
|
-
|
|
9336
|
-
|
|
9337
|
-
|
|
9338
|
-
|
|
9419
|
+
var prevLinks = linksRef.current;
|
|
9420
|
+
var newLinks = __spreadArray([], prevLinks, true);
|
|
9421
|
+
newLinks.splice(index, 1);
|
|
9422
|
+
setLinks(newLinks);
|
|
9423
|
+
if (props.onLinksChanged) {
|
|
9424
|
+
props.onLinksChanged(newLinks);
|
|
9425
|
+
}
|
|
9339
9426
|
};
|
|
9340
|
-
}, []);
|
|
9427
|
+
}, [props.onLinksChanged]);
|
|
9341
9428
|
var handleMouseUpAtLinkedPortPlaceholder = React.useCallback(function (link, position, targetElementId) {
|
|
9342
9429
|
var targetElement = elementsRef.current.find(function (e) { return e.id === targetElementId; });
|
|
9343
9430
|
if (!targetElement)
|
|
9344
9431
|
return;
|
|
9345
|
-
console.
|
|
9432
|
+
console.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));
|
|
9346
9433
|
if (props.onCreatingPortByLinking) {
|
|
9347
9434
|
var sourcePort = link.sourcePort, sourceElement = link.sourceElement;
|
|
9348
9435
|
//Handle create port via onCreatingPortByLinking prop
|
|
@@ -9351,11 +9438,16 @@ var Paper = function (props) {
|
|
|
9351
9438
|
//Add new port to target element
|
|
9352
9439
|
targetElement.addPort(targetPort);
|
|
9353
9440
|
//Create new link with created port, that is returned.
|
|
9354
|
-
var
|
|
9441
|
+
var newElementLink = createElementLink(sourcePort, sourceElement, targetPort, targetElement);
|
|
9355
9442
|
//Create link and clear some thing, then return
|
|
9356
|
-
if (
|
|
9357
|
-
|
|
9358
|
-
|
|
9443
|
+
if (newElementLink) {
|
|
9444
|
+
var prevLinks = linksRef.current;
|
|
9445
|
+
var newLinks = __spreadArray(__spreadArray([], prevLinks, true), [newElementLink], false);
|
|
9446
|
+
setLinks(newLinks);
|
|
9447
|
+
if (props.onLinksChanged) {
|
|
9448
|
+
props.onLinksChanged(newLinks);
|
|
9449
|
+
}
|
|
9450
|
+
paperEventEmitter.emitElementLinkEnded(newElementLink);
|
|
9359
9451
|
setTempLink(null);
|
|
9360
9452
|
return;
|
|
9361
9453
|
}
|
|
@@ -9364,21 +9456,24 @@ var Paper = function (props) {
|
|
|
9364
9456
|
//Clear tempLink
|
|
9365
9457
|
setTempLink(null);
|
|
9366
9458
|
paperEventEmitter.emitElementLinkEnded();
|
|
9367
|
-
}, [props.onCreatingPortByLinking, createElementLink, paperEventEmitter]);
|
|
9459
|
+
}, [props.onCreatingPortByLinking, createElementLink, paperEventEmitter, props.onLinksChanged]);
|
|
9368
9460
|
var handleElementTextChange = React.useCallback(function (elementId, textId, newContent) {
|
|
9369
|
-
|
|
9370
|
-
|
|
9371
|
-
|
|
9372
|
-
|
|
9373
|
-
|
|
9374
|
-
|
|
9375
|
-
|
|
9376
|
-
}
|
|
9461
|
+
var prevElms = elementsRef.current;
|
|
9462
|
+
var newElements = prevElms.map(function (curEle) {
|
|
9463
|
+
//Find changed text of element to update the content for it.
|
|
9464
|
+
if (curEle.id === elementId && curEle.texts) {
|
|
9465
|
+
var updatedTextId = curEle.texts.findIndex(function (t) { return t.id === textId; });
|
|
9466
|
+
if (updatedTextId !== undefined) {
|
|
9467
|
+
curEle.texts[updatedTextId].content = newContent;
|
|
9377
9468
|
}
|
|
9378
|
-
|
|
9379
|
-
|
|
9469
|
+
}
|
|
9470
|
+
return curEle;
|
|
9380
9471
|
});
|
|
9381
|
-
|
|
9472
|
+
setElements(newElements);
|
|
9473
|
+
if (props.onElementsChanged) {
|
|
9474
|
+
props.onElementsChanged(newElements);
|
|
9475
|
+
}
|
|
9476
|
+
}, [props.onElementsChanged]);
|
|
9382
9477
|
var handleElementClicked = React.useCallback(function (elementId, e, ref) {
|
|
9383
9478
|
e.stopPropagation();
|
|
9384
9479
|
var tempLink = tempLinkRef.current;
|
|
@@ -9428,20 +9523,13 @@ var Paper = function (props) {
|
|
|
9428
9523
|
}
|
|
9429
9524
|
}, [props.onElementMouseLeave]);
|
|
9430
9525
|
var renderElementInTree = React.useCallback(function (element) {
|
|
9431
|
-
var _a, _b;
|
|
9432
9526
|
//use the defined react element or the default Element component
|
|
9433
9527
|
var ReactElement = element.reactElement || Element$1;
|
|
9434
9528
|
return (React.createElement("g", { id: "group-of-element-".concat(element.id), key: element.id },
|
|
9435
|
-
React.createElement(ReactElement, { key: "element-".concat(element.id), id: element.id, height: element.size.height, width: element.size.width, x:
|
|
9529
|
+
React.createElement(ReactElement, { key: "element-".concat(element.id), id: element.id, height: element.size.height, width: element.size.width, x: element.position.x, y: element.position.y, onClick: handleElementClicked, onContextMenu: handleContextMenu, onMouseUp: handleMouseUp, onMouseMove: handleMouseMove, onMouseLeave: handleMouseLeave, container: paperContainerRef.current, renderShape: element.renderShape, cssClass: element.cssClass, texts: element.texts, ports: element.ports, portMoveableAreas: element.portMoveableAreas, portSlideRailSVGClassName: element.portSlideRailSVGClassName, portDirection: element.portDirection, defaultPortSize: element.defaultPortSize, onPortMoved: handlePortMoved, onPortMouseDown: handlePortMouseDown, onPortMouseUp: handlePortMouseUp,
|
|
9436
9530
|
// portPlaceholderShape={(<Circle x={0} y={0} width={10} height={10} fill='red' positioningAnchor={PositioningAnchor.Center} />)}
|
|
9437
9531
|
onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder, onTextUpdated: handleElementTextChange, onManuallyTriggerRenderPort: props.onManuallyTriggerRenderPort, textsPlaceHolderClassName: element.textsPlaceHolderClassName, textsPlaceHolderFlexStyle: element.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition: element.textsPlaceHolderFlexboxPosition }, element.childrenElementsInTree && element.childrenElementsInTree.map(renderElementInTree))));
|
|
9438
9532
|
}, [handleElementClicked, handleContextMenu, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handleMouseUpAtLinkedPortPlaceholder, handleElementTextChange, handleMouseUp, handleMouseMove, handleMouseLeave]);
|
|
9439
|
-
React.useEffect(function () {
|
|
9440
|
-
console.log('elementsInTree');
|
|
9441
|
-
}, [elementsInTree]);
|
|
9442
|
-
React.useEffect(function () {
|
|
9443
|
-
console.log('renderElementInTree');
|
|
9444
|
-
}, [renderElementInTree]);
|
|
9445
9533
|
var ElementsInTree = React.useMemo(function () {
|
|
9446
9534
|
return elementsInTree.map(function (element, index) {
|
|
9447
9535
|
return renderElementInTree(element);
|
|
@@ -9452,18 +9540,19 @@ var Paper = function (props) {
|
|
|
9452
9540
|
React.createElement("svg", { tabIndex: 0, width: size.width, height: size.height, ref: paperContainerRef, id: "paper-container", onMouseMove: handlePaperMouseMove, onMouseDown: handleMouseDownOnPaper, onMouseUp: handleMouseUpOnPaper },
|
|
9453
9541
|
paperContainerRef.current ? ElementsInTree : "",
|
|
9454
9542
|
links && links.map(function (link, index) {
|
|
9455
|
-
|
|
9543
|
+
if (!link.targetElement || !link.targetPort)
|
|
9544
|
+
return null;
|
|
9456
9545
|
return (React.createElement(ElementLink, { key: link.id, id: link.id, path: link.path, sourcePosition: {
|
|
9457
|
-
x: link.sourceElement.
|
|
9458
|
-
y: link.sourceElement.
|
|
9546
|
+
x: getAbsolutePosition(link.sourceElement).x + link.sourcePort.position.x,
|
|
9547
|
+
y: getAbsolutePosition(link.sourceElement).y + link.sourcePort.position.y
|
|
9459
9548
|
}, targetPosition: {
|
|
9460
|
-
x: (
|
|
9461
|
-
y: (
|
|
9549
|
+
x: getAbsolutePosition(link.targetElement).x + link.targetPort.position.x,
|
|
9550
|
+
y: getAbsolutePosition(link.targetElement).y + link.targetPort.position.y
|
|
9462
9551
|
}, points: link.points, onPathChanged: handlePathChange, 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) }));
|
|
9463
9552
|
}),
|
|
9464
9553
|
(tempLink === null || tempLink === void 0 ? void 0 : tempLink.tempTargetPosition) && React.createElement(ElementLink, { id: tempLink.id, points: tempLink.points, sourcePosition: {
|
|
9465
|
-
x: tempLink.sourceElement.
|
|
9466
|
-
y: tempLink.sourceElement.
|
|
9554
|
+
x: getAbsolutePosition(tempLink.sourceElement).x + tempLink.sourcePort.position.x,
|
|
9555
|
+
y: getAbsolutePosition(tempLink.sourceElement).y + tempLink.sourcePort.position.y
|
|
9467
9556
|
}, targetPosition: tempLink.tempTargetPosition, container: paperContainerRef.current, markerStart: tempLink.markerStart, markerEnd: tempLink.markerEnd, markerDistanceFromPort: tempLink.markerDistanceFromPort, markerSize: tempLink.markerSize }),
|
|
9468
9557
|
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, fontSize: text.fontSize, border: text.border, container: paperContainerRef.current, content: text.content, align: text.align, onSelected: function () {
|
|
9469
9558
|
setSelectedText(text);
|
|
@@ -9498,7 +9587,6 @@ var Editor = function (_a) {
|
|
|
9498
9587
|
var offs = [];
|
|
9499
9588
|
if (editorContext) {
|
|
9500
9589
|
offs.push(editorContext.onEditorContextUpdated(function () {
|
|
9501
|
-
console.log("onEditorContextUpdated");
|
|
9502
9590
|
setEditorStates(editorContext);
|
|
9503
9591
|
}));
|
|
9504
9592
|
}
|
|
@@ -9542,12 +9630,21 @@ var Editor = function (_a) {
|
|
|
9542
9630
|
var handleElementMouseUp = React.useCallback(function (ev, element) {
|
|
9543
9631
|
editorContext.onElementMouseUpHandler(ev, element);
|
|
9544
9632
|
}, [editorContext]);
|
|
9633
|
+
var handleElementsChanged = React.useCallback(function (elements) {
|
|
9634
|
+
editorContext.elements = elements;
|
|
9635
|
+
}, [editorContext]);
|
|
9545
9636
|
var handleLinkSelected = React.useCallback(function (link) {
|
|
9546
9637
|
editorContext.onLinkSelectedHandler(link);
|
|
9547
9638
|
}, [editorContext]);
|
|
9639
|
+
var handleLinksChanged = React.useCallback(function (links) {
|
|
9640
|
+
editorContext.links = links;
|
|
9641
|
+
}, [editorContext]);
|
|
9548
9642
|
var handleTextSelected = React.useCallback(function (text) {
|
|
9549
9643
|
editorContext.onTextSelectedHandler(text);
|
|
9550
9644
|
}, [editorContext]);
|
|
9645
|
+
var handleTextsChanged = React.useCallback(function (texts) {
|
|
9646
|
+
editorContext.texts = texts;
|
|
9647
|
+
}, [editorContext]);
|
|
9551
9648
|
var handleOnCreatingLink = React.useCallback(function (sourcePort, sourceElement, targetPort, targetElement) {
|
|
9552
9649
|
if (editorContext.onCreatingLinkHandler) {
|
|
9553
9650
|
return editorContext.onCreatingLinkHandler(sourcePort, sourceElement, targetPort, targetElement);
|
|
@@ -9569,7 +9666,7 @@ var Editor = function (_a) {
|
|
|
9569
9666
|
var handlePaperMouseUp = React.useCallback(function (position) {
|
|
9570
9667
|
editorContext.onPaperMouseUpHandler(position);
|
|
9571
9668
|
}, [editorContext]);
|
|
9572
|
-
return (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, onElementContextMenu: handleElementContextMenu, onElementMoved: handleElementMoved, onElementResized: handleElementResized, onElementSelected: handleElementSelected, onElementMouseLeave: handleElementMouseLeave, onElementMouseMove: handleElementMouseMove, onElementMouseUp: handleElementMouseUp, onCreatingLink: handleOnCreatingLink, onCreatingPortByLinking: handleOnCreatingPortByLinking, onLinkSelected: handleLinkSelected, onTextSelected: handleTextSelected, onPaperMouseMoved: handlePaperMouseMoved, onPaperMouseUp: handlePaperMouseUp, onPaperMouseDown: handlePaperMouseDown, onManuallyTriggerRenderElement: editorContext.onManuallyTriggerRenderElement.bind(editorContext), onManuallyTriggerRenderPort: editorContext.onManuallyTriggerRenderPort.bind(editorContext) }));
|
|
9669
|
+
return (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, onElementContextMenu: handleElementContextMenu, onElementMoved: handleElementMoved, onElementResized: handleElementResized, onElementSelected: handleElementSelected, onElementMouseLeave: handleElementMouseLeave, onElementMouseMove: handleElementMouseMove, onElementMouseUp: handleElementMouseUp, onElementsChanged: handleElementsChanged, onCreatingLink: handleOnCreatingLink, onCreatingPortByLinking: handleOnCreatingPortByLinking, onLinkSelected: handleLinkSelected, onLinksChanged: handleLinksChanged, onTextSelected: handleTextSelected, onTextsChanged: handleTextsChanged, onPaperMouseMoved: handlePaperMouseMoved, onPaperMouseUp: handlePaperMouseUp, onPaperMouseDown: handlePaperMouseDown, onManuallyTriggerRenderElement: editorContext.onManuallyTriggerRenderElement.bind(editorContext), onManuallyTriggerRenderPort: editorContext.onManuallyTriggerRenderPort.bind(editorContext) }));
|
|
9573
9670
|
};
|
|
9574
9671
|
|
|
9575
9672
|
exports.CircleRC = Circle;
|