orcasvn-react-diagrams 0.1.34 → 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 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
  };
@@ -8082,22 +8103,12 @@ var Element = function (props) {
8082
8103
  var elementRef = React.useRef(null);
8083
8104
  var elementLinkStarted = React.useRef();
8084
8105
  var portsRef = React.useRef(ports);
8085
- React.useEffect(function () {
8086
- console.log('changed props.children', texts === null || texts === void 0 ? void 0 : texts[0].content);
8087
- }, [props.children]);
8088
- React.useEffect(function () {
8089
- return function () {
8090
- var _a;
8091
- console.log('un mount', (_a = texts === null || texts === void 0 ? void 0 : texts[0]) === null || _a === void 0 ? void 0 : _a.content);
8092
- };
8093
- }, []);
8094
8106
  //Listen to manually trigger render event
8095
8107
  React.useEffect(function () {
8096
8108
  var _a;
8097
8109
  var off = (_a = props.onManuallyTriggerRenderPort) === null || _a === void 0 ? void 0 : _a.call(props, function (portId, elementId) {
8098
8110
  if (elementId !== id)
8099
8111
  return;
8100
- console.log('onManuallyTriggerRenderPort', id);
8101
8112
  setPorts(function (prev) { return __spreadArray([], prev, true); });
8102
8113
  });
8103
8114
  return function () {
@@ -8814,11 +8825,6 @@ function convertElementsToTree(elements) {
8814
8825
  var foundChildElements = possibleChildElements.filter(function (ele) { var _a; return ((_a = ele.parentElement) === null || _a === void 0 ? void 0 : _a.id) === elementNodeInTree.id; });
8815
8826
  var orphanedElements = possibleChildElements.filter(function (ele) { var _a; return ((_a = ele.parentElement) === null || _a === void 0 ? void 0 : _a.id) !== elementNodeInTree.id; });
8816
8827
  var childElementsWithChild = foundChildElements.map(function (_elementNodeInTree) {
8817
- // const relativePosition = {
8818
- // x: _elementNodeInTree.position.x - elementNodeInTree.position.x,
8819
- // y: _elementNodeInTree.position.y - elementNodeInTree.position.y,
8820
- // }
8821
- // _elementNodeInTree.relativePosition = relativePosition;
8822
8828
  var newNode = findChildElementsOfNode(_elementNodeInTree, orphanedElements);
8823
8829
  return newNode;
8824
8830
  });
@@ -8828,7 +8834,6 @@ function convertElementsToTree(elements) {
8828
8834
  var parentElms = elements.filter(function (e) { return !e.parentElement; });
8829
8835
  var childElms = elements.filter(function (e) { return e.parentElement; });
8830
8836
  var parsedElementsInTree = parentElms.map(function (ele) {
8831
- // ele.relativePosition = ele.position;
8832
8837
  var eleWithChild = findChildElementsOfNode(ele, childElms);
8833
8838
  return eleWithChild;
8834
8839
  });
@@ -8849,10 +8854,9 @@ var Paper = function (props) {
8849
8854
  var paperContainerRef = React.useRef(null);
8850
8855
  var tempLinkRef = React.useRef(tempLink); //Cache tempLink to avoid re-render when tempLink changed
8851
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
8852
8859
  var size = props.size;
8853
- React.useEffect(function () {
8854
- console.log('Render Paper');
8855
- });
8856
8860
  React.useEffect(function () {
8857
8861
  setElements(props.elements);
8858
8862
  }, [props.elements]);
@@ -8864,17 +8868,27 @@ var Paper = function (props) {
8864
8868
  }, [props.texts]);
8865
8869
  React.useEffect(function () {
8866
8870
  var off = props.onManuallyTriggerRenderElement(function (elementId) {
8867
- console.log('onManuallyTriggerRenderElement');
8868
- setElements(function (prev) { return __spreadArray([], prev, true); });
8871
+ setElements(__spreadArray([], elements, true));
8872
+ if (props.onElementsChanged) {
8873
+ props.onElementsChanged(__spreadArray([], elements, true));
8874
+ }
8869
8875
  });
8870
8876
  return function () {
8871
8877
  off();
8872
8878
  };
8873
- }, [props.onManuallyTriggerRenderElement]);
8879
+ }, [props.onManuallyTriggerRenderElement, props.onElementsChanged, elements]);
8874
8880
  //Cache elements to avoid re-render when elements changed
8875
8881
  React.useEffect(function () {
8876
8882
  elementsRef.current = elements;
8877
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]);
8878
8892
  useKeyboardCommands({
8879
8893
  element: paperContainerRef.current
8880
8894
  });
@@ -8922,7 +8936,6 @@ var Paper = function (props) {
8922
8936
  var parentChangedCancelers = elementsRef.current.map(function (element) {
8923
8937
  var _a;
8924
8938
  return (_a = element.onParentChanged) === null || _a === void 0 ? void 0 : _a.call(element, function (newPa, oldPa) {
8925
- console.log('onParentChanged');
8926
8939
  updateElementsTree();
8927
8940
  });
8928
8941
  });
@@ -8931,13 +8944,18 @@ var Paper = function (props) {
8931
8944
  var _a;
8932
8945
  return (_a = element.onAddedPort) === null || _a === void 0 ? void 0 : _a.call(element, function (newPort) {
8933
8946
  console.log("A new port has been added to element ".concat(element.id));
8934
- //Set state to re-render component
8935
- setElements(function (prev) { return prev.map(function (ele) {
8947
+ var prevElements = elementsRef.current;
8948
+ var newElements = prevElements.map(function (ele) {
8936
8949
  if (ele.id === element.id) {
8937
8950
  ele.ports = __spreadArray([], (ele.ports || []), true);
8938
8951
  }
8939
8952
  return ele;
8940
- }); });
8953
+ });
8954
+ //Set state to re-render component
8955
+ setElements(newElements);
8956
+ if (props.onElementsChanged) {
8957
+ props.onElementsChanged(newElements);
8958
+ }
8941
8959
  });
8942
8960
  });
8943
8961
  return function () {
@@ -8966,8 +8984,20 @@ var Paper = function (props) {
8966
8984
  if (selectedElement) {
8967
8985
  var deletedChildElements = getDeletedChildElements(selectedElement);
8968
8986
  var deletedElementIds_1 = __spreadArray(__spreadArray([], deletedChildElements, true), [selectedElement], false).map(function (e) { return e.id; });
8969
- setElements(function (prev) { return prev.filter(function (e) { return !deletedElementIds_1.includes(e.id); }); });
8970
- setLinks(function (prevLinks) { return prevLinks.filter(function (l) { return !deletedElementIds_1.includes(l.sourceElement.id) && !deletedElementIds_1.includes(l.targetElement.id); }); });
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
+ }
8971
9001
  setSelectedElement(undefined);
8972
9002
  setSelectedElementSVG(null);
8973
9003
  }
@@ -8979,14 +9009,19 @@ var Paper = function (props) {
8979
9009
  return function () {
8980
9010
  listener.off();
8981
9011
  };
8982
- }, [selectedElement]);
9012
+ }, [selectedElement, props.onElementsChanged]);
8983
9013
  //Listen command delete selected for link
8984
9014
  React.useEffect(function () {
8985
9015
  var _a;
8986
9016
  var listener = paperEventEmitter.onCommandDeleteSelectedLink(function () {
8987
9017
  if (selectedLink) {
8988
- setLinks(function (prev) { return prev.filter(function (l) { return l.id !== selectedLink.id; }); });
9018
+ var prevLinks = linksRef.current;
9019
+ var newLinks = prevLinks.filter(function (l) { return l.id !== selectedLink.id; });
9020
+ setLinks(links);
8989
9021
  setSelectedLink(undefined);
9022
+ if (props.onLinksChanged) {
9023
+ props.onLinksChanged(newLinks);
9024
+ }
8990
9025
  }
8991
9026
  });
8992
9027
  //broadcast selected link to parent component
@@ -8996,13 +9031,18 @@ var Paper = function (props) {
8996
9031
  return function () {
8997
9032
  listener.off();
8998
9033
  };
8999
- }, [selectedLink]);
9034
+ }, [selectedLink, props.onLinksChanged]);
9000
9035
  //Listen command delete selected for Text
9001
9036
  React.useEffect(function () {
9002
9037
  var _a;
9003
9038
  var listener = paperEventEmitter.onCommandDeleteSelectedText(function () {
9004
9039
  if (selectedText) {
9005
- setTexts(function (prev) { return prev.filter(function (t) { return t.id !== selectedText.id; }); });
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
+ }
9006
9046
  setSelectedText(undefined);
9007
9047
  }
9008
9048
  });
@@ -9013,7 +9053,7 @@ var Paper = function (props) {
9013
9053
  return function () {
9014
9054
  listener.off();
9015
9055
  };
9016
- }, [selectedText]);
9056
+ }, [selectedText, props.onTextsChanged]);
9017
9057
  var handlePaperMouseMove = function (ev) {
9018
9058
  var _a;
9019
9059
  //if there is a temp link, update the temp target point
@@ -9078,17 +9118,22 @@ var Paper = function (props) {
9078
9118
  };
9079
9119
  var handlePathChange = React.useCallback(function (path, id) {
9080
9120
  //Update path of element link, that changed
9081
- setLinks(function (prevLinks) {
9082
- var updatedLinkIndex = prevLinks.findIndex(function (l) { return l.id === id; });
9083
- prevLinks[updatedLinkIndex].path = path;
9084
- return __spreadArray([], prevLinks, true);
9085
- });
9086
- }, []);
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]);
9087
9130
  var handlePortMoved = React.useCallback(function (port, elementId, oldPosition, newPosition) {
9131
+ var _a;
9088
9132
  var element = elementsRef.current.find(function (e) { return e.id === elementId; });
9089
9133
  if (element) {
9090
9134
  //set links equals a clone links to re-render links with new position
9091
- setLinks(function (prev) { return prev.map(function (link) {
9135
+ var prevLinks = linksRef.current;
9136
+ var newLinks = prevLinks.map(function (link) {
9092
9137
  var _a, _b;
9093
9138
  if (link.sourceElement.id === elementId && link.sourcePort.id === port.id) {
9094
9139
  link.sourcePort.position = newPosition;
@@ -9097,24 +9142,30 @@ var Paper = function (props) {
9097
9142
  link.targetPort.position = newPosition;
9098
9143
  }
9099
9144
  return link;
9100
- }); });
9101
- //Update port position in element, not re-render
9102
- setElements(function (prevElements) {
9103
- var _a;
9104
- var updatedElementIndex = prevElements.findIndex(function (e) { return e.id === elementId; });
9105
- prevElements[updatedElementIndex].ports = (_a = prevElements[updatedElementIndex].ports) === null || _a === void 0 ? void 0 : _a.map(function (p) {
9106
- if (p.id === port.id) {
9107
- p.position = newPosition;
9108
- }
9109
- return p;
9110
- });
9111
- return prevElements;
9112
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
+ }
9113
9164
  if (props.onPortMoved) {
9114
9165
  props.onPortMoved(newPosition, port, element);
9115
9166
  }
9116
9167
  }
9117
- }, [props.onPortMoved]);
9168
+ }, [props.onPortMoved, props.onElementsChanged, props.onLinksChanged]);
9118
9169
  //Handle creating a new element link
9119
9170
  var handlePortMouseDown = React.useCallback(function (ev, port, elementId) {
9120
9171
  var _a;
@@ -9163,112 +9214,123 @@ var Paper = function (props) {
9163
9214
  if (tempLinkRef.current) {
9164
9215
  //Check if mouse up point is mouse down point or not
9165
9216
  var isMouseUpOnNotSelf = tempLinkRef.current.sourcePort.id !== port.id || tempLinkRef.current.sourceElement.id !== elementId;
9166
- var newElementLink_1 = null;
9217
+ var newElementLink = null;
9167
9218
  if (isMouseUpOnNotSelf) {
9168
9219
  var _b = tempLinkRef.current, sourcePort = _b.sourcePort, sourceElement = _b.sourceElement;
9169
9220
  var targetElement = elementsRef.current.find(function (e) { return e.id === elementId; });
9170
- newElementLink_1 = createElementLink(sourcePort, sourceElement, port, targetElement);
9221
+ newElementLink = createElementLink(sourcePort, sourceElement, port, targetElement);
9171
9222
  }
9172
- if (newElementLink_1) {
9173
- setLinks(function (prev) { return __spreadArray(__spreadArray([], prev, true), [newElementLink_1], false); });
9174
- paperEventEmitter.emitElementLinkEnded(newElementLink_1);
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);
9175
9231
  }
9176
9232
  else {
9177
9233
  paperEventEmitter.emitElementLinkEnded();
9178
9234
  }
9179
9235
  setTempLink(null);
9180
9236
  }
9181
- }, [paperEventEmitter, createElementLink, props.onPortMouseUp]);
9237
+ }, [paperEventEmitter, createElementLink, props.onPortMouseUp, props.onLinksChanged]);
9182
9238
  var handleLinkLabelMoved = React.useCallback(function (offsetX, offsetY, index, labelType) {
9183
- setLinks(function (prevLinks) {
9184
- var newLinks = __spreadArray([], prevLinks, true);
9185
- var currentLink = newLinks[index];
9186
- switch (labelType) {
9187
- case 'middle': {
9188
- var oldPosition = currentLink.label.position || LINK_LABEL_POSITION_FROM_LINK_MID_POINT;
9189
- var newPosition = {
9190
- x: oldPosition.x + offsetX,
9191
- y: oldPosition.y + offsetY,
9192
- };
9193
- currentLink.label.position = newPosition;
9194
- break;
9195
- }
9196
- case 'source': {
9197
- var oldPosition = currentLink.sourceLabel.position || LINK_SOURCE_LABEL_POSITION_FROM_SOURCE_PORT;
9198
- var newPosition = {
9199
- x: oldPosition.x + offsetX,
9200
- y: oldPosition.y + offsetY,
9201
- };
9202
- currentLink.sourceLabel.position = newPosition;
9203
- break;
9204
- }
9205
- case 'target': {
9206
- var oldPosition = currentLink.targetLabel.position || LINK_TARGET_LABEL_POSITION_FROM_TARGET_PORT;
9207
- var newPosition = {
9208
- x: oldPosition.x + offsetX,
9209
- y: oldPosition.y + offsetY,
9210
- };
9211
- currentLink.targetLabel.position = newPosition;
9212
- break;
9213
- }
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;
9214
9251
  }
9215
- return newLinks;
9216
- });
9217
- }, []);
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]);
9218
9276
  var handleLinkLabelResized = React.useCallback(function (width, height, index, labelType) {
9219
- setLinks(function (prevLinks) {
9220
- var newLinks = __spreadArray([], prevLinks, true);
9221
- var currentLink = newLinks[index];
9222
- switch (labelType) {
9223
- case 'middle': {
9224
- var newSize = {
9225
- width: width,
9226
- height: height,
9227
- };
9228
- currentLink.label.size = newSize;
9229
- break;
9230
- }
9231
- case 'source': {
9232
- var newSize = {
9233
- width: width,
9234
- height: height,
9235
- };
9236
- currentLink.sourceLabel.size = newSize;
9237
- break;
9238
- }
9239
- case 'target': {
9240
- var newSize = {
9241
- width: width,
9242
- height: height,
9243
- };
9244
- currentLink.targetLabel.size = newSize;
9245
- break;
9246
- }
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;
9247
9288
  }
9248
- return newLinks;
9249
- });
9250
- }, []);
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]);
9251
9311
  var handleLinkLabelContentChanged = React.useCallback(function (newValue, index, labelType) {
9252
- setLinks(function (prevLinks) {
9253
- var newLinks = __spreadArray([], prevLinks, true);
9254
- var currentLink = newLinks[index];
9255
- switch (labelType) {
9256
- case 'middle': {
9257
- currentLink.label.content = newValue;
9258
- break;
9259
- }
9260
- case 'source': {
9261
- currentLink.sourceLabel.content = newValue;
9262
- break;
9263
- }
9264
- case 'target': {
9265
- currentLink.targetLabel.content = newValue;
9266
- break;
9267
- }
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;
9268
9319
  }
9269
- return newLinks;
9270
- });
9271
- }, []);
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]);
9272
9334
  var handleSelectLink = function (link, index) {
9273
9335
  setSelectedLink(link);
9274
9336
  };
