@reltio/components 1.4.1991 → 1.4.1993
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/cjs/HOCs/withDragHandle/styles.d.ts +1 -1
- package/cjs/RCTree/RCTree.d.ts +10 -4
- package/cjs/RCTree/RCTree.js +66 -27
- package/cjs/RCTree/helper.d.ts +21 -2
- package/cjs/RCTree/helper.js +161 -6
- package/cjs/RCTree/styles.d.ts +1 -1
- package/cjs/RCTree/styles.js +52 -23
- package/cjs/RCTree/types.d.ts +11 -0
- package/cjs/RCTree/types.js +7 -0
- package/cjs/RCTree/useDelayedDragEventCall.d.ts +6 -0
- package/cjs/RCTree/useDelayedDragEventCall.js +26 -0
- package/cjs/RCTree/useDnd.d.ts +47 -0
- package/cjs/RCTree/useDnd.js +112 -0
- package/cjs/RCTree/useScrollOnDrag.d.ts +6 -0
- package/cjs/RCTree/useScrollOnDrag.js +87 -0
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +2 -1
- package/cjs/test-utils/index.d.ts +1 -0
- package/cjs/test-utils/index.js +25 -1
- package/esm/HOCs/withDragHandle/styles.d.ts +1 -1
- package/esm/RCTree/RCTree.d.ts +10 -4
- package/esm/RCTree/RCTree.js +67 -28
- package/esm/RCTree/helper.d.ts +21 -2
- package/esm/RCTree/helper.js +151 -6
- package/esm/RCTree/styles.d.ts +1 -1
- package/esm/RCTree/styles.js +52 -23
- package/esm/RCTree/types.d.ts +11 -0
- package/esm/RCTree/types.js +6 -1
- package/esm/RCTree/useDelayedDragEventCall.d.ts +6 -0
- package/esm/RCTree/useDelayedDragEventCall.js +22 -0
- package/esm/RCTree/useDnd.d.ts +47 -0
- package/esm/RCTree/useDnd.js +108 -0
- package/esm/RCTree/useScrollOnDrag.d.ts +6 -0
- package/esm/RCTree/useScrollOnDrag.js +83 -0
- package/esm/index.d.ts +1 -1
- package/esm/index.js +1 -1
- package/esm/test-utils/index.d.ts +1 -0
- package/esm/test-utils/index.js +23 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"
|
|
1
|
+
export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"dragHandle" | "dragHandleContainer" | "dragHandleVisibilityArea" | "dragIcon">;
|
package/cjs/RCTree/RCTree.d.ts
CHANGED
|
@@ -4,10 +4,16 @@ import { RCTreeNode } from './types';
|
|
|
4
4
|
type Props = {
|
|
5
5
|
treeData: RCTreeNode[];
|
|
6
6
|
renderNode?: (node: RCTreeNode & Record<string, unknown>) => React.ReactElement;
|
|
7
|
-
canDrag?: boolean;
|
|
8
7
|
isVirtualized?: boolean;
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
canDrag?: (params: {
|
|
9
|
+
node: RCTreeNode;
|
|
10
|
+
}) => boolean;
|
|
11
|
+
canDrop?: (params: {
|
|
12
|
+
nextParent: RCTreeNode;
|
|
13
|
+
node: RCTreeNode;
|
|
14
|
+
}) => boolean;
|
|
15
|
+
onDrop?: (treeData: RCTreeNode[], dragNode: RCTreeNode, parentNode: RCTreeNode) => void;
|
|
16
|
+
onLoadChildren?: (treeNode: RCTreeNode) => Promise<void>;
|
|
11
17
|
height?: number;
|
|
12
18
|
defaultExpandAll?: boolean;
|
|
13
19
|
SwitchRenderer?: (props: any) => React.ReactElement;
|
|
@@ -17,5 +23,5 @@ type Props = {
|
|
|
17
23
|
scrollToNode?: RCTreeNode;
|
|
18
24
|
onChange?: (node: RCTreeNode[]) => void;
|
|
19
25
|
};
|
|
20
|
-
export declare const RCTree: ({ treeData, isVirtualized, canDrag, canDrop, onLoadChildren, height, defaultExpandAll, SwitchRenderer, className, renderNode, minItemHeight, isLeaf, scrollToNode, onChange }: Props) => React.JSX.Element;
|
|
26
|
+
export declare const RCTree: ({ treeData, isVirtualized, canDrag, canDrop, onDrop, onLoadChildren, height, defaultExpandAll, SwitchRenderer, className, renderNode, minItemHeight, isLeaf, scrollToNode, onChange }: Props) => React.JSX.Element;
|
|
21
27
|
export {};
|
package/cjs/RCTree/RCTree.js
CHANGED
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
2
13
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
14
|
if (k2 === undefined) k2 = k;
|
|
4
15
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -31,47 +42,75 @@ var classnames_1 = __importDefault(require("classnames"));
|
|
|
31
42
|
var ramda_1 = require("ramda");
|
|
32
43
|
var rc_tree_1 = __importDefault(require("rc-tree"));
|
|
33
44
|
var react_1 = __importStar(require("react"));
|
|
45
|
+
var DragIndicator_1 = __importDefault(require("@mui/icons-material/DragIndicator"));
|
|
34
46
|
var DefaultSwitchRenderer_1 = require("./DefaultSwitchRenderer");
|
|
35
47
|
var helper_1 = require("./helper");
|
|
48
|
+
var useDnd_1 = require("./useDnd");
|
|
36
49
|
var styles_1 = require("./styles");
|
|
37
50
|
var MIN_ROW_HEIGHT = 28;
|
|
38
51
|
var RCTree = function (_a) {
|
|
39
|
-
var
|
|
52
|
+
var _b;
|
|
53
|
+
var treeData = _a.treeData, _c = _a.isVirtualized, isVirtualized = _c === void 0 ? true : _c, _d = _a.canDrag, canDrag = _d === void 0 ? function () { return false; } : _d, _e = _a.canDrop, canDrop = _e === void 0 ? function () { return false; } : _e, _f = _a.onDrop, onDrop = _f === void 0 ? function () { } : _f, onLoadChildren = _a.onLoadChildren, height = _a.height, _g = _a.defaultExpandAll, defaultExpandAll = _g === void 0 ? false : _g, _h = _a.SwitchRenderer, SwitchRenderer = _h === void 0 ? DefaultSwitchRenderer_1.DefaultSwitchRenderer : _h, className = _a.className, renderNode = _a.renderNode, _j = _a.minItemHeight, minItemHeight = _j === void 0 ? MIN_ROW_HEIGHT : _j, _k = _a.isLeaf, isLeaf = _k === void 0 ? helper_1.defaultIsLeaf : _k, scrollToNode = _a.scrollToNode, _l = _a.onChange, onChange = _l === void 0 ? ramda_1.identity : _l;
|
|
40
54
|
var styles = (0, styles_1.useStyles)();
|
|
41
|
-
var internalTreeData = (0, react_1.useMemo)(function () { return (0, helper_1.convertTreeData)({ data: treeData, isLeaf: isLeaf }); }, [isLeaf, treeData]);
|
|
42
55
|
var treeRef = (0, react_1.useRef)(null);
|
|
56
|
+
var containerRef = (0, react_1.useRef)(null);
|
|
57
|
+
var expandNode = (0, react_1.useCallback)(function (pos, expanded) {
|
|
58
|
+
var changeNode = (0, ramda_1.assoc)('expanded', expanded);
|
|
59
|
+
var newTreeData = (0, helper_1.changeNodeAtPosition)(treeData, pos, changeNode);
|
|
60
|
+
if (newTreeData)
|
|
61
|
+
onChange(newTreeData);
|
|
62
|
+
}, [onChange, treeData]);
|
|
63
|
+
var _m = (0, useDnd_1.useDnd)({
|
|
64
|
+
containerRef: containerRef,
|
|
65
|
+
treeData: treeData,
|
|
66
|
+
expandNode: expandNode,
|
|
67
|
+
onLoadChildren: onLoadChildren,
|
|
68
|
+
onChange: onChange,
|
|
69
|
+
onDrop: onDrop,
|
|
70
|
+
canDrop: canDrop,
|
|
71
|
+
canDrag: canDrag
|
|
72
|
+
}), treeProps = _m.treeProps, nodeDraggable = _m.nodeDraggable, dropNode = _m.dropNode, dragNode = _m.dragNode, dropPositionInfo = _m.dropPositionInfo;
|
|
43
73
|
(0, react_1.useEffect)(function () {
|
|
44
74
|
if (treeRef.current && scrollToNode) {
|
|
45
75
|
treeRef.current.scrollTo({ key: String(scrollToNode.nodeId) });
|
|
46
76
|
}
|
|
47
77
|
}, [scrollToNode]);
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
var handleDragEnter = function (_a) {
|
|
55
|
-
var event = _a.event, node = _a.node, expandedKeys = _a.expandedKeys;
|
|
56
|
-
// TODO: implement
|
|
57
|
-
};
|
|
58
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
59
|
-
var dropIndicatorRender = function (_a) {
|
|
60
|
-
var dropPosition = _a.dropPosition, dropLevelOffset = _a.dropLevelOffset, indent = _a.indent, prefixCls = _a.prefixCls, direction = _a.direction;
|
|
61
|
-
// TODO: implement
|
|
62
|
-
};
|
|
63
|
-
var handleExpand = (0, react_1.useCallback)(function (_expandedKeys, data) {
|
|
64
|
-
if (onChange) {
|
|
65
|
-
var changeNode = (0, ramda_1.assoc)('expanded', data.expanded);
|
|
66
|
-
var newTreeData = (0, helper_1.changeNodeAtPosition)(treeData, data.node.pos, changeNode);
|
|
67
|
-
if (newTreeData)
|
|
68
|
-
onChange(newTreeData);
|
|
78
|
+
var diplayedTreeData = (0, react_1.useMemo)(function () {
|
|
79
|
+
if (dropNode && dragNode) {
|
|
80
|
+
if (dropNode.pos === dragNode.pos && dropNode.key === dragNode.key)
|
|
81
|
+
return treeData;
|
|
82
|
+
var dragNodeValue = __assign(__assign({}, dragNode.value), { nodeId: -1 });
|
|
83
|
+
return (0, helper_1.moveNode)(treeData, dragNodeValue, dragNode.pos, dropPositionInfo);
|
|
69
84
|
}
|
|
70
|
-
|
|
85
|
+
return treeData;
|
|
86
|
+
}, [treeData, dragNode, dropNode, dropPositionInfo]);
|
|
71
87
|
var expandedKeys = (0, react_1.useMemo)(function () {
|
|
72
|
-
return (0, helper_1.getExpandedKeys)(
|
|
73
|
-
}, [
|
|
88
|
+
return (0, helper_1.getExpandedKeys)(diplayedTreeData);
|
|
89
|
+
}, [diplayedTreeData]);
|
|
90
|
+
var internalTreeData = (0, react_1.useMemo)(function () { return (0, helper_1.convertTreeData)({ data: diplayedTreeData, isLeaf: isLeaf }); }, [isLeaf, diplayedTreeData]);
|
|
91
|
+
var handleExpand = (0, react_1.useCallback)(function (_expandedKeys, data) {
|
|
92
|
+
if (onChange && !dragNode) {
|
|
93
|
+
expandNode(data.node.pos, data.expanded);
|
|
94
|
+
}
|
|
95
|
+
}, [onChange, expandNode, dragNode]);
|
|
74
96
|
var renderSwitcherIcon = (0, react_1.useCallback)(function (node) { return react_1.default.createElement(SwitchRenderer, { node: node }); }, []);
|
|
75
|
-
|
|
97
|
+
var titleRender = function (node) {
|
|
98
|
+
var _a;
|
|
99
|
+
var draggedNodes = (0, helper_1.gatherNodeKeys)(dragNode);
|
|
100
|
+
return (react_1.default.createElement("div", { className: (0, classnames_1.default)((_a = {},
|
|
101
|
+
_a[styles.dropIndicator] = (0, helper_1.isDropIndicatorNode)(node),
|
|
102
|
+
_a[styles.dropNotAllowed] = dropNode && !(0, helper_1.isDropIndicatorNode)(dropNode),
|
|
103
|
+
_a[styles.draggedChildrenNode] = draggedNodes.includes(node.key),
|
|
104
|
+
_a)), onMouseDown: helper_1.preventNodeDragging }, renderNode ? renderNode(node.value) : node.title));
|
|
105
|
+
};
|
|
106
|
+
var dragHandle = (react_1.default.createElement("span", { className: (0, classnames_1.default)(styles.dragHandle, (_b = {},
|
|
107
|
+
_b[styles.dragHandleDragging] = !!dragNode,
|
|
108
|
+
_b)) },
|
|
109
|
+
react_1.default.createElement(DragIndicator_1.default, null)));
|
|
110
|
+
return diplayedTreeData ? (react_1.default.createElement("div", { ref: containerRef },
|
|
111
|
+
react_1.default.createElement(rc_tree_1.default, __assign({ draggable: {
|
|
112
|
+
icon: dragHandle,
|
|
113
|
+
nodeDraggable: nodeDraggable
|
|
114
|
+
}, virtual: isVirtualized, itemHeight: minItemHeight, height: height, onExpand: handleExpand, showIcon: false, showLine: true, expandedKeys: expandedKeys, switcherIcon: renderSwitcherIcon, defaultExpandAll: defaultExpandAll, className: (0, classnames_1.default)(className, styles.treeWrapper), titleRender: titleRender, treeData: internalTreeData, selectable: false, loadData: onLoadChildren ? function (node) { return onLoadChildren(node.value); } : undefined, "data-reltio-id": "rc-tree", ref: treeRef }, treeProps)))) : null;
|
|
76
115
|
};
|
|
77
116
|
exports.RCTree = RCTree;
|
package/cjs/RCTree/helper.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import React, { MouseEvent } from 'react';
|
|
2
|
+
import { AddNodePosition, DropPositionInfo, InternalRCNode, RCTreeNode } from './types';
|
|
2
3
|
export declare const defaultIsLeaf: ({ children }: {
|
|
3
4
|
children?: unknown[];
|
|
4
5
|
}) => boolean;
|
|
@@ -7,7 +8,25 @@ type ConvertTreeDataProps<T> = {
|
|
|
7
8
|
parentPath?: number[];
|
|
8
9
|
isLeaf: (node: T) => boolean;
|
|
9
10
|
};
|
|
10
|
-
export declare const convertTreeData: ({ data,
|
|
11
|
+
export declare const convertTreeData: ({ data, isLeaf }: ConvertTreeDataProps<RCTreeNode>) => InternalRCNode[];
|
|
12
|
+
export declare const getNodeAtPosition: (treeData: RCTreeNode[], pos: string) => any;
|
|
13
|
+
export declare const getParentPos: (pos: string) => string;
|
|
11
14
|
export declare const changeNodeAtPosition: (treeData: RCTreeNode[], pos: string, changeNode: (node: RCTreeNode) => RCTreeNode) => any;
|
|
15
|
+
export declare const removeNodeAtPosition: (treeData: RCTreeNode[], pos: string) => any;
|
|
16
|
+
export declare const insertNodeAtPosition: (treeData: RCTreeNode[], pos: string, dropPosition: number, node: RCTreeNode) => any;
|
|
17
|
+
export declare const moveNode: (treeData: RCTreeNode[], dragNode: RCTreeNode, dragNodePos: string, dropPositionInfo: DropPositionInfo) => any;
|
|
12
18
|
export declare const getExpandedKeys: (nodes?: RCTreeNode[]) => any;
|
|
19
|
+
export declare const slideNodePos: (dropNodePos: string, nodePos: string, backward?: boolean) => string;
|
|
20
|
+
export declare const getDropNodePosition: (event: React.DragEvent<HTMLDivElement>, dropNode: InternalRCNode, prevDropPositionInfo: any) => {
|
|
21
|
+
pos: string;
|
|
22
|
+
dropPosition: AddNodePosition;
|
|
23
|
+
addToEnd?: undefined;
|
|
24
|
+
} | {
|
|
25
|
+
pos: string;
|
|
26
|
+
dropPosition: AddNodePosition;
|
|
27
|
+
addToEnd: boolean;
|
|
28
|
+
};
|
|
29
|
+
export declare const isDropIndicatorNode: (node: InternalRCNode) => boolean;
|
|
30
|
+
export declare const gatherNodeKeys: (node: InternalRCNode) => string[];
|
|
31
|
+
export declare const preventNodeDragging: (event: MouseEvent<HTMLDivElement>) => void;
|
|
13
32
|
export {};
|
package/cjs/RCTree/helper.js
CHANGED
|
@@ -20,32 +20,83 @@ 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.getExpandedKeys = exports.changeNodeAtPosition = exports.convertTreeData = exports.defaultIsLeaf = void 0;
|
|
23
|
+
exports.preventNodeDragging = 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 = void 0;
|
|
24
24
|
var ramda_1 = require("ramda");
|
|
25
|
+
var types_1 = require("./types");
|
|
26
|
+
var DEPTH_LEVEL_INDENT = 16;
|
|
27
|
+
var DROP_INDICATOR_NODE_KEY = '-1';
|
|
25
28
|
var defaultIsLeaf = function (_a) {
|
|
26
29
|
var _b = _a.children, children = _b === void 0 ? [] : _b;
|
|
27
30
|
return !children.length;
|
|
28
31
|
};
|
|
29
32
|
exports.defaultIsLeaf = defaultIsLeaf;
|
|
30
33
|
var convertTreeData = function (_a) {
|
|
31
|
-
var data = _a.data,
|
|
34
|
+
var data = _a.data, isLeaf = _a.isLeaf;
|
|
32
35
|
return data.map(function (item) {
|
|
33
36
|
var _a;
|
|
34
|
-
|
|
35
|
-
return __assign({ key: String(item.nodeId), title: (_a = item.title) !== null && _a !== void 0 ? _a : '', value: __assign(__assign({}, item), { path: path }), isLeaf: isLeaf(item) }, (item.children &&
|
|
37
|
+
return __assign({ key: String(item.nodeId), title: (_a = item.title) !== null && _a !== void 0 ? _a : '', value: __assign({}, item), isLeaf: isLeaf(item) }, (item.children &&
|
|
36
38
|
item.children.length && {
|
|
37
|
-
children: (0, exports.convertTreeData)({ data: item.children,
|
|
39
|
+
children: (0, exports.convertTreeData)({ data: item.children, isLeaf: isLeaf })
|
|
38
40
|
}));
|
|
39
41
|
});
|
|
40
42
|
};
|
|
41
43
|
exports.convertTreeData = convertTreeData;
|
|
42
44
|
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'));
|
|
45
|
+
var getNodeAtPosition = function (treeData, pos) {
|
|
46
|
+
var nodePath = getPathFromPosition(pos);
|
|
47
|
+
return nodePath.length > 0 ? (0, ramda_1.path)(nodePath, treeData) : null;
|
|
48
|
+
};
|
|
49
|
+
exports.getNodeAtPosition = getNodeAtPosition;
|
|
50
|
+
var getParentPos = function (pos) {
|
|
51
|
+
return pos.split('-').slice(0, -1).join('-');
|
|
52
|
+
};
|
|
53
|
+
exports.getParentPos = getParentPos;
|
|
43
54
|
var changeNodeAtPosition = function (treeData, pos, changeNode) {
|
|
44
55
|
var nodePath = getPathFromPosition(pos);
|
|
45
56
|
var node = (0, ramda_1.path)(nodePath, treeData);
|
|
46
|
-
return node ? (0, ramda_1.assocPath)(nodePath, changeNode(node), treeData) :
|
|
57
|
+
return node ? (0, ramda_1.assocPath)(nodePath, changeNode(node), treeData) : treeData;
|
|
47
58
|
};
|
|
48
59
|
exports.changeNodeAtPosition = changeNodeAtPosition;
|
|
60
|
+
var removeNodeAtPosition = function (treeData, pos) {
|
|
61
|
+
var nodePath = getPathFromPosition(pos);
|
|
62
|
+
var childrenPath = nodePath.slice(0, -1);
|
|
63
|
+
var nodeIndex = Number(nodePath[nodePath.length - 1]);
|
|
64
|
+
if (childrenPath.length > 0) {
|
|
65
|
+
var children = (0, ramda_1.path)(childrenPath)(treeData);
|
|
66
|
+
var newChildren = (0, ramda_1.remove)(nodeIndex, 1, children);
|
|
67
|
+
return (0, ramda_1.assocPath)(childrenPath, newChildren, treeData);
|
|
68
|
+
}
|
|
69
|
+
return (0, ramda_1.remove)(nodeIndex, 1, treeData);
|
|
70
|
+
};
|
|
71
|
+
exports.removeNodeAtPosition = removeNodeAtPosition;
|
|
72
|
+
var insertNodeAtPosition = function (treeData, pos, dropPosition, node) {
|
|
73
|
+
var nodePath = getPathFromPosition(pos);
|
|
74
|
+
var childrenPath = nodePath.slice(0, -1);
|
|
75
|
+
var nodeIndex = Number(nodePath[nodePath.length - 1]);
|
|
76
|
+
var newNodeIndex = dropPosition === types_1.AddNodePosition.Top ? nodeIndex : nodeIndex + 1;
|
|
77
|
+
if (childrenPath.length > 0) {
|
|
78
|
+
var children = (0, ramda_1.path)(childrenPath, treeData);
|
|
79
|
+
if (!children)
|
|
80
|
+
return treeData;
|
|
81
|
+
var newChildren = (0, ramda_1.insert)(newNodeIndex, node, children);
|
|
82
|
+
return (0, ramda_1.assocPath)(childrenPath, newChildren, treeData);
|
|
83
|
+
}
|
|
84
|
+
return (0, ramda_1.insert)(newNodeIndex, node, treeData);
|
|
85
|
+
};
|
|
86
|
+
exports.insertNodeAtPosition = insertNodeAtPosition;
|
|
87
|
+
var moveNode = function (treeData, dragNode, dragNodePos, dropPositionInfo) {
|
|
88
|
+
var pos = dropPositionInfo.pos, dropPosition = dropPositionInfo.dropPosition, _a = dropPositionInfo.addToEnd, addToEnd = _a === void 0 ? false : _a;
|
|
89
|
+
var removeNode = function (treeData) { return (0, exports.removeNodeAtPosition)(treeData, dragNodePos); };
|
|
90
|
+
var addNode = function (treeData) {
|
|
91
|
+
return dropPosition === types_1.AddNodePosition.AsChild
|
|
92
|
+
? (0, exports.changeNodeAtPosition)(treeData, pos, function (node) {
|
|
93
|
+
return (0, ramda_1.pipe)((0, ramda_1.ifElse)((0, ramda_1.always)(addToEnd), (0, ramda_1.assoc)('children', __spreadArray(__spreadArray([], (node.children || []), true), [dragNode], false)), (0, ramda_1.assoc)('children', __spreadArray([dragNode], (node.children || []), true))), (0, ramda_1.assoc)('expanded', true))(node);
|
|
94
|
+
})
|
|
95
|
+
: (0, exports.insertNodeAtPosition)(treeData, pos, dropPosition, dragNode);
|
|
96
|
+
};
|
|
97
|
+
return (0, ramda_1.pipe)(removeNode, addNode)(treeData);
|
|
98
|
+
};
|
|
99
|
+
exports.moveNode = moveNode;
|
|
49
100
|
var getExpandedKeys = function (nodes) {
|
|
50
101
|
if (nodes === void 0) { nodes = []; }
|
|
51
102
|
return nodes.reduce(function (expandedKeys, node) {
|
|
@@ -53,3 +104,107 @@ var getExpandedKeys = function (nodes) {
|
|
|
53
104
|
}, []);
|
|
54
105
|
};
|
|
55
106
|
exports.getExpandedKeys = getExpandedKeys;
|
|
107
|
+
var slideNodePos = function (dropNodePos, nodePos, backward) {
|
|
108
|
+
if (backward === void 0) { backward = false; }
|
|
109
|
+
var nodePosition = nodePos.split('-');
|
|
110
|
+
var nodeDepth = nodePosition.length - 1;
|
|
111
|
+
var nodeParentPosition = nodePosition.slice(0, -1);
|
|
112
|
+
var nodeParentPos = nodeParentPosition.join('-');
|
|
113
|
+
var dropNodePosition = dropNodePos.split('-');
|
|
114
|
+
if (dropNodePos.startsWith(nodeParentPos)) {
|
|
115
|
+
var nodeLastIndex = Number((0, ramda_1.last)(nodePosition));
|
|
116
|
+
var dropNodeIndexToChange = Number(dropNodePosition[nodeDepth]);
|
|
117
|
+
if (backward) {
|
|
118
|
+
if (nodeLastIndex < dropNodeIndexToChange) {
|
|
119
|
+
return dropNodePos.replace([nodeParentPos, dropNodeIndexToChange].join('-'), [nodeParentPos, dropNodeIndexToChange - 1].join('-'));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
if (nodeLastIndex <= dropNodeIndexToChange) {
|
|
124
|
+
return dropNodePos.replace([nodeParentPos, dropNodeIndexToChange].join('-'), [nodeParentPos, dropNodeIndexToChange + 1].join('-'));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return dropNodePos;
|
|
129
|
+
};
|
|
130
|
+
exports.slideNodePos = slideNodePos;
|
|
131
|
+
var getNodeTopElement = function (target) {
|
|
132
|
+
return target.closest('.rc-tree-treenode');
|
|
133
|
+
};
|
|
134
|
+
var calcAddNodePosition = function (event) {
|
|
135
|
+
var nodeElement = getNodeTopElement(event.target);
|
|
136
|
+
if (!nodeElement)
|
|
137
|
+
return null;
|
|
138
|
+
var offsetY = event.clientY - nodeElement.getBoundingClientRect().top;
|
|
139
|
+
var treeNodeHeight = nodeElement.offsetHeight;
|
|
140
|
+
return offsetY < treeNodeHeight / 2 ? types_1.AddNodePosition.Top : types_1.AddNodePosition.Bottom;
|
|
141
|
+
};
|
|
142
|
+
var findDepthPosition = function (event, dropNode) {
|
|
143
|
+
var nodeElement = getNodeTopElement(event.target);
|
|
144
|
+
if (!nodeElement)
|
|
145
|
+
return null;
|
|
146
|
+
var dropNodeLevel = dropNode.pos.split('-').length - 1;
|
|
147
|
+
var leftPadding = parseFloat(window.getComputedStyle(nodeElement).paddingLeft) || 0;
|
|
148
|
+
var offsetX = event.clientX - nodeElement.getBoundingClientRect().left - leftPadding;
|
|
149
|
+
return Math.min(dropNodeLevel + 1, Math.max(Math.round(offsetX / DEPTH_LEVEL_INDENT), dropNodeLevel));
|
|
150
|
+
};
|
|
151
|
+
var changePosLastIndex = function (pos, change) {
|
|
152
|
+
var position = pos.split('-');
|
|
153
|
+
var lastIndex = Number((0, ramda_1.last)(position));
|
|
154
|
+
return position
|
|
155
|
+
.slice(0, -1)
|
|
156
|
+
.concat(String(change(lastIndex)))
|
|
157
|
+
.join('-');
|
|
158
|
+
};
|
|
159
|
+
var getCurrentDropNodePos = function (dropPositionInfo) {
|
|
160
|
+
switch (dropPositionInfo.dropPosition) {
|
|
161
|
+
case types_1.AddNodePosition.Top:
|
|
162
|
+
return dropPositionInfo.pos;
|
|
163
|
+
case types_1.AddNodePosition.Bottom:
|
|
164
|
+
return changePosLastIndex(dropPositionInfo.pos, function (index) { return index + 1; });
|
|
165
|
+
case types_1.AddNodePosition.AsChild:
|
|
166
|
+
return "".concat(dropPositionInfo.pos, "-0");
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
var getDropNodePosition = function (event, dropNode, prevDropPositionInfo) {
|
|
170
|
+
var addNodePosition = calcAddNodePosition(event);
|
|
171
|
+
var depthPosition = findDepthPosition(event, dropNode);
|
|
172
|
+
if (addNodePosition === null || depthPosition === null)
|
|
173
|
+
return null;
|
|
174
|
+
var pos = !prevDropPositionInfo || prevDropPositionInfo.addToEnd
|
|
175
|
+
? dropNode.pos
|
|
176
|
+
: (0, exports.slideNodePos)(dropNode.pos, getCurrentDropNodePos(prevDropPositionInfo), true);
|
|
177
|
+
var dropNodeDepth = pos.split('-').length - 1;
|
|
178
|
+
var position = pos.split('-');
|
|
179
|
+
var lastIndex = Number((0, ramda_1.last)(position));
|
|
180
|
+
if (depthPosition === dropNodeDepth) {
|
|
181
|
+
return { pos: pos, dropPosition: addNodePosition };
|
|
182
|
+
}
|
|
183
|
+
if (addNodePosition === types_1.AddNodePosition.Top) {
|
|
184
|
+
if (lastIndex > 0) {
|
|
185
|
+
return {
|
|
186
|
+
pos: position
|
|
187
|
+
.slice(0, -1)
|
|
188
|
+
.concat(String(lastIndex - 1))
|
|
189
|
+
.join('-'),
|
|
190
|
+
dropPosition: types_1.AddNodePosition.AsChild,
|
|
191
|
+
addToEnd: true
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
if (position.length > 2)
|
|
195
|
+
return { pos: position.slice(0, -1).join('-'), dropPosition: types_1.AddNodePosition.AsChild, addToEnd: false };
|
|
196
|
+
return { pos: pos, dropPosition: types_1.AddNodePosition.Top };
|
|
197
|
+
}
|
|
198
|
+
return { pos: pos, dropPosition: types_1.AddNodePosition.AsChild };
|
|
199
|
+
};
|
|
200
|
+
exports.getDropNodePosition = getDropNodePosition;
|
|
201
|
+
var isDropIndicatorNode = function (node) { return (node === null || node === void 0 ? void 0 : node.key) === DROP_INDICATOR_NODE_KEY; };
|
|
202
|
+
exports.isDropIndicatorNode = isDropIndicatorNode;
|
|
203
|
+
var gatherNodeKeys = function (node) {
|
|
204
|
+
return node ? __spreadArray([node.key], (node.children ? node.children.flatMap(exports.gatherNodeKeys) : []), true) : [];
|
|
205
|
+
};
|
|
206
|
+
exports.gatherNodeKeys = gatherNodeKeys;
|
|
207
|
+
var preventNodeDragging = function (event) {
|
|
208
|
+
event.preventDefault();
|
|
209
|
+
};
|
|
210
|
+
exports.preventNodeDragging = preventNodeDragging;
|
package/cjs/RCTree/styles.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"expandButton" | "collapseButton" | "switcherButtonWrapper" | "switcherButton" | "treeWrapper" | "@global">;
|
|
1
|
+
export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"expandButton" | "collapseButton" | "dropIndicator" | "switcherButtonWrapper" | "switcherButton" | "treeWrapper" | "dropNotAllowed" | "draggedChildrenNode" | "dragHandle" | "dragHandleDragging" | "@global">;
|
package/cjs/RCTree/styles.js
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.useStyles = void 0;
|
|
4
4
|
var styles_1 = require("@mui/styles");
|
|
5
|
-
exports.useStyles = (0, styles_1.makeStyles)(function () { return ({
|
|
5
|
+
exports.useStyles = (0, styles_1.makeStyles)(function (theme) { return ({
|
|
6
6
|
switcherButtonWrapper: {
|
|
7
|
-
paddingTop: '
|
|
8
|
-
paddingLeft: '
|
|
9
|
-
width: '
|
|
10
|
-
height: '
|
|
7
|
+
paddingTop: '11px',
|
|
8
|
+
paddingLeft: '4px',
|
|
9
|
+
width: '12px',
|
|
10
|
+
height: '12px',
|
|
11
11
|
cursor: 'pointer'
|
|
12
12
|
},
|
|
13
13
|
switcherButton: {
|
|
@@ -27,6 +27,39 @@ exports.useStyles = (0, styles_1.makeStyles)(function () { return ({
|
|
|
27
27
|
treeWrapper: {
|
|
28
28
|
border: 'none'
|
|
29
29
|
},
|
|
30
|
+
dropIndicator: {
|
|
31
|
+
'&:before': {
|
|
32
|
+
content: '""',
|
|
33
|
+
backgroundColor: '#e0eef9',
|
|
34
|
+
border: '1px dashed #2184D4',
|
|
35
|
+
position: 'absolute',
|
|
36
|
+
top: 0,
|
|
37
|
+
right: '23px',
|
|
38
|
+
bottom: 0,
|
|
39
|
+
left: '-22px',
|
|
40
|
+
zIndex: 1
|
|
41
|
+
},
|
|
42
|
+
'&>div': {
|
|
43
|
+
opacity: 0
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
dropNotAllowed: {
|
|
47
|
+
'&:before': {
|
|
48
|
+
backgroundColor: '#ffedee',
|
|
49
|
+
borderColor: '#FF6673'
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
draggedChildrenNode: {
|
|
53
|
+
opacity: 0.5
|
|
54
|
+
},
|
|
55
|
+
dragHandle: {
|
|
56
|
+
cursor: 'move',
|
|
57
|
+
color: theme.palette.text.secondary,
|
|
58
|
+
width: '16px'
|
|
59
|
+
},
|
|
60
|
+
dragHandleDragging: {
|
|
61
|
+
visibility: 'hidden'
|
|
62
|
+
},
|
|
30
63
|
/* rc-tree/assets/index.css */
|
|
31
64
|
'@global': {
|
|
32
65
|
'.rc-tree': {
|
|
@@ -52,12 +85,6 @@ exports.useStyles = (0, styles_1.makeStyles)(function () { return ({
|
|
|
52
85
|
boxShadow: 'inset 0 0 0 2px red',
|
|
53
86
|
content: "''"
|
|
54
87
|
},
|
|
55
|
-
'.rc-tree .rc-tree-treenode.drop-container ~ .rc-tree-treenode': {
|
|
56
|
-
borderLeft: '2px solid chocolate'
|
|
57
|
-
},
|
|
58
|
-
'.rc-tree .rc-tree-treenode.drop-target': {
|
|
59
|
-
backgroundColor: 'yellowgreen'
|
|
60
|
-
},
|
|
61
88
|
'.rc-tree .rc-tree-treenode.drop-target ~ .rc-tree-treenode': {
|
|
62
89
|
borderLeft: 'none'
|
|
63
90
|
},
|
|
@@ -155,11 +182,6 @@ exports.useStyles = (0, styles_1.makeStyles)(function () { return ({
|
|
|
155
182
|
'.rc-tree-treenode-active': {
|
|
156
183
|
background: 'rgba(0, 0, 0, 0.1)'
|
|
157
184
|
},
|
|
158
|
-
'.rc-tree-node-selected': {
|
|
159
|
-
backgroundColor: '#ffe6b0',
|
|
160
|
-
boxShadow: '0 0 0 1px #ffb951',
|
|
161
|
-
opacity: 0.8
|
|
162
|
-
},
|
|
163
185
|
'.rc-tree-icon__open': {
|
|
164
186
|
marginRight: '2px',
|
|
165
187
|
verticalAlign: 'top',
|
|
@@ -188,11 +210,6 @@ exports.useStyles = (0, styles_1.makeStyles)(function () { return ({
|
|
|
188
210
|
display: 'inline-block',
|
|
189
211
|
width: '16px'
|
|
190
212
|
},
|
|
191
|
-
'.rc-tree-draggable-icon': {
|
|
192
|
-
display: 'inline-flex',
|
|
193
|
-
justifyContent: 'center',
|
|
194
|
-
width: '16px'
|
|
195
|
-
},
|
|
196
213
|
//Custom styles
|
|
197
214
|
'.rc-tree .rc-tree-treenode .rc-tree-node-content-wrapper': {
|
|
198
215
|
position: 'relative',
|
|
@@ -203,8 +220,8 @@ exports.useStyles = (0, styles_1.makeStyles)(function () { return ({
|
|
|
203
220
|
verticalAlign: 'top',
|
|
204
221
|
cursor: 'pointer',
|
|
205
222
|
height: 'auto',
|
|
206
|
-
|
|
207
|
-
|
|
223
|
+
paddingRight: '11px',
|
|
224
|
+
flexGrow: 1
|
|
208
225
|
},
|
|
209
226
|
'.rc-tree .rc-tree-treenode': {
|
|
210
227
|
margin: 0,
|
|
@@ -225,6 +242,18 @@ exports.useStyles = (0, styles_1.makeStyles)(function () { return ({
|
|
|
225
242
|
'.rc-tree-title': {
|
|
226
243
|
display: 'inline-block',
|
|
227
244
|
width: '100%'
|
|
245
|
+
},
|
|
246
|
+
'.rc-tree-draggable-icon': {
|
|
247
|
+
display: 'inline-flex',
|
|
248
|
+
justifyContent: 'center',
|
|
249
|
+
width: '16px',
|
|
250
|
+
visibility: 'hidden'
|
|
251
|
+
},
|
|
252
|
+
'.rc-tree-treenode-draggable:hover .rc-tree-draggable-icon': {
|
|
253
|
+
visibility: 'visible'
|
|
254
|
+
},
|
|
255
|
+
'.rc-tree-switcher-noop': {
|
|
256
|
+
width: '16px'
|
|
228
257
|
}
|
|
229
258
|
}
|
|
230
259
|
}); });
|
package/cjs/RCTree/types.d.ts
CHANGED
|
@@ -7,7 +7,18 @@ export type RCTreeNode = {
|
|
|
7
7
|
};
|
|
8
8
|
export type InternalRCNode = {
|
|
9
9
|
value: RCTreeNode;
|
|
10
|
+
pos?: string;
|
|
10
11
|
} & FieldDataNode<{
|
|
11
12
|
key: string;
|
|
12
13
|
title?: string;
|
|
13
14
|
}>;
|
|
15
|
+
export type DropPositionInfo = {
|
|
16
|
+
pos: string;
|
|
17
|
+
dropPosition: number;
|
|
18
|
+
addToEnd?: boolean;
|
|
19
|
+
};
|
|
20
|
+
export declare enum AddNodePosition {
|
|
21
|
+
Bottom = 1,
|
|
22
|
+
Top = -1,
|
|
23
|
+
AsChild = 0
|
|
24
|
+
}
|
package/cjs/RCTree/types.js
CHANGED
|
@@ -1,2 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AddNodePosition = void 0;
|
|
4
|
+
var AddNodePosition;
|
|
5
|
+
(function (AddNodePosition) {
|
|
6
|
+
AddNodePosition[AddNodePosition["Bottom"] = 1] = "Bottom";
|
|
7
|
+
AddNodePosition[AddNodePosition["Top"] = -1] = "Top";
|
|
8
|
+
AddNodePosition[AddNodePosition["AsChild"] = 0] = "AsChild";
|
|
9
|
+
})(AddNodePosition || (exports.AddNodePosition = AddNodePosition = {}));
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DragEvent } from 'react';
|
|
2
|
+
import { InternalRCNode } from './types';
|
|
3
|
+
export declare const useDelayedDragEventCall: (callback: (params: {
|
|
4
|
+
event: DragEvent<HTMLDivElement>;
|
|
5
|
+
node: InternalRCNode;
|
|
6
|
+
}) => void, delay?: number) => ({ event, node }: any) => void;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useDelayedDragEventCall = void 0;
|
|
4
|
+
var react_1 = require("react");
|
|
5
|
+
var ramda_1 = require("ramda");
|
|
6
|
+
var DELAY_TIMEOUT = 50;
|
|
7
|
+
var useDelayedDragEventCall = function (callback, delay) {
|
|
8
|
+
if (delay === void 0) { delay = DELAY_TIMEOUT; }
|
|
9
|
+
var prevMousePosition = (0, react_1.useRef)(null);
|
|
10
|
+
var lastTimeChanged = (0, react_1.useRef)(0);
|
|
11
|
+
return (0, react_1.useCallback)(function (_a) {
|
|
12
|
+
var event = _a.event, node = _a.node;
|
|
13
|
+
var now = Date.now();
|
|
14
|
+
var newMousePosition = { x: event.clientX, y: event.clientY };
|
|
15
|
+
if (!(0, ramda_1.equals)(prevMousePosition === null || prevMousePosition === void 0 ? void 0 : prevMousePosition.current, newMousePosition)) {
|
|
16
|
+
lastTimeChanged.current = now;
|
|
17
|
+
}
|
|
18
|
+
var waitedTime = now - (lastTimeChanged === null || lastTimeChanged === void 0 ? void 0 : lastTimeChanged.current);
|
|
19
|
+
if (waitedTime > delay) {
|
|
20
|
+
lastTimeChanged.current = now;
|
|
21
|
+
callback({ event: event, node: node });
|
|
22
|
+
}
|
|
23
|
+
prevMousePosition.current = newMousePosition;
|
|
24
|
+
}, [callback, delay]);
|
|
25
|
+
};
|
|
26
|
+
exports.useDelayedDragEventCall = useDelayedDragEventCall;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { DragEvent } from 'react';
|
|
2
|
+
import { InternalRCNode, RCTreeNode } from './types';
|
|
3
|
+
type Props = {
|
|
4
|
+
treeData: RCTreeNode[];
|
|
5
|
+
containerRef: React.RefObject<HTMLDivElement>;
|
|
6
|
+
expandNode: (pos: string, expanded: boolean) => void;
|
|
7
|
+
onLoadChildren?: (treeNode: RCTreeNode) => Promise<void>;
|
|
8
|
+
onChange?: (node: RCTreeNode[]) => void;
|
|
9
|
+
onDrop?: (treeData: RCTreeNode[], dragNode: RCTreeNode, parentNode: RCTreeNode) => void;
|
|
10
|
+
canDrop?: (params: {
|
|
11
|
+
nextParent: RCTreeNode;
|
|
12
|
+
node: RCTreeNode;
|
|
13
|
+
}) => boolean;
|
|
14
|
+
canDrag?: (params: {
|
|
15
|
+
node: RCTreeNode;
|
|
16
|
+
}) => boolean;
|
|
17
|
+
};
|
|
18
|
+
export declare const useDnd: ({ treeData, containerRef, expandNode, onLoadChildren, onChange, onDrop: onDropProp, canDrop, canDrag }: Props) => {
|
|
19
|
+
treeProps: {
|
|
20
|
+
onDragStart: ({ node }: {
|
|
21
|
+
node: InternalRCNode;
|
|
22
|
+
}) => void;
|
|
23
|
+
onDragOver: ({ event, node }: {
|
|
24
|
+
event: DragEvent<HTMLDivElement>;
|
|
25
|
+
node: InternalRCNode;
|
|
26
|
+
}) => void;
|
|
27
|
+
onDragLeave: ({ event, node }: {
|
|
28
|
+
event: any;
|
|
29
|
+
node: any;
|
|
30
|
+
}) => void;
|
|
31
|
+
onDrop: () => void;
|
|
32
|
+
dropIndicatorRender: () => any;
|
|
33
|
+
allowDrop: ({ dragNode, dropNode }: {
|
|
34
|
+
dragNode: InternalRCNode;
|
|
35
|
+
dropNode: InternalRCNode;
|
|
36
|
+
}) => boolean;
|
|
37
|
+
};
|
|
38
|
+
nodeDraggable: (node: InternalRCNode) => boolean;
|
|
39
|
+
dropNode: InternalRCNode;
|
|
40
|
+
dragNode: InternalRCNode;
|
|
41
|
+
dropPositionInfo: {
|
|
42
|
+
pos: string;
|
|
43
|
+
dropPosition: number;
|
|
44
|
+
addToEnd?: boolean;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
export {};
|