@mui/x-tree-view 7.8.0 → 7.10.0

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 (60) hide show
  1. package/CHANGELOG.md +140 -0
  2. package/RichTreeView/RichTreeView.js +9 -5
  3. package/SimpleTreeView/SimpleTreeView.js +9 -5
  4. package/TreeItem/useTreeItemState.js +16 -3
  5. package/TreeView/TreeView.js +9 -5
  6. package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +16 -3
  7. package/index.js +1 -1
  8. package/internals/corePlugins/corePlugins.d.ts +1 -1
  9. package/internals/corePlugins/corePlugins.js +2 -1
  10. package/internals/corePlugins/useTreeViewOptionalPlugins/index.d.ts +2 -0
  11. package/internals/corePlugins/useTreeViewOptionalPlugins/index.js +1 -0
  12. package/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.d.ts +3 -0
  13. package/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.js +12 -0
  14. package/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.types.d.ts +8 -0
  15. package/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.types.js +1 -0
  16. package/internals/models/plugin.d.ts +1 -0
  17. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +7 -7
  18. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +1 -2
  19. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +2 -2
  20. package/internals/plugins/useTreeViewItems/useTreeViewItems.js +28 -3
  21. package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +20 -9
  22. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +15 -5
  23. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +12 -4
  24. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +25 -16
  25. package/internals/useTreeView/useTreeView.js +2 -1
  26. package/internals/utils/plugins.d.ts +2 -0
  27. package/internals/utils/plugins.js +4 -0
  28. package/modern/RichTreeView/RichTreeView.js +9 -5
  29. package/modern/SimpleTreeView/SimpleTreeView.js +9 -5
  30. package/modern/TreeItem/useTreeItemState.js +16 -3
  31. package/modern/TreeView/TreeView.js +9 -5
  32. package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +16 -3
  33. package/modern/index.js +1 -1
  34. package/modern/internals/corePlugins/corePlugins.js +2 -1
  35. package/modern/internals/corePlugins/useTreeViewOptionalPlugins/index.js +1 -0
  36. package/modern/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.js +12 -0
  37. package/modern/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.types.js +1 -0
  38. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +1 -2
  39. package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.js +28 -3
  40. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +15 -5
  41. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +12 -4
  42. package/modern/internals/useTreeView/useTreeView.js +2 -1
  43. package/modern/internals/utils/plugins.js +4 -0
  44. package/node/RichTreeView/RichTreeView.js +9 -5
  45. package/node/SimpleTreeView/SimpleTreeView.js +9 -5
  46. package/node/TreeItem/useTreeItemState.js +16 -3
  47. package/node/TreeView/TreeView.js +9 -5
  48. package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +16 -3
  49. package/node/index.js +1 -1
  50. package/node/internals/corePlugins/corePlugins.js +2 -1
  51. package/node/internals/corePlugins/useTreeViewOptionalPlugins/index.js +12 -0
  52. package/node/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.js +19 -0
  53. package/node/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.types.js +5 -0
  54. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +1 -2
  55. package/node/internals/plugins/useTreeViewItems/useTreeViewItems.js +28 -3
  56. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +15 -5
  57. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +12 -4
  58. package/node/internals/useTreeView/useTreeView.js +2 -1
  59. package/node/internals/utils/plugins.js +11 -0
  60. package/package.json +3 -3
@@ -146,6 +146,10 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
146
146
  current: _propTypes.default.shape({
147
147
  focusItem: _propTypes.default.func.isRequired,
148
148
  getItem: _propTypes.default.func.isRequired,
149
+ getItemDOMElement: _propTypes.default.func.isRequired,
150
+ getItemOrderedChildrenIds: _propTypes.default.func.isRequired,
151
+ getItemTree: _propTypes.default.func.isRequired,
152
+ selectItem: _propTypes.default.func.isRequired,
149
153
  setItemExpansion: _propTypes.default.func.isRequired
150
154
  })
151
155
  }),
@@ -243,34 +247,34 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
243
247
  multiSelect: _propTypes.default.bool,
244
248
  /**
245
249
  * Callback fired when tree items are expanded/collapsed.
246
- * @param {React.SyntheticEvent} event The event source of the callback.
250
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
247
251
  * @param {array} itemIds The ids of the expanded items.
248
252
  */
249
253
  onExpandedItemsChange: _propTypes.default.func,
250
254
  /**
251
255
  * Callback fired when a tree item is expanded or collapsed.
252
- * @param {React.SyntheticEvent} event The event source of the callback.
256
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
253
257
  * @param {array} itemId The itemId of the modified item.
254
258
  * @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
255
259
  */
256
260
  onItemExpansionToggle: _propTypes.default.func,
257
261
  /**
258
262
  * Callback fired when tree items are focused.
259
- * @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
263
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change. **Warning**: This is a generic event not a focus event.
260
264
  * @param {string} itemId The id of the focused item.
261
265
  * @param {string} value of the focused item.
262
266
  */
263
267
  onItemFocus: _propTypes.default.func,
264
268
  /**
265
269
  * Callback fired when a tree item is selected or deselected.
266
- * @param {React.SyntheticEvent} event The event source of the callback.
270
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
267
271
  * @param {array} itemId The itemId of the modified item.
268
272
  * @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
269
273
  */
270
274
  onItemSelectionToggle: _propTypes.default.func,
271
275
  /**
272
276
  * Callback fired when tree items are selected/deselected.
273
- * @param {React.SyntheticEvent} event The event source of the callback
277
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
274
278
  * @param {string[] | string} itemIds The ids of the selected items.
275
279
  * When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
276
280
  */
@@ -104,6 +104,10 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
104
104
  current: _propTypes.default.shape({
105
105
  focusItem: _propTypes.default.func.isRequired,
106
106
  getItem: _propTypes.default.func.isRequired,
107
+ getItemDOMElement: _propTypes.default.func.isRequired,
108
+ getItemOrderedChildrenIds: _propTypes.default.func.isRequired,
109
+ getItemTree: _propTypes.default.func.isRequired,
110
+ selectItem: _propTypes.default.func.isRequired,
107
111
  setItemExpansion: _propTypes.default.func.isRequired
108
112
  })
109
113
  }),
@@ -179,34 +183,34 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
179
183
  multiSelect: _propTypes.default.bool,
180
184
  /**
181
185
  * Callback fired when tree items are expanded/collapsed.
182
- * @param {React.SyntheticEvent} event The event source of the callback.
186
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
183
187
  * @param {array} itemIds The ids of the expanded items.
184
188
  */
185
189
  onExpandedItemsChange: _propTypes.default.func,
186
190
  /**
187
191
  * Callback fired when a tree item is expanded or collapsed.
188
- * @param {React.SyntheticEvent} event The event source of the callback.
192
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
189
193
  * @param {array} itemId The itemId of the modified item.
190
194
  * @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
191
195
  */
192
196
  onItemExpansionToggle: _propTypes.default.func,
193
197
  /**
194
198
  * Callback fired when tree items are focused.
195
- * @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
199
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change. **Warning**: This is a generic event not a focus event.
196
200
  * @param {string} itemId The id of the focused item.
197
201
  * @param {string} value of the focused item.
198
202
  */
199
203
  onItemFocus: _propTypes.default.func,
200
204
  /**
201
205
  * Callback fired when a tree item is selected or deselected.
202
- * @param {React.SyntheticEvent} event The event source of the callback.
206
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
203
207
  * @param {array} itemId The itemId of the modified item.
204
208
  * @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
205
209
  */
206
210
  onItemSelectionToggle: _propTypes.default.func,
207
211
  /**
208
212
  * Callback fired when tree items are selected/deselected.
209
- * @param {React.SyntheticEvent} event The event source of the callback
213
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
210
214
  * @param {string[] | string} itemIds The ids of the selected items.
211
215
  * When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
212
216
  */
@@ -45,10 +45,18 @@ function useTreeItemState(itemId) {
45
45
  if (event.shiftKey) {
46
46
  instance.expandSelectionRange(event, itemId);
47
47
  } else {
48
- instance.selectItem(event, itemId, true);
48
+ instance.selectItem({
49
+ event,
50
+ itemId,
51
+ keepExistingSelection: true
52
+ });
49
53
  }
50
54
  } else {
51
- instance.selectItem(event, itemId, false);
55
+ instance.selectItem({
56
+ event,
57
+ itemId,
58
+ shouldBeSelected: true
59
+ });
52
60
  }
53
61
  }
54
62
  };
@@ -60,7 +68,12 @@ function useTreeItemState(itemId) {
60
68
  if (multiSelect && hasShift) {
61
69
  instance.expandSelectionRange(event, itemId);
62
70
  } else {
63
- instance.selectItem(event, itemId, multiSelect, event.target.checked);
71
+ instance.selectItem({
72
+ event,
73
+ itemId,
74
+ keepExistingSelection: multiSelect,
75
+ shouldBeSelected: event.target.checked
76
+ });
64
77
  }
65
78
  };
66
79
  const preventSelection = event => {
@@ -81,6 +81,10 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
81
81
  current: _propTypes.default.shape({
82
82
  focusItem: _propTypes.default.func.isRequired,
83
83
  getItem: _propTypes.default.func.isRequired,
84
+ getItemDOMElement: _propTypes.default.func.isRequired,
85
+ getItemOrderedChildrenIds: _propTypes.default.func.isRequired,
86
+ getItemTree: _propTypes.default.func.isRequired,
87
+ selectItem: _propTypes.default.func.isRequired,
84
88
  setItemExpansion: _propTypes.default.func.isRequired
85
89
  })
86
90
  }),
@@ -156,34 +160,34 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
156
160
  multiSelect: _propTypes.default.bool,
157
161
  /**
158
162
  * Callback fired when tree items are expanded/collapsed.
159
- * @param {React.SyntheticEvent} event The event source of the callback.
163
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
160
164
  * @param {array} itemIds The ids of the expanded items.
161
165
  */
162
166
  onExpandedItemsChange: _propTypes.default.func,
163
167
  /**
164
168
  * Callback fired when a tree item is expanded or collapsed.
165
- * @param {React.SyntheticEvent} event The event source of the callback.
169
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
166
170
  * @param {array} itemId The itemId of the modified item.
167
171
  * @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
168
172
  */
169
173
  onItemExpansionToggle: _propTypes.default.func,
170
174
  /**
171
175
  * Callback fired when tree items are focused.
172
- * @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
176
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change. **Warning**: This is a generic event not a focus event.
173
177
  * @param {string} itemId The id of the focused item.
174
178
  * @param {string} value of the focused item.
175
179
  */
176
180
  onItemFocus: _propTypes.default.func,
177
181
  /**
178
182
  * Callback fired when a tree item is selected or deselected.
179
- * @param {React.SyntheticEvent} event The event source of the callback.
183
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
180
184
  * @param {array} itemId The itemId of the modified item.
181
185
  * @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
182
186
  */
183
187
  onItemSelectionToggle: _propTypes.default.func,
184
188
  /**
185
189
  * Callback fired when tree items are selected/deselected.
186
- * @param {React.SyntheticEvent} event The event source of the callback
190
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
187
191
  * @param {string[] | string} itemIds The ids of the selected items.
188
192
  * When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
189
193
  */
@@ -63,10 +63,18 @@ const useTreeItem2Utils = ({
63
63
  if (event.shiftKey) {
64
64
  instance.expandSelectionRange(event, itemId);
65
65
  } else {
66
- instance.selectItem(event, itemId, true);
66
+ instance.selectItem({
67
+ event,
68
+ itemId,
69
+ keepExistingSelection: true
70
+ });
67
71
  }
68
72
  } else {
69
- instance.selectItem(event, itemId, false);
73
+ instance.selectItem({
74
+ event,
75
+ itemId,
76
+ shouldBeSelected: true
77
+ });
70
78
  }
71
79
  };
72
80
  const handleCheckboxSelection = event => {
@@ -74,7 +82,12 @@ const useTreeItem2Utils = ({
74
82
  if (multiSelect && hasShift) {
75
83
  instance.expandSelectionRange(event, itemId);
76
84
  } else {
77
- instance.selectItem(event, itemId, multiSelect, event.target.checked);
85
+ instance.selectItem({
86
+ event,
87
+ itemId,
88
+ keepExistingSelection: multiSelect,
89
+ shouldBeSelected: event.target.checked
90
+ });
78
91
  }
79
92
  };
80
93
  const interactions = {
package/node/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-tree-view v7.8.0
2
+ * @mui/x-tree-view v7.10.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -5,9 +5,10 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.TREE_VIEW_CORE_PLUGINS = void 0;
7
7
  var _useTreeViewInstanceEvents = require("./useTreeViewInstanceEvents");
8
+ var _useTreeViewOptionalPlugins = require("./useTreeViewOptionalPlugins");
8
9
  var _useTreeViewId = require("./useTreeViewId");
9
10
  /**
10
11
  * Internal plugins that create the tools used by the other plugins.
11
12
  * These plugins are used by the tree view components.
12
13
  */
13
- const TREE_VIEW_CORE_PLUGINS = exports.TREE_VIEW_CORE_PLUGINS = [_useTreeViewInstanceEvents.useTreeViewInstanceEvents, _useTreeViewId.useTreeViewId];
14
+ const TREE_VIEW_CORE_PLUGINS = exports.TREE_VIEW_CORE_PLUGINS = [_useTreeViewInstanceEvents.useTreeViewInstanceEvents, _useTreeViewOptionalPlugins.useTreeViewOptionalPlugins, _useTreeViewId.useTreeViewId];
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "useTreeViewOptionalPlugins", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _useTreeViewOptionalPlugins.useTreeViewOptionalPlugins;
10
+ }
11
+ });
12
+ var _useTreeViewOptionalPlugins = require("./useTreeViewOptionalPlugins");
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useTreeViewOptionalPlugins = void 0;
7
+ const useTreeViewOptionalPlugins = ({
8
+ plugins
9
+ }) => {
10
+ const pluginSet = new Set(plugins);
11
+ const getAvailablePlugins = () => pluginSet;
12
+ return {
13
+ instance: {
14
+ getAvailablePlugins
15
+ }
16
+ };
17
+ };
18
+ exports.useTreeViewOptionalPlugins = useTreeViewOptionalPlugins;
19
+ useTreeViewOptionalPlugins.params = {};
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -52,8 +52,7 @@ const useTreeViewFocus = ({
52
52
  return itemMeta && (itemMeta.parentId == null || instance.isItemExpanded(itemMeta.parentId));
53
53
  };
54
54
  const innerFocusItem = (event, itemId) => {
55
- const itemMeta = instance.getItemMeta(itemId);
56
- const itemElement = document.getElementById(instance.getTreeItemIdAttribute(itemId, itemMeta.idAttribute));
55
+ const itemElement = instance.getItemDOMElement(itemId);
57
56
  if (itemElement) {
58
57
  itemElement.focus();
59
58
  }
@@ -6,11 +6,13 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.useTreeViewItems = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
9
10
  var React = _interopRequireWildcard(require("react"));
10
11
  var _publishTreeViewEvent = require("../../utils/publishTreeViewEvent");
11
12
  var _useTreeViewItems = require("./useTreeViewItems.utils");
12
13
  var _TreeViewItemDepthContext = require("../../TreeViewItemDepthContext");
13
14
  var _jsxRuntime = require("react/jsx-runtime");
15
+ const _excluded = ["children"];
14
16
  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); }
15
17
  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 && {}.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; }
16
18
  const updateItemsState = ({
@@ -46,7 +48,6 @@ const updateItemsState = ({
46
48
  depth
47
49
  };
48
50
  itemMap[id] = item;
49
- itemOrderedChildrenIds[id] = [];
50
51
  const parentIdWithDefault = parentId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID;
51
52
  if (!itemOrderedChildrenIds[parentIdWithDefault]) {
52
53
  itemOrderedChildrenIds[parentIdWithDefault] = [];
@@ -75,6 +76,18 @@ const useTreeViewItems = ({
75
76
  }) => {
76
77
  const getItemMeta = React.useCallback(itemId => state.items.itemMetaMap[itemId], [state.items.itemMetaMap]);
77
78
  const getItem = React.useCallback(itemId => state.items.itemMap[itemId], [state.items.itemMap]);
79
+ const getItemTree = React.useCallback(() => {
80
+ const getItemFromItemId = id => {
81
+ const _state$items$itemMap$ = state.items.itemMap[id],
82
+ item = (0, _objectWithoutPropertiesLoose2.default)(_state$items$itemMap$, _excluded);
83
+ const newChildren = state.items.itemOrderedChildrenIds[id];
84
+ if (newChildren) {
85
+ item.children = newChildren.map(getItemFromItemId);
86
+ }
87
+ return item;
88
+ };
89
+ return state.items.itemOrderedChildrenIds[_useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID].map(getItemFromItemId);
90
+ }, [state.items.itemMap, state.items.itemOrderedChildrenIds]);
78
91
  const isItemDisabled = React.useCallback(itemId => {
79
92
  if (itemId == null) {
80
93
  return false;
@@ -101,6 +114,13 @@ const useTreeViewItems = ({
101
114
  return state.items.itemChildrenIndexes[parentId][itemId];
102
115
  }, [instance, state.items.itemChildrenIndexes]);
103
116
  const getItemOrderedChildrenIds = React.useCallback(itemId => state.items.itemOrderedChildrenIds[itemId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID] ?? [], [state.items.itemOrderedChildrenIds]);
117
+ const getItemDOMElement = itemId => {
118
+ const itemMeta = instance.getItemMeta(itemId);
119
+ if (itemMeta == null) {
120
+ return null;
121
+ }
122
+ return document.getElementById(instance.getTreeItemIdAttribute(itemId, itemMeta.idAttribute));
123
+ };
104
124
  const isItemNavigable = itemId => {
105
125
  if (params.disabledItemsFocusable) {
106
126
  return true;
@@ -142,7 +162,7 @@ const useTreeViewItems = ({
142
162
  label: item.label,
143
163
  itemId: item.id,
144
164
  id: item.idAttribute,
145
- children: state.items.itemOrderedChildrenIds[id].map(getPropsFromItemId)
165
+ children: state.items.itemOrderedChildrenIds[id]?.map(getPropsFromItemId)
146
166
  };
147
167
  };
148
168
  return state.items.itemOrderedChildrenIds[_useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID].map(getPropsFromItemId);
@@ -154,13 +174,18 @@ const useTreeViewItems = ({
154
174
  }
155
175
  }),
156
176
  publicAPI: {
157
- getItem
177
+ getItem,
178
+ getItemDOMElement,
179
+ getItemTree,
180
+ getItemOrderedChildrenIds
158
181
  },
159
182
  instance: {
160
183
  getItemMeta,
161
184
  getItem,
185
+ getItemTree,
162
186
  getItemsToRender,
163
187
  getItemIndex,
188
+ getItemDOMElement,
164
189
  getItemOrderedChildrenIds,
165
190
  isItemDisabled,
166
191
  isItemNavigable,
@@ -83,10 +83,13 @@ const useTreeViewKeyboardNavigation = ({
83
83
  event.preventDefault();
84
84
  if (params.multiSelect && event.shiftKey) {
85
85
  instance.expandSelectionRange(event, itemId);
86
- } else if (params.multiSelect) {
87
- instance.selectItem(event, itemId, true);
88
86
  } else {
89
- instance.selectItem(event, itemId, false);
87
+ instance.selectItem({
88
+ event,
89
+ itemId,
90
+ keepExistingSelection: params.multiSelect,
91
+ shouldBeSelected: params.multiSelect ? undefined : true
92
+ });
90
93
  }
91
94
  break;
92
95
  }
@@ -101,9 +104,16 @@ const useTreeViewKeyboardNavigation = ({
101
104
  } else if (canToggleItemSelection(itemId)) {
102
105
  if (params.multiSelect) {
103
106
  event.preventDefault();
104
- instance.selectItem(event, itemId, true);
107
+ instance.selectItem({
108
+ event,
109
+ itemId,
110
+ keepExistingSelection: true
111
+ });
105
112
  } else if (!instance.isItemSelected(itemId)) {
106
- instance.selectItem(event, itemId, false);
113
+ instance.selectItem({
114
+ event,
115
+ itemId
116
+ });
107
117
  event.preventDefault();
108
118
  }
109
119
  }
@@ -55,7 +55,12 @@ const useTreeViewSelection = ({
55
55
  models.selectedItems.setControlledValue(newSelectedItems);
56
56
  };
57
57
  const isItemSelected = itemId => selectedItemsMap.has(itemId);
58
- const selectItem = (event, itemId, keepExistingSelection, newValue) => {
58
+ const selectItem = ({
59
+ event,
60
+ itemId,
61
+ keepExistingSelection = false,
62
+ shouldBeSelected
63
+ }) => {
59
64
  if (params.disableSelection) {
60
65
  return;
61
66
  }
@@ -63,16 +68,16 @@ const useTreeViewSelection = ({
63
68
  if (keepExistingSelection) {
64
69
  const cleanSelectedItems = (0, _useTreeViewSelection.convertSelectedItemsToArray)(models.selectedItems.value);
65
70
  const isSelectedBefore = instance.isItemSelected(itemId);
66
- if (isSelectedBefore && (newValue === false || newValue == null)) {
71
+ if (isSelectedBefore && (shouldBeSelected === false || shouldBeSelected == null)) {
67
72
  newSelected = cleanSelectedItems.filter(id => id !== itemId);
68
- } else if (!isSelectedBefore && (newValue === true || newValue == null)) {
73
+ } else if (!isSelectedBefore && (shouldBeSelected === true || shouldBeSelected == null)) {
69
74
  newSelected = [itemId].concat(cleanSelectedItems);
70
75
  } else {
71
76
  newSelected = cleanSelectedItems;
72
77
  }
73
78
  } else {
74
79
  // eslint-disable-next-line no-lonely-if
75
- if (newValue === false) {
80
+ if (shouldBeSelected === false || shouldBeSelected == null && instance.isItemSelected(itemId)) {
76
81
  newSelected = params.multiSelect ? [] : null;
77
82
  } else {
78
83
  newSelected = params.multiSelect ? [itemId] : itemId;
@@ -151,6 +156,9 @@ const useTreeViewSelection = ({
151
156
  getRootProps: () => ({
152
157
  'aria-multiselectable': params.multiSelect
153
158
  }),
159
+ publicAPI: {
160
+ selectItem
161
+ },
154
162
  instance: {
155
163
  isItemSelected,
156
164
  selectItem,
@@ -129,7 +129,8 @@ const useTreeView = ({
129
129
  state,
130
130
  setState,
131
131
  rootRef: innerRootRef,
132
- models
132
+ models,
133
+ plugins
133
134
  });
134
135
  if (pluginResponse.getRootProps) {
135
136
  rootPropsGetters.push(pluginResponse.getRootProps);
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.hasPlugin = void 0;
7
+ const hasPlugin = (instance, plugin) => {
8
+ const plugins = instance.getAvailablePlugins();
9
+ return plugins.has(plugin);
10
+ };
11
+ exports.hasPlugin = hasPlugin;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-tree-view",
3
- "version": "7.8.0",
3
+ "version": "7.10.0",
4
4
  "description": "The community edition of the Tree View components (MUI X).",
5
5
  "author": "MUI Team",
6
6
  "main": "./node/index.js",
@@ -35,8 +35,8 @@
35
35
  "dependencies": {
36
36
  "@babel/runtime": "^7.24.7",
37
37
  "@mui/base": "^5.0.0-beta.40",
38
- "@mui/system": "^5.15.20",
39
- "@mui/utils": "^5.15.20",
38
+ "@mui/system": "^5.16.0",
39
+ "@mui/utils": "^5.16.0",
40
40
  "@types/react-transition-group": "^4.4.10",
41
41
  "clsx": "^2.1.1",
42
42
  "prop-types": "^15.8.1",