@@ -9279,9 +9341,6 @@ var Paper = function (props) {
9279
9341
  var updateElementPosition = function (element, movementX, movementY) {
9280
9342
  element.position.x += movementX;
9281
9343
  element.position.y += movementY;
9282
- // if (element.childrenElementsInTree && element.childrenElementsInTree.length > 0) {
9283
- // element.childrenElementsInTree = element.childrenElementsInTree.map(child => updateElementPosition(child, movementX, movementY));
9284
- // }
9285
9344
  return element;
9286
9345
  };
9287
9346
  //use selection frame
@@ -9300,10 +9359,6 @@ var Paper = function (props) {
9300
9359
  return;
9301
9360
  var oldPosition = __assign({}, selectedElement.position);
9302
9361
  var newElementPosition = updateElementPosition(selectedElement, offsetX, offsetY);
9303
- // newElementPosition.relativePosition = {
9304
- // x: newElementPosition.relativePosition!.x + offsetX,
9305
- // y: newElementPosition.relativePosition!.y + offsetY
9306
- // }
9307
9362
  var indexSelectedElement = elements.findIndex(function (e) { return e.id === selectedElement.id; });
9308
9363
  //Set state to re-render UI with new position
9309
9364
  setElementsInTree(function (prev) { return __spreadArray([], prev, true); });
@@ -9320,7 +9375,11 @@ var Paper = function (props) {
9320
9375
  var oldSize = selectedElement.size;
9321
9376
  var newSize = { width: width, height: height };
9322
9377
  elements[indexSelectedElement].size = newSize;
9323
- setElements(__spreadArray([], elements, true));
9378
+ var newElements = __spreadArray([], elements, true);
9379
+ setElements(newElements);
9380
+ if (props.onElementsChanged) {
9381
+ props.onElementsChanged(newElements);
9382
+ }
9324
9383
  if (props.onElementResized) {
9325
9384
  props.onElementResized(newSize, selectedElement, indexSelectedElement);
9326
9385
  }
@@ -9357,18 +9416,20 @@ var Paper = function (props) {
9357
9416
  }, [handleLinkLabelContentChanged]);
9358
9417
  var handleClickLinkDelete = React.useCallback(function (link, index) {
9359
9418
  return function () {
9360
- setLinks(function (prevLinks) {
9361
- var newLinks = __spreadArray([], prevLinks, true);
9362
- newLinks.splice(index, 1);
9363
- return newLinks;
9364
- });
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
+ }
9365
9426
  };
9366
- }, []);
9427
+ }, [props.onLinksChanged]);
9367
9428
  var handleMouseUpAtLinkedPortPlaceholder = React.useCallback(function (link, position, targetElementId) {
9368
9429
  var targetElement = elementsRef.current.find(function (e) { return e.id === targetElementId; });
9369
9430
  if (!targetElement)
9370
9431
  return;
9371
- console.log("A port could have been created at position ".concat(JSON.stringify(position), " on element ").concat(targetElementId, " by linking from element ").concat(link.sourceElement.id));
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));
9372
9433
  if (props.onCreatingPortByLinking) {
9373
9434
  var sourcePort = link.sourcePort, sourceElement = link.sourceElement;
9374
9435
  //Handle create port via onCreatingPortByLinking prop
@@ -9377,11 +9438,16 @@ var Paper = function (props) {
9377
9438
  //Add new port to target element
9378
9439
  targetElement.addPort(targetPort);
9379
9440
  //Create new link with created port, that is returned.
9380
- var newElementLink_2 = createElementLink(sourcePort, sourceElement, targetPort, targetElement);
9441
+ var newElementLink = createElementLink(sourcePort, sourceElement, targetPort, targetElement);
9381
9442
  //Create link and clear some thing, then return
9382
- if (newElementLink_2) {
9383
- setLinks(function (prev) { return __spreadArray(__spreadArray([], prev, true), [newElementLink_2], false); });
9384
- paperEventEmitter.emitElementLinkEnded(newElementLink_2);
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);
9385
9451
  setTempLink(null);
9386
9452
  return;
9387
9453
  }
@@ -9390,21 +9456,24 @@ var Paper = function (props) {
9390
9456
  //Clear tempLink
9391
9457
  setTempLink(null);
9392
9458
  paperEventEmitter.emitElementLinkEnded();
9393
- }, [props.onCreatingPortByLinking, createElementLink, paperEventEmitter]);
9459
+ }, [props.onCreatingPortByLinking, createElementLink, paperEventEmitter, props.onLinksChanged]);
9394
9460
  var handleElementTextChange = React.useCallback(function (elementId, textId, newContent) {
9395
- setElements(function (prevElms) {
9396
- return prevElms.map(function (curEle) {
9397
- //Find changed text of element to update the content for it.
9398
- if (curEle.id === elementId && curEle.texts) {
9399
- var updatedTextId = curEle.texts.findIndex(function (t) { return t.id === textId; });
9400
- if (updatedTextId !== undefined) {
9401
- curEle.texts[updatedTextId].content = newContent;
9402
- }
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;
9403
9468
  }
9404
- return curEle;
9405
- });
9469
+ }
9470
+ return curEle;
9406
9471
  });
9407
- }, []);
9472
+ setElements(newElements);
9473
+ if (props.onElementsChanged) {
9474
+ props.onElementsChanged(newElements);
9475
+ }
9476
+ }, [props.onElementsChanged]);
9408
9477
  var handleElementClicked = React.useCallback(function (elementId, e, ref) {
9409
9478
  e.stopPropagation();
9410
9479
  var tempLink = tempLinkRef.current;
@@ -9461,12 +9530,6 @@ var Paper = function (props) {
9461
9530
  // portPlaceholderShape={(<Circle x={0} y={0} width={10} height={10} fill='red' positioningAnchor={PositioningAnchor.Center} />)}
9462
9531
  onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder, onTextUpdated: handleElementTextChange, onManuallyTriggerRenderPort: props.onManuallyTriggerRenderPort, textsPlaceHolderClassName: element.textsPlaceHolderClassName, textsPlaceHolderFlexStyle: element.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition: element.textsPlaceHolderFlexboxPosition }, element.childrenElementsInTree && element.childrenElementsInTree.map(renderElementInTree))));
