orcasvn-react-diagrams 0.1.63 → 0.1.65

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
@@ -7752,13 +7752,13 @@ var SelectionFrame = function (props) {
7752
7752
  // off();
7753
7753
  // }
7754
7754
  // }, [])
7755
- var getMousePosition = function (event) {
7755
+ var getMousePosition = React.useCallback(function (event) {
7756
7756
  var position = windowsPositionToPaperPosition({
7757
7757
  x: event.clientX,
7758
7758
  y: event.clientY
7759
7759
  }, propContainer, zoom);
7760
7760
  return position;
7761
- };
7761
+ }, [propContainer, zoom]);
7762
7762
  var addRectHandleMouseDown = function (event) {
7763
7763
  event.stopPropagation();
7764
7764
  if (!draggingCircle) {
@@ -7794,7 +7794,7 @@ var SelectionFrame = function (props) {
7794
7794
  setStartY(mouseEvent.clientY);
7795
7795
  }
7796
7796
  }
7797
- }, [draggingRect, propOnMove, propMovingRate, startX, startY, lastMoveTime, xFromMouse, yFromMouse, zoom]);
7797
+ }, [draggingRect, propOnMove, getMousePosition, propMovingRate, lastMoveTime, xFromMouse, yFromMouse]);
7798
7798
  React.useEffect(function () {
7799
7799
  var addRectHandleMouseUp = function () {
7800
7800
  setDraggingRect(false);
@@ -7880,7 +7880,7 @@ var SelectionFrame = function (props) {
7880
7880
  //logging the end of the circle handle mouse move
7881
7881
  logger.debug('SelectionFrame: circleHandleMouseMove ended', container);
7882
7882
  };
7883
- }, [draggingCircle, width, height, curX, curY, lastMoveTime, propContainer, propMovingRate, propOnResize, propResizability, startX, startY]);
7883
+ }, [draggingCircle, width, height, curX, curY, lastMoveTime, propContainer, getMousePosition, propMovingRate, propOnResize, propResizability, startX, startY]);
7884
7884
  var rectangleSize = Math.max(width, height);
7885
7885
  var leftX = framePadding;
7886
7886
  var topY = framePadding;
@@ -9496,18 +9496,18 @@ var Paper = function (props) {
9496
9496
  var textsRef = React.useRef(texts); //Cache texts to avoid re-render when texts changed
9497
9497
  var size = props.size;
9498
9498
  var selectedElementAbsPosition = React.useMemo(function () { return selectedElement ? getAbsolutePosition(selectedElement) : null; }, [selectedElement, selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.position, selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.size]);
9499
- var onPortMoved = props.onPortMoved, onPortSelected = props.onPortSelected, onPortMouseDown = props.onPortMouseDown, onPortMouseUp = props.onPortMouseUp, onPortsChanged = props.onPortsChanged, onPortContextMenu = props.onPortContextMenu, onElementSelected = props.onElementSelected, onElementsChanged = props.onElementsChanged, onElementContextMenu = props.onElementContextMenu, onElementMouseUp = props.onElementMouseUp, onElementMouseDown = props.onElementMouseDown, onElementMouseMove = props.onElementMouseMove, 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, manuallySelectElementHandler = props.manuallySelectElementHandler, manuallyTriggerDraggingElementHandler = props.manuallyTriggerDraggingElementHandler, manuallyTriggerStartedLinkingHandler = props.manuallyTriggerStartedLinkingHandler;
9499
+ var onPortMoved = props.onPortMoved, onPortSelected = props.onPortSelected, onPortMouseDown = props.onPortMouseDown, onPortMouseUp = props.onPortMouseUp, onPortsChanged = props.onPortsChanged, 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, manuallySelectElementHandler = props.manuallySelectElementHandler, manuallyTriggerDraggingElementHandler = props.manuallyTriggerDraggingElementHandler, manuallyTriggerStartedLinkingHandler = props.manuallyTriggerStartedLinkingHandler;
9500
9500
  React.useEffect(function () {
9501
9501
  zoomRef.current = zoom;
9502
9502
  }, [zoom]);
9503
9503
  React.useEffect(function () {
9504
- setElements(props.elements);
9504
+ setElements(__spreadArray([], props.elements, true));
9505
9505
  }, [props.elements]);
9506
9506
  React.useEffect(function () {
9507
- setLinks(props.links || []);
9507
+ setLinks(__spreadArray([], props.links || [], true));
9508
9508
  }, [props.links]);
9509
9509
  React.useEffect(function () {
9510
- setTexts(props.texts);
9510
+ setTexts(__spreadArray([], props.texts, true));
9511
9511
  }, [props.texts]);
9512
9512
  React.useEffect(function () {
9513
9513
  var off = manuallyTriggerRenderElementHandler(function (elementId) {
@@ -9555,10 +9555,15 @@ var Paper = function (props) {
9555
9555
  };
9556
9556
  }
9557
9557
  }, [manuallyTriggerStartedLinkingHandler, paperEventEmitter]);
9558
+ var updateElementsTree = React.useCallback(function () {
9559
+ var parsedElementsInTree = convertElementsToTree(elements);
9560
+ setElementsInTree(parsedElementsInTree);
9561
+ }, [elements]);
9558
9562
  //Cache elements to avoid re-render when elements changed
9559
9563
  React.useEffect(function () {
9560
9564
  elementsRef.current = elements;
9561
- }, [elements]);
9565
+ updateElementsTree();
9566
+ }, [elements, updateElementsTree]);
9562
9567
  //Cache links to avoid re-render when links changed
