@mui/x-tree-view 7.0.0-alpha.7 → 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.
Files changed (73) hide show
  1. package/CHANGELOG.md +175 -49
  2. package/RichTreeView/RichTreeView.js +18 -57
  3. package/SimpleTreeView/SimpleTreeView.js +20 -53
  4. package/TreeView/TreeView.js +1 -1
  5. package/index.js +1 -1
  6. package/internals/TreeViewProvider/useTreeViewContext.js +1 -1
  7. package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +2 -1
  8. package/internals/models/MuiCancellableEvent.d.ts +4 -0
  9. package/internals/models/MuiCancellableEvent.js +1 -0
  10. package/internals/models/plugin.d.ts +1 -0
  11. package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +6 -0
  12. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +6 -0
  13. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +3 -0
  14. package/internals/plugins/useTreeViewId/useTreeViewId.js +3 -0
  15. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +2 -1
  16. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +155 -112
  17. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +10 -3
  18. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +8 -0
  19. package/internals/useTreeView/useTreeViewModels.js +2 -2
  20. package/internals/utils/extractPluginParamsFromProps.d.ts +13 -0
  21. package/internals/utils/extractPluginParamsFromProps.js +27 -0
  22. package/legacy/RichTreeView/RichTreeView.js +17 -55
  23. package/legacy/SimpleTreeView/SimpleTreeView.js +15 -47
  24. package/legacy/TreeView/TreeView.js +1 -1
  25. package/legacy/index.js +1 -1
  26. package/legacy/internals/TreeViewProvider/useTreeViewContext.js +1 -1
  27. package/legacy/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +2 -1
  28. package/legacy/internals/models/MuiCancellableEvent.js +1 -0
  29. package/legacy/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +6 -0
  30. package/legacy/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +6 -0
  31. package/legacy/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +3 -0
  32. package/legacy/internals/plugins/useTreeViewId/useTreeViewId.js +3 -0
  33. package/legacy/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +2 -1
  34. package/legacy/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +157 -110
  35. package/legacy/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +9 -2
  36. package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +8 -0
  37. package/legacy/internals/useTreeView/useTreeViewModels.js +2 -2
  38. package/legacy/internals/utils/extractPluginParamsFromProps.js +27 -0
  39. package/modern/RichTreeView/RichTreeView.js +18 -57
  40. package/modern/SimpleTreeView/SimpleTreeView.js +20 -53
  41. package/modern/TreeView/TreeView.js +1 -1
  42. package/modern/index.js +1 -1
  43. package/modern/internals/TreeViewProvider/useTreeViewContext.js +1 -1
  44. package/modern/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +2 -1
  45. package/modern/internals/models/MuiCancellableEvent.js +1 -0
  46. package/modern/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +6 -0
  47. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +7 -1
  48. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +4 -1
  49. package/modern/internals/plugins/useTreeViewId/useTreeViewId.js +3 -0
  50. package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +2 -1
  51. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +155 -112
  52. package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +10 -3
  53. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +9 -1
  54. package/modern/internals/useTreeView/useTreeViewModels.js +2 -2
  55. package/modern/internals/utils/extractPluginParamsFromProps.js +27 -0
  56. package/node/RichTreeView/RichTreeView.js +18 -57
  57. package/node/SimpleTreeView/SimpleTreeView.js +20 -53
  58. package/node/TreeView/TreeView.js +1 -1
  59. package/node/index.js +1 -1
  60. package/node/internals/TreeViewProvider/useTreeViewContext.js +1 -1
  61. package/node/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +2 -1
  62. package/node/internals/models/MuiCancellableEvent.js +5 -0
  63. package/node/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +7 -1
  64. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +7 -1
  65. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +4 -1
  66. package/node/internals/plugins/useTreeViewId/useTreeViewId.js +4 -1
  67. package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +2 -1
  68. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +155 -112
  69. package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +10 -3
  70. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +9 -1
  71. package/node/internals/useTreeView/useTreeViewModels.js +2 -2
  72. package/node/internals/utils/extractPluginParamsFromProps.js +34 -0
  73. package/package.json +1 -1
@@ -12,7 +12,7 @@ var _useTreeView = require("../../useTreeView/useTreeView.utils");
12
12
  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); }