9463
9532
  }, [handleElementClicked, handleContextMenu, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handleMouseUpAtLinkedPortPlaceholder, handleElementTextChange, handleMouseUp, handleMouseMove, handleMouseLeave]);
9464
- React.useEffect(function () {
9465
- console.log('elementsInTree');
9466
- }, [elementsInTree]);
9467
- React.useEffect(function () {
9468
- console.log('renderElementInTree');
9469
- }, [renderElementInTree]);
9470
9533
  var ElementsInTree = React.useMemo(function () {
9471
9534
  return elementsInTree.map(function (element, index) {
9472
9535
  return renderElementInTree(element);
@@ -9524,7 +9587,6 @@ var Editor = function (_a) {
9524
9587
  var offs = [];
9525
9588
  if (editorContext) {
9526
9589
  offs.push(editorContext.onEditorContextUpdated(function () {
9527
- console.log("onEditorContextUpdated");
9528
9590
  setEditorStates(editorContext);
9529
9591
  }));
9530
9592
  }
@@ -9568,12 +9630,21 @@ var Editor = function (_a) {
9568
9630
  var handleElementMouseUp = React.useCallback(function (ev, element) {
9569
9631
  editorContext.onElementMouseUpHandler(ev, element);
9570
9632
  }, [editorContext]);
9633
+ var handleElementsChanged = React.useCallback(function (elements) {
9634
+ editorContext.elements = elements;
9635
+ }, [editorContext]);
9571
9636
  var handleLinkSelected = React.useCallback(function (link) {
9572
9637
  editorContext.onLinkSelectedHandler(link);
9573
9638
  }, [editorContext]);
9639
+ var handleLinksChanged = React.useCallback(function (links) {
9640
+ editorContext.links = links;
9641
+ }, [editorContext]);
9574
9642
  var handleTextSelected = React.useCallback(function (text) {
9575
9643
  editorContext.onTextSelectedHandler(text);
9576
9644
  }, [editorContext]);
9645
+ var handleTextsChanged = React.useCallback(function (texts) {
9646
+ editorContext.texts = texts;
9647
+ }, [editorContext]);
9577
9648
  var handleOnCreatingLink = React.useCallback(function (sourcePort, sourceElement, targetPort, targetElement) {
9578
9649
  if (editorContext.onCreatingLinkHandler) {
9579
9650
  return editorContext.onCreatingLinkHandler(sourcePort, sourceElement, targetPort, targetElement);
@@ -9595,7 +9666,7 @@ var Editor = function (_a) {
9595
9666
  var handlePaperMouseUp = React.useCallback(function (position) {
9596
9667
  editorContext.onPaperMouseUpHandler(position);
9597
9668
  }, [editorContext]);
9598
- 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) }));
9599
9670
  };
9600
9671
 
9601
9672
  exports.CircleRC = Circle;