9563
9568
  React.useEffect(function () {
9564
9569
  linksRef.current = links;
@@ -9570,10 +9575,6 @@ var Paper = function (props) {
9570
9575
  useKeyboardCommands({
9571
9576
  element: paperContainerRef.current
9572
9577
  });
9573
- var updateElementsTree = React.useCallback(function () {
9574
- var parsedElementsInTree = convertElementsToTree(elements);
9575
- setElementsInTree(parsedElementsInTree);
9576
- }, [elements]);
9577
9578
  //Cache tempLink to avoid re-render when tempLink changed
9578
9579
  React.useEffect(function () {
9579
9580
  tempLinkRef.current = tempLink;
@@ -9581,17 +9582,16 @@ var Paper = function (props) {
9581
9582
  //Listen text is selected
9582
9583
  React.useEffect(function () {
9583
9584
  var textSelectedListener = paperEventEmitter.onTextSelected(function (text) {
9584
- var _a;
9585
9585
  setSelectedElement(undefined);
9586
9586
  setSelectedElementSVG(null);
9587
9587
  setSelectedLink(undefined);
9588
9588
  //broadcast selected text to parent component
9589
- (_a = props.onTextSelected) === null || _a === void 0 ? void 0 : _a.call(props, text);
9589
+ onTextSelected === null || onTextSelected === void 0 ? void 0 : onTextSelected(text);
9590
9590
  });
9591
9591
  return function () {
9592
9592
  textSelectedListener.off();
9593
9593
  };
9594
- }, []);
9594
+ }, [paperEventEmitter, onTextSelected]);
9595
9595
  //Listen port is selected
9596
9596
  React.useEffect(function () {
9597
9597
  var portSelectedListener = paperEventEmitter.onPortSelected(function (port, elementId) {
@@ -9640,11 +9640,11 @@ var Paper = function (props) {
9640
9640
  parentChangedCancelers.forEach(function (canceller) { return canceller === null || canceller === void 0 ? void 0 : canceller(); });
9641
9641
  addedPortCancelers.forEach(function (canceller) { return canceller(); });
9642
9642
  };
9643
- }, [elements, updateElementsTree, onElementsChanged]);
9644
- //Update elements tree when length of elements change
9645
- React.useEffect(function () {
9646
- updateElementsTree();
9647
- }, [elements, updateElementsTree]);
9643
+ }, [updateElementsTree, onElementsChanged]);
9644
+ // //Update elements tree when length of elements change
9645
+ // useEffect(() => {
9646
+ // updateElementsTree();
9647
+ // }, [elements, updateElementsTree])
9648
9648
  //Get all child elements of the deleted element
9649
9649
  var getChildOfElement = React.useCallback(function (element) {
9650
9650
  if (!element.childrenElementsInTree)
@@ -9823,7 +9823,6 @@ var Paper = function (props) {
9823
9823
  }
9824
9824
  }, [onLinksChanged]);
9825
9825
  var handlePortMoved = React.useCallback(function (port, elementId, oldPosition, newPosition) {
9826
- var _a;
9827
9826
  var element = elementsRef.current.find(function (e) { return e.id === elementId; });
9828
9827
  if (element) {
9829
9828
  //set links equals a clone links to re-render links with new position
@@ -9838,21 +9837,44 @@ var Paper = function (props) {
9838
9837
  }
9839
9838
  return link;
9840
9839
  });
9841
- setLinks(newLinks);
9840
+ setLinks(function (prev) {
9841
+ return prev.map(function (link) {
9842
+ var _a, _b;
9843
+ if (link.sourceElement.id === elementId && link.sourcePort.id === port.id) {
9844
+ link.sourcePort.position = newPosition;
9845
+ }
9846
+ if (((_a = link.targetElement) === null || _a === void 0 ? void 0 : _a.id) === elementId && ((_b = link.targetPort) === null || _b === void 0 ? void 0 : _b.id) === port.id) {
9847
+ link.targetPort.position = newPosition;
9848
+ }
9849
+ return link;
9850
+ });
9851
+ });
9842
9852
  if (onLinksChanged) {
9843
9853
  onLinksChanged(newLinks);
9844
9854
  }
9845
9855
  var newElements = elementsRef.current;
9846
- var updatedElementIndex = newElements.findIndex(function (e) { return e.id === elementId; });
9847
- newElements[updatedElementIndex].ports = (_a = newElements[updatedElementIndex].ports) === null || _a === void 0 ? void 0 : _a.map(function (p) {
9848
- if (p.id === port.id) {
9849
- p.position = newPosition;
9850
- }
9851
- return p;
9852
- });
9856
+ // newElements[updatedElementIndex].ports = newElements[updatedElementIndex].ports?.map(p => {
9857
+ // if (p.id === port.id) {
9858
+ // p.position = newPosition
9859
+ // }
9860
+ // return p
9861
+ // })
9853
9862
  //Update port position in element, not re-render
9854
9863
  //To avoid re-render
9855
- setElements(newElements);
9864
+ setElements(function (prev) {
9865
+ var _a;
9866
+ var newElements = __spreadArray([], prev, true);
9867
+ var updatedElement = newElements.find(function (e) { return e.id === elementId; });
9868
+ if (updatedElement) {
9869
+ updatedElement.ports = (_a = updatedElement.ports) === null || _a === void 0 ? void 0 : _a.map(function (p) {
9870
+ if (p.id === port.id) {
9871
+ p.position = newPosition;
9872
+ }
9873
+ return p;
9874
+ });
9875
+ }
9876
+ return newElements;
9877
+ });
9856
9878
  if (onElementsChanged) {
9857
9879
  onElementsChanged(newElements);
9858
9880
  }
@@ -10210,6 +10232,7 @@ var Paper = function (props) {
10210
10232
  }
10211
10233
  }, [onElementMouseLeave]);
10212
10234
  var renderElementInTree = React.useCallback(function (element) {
10235
+ logger.info("Rendering element tree for element ".concat(element.id));
10213
10236
  //use the defined react element or the default Element component
10214
10237
  var ReactElement = element.reactElement || Element$1;
10215
10238
  return (React.createElement("g", { id: "group-of-element-".concat(element.id), key: element.id },
@@ -10224,25 +10247,22 @@ var Paper = function (props) {
10224
10247
  }, 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,
10225
10248
  //movingOffsetThreshold: ELEMENT_MOVING_OFFSET_THRESHOLD,
10226
10249
  onMouseDown: function (ev) {
10227
- var _a;
10228
10250
  if (selectedElement) {
10229
10251
  var paperPosition = windowsPositionToPaperPosition({
10230
10252
  x: ev.clientX,
10231
10253
  y: ev.clientY
10232
10254
  }, paperContainerRef.current, zoomRef.current);
10233
- (_a = props.onElementMouseDown) === null || _a === void 0 ? void 0 : _a.call(props, ev, selectedElement, paperPosition);
10255
+ onElementMouseDown === null || onElementMouseDown === void 0 ? void 0 : onElementMouseDown(ev, selectedElement, paperPosition);
10234
10256
  }
10235
10257
  }, onMouseUp: function (ev) {
10236
- var _a;
10237
10258
  if (selectedElement) {
10238
10259
  var paperPosition = windowsPositionToPaperPosition({
10239
10260
  x: ev.clientX,
10240
10261
  y: ev.clientY
10241
10262
  }, paperContainerRef.current, zoomRef.current);
10242
- (_a = props.onElementMouseUp) === null || _a === void 0 ? void 0 : _a.call(props, ev, selectedElement, paperPosition);
10263
+ onElementMouseUp === null || onElementMouseUp === void 0 ? void 0 : onElementMouseUp(ev, selectedElement, paperPosition);
10243
10264
  }
10244
10265
  }, onMove: function (newX, newY) {
10245
- var _a;
10246
10266
  if (!selectedElement)
10247
10267
  return;
10248
10268
  var oldPosition = __assign({}, selectedElement.position);
@@ -10279,13 +10299,13 @@ var Paper = function (props) {
10279
10299
  }
10280
10300
  return link;
10281
10301
  });
10282
- (_a = props.onLinksChanged) === null || _a === void 0 ? void 0 : _a.call(props, newLinks);
10302
+ onLinksChanged === null || onLinksChanged === void 0 ? void 0 : onLinksChanged(newLinks);
10283
10303
  // End updating the position of links connected to the selected element
10284
10304
  //Set state to re-render UI with new position
10285
10305
  setElementsInTree(function (prev) { return __spreadArray([], prev, true); });
10286
- if (props.onElementMoved) {
10306
+ if (onElementMoved) {
10287
10307
  console.log('onElementMoved', selectedElement.position, paperPosition);
10288
- props.onElementMoved(selectedElement.position, selectedElement, indexSelectedElement, paperPosition);
10308
+ onElementMoved(selectedElement.position, selectedElement, indexSelectedElement, paperPosition);
10289
10309
  }
10290
10310
  paperEventEmitter.emitElementMoved(selectedElement, oldPosition, selectedElement.position);
10291
10311
  setMouseDownedOnPaper(false);
@@ -10298,16 +10318,16 @@ var Paper = function (props) {
10298
10318
  elements[indexSelectedElement].size = newSize;
10299
10319
  var newElements = __spreadArray([], elements, true);
10300
10320
  setElements(newElements);
10301
- if (props.onElementsChanged) {
10302
- props.onElementsChanged(newElements);
10321
+ if (onElementsChanged) {
10322
+ onElementsChanged(newElements);
10303
10323
  }
10304
- if (props.onElementResized) {
10305
- props.onElementResized(newSize, selectedElement, indexSelectedElement);
10324
+ if (onElementResized) {
10325
+ onElementResized(newSize, selectedElement, indexSelectedElement);
10306
10326
  }
10307
10327
  paperEventEmitter.emitElementResized(selectedElement, oldSize, newSize);
10308
10328
  setMouseDownedOnPaper(false);
10309
10329
  } }))));
10310
- }, [manuallyTriggerRenderPortHandler, handleElementClicked, handleContextMenu, handleMouseUp, handleMouseDown, handleMouseMove, handleMouseLeave, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handlePortsChanged, handlePortContextMenu, handleMouseUpAtLinkedPortPlaceholder, handleElementTextChange, props, 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]);
10330
+ }, [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]);
10311
10331
  var ElementsInTree = React.useMemo(function () {
10312
10332
  return elementsInTree.map(function (element, index) {
10313
10333
  return renderElementInTree(element);
package/dist/esm/index.js CHANGED
@@ -7748,13 +7748,13 @@ var SelectionFrame = function (props) {
7748
7748
  // off();
7749
7749
  // }
7750
7750
  // }, [])
7751
- var getMousePosition = function (event) {
7751
+ var getMousePosition = useCallback(function (event) {
7752
7752
  var position = windowsPositionToPaperPosition({
7753
7753
  x: event.clientX,
7754
7754
  y: event.clientY
7755
7755
  }, propContainer, zoom);
7756
7756
  return position;
7757
- };
7757
+ }, [propContainer, zoom]);
7758
7758
  var addRectHandleMouseDown = function (event) {
7759
7759
  event.stopPropagation();
7760
7760
  if (!draggingCircle) {
@@ -7790,7 +7790,7 @@ var SelectionFrame = function (props) {
7790
7790
  setStartY(mouseEvent.clientY);
7791
7791
  }
7792
7792
  }
7793
- }, [draggingRect, propOnMove, propMovingRate, startX, startY, lastMoveTime, xFromMouse, yFromMouse, zoom]);
7793
+ }, [draggingRect, propOnMove, getMousePosition, propMovingRate, lastMoveTime, xFromMouse, yFromMouse]);
7794
7794
  useEffect(function () {
7795
7795
  var addRectHandleMouseUp = function () {
7796
7796
  setDraggingRect(false);
@@ -7876,7 +7876,7 @@ var SelectionFrame = function (props) {
7876
7876
  //logging the end of the circle handle mouse move
7877
7877
  logger.debug('SelectionFrame: circleHandleMouseMove ended', container);
7878
7878
  };
7879
- }, [draggingCircle, width, height, curX, curY, lastMoveTime, propContainer, propMovingRate, propOnResize, propResizability, startX, startY]);
7879
+ }, [draggingCircle, width, height, curX, curY, lastMoveTime, propContainer, getMousePosition, propMovingRate, propOnResize, propResizability, startX, startY]);
7880
7880
  var rectangleSize = Math.max(width, height);
7881
7881
  var leftX = framePadding;
7882
7882
  var topY = framePadding;
@@ -9492,18 +9492,18 @@ var Paper = function (props) {
9492
9492
  var textsRef = useRef(texts); //Cache texts to avoid re-render when texts changed
9493
9493
  var size = props.size;
9494
9494
  var selectedElementAbsPosition = useMemo(function () { return selectedElement ? getAbsolutePosition(selectedElement) : null; }, [selectedElement, selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.position, selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.size]);
9495
- var onPortMoved = props.onPortMoved, onPortSelected = props.onPortSelected, onPortMouseDown = props.onPortMouseDown, onPortMouseUp = props.onPortMouseUp, onPortsChanged = props.onPortsChanged, onPortContextMenu = props.onPortContextMenu, onElementSelected = props.onElementSelected, onElementsChanged = props.onElementsChanged, onElementContextMenu = props.onElementContextMenu, onElementMouseUp = props.onElementMouseUp, onElementMouseDown = props.onElementMouseDown, onElementMouseMove = props.onElementMouseMove, 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, manuallySelectElementHandler = props.manuallySelectElementHandler, manuallyTriggerDraggingElementHandler = props.manuallyTriggerDraggingElementHandler, manuallyTriggerStartedLinkingHandler = props.manuallyTriggerStartedLinkingHandler;
9495
+ var onPortMoved = props.onPortMoved, onPortSelected = props.onPortSelected, onPortMouseDown = props.onPortMouseDown, onPortMouseUp = props.onPortMouseUp, onPortsChanged = props.onPortsChanged, 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, manuallySelectElementHandler = props.manuallySelectElementHandler, manuallyTriggerDraggingElementHandler = props.manuallyTriggerDraggingElementHandler, manuallyTriggerStartedLinkingHandler = props.manuallyTriggerStartedLinkingHandler;
9496
9496
  useEffect(function () {
9497
9497
  zoomRef.current = zoom;
9498
9498
  }, [zoom]);
9499
9499
  useEffect(function () {
9500
- setElements(props.elements);
9500
+ setElements(__spreadArray([], props.elements, true));
9501
9501
  }, [props.elements]);
9502
9502
  useEffect(function () {
9503
- setLinks(props.links || []);
9503
+ setLinks(__spreadArray([], props.links || [], true));
9504
9504
  }, [props.links]);
9505
9505
  useEffect(function () {
9506
- setTexts(props.texts);
9506
+ setTexts(__spreadArray([], props.texts, true));
9507
9507
  }, [props.texts]);
9508
9508
  useEffect(function () {
9509
9509
  var off = manuallyTriggerRenderElementHandler(function (elementId) {
@@ -9551,10 +9551,15 @@ var Paper = function (props) {
9551
9551
  };
9552
9552
  }
9553
9553
  }, [manuallyTriggerStartedLinkingHandler, paperEventEmitter]);
9554
+ var updateElementsTree = useCallback(function () {
9555
+ var parsedElementsInTree = convertElementsToTree(elements);
9556
+ setElementsInTree(parsedElementsInTree);
9557
+ }, [elements]);
9554
9558
  //Cache elements to avoid re-render when elements changed
9555
9559
  useEffect(function () {
9556
9560
  elementsRef.current = elements;
9557
- }, [elements]);
9561
+ updateElementsTree();
9562
+ }, [elements, updateElementsTree]);
9558
9563
  //Cache links to avoid re-render when links changed
9559
9564
  useEffect(function () {
9560
9565
  linksRef.current = links;
@@ -9566,10 +9571,6 @@ var Paper = function (props) {
9566
9571
  useKeyboardCommands({
9567
9572
  element: paperContainerRef.current
9568
9573
  });
9569
- var updateElementsTree = useCallback(function () {
9570
- var parsedElementsInTree = convertElementsToTree(elements);
9571
- setElementsInTree(parsedElementsInTree);
9572
- }, [elements]);
9573
9574
  //Cache tempLink to avoid re-render when tempLink changed
9574
9575
  useEffect(function () {
9575
9576
  tempLinkRef.current = tempLink;
@@ -9577,17 +9578,16 @@ var Paper = function (props) {
9577
9578
  //Listen text is selected
9578
9579
  useEffect(function () {
9579
9580
  var textSelectedListener = paperEventEmitter.onTextSelected(function (text) {
9580
- var _a;
9581
9581
  setSelectedElement(undefined);
9582
9582
  setSelectedElementSVG(null);
9583
9583
  setSelectedLink(undefined);
9584
9584
  //broadcast selected text to parent component
9585
- (_a = props.onTextSelected) === null || _a === void 0 ? void 0 : _a.call(props, text);
9585
+ onTextSelected === null || onTextSelected === void 0 ? void 0 : onTextSelected(text);
9586
9586
  });
9587
9587
  return function () {
9588
9588
  textSelectedListener.off();
9589
9589
  };
9590
- }, []);
9590
+ }, [paperEventEmitter, onTextSelected]);
9591
9591
  //Listen port is selected
9592
9592
  useEffect(function () {
9593
9593
  var portSelectedListener = paperEventEmitter.onPortSelected(function (port, elementId) {
@@ -9636,11 +9636,11 @@ var Paper = function (props) {
9636
9636
  parentChangedCancelers.forEach(function (canceller) { return canceller === null || canceller === void 0 ? void 0 : canceller(); });
9637
9637
  addedPortCancelers.forEach(function (canceller) { return canceller(); });
9638
9638
  };
9639
- }, [elements, updateElementsTree, onElementsChanged]);
9640
- //Update elements tree when length of elements change
9641
- useEffect(function () {
9642
- updateElementsTree();
9643
- }, [elements, updateElementsTree]);
9639
+ }, [updateElementsTree, onElementsChanged]);
9640
+ // //Update elements tree when length of elements change
9641
+ // useEffect(() => {
9642
+ // updateElementsTree();
9643
+ // }, [elements, updateElementsTree])
9644
9644
  //Get all child elements of the deleted element
9645
9645
  var getChildOfElement = useCallback(function (element) {
9646
9646
  if (!element.childrenElementsInTree)
@@ -9819,7 +9819,6 @@ var Paper = function (props) {
9819
9819
  }
9820
9820
  }, [onLinksChanged]);
9821
9821
  var handlePortMoved = useCallback(function (port, elementId, oldPosition, newPosition) {
9822
- var _a;
9823
9822
  var element = elementsRef.current.find(function (e) { return e.id === elementId; });
9824
9823
  if (element) {
9825
9824
  //set links equals a clone links to re-render links with new position
@@ -9834,21 +9833,44 @@ var Paper = function (props) {
9834
9833
  }
9835
9834
  return link;
9836
9835
  });
9837
- setLinks(newLinks);
9836
+ setLinks(function (prev) {
9837
+ return prev.map(function (link) {
9838
+ var _a, _b;
9839
+ if (link.sourceElement.id === elementId && link.sourcePort.id === port.id) {
9840
+ link.sourcePort.position = newPosition;
9841
+ }
9842
+ if (((_a = link.targetElement) === null || _a === void 0 ? void 0 : _a.id) === elementId && ((_b = link.targetPort) === null || _b === void 0 ? void 0 : _b.id) === port.id) {
9843
+ link.targetPort.position = newPosition;
9844
+ }
9845
+ return link;
9846
+ });
9847
+ });
9838
9848
  if (onLinksChanged) {
9839
9849
  onLinksChanged(newLinks);
9840
9850
  }
9841
9851
  var newElements = elementsRef.current;
9842
- var updatedElementIndex = newElements.findIndex(function (e) { return e.id === elementId; });
9843
- newElements[updatedElementIndex].ports = (_a = newElements[updatedElementIndex].ports) === null || _a === void 0 ? void 0 : _a.map(function (p) {
9844
- if (p.id === port.id) {
9845
- p.position = newPosition;
9846
- }
9847
- return p;
9848
- });
9852
+ // newElements[updatedElementIndex].ports = newElements[updatedElementIndex].ports?.map(p => {
9853
+ // if (p.id === port.id) {
9854
+ // p.position = newPosition
9855
+ // }
9856
+ // return p
9857
+ // })
9849
9858
  //Update port position in element, not re-render
9850
9859
  //To avoid re-render
9851
- setElements(newElements);
9860
+ setElements(function (prev) {
9861
+ var _a;
9862
+ var newElements = __spreadArray([], prev, true);
9863
+ var updatedElement = newElements.find(function (e) { return e.id === elementId; });
9864
+ if (updatedElement) {
9865
+ updatedElement.ports = (_a = updatedElement.ports) === null || _a === void 0 ? void 0 : _a.map(function (p) {
9866
+ if (p.id === port.id) {
9867
+ p.position = newPosition;
9868
+ }
9869
+ return p;
9870
+ });
9871
+ }
9872
+ return newElements;
9873
+ });
9852
9874
  if (onElementsChanged) {
9853
9875
  onElementsChanged(newElements);
9854
9876
  }
@@ -10206,6 +10228,7 @@ var Paper = function (props) {
10206
10228
  }
10207
10229
  }, [onElementMouseLeave]);
10208
10230
  var renderElementInTree = useCallback(function (element) {
10231
+ logger.info("Rendering element tree for element ".concat(element.id));
10209
10232
  //use the defined react element or the default Element component
10210
10233
  var ReactElement = element.reactElement || Element$1;
10211
10234
  return (React.createElement("g", { id: "group-of-element-".concat(element.id), key: element.id },
@@ -10220,25 +10243,22 @@ var Paper = function (props) {
10220
10243
  }, 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,
10221
10244
  //movingOffsetThreshold: ELEMENT_MOVING_OFFSET_THRESHOLD,
10222
10245
  onMouseDown: function (ev) {
10223
- var _a;
10224
10246
  if (selectedElement) {
10225
10247
  var paperPosition = windowsPositionToPaperPosition({
10226
10248
  x: ev.clientX,
10227
10249
  y: ev.clientY
10228
10250
  }, paperContainerRef.current, zoomRef.current);
10229
- (_a = props.onElementMouseDown) === null || _a === void 0 ? void 0 : _a.call(props, ev, selectedElement, paperPosition);
10251
+ onElementMouseDown === null || onElementMouseDown === void 0 ? void 0 : onElementMouseDown(ev, selectedElement, paperPosition);
10230
10252
  }
10231
10253
  }, onMouseUp: function (ev) {
10232
- var _a;
10233
10254
  if (selectedElement) {
10234
10255
  var paperPosition = windowsPositionToPaperPosition({
10235
10256
  x: ev.clientX,
10236
10257
  y: ev.clientY
10237
10258
  }, paperContainerRef.current, zoomRef.current);
10238
- (_a = props.onElementMouseUp) === null || _a === void 0 ? void 0 : _a.call(props, ev, selectedElement, paperPosition);
10259
+ onElementMouseUp === null || onElementMouseUp === void 0 ? void 0 : onElementMouseUp(ev, selectedElement, paperPosition);
10239
10260
  }
10240
10261
  }, onMove: function (newX, newY) {
10241
- var _a;
10242
10262
  if (!selectedElement)
10243
10263
  return;
10244
10264
  var oldPosition = __assign({}, selectedElement.position);
@@ -10275,13 +10295,13 @@ var Paper = function (props) {
10275
10295
  }
10276
10296
  return link;
10277
10297
  });
10278
- (_a = props.onLinksChanged) === null || _a === void 0 ? void 0 : _a.call(props, newLinks);
10298
+ onLinksChanged === null || onLinksChanged === void 0 ? void 0 : onLinksChanged(newLinks);
10279
10299
  // End updating the position of links connected to the selected element
10280
10300
  //Set state to re-render UI with new position
10281
10301
  setElementsInTree(function (prev) { return __spreadArray([], prev, true); });
10282
- if (props.onElementMoved) {
10302
+ if (onElementMoved) {
10283
10303
  console.log('onElementMoved', selectedElement.position, paperPosition);
10284
- props.onElementMoved(selectedElement.position, selectedElement, indexSelectedElement, paperPosition);
10304
+ onElementMoved(selectedElement.position, selectedElement, indexSelectedElement, paperPosition);
10285
10305
  }
10286
10306
  paperEventEmitter.emitElementMoved(selectedElement, oldPosition, selectedElement.position);
10287
10307
  setMouseDownedOnPaper(false);
@@ -10294,16 +10314,16 @@ var Paper = function (props) {
10294
10314
  elements[indexSelectedElement].size = newSize;
10295
10315
  var newElements = __spreadArray([], elements, true);
10296
10316
  setElements(newElements);
10297
- if (props.onElementsChanged) {
10298
- props.onElementsChanged(newElements);
10317
+ if (onElementsChanged) {
10318
+ onElementsChanged(newElements);
10299
10319
  }
10300
- if (props.onElementResized) {
10301
- props.onElementResized(newSize, selectedElement, indexSelectedElement);
10320
+ if (onElementResized) {
10321
+ onElementResized(newSize, selectedElement, indexSelectedElement);
10302
10322
  }
10303
10323
  paperEventEmitter.emitElementResized(selectedElement, oldSize, newSize);
10304
10324
  setMouseDownedOnPaper(false);
10305
10325
  } }))));
10306
- }, [manuallyTriggerRenderPortHandler, handleElementClicked, handleContextMenu, handleMouseUp, handleMouseDown, handleMouseMove, handleMouseLeave, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handlePortsChanged, handlePortContextMenu, handleMouseUpAtLinkedPortPlaceholder, handleElementTextChange, props, 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]);
10326
+ }, [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]);
10307
10327
  var ElementsInTree = useMemo(function () {
10308
10328
  return elementsInTree.map(function (element, index) {
10309
10329
  return renderElementInTree(element);