@reltio/components 1.4.2000 → 1.4.2001

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.
Files changed (39) hide show
  1. package/cjs/RCTree/RCTree.d.ts +17 -14
  2. package/cjs/RCTree/RCTree.js +24 -8
  3. package/cjs/RCTree/RCTreeLevelLines.d.ts +4 -0
  4. package/cjs/RCTree/RCTreeLevelLines.js +32 -0
  5. package/cjs/RCTree/RCTreeSwitchRenderer.d.ts +7 -0
  6. package/cjs/RCTree/{DefaultSwitchRenderer.js → RCTreeSwitchRenderer.js} +3 -3
  7. package/cjs/RCTree/helper.d.ts +10 -5
  8. package/cjs/RCTree/helper.js +49 -3
  9. package/cjs/RCTree/index.d.ts +2 -0
  10. package/cjs/RCTree/index.js +5 -1
  11. package/cjs/RCTree/levelLinesStyles.d.ts +5 -0
  12. package/cjs/RCTree/levelLinesStyles.js +53 -0
  13. package/cjs/RCTree/styles.d.ts +1 -1
  14. package/cjs/RCTree/styles.js +63 -30
  15. package/cjs/RCTree/types.d.ts +3 -2
  16. package/cjs/RCTree/useDnd.d.ts +16 -16
  17. package/cjs/index.d.ts +1 -1
  18. package/cjs/index.js +6 -4
  19. package/esm/RCTree/RCTree.d.ts +17 -14
  20. package/esm/RCTree/RCTree.js +26 -10
  21. package/esm/RCTree/RCTreeLevelLines.d.ts +4 -0
  22. package/esm/RCTree/RCTreeLevelLines.js +25 -0
  23. package/esm/RCTree/RCTreeSwitchRenderer.d.ts +7 -0
  24. package/esm/RCTree/{DefaultSwitchRenderer.js → RCTreeSwitchRenderer.js} +1 -1
  25. package/esm/RCTree/helper.d.ts +10 -5
  26. package/esm/RCTree/helper.js +44 -1
  27. package/esm/RCTree/index.d.ts +2 -0
  28. package/esm/RCTree/index.js +2 -0
  29. package/esm/RCTree/levelLinesStyles.d.ts +5 -0
  30. package/esm/RCTree/levelLinesStyles.js +50 -0
  31. package/esm/RCTree/styles.d.ts +1 -1
  32. package/esm/RCTree/styles.js +63 -30
  33. package/esm/RCTree/types.d.ts +3 -2
  34. package/esm/RCTree/useDnd.d.ts +16 -16
  35. package/esm/index.d.ts +1 -1
  36. package/esm/index.js +1 -1
  37. package/package.json +1 -1
  38. package/cjs/RCTree/DefaultSwitchRenderer.d.ts +0 -7
  39. package/esm/RCTree/DefaultSwitchRenderer.d.ts +0 -7
@@ -1,27 +1,30 @@
1
1
  import { TreeNodeProps } from 'rc-tree';
2
2
  import React from 'react';
