@mui/x-tree-view 7.0.0-alpha.1 → 7.0.0-alpha.8
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 +1380 -188
- package/README.md +0 -1
- package/RichTreeView/RichTreeView.d.ts +20 -0
- package/RichTreeView/RichTreeView.js +285 -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 +235 -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 +2 -7
- 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/MuiCancellableEvent.d.ts +4 -0
- package/internals/models/MuiCancellableEvent.js +1 -0
- package/internals/models/plugin.d.ts +24 -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 +14 -6
- package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.d.ts +1 -6
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +32 -17
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +12 -5
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +16 -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 +21 -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 +115 -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 +175 -121
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +5 -2
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +89 -17
- 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 +49 -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/useTreeView/useTreeViewModels.js +2 -2
- package/internals/utils/extractPluginParamsFromProps.d.ts +13 -0
- package/internals/utils/extractPluginParamsFromProps.js +27 -0
- package/internals/utils/warning.d.ts +1 -0
- package/internals/utils/warning.js +14 -0
- package/legacy/RichTreeView/RichTreeView.js +279 -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 +232 -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 +2 -7
- 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/models/MuiCancellableEvent.js +1 -0
- package/legacy/internals/plugins/defaultPlugins.js +2 -1
- package/legacy/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +17 -8
- package/legacy/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +32 -17
- package/legacy/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +16 -6
- package/legacy/internals/plugins/useTreeViewId/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewId/useTreeViewId.js +24 -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 +121 -0
- package/legacy/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +1 -0
- package/legacy/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +177 -119
- package/legacy/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +96 -20
- package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +53 -28
- package/legacy/internals/useTreeView/useTreeView.js +39 -3
- package/legacy/internals/useTreeView/useTreeViewModels.js +2 -2
- package/legacy/internals/utils/extractPluginParamsFromProps.js +27 -0
- 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 +283 -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 +234 -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 +2 -7
- 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/models/MuiCancellableEvent.js +1 -0
- package/modern/internals/plugins/defaultPlugins.js +2 -1
- package/modern/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +14 -6
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +33 -18
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +16 -7
- package/modern/internals/plugins/useTreeViewId/index.js +1 -0
- package/modern/internals/plugins/useTreeViewId/useTreeViewId.js +21 -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 +114 -0
- package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +1 -0
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +174 -121
- package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +88 -17
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +50 -29
- package/modern/internals/useTreeView/useTreeView.js +40 -3
- package/modern/internals/useTreeView/useTreeViewModels.js +2 -2
- package/modern/internals/utils/extractPluginParamsFromProps.js +27 -0
- 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 +291 -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 +242 -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 +2 -7
- 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/models/MuiCancellableEvent.js +5 -0
- package/node/internals/plugins/defaultPlugins.js +2 -1
- package/node/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +15 -8
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +33 -18
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +16 -7
- package/node/internals/plugins/useTreeViewId/index.js +12 -0
- package/node/internals/plugins/useTreeViewId/useTreeViewId.js +31 -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 +124 -0
- package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +5 -0
- package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +174 -121
- package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +89 -18
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +50 -29
- package/node/internals/useTreeView/useTreeView.js +40 -3
- package/node/internals/useTreeView/useTreeViewModels.js +2 -2
- package/node/internals/utils/extractPluginParamsFromProps.js +34 -0
- 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
|
@@ -12,23 +12,49 @@ var _useTreeView = require("../../useTreeView/useTreeView.utils");
|
|
|
12
12
|
var _publishTreeViewEvent = require("../../utils/publishTreeViewEvent");
|
|
13
13
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
14
14
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
15
|
+
const updateState = ({
|
|
16
|
+
items,
|
|
17
|
+
isItemDisabled,
|
|
18
|
+
getItemLabel,
|
|
19
|
+
getItemId
|
|
20
|
+
}) => {
|
|
21
|
+
const nodeMap = {};
|
|
22
|
+
const processItem = (item, index, parentId) => {
|
|
23
|
+
const id = getItemId ? getItemId(item) : item.id;
|
|
24
|
+
if (id == null) {
|
|
25
|
+
throw new Error(['MUI X: 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'));
|
|
26
|
+
}
|
|
27
|
+
const label = getItemLabel ? getItemLabel(item) : item.label;
|
|
28
|
+
if (label == null) {
|
|
29
|
+
throw new Error(['MUI X: 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'));
|
|
30
|
+
}
|
|
31
|
+
nodeMap[id] = {
|
|
32
|
+
id,
|
|
33
|
+
label,
|
|
34
|
+
index,
|
|
35
|
+
parentId,
|
|
36
|
+
idAttribute: id,
|
|
37
|
+
expandable: !!item.children?.length,
|
|
38
|
+
disabled: isItemDisabled ? isItemDisabled(item) : false
|
|
39
|
+
};
|
|
40
|
+
return {
|
|
41
|
+
id,
|
|
42
|
+
children: item.children?.map((child, childIndex) => processItem(child, childIndex, id))
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
const nodeTree = items.map((item, itemIndex) => processItem(item, itemIndex, null));
|
|
46
|
+
return {
|
|
47
|
+
nodeMap,
|
|
48
|
+
nodeTree
|
|
49
|
+
};
|
|
50
|
+
};
|
|
15
51
|
const useTreeViewNodes = ({
|
|
16
52
|
instance,
|
|
17
|
-
params
|
|
53
|
+
params,
|
|
54
|
+
state,
|
|
55
|
+
setState
|
|
18
56
|
}) => {
|
|
19
|
-
const
|
|
20
|
-
const getNode = React.useCallback(nodeId => nodeMap.current[nodeId], []);
|
|
21
|
-
const insertNode = React.useCallback(node => {
|
|
22
|
-
nodeMap.current[node.id] = node;
|
|
23
|
-
}, []);
|
|
24
|
-
const removeNode = React.useCallback(nodeId => {
|
|
25
|
-
const newMap = (0, _extends2.default)({}, nodeMap.current);
|
|
26
|
-
delete newMap[nodeId];
|
|
27
|
-
nodeMap.current = newMap;
|
|
28
|
-
(0, _publishTreeViewEvent.publishTreeViewEvent)(instance, 'removeNode', {
|
|
29
|
-
id: nodeId
|
|
30
|
-
});
|
|
31
|
-
}, [instance]);
|
|
57
|
+
const getNode = React.useCallback(nodeId => state.nodeMap[nodeId], [state.nodeMap]);
|
|
32
58
|
const isNodeDisabled = React.useCallback(nodeId => {
|
|
33
59
|
if (nodeId == null) {
|
|
34
60
|
return false;
|
|
@@ -50,7 +76,7 @@ const useTreeViewNodes = ({
|
|
|
50
76
|
}
|
|
51
77
|
return false;
|
|
52
78
|
}, [instance]);
|
|
53
|
-
const getChildrenIds = (0, _useEventCallback.default)(nodeId => Object.values(nodeMap
|
|
79
|
+
const getChildrenIds = (0, _useEventCallback.default)(nodeId => Object.values(state.nodeMap).filter(node => node.parentId === nodeId).sort((a, b) => a.index - b.index).map(child => child.id));
|
|
54
80
|
const getNavigableChildrenIds = nodeId => {
|
|
55
81
|
let childrenIds = instance.getChildrenIds(nodeId);
|
|
56
82
|
if (!params.disabledItemsFocusable) {
|
|
@@ -58,13 +84,58 @@ const useTreeViewNodes = ({
|
|
|
58
84
|
}
|
|
59
85
|
return childrenIds;
|
|
60
86
|
};
|
|
87
|
+
React.useEffect(() => {
|
|
88
|
+
setState(prevState => {
|
|
89
|
+
const newState = updateState({
|
|
90
|
+
items: params.items,
|
|
91
|
+
isItemDisabled: params.isItemDisabled,
|
|
92
|
+
getItemId: params.getItemId,
|
|
93
|
+
getItemLabel: params.getItemLabel
|
|
94
|
+
});
|
|
95
|
+
Object.values(prevState.nodeMap).forEach(node => {
|
|
96
|
+
if (!newState.nodeMap[node.id]) {
|
|
97
|
+
(0, _publishTreeViewEvent.publishTreeViewEvent)(instance, 'removeNode', {
|
|
98
|
+
id: node.id
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
return (0, _extends2.default)({}, prevState, newState);
|
|
103
|
+
});
|
|
104
|
+
}, [instance, setState, params.items, params.isItemDisabled, params.getItemId, params.getItemLabel]);
|
|
105
|
+
const getNodesToRender = (0, _useEventCallback.default)(() => {
|
|
106
|
+
const getPropsFromNodeId = ({
|
|
107
|
+
id,
|
|
108
|
+
children
|
|
109
|
+
}) => {
|
|
110
|
+
const node = state.nodeMap[id];
|
|
111
|
+
return {
|
|
112
|
+
label: node.label,
|
|
113
|
+
nodeId: node.id,
|
|
114
|
+
id: node.idAttribute,
|
|
115
|
+
children: children?.map(getPropsFromNodeId)
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
return state.nodeTree.map(getPropsFromNodeId);
|
|
119
|
+
});
|
|
61
120
|
(0, _useTreeView.populateInstance)(instance, {
|
|
62
121
|
getNode,
|
|
63
|
-
|
|
64
|
-
removeNode,
|
|
122
|
+
getNodesToRender,
|
|
65
123
|
getChildrenIds,
|
|
66
124
|
getNavigableChildrenIds,
|
|
67
125
|
isNodeDisabled
|
|
68
126
|
});
|
|
69
127
|
};
|
|
70
|
-
exports.useTreeViewNodes = useTreeViewNodes;
|
|
128
|
+
exports.useTreeViewNodes = useTreeViewNodes;
|
|
129
|
+
useTreeViewNodes.getInitialState = params => updateState({
|
|
130
|
+
items: params.items,
|
|
131
|
+
isItemDisabled: params.isItemDisabled,
|
|
132
|
+
getItemId: params.getItemId,
|
|
133
|
+
getItemLabel: params.getItemLabel
|
|
134
|
+
});
|
|
135
|
+
useTreeViewNodes.params = {
|
|
136
|
+
disabledItemsFocusable: true,
|
|
137
|
+
items: true,
|
|
138
|
+
isItemDisabled: true,
|
|
139
|
+
getItemLabel: true,
|
|
140
|
+
getItemId: true
|
|
141
|
+
};
|
|
@@ -19,30 +19,49 @@ const useTreeViewSelection = ({
|
|
|
19
19
|
const lastSelectedNode = React.useRef(null);
|
|
20
20
|
const lastSelectionWasRange = React.useRef(false);
|
|
21
21
|
const currentRangeSelection = React.useRef([]);
|
|
22
|
-
const isNodeSelected = nodeId => Array.isArray(models.
|
|
22
|
+
const isNodeSelected = nodeId => Array.isArray(models.selectedNodes.value) ? models.selectedNodes.value.indexOf(nodeId) !== -1 : models.selectedNodes.value === nodeId;
|
|
23
|
+
const setSelectedNodes = (event, newSelectedNodes) => {
|
|
24
|
+
if (params.onNodeSelectionToggle) {
|
|
25
|
+
if (params.multiSelect) {
|
|
26
|
+
const addedNodes = newSelectedNodes.filter(nodeId => !instance.isNodeSelected(nodeId));
|
|
27
|
+
const removedNodes = models.selectedNodes.value.filter(nodeId => !newSelectedNodes.includes(nodeId));
|
|
28
|
+
addedNodes.forEach(nodeId => {
|
|
29
|
+
params.onNodeSelectionToggle(event, nodeId, true);
|
|
30
|
+
});
|
|
31
|
+
removedNodes.forEach(nodeId => {
|
|
32
|
+
params.onNodeSelectionToggle(event, nodeId, false);
|
|
33
|
+
});
|
|
34
|
+
} else if (newSelectedNodes !== models.selectedNodes.value) {
|
|
35
|
+
if (models.selectedNodes.value != null) {
|
|
36
|
+
params.onNodeSelectionToggle(event, models.selectedNodes.value, false);
|
|
37
|
+
}
|
|
38
|
+
if (newSelectedNodes != null) {
|
|
39
|
+
params.onNodeSelectionToggle(event, newSelectedNodes, true);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (params.onSelectedNodesChange) {
|
|
44
|
+
params.onSelectedNodesChange(event, newSelectedNodes);
|
|
45
|
+
}
|
|
46
|
+
models.selectedNodes.setValue(newSelectedNodes);
|
|
47
|
+
};
|
|
23
48
|
const selectNode = (event, nodeId, multiple = false) => {
|
|
24
49
|
if (params.disableSelection) {
|
|
25
50
|
return;
|
|
26
51
|
}
|
|
27
52
|
if (multiple) {
|
|
28
|
-
if (Array.isArray(models.
|
|
53
|
+
if (Array.isArray(models.selectedNodes.value)) {
|
|
29
54
|
let newSelected;
|
|
30
|
-
if (models.
|
|
31
|
-
newSelected = models.
|
|
55
|
+
if (models.selectedNodes.value.indexOf(nodeId) !== -1) {
|
|
56
|
+
newSelected = models.selectedNodes.value.filter(id => id !== nodeId);
|
|
32
57
|
} else {
|
|
33
|
-
newSelected = [nodeId].concat(models.
|
|
58
|
+
newSelected = [nodeId].concat(models.selectedNodes.value);
|
|
34
59
|
}
|
|
35
|
-
|
|
36
|
-
params.onNodeSelect(event, newSelected);
|
|
37
|
-
}
|
|
38
|
-
models.selected.setValue(newSelected);
|
|
60
|
+
setSelectedNodes(event, newSelected);
|
|
39
61
|
}
|
|
40
62
|
} else {
|
|
41
63
|
const newSelected = params.multiSelect ? [nodeId] : nodeId;
|
|
42
|
-
|
|
43
|
-
params.onNodeSelect(event, newSelected);
|
|
44
|
-
}
|
|
45
|
-
models.selected.setValue(newSelected);
|
|
64
|
+
setSelectedNodes(event, newSelected);
|
|
46
65
|
}
|
|
47
66
|
lastSelectedNode.current = nodeId;
|
|
48
67
|
lastSelectionWasRange.current = false;
|
|
@@ -59,7 +78,7 @@ const useTreeViewSelection = ({
|
|
|
59
78
|
return nodes;
|
|
60
79
|
};
|
|
61
80
|
const handleRangeArrowSelect = (event, nodes) => {
|
|
62
|
-
let base = models.
|
|
81
|
+
let base = models.selectedNodes.value.slice();
|
|
63
82
|
const {
|
|
64
83
|
start,
|
|
65
84
|
next,
|
|
@@ -83,13 +102,10 @@ const useTreeViewSelection = ({
|
|
|
83
102
|
base.push(next);
|
|
84
103
|
currentRangeSelection.current.push(current, next);
|
|
85
104
|
}
|
|
86
|
-
|
|
87
|
-
params.onNodeSelect(event, base);
|
|
88
|
-
}
|
|
89
|
-
models.selected.setValue(base);
|
|
105
|
+
setSelectedNodes(event, base);
|
|
90
106
|
};
|
|
91
107
|
const handleRangeSelect = (event, nodes) => {
|
|
92
|
-
let base = models.
|
|
108
|
+
let base = models.selectedNodes.value.slice();
|
|
93
109
|
const {
|
|
94
110
|
start,
|
|
95
111
|
end
|
|
@@ -103,10 +119,7 @@ const useTreeViewSelection = ({
|
|
|
103
119
|
currentRangeSelection.current = range;
|
|
104
120
|
let newSelected = base.concat(range);
|
|
105
121
|
newSelected = newSelected.filter((id, i) => newSelected.indexOf(id) === i);
|
|
106
|
-
|
|
107
|
-
params.onNodeSelect(event, newSelected);
|
|
108
|
-
}
|
|
109
|
-
models.selected.setValue(newSelected);
|
|
122
|
+
setSelectedNodes(event, newSelected);
|
|
110
123
|
};
|
|
111
124
|
const selectRange = (event, nodes, stacked = false) => {
|
|
112
125
|
if (params.disableSelection) {
|
|
@@ -166,14 +179,22 @@ const useTreeViewSelection = ({
|
|
|
166
179
|
};
|
|
167
180
|
exports.useTreeViewSelection = useTreeViewSelection;
|
|
168
181
|
useTreeViewSelection.models = {
|
|
169
|
-
|
|
170
|
-
controlledProp: '
|
|
171
|
-
defaultProp: '
|
|
182
|
+
selectedNodes: {
|
|
183
|
+
controlledProp: 'selectedNodes',
|
|
184
|
+
defaultProp: 'defaultSelectedNodes'
|
|
172
185
|
}
|
|
173
186
|
};
|
|
174
|
-
const
|
|
187
|
+
const DEFAULT_SELECTED_NODES = [];
|
|
175
188
|
useTreeViewSelection.getDefaultizedParams = params => (0, _extends2.default)({}, params, {
|
|
176
189
|
disableSelection: params.disableSelection ?? false,
|
|
177
190
|
multiSelect: params.multiSelect ?? false,
|
|
178
|
-
|
|
179
|
-
});
|
|
191
|
+
defaultSelectedNodes: params.defaultSelectedNodes ?? (params.multiSelect ? DEFAULT_SELECTED_NODES : null)
|
|
192
|
+
});
|
|
193
|
+
useTreeViewSelection.params = {
|
|
194
|
+
disableSelection: true,
|
|
195
|
+
multiSelect: true,
|
|
196
|
+
defaultSelectedNodes: true,
|
|
197
|
+
selectedNodes: true,
|
|
198
|
+
onSelectedNodesChange: true,
|
|
199
|
+
onNodeSelectionToggle: true
|
|
200
|
+
};
|
|
@@ -8,7 +8,6 @@ exports.useTreeView = void 0;
|
|
|
8
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
9
|
var React = _interopRequireWildcard(require("react"));
|
|
10
10
|
var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
|
|
11
|
-
var _TreeViewContext = require("../TreeViewProvider/TreeViewContext");
|
|
12
11
|
var _useTreeViewModels = require("./useTreeViewModels");
|
|
13
12
|
var _corePlugins = require("../corePlugins");
|
|
14
13
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
@@ -36,7 +35,7 @@ const useTreeView = inParams => {
|
|
|
36
35
|
return temp;
|
|
37
36
|
});
|
|
38
37
|
const rootPropsGetters = [];
|
|
39
|
-
let contextValue =
|
|
38
|
+
let contextValue = {};
|
|
40
39
|
const runPlugin = plugin => {
|
|
41
40
|
const pluginResponse = plugin({
|
|
42
41
|
instance,
|
|
@@ -54,6 +53,43 @@ const useTreeView = inParams => {
|
|
|
54
53
|
}
|
|
55
54
|
};
|
|
56
55
|
plugins.forEach(runPlugin);
|
|
56
|
+
contextValue.runItemPlugins = ({
|
|
57
|
+
props,
|
|
58
|
+
ref
|
|
59
|
+
}) => {
|
|
60
|
+
let finalProps = props;
|
|
61
|
+
let finalRef = ref;
|
|
62
|
+
const itemWrappers = [];
|
|
63
|
+
plugins.forEach(plugin => {
|
|
64
|
+
if (!plugin.itemPlugin) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const itemPluginResponse = plugin.itemPlugin({
|
|
68
|
+
props: finalProps,
|
|
69
|
+
ref: finalRef
|
|
70
|
+
});
|
|
71
|
+
if (itemPluginResponse?.props) {
|
|
72
|
+
finalProps = itemPluginResponse.props;
|
|
73
|
+
}
|
|
74
|
+
if (itemPluginResponse?.ref) {
|
|
75
|
+
finalRef = itemPluginResponse.ref;
|
|
76
|
+
}
|
|
77
|
+
if (itemPluginResponse?.wrapItem) {
|
|
78
|
+
itemWrappers.push(itemPluginResponse.wrapItem);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
return {
|
|
82
|
+
props: finalProps,
|
|
83
|
+
ref: finalRef,
|
|
84
|
+
wrapItem: children => {
|
|
85
|
+
let finalChildren = children;
|
|
86
|
+
itemWrappers.forEach(itemWrapper => {
|
|
87
|
+
finalChildren = itemWrapper(finalChildren);
|
|
88
|
+
});
|
|
89
|
+
return finalChildren;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
};
|
|
57
93
|
const getRootProps = (otherHandlers = {}) => {
|
|
58
94
|
const rootProps = (0, _extends2.default)({
|
|
59
95
|
role: 'tree',
|
|
@@ -69,7 +105,8 @@ const useTreeView = inParams => {
|
|
|
69
105
|
return {
|
|
70
106
|
getRootProps,
|
|
71
107
|
rootRef: handleRootRef,
|
|
72
|
-
contextValue
|
|
108
|
+
contextValue,
|
|
109
|
+
instance: instance
|
|
73
110
|
};
|
|
74
111
|
};
|
|
75
112
|
exports.useTreeView = useTreeView;
|
|
@@ -53,7 +53,7 @@ const useTreeViewModels = (plugins, props) => {
|
|
|
53
53
|
const defaultProp = props[model.defaultProp];
|
|
54
54
|
React.useEffect(() => {
|
|
55
55
|
if (model.isControlled !== (controlled !== undefined)) {
|
|
56
|
-
console.error([`MUI: A component is changing the ${model.isControlled ? '' : 'un'}controlled ${modelName} state of TreeView to be ${model.isControlled ? 'un' : ''}controlled.`, 'Elements should not switch from uncontrolled to controlled (or vice versa).', `Decide between using a controlled or uncontrolled ${modelName} ` + 'element for the lifetime of the component.', "The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.", 'More info: https://fb.me/react-controlled-components'].join('\n'));
|
|
56
|
+
console.error([`MUI X: A component is changing the ${model.isControlled ? '' : 'un'}controlled ${modelName} state of TreeView to be ${model.isControlled ? 'un' : ''}controlled.`, 'Elements should not switch from uncontrolled to controlled (or vice versa).', `Decide between using a controlled or uncontrolled ${modelName} ` + 'element for the lifetime of the component.', "The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.", 'More info: https://fb.me/react-controlled-components'].join('\n'));
|
|
57
57
|
}
|
|
58
58
|
}, [controlled]);
|
|
59
59
|
const {
|
|
@@ -61,7 +61,7 @@ const useTreeViewModels = (plugins, props) => {
|
|
|
61
61
|
} = React.useRef(defaultProp);
|
|
62
62
|
React.useEffect(() => {
|
|
63
63
|
if (!model.isControlled && defaultValue !== defaultProp) {
|
|
64
|
-
console.error([`MUI: A component is changing the default ${modelName} state of an uncontrolled TreeView after being initialized. ` + `To suppress this warning opt to use a controlled TreeView.`].join('\n'));
|
|
64
|
+
console.error([`MUI X: A component is changing the default ${modelName} state of an uncontrolled TreeView after being initialized. ` + `To suppress this warning opt to use a controlled TreeView.`].join('\n'));
|
|
65
65
|
}
|
|
66
66
|
}, [JSON.stringify(defaultValue)]);
|
|
67
67
|
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.extractPluginParamsFromProps = void 0;
|
|
7
|
+
const extractPluginParamsFromProps = ({
|
|
8
|
+
props,
|
|
9
|
+
plugins,
|
|
10
|
+
rootRef
|
|
11
|
+
}) => {
|
|
12
|
+
const paramsLookup = {};
|
|
13
|
+
plugins.forEach(plugin => {
|
|
14
|
+
Object.assign(paramsLookup, plugin.params);
|
|
15
|
+
});
|
|
16
|
+
const pluginParams = {
|
|
17
|
+
plugins,
|
|
18
|
+
rootRef
|
|
19
|
+
};
|
|
20
|
+
const otherProps = {};
|
|
21
|
+
Object.keys(props).forEach(propName => {
|
|
22
|
+
const prop = props[propName];
|
|
23
|
+
if (paramsLookup[propName]) {
|
|
24
|
+
pluginParams[propName] = prop;
|
|
25
|
+
} else {
|
|
26
|
+
otherProps[propName] = prop;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
return {
|
|
30
|
+
pluginParams,
|
|
31
|
+
otherProps
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
exports.extractPluginParamsFromProps = extractPluginParamsFromProps;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.buildWarning = void 0;
|
|
7
|
+
const buildWarning = (message, gravity = 'warning') => {
|
|
8
|
+
let alreadyWarned = false;
|
|
9
|
+
const cleanMessage = Array.isArray(message) ? message.join('\n') : message;
|
|
10
|
+
return () => {
|
|
11
|
+
if (!alreadyWarned) {
|
|
12
|
+
alreadyWarned = true;
|
|
13
|
+
if (gravity === 'error') {
|
|
14
|
+
console.error(cleanMessage);
|
|
15
|
+
} else {
|
|
16
|
+
console.warn(cleanMessage);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
exports.buildWarning = buildWarning;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _items = require("./items");
|
|
7
|
+
Object.keys(_items).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _items[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _items[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mui/x-tree-view",
|
|
3
|
-
"version": "7.0.0-alpha.
|
|
3
|
+
"version": "7.0.0-alpha.8",
|
|
4
4
|
"description": "The community edition of the tree view components (MUI X).",
|
|
5
5
|
"author": "MUI Team",
|
|
6
6
|
"main": "./node/index.js",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"homepage": "https://mui.com/x/react-tree-view/",
|
|
12
12
|
"funding": {
|
|
13
13
|
"type": "opencollective",
|
|
14
|
-
"url": "https://opencollective.com/mui"
|
|
14
|
+
"url": "https://opencollective.com/mui-org"
|
|
15
15
|
},
|
|
16
16
|
"sideEffects": false,
|
|
17
17
|
"publishConfig": {
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
"react",
|
|
22
22
|
"react-component",
|
|
23
23
|
"mui",
|
|
24
|
+
"mui-x",
|
|
24
25
|
"material-ui",
|
|
25
26
|
"material design",
|
|
26
27
|
"treeview"
|
|
@@ -31,10 +32,11 @@
|
|
|
31
32
|
"directory": "packages/x-tree-view"
|
|
32
33
|
},
|
|
33
34
|
"dependencies": {
|
|
34
|
-
"@babel/runtime": "^7.23.
|
|
35
|
-
"@mui/base": "^5.0.0-beta.
|
|
36
|
-
"@mui/
|
|
37
|
-
"@
|
|
35
|
+
"@babel/runtime": "^7.23.7",
|
|
36
|
+
"@mui/base": "^5.0.0-beta.29",
|
|
37
|
+
"@mui/system": "^5.15.2",
|
|
38
|
+
"@mui/utils": "^5.15.2",
|
|
39
|
+
"@types/react-transition-group": "^4.4.10",
|
|
38
40
|
"clsx": "^2.0.0",
|
|
39
41
|
"prop-types": "^15.8.1",
|
|
40
42
|
"react-transition-group": "^4.4.5"
|
|
@@ -43,7 +45,6 @@
|
|
|
43
45
|
"@emotion/react": "^11.9.0",
|
|
44
46
|
"@emotion/styled": "^11.8.1",
|
|
45
47
|
"@mui/material": "^5.8.6",
|
|
46
|
-
"@mui/system": "^5.8.0",
|
|
47
48
|
"react": "^17.0.0 || ^18.0.0",
|
|
48
49
|
"react-dom": "^17.0.0 || ^18.0.0"
|
|
49
50
|
},
|
|
@@ -1,16 +1,26 @@
|
|
|
1
1
|
import { ComponentsProps, ComponentsOverrides, ComponentsVariants } from '@mui/material/styles';
|
|
2
2
|
|
|
3
3
|
export interface TreeViewComponents<Theme = unknown> {
|
|
4
|
-
|
|
5
|
-
defaultProps?: ComponentsProps['
|
|
6
|
-
styleOverrides?: ComponentsOverrides<Theme>['
|
|
7
|
-
variants?: ComponentsVariants['
|
|
4
|
+
MuiSimpleTreeView?: {
|
|
5
|
+
defaultProps?: ComponentsProps['MuiSimpleTreeView'];
|
|
6
|
+
styleOverrides?: ComponentsOverrides<Theme>['MuiSimpleTreeView'];
|
|
7
|
+
variants?: ComponentsVariants['MuiSimpleTreeView'];
|
|
8
|
+
};
|
|
9
|
+
MuiRichTreeView?: {
|
|
10
|
+
defaultProps?: ComponentsProps['MuiRichTreeView'];
|
|
11
|
+
styleOverrides?: ComponentsOverrides<Theme>['MuiRichTreeView'];
|
|
12
|
+
variants?: ComponentsVariants['MuiRichTreeView'];
|
|
8
13
|
};
|
|
9
14
|
MuiTreeView?: {
|
|
10
15
|
defaultProps?: ComponentsProps['MuiTreeView'];
|
|
11
16
|
styleOverrides?: ComponentsOverrides<Theme>['MuiTreeView'];
|
|
12
17
|
variants?: ComponentsVariants['MuiTreeView'];
|
|
13
18
|
};
|
|
19
|
+
MuiTreeItem?: {
|
|
20
|
+
defaultProps?: ComponentsProps['MuiTreeItem'];
|
|
21
|
+
styleOverrides?: ComponentsOverrides<Theme>['MuiTreeItem'];
|
|
22
|
+
variants?: ComponentsVariants['MuiTreeItem'];
|
|
23
|
+
};
|
|
14
24
|
}
|
|
15
25
|
|
|
16
26
|
declare module '@mui/material/styles' {
|
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RichTreeViewClassKey } from '../RichTreeView';
|
|
2
|
+
import { SimpleTreeViewClassKey } from '../SimpleTreeView';
|
|
2
3
|
import { TreeViewClassKey } from '../TreeView';
|
|
4
|
+
import { TreeItemClassKey } from '../TreeItem';
|
|
3
5
|
|
|
4
6
|
// prettier-ignore
|
|
5
|
-
export interface
|
|
6
|
-
|
|
7
|
+
export interface TreeViewComponentNameToClassKey {
|
|
8
|
+
MuiSimpleTreeView: SimpleTreeViewClassKey;
|
|
9
|
+
MuiRichTreeView: RichTreeViewClassKey;
|
|
7
10
|
MuiTreeView: TreeViewClassKey;
|
|
11
|
+
MuiTreeItem: TreeItemClassKey;
|
|
8
12
|
}
|
|
9
13
|
|
|
10
14
|
declare module '@mui/material/styles' {
|
|
11
|
-
interface ComponentNameToClassKey extends
|
|
15
|
+
interface ComponentNameToClassKey extends TreeViewComponentNameToClassKey {}
|
|
12
16
|
}
|
|
13
17
|
|
|
14
18
|
// disable automatic export
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import { TreeItemProps } from '../TreeItem';
|
|
2
2
|
import { TreeViewProps } from '../TreeView';
|
|
3
|
+
import { SimpleTreeViewProps } from '../SimpleTreeView';
|
|
4
|
+
import { RichTreeViewProps } from '../RichTreeView';
|
|
3
5
|
|
|
4
|
-
export interface
|
|
5
|
-
|
|
6
|
+
export interface TreeViewComponentsPropsList {
|
|
7
|
+
MuiSimpleTreeView: SimpleTreeViewProps<any>;
|
|
8
|
+
MuiRichTreeView: RichTreeViewProps<any, any>;
|
|
6
9
|
MuiTreeView: TreeViewProps<any>;
|
|
10
|
+
MuiTreeItem: TreeItemProps;
|
|
7
11
|
}
|
|
8
12
|
|
|
9
13
|
declare module '@mui/material/styles' {
|
|
10
|
-
interface ComponentsPropsList extends
|
|
14
|
+
interface ComponentsPropsList extends TreeViewComponentsPropsList {}
|
|
11
15
|
}
|
|
12
16
|
|
|
13
17
|
// disable automatic export
|