@mui/x-tree-view 7.0.0-alpha.1 → 7.0.0-alpha.7
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/CHANGELOG.md +1254 -188
- package/README.md +0 -1
- package/RichTreeView/RichTreeView.d.ts +20 -0
- package/RichTreeView/RichTreeView.js +324 -0
- package/RichTreeView/RichTreeView.types.d.ts +55 -0
- package/RichTreeView/RichTreeView.types.js +1 -0
- package/RichTreeView/index.d.ts +3 -0
- package/RichTreeView/index.js +3 -0
- package/RichTreeView/package.json +6 -0
- package/RichTreeView/richTreeViewClasses.d.ts +7 -0
- package/RichTreeView/richTreeViewClasses.js +6 -0
- package/SimpleTreeView/SimpleTreeView.d.ts +20 -0
- package/SimpleTreeView/SimpleTreeView.js +268 -0
- package/SimpleTreeView/SimpleTreeView.plugins.d.ts +6 -0
- package/SimpleTreeView/SimpleTreeView.plugins.js +5 -0
- package/SimpleTreeView/SimpleTreeView.types.d.ts +38 -0
- package/SimpleTreeView/SimpleTreeView.types.js +1 -0
- package/SimpleTreeView/index.d.ts +3 -0
- package/SimpleTreeView/index.js +3 -0
- package/SimpleTreeView/package.json +6 -0
- package/SimpleTreeView/simpleTreeViewClasses.d.ts +7 -0
- package/SimpleTreeView/simpleTreeViewClasses.js +6 -0
- package/TreeItem/TreeItem.js +44 -89
- package/TreeItem/TreeItem.types.d.ts +2 -1
- package/TreeItem/index.d.ts +2 -2
- package/TreeItem/index.js +2 -2
- package/TreeItem/useTreeItem.js +5 -5
- package/TreeView/TreeView.d.ts +4 -0
- package/TreeView/TreeView.js +80 -87
- package/TreeView/TreeView.types.d.ts +4 -26
- package/TreeView/index.d.ts +1 -1
- package/index.d.ts +3 -0
- package/index.js +5 -2
- package/internals/TreeViewProvider/TreeViewContext.d.ts +1 -2
- package/internals/TreeViewProvider/TreeViewContext.js +1 -14
- package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -3
- package/internals/TreeViewProvider/useTreeViewContext.js +7 -1
- package/internals/corePlugins/corePlugins.d.ts +1 -1
- package/internals/corePlugins/corePlugins.js +1 -1
- package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.d.ts +0 -5
- package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +0 -6
- package/internals/hooks/useLazyRef.d.ts +2 -0
- package/internals/hooks/useLazyRef.js +11 -0
- package/internals/hooks/useOnMount.d.ts +2 -0
- package/internals/hooks/useOnMount.js +7 -0
- package/internals/hooks/useTimeout.d.ts +9 -0
- package/internals/hooks/useTimeout.js +28 -0
- package/internals/models/plugin.d.ts +23 -0
- package/internals/models/treeView.d.ts +5 -1
- package/internals/plugins/defaultPlugins.d.ts +3 -2
- package/internals/plugins/defaultPlugins.js +2 -1
- package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +8 -6
- package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.d.ts +1 -6
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +26 -17
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +12 -5
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +13 -6
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +4 -1
- package/internals/plugins/useTreeViewId/index.d.ts +2 -0
- package/internals/plugins/useTreeViewId/index.js +1 -0
- package/internals/plugins/useTreeViewId/useTreeViewId.d.ts +3 -0
- package/internals/plugins/useTreeViewId/useTreeViewId.js +18 -0
- package/internals/plugins/useTreeViewId/useTreeViewId.types.d.ts +17 -0
- package/internals/plugins/useTreeViewId/useTreeViewId.types.js +1 -0
- package/internals/plugins/useTreeViewJSXNodes/index.d.ts +2 -0
- package/internals/plugins/useTreeViewJSXNodes/index.js +1 -0
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.d.ts +3 -0
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +114 -0
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.d.ts +16 -0
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +1 -0
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +20 -9
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +5 -2
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +83 -18
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +48 -5
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.d.ts +1 -1
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +41 -28
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +15 -8
- package/internals/useTreeView/useTreeView.js +40 -3
- package/internals/useTreeView/useTreeView.types.d.ts +2 -1
- package/internals/utils/warning.d.ts +1 -0
- package/internals/utils/warning.js +14 -0
- package/legacy/RichTreeView/RichTreeView.js +317 -0
- package/legacy/RichTreeView/RichTreeView.types.js +1 -0
- package/legacy/RichTreeView/index.js +3 -0
- package/legacy/RichTreeView/richTreeViewClasses.js +6 -0
- package/legacy/SimpleTreeView/SimpleTreeView.js +264 -0
- package/legacy/SimpleTreeView/SimpleTreeView.plugins.js +6 -0
- package/legacy/SimpleTreeView/SimpleTreeView.types.js +1 -0
- package/legacy/SimpleTreeView/index.js +3 -0
- package/legacy/SimpleTreeView/simpleTreeViewClasses.js +6 -0
- package/legacy/TreeItem/TreeItem.js +49 -103
- package/legacy/TreeItem/index.js +2 -2
- package/legacy/TreeItem/useTreeItem.js +5 -5
- package/legacy/TreeView/TreeView.js +80 -82
- package/legacy/index.js +5 -2
- package/legacy/internals/TreeViewProvider/TreeViewContext.js +1 -14
- package/legacy/internals/TreeViewProvider/useTreeViewContext.js +5 -1
- package/legacy/internals/corePlugins/corePlugins.js +1 -1
- package/legacy/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +0 -6
- package/legacy/internals/hooks/useLazyRef.js +11 -0
- package/legacy/internals/hooks/useOnMount.js +7 -0
- package/legacy/internals/hooks/useTimeout.js +38 -0
- package/legacy/internals/plugins/defaultPlugins.js +2 -1
- package/legacy/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +11 -8
- package/legacy/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +26 -17
- package/legacy/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +13 -6
- package/legacy/internals/plugins/useTreeViewId/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewId/useTreeViewId.js +21 -0
- package/legacy/internals/plugins/useTreeViewId/useTreeViewId.types.js +1 -0
- package/legacy/internals/plugins/useTreeViewJSXNodes/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +120 -0
- package/legacy/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +1 -0
- package/legacy/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +20 -9
- package/legacy/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +89 -20
- package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +45 -28
- package/legacy/internals/useTreeView/useTreeView.js +39 -3
- package/legacy/internals/utils/warning.js +15 -0
- package/legacy/models/index.js +1 -0
- package/legacy/models/items.js +1 -0
- package/models/index.d.ts +1 -0
- package/models/index.js +1 -0
- package/models/items.d.ts +7 -0
- package/models/items.js +1 -0
- package/models/package.json +6 -0
- package/modern/RichTreeView/RichTreeView.js +322 -0
- package/modern/RichTreeView/RichTreeView.types.js +1 -0
- package/modern/RichTreeView/index.js +3 -0
- package/modern/RichTreeView/richTreeViewClasses.js +6 -0
- package/modern/SimpleTreeView/SimpleTreeView.js +267 -0
- package/modern/SimpleTreeView/SimpleTreeView.plugins.js +5 -0
- package/modern/SimpleTreeView/SimpleTreeView.types.js +1 -0
- package/modern/SimpleTreeView/index.js +3 -0
- package/modern/SimpleTreeView/simpleTreeViewClasses.js +6 -0
- package/modern/TreeItem/TreeItem.js +44 -88
- package/modern/TreeItem/index.js +2 -2
- package/modern/TreeItem/useTreeItem.js +5 -5
- package/modern/TreeView/TreeView.js +80 -87
- package/modern/index.js +5 -2
- package/modern/internals/TreeViewProvider/TreeViewContext.js +1 -14
- package/modern/internals/TreeViewProvider/useTreeViewContext.js +7 -1
- package/modern/internals/corePlugins/corePlugins.js +1 -1
- package/modern/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +0 -6
- package/modern/internals/hooks/useLazyRef.js +11 -0
- package/modern/internals/hooks/useOnMount.js +7 -0
- package/modern/internals/hooks/useTimeout.js +28 -0
- package/modern/internals/plugins/defaultPlugins.js +2 -1
- package/modern/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +8 -6
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +26 -17
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -6
- package/modern/internals/plugins/useTreeViewId/index.js +1 -0
- package/modern/internals/plugins/useTreeViewId/useTreeViewId.js +18 -0
- package/modern/internals/plugins/useTreeViewId/useTreeViewId.types.js +1 -0
- package/modern/internals/plugins/useTreeViewJSXNodes/index.js +1 -0
- package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +113 -0
- package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +1 -0
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +19 -9
- package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +82 -18
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +41 -28
- package/modern/internals/useTreeView/useTreeView.js +40 -3
- package/modern/internals/utils/warning.js +14 -0
- package/modern/models/index.js +1 -0
- package/modern/models/items.js +1 -0
- package/node/RichTreeView/RichTreeView.js +330 -0
- package/node/RichTreeView/RichTreeView.types.js +5 -0
- package/node/RichTreeView/index.js +27 -0
- package/node/RichTreeView/richTreeViewClasses.js +14 -0
- package/node/SimpleTreeView/SimpleTreeView.js +275 -0
- package/node/SimpleTreeView/SimpleTreeView.plugins.js +11 -0
- package/node/SimpleTreeView/SimpleTreeView.types.js +5 -0
- package/node/SimpleTreeView/index.js +27 -0
- package/node/SimpleTreeView/simpleTreeViewClasses.js +14 -0
- package/node/TreeItem/TreeItem.js +44 -88
- package/node/TreeItem/index.js +11 -15
- package/node/TreeItem/useTreeItem.js +5 -5
- package/node/TreeView/TreeView.js +80 -87
- package/node/index.js +38 -2
- package/node/internals/TreeViewProvider/TreeViewContext.js +2 -15
- package/node/internals/TreeViewProvider/useTreeViewContext.js +7 -1
- package/node/internals/corePlugins/corePlugins.js +1 -1
- package/node/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +0 -6
- package/node/internals/hooks/useLazyRef.js +19 -0
- package/node/internals/hooks/useOnMount.js +15 -0
- package/node/internals/hooks/useTimeout.js +34 -0
- package/node/internals/plugins/defaultPlugins.js +2 -1
- package/node/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +8 -7
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +26 -17
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -6
- package/node/internals/plugins/useTreeViewId/index.js +12 -0
- package/node/internals/plugins/useTreeViewId/useTreeViewId.js +28 -0
- package/node/internals/plugins/useTreeViewId/useTreeViewId.types.js +5 -0
- package/node/internals/plugins/useTreeViewJSXNodes/index.js +12 -0
- package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +123 -0
- package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +5 -0
- package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +19 -9
- package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +82 -18
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +41 -28
- package/node/internals/useTreeView/useTreeView.js +40 -3
- package/node/internals/utils/warning.js +21 -0
- package/node/models/index.js +16 -0
- package/node/models/items.js +5 -0
- package/package.json +8 -7
- package/themeAugmentation/components.d.ts +14 -4
- package/themeAugmentation/overrides.d.ts +8 -4
- package/themeAugmentation/props.d.ts +7 -3
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
3
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import useEventCallback from '@mui/utils/useEventCallback';
|
|
6
|
+
import useForkRef from '@mui/utils/useForkRef';
|
|
7
|
+
import { populateInstance } from '../../useTreeView/useTreeView.utils';
|
|
8
|
+
import { publishTreeViewEvent } from '../../utils/publishTreeViewEvent';
|
|
9
|
+
import { useTreeViewContext } from '../../TreeViewProvider/useTreeViewContext';
|
|
10
|
+
import { DescendantProvider, useDescendant } from '../../TreeViewProvider/DescendantProvider';
|
|
11
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
|
+
export var useTreeViewJSXNodes = function useTreeViewJSXNodes(_ref) {
|
|
13
|
+
var instance = _ref.instance,
|
|
14
|
+
setState = _ref.setState;
|
|
15
|
+
var insertJSXNode = useEventCallback(function (node) {
|
|
16
|
+
setState(function (prevState) {
|
|
17
|
+
return _extends({}, prevState, {
|
|
18
|
+
nodeMap: _extends({}, prevState.nodeMap, _defineProperty({}, node.id, node))
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
var removeJSXNode = useEventCallback(function (nodeId) {
|
|
23
|
+
setState(function (prevState) {
|
|
24
|
+
var newMap = _extends({}, prevState.nodeMap);
|
|
25
|
+
delete newMap[nodeId];
|
|
26
|
+
return _extends({}, prevState, {
|
|
27
|
+
nodeMap: newMap
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
publishTreeViewEvent(instance, 'removeNode', {
|
|
31
|
+
id: nodeId
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
var mapFirstCharFromJSX = useEventCallback(function (nodeId, firstChar) {
|
|
35
|
+
instance.updateFirstCharMap(function (firstCharMap) {
|
|
36
|
+
firstCharMap[nodeId] = firstChar;
|
|
37
|
+
return firstCharMap;
|
|
38
|
+
});
|
|
39
|
+
return function () {
|
|
40
|
+
instance.updateFirstCharMap(function (firstCharMap) {
|
|
41
|
+
var newMap = _extends({}, firstCharMap);
|
|
42
|
+
delete newMap[nodeId];
|
|
43
|
+
return newMap;
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
populateInstance(instance, {
|
|
48
|
+
insertJSXNode: insertJSXNode,
|
|
49
|
+
removeJSXNode: removeJSXNode,
|
|
50
|
+
mapFirstCharFromJSX: mapFirstCharFromJSX
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
var useTreeViewJSXNodesItemPlugin = function useTreeViewJSXNodesItemPlugin(_ref2) {
|
|
54
|
+
var props = _ref2.props,
|
|
55
|
+
ref = _ref2.ref;
|
|
56
|
+
var children = props.children,
|
|
57
|
+
_props$disabled = props.disabled,
|
|
58
|
+
disabled = _props$disabled === void 0 ? false : _props$disabled,
|
|
59
|
+
label = props.label,
|
|
60
|
+
nodeId = props.nodeId,
|
|
61
|
+
id = props.id,
|
|
62
|
+
inContentProps = props.ContentProps;
|
|
63
|
+
var _useTreeViewContext = useTreeViewContext(),
|
|
64
|
+
instance = _useTreeViewContext.instance;
|
|
65
|
+
var expandable = Boolean(Array.isArray(children) ? children.length : children);
|
|
66
|
+
var _React$useState = React.useState(null),
|
|
67
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
68
|
+
treeItemElement = _React$useState2[0],
|
|
69
|
+
setTreeItemElement = _React$useState2[1];
|
|
70
|
+
var contentRef = React.useRef(null);
|
|
71
|
+
var handleRef = useForkRef(setTreeItemElement, ref);
|
|
72
|
+
var descendant = React.useMemo(function () {
|
|
73
|
+
return {
|
|
74
|
+
element: treeItemElement,
|
|
75
|
+
id: nodeId
|
|
76
|
+
};
|
|
77
|
+
}, [nodeId, treeItemElement]);
|
|
78
|
+
var _useDescendant = useDescendant(descendant),
|
|
79
|
+
index = _useDescendant.index,
|
|
80
|
+
parentId = _useDescendant.parentId;
|
|
81
|
+
React.useEffect(function () {
|
|
82
|
+
// On the first render a node's index will be -1. We want to wait for the real index.
|
|
83
|
+
if (instance && index !== -1) {
|
|
84
|
+
instance.insertJSXNode({
|
|
85
|
+
id: nodeId,
|
|
86
|
+
idAttribute: id,
|
|
87
|
+
index: index,
|
|
88
|
+
parentId: parentId,
|
|
89
|
+
expandable: expandable,
|
|
90
|
+
disabled: disabled
|
|
91
|
+
});
|
|
92
|
+
return function () {
|
|
93
|
+
return instance.removeJSXNode(nodeId);
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
return undefined;
|
|
97
|
+
}, [instance, parentId, index, nodeId, expandable, disabled, id]);
|
|
98
|
+
React.useEffect(function () {
|
|
99
|
+
if (instance && label) {
|
|
100
|
+
var _contentRef$current$t, _contentRef$current;
|
|
101
|
+
return instance.mapFirstCharFromJSX(nodeId, ((_contentRef$current$t = (_contentRef$current = contentRef.current) == null ? void 0 : _contentRef$current.textContent) != null ? _contentRef$current$t : '').substring(0, 1).toLowerCase());
|
|
102
|
+
}
|
|
103
|
+
return undefined;
|
|
104
|
+
}, [instance, nodeId, label]);
|
|
105
|
+
return {
|
|
106
|
+
props: _extends({}, props, {
|
|
107
|
+
ContentProps: _extends({}, inContentProps, {
|
|
108
|
+
ref: contentRef
|
|
109
|
+
})
|
|
110
|
+
}),
|
|
111
|
+
ref: handleRef,
|
|
112
|
+
wrapItem: function wrapItem(item) {
|
|
113
|
+
return /*#__PURE__*/_jsx(DescendantProvider, {
|
|
114
|
+
id: nodeId,
|
|
115
|
+
children: item
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
useTreeViewJSXNodes.itemPlugin = useTreeViewJSXNodesItemPlugin;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/legacy/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
1
|
import * as React from 'react';
|
|
3
2
|
import { useTheme } from '@mui/material/styles';
|
|
4
3
|
import useEventCallback from '@mui/utils/useEventCallback';
|
|
@@ -21,16 +20,28 @@ export var useTreeViewKeyboardNavigation = function useTreeViewKeyboardNavigatio
|
|
|
21
20
|
var theme = useTheme();
|
|
22
21
|
var isRtl = theme.direction === 'rtl';
|
|
23
22
|
var firstCharMap = React.useRef({});
|
|
24
|
-
var
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
delete newMap[nodeId];
|
|
29
|
-
firstCharMap.current = newMap;
|
|
30
|
-
};
|
|
23
|
+
var hasFirstCharMapBeenUpdatedImperatively = React.useRef(false);
|
|
24
|
+
var updateFirstCharMap = useEventCallback(function (callback) {
|
|
25
|
+
hasFirstCharMapBeenUpdatedImperatively.current = true;
|
|
26
|
+
firstCharMap.current = callback(firstCharMap.current);
|
|
31
27
|
});
|
|
28
|
+
React.useEffect(function () {
|
|
29
|
+
if (hasFirstCharMapBeenUpdatedImperatively.current) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
var newFirstCharMap = {};
|
|
33
|
+
var processItem = function processItem(item) {
|
|
34
|
+
var _item$children;
|
|
35
|
+
var getItemId = params.getItemId;
|
|
36
|
+
var nodeId = getItemId ? getItemId(item) : item.id;
|
|
37
|
+
newFirstCharMap[nodeId] = instance.getNode(nodeId).label.substring(0, 1).toLowerCase();
|
|
38
|
+
(_item$children = item.children) == null || _item$children.forEach(processItem);
|
|
39
|
+
};
|
|
40
|
+
params.items.forEach(processItem);
|
|
41
|
+
firstCharMap.current = newFirstCharMap;
|
|
42
|
+
}, [params.items, params.getItemId, instance]);
|
|
32
43
|
populateInstance(instance, {
|
|
33
|
-
|
|
44
|
+
updateFirstCharMap: updateFirstCharMap
|
|
34
45
|
});
|
|
35
46
|
var handleNextArrow = function handleNextArrow(event) {
|
|
36
47
|
if (state.focusedNodeId != null && instance.isNodeExpandable(state.focusedNodeId)) {
|
|
@@ -3,24 +3,54 @@ import * as React from 'react';
|
|
|
3
3
|
import useEventCallback from '@mui/utils/useEventCallback';
|
|
4
4
|
import { populateInstance } from '../../useTreeView/useTreeView.utils';
|
|
5
5
|
import { publishTreeViewEvent } from '../../utils/publishTreeViewEvent';
|
|
6
|
-
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
var updateState = function updateState(_ref) {
|
|
7
|
+
var items = _ref.items,
|
|
8
|
+
isItemDisabled = _ref.isItemDisabled,
|
|
9
|
+
getItemLabel = _ref.getItemLabel,
|
|
10
|
+
getItemId = _ref.getItemId;
|
|
11
|
+
var nodeMap = {};
|
|
12
|
+
var processItem = function processItem(item, index, parentId) {
|
|
13
|
+
var _item$children, _item$children2;
|
|
14
|
+
var id = getItemId ? getItemId(item) : item.id;
|
|
15
|
+
if (id == null) {
|
|
16
|
+
throw new Error(['MUI: The Tree View component requires all items to have a unique `id` property.', 'Alternatively, you can use the `getItemId` prop to specify a custom id for each item.', 'An item was provided without id in the `items` prop:', JSON.stringify(item)].join('\n'));
|
|
17
|
+
}
|
|
18
|
+
var label = getItemLabel ? getItemLabel(item) : item.label;
|
|
19
|
+
if (label == null) {
|
|
20
|
+
throw new Error(['MUI: The Tree View component requires all items to have a `label` property.', 'Alternatively, you can use the `getItemLabel` prop to specify a custom label for each item.', 'An item was provided without label in the `items` prop:', JSON.stringify(item)].join('\n'));
|
|
21
|
+
}
|
|
22
|
+
nodeMap[id] = {
|
|
23
|
+
id: id,
|
|
24
|
+
label: label,
|
|
25
|
+
index: index,
|
|
26
|
+
parentId: parentId,
|
|
27
|
+
idAttribute: id,
|
|
28
|
+
expandable: !!((_item$children = item.children) != null && _item$children.length),
|
|
29
|
+
disabled: isItemDisabled ? isItemDisabled(item) : false
|
|
30
|
+
};
|
|
31
|
+
return {
|
|
32
|
+
id: id,
|
|
33
|
+
children: (_item$children2 = item.children) == null ? void 0 : _item$children2.map(function (child, childIndex) {
|
|
34
|
+
return processItem(child, childIndex, id);
|
|
35
|
+
})
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
var nodeTree = items.map(function (item, itemIndex) {
|
|
39
|
+
return processItem(item, itemIndex, null);
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
nodeMap: nodeMap,
|
|
43
|
+
nodeTree: nodeTree
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
export var useTreeViewNodes = function useTreeViewNodes(_ref2) {
|
|
47
|
+
var instance = _ref2.instance,
|
|
48
|
+
params = _ref2.params,
|
|
49
|
+
state = _ref2.state,
|
|
50
|
+
setState = _ref2.setState;
|
|
10
51
|
var getNode = React.useCallback(function (nodeId) {
|
|
11
|
-
return nodeMap
|
|
12
|
-
}, []);
|
|
13
|
-
var insertNode = React.useCallback(function (node) {
|
|
14
|
-
nodeMap.current[node.id] = node;
|
|
15
|
-
}, []);
|
|
16
|
-
var removeNode = React.useCallback(function (nodeId) {
|
|
17
|
-
var newMap = _extends({}, nodeMap.current);
|
|
18
|
-
delete newMap[nodeId];
|
|
19
|
-
nodeMap.current = newMap;
|
|
20
|
-
publishTreeViewEvent(instance, 'removeNode', {
|
|
21
|
-
id: nodeId
|
|
22
|
-
});
|
|
23
|
-
}, [instance]);
|
|
52
|
+
return state.nodeMap[nodeId];
|
|
53
|
+
}, [state.nodeMap]);
|
|
24
54
|
var isNodeDisabled = React.useCallback(function (nodeId) {
|
|
25
55
|
if (nodeId == null) {
|
|
26
56
|
return false;
|
|
@@ -43,7 +73,7 @@ export var useTreeViewNodes = function useTreeViewNodes(_ref) {
|
|
|
43
73
|
return false;
|
|
44
74
|
}, [instance]);
|
|
45
75
|
var getChildrenIds = useEventCallback(function (nodeId) {
|
|
46
|
-
return Object.values(nodeMap
|
|
76
|
+
return Object.values(state.nodeMap).filter(function (node) {
|
|
47
77
|
return node.parentId === nodeId;
|
|
48
78
|
}).sort(function (a, b) {
|
|
49
79
|
return a.index - b.index;
|
|
@@ -60,12 +90,51 @@ export var useTreeViewNodes = function useTreeViewNodes(_ref) {
|
|
|
60
90
|
}
|
|
61
91
|
return childrenIds;
|
|
62
92
|
};
|
|
93
|
+
React.useEffect(function () {
|
|
94
|
+
setState(function (prevState) {
|
|
95
|
+
var newState = updateState({
|
|
96
|
+
items: params.items,
|
|
97
|
+
isItemDisabled: params.isItemDisabled,
|
|
98
|
+
getItemId: params.getItemId,
|
|
99
|
+
getItemLabel: params.getItemLabel
|
|
100
|
+
});
|
|
101
|
+
Object.values(prevState.nodeMap).forEach(function (node) {
|
|
102
|
+
if (!newState.nodeMap[node.id]) {
|
|
103
|
+
publishTreeViewEvent(instance, 'removeNode', {
|
|
104
|
+
id: node.id
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
return _extends({}, prevState, newState);
|
|
109
|
+
});
|
|
110
|
+
}, [instance, setState, params.items, params.isItemDisabled, params.getItemId, params.getItemLabel]);
|
|
111
|
+
var getNodesToRender = useEventCallback(function () {
|
|
112
|
+
var getPropsFromNodeId = function getPropsFromNodeId(_ref3) {
|
|
113
|
+
var id = _ref3.id,
|
|
114
|
+
children = _ref3.children;
|
|
115
|
+
var node = state.nodeMap[id];
|
|
116
|
+
return {
|
|
117
|
+
label: node.label,
|
|
118
|
+
nodeId: node.id,
|
|
119
|
+
id: node.idAttribute,
|
|
120
|
+
children: children == null ? void 0 : children.map(getPropsFromNodeId)
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
return state.nodeTree.map(getPropsFromNodeId);
|
|
124
|
+
});
|
|
63
125
|
populateInstance(instance, {
|
|
64
126
|
getNode: getNode,
|
|
65
|
-
|
|
66
|
-
removeNode: removeNode,
|
|
127
|
+
getNodesToRender: getNodesToRender,
|
|
67
128
|
getChildrenIds: getChildrenIds,
|
|
68
129
|
getNavigableChildrenIds: getNavigableChildrenIds,
|
|
69
130
|
isNodeDisabled: isNodeDisabled
|
|
70
131
|
});
|
|
132
|
+
};
|
|
133
|
+
useTreeViewNodes.getInitialState = function (params) {
|
|
134
|
+
return updateState({
|
|
135
|
+
items: params.items,
|
|
136
|
+
isItemDisabled: params.isItemDisabled,
|
|
137
|
+
getItemId: params.getItemId,
|
|
138
|
+
getItemLabel: params.getItemLabel
|
|
139
|
+
});
|
|
71
140
|
};
|
|
@@ -11,7 +11,36 @@ export var useTreeViewSelection = function useTreeViewSelection(_ref) {
|
|
|
11
11
|
var lastSelectionWasRange = React.useRef(false);
|
|
12
12
|
var currentRangeSelection = React.useRef([]);
|
|
13
13
|
var isNodeSelected = function isNodeSelected(nodeId) {
|
|
14
|
-
return Array.isArray(models.
|
|
14
|
+
return Array.isArray(models.selectedNodes.value) ? models.selectedNodes.value.indexOf(nodeId) !== -1 : models.selectedNodes.value === nodeId;
|
|
15
|
+
};
|
|
16
|
+
var setSelectedNodes = function setSelectedNodes(event, newSelectedNodes) {
|
|
17
|
+
if (params.onNodeSelectionToggle) {
|
|
18
|
+
if (params.multiSelect) {
|
|
19
|
+
var addedNodes = newSelectedNodes.filter(function (nodeId) {
|
|
20
|
+
return !instance.isNodeSelected(nodeId);
|
|
21
|
+
});
|
|
22
|
+
var removedNodes = models.selectedNodes.value.filter(function (nodeId) {
|
|
23
|
+
return !newSelectedNodes.includes(nodeId);
|
|
24
|
+
});
|
|
25
|
+
addedNodes.forEach(function (nodeId) {
|
|
26
|
+
params.onNodeSelectionToggle(event, nodeId, true);
|
|
27
|
+
});
|
|
28
|
+
removedNodes.forEach(function (nodeId) {
|
|
29
|
+
params.onNodeSelectionToggle(event, nodeId, false);
|
|
30
|
+
});
|
|
31
|
+
} else if (newSelectedNodes !== models.selectedNodes.value) {
|
|
32
|
+
if (models.selectedNodes.value != null) {
|
|
33
|
+
params.onNodeSelectionToggle(event, models.selectedNodes.value, false);
|
|
34
|
+
}
|
|
35
|
+
if (newSelectedNodes != null) {
|
|
36
|
+
params.onNodeSelectionToggle(event, newSelectedNodes, true);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (params.onSelectedNodesChange) {
|
|
41
|
+
params.onSelectedNodesChange(event, newSelectedNodes);
|
|
42
|
+
}
|
|
43
|
+
models.selectedNodes.setValue(newSelectedNodes);
|
|
15
44
|
};
|
|
16
45
|
var selectNode = function selectNode(event, nodeId) {
|
|
17
46
|
var multiple = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
@@ -19,26 +48,20 @@ export var useTreeViewSelection = function useTreeViewSelection(_ref) {
|
|
|
19
48
|
return;
|
|
20
49
|
}
|
|
21
50
|
if (multiple) {
|
|
22
|
-
if (Array.isArray(models.
|
|
51
|
+
if (Array.isArray(models.selectedNodes.value)) {
|
|
23
52
|
var newSelected;
|
|
24
|
-
if (models.
|
|
25
|
-
newSelected = models.
|
|
53
|
+
if (models.selectedNodes.value.indexOf(nodeId) !== -1) {
|
|
54
|
+
newSelected = models.selectedNodes.value.filter(function (id) {
|
|
26
55
|
return id !== nodeId;
|
|
27
56
|
});
|
|
28
57
|
} else {
|
|
29
|
-
newSelected = [nodeId].concat(models.
|
|
30
|
-
}
|
|
31
|
-
if (params.onNodeSelect) {
|
|
32
|
-
params.onNodeSelect(event, newSelected);
|
|
58
|
+
newSelected = [nodeId].concat(models.selectedNodes.value);
|
|
33
59
|
}
|
|
34
|
-
|
|
60
|
+
setSelectedNodes(event, newSelected);
|
|
35
61
|
}
|
|
36
62
|
} else {
|
|
37
63
|
var _newSelected = params.multiSelect ? [nodeId] : nodeId;
|
|
38
|
-
|
|
39
|
-
params.onNodeSelect(event, _newSelected);
|
|
40
|
-
}
|
|
41
|
-
models.selected.setValue(_newSelected);
|
|
64
|
+
setSelectedNodes(event, _newSelected);
|
|
42
65
|
}
|
|
43
66
|
lastSelectedNode.current = nodeId;
|
|
44
67
|
lastSelectionWasRange.current = false;
|
|
@@ -58,7 +81,7 @@ export var useTreeViewSelection = function useTreeViewSelection(_ref) {
|
|
|
58
81
|
return nodes;
|
|
59
82
|
};
|
|
60
83
|
var handleRangeArrowSelect = function handleRangeArrowSelect(event, nodes) {
|
|
61
|
-
var base = models.
|
|
84
|
+
var base = models.selectedNodes.value.slice();
|
|
62
85
|
var start = nodes.start,
|
|
63
86
|
next = nodes.next,
|
|
64
87
|
current = nodes.current;
|
|
@@ -84,13 +107,10 @@ export var useTreeViewSelection = function useTreeViewSelection(_ref) {
|
|
|
84
107
|
base.push(next);
|
|
85
108
|
currentRangeSelection.current.push(current, next);
|
|
86
109
|
}
|
|
87
|
-
|
|
88
|
-
params.onNodeSelect(event, base);
|
|
89
|
-
}
|
|
90
|
-
models.selected.setValue(base);
|
|
110
|
+
setSelectedNodes(event, base);
|
|
91
111
|
};
|
|
92
112
|
var handleRangeSelect = function handleRangeSelect(event, nodes) {
|
|
93
|
-
var base = models.
|
|
113
|
+
var base = models.selectedNodes.value.slice();
|
|
94
114
|
var start = nodes.start,
|
|
95
115
|
end = nodes.end;
|
|
96
116
|
// If last selection was a range selection ignore nodes that were selected.
|
|
@@ -108,10 +128,7 @@ export var useTreeViewSelection = function useTreeViewSelection(_ref) {
|
|
|
108
128
|
newSelected = newSelected.filter(function (id, i) {
|
|
109
129
|
return newSelected.indexOf(id) === i;
|
|
110
130
|
});
|
|
111
|
-
|
|
112
|
-
params.onNodeSelect(event, newSelected);
|
|
113
|
-
}
|
|
114
|
-
models.selected.setValue(newSelected);
|
|
131
|
+
setSelectedNodes(event, newSelected);
|
|
115
132
|
};
|
|
116
133
|
var selectRange = function selectRange(event, nodes) {
|
|
117
134
|
var stacked = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
@@ -172,17 +189,17 @@ export var useTreeViewSelection = function useTreeViewSelection(_ref) {
|
|
|
172
189
|
};
|
|
173
190
|
};
|
|
174
191
|
useTreeViewSelection.models = {
|
|
175
|
-
|
|
176
|
-
controlledProp: '
|
|
177
|
-
defaultProp: '
|
|
192
|
+
selectedNodes: {
|
|
193
|
+
controlledProp: 'selectedNodes',
|
|
194
|
+
defaultProp: 'defaultSelectedNodes'
|
|
178
195
|
}
|
|
179
196
|
};
|
|
180
|
-
var
|
|
197
|
+
var DEFAULT_SELECTED_NODES = [];
|
|
181
198
|
useTreeViewSelection.getDefaultizedParams = function (params) {
|
|
182
199
|
var _params$disableSelect, _params$multiSelect, _params$defaultSelect;
|
|
183
200
|
return _extends({}, params, {
|
|
184
201
|
disableSelection: (_params$disableSelect = params.disableSelection) != null ? _params$disableSelect : false,
|
|
185
202
|
multiSelect: (_params$multiSelect = params.multiSelect) != null ? _params$multiSelect : false,
|
|
186
|
-
|
|
203
|
+
defaultSelectedNodes: (_params$defaultSelect = params.defaultSelectedNodes) != null ? _params$defaultSelect : params.multiSelect ? DEFAULT_SELECTED_NODES : null
|
|
187
204
|
});
|
|
188
205
|
};
|
|
@@ -3,7 +3,6 @@ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
|
3
3
|
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import useForkRef from '@mui/utils/useForkRef';
|
|
6
|
-
import { DEFAULT_TREE_VIEW_CONTEXT_VALUE } from '../TreeViewProvider/TreeViewContext';
|
|
7
6
|
import { useTreeViewModels } from './useTreeViewModels';
|
|
8
7
|
import { TREE_VIEW_CORE_PLUGINS } from '../corePlugins';
|
|
9
8
|
export var useTreeView = function useTreeView(inParams) {
|
|
@@ -32,7 +31,7 @@ export var useTreeView = function useTreeView(inParams) {
|
|
|
32
31
|
state = _React$useState2[0],
|
|
33
32
|
setState = _React$useState2[1];
|
|
34
33
|
var rootPropsGetters = [];
|
|
35
|
-
var contextValue =
|
|
34
|
+
var contextValue = {};
|
|
36
35
|
var runPlugin = function runPlugin(plugin) {
|
|
37
36
|
var pluginResponse = plugin({
|
|
38
37
|
instance: instance,
|
|
@@ -50,6 +49,42 @@ export var useTreeView = function useTreeView(inParams) {
|
|
|
50
49
|
}
|
|
51
50
|
};
|
|
52
51
|
plugins.forEach(runPlugin);
|
|
52
|
+
contextValue.runItemPlugins = function (_ref) {
|
|
53
|
+
var props = _ref.props,
|
|
54
|
+
ref = _ref.ref;
|
|
55
|
+
var finalProps = props;
|
|
56
|
+
var finalRef = ref;
|
|
57
|
+
var itemWrappers = [];
|
|
58
|
+
plugins.forEach(function (plugin) {
|
|
59
|
+
if (!plugin.itemPlugin) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
var itemPluginResponse = plugin.itemPlugin({
|
|
63
|
+
props: finalProps,
|
|
64
|
+
ref: finalRef
|
|
65
|
+
});
|
|
66
|
+
if (itemPluginResponse != null && itemPluginResponse.props) {
|
|
67
|
+
finalProps = itemPluginResponse.props;
|
|
68
|
+
}
|
|
69
|
+
if (itemPluginResponse != null && itemPluginResponse.ref) {
|
|
70
|
+
finalRef = itemPluginResponse.ref;
|
|
71
|
+
}
|
|
72
|
+
if (itemPluginResponse != null && itemPluginResponse.wrapItem) {
|
|
73
|
+
itemWrappers.push(itemPluginResponse.wrapItem);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
return {
|
|
77
|
+
props: finalProps,
|
|
78
|
+
ref: finalRef,
|
|
79
|
+
wrapItem: function wrapItem(children) {
|
|
80
|
+
var finalChildren = children;
|
|
81
|
+
itemWrappers.forEach(function (itemWrapper) {
|
|
82
|
+
finalChildren = itemWrapper(finalChildren);
|
|
83
|
+
});
|
|
84
|
+
return finalChildren;
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
};
|
|
53
88
|
var getRootProps = function getRootProps() {
|
|
54
89
|
var otherHandlers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
55
90
|
var rootProps = _extends({
|
|
@@ -66,6 +101,7 @@ export var useTreeView = function useTreeView(inParams) {
|
|
|
66
101
|
return {
|
|
67
102
|
getRootProps: getRootProps,
|
|
68
103
|
rootRef: handleRootRef,
|
|
69
|
-
contextValue: contextValue
|
|
104
|
+
contextValue: contextValue,
|
|
105
|
+
instance: instance
|
|
70
106
|
};
|
|
71
107
|
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export var buildWarning = function buildWarning(message) {
|
|
2
|
+
var gravity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'warning';
|
|
3
|
+
var alreadyWarned = false;
|
|
4
|
+
var cleanMessage = Array.isArray(message) ? message.join('\n') : message;
|
|
5
|
+
return function () {
|
|
6
|
+
if (!alreadyWarned) {
|
|
7
|
+
alreadyWarned = true;
|
|
8
|
+
if (gravity === 'error') {
|
|
9
|
+
console.error(cleanMessage);
|
|
10
|
+
} else {
|
|
11
|
+
console.warn(cleanMessage);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './items';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './items';
|
package/models/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './items';
|
package/models/items.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|