3
- import { RCTreeNode } from './types';
4
- type Props = {
5
- treeData: RCTreeNode[];
6
- renderNode?: (node: RCTreeNode & Record<string, unknown>) => React.ReactElement;
3
+ import { InternalRCNode, RCTreeNode } from './types';
4
+ type Props<Node extends RCTreeNode> = {
5
+ treeData: Node[];
6
+ renderNode?: (node: Node) => React.ReactElement;
7
7
  isVirtualized?: boolean;
8
8
  canDrag?: (params: {
9
- node: RCTreeNode;
9
+ node: Node;
10
10
  }) => boolean;
11
11
  canDrop?: (params: {
12
- nextParent: RCTreeNode;
13
- node: RCTreeNode;
12
+ nextParent: Node;
13
+ node: Node;
14
14
  }) => boolean;
15
- onDrop?: (treeData: RCTreeNode[], dragNode: RCTreeNode, parentNode: RCTreeNode) => void;
16
- onLoadChildren?: (treeNode: RCTreeNode) => Promise<void>;
17
- height?: number;
15
+ onDrop?: (treeData: Node[], dragNode: Node, parentNode: Node) => void;
16
+ onLoadChildren?: (treeNode: Node) => Promise<void>;
18
17
  defaultExpandAll?: boolean;
19
- SwitchRenderer?: (props: any) => React.ReactElement;
18
+ SwitchRenderer?: (props: {
19
+ node: InternalRCNode<Node>;
20
+ }) => React.ReactElement;
21
+ LevelLinesRenderer?: (props: any) => React.ReactElement;
20
22
  className?: string;
21
23
  minItemHeight?: number;
22
24
  isLeaf?: (node: TreeNodeProps & Record<string, unknown>) => boolean;
23
- scrollToNode?: RCTreeNode;
24
- onChange?: (node: RCTreeNode[]) => void;
25
+ scrollToNode?: Node;
26
+ onChange?: (node: Node[]) => void;
27
+ height?: number;
25
28
  };
26
- export declare const RCTree: ({ treeData, isVirtualized, canDrag, canDrop, onDrop, onLoadChildren, height, defaultExpandAll, SwitchRenderer, className, renderNode, minItemHeight, isLeaf, scrollToNode, onChange }: Props) => React.JSX.Element;
29
+ export declare const RCTree: <Node extends RCTreeNode>({ treeData, isVirtualized, canDrag, canDrop, onDrop, onLoadChildren, defaultExpandAll, SwitchRenderer, LevelLinesRenderer, className, renderNode, minItemHeight, isLeaf, scrollToNode, onChange, height }: Props<Node>) => React.JSX.Element;
27
30
  export {};
@@ -43,24 +43,27 @@ var ramda_1 = require("ramda");
43
43
  var rc_tree_1 = __importDefault(require("rc-tree"));
44
44
  var react_1 = __importStar(require("react"));
45
45
  var DragIndicator_1 = __importDefault(require("@mui/icons-material/DragIndicator"));
46
- var DefaultSwitchRenderer_1 = require("./DefaultSwitchRenderer");
46
+ var react_resize_detector_1 = __importDefault(require("react-resize-detector"));
47
+ var RCTreeSwitchRenderer_1 = require("./RCTreeSwitchRenderer");
48
+ var RCTreeLevelLines_1 = require("./RCTreeLevelLines");
47
49
  var helper_1 = require("./helper");
48
50
  var useDnd_1 = require("./useDnd");
49
51
  var styles_1 = require("./styles");
50
52
  var MIN_ROW_HEIGHT = 28;
51
53
  var RCTree = function (_a) {
52
54
  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;
55
+ 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, _g = _a.defaultExpandAll, defaultExpandAll = _g === void 0 ? false : _g, _h = _a.SwitchRenderer, SwitchRenderer = _h === void 0 ? RCTreeSwitchRenderer_1.RCTreeSwitchRenderer : _h, _j = _a.LevelLinesRenderer, LevelLinesRenderer = _j === void 0 ? RCTreeLevelLines_1.RCTreeLevelLines : _j, className = _a.className, renderNode = _a.renderNode, _k = _a.minItemHeight, minItemHeight = _k === void 0 ? MIN_ROW_HEIGHT : _k, _l = _a.isLeaf, isLeaf = _l === void 0 ? helper_1.defaultIsLeaf : _l, scrollToNode = _a.scrollToNode, _m = _a.onChange, onChange = _m === void 0 ? ramda_1.identity : _m, height = _a.height;
54
56
  var styles = (0, styles_1.useStyles)();
55
57
  var treeRef = (0, react_1.useRef)(null);
56
58
  var containerRef = (0, react_1.useRef)(null);
59
+ var _o = (0, react_1.useState)({ width: 0, height: 0 }), containerSize = _o[0], setContainerSize = _o[1];
57
60
  var expandNode = (0, react_1.useCallback)(function (pos, expanded) {
58
61
  var changeNode = (0, ramda_1.assoc)('expanded', expanded);
59
62
  var newTreeData = (0, helper_1.changeNodeAtPosition)(treeData, pos, changeNode);
60
63
  if (newTreeData)
61
64
  onChange(newTreeData);
62
65
  }, [onChange, treeData]);
63
- var _m = (0, useDnd_1.useDnd)({
66
+ var _p = (0, useDnd_1.useDnd)({
64
67
  containerRef: containerRef,
65
68
  treeData: treeData,
66
69
  expandNode: expandNode,
@@ -69,7 +72,7 @@ var RCTree = function (_a) {
69
72
  onDrop: onDrop,
70
73
  canDrop: canDrop,
71
74
  canDrag: canDrag
72
- }), treeProps = _m.treeProps, nodeDraggable = _m.nodeDraggable, dropNode = _m.dropNode, dragNode = _m.dragNode, dropPositionInfo = _m.dropPositionInfo;
75
+ }), treeProps = _p.treeProps, nodeDraggable = _p.nodeDraggable, dropNode = _p.dropNode, dragNode = _p.dragNode, dropPositionInfo = _p.dropPositionInfo;
73
76
  (0, react_1.useEffect)(function () {
74
77
  if (treeRef.current && scrollToNode) {
75
78
  treeRef.current.scrollTo({ key: String(scrollToNode.nodeId) });
@@ -84,9 +87,14 @@ var RCTree = function (_a) {
84
87
  }
85
88
  return treeData;
86
89
  }, [treeData, dragNode, dropNode, dropPositionInfo]);
90
+ (0, react_1.useEffect)(function () {
91
+ if (isVirtualized)
92
+ (0, helper_1.setTreeWidth)(containerRef, diplayedTreeData);
93
+ }, [diplayedTreeData, isVirtualized]);
87
94
  var expandedKeys = (0, react_1.useMemo)(function () {
88
95
  return (0, helper_1.getExpandedKeys)(diplayedTreeData);
89
96
  }, [diplayedTreeData]);
97
+ var levelLines = (0, react_1.useMemo)(function () { return (0, helper_1.getLevelLinesData)(diplayedTreeData); }, [diplayedTreeData]);
90
98
  var internalTreeData = (0, react_1.useMemo)(function () { return (0, helper_1.convertTreeData)({ data: diplayedTreeData, isLeaf: isLeaf }); }, [isLeaf, diplayedTreeData]);
91
99
  var handleExpand = (0, react_1.useCallback)(function (_expandedKeys, data) {
92
100
  if (onChange && !dragNode) {
@@ -96,21 +104,29 @@ var RCTree = function (_a) {
96
104
  var renderSwitcherIcon = (0, react_1.useCallback)(function (node) { return react_1.default.createElement(SwitchRenderer, { node: node }); }, []);
97
105
  var titleRender = function (node) {
98
106
  var _a;
107
+ var _b, _c;
99
108
  var draggedNodes = (0, helper_1.gatherNodeKeys)(dragNode);
100
- return (react_1.default.createElement("div", { className: (0, classnames_1.default)((_a = {},
109
+ var width = (0, helper_1.calcNodeWidth)((_c = (_b = levelLines[node.key]) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.length, containerSize.width);
110
+ return (react_1.default.createElement("div", { className: (0, classnames_1.default)(styles.titleWrapper, (_a = {},
101
111
  _a[styles.dropIndicator] = (0, helper_1.isDropIndicatorNode)(node),
102
112
  _a[styles.dropNotAllowed] = dropNode && !(0, helper_1.isDropIndicatorNode)(dropNode),
103
113
  _a[styles.draggedChildrenNode] = draggedNodes.includes(node.key),
104
- _a)), onMouseDown: helper_1.preventNodeDragging }, renderNode ? renderNode(node.value) : node.title));
114
+ _a)), onMouseDown: helper_1.preventNodeDragging, style: { width: width } },
115
+ react_1.default.createElement(LevelLinesRenderer, { levelLine: levelLines[node.key] }),
116
+ renderNode ? renderNode(node.value) : node.title));
105
117
  };
106
118
  var dragHandle = (react_1.default.createElement("span", { className: (0, classnames_1.default)(styles.dragHandle, (_b = {},
107
119
  _b[styles.dragHandleDragging] = !!dragNode,
108
120
  _b)) },
109
121
  react_1.default.createElement(DragIndicator_1.default, null)));
110
- return diplayedTreeData ? (react_1.default.createElement("div", { ref: containerRef },
122
+ var onContainerResize = (0, react_1.useCallback)(function (width, height) {
123
+ setContainerSize({ width: width, height: height });
124
+ }, []);
125
+ return diplayedTreeData ? (react_1.default.createElement("div", { ref: containerRef, className: (0, classnames_1.default)(styles.treeContainer) },
126
+ react_1.default.createElement(react_resize_detector_1.default, { handleWidth: true, handleHeight: true, onResize: onContainerResize }),
111
127
  react_1.default.createElement(rc_tree_1.default, __assign({ draggable: {
112
128
  icon: dragHandle,
113
129
  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;
130
+ }, virtual: isVirtualized, itemHeight: minItemHeight, height: height || containerSize.height, onExpand: handleExpand, showIcon: false, switcherIcon: renderSwitcherIcon, defaultExpandAll: defaultExpandAll, expandedKeys: expandedKeys, 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;
115
131
  };
116
132
  exports.RCTree = RCTree;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ export declare const RCTreeLevelLines: ({ levelLine }: {
3
+ levelLine: [boolean[], boolean];
4
+ }) => React.JSX.Element;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RCTreeLevelLines = void 0;
7
+ var react_1 = __importDefault(require("react"));
8
+ var classnames_1 = __importDefault(require("classnames"));
9
+ var helper_1 = require("./helper");
10
+ var levelLinesStyles_1 = require("./levelLinesStyles");
11
+ var LevelLine = function (_a) {
12
+ var _b;
13
+ var _c = _a.needDrawLine, needDrawLine = _c === void 0 ? false : _c, _d = _a.isLastLevelLine, isLastLevelLine = _d === void 0 ? false : _d, _e = _a.drawHorizontalLine, drawHorizontalLine = _e === void 0 ? false : _e;
14
+ var styles = (0, levelLinesStyles_1.useStyles)({});
15
+ return (react_1.default.createElement("div", { className: (0, classnames_1.default)(styles.levelLine, (_b = {},
16
+ _b[styles.showLine] = needDrawLine,
17
+ _b[styles.lastLevelLine] = isLastLevelLine,
18
+ _b[styles.horizontalLine] = drawHorizontalLine,
19
+ _b)) }));
20
+ };
21
+ var RCTreeLevelLines = function (_a) {
22
+ var levelLine = _a.levelLine;
23
+ var _b = levelLine || [], _c = _b[0], needDrawLines = _c === void 0 ? [] : _c, _d = _b[1], isLast = _d === void 0 ? false : _d;
24
+ var level = needDrawLines.length + 2;
25
+ var styles = (0, levelLinesStyles_1.useStyles)({ level: level });
26
+ return (react_1.default.createElement("div", { className: styles.levelLines, style: { left: "-".concat(helper_1.DEPTH_LEVEL_INDENT * level, "px") } }, needDrawLines
27
+ .map(function (needDrawLine, index) {
28
+ return react_1.default.createElement(LevelLine, { key: index, needDrawLine: needDrawLine });
29
+ })
30
+ .concat(react_1.default.createElement(LevelLine, { key: level, needDrawLine: true, drawHorizontalLine: true, isLastLevelLine: isLast }))));
31
+ };
32
+ exports.RCTreeLevelLines = RCTreeLevelLines;
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { InternalRCNode } from './types';
3
+ type Props = {
4
+ node: InternalRCNode;
5
+ };
6
+ export declare const RCTreeSwitchRenderer: ({ node }: Props) => React.JSX.Element;
7
+ export {};
@@ -3,14 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.DefaultSwitchRenderer = void 0;
6
+ exports.RCTreeSwitchRenderer = void 0;
7
7
  var react_1 = __importDefault(require("react"));
8
8
  var classnames_1 = __importDefault(require("classnames"));
9
9
  var styles_1 = require("./styles");
10
- var DefaultSwitchRenderer = function (_a) {
10
+ var RCTreeSwitchRenderer = function (_a) {
11
11
  var node = _a.node;
12
12
  var styles = (0, styles_1.useStyles)();
13
13
  return !node.isLeaf ? (react_1.default.createElement("div", { className: styles.switcherButtonWrapper },
14
14
  react_1.default.createElement("div", { "aria-label": node.expanded ? 'Collapse' : 'Expand', className: (0, classnames_1.default)(styles.switcherButton, node.expanded ? styles.collapseButton : styles.expandButton) }))) : null;
15
15
  };
16
- exports.DefaultSwitchRenderer = DefaultSwitchRenderer;
16
+ exports.RCTreeSwitchRenderer = RCTreeSwitchRenderer;
@@ -1,17 +1,18 @@
1
1
  import React, { MouseEvent } from 'react';
2
2
  import { AddNodePosition, DropPositionInfo, InternalRCNode, RCTreeNode } from './types';
3
+ export declare const DEPTH_LEVEL_INDENT = 16;
3
4
  export declare const defaultIsLeaf: ({ children }: {
4
5
  children?: unknown[];
5
6
  }) => boolean;
6
- type ConvertTreeDataProps<T> = {
7
- data: T[];
7
+ type ConvertTreeDataProps<Node> = {
8
+ data: Node[];
8
9
  parentPath?: number[];
9
- isLeaf: (node: T) => boolean;
10
+ isLeaf: (node: Node) => boolean;
10
11
  };
11
- export declare const convertTreeData: ({ data, isLeaf }: ConvertTreeDataProps<RCTreeNode>) => InternalRCNode[];
12
+ export declare const convertTreeData: <Node extends RCTreeNode>({ data, isLeaf }: ConvertTreeDataProps<Node>) => InternalRCNode<Node>[];
12
13
  export declare const getNodeAtPosition: (treeData: RCTreeNode[], pos: string) => any;
13
14
  export declare const getParentPos: (pos: string) => string;
14
- export declare const changeNodeAtPosition: (treeData: RCTreeNode[], pos: string, changeNode: (node: RCTreeNode) => RCTreeNode) => any;
15
+ export declare const changeNodeAtPosition: <Node extends RCTreeNode>(treeData: Node[], pos: string, changeNode: (node: Node) => Node) => any;
15
16
  export declare const removeNodeAtPosition: (treeData: RCTreeNode[], pos: string) => any;
16
17
  export declare const insertNodeAtPosition: (treeData: RCTreeNode[], pos: string, dropPosition: number, node: RCTreeNode) => any;
17
18
  export declare const moveNode: (treeData: RCTreeNode[], dragNode: RCTreeNode, dragNodePos: string, dropPositionInfo: DropPositionInfo) => any;
@@ -29,4 +30,8 @@ export declare const getDropNodePosition: (event: React.DragEvent<HTMLDivElement
29
30
  export declare const isDropIndicatorNode: (node: InternalRCNode) => boolean;
30
31
  export declare const gatherNodeKeys: (node: InternalRCNode) => string[];
31
32
  export declare const preventNodeDragging: (event: MouseEvent<HTMLDivElement>) => void;
33
+ type LevelLinesData = Record<string, [boolean[], boolean]>;
34
+ export declare const getLevelLinesData: (treeData: RCTreeNode[]) => LevelLinesData;
35
+ export declare const setTreeWidth: (container: React.RefObject<HTMLDivElement>, data: RCTreeNode[]) => void;
36
+ export declare const calcNodeWidth: (depth: number, containerWidth: number) => number;
32
37
  export {};
@@ -20,11 +20,14 @@ 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.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;
23
+ exports.calcNodeWidth = exports.setTreeWidth = exports.getLevelLinesData = 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 = exports.DEPTH_LEVEL_INDENT = void 0;
24
24
  var ramda_1 = require("ramda");
25
25
  var types_1 = require("./types");
26
- var DEPTH_LEVEL_INDENT = 16;
26
+ exports.DEPTH_LEVEL_INDENT = 16;
27
27
  var DROP_INDICATOR_NODE_KEY = '-1';
28
+ var CONTAINER_PADDINGS = 29;
29
+ var NODE_TITLE_MAX_WIDTH = 204;
30
+ var INITIAL_NODE_DEPTH = 2;
28
31
  var defaultIsLeaf = function (_a) {
29
32
  var _b = _a.children, children = _b === void 0 ? [] : _b;
30
33
  return !children.length;
@@ -146,7 +149,7 @@ var findDepthPosition = function (event, dropNode) {
146
149
  var dropNodeLevel = dropNode.pos.split('-').length - 1;
147
150
  var leftPadding = parseFloat(window.getComputedStyle(nodeElement).paddingLeft) || 0;
148
151
  var offsetX = event.clientX - nodeElement.getBoundingClientRect().left - leftPadding;
149
- return Math.min(dropNodeLevel + 1, Math.max(Math.round(offsetX / DEPTH_LEVEL_INDENT), dropNodeLevel));
152
+ return Math.min(dropNodeLevel + 1, Math.max(Math.round(offsetX / exports.DEPTH_LEVEL_INDENT), dropNodeLevel));
150
153
  };
151
154
  var changePosLastIndex = function (pos, change) {
152
155
  var position = pos.split('-');
@@ -208,3 +211,46 @@ var preventNodeDragging = function (event) {
208
211
  event.preventDefault();
209
212
  };
210
213
  exports.preventNodeDragging = preventNodeDragging;
214
+ var getLevelLinesData = function (treeData) {
215
+ var getLinesData = function (data, prevLinesData) {
216
+ return data.reduce(function (linesData, node, index) {
217
+ var isLast = index === data.length - 1;
218
+ linesData[String(node.nodeId)] = [prevLinesData, isLast];
219
+ if (node.children && node.expanded) {
220
+ var nextLinesData = prevLinesData.concat(!isLast);
221
+ return __assign(__assign({}, linesData), getLinesData(node.children, nextLinesData));
222
+ }
223
+ return linesData;
224
+ }, {});
225
+ };
226
+ return getLinesData(treeData, []);
227
+ };
228
+ exports.getLevelLinesData = getLevelLinesData;
229
+ var getTreeMaxDepth = function (data, depth) {
230
+ if (depth === void 0) { depth = INITIAL_NODE_DEPTH; }
231
+ return data.reduce(function (maxDepth, node) {
232
+ return node.expanded && node.children
233
+ ? Math.max(maxDepth, getTreeMaxDepth(node.children, depth + 1))
234
+ : maxDepth;
235
+ }, depth);
236
+ };
237
+ var getTreeMaxWidth = function (data) {
238
+ return getTreeMaxDepth(data) * exports.DEPTH_LEVEL_INDENT + NODE_TITLE_MAX_WIDTH + CONTAINER_PADDINGS;
239
+ };
240
+ var setTreeWidth = function (container, data) {
241
+ var _a, _b;
242
+ if (container.current) {
243
+ var maxTreeWidth = getTreeMaxWidth(data);
244
+ var list = (_b = (_a = container.current) === null || _a === void 0 ? void 0 : _a.getElementsByClassName('rc-tree-list-holder')[0]) === null || _b === void 0 ? void 0 : _b.firstChild;
245
+ if (list)
246
+ list.style.minWidth = "".concat(maxTreeWidth, "px");
247
+ }
248
+ };
249
+ exports.setTreeWidth = setTreeWidth;
250
+ var calcNodeWidth = function (depth, containerWidth) {
251
+ if (depth === void 0) { depth = 0; }
252
+ var leftIndent = (depth + INITIAL_NODE_DEPTH) * exports.DEPTH_LEVEL_INDENT;
253
+ var paddings = leftIndent + CONTAINER_PADDINGS;
254
+ return Math.max(containerWidth - paddings, NODE_TITLE_MAX_WIDTH);
255
+ };
256
+ exports.calcNodeWidth = calcNodeWidth;
@@ -1 +1,3 @@
1
1
  export { RCTree } from './RCTree';
2
+ export { RCTreeLevelLines } from './RCTreeLevelLines';
3
+ export { RCTreeSwitchRenderer } from './RCTreeSwitchRenderer';
@@ -1,5 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RCTree = void 0;
3
+ exports.RCTreeSwitchRenderer = exports.RCTreeLevelLines = exports.RCTree = void 0;
4
4
  var RCTree_1 = require("./RCTree");
5
5
  Object.defineProperty(exports, "RCTree", { enumerable: true, get: function () { return RCTree_1.RCTree; } });
6
+ var RCTreeLevelLines_1 = require("./RCTreeLevelLines");
7
+ Object.defineProperty(exports, "RCTreeLevelLines", { enumerable: true, get: function () { return RCTreeLevelLines_1.RCTreeLevelLines; } });
8
+ var RCTreeSwitchRenderer_1 = require("./RCTreeSwitchRenderer");
9
+ Object.defineProperty(exports, "RCTreeSwitchRenderer", { enumerable: true, get: function () { return RCTreeSwitchRenderer_1.RCTreeSwitchRenderer; } });
@@ -0,0 +1,5 @@
1
+ type StyleProps = {
2
+ level?: number;
3
+ };
4
+ export declare const useStyles: (props: StyleProps) => import("@mui/styles").ClassNameMap<"showLine" | "levelLines" | "levelLine" | "lastLevelLine" | "horizontalLine">;
5
+ export {};
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useStyles = void 0;
4
+ var styles_1 = require("@mui/styles");
5
+ var helper_1 = require("./helper");
6
+ exports.useStyles = (0, styles_1.makeStyles)(function () { return ({
7
+ levelLines: function (_a) {
8
+ var level = _a.level;
9
+ return ({
10
+ position: 'absolute',
11
+ left: "-".concat(level * helper_1.DEPTH_LEVEL_INDENT, "px"),
12
+ display: 'flex',
13
+ paddingLeft: '7px',
14
+ cursor: 'initial',
15
+ bottom: 0,
16
+ top: 0,
17
+ zIndex: -1
18
+ });
19
+ },
20
+ levelLine: {
21
+ paddingLeft: '16px',
22
+ height: '100%',
23
+ position: 'relative'
24
+ },
25
+ showLine: {
26
+ '&:after': {
27
+ content: '""',
28
+ position: 'absolute',
29
+ height: '100%',
30
+ width: '1px',
31
+ left: '0',
32
+ top: '0',
33
+ bottom: '0',
34
+ backgroundColor: 'rgba(0, 122, 193, 0.3)'
35
+ }
36
+ },
37
+ lastLevelLine: {
38
+ '&:after': {
39
+ height: '14px'
40
+ }
41
+ },
42
+ horizontalLine: {
43
+ '&:before': {
44
+ content: '""',
45
+ height: '1px',
46
+ width: '4px',
47
+ position: 'absolute',
48
+ top: '14px',
49
+ left: '0',
50
+ backgroundColor: 'rgba(0, 122, 193, 0.3)'
51
+ }
52
+ }
53
+ }); });
@@ -1 +1 @@
1
- export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"expandButton" | "collapseButton" | "dropIndicator" | "switcherButtonWrapper" | "switcherButton" | "treeWrapper" | "dropNotAllowed" | "draggedChildrenNode" | "dragHandle" | "dragHandleDragging" | "@global">;
1
+ export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"expandButton" | "titleWrapper" | "collapseButton" | "dropIndicator" | "switcherButtonWrapper" | "switcherButton" | "treeContainer" | "treeWrapper" | "dropNotAllowed" | "draggedChildrenNode" | "dragHandle" | "dragHandleDragging" | "@global">;
@@ -4,11 +4,12 @@ exports.useStyles = void 0;
4
4
  var styles_1 = require("@mui/styles");
5
5
  exports.useStyles = (0, styles_1.makeStyles)(function (theme) { return ({
6
6
  switcherButtonWrapper: {
7
- paddingTop: '11px',
8
- paddingLeft: '4px',
7
+ paddingTop: '13px',
8
+ paddingLeft: '2px',
9
9
  width: '12px',
10
10
  height: '12px',
11
- cursor: 'pointer'
11
+ cursor: 'pointer',
12
+ marginLeft: '2px'
12
13
  },
13
14
  switcherButton: {
14
15
  transition: 'transform .15s ease',
@@ -24,8 +25,12 @@ exports.useStyles = (0, styles_1.makeStyles)(function (theme) { return ({
24
25
  expandButton: {
25
26
  transform: ' rotate(-90deg)'
26
27
  },
28
+ treeContainer: {
29
+ height: '100%'
30
+ },
27
31
  treeWrapper: {
28
- border: 'none'
32
+ border: 'none',
33
+ height: '100%'
29
34
  },
30
35
  dropIndicator: {
31
36
  '&:before': {
@@ -36,11 +41,8 @@ exports.useStyles = (0, styles_1.makeStyles)(function (theme) { return ({
36
41
  top: 0,
37
42
  right: '23px',
38
43
  bottom: 0,
39
- left: '-22px',
44
+ left: '-16px',
40
45
  zIndex: 1
41
- },
42
- '&>div': {
43
- opacity: 0
44
46
  }
45
47
  },
46
48
  dropNotAllowed: {
@@ -55,17 +57,18 @@ exports.useStyles = (0, styles_1.makeStyles)(function (theme) { return ({
55
57
  dragHandle: {
56
58
  cursor: 'move',
57
59
  color: theme.palette.text.secondary,
58
- width: '16px'
60
+ width: '16px',
61
+ marginLeft: '5px',
62
+ marginTop: '3px'
59
63
  },
60
64
  dragHandleDragging: {
61
65
  visibility: 'hidden'
62
66
  },
67
+ titleWrapper: {
68
+ paddingRight: '11px'
69
+ },
63
70
  /* rc-tree/assets/index.css */
64
71
  '@global': {
65
- '.rc-tree': {
66
- margin: 0,
67
- border: '1px solid transparent'
68
- },
69
72
  '.rc-tree-focused:not(.rc-tree-active-focused)': {
70
73
  borderColor: 'cyan'
71
74
  },
@@ -119,9 +122,6 @@ exports.useStyles = (0, styles_1.makeStyles)(function (theme) { return ({
119
122
  verticalAlign: 'top',
120
123
  display: 'none!important'
121
124
  },
122
- '.rc-tree .rc-tree-treenode span.rc-tree-switcher.rc-tree-switcher-noop': {
123
- cursor: 'auto'
124
- },
125
125
  '.rc-tree .rc-tree-treenode span.rc-tree-checkbox': {
126
126
  width: '13px',
127
127
  height: '13px',
@@ -131,9 +131,7 @@ exports.useStyles = (0, styles_1.makeStyles)(function (theme) { return ({
131
131
  '.rc-tree .rc-tree-treenode span.rc-tree-checkbox-checked': {
132
132
  backgroundPosition: '-14px 0'
133
133
  },
134
- '.rc-tree .rc-tree-treenode span.rc-tree-checkbox-indeterminate': {
135
- backgroundPosition: '-14px -28px'
136
- },
134
+ '.rc-tree .rc-tree-treenode span.rc-tree-checkbox-indeterminate': {},
137
135
  '.rc-tree .rc-tree-treenode span.rc-tree-checkbox-disabled': {
138
136
  backgroundPosition: '0 -56px'
139
137
  },
@@ -201,16 +199,24 @@ exports.useStyles = (0, styles_1.makeStyles)(function (theme) { return ({
201
199
  marginRight: '2px',
202
200
  verticalAlign: 'top'
203
201
  },
204
- '.rc-tree-indent': {
205
- display: 'inline-block',
206
- height: 0,
207
- verticalAlign: 'bottom'
208
- },
209
202
  '.rc-tree-indent-unit': {
210
203
  display: 'inline-block',
211
204
  width: '16px'
212
205
  },
213
206
  //Custom styles
207
+ '.rc-tree': {
208
+ margin: 0
209
+ },
210
+ '.rc-tree-indent': {
211
+ display: 'inline-block',
212
+ height: 0,
213
+ verticalAlign: 'bottom',
214
+ whiteSpace: 'nowrap'
215
+ },
216
+ '.rc-tree .rc-tree-treenode span.rc-tree-switcher.rc-tree-switcher-noop': {
217
+ cursor: 'auto',
218
+ minWidth: '16px'
219
+ },
214
220
  '.rc-tree .rc-tree-treenode .rc-tree-node-content-wrapper': {
215
221
  position: 'relative',
216
222
  display: 'inline-block',
@@ -220,22 +226,21 @@ exports.useStyles = (0, styles_1.makeStyles)(function (theme) { return ({
220
226
  verticalAlign: 'top',
221
227
  cursor: 'pointer',
222
228
  height: 'auto',
223
- paddingRight: '11px',
224
229
  flexGrow: 1
225
230
  },
226
231
  '.rc-tree .rc-tree-treenode': {
227
232
  margin: 0,
228
233
  padding: '0 0 0 18px',
229
- lineHeight: '24px',
234
+ lineHeight: '10px',
230
235
  listStyle: 'none',
231
236
  outline: 0,
237
+ display: 'flex',
238
+ minHeight: '28px',
239
+ zIndex: 0,
232
240
  '&:hover': {
233
241
  backgroundColor: 'rgba(0,0,0,0.06)'
234
242
  }
235
243
  },
236
- '.rc-tree-treenode': {
237
- display: 'flex'
238
- },
239
244
  '.rc-tree-icon_loading': {
240
245
  display: 'none !important'
241
246
  },
@@ -247,13 +252,41 @@ exports.useStyles = (0, styles_1.makeStyles)(function (theme) { return ({
247
252
  display: 'inline-flex',
248
253
  justifyContent: 'center',
249
254
  width: '16px',
250
- visibility: 'hidden'
255
+ visibility: 'hidden',
256
+ lineHeight: '12px'
251
257
  },
252
258
  '.rc-tree-treenode-draggable:hover .rc-tree-draggable-icon': {
253
259
  visibility: 'visible'
254
260
  },
255
261
  '.rc-tree-switcher-noop': {
256
262
  width: '16px'
263
+ },
264
+ '.rc-tree-switcher': {
265
+ position: 'relative',
266
+ cursor: 'pointer'
267
+ },
268
+ '.rc-tree-switcher.rc-tree-switcher_open': {
269
+ '&:after': {
270
+ content: '""',
271
+ position: 'absolute',
272
+ top: '28px',
273
+ bottom: 0,
274
+ width: '1px',
275
+ left: '7px',
276
+ backgroundColor: 'rgba(0, 122, 193, 0.3)'
277
+ }
278
+ },
279
+ '.rc-tree-list': {
280
+ height: '100%'
281
+ },
282
+ '.rc-tree-list-holder': {
283
+ height: '100%'
284
+ },
285
+ '.rc-tree-list-scrollbar-vertical': {
286
+ width: '6px !important'
287
+ },
288
+ '.rc-tree-list-scrollbar-thumb': {
289
+ background: 'rgba(0,0,0,.2) !important'
257
290
  }
258
291
  }
259
292
  }); });
@@ -5,9 +5,10 @@ export type RCTreeNode = {
5
5
  expanded?: boolean;
6
6
  children?: RCTreeNode[];
7
7
  };
8
- export type InternalRCNode = {
9
- value: RCTreeNode;
8
+ export type InternalRCNode<Node extends RCTreeNode = RCTreeNode> = {
9
+ value: Node;
10
10
  pos?: string;
11
+ expanded?: boolean;
11
12
  } & FieldDataNode<{
12
13
  key: string;
13
14
  title?: string;
@@ -1,28 +1,28 @@
1
1
  import { DragEvent } from 'react';
2
2
  import { InternalRCNode, RCTreeNode } from './types';
3
- type Props = {
4
- treeData: RCTreeNode[];
3
+ type Props<Node extends RCTreeNode> = {
4
+ treeData: Node[];
5
5
  containerRef: React.RefObject<HTMLDivElement>;
6
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;
7
+ onLoadChildren?: (treeNode: Node) => Promise<void>;
8
+ onChange?: (node: Node[]) => void;
9
+ onDrop?: (treeData: Node[], dragNode: Node, parentNode: Node) => void;
10
10
  canDrop?: (params: {
11
- nextParent: RCTreeNode;
12
- node: RCTreeNode;
11
+ nextParent: Node;
12
+ node: Node;
13
13
  }) => boolean;
14
14
  canDrag?: (params: {
15
- node: RCTreeNode;
15
+ node: Node;
16
16
  }) => boolean;
17
17
  };
18
- export declare const useDnd: ({ treeData, containerRef, expandNode, onLoadChildren, onChange, onDrop: onDropProp, canDrop, canDrag }: Props) => {
18
+ export declare const useDnd: <Node extends RCTreeNode>({ treeData, containerRef, expandNode, onLoadChildren, onChange, onDrop: onDropProp, canDrop, canDrag }: Props<Node>) => {
19
19
  treeProps: {
20
20
  onDragStart: ({ node }: {
21
- node: InternalRCNode;
21
+ node: InternalRCNode<Node>;
22
22
  }) => void;
23
23
  onDragOver: ({ event, node }: {
24
24
  event: DragEvent<HTMLDivElement>;
25
- node: InternalRCNode;
25
+ node: InternalRCNode<Node>;
26
26
  }) => void;
27
27
  onDragLeave: ({ event, node }: {
28
28
  event: any;
@@ -31,13 +31,13 @@ export declare const useDnd: ({ treeData, containerRef, expandNode, onLoadChildr
31
31
  onDrop: () => void;
32
32
  dropIndicatorRender: () => any;
33
33
  allowDrop: ({ dragNode, dropNode }: {
34
- dragNode: InternalRCNode;
35
- dropNode: InternalRCNode;
34
+ dragNode: InternalRCNode<Node>;
35
+ dropNode: InternalRCNode<Node>;
36
36
  }) => boolean;
37
37
  };
38
- nodeDraggable: (node: InternalRCNode) => boolean;
39
- dropNode: InternalRCNode;
40
- dragNode: InternalRCNode;
38
+ nodeDraggable: (node: InternalRCNode<Node>) => boolean;
39
+ dropNode: InternalRCNode<Node>;
40
+ dragNode: InternalRCNode<Node>;
41
41
  dropPositionInfo: {
42
42
  pos: string;
43
43
  dropPosition: number;