@reltio/components 1.4.2042 → 1.4.2044

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.
@@ -30,10 +30,7 @@ export var BarChart = function (_a) {
30
30
  var width = _a.width, height = _a.height, data = _a.data, _b = _a.options, options = _b === void 0 ? {} : _b, onItemClick = _a.onItemClick;
31
31
  var _c = getBarChartSettings(options), barChart = _c.barChart, cartesianGrid = _c.cartesianGrid, bar = _c.bar, tooltip = _c.tooltip, xAxis = _c.xAxis, yAxis = _c.yAxis;
32
32
  var _d = useDynamicYAxisWidth({ chartYAxisProps: yAxis }), chartRef = _d.chartRef, dynamicYAxisWidth = __rest(_d, ["chartRef"]);
33
- var onBarClick = onItemClick && (function (_a) {
34
- var group = _a.group;
35
- return onItemClick(group);
36
- });
33
+ var onBarClick = onItemClick && (function (data) { return onItemClick(data.group); });
37
34
  var clickable = useClickableChartStyle(onBarClick);
38
35
  return (React.createElement(BarChartWidget, __assign({ width: width, height: height, data: data }, barChart, { ref: chartRef }),
39
36
  React.createElement(CartesianGrid, __assign({}, cartesianGrid)),
package/RCTree/RCTree.js CHANGED
@@ -52,7 +52,7 @@ export var RCTree = function (_a) {
52
52
  }
53
53
  }, [scrollToNode]);
54
54
  var diplayedTreeData = useMemo(function () {
55
- if (dropNode && dragNode) {
55
+ if (dropNode && dragNode && dropPositionInfo) {
56
56
  if (dropNode.pos === dragNode.pos && dropNode.key === dragNode.key)
57
57
  return treeData;
58
58
  var dragNodeValue = __assign(__assign({}, dragNode.value), { nodeId: -1 });
@@ -10,9 +10,10 @@ type ConvertTreeDataProps<Node> = {
10
10
  isLeaf: (node: Node) => boolean;
11
11
  };
12
12
  export declare const convertTreeData: <Node extends RCTreeNode>({ data, isLeaf }: ConvertTreeDataProps<Node>) => InternalRCNode<Node>[];
13
- export declare const getNodeAtPosition: (treeData: RCTreeNode[], pos: string) => any;
13
+ export declare const getNodeAtPosition: <Node extends RCTreeNode>(treeData: Node[], pos: string) => Node | null;
14
14
  export declare const getParentPos: (pos: string) => string;
15
- export declare const changeNodeAtPosition: <Node extends RCTreeNode>(treeData: Node[], pos: string, changeNode: (node: Node) => Node) => any;
15
+ export declare const getDropNodeParent: <Node extends RCTreeNode>(treeData: Node[], dropPositionInfo: DropPositionInfo, dragNodePosition: string) => Node | null;
16
+ export declare const changeNodeAtPosition: <Node extends RCTreeNode>(treeData: Node[], pos: string, changeNode: (node: Node) => Node) => Node[];
16
17
  export declare const removeNodeAtPosition: (treeData: RCTreeNode[], pos: string) => any;
17
18
  export declare const insertNodeAtPosition: (treeData: RCTreeNode[], pos: string, dropPosition: number, node: RCTreeNode) => any;
18
19
  export declare const moveNode: (treeData: RCTreeNode[], dragNode: RCTreeNode, dragNodePos: string, dropPositionInfo: DropPositionInfo) => any;
package/RCTree/helper.js CHANGED
@@ -42,11 +42,22 @@ export var convertTreeData = function (_a) {
42
42
  var getPathFromPosition = pipe(split('-'), remove(0, 1), map(Number), intersperse('children'));
43
43
  export var getNodeAtPosition = function (treeData, pos) {
44
44
  var nodePath = getPathFromPosition(pos);
45
- return nodePath.length > 0 ? path(nodePath, treeData) : null;
45
+ return nodePath.length > 0 ? path(nodePath, treeData) || null : null;
46
46
  };
47
47
  export var getParentPos = function (pos) {
48
48
  return pos.split('-').slice(0, -1).join('-');
49
49
  };
50
+ export var getDropNodeParent = function (treeData, dropPositionInfo, dragNodePosition) {
51
+ var parentNodePosition = dropPositionInfo.dropPosition === AddNodePosition.AsChild
52
+ ? dropPositionInfo.pos
53
+ : getParentPos(dropPositionInfo.pos);
54
+ var parentNode = getNodeAtPosition(treeData, // current tree
55
+ // position in the current tree
56
+ slideNodePos(parentNodePosition, // position in the next tree
57
+ dragNodePosition, // position of drag node in the current tree
58
+ false));
59
+ return parentNode;
60
+ };
50
61
  export var changeNodeAtPosition = function (treeData, pos, changeNode) {
51
62
  var nodePath = getPathFromPosition(pos);
52
63
  var node = path(nodePath, treeData);
@@ -125,7 +136,7 @@ var calcAddNodePosition = function (event) {
125
136
  var nodeElement = getNodeTopElement(event.target);
126
137
  if (!nodeElement)
127
138
  return null;
128
- var offsetY = event.clientY - nodeElement.getBoundingClientRect().top;
139
+ var offsetY = event.clientY - nodeElement.getBoundingClientRect().top || 0;
129
140
  var treeNodeHeight = nodeElement.offsetHeight;
130
141
  return offsetY < treeNodeHeight / 2 ? AddNodePosition.Top : AddNodePosition.Bottom;
131
142
  };
@@ -135,7 +146,7 @@ var findDepthPosition = function (event, dropNode) {
135
146
  return null;
136
147
  var dropNodeLevel = dropNode.pos.split('-').length - 1;
137
148
  var leftPadding = parseFloat(window.getComputedStyle(nodeElement).paddingLeft) || 0;
138
- var offsetX = event.clientX - nodeElement.getBoundingClientRect().left - leftPadding;
149
+ var offsetX = event.clientX - nodeElement.getBoundingClientRect().left - leftPadding || 0;
139
150
  return Math.min(dropNodeLevel + 1, Math.max(Math.round(offsetX / DEPTH_LEVEL_INDENT), dropNodeLevel));
140
151
  };
141
152
  var changePosLastIndex = function (pos, change) {
@@ -164,8 +175,8 @@ export var getDropNodePosition = function (event, dropNode, prevDropPositionInfo
164
175
  var pos = !prevDropPositionInfo || prevDropPositionInfo.addToEnd
165
176
  ? dropNode.pos
166
177
  : slideNodePos(dropNode.pos, getCurrentDropNodePos(prevDropPositionInfo), true);
167
- var dropNodeDepth = pos.split('-').length - 1;
168
178
  var position = pos.split('-');
179
+ var dropNodeDepth = position.length - 1;
169
180
  var lastIndex = Number(last(position));
170
181
  if (depthPosition === dropNodeDepth) {
171
182
  return { pos: pos, dropPosition: addNodePosition };
package/RCTree/types.d.ts CHANGED
@@ -3,6 +3,7 @@ export type RCTreeNode = {
3
3
  nodeId: number;
4
4
  title?: string;
5
5
  expanded?: boolean;
6
+ pending?: boolean;
6
7
  children?: RCTreeNode[];
7
8
  };
8
9
  export type InternalRCNode<Node extends RCTreeNode = RCTreeNode> = {
@@ -1,5 +1,5 @@
1
1
  import { DragEvent } from 'react';
2
- import { InternalRCNode, RCTreeNode } from './types';
2
+ import { InternalRCNode, RCTreeNode, DropPositionInfo } from './types';
3
3
  type Props<Node extends RCTreeNode> = {
4
4
  treeData: Node[];
5
5
  containerRef: React.RefObject<HTMLDivElement>;
@@ -30,18 +30,10 @@ export declare const useDnd: <Node extends RCTreeNode>({ treeData, containerRef,
30
30
  }) => void;
31
31
  onDrop: () => void;
32
32
  dropIndicatorRender: () => any;
33
- allowDrop: ({ dragNode, dropNode }: {
34
- dragNode: InternalRCNode<Node>;
35
- dropNode: InternalRCNode<Node>;
36
- }) => boolean;
37
33
  };
38
34
  nodeDraggable: (node: InternalRCNode<Node>) => boolean;
39
35
  dropNode: InternalRCNode<Node>;
40
36
  dragNode: InternalRCNode<Node>;
41
- dropPositionInfo: {
42
- pos: string;
43
- dropPosition: number;
44
- addToEnd?: boolean;
45
- };
37
+ dropPositionInfo: DropPositionInfo;
46
38
  };
47
39
  export {};
package/RCTree/useDnd.js CHANGED
@@ -3,7 +3,7 @@ import { equals } from 'ramda';
3
3
  import { AddNodePosition } from './types';
4
4
  import { useScrollOnDrag } from './useScrollOnDrag';
5
5
  import { useDelayedDragEventCall } from './useDelayedDragEventCall';
6
- import { getDropNodePosition, getExpandedKeys, getNodeAtPosition, getParentPos, isDropIndicatorNode, moveNode, slideNodePos } from './helper';
6
+ import { getDropNodePosition, getExpandedKeys, getNodeAtPosition, isDropIndicatorNode, moveNode, slideNodePos, getDropNodeParent } from './helper';
7
7
  export var useDnd = function (_a) {
8
8
  var treeData = _a.treeData, containerRef = _a.containerRef, expandNode = _a.expandNode, onLoadChildren = _a.onLoadChildren, onChange = _a.onChange, onDropProp = _a.onDrop, canDrop = _a.canDrop, canDrag = _a.canDrag;
9
9
  var _b = useState(null), dragNode = _b[0], setDragNode = _b[1];
@@ -35,7 +35,7 @@ export var useDnd = function (_a) {
35
35
  }
36
36
  }, [expandNode, expandedKeys, onLoadChildren, treeData]);
37
37
  var expandDropNode = useCallback(function (newDropPositionInfo) {
38
- if (onChange && newDropPositionInfo.dropPosition === AddNodePosition.AsChild) {
38
+ if (onChange && newDropPositionInfo.dropPosition === AddNodePosition.AsChild && dragNode) {
39
39
  var currentParentNodePos = slideNodePos(newDropPositionInfo.pos, dragNode.pos);
40
40
  if (currentParentNodePos.split('-').length > 1) {
41
41
  expandDropNodeAtPosition(currentParentNodePos, true);
@@ -45,14 +45,23 @@ export var useDnd = function (_a) {
45
45
  var handleSetDropNode = useCallback(function (_a) {
46
46
  var event = _a.event, node = _a.node;
47
47
  var newDropPositionInfo = getDropNodePosition(event, node, dropPositionInfo) || dropPositionInfo;
48
+ var isNewDropPositionValid = newDropPositionInfo &&
49
+ dragNode &&
50
+ canDrop({
51
+ // Either drop node itself or its parent in the tree
52
+ nextParent: getDropNodeParent(treeData, newDropPositionInfo, dragNode.pos),
53
+ node: dragNode.value
54
+ });
48
55
  if (!equals(newDropPositionInfo, dropPositionInfo) && (!isDropIndicatorNode(node) || !dropNode)) {
49
- setDropPositionInfo(newDropPositionInfo);
56
+ if (isNewDropPositionValid) {
57
+ setDropPositionInfo(newDropPositionInfo);
58
+ }
50
59
  expandDropNode(newDropPositionInfo);
51
60
  }
52
- if (node.key !== (dropNode === null || dropNode === void 0 ? void 0 : dropNode.key)) {
61
+ if (node.key !== (dropNode === null || dropNode === void 0 ? void 0 : dropNode.key) && (!isDropIndicatorNode(node) || isNewDropPositionValid)) {
53
62
  setDropNode(node);
54
63
  }
55
- }, [dropNode, dropPositionInfo, expandDropNode]);
64
+ }, [dragNode, dropNode, canDrop, dropPositionInfo, expandDropNode, treeData]);
56
65
  var delayedHandleDragOver = useDelayedDragEventCall(handleSetDropNode);
57
66
  var onDragOver = function (_a) {
58
67
  var event = _a.event, node = _a.node;
@@ -72,22 +81,18 @@ export var useDnd = function (_a) {
72
81
  }
73
82
  };
74
83
  var onDrop = function () {
75
- if (dragNode && isDropIndicatorNode(dropNode)) {
76
- var parentNodePosition = dropPositionInfo.dropPosition === AddNodePosition.AsChild
77
- ? dropPositionInfo.pos
78
- : getParentPos(dropPositionInfo.pos);
79
- var parentNode = getNodeAtPosition(treeData, parentNodePosition);
80
- var newTreeData = moveNode(treeData, dragNode.value, dragNode.pos, dropPositionInfo);
81
- onDropProp(newTreeData, dragNode.value, parentNode);
84
+ if (dragNode && dropPositionInfo && isDropIndicatorNode(dropNode)) {
85
+ var parentNode = getDropNodeParent(treeData, dropPositionInfo, dragNode.pos);
86
+ if (canDrop({ nextParent: parentNode, node: dragNode.value })) {
87
+ var newTreeData = moveNode(treeData, dragNode.value, dragNode.pos, dropPositionInfo);
88
+ onDropProp(newTreeData, dragNode.value, parentNode);
89
+ }
82
90
  }
83
91
  setDragNode(null);
84
92
  setDropNode(null);
85
93
  onEndDragging();
94
+ window.removeEventListener('mousemove', handleDropOutsideTree);
86
95
  };
87
- var allowDrop = useCallback(function (_a) {
88
- var dragNode = _a.dragNode, dropNode = _a.dropNode;
89
- return canDrop({ nextParent: dropNode.value, node: dragNode.value });
90
- }, [canDrop]);
91
96
  var nodeDraggable = useCallback(function (node) {
92
97
  return canDrag({ node: node.value });
93
98
  }, [canDrag]);
@@ -97,8 +102,7 @@ export var useDnd = function (_a) {
97
102
  onDragOver: onDragOver,
98
103
  onDragLeave: onDragLeave,
99
104
  onDrop: onDrop,
100
- dropIndicatorRender: dropIndicatorRender,
101
- allowDrop: allowDrop
105
+ dropIndicatorRender: dropIndicatorRender
102
106
  },
103
107
  nodeDraggable: nodeDraggable,
104
108
  dropNode: dropNode,
@@ -36,10 +36,7 @@ var BarChart = function (_a) {
36
36
  var width = _a.width, height = _a.height, data = _a.data, _b = _a.options, options = _b === void 0 ? {} : _b, onItemClick = _a.onItemClick;
37
37
  var _c = (0, helpers_1.getBarChartSettings)(options), barChart = _c.barChart, cartesianGrid = _c.cartesianGrid, bar = _c.bar, tooltip = _c.tooltip, xAxis = _c.xAxis, yAxis = _c.yAxis;
38
38
  var _d = (0, useDynamicYAxisWidth_1.useDynamicYAxisWidth)({ chartYAxisProps: yAxis }), chartRef = _d.chartRef, dynamicYAxisWidth = __rest(_d, ["chartRef"]);
39
- var onBarClick = onItemClick && (function (_a) {
40
- var group = _a.group;
41
- return onItemClick(group);
42
- });
39
+ var onBarClick = onItemClick && (function (data) { return onItemClick(data.group); });
43
40
  var clickable = (0, useClickableChartStyle_1.useClickableChartStyle)(onBarClick);
44
41
  return (react_1.default.createElement(recharts_1.BarChart, __assign({ width: width, height: height, data: data }, barChart, { ref: chartRef }),
45
42
  react_1.default.createElement(recharts_1.CartesianGrid, __assign({}, cartesianGrid)),
@@ -81,7 +81,7 @@ var RCTree = function (_a) {
81
81
  }
82
82
  }, [scrollToNode]);
83
83
  var diplayedTreeData = (0, react_1.useMemo)(function () {
84
- if (dropNode && dragNode) {
84
+ if (dropNode && dragNode && dropPositionInfo) {
85
85
  if (dropNode.pos === dragNode.pos && dropNode.key === dragNode.key)
86
86
  return treeData;
87
87
  var dragNodeValue = __assign(__assign({}, dragNode.value), { nodeId: -1 });
@@ -10,9 +10,10 @@ type ConvertTreeDataProps<Node> = {
10
10
  isLeaf: (node: Node) => boolean;
11
11
  };
12
12
  export declare const convertTreeData: <Node extends RCTreeNode>({ data, isLeaf }: ConvertTreeDataProps<Node>) => InternalRCNode<Node>[];
13
- export declare const getNodeAtPosition: (treeData: RCTreeNode[], pos: string) => any;
13
+ export declare const getNodeAtPosition: <Node extends RCTreeNode>(treeData: Node[], pos: string) => Node | null;
14
14
  export declare const getParentPos: (pos: string) => string;
15
- export declare const changeNodeAtPosition: <Node extends RCTreeNode>(treeData: Node[], pos: string, changeNode: (node: Node) => Node) => any;
15
+ export declare const getDropNodeParent: <Node extends RCTreeNode>(treeData: Node[], dropPositionInfo: DropPositionInfo, dragNodePosition: string) => Node | null;
16
+ export declare const changeNodeAtPosition: <Node extends RCTreeNode>(treeData: Node[], pos: string, changeNode: (node: Node) => Node) => Node[];
16
17
  export declare const removeNodeAtPosition: (treeData: RCTreeNode[], pos: string) => any;
17
18
  export declare const insertNodeAtPosition: (treeData: RCTreeNode[], pos: string, dropPosition: number, node: RCTreeNode) => any;
18
19
  export declare const moveNode: (treeData: RCTreeNode[], dragNode: RCTreeNode, dragNodePos: string, dropPositionInfo: DropPositionInfo) => any;
@@ -20,7 +20,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
20
20
  return to.concat(ar || Array.prototype.slice.call(from));
21
21
  };
22
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
- exports.calcNodeWidth = exports.setTreeWidth = exports.getLevelLinesData = exports.gatherNodeKeys = exports.isDropIndicatorNode = exports.getDropNodePosition = exports.slideNodePos = exports.getExpandedKeys = exports.moveNode = exports.insertNodeAtPosition = exports.removeNodeAtPosition = exports.changeNodeAtPosition = exports.getParentPos = exports.getNodeAtPosition = exports.convertTreeData = exports.defaultIsLeaf = exports.DEPTH_LEVEL_INDENT = void 0;
23
+ exports.calcNodeWidth = exports.setTreeWidth = exports.getLevelLinesData = exports.gatherNodeKeys = exports.isDropIndicatorNode = exports.getDropNodePosition = exports.slideNodePos = exports.getExpandedKeys = exports.moveNode = exports.insertNodeAtPosition = exports.removeNodeAtPosition = exports.changeNodeAtPosition = exports.getDropNodeParent = exports.getParentPos = exports.getNodeAtPosition = exports.convertTreeData = exports.defaultIsLeaf = exports.DEPTH_LEVEL_INDENT = void 0;
24
24
  var ramda_1 = require("ramda");
25
25
  var types_1 = require("./types");
26
26
  exports.DEPTH_LEVEL_INDENT = 16;
@@ -47,13 +47,25 @@ exports.convertTreeData = convertTreeData;
47
47
  var getPathFromPosition = (0, ramda_1.pipe)((0, ramda_1.split)('-'), (0, ramda_1.remove)(0, 1), (0, ramda_1.map)(Number), (0, ramda_1.intersperse)('children'));
48
48
  var getNodeAtPosition = function (treeData, pos) {
49
49
  var nodePath = getPathFromPosition(pos);
50
- return nodePath.length > 0 ? (0, ramda_1.path)(nodePath, treeData) : null;
50
+ return nodePath.length > 0 ? (0, ramda_1.path)(nodePath, treeData) || null : null;
51
51
  };
52
52
  exports.getNodeAtPosition = getNodeAtPosition;
53
53
  var getParentPos = function (pos) {
54
54
  return pos.split('-').slice(0, -1).join('-');
55
55
  };
56
56
  exports.getParentPos = getParentPos;
57
+ var getDropNodeParent = function (treeData, dropPositionInfo, dragNodePosition) {
58
+ var parentNodePosition = dropPositionInfo.dropPosition === types_1.AddNodePosition.AsChild
59
+ ? dropPositionInfo.pos
60
+ : (0, exports.getParentPos)(dropPositionInfo.pos);
61
+ var parentNode = (0, exports.getNodeAtPosition)(treeData, // current tree
62
+ // position in the current tree
63
+ (0, exports.slideNodePos)(parentNodePosition, // position in the next tree
64
+ dragNodePosition, // position of drag node in the current tree
65
+ false));
66
+ return parentNode;
67
+ };
68
+ exports.getDropNodeParent = getDropNodeParent;
57
69
  var changeNodeAtPosition = function (treeData, pos, changeNode) {
58
70
  var nodePath = getPathFromPosition(pos);
59
71
  var node = (0, ramda_1.path)(nodePath, treeData);
@@ -138,7 +150,7 @@ var calcAddNodePosition = function (event) {
138
150
  var nodeElement = getNodeTopElement(event.target);
139
151
  if (!nodeElement)
140
152
  return null;
141
- var offsetY = event.clientY - nodeElement.getBoundingClientRect().top;
153
+ var offsetY = event.clientY - nodeElement.getBoundingClientRect().top || 0;
142
154
  var treeNodeHeight = nodeElement.offsetHeight;
143
155
  return offsetY < treeNodeHeight / 2 ? types_1.AddNodePosition.Top : types_1.AddNodePosition.Bottom;
144
156
  };
@@ -148,7 +160,7 @@ var findDepthPosition = function (event, dropNode) {
148
160
  return null;
149
161
  var dropNodeLevel = dropNode.pos.split('-').length - 1;
150
162
  var leftPadding = parseFloat(window.getComputedStyle(nodeElement).paddingLeft) || 0;
151
- var offsetX = event.clientX - nodeElement.getBoundingClientRect().left - leftPadding;
163
+ var offsetX = event.clientX - nodeElement.getBoundingClientRect().left - leftPadding || 0;
152
164
  return Math.min(dropNodeLevel + 1, Math.max(Math.round(offsetX / exports.DEPTH_LEVEL_INDENT), dropNodeLevel));
153
165
  };
154
166
  var changePosLastIndex = function (pos, change) {
@@ -177,8 +189,8 @@ var getDropNodePosition = function (event, dropNode, prevDropPositionInfo) {
177
189
  var pos = !prevDropPositionInfo || prevDropPositionInfo.addToEnd
178
190
  ? dropNode.pos
179
191
  : (0, exports.slideNodePos)(dropNode.pos, getCurrentDropNodePos(prevDropPositionInfo), true);
180
- var dropNodeDepth = pos.split('-').length - 1;
181
192
  var position = pos.split('-');
193
+ var dropNodeDepth = position.length - 1;
182
194
  var lastIndex = Number((0, ramda_1.last)(position));
183
195
  if (depthPosition === dropNodeDepth) {
184
196
  return { pos: pos, dropPosition: addNodePosition };
@@ -3,6 +3,7 @@ export type RCTreeNode = {
3
3
  nodeId: number;
4
4
  title?: string;
5
5
  expanded?: boolean;
6
+ pending?: boolean;
6
7
  children?: RCTreeNode[];
7
8
  };
8
9
  export type InternalRCNode<Node extends RCTreeNode = RCTreeNode> = {
@@ -1,5 +1,5 @@
1
1
  import { DragEvent } from 'react';
2
- import { InternalRCNode, RCTreeNode } from './types';
2
+ import { InternalRCNode, RCTreeNode, DropPositionInfo } from './types';
3
3
  type Props<Node extends RCTreeNode> = {
4
4
  treeData: Node[];
5
5
  containerRef: React.RefObject<HTMLDivElement>;
@@ -30,18 +30,10 @@ export declare const useDnd: <Node extends RCTreeNode>({ treeData, containerRef,
30
30
  }) => void;
31
31
  onDrop: () => void;
32
32
  dropIndicatorRender: () => any;
33
- allowDrop: ({ dragNode, dropNode }: {
34
- dragNode: InternalRCNode<Node>;
35
- dropNode: InternalRCNode<Node>;
36
- }) => boolean;
37
33
  };
38
34
  nodeDraggable: (node: InternalRCNode<Node>) => boolean;
39
35
  dropNode: InternalRCNode<Node>;
40
36
  dragNode: InternalRCNode<Node>;
41
- dropPositionInfo: {
42
- pos: string;
43
- dropPosition: number;
44
- addToEnd?: boolean;
45
- };
37
+ dropPositionInfo: DropPositionInfo;
46
38
  };
47
39
  export {};
@@ -38,7 +38,7 @@ var useDnd = function (_a) {
38
38
  }
39
39
  }, [expandNode, expandedKeys, onLoadChildren, treeData]);
40
40
  var expandDropNode = (0, react_1.useCallback)(function (newDropPositionInfo) {
41
- if (onChange && newDropPositionInfo.dropPosition === types_1.AddNodePosition.AsChild) {
41
+ if (onChange && newDropPositionInfo.dropPosition === types_1.AddNodePosition.AsChild && dragNode) {
42
42
  var currentParentNodePos = (0, helper_1.slideNodePos)(newDropPositionInfo.pos, dragNode.pos);
43
43
  if (currentParentNodePos.split('-').length > 1) {
44
44
  expandDropNodeAtPosition(currentParentNodePos, true);
@@ -48,14 +48,23 @@ var useDnd = function (_a) {
48
48
  var handleSetDropNode = (0, react_1.useCallback)(function (_a) {
49
49
  var event = _a.event, node = _a.node;
50
50
  var newDropPositionInfo = (0, helper_1.getDropNodePosition)(event, node, dropPositionInfo) || dropPositionInfo;
51
+ var isNewDropPositionValid = newDropPositionInfo &&
52
+ dragNode &&
53
+ canDrop({
54
+ // Either drop node itself or its parent in the tree
55
+ nextParent: (0, helper_1.getDropNodeParent)(treeData, newDropPositionInfo, dragNode.pos),
56
+ node: dragNode.value
57
+ });
51
58
  if (!(0, ramda_1.equals)(newDropPositionInfo, dropPositionInfo) && (!(0, helper_1.isDropIndicatorNode)(node) || !dropNode)) {
52
- setDropPositionInfo(newDropPositionInfo);
59
+ if (isNewDropPositionValid) {
60
+ setDropPositionInfo(newDropPositionInfo);
61
+ }
53
62
  expandDropNode(newDropPositionInfo);
54
63
  }
55
- if (node.key !== (dropNode === null || dropNode === void 0 ? void 0 : dropNode.key)) {
64
+ if (node.key !== (dropNode === null || dropNode === void 0 ? void 0 : dropNode.key) && (!(0, helper_1.isDropIndicatorNode)(node) || isNewDropPositionValid)) {
56
65
  setDropNode(node);
57
66
  }
58
- }, [dropNode, dropPositionInfo, expandDropNode]);
67
+ }, [dragNode, dropNode, canDrop, dropPositionInfo, expandDropNode, treeData]);
59
68
  var delayedHandleDragOver = (0, useDelayedDragEventCall_1.useDelayedDragEventCall)(handleSetDropNode);
60
69
  var onDragOver = function (_a) {
61
70
  var event = _a.event, node = _a.node;
@@ -75,22 +84,18 @@ var useDnd = function (_a) {
75
84
  }
76
85
  };
77
86
  var onDrop = function () {
78
- if (dragNode && (0, helper_1.isDropIndicatorNode)(dropNode)) {
79
- var parentNodePosition = dropPositionInfo.dropPosition === types_1.AddNodePosition.AsChild
80
- ? dropPositionInfo.pos
81
- : (0, helper_1.getParentPos)(dropPositionInfo.pos);
82
- var parentNode = (0, helper_1.getNodeAtPosition)(treeData, parentNodePosition);
83
- var newTreeData = (0, helper_1.moveNode)(treeData, dragNode.value, dragNode.pos, dropPositionInfo);
84
- onDropProp(newTreeData, dragNode.value, parentNode);
87
+ if (dragNode && dropPositionInfo && (0, helper_1.isDropIndicatorNode)(dropNode)) {
88
+ var parentNode = (0, helper_1.getDropNodeParent)(treeData, dropPositionInfo, dragNode.pos);
89
+ if (canDrop({ nextParent: parentNode, node: dragNode.value })) {
90
+ var newTreeData = (0, helper_1.moveNode)(treeData, dragNode.value, dragNode.pos, dropPositionInfo);
91
+ onDropProp(newTreeData, dragNode.value, parentNode);
92
+ }
85
93
  }
86
94
  setDragNode(null);
87
95
  setDropNode(null);
88
96
  onEndDragging();
97
+ window.removeEventListener('mousemove', handleDropOutsideTree);
89
98
  };
90
- var allowDrop = (0, react_1.useCallback)(function (_a) {
91
- var dragNode = _a.dragNode, dropNode = _a.dropNode;
92
- return canDrop({ nextParent: dropNode.value, node: dragNode.value });
93
- }, [canDrop]);
94
99
  var nodeDraggable = (0, react_1.useCallback)(function (node) {
95
100
  return canDrag({ node: node.value });
96
101
  }, [canDrag]);
@@ -100,8 +105,7 @@ var useDnd = function (_a) {
100
105
  onDragOver: onDragOver,
101
106
  onDragLeave: onDragLeave,
102
107
  onDrop: onDrop,
103
- dropIndicatorRender: dropIndicatorRender,
104
- allowDrop: allowDrop
108
+ dropIndicatorRender: dropIndicatorRender
105
109
  },
106
110
  nodeDraggable: nodeDraggable,
107
111
  dropNode: dropNode,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reltio/components",
3
- "version": "1.4.2042",
3
+ "version": "1.4.2044",
4
4
  "license": "SEE LICENSE IN LICENSE FILE",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./index.js",
@@ -36,7 +36,7 @@
36
36
  "react-simple-maps": "^3.0.0",
37
37
  "react-virtualized": "^9.22.5",
38
38
  "react-window": "^1.8.10",
39
- "recharts": "^2.10.1",
39
+ "recharts": "^2.14.1",
40
40
  "sanitize-html": "^2.13.1",
41
41
  "sigma": "^2.4.0",
42
42
  "topojson-client": "^3.1.0"