13
13
  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; }
14
14
  function isPrintableCharacter(string) {
15
- return string && string.length === 1 && string.match(/\S/);
15
+ return !!string && string.length === 1 && !!string.match(/\S/);
16
16
  }
17
17
  function findNextFirstChar(firstChars, startIndex, char) {
18
18
  for (let i = startIndex; i < firstChars.length; i += 1) {
@@ -28,7 +28,7 @@ const useTreeViewKeyboardNavigation = ({
28
28
  state
29
29
  }) => {
30
30
  const theme = (0, _styles.useTheme)();
31
- const isRtl = theme.direction === 'rtl';
31
+ const isRTL = theme.direction === 'rtl';
32
32
  const firstCharMap = React.useRef({});
33
33
  const hasFirstCharMapBeenUpdatedImperatively = React.useRef(false);
34
34
  const updateFirstCharMap = (0, _useEventCallback.default)(callback => {
@@ -52,32 +52,7 @@ const useTreeViewKeyboardNavigation = ({
52
52
  (0, _useTreeView.populateInstance)(instance, {
53
53
  updateFirstCharMap
54
54
  });
55
- const handleNextArrow = event => {
56
- if (state.focusedNodeId != null && instance.isNodeExpandable(state.focusedNodeId)) {
57
- if (instance.isNodeExpanded(state.focusedNodeId)) {
58
- instance.focusNode(event, (0, _useTreeView.getNextNode)(instance, state.focusedNodeId));
59
- } else if (!instance.isNodeDisabled(state.focusedNodeId)) {
60
- instance.toggleNodeExpansion(event, state.focusedNodeId);
61
- }
62
- }
63
- return true;
64
- };
65
- const handlePreviousArrow = event => {
66
- if (state.focusedNodeId == null) {
67
- return false;
68
- }
69
- if (instance.isNodeExpanded(state.focusedNodeId) && !instance.isNodeDisabled(state.focusedNodeId)) {
70
- instance.toggleNodeExpansion(event, state.focusedNodeId);
71
- return true;
72
- }
73
- const parent = instance.getNode(state.focusedNodeId).parentId;
74
- if (parent) {
75
- instance.focusNode(event, parent);
76
- return true;
77
- }
78
- return false;
79
- };
80
- const focusByFirstCharacter = (event, nodeId, firstChar) => {
55
+ const getFirstMatchingNode = (nodeId, firstChar) => {
81
56
  let start;
82
57
  let index;
83
58
  const lowercaseChar = firstChar.toLowerCase();
@@ -108,41 +83,35 @@ const useTreeViewKeyboardNavigation = ({
108
83
  index = findNextFirstChar(firstChars, 0, lowercaseChar);
109
84
  }
110
85
 
111
- // If match was found...
86
+ // If a match was found...
112
87
  if (index > -1) {
113
- instance.focusNode(event, firstCharIds[index]);
114
- }
115
- };
116
- const selectNextNode = (event, id) => {
117
- if (!instance.isNodeDisabled((0, _useTreeView.getNextNode)(instance, id))) {
118
- instance.selectRange(event, {
119
- end: (0, _useTreeView.getNextNode)(instance, id),
120
- current: id
121
- }, true);
122
- }
123
- };
124
- const selectPreviousNode = (event, nodeId) => {
125
- if (!instance.isNodeDisabled((0, _useTreeView.getPreviousNode)(instance, nodeId))) {
126
- instance.selectRange(event, {
127
- end: (0, _useTreeView.getPreviousNode)(instance, nodeId),
128
- current: nodeId
129
- }, true);
88
+ return firstCharIds[index];
130
89
  }
90
+ return null;
131
91
  };
92
+ const canToggleNodeSelection = nodeId => !params.disableSelection && !instance.isNodeDisabled(nodeId);
93
+ const canToggleNodeExpansion = nodeId => !instance.isNodeDisabled(nodeId) && instance.isNodeExpandable(nodeId);
94
+
95
+ // ARIA specification: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/#keyboardinteraction
132
96
  const createHandleKeyDown = otherHandlers => event => {
133
97
  otherHandlers.onKeyDown?.(event);
134
- let flag = false;
135
- const key = event.key;
98
+ if (event.defaultMuiPrevented) {
99
+ return;
100
+ }
136
101
 
137
102
  // If the tree is empty there will be no focused node
138
103
  if (event.altKey || event.currentTarget !== event.target || state.focusedNodeId == null) {
139
104
  return;
140
105
  }
141
106
  const ctrlPressed = event.ctrlKey || event.metaKey;
142
- switch (key) {
143
- case ' ':
144
- if (!params.disableSelection && !instance.isNodeDisabled(state.focusedNodeId)) {
145
- flag = true;
107
+ const key = event.key;
108
+
109
+ // eslint-disable-next-line default-case
110
+ switch (true) {
111
+ // Select the node when pressing "Space"
112
+ case key === ' ' && canToggleNodeSelection(state.focusedNodeId):
113
+ {
114
+ event.preventDefault();
146
115
  if (params.multiSelect && event.shiftKey) {
147
116
  instance.selectRange(event, {
148
117
  end: state.focusedNodeId
@@ -152,85 +121,158 @@ const useTreeViewKeyboardNavigation = ({
152
121
  } else {
153
122
  instance.selectNode(event, state.focusedNodeId);
154
123
  }
124
+ break;
155
125
  }
156
- event.stopPropagation();
157
- break;
158
- case 'Enter':
159
- if (!instance.isNodeDisabled(state.focusedNodeId)) {
160
- if (instance.isNodeExpandable(state.focusedNodeId)) {
126
+
127
+ // If the focused node has children, we expand it.
128
+ // If the focused node has no children, we select it.
129
+ case key === 'Enter':
130
+ {
131
+ if (canToggleNodeExpansion(state.focusedNodeId)) {
161
132
  instance.toggleNodeExpansion(event, state.focusedNodeId);
162
- flag = true;
163
- } else if (!params.disableSelection) {
164
- flag = true;
133
+ event.preventDefault();
134
+ } else if (canToggleNodeSelection(state.focusedNodeId)) {
165
135
  if (params.multiSelect) {
136
+ event.preventDefault();
166
137
  instance.selectNode(event, state.focusedNodeId, true);
167
- } else {
138
+ } else if (!instance.isNodeSelected(state.focusedNodeId)) {
168
139
  instance.selectNode(event, state.focusedNodeId);
140
+ event.preventDefault();
169
141
  }
170
142
  }
143
+ break;
171
144
  }
172
- event.stopPropagation();
173
- break;
174
- case 'ArrowDown':
175
- if (params.multiSelect && event.shiftKey && !params.disableSelection) {
176
- selectNextNode(event, state.focusedNodeId);
145
+
146
+ // Focus the next focusable node
147
+ case key === 'ArrowDown':
148
+ {
149
+ const nextNode = (0, _useTreeView.getNextNode)(instance, state.focusedNodeId);
150
+ if (nextNode) {
151
+ event.preventDefault();
152
+ instance.focusNode(event, nextNode);
153
+
154
+ // Multi select behavior when pressing Shift + ArrowDown
155
+ // Toggles the selection state of the next node
156
+ if (params.multiSelect && event.shiftKey && canToggleNodeSelection(nextNode)) {
157
+ instance.selectRange(event, {
158
+ end: nextNode,
159
+ current: state.focusedNodeId
160
+ }, true);
161
+ }
162
+ }
163
+ break;
177
164
  }
178
- instance.focusNode(event, (0, _useTreeView.getNextNode)(instance, state.focusedNodeId));
179
- flag = true;
180
- break;
181
- case 'ArrowUp':
182
- if (params.multiSelect && event.shiftKey && !params.disableSelection) {
183
- selectPreviousNode(event, state.focusedNodeId);
165
+
166
+ // Focuses the previous focusable node
167
+ case key === 'ArrowUp':
168
+ {
169
+ const previousNode = (0, _useTreeView.getPreviousNode)(instance, state.focusedNodeId);
170
+ if (previousNode) {
171
+ event.preventDefault();
172
+ instance.focusNode(event, previousNode);
173
+
174
+ // Multi select behavior when pressing Shift + ArrowUp
175
+ // Toggles the selection state of the previous node
176
+ if (params.multiSelect && event.shiftKey && canToggleNodeSelection(previousNode)) {
177
+ instance.selectRange(event, {
178
+ end: previousNode,
179
+ current: state.focusedNodeId
180
+ }, true);
181
+ }
182
+ }
183
+ break;
184
184
  }
185
- instance.focusNode(event, (0, _useTreeView.getPreviousNode)(instance, state.focusedNodeId));
186
- flag = true;
187
- break;
188
- case 'ArrowRight':
189
- if (isRtl) {
190
- flag = handlePreviousArrow(event);
191
- } else {
192
- flag = handleNextArrow(event);
185
+
186
+ // If the focused node is expanded, we move the focus to its first child
187
+ // If the focused node is collapsed and has children, we expand it
188
+ case key === 'ArrowRight' && !isRTL || key === 'ArrowLeft' && isRTL:
189
+ {
190
+ if (instance.isNodeExpanded(state.focusedNodeId)) {
191
+ instance.focusNode(event, (0, _useTreeView.getNextNode)(instance, state.focusedNodeId));
192
+ event.preventDefault();
193
+ } else if (canToggleNodeExpansion(state.focusedNodeId)) {
194
+ instance.toggleNodeExpansion(event, state.focusedNodeId);
195
+ event.preventDefault();
196
+ }
197
+ break;
193
198
  }
194
- break;
195
- case 'ArrowLeft':
196
- if (isRtl) {
197
- flag = handleNextArrow(event);
198
- } else {
199
- flag = handlePreviousArrow(event);
199
+
200
+ // If the focused node is expanded, we collapse it
201
+ // If the focused node is collapsed and has a parent, we move the focus to this parent
202
+ case key === 'ArrowLeft' && !isRTL || key === 'ArrowRight' && isRTL:
203
+ {
204
+ if (canToggleNodeExpansion(state.focusedNodeId) && instance.isNodeExpanded(state.focusedNodeId)) {
205
+ instance.toggleNodeExpansion(event, state.focusedNodeId);
206
+ event.preventDefault();
207
+ } else {
208
+ const parent = instance.getNode(state.focusedNodeId).parentId;
209
+ if (parent) {
210
+ instance.focusNode(event, parent);
211
+ event.preventDefault();
212
+ }
213
+ }
214
+ break;
200
215
  }
201
- break;
202
- case 'Home':
203
- if (params.multiSelect && ctrlPressed && event.shiftKey && !params.disableSelection && !instance.isNodeDisabled(state.focusedNodeId)) {
204
- instance.rangeSelectToFirst(event, state.focusedNodeId);
216
+
217
+ // Focuses the first node in the tree
218
+ case key === 'Home':
219
+ {
220
+ instance.focusNode(event, (0, _useTreeView.getFirstNode)(instance));
221
+
222
+ // Multi select behavior when pressing Ctrl + Shift + Home
223
+ // Selects the focused node and all nodes up to the first node.
224
+ if (canToggleNodeSelection(state.focusedNodeId) && params.multiSelect && ctrlPressed && event.shiftKey) {
225
+ instance.rangeSelectToFirst(event, state.focusedNodeId);
226
+ }
227
+ event.preventDefault();
228
+ break;
205
229
  }
206
- instance.focusNode(event, (0, _useTreeView.getFirstNode)(instance));
207
- flag = true;
208
- break;
209
- case 'End':
210
- if (params.multiSelect && ctrlPressed && event.shiftKey && !params.disableSelection && !instance.isNodeDisabled(state.focusedNodeId)) {
211
- instance.rangeSelectToLast(event, state.focusedNodeId);
230
+
231
+ // Focuses the last node in the tree
232
+ case key === 'End':
233
+ {
234
+ instance.focusNode(event, (0, _useTreeView.getLastNode)(instance));
235
+
236
+ // Multi select behavior when pressing Ctrl + Shirt + End
237
+ // Selects the focused node and all the nodes down to the last node.
238
+ if (canToggleNodeSelection(state.focusedNodeId) && params.multiSelect && ctrlPressed && event.shiftKey) {
239
+ instance.rangeSelectToLast(event, state.focusedNodeId);
240
+ }
241
+ event.preventDefault();
242
+ break;
212
243
  }
213
- instance.focusNode(event, (0, _useTreeView.getLastNode)(instance));
214
- flag = true;
215
- break;
216
- default:
217
- if (key === '*') {
244
+
245
+ // Expand all siblings that are at the same level as the focused node
246
+ case key === '*':
247
+ {
218
248
  instance.expandAllSiblings(event, state.focusedNodeId);
219
- flag = true;
220
- } else if (params.multiSelect && ctrlPressed && key.toLowerCase() === 'a' && !params.disableSelection) {
249
+ event.preventDefault();
250
+ break;
251
+ }
252
+
253
+ // Multi select behavior when pressing Ctrl + a
254
+ // Selects all the nodes
255
+ case key === 'a' && ctrlPressed && params.multiSelect && !params.disableSelection:
256
+ {
221
257
  instance.selectRange(event, {
222
258
  start: (0, _useTreeView.getFirstNode)(instance),
223
259
  end: (0, _useTreeView.getLastNode)(instance)
224
260
  });
225
- flag = true;
226
- } else if (!ctrlPressed && !event.shiftKey && isPrintableCharacter(key)) {
227
- focusByFirstCharacter(event, state.focusedNodeId, key);
228
- flag = true;
261
+ event.preventDefault();
262
+ break;
263
+ }
264
+
265
+ // Type-ahead
266
+ // TODO: Support typing multiple characters
267
+ case !ctrlPressed && !event.shiftKey && isPrintableCharacter(key):
268
+ {
269
+ const matchingNode = getFirstMatchingNode(state.focusedNodeId, key);
270
+ if (matchingNode != null) {
271
+ instance.focusNode(event, matchingNode);
272
+ event.preventDefault();
273
+ }
274
+ break;
229
275
  }
230
- }
231
- if (flag) {
232
- event.preventDefault();
233
- event.stopPropagation();
234
276
  }
235
277
  };
236
278
  return {
@@ -239,4 +281,5 @@ const useTreeViewKeyboardNavigation = ({
239
281
  })
240
282
  };
241
283
  };
242
- exports.useTreeViewKeyboardNavigation = useTreeViewKeyboardNavigation;
284
+ exports.useTreeViewKeyboardNavigation = useTreeViewKeyboardNavigation;
285
+ useTreeViewKeyboardNavigation.params = {};
@@ -22,11 +22,11 @@ const updateState = ({
22
22
  const processItem = (item, index, parentId) => {
23
23
  const id = getItemId ? getItemId(item) : item.id;
24
24
  if (id == null) {
25
- 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'));
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
26
  }
27
27
  const label = getItemLabel ? getItemLabel(item) : item.label;
28
28
  if (label == null) {
29
- 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'));
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
30
  }
31
31
  nodeMap[id] = {
32
32
  id,
@@ -131,4 +131,11 @@ useTreeViewNodes.getInitialState = params => updateState({
131
131
  isItemDisabled: params.isItemDisabled,
132
132
  getItemId: params.getItemId,
133
133
  getItemLabel: params.getItemLabel
134
- });
134
+ });
135
+ useTreeViewNodes.params = {
136
+ disabledItemsFocusable: true,
137
+ items: true,
138
+ isItemDisabled: true,
139
+ getItemLabel: true,
140
+ getItemId: true
141
+ };
@@ -189,4 +189,12 @@ useTreeViewSelection.getDefaultizedParams = params => (0, _extends2.default)({},
189
189
  disableSelection: params.disableSelection ?? false,
190
190
  multiSelect: params.multiSelect ?? false,
191
191
  defaultSelectedNodes: params.defaultSelectedNodes ?? (params.multiSelect ? DEFAULT_SELECTED_NODES : null)
192
- });
192
+ });
193
+ useTreeViewSelection.params = {
194
+ disableSelection: true,
195
+ multiSelect: true,
196
+ defaultSelectedNodes: true,
197
+ selectedNodes: true,
198
+ onSelectedNodesChange: true,
199
+ onNodeSelectionToggle: true
200
+ };
@@ -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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-tree-view",
3
- "version": "7.0.0-alpha.7",
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",