@seafile/sdoc-editor 3.0.246 → 3.0.247

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.
@@ -609,11 +609,21 @@ var SideToolbar = function SideToolbar() {
609
609
  var handleDragover = (0, _react.useCallback)(function (event) {
610
610
  var _target, _target2, _target3;
611
611
  event.preventDefault();
612
+ var dragTypes = event.dataTransfer.types;
613
+ if (!dragTypes.includes(_event.DRAG_SDOC_EDITOR_ELEMENT)) {
614
+ (0, _helpers2.clearDragClass)(activeDragElRef.current);
615
+ activeDragElRef.current = null;
616
+ return;
617
+ }
612
618
  var _getNodeEntry7 = (0, _helpers2.getNodeEntry)(editor, sourceElement),
613
619
  _getNodeEntry8 = (0, _slicedToArray2["default"])(_getNodeEntry7, 2),
614
620
  sourceNode = _getNodeEntry8[0],
615
621
  sourcePath = _getNodeEntry8[1];
616
- if (!sourceNode || !sourcePath) return;
622
+ if (!sourceNode || !sourcePath) {
623
+ (0, _helpers2.clearDragClass)(activeDragElRef.current);
624
+ activeDragElRef.current = null;
625
+ return;
626
+ }
617
627
 
618
628
  // Not support node type in multi column
619
629
  if ([_constants2.TABLE, _constants2.VIDEO, _constants2.CODE_BLOCK, _constants2.WHITEBOARD, _constants2.FORMULA].includes(sourceNode.type)) return;
@@ -733,6 +743,8 @@ var SideToolbar = function SideToolbar() {
733
743
  }, []);
734
744
  var handleDrop = (0, _react.useCallback)(function () {
735
745
  var targetEl = activeDragElRef.current;
746
+ var hasSideDropClass = (targetEl === null || targetEl === void 0 ? void 0 : targetEl.classList.contains('sdoc-dragging-left')) || (targetEl === null || targetEl === void 0 ? void 0 : targetEl.classList.contains('sdoc-dragging-right'));
747
+ if (!hasSideDropClass) return false;
736
748
  var _getNodeEntry1 = (0, _helpers2.getNodeEntry)(editor, targetEl),
737
749
  _getNodeEntry10 = (0, _slicedToArray2["default"])(_getNodeEntry1, 2),
738
750
  targetNode = _getNodeEntry10[0],
@@ -741,7 +753,7 @@ var SideToolbar = function SideToolbar() {
741
753
  _getNodeEntry12 = (0, _slicedToArray2["default"])(_getNodeEntry11, 2),
742
754
  sourceNode = _getNodeEntry12[0],
743
755
  sourcePath = _getNodeEntry12[1];
744
- if (!targetPath || !sourcePath) return;
756
+ if (!targetNode || !targetPath || !sourceNode || !sourcePath) return false;
745
757
 
746
758
  // When source node is list child, it is equal to drag top list node
747
759
  var topSourceNode = _slate.Node.get(editor, [sourcePath[0]]);
@@ -768,7 +780,7 @@ var SideToolbar = function SideToolbar() {
768
780
  to: [targetPath[0], targetPath[1], 0]
769
781
  });
770
782
  }
771
- return;
783
+ return true;
772
784
  }
773
785
 
774
786
  // Drop non-multi column into non-multi column situation
@@ -776,7 +788,7 @@ var SideToolbar = function SideToolbar() {
776
788
  if ([_constants2.ORDERED_LIST, _constants2.UNORDERED_LIST].includes(targetNode.type)) {
777
789
  targetPath = _slateReact.ReactEditor.findPath(editor, targetNode);
778
790
  }
779
- if (_slate.Path.equals([sourcePath[0]], [targetPath[0]])) return;
791
+ if (_slate.Path.equals([sourcePath[0]], [targetPath[0]])) return true;
780
792
  var leftNode = null;
781
793
  var rightNode = null;
782
794
  if (targetEl.classList.contains('sdoc-dragging-left')) {
@@ -786,7 +798,7 @@ var SideToolbar = function SideToolbar() {
786
798
  leftNode = targetNode;
787
799
  rightNode = sourceNode;
788
800
  } else {
789
- return;
801
+ return true;
790
802
  }
791
803
 
792
804
  // Form multi column first and then remove source and target node
@@ -797,21 +809,39 @@ var SideToolbar = function SideToolbar() {
797
809
  _slate.Transforms.removeNodes(editor, {
798
810
  at: [sourcePath[0]]
799
811
  });
800
- return;
812
+ return true;
801
813
  }, [editor]);
814
+ var handleDropCapture = (0, _react.useCallback)(function (event) {
815
+ var _event$dataTransfer;
816
+ var dragTypes = (_event$dataTransfer = event.dataTransfer) === null || _event$dataTransfer === void 0 ? void 0 : _event$dataTransfer.types;
817
+ if (!(dragTypes !== null && dragTypes !== void 0 && dragTypes.includes(_event.DRAG_SDOC_EDITOR_ELEMENT)) || !activeDragElRef.current) return;
818
+ var handled = handleDrop();
819
+ if (!handled) return;
820
+
821
+ // Block-level onDrop handlers stop propagation. Capture the event on the
822
+ // article container so side drops are handled before those handlers run.
823
+ event.preventDefault();
824
+ event.stopPropagation();
825
+ clearAllDragStyles();
826
+ sourceElement = null;
827
+ targetElement = null;
828
+ }, [clearAllDragStyles, handleDrop]);
802
829
  (0, _react.useEffect)(function () {
803
830
  var editorContainer = document.querySelector('.sdoc-article-container');
804
- editorContainer.addEventListener('dragover', handleDragover);
805
- editorContainer.addEventListener('dragend', clearAllDragStyles);
806
- editorContainer.addEventListener('dragleave', clearAllDragStyles);
807
- editorContainer.addEventListener('drop', handleDrop);
831
+ if (!editorContainer) return undefined;
832
+
833
+ // Use capture phase because block-level drag handlers stop propagation.
834
+ editorContainer.addEventListener('dragover', handleDragover, true);
835
+ editorContainer.addEventListener('dragend', clearAllDragStyles, true);
836
+ editorContainer.addEventListener('dragleave', clearAllDragStyles, true);
837
+ editorContainer.addEventListener('drop', handleDropCapture, true);
808
838
  return function () {
809
- editorContainer.removeEventListener('dragover', handleDragover);
810
- editorContainer.removeEventListener('dragend', clearAllDragStyles);
811
- editorContainer.removeEventListener('dragleave', clearAllDragStyles);
812
- editorContainer.removeEventListener('drop', handleDrop);
839
+ editorContainer.removeEventListener('dragover', handleDragover, true);
840
+ editorContainer.removeEventListener('dragend', clearAllDragStyles, true);
841
+ editorContainer.removeEventListener('dragleave', clearAllDragStyles, true);
842
+ editorContainer.removeEventListener('drop', handleDropCapture, true);
813
843
  };
814
- }, [handleDragover, clearAllDragStyles, handleDrop]);
844
+ }, [handleDragover, clearAllDragStyles, handleDropCapture]);
815
845
  return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, !_commonUtils.isMobile && /*#__PURE__*/_react["default"].createElement("div", {
816
846
  onAnimationEnd: function onAnimationEnd() {
817
847
  return setIsMoving(false);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "3.0.246",
3
+ "version": "3.0.247",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "test": "jest",
@@ -71,5 +71,5 @@
71
71
  "publishConfig": {
72
72
  "access": "public"
73
73
  },
74
- "gitHead": "97f53b824e9f6a38da872969d632dcd238c4b947"
74
+ "gitHead": "057969db030ac81ad1c976b6e961e9e4e86774e4"
75
75
  }