@mui/x-tree-view 7.0.0 → 7.1.1

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 (111) hide show
  1. package/CHANGELOG.md +246 -4
  2. package/README.md +1 -1
  3. package/RichTreeView/RichTreeView.d.ts +2 -2
  4. package/RichTreeView/RichTreeView.js +11 -9
  5. package/SimpleTreeView/SimpleTreeView.js +4 -2
  6. package/SimpleTreeView/SimpleTreeView.plugins.d.ts +1 -1
  7. package/SimpleTreeView/SimpleTreeView.plugins.js +2 -2
  8. package/TreeItem/TreeItem.js +4 -4
  9. package/TreeItem/treeItemClasses.d.ts +1 -1
  10. package/TreeItem/useTreeItemState.js +9 -9
  11. package/TreeItem2Icon/TreeItem2Icon.types.d.ts +4 -4
  12. package/TreeView/TreeView.js +2 -1
  13. package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +8 -8
  14. package/hooks/useTreeViewApiRef.d.ts +1 -1
  15. package/index.js +1 -1
  16. package/internals/TreeViewProvider/DescendantProvider.d.ts +1 -1
  17. package/internals/TreeViewProvider/DescendantProvider.js +1 -1
  18. package/internals/index.d.ts +18 -8
  19. package/internals/index.js +11 -0
  20. package/internals/models/plugin.d.ts +1 -1
  21. package/internals/plugins/defaultPlugins.d.ts +3 -3
  22. package/internals/plugins/defaultPlugins.js +2 -2
  23. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +32 -18
  24. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +16 -6
  25. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +35 -33
  26. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +17 -9
  27. package/internals/plugins/useTreeViewIcons/useTreeViewIcons.types.d.ts +6 -6
  28. package/internals/plugins/useTreeViewId/useTreeViewId.types.d.ts +1 -1
  29. package/internals/plugins/useTreeViewItems/index.d.ts +2 -0
  30. package/internals/plugins/useTreeViewItems/index.js +1 -0
  31. package/internals/plugins/useTreeViewItems/useTreeViewItems.d.ts +3 -0
  32. package/internals/plugins/{useTreeViewNodes/useTreeViewNodes.js → useTreeViewItems/useTreeViewItems.js} +43 -33
  33. package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +104 -0
  34. package/internals/plugins/useTreeViewJSXItems/index.d.ts +2 -0
  35. package/internals/plugins/useTreeViewJSXItems/index.js +1 -0
  36. package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.d.ts +3 -0
  37. package/{modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js → internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js} +26 -25
  38. package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.types.d.ts +18 -0
  39. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +40 -44
  40. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +2 -2
  41. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +34 -34
  42. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +6 -6
  43. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +7 -7
  44. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +5 -5
  45. package/internals/useTreeView/useTreeView.utils.d.ts +5 -5
  46. package/internals/useTreeView/useTreeView.utils.js +15 -15
  47. package/internals/useTreeView/useTreeViewModels.js +2 -2
  48. package/modern/RichTreeView/RichTreeView.js +11 -9
  49. package/modern/SimpleTreeView/SimpleTreeView.js +4 -2
  50. package/modern/SimpleTreeView/SimpleTreeView.plugins.js +2 -2
  51. package/modern/TreeItem/TreeItem.js +4 -4
  52. package/modern/TreeItem/useTreeItemState.js +9 -9
  53. package/modern/TreeView/TreeView.js +2 -1
  54. package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +8 -8
  55. package/modern/index.js +1 -1
  56. package/modern/internals/TreeViewProvider/DescendantProvider.js +1 -1
  57. package/modern/internals/index.js +11 -0
  58. package/modern/internals/plugins/defaultPlugins.js +2 -2
  59. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +32 -18
  60. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +35 -33
  61. package/modern/internals/plugins/useTreeViewItems/index.js +1 -0
  62. package/modern/internals/plugins/{useTreeViewNodes/useTreeViewNodes.js → useTreeViewItems/useTreeViewItems.js} +43 -33
  63. package/modern/internals/plugins/useTreeViewJSXItems/index.js +1 -0
  64. package/{internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js → modern/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js} +26 -25
  65. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +40 -44
  66. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +34 -34
  67. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +5 -5
  68. package/modern/internals/useTreeView/useTreeView.utils.js +15 -15
  69. package/modern/internals/useTreeView/useTreeViewModels.js +2 -2
  70. package/node/RichTreeView/RichTreeView.js +11 -9
  71. package/node/SimpleTreeView/SimpleTreeView.js +4 -2
  72. package/node/SimpleTreeView/SimpleTreeView.plugins.js +2 -2
  73. package/node/TreeItem/TreeItem.js +4 -4
  74. package/node/TreeItem/useTreeItemState.js +9 -9
  75. package/node/TreeView/TreeView.js +2 -1
  76. package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +8 -8
  77. package/node/index.js +1 -1
  78. package/node/internals/TreeViewProvider/DescendantProvider.js +1 -1
  79. package/node/internals/index.js +70 -0
  80. package/node/internals/plugins/defaultPlugins.js +2 -2
  81. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +31 -17
  82. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +35 -33
  83. package/node/internals/plugins/useTreeViewItems/index.js +12 -0
  84. package/node/internals/plugins/{useTreeViewNodes/useTreeViewNodes.js → useTreeViewItems/useTreeViewItems.js} +45 -35
  85. package/node/internals/plugins/useTreeViewJSXItems/index.js +12 -0
  86. package/node/internals/plugins/{useTreeViewJSXNodes/useTreeViewJSXNodes.js → useTreeViewJSXItems/useTreeViewJSXItems.js} +28 -27
  87. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +39 -43
  88. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +33 -33
  89. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +5 -5
  90. package/node/internals/useTreeView/useTreeView.utils.js +20 -20
  91. package/node/internals/useTreeView/useTreeViewModels.js +2 -2
  92. package/package.json +2 -2
  93. package/useTreeItem2/useTreeItem2.d.ts +1 -1
  94. package/internals/plugins/useTreeViewJSXNodes/index.d.ts +0 -2
  95. package/internals/plugins/useTreeViewJSXNodes/index.js +0 -1
  96. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.d.ts +0 -3
  97. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.d.ts +0 -18
  98. package/internals/plugins/useTreeViewNodes/index.d.ts +0 -2
  99. package/internals/plugins/useTreeViewNodes/index.js +0 -1
  100. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.d.ts +0 -3
  101. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +0 -88
  102. package/modern/internals/plugins/useTreeViewJSXNodes/index.js +0 -1
  103. package/modern/internals/plugins/useTreeViewNodes/index.js +0 -1
  104. package/node/internals/plugins/useTreeViewJSXNodes/index.js +0 -12
  105. package/node/internals/plugins/useTreeViewNodes/index.js +0 -12
  106. /package/internals/plugins/{useTreeViewJSXNodes/useTreeViewJSXNodes.types.js → useTreeViewItems/useTreeViewItems.types.js} +0 -0
  107. /package/internals/plugins/{useTreeViewNodes/useTreeViewNodes.types.js → useTreeViewJSXItems/useTreeViewJSXItems.types.js} +0 -0
  108. /package/modern/internals/plugins/{useTreeViewJSXNodes/useTreeViewJSXNodes.types.js → useTreeViewItems/useTreeViewItems.types.js} +0 -0
  109. /package/modern/internals/plugins/{useTreeViewNodes/useTreeViewNodes.types.js → useTreeViewJSXItems/useTreeViewJSXItems.types.js} +0 -0
  110. /package/node/internals/plugins/{useTreeViewJSXNodes/useTreeViewJSXNodes.types.js → useTreeViewItems/useTreeViewItems.types.js} +0 -0
  111. /package/node/internals/plugins/{useTreeViewNodes/useTreeViewNodes.types.js → useTreeViewJSXItems/useTreeViewJSXItems.types.js} +0 -0
@@ -13,37 +13,47 @@ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return
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
  const useTreeViewExpansion = ({
15
15
  instance,
16
+ publicAPI,
16
17
  params,
17
18
  models
18
19
  }) => {
20
+ const expandedItemsMap = React.useMemo(() => {
21
+ const temp = new Map();
22
+ models.expandedItems.value.forEach(id => {
23
+ temp.set(id, true);
24
+ });
25
+ return temp;
26
+ }, [models.expandedItems.value]);
19
27
  const setExpandedItems = (event, value) => {
20
28
  params.onExpandedItemsChange?.(event, value);
21
29
  models.expandedItems.setControlledValue(value);
22
30
  };
23
- const isNodeExpanded = React.useCallback(itemId => {
24
- return Array.isArray(models.expandedItems.value) ? models.expandedItems.value.indexOf(itemId) !== -1 : false;
25
- }, [models.expandedItems.value]);
26
- const isNodeExpandable = React.useCallback(itemId => !!instance.getNode(itemId)?.expandable, [instance]);
27
- const toggleNodeExpansion = (0, _useEventCallback.default)((event, itemId) => {
28
- if (itemId == null) {
31
+ const isItemExpanded = React.useCallback(itemId => expandedItemsMap.has(itemId), [expandedItemsMap]);
32
+ const isItemExpandable = React.useCallback(itemId => !!instance.getNode(itemId)?.expandable, [instance]);
33
+ const toggleItemExpansion = (0, _useEventCallback.default)((event, itemId) => {
34
+ const isExpandedBefore = instance.isItemExpanded(itemId);
35
+ instance.setItemExpansion(event, itemId, !isExpandedBefore);
36
+ });
37
+ const setItemExpansion = (0, _useEventCallback.default)((event, itemId, isExpanded) => {
38
+ const isExpandedBefore = instance.isItemExpanded(itemId);
39
+ if (isExpandedBefore === isExpanded) {
29
40
  return;
30
41
  }
31
- const isExpandedBefore = models.expandedItems.value.indexOf(itemId) !== -1;
32
42
  let newExpanded;
33
- if (isExpandedBefore) {
34
- newExpanded = models.expandedItems.value.filter(id => id !== itemId);
35
- } else {
43
+ if (isExpanded) {
36
44
  newExpanded = [itemId].concat(models.expandedItems.value);
45
+ } else {
46
+ newExpanded = models.expandedItems.value.filter(id => id !== itemId);
37
47
  }
38
48
  if (params.onItemExpansionToggle) {
39
- params.onItemExpansionToggle(event, itemId, !isExpandedBefore);
49
+ params.onItemExpansionToggle(event, itemId, isExpanded);
40
50
  }
41
51
  setExpandedItems(event, newExpanded);
42
52
  });
43
53
  const expandAllSiblings = (event, itemId) => {
44
54
  const node = instance.getNode(itemId);
45
55
  const siblings = instance.getChildrenIds(node.parentId);
46
- const diff = siblings.filter(child => instance.isNodeExpandable(child) && !instance.isNodeExpanded(child));
56
+ const diff = siblings.filter(child => instance.isItemExpandable(child) && !instance.isItemExpanded(child));
47
57
  const newExpanded = models.expandedItems.value.concat(diff);
48
58
  if (diff.length > 0) {
49
59
  if (params.onItemExpansionToggle) {
@@ -55,11 +65,15 @@ const useTreeViewExpansion = ({
55
65
  }
56
66
  };
57
67
  (0, _useTreeView.populateInstance)(instance, {
58
- isNodeExpanded,
59
- isNodeExpandable,
60
- toggleNodeExpansion,
68
+ isItemExpanded,
69
+ isItemExpandable,
70
+ setItemExpansion,
71
+ toggleItemExpansion,
61
72
  expandAllSiblings
62
73
  });
74
+ (0, _useTreeView.populatePublicAPI)(publicAPI, {
75
+ setItemExpansion
76
+ });
63
77
  };
64
78
  exports.useTreeViewExpansion = useTreeViewExpansion;
65
79
  useTreeViewExpansion.models = {
@@ -67,9 +81,9 @@ useTreeViewExpansion.models = {
67
81
  getDefaultValue: params => params.defaultExpandedItems
68
82
  }
69
83
  };
70
- const DEFAULT_EXPANDED_NODES = [];
84
+ const DEFAULT_EXPANDED_ITEMS = [];
71
85
  useTreeViewExpansion.getDefaultizedParams = params => (0, _extends2.default)({}, params, {
72
- defaultExpandedItems: params.defaultExpandedItems ?? DEFAULT_EXPANDED_NODES
86
+ defaultExpandedItems: params.defaultExpandedItems ?? DEFAULT_EXPANDED_ITEMS
73
87
  });
74
88
  useTreeViewExpansion.params = {
75
89
  expandedItems: true,
@@ -17,7 +17,7 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
17
17
  const useTabbableItemId = (instance, selectedItems) => {
18
18
  const isItemVisible = itemId => {
19
19
  const node = instance.getNode(itemId);
20
- return node && (node.parentId == null || instance.isNodeExpanded(node.parentId));
20
+ return node && (node.parentId == null || instance.isItemExpanded(node.parentId));
21
21
  };
22
22
  let tabbableItemId;
23
23
  if (Array.isArray(selectedItems)) {
@@ -41,18 +41,18 @@ const useTreeViewFocus = ({
41
41
  }) => {
42
42
  const tabbableItemId = useTabbableItemId(instance, models.selectedItems.value);
43
43
  const setFocusedItemId = (0, _useEventCallback.default)(itemId => {
44
- const cleanItemId = typeof itemId === 'function' ? itemId(state.focusedNodeId) : itemId;
45
- if (state.focusedNodeId !== cleanItemId) {
44
+ const cleanItemId = typeof itemId === 'function' ? itemId(state.focusedItemId) : itemId;
45
+ if (state.focusedItemId !== cleanItemId) {
46
46
  setState(prevState => (0, _extends2.default)({}, prevState, {
47
- focusedNodeId: cleanItemId
47
+ focusedItemId: cleanItemId
48
48
  }));
49
49
  }
50
50
  });
51
51
  const isTreeViewFocused = React.useCallback(() => !!rootRef.current && rootRef.current.contains((0, _utils.getActiveElement)((0, _ownerDocument.default)(rootRef.current))), [rootRef]);
52
- const isNodeFocused = React.useCallback(itemId => state.focusedNodeId === itemId && isTreeViewFocused(), [state.focusedNodeId, isTreeViewFocused]);
53
- const isNodeVisible = itemId => {
52
+ const isItemFocused = React.useCallback(itemId => state.focusedItemId === itemId && isTreeViewFocused(), [state.focusedItemId, isTreeViewFocused]);
53
+ const isItemVisible = itemId => {
54
54
  const node = instance.getNode(itemId);
55
- return node && (node.parentId == null || instance.isNodeExpanded(node.parentId));
55
+ return node && (node.parentId == null || instance.isItemExpanded(node.parentId));
56
56
  };
57
57
  const innerFocusItem = (event, itemId) => {
58
58
  const node = instance.getNode(itemId);
@@ -65,62 +65,64 @@ const useTreeViewFocus = ({
65
65
  params.onItemFocus(event, itemId);
66
66
  }
67
67
  };
68
- const focusItem = (0, _useEventCallback.default)((event, nodeId) => {
69
- // If we receive a nodeId, and it is visible, the focus will be set to it
70
- if (isNodeVisible(nodeId)) {
71
- innerFocusItem(event, nodeId);
68
+ const focusItem = (0, _useEventCallback.default)((event, itemId) => {
69
+ // If we receive an itemId, and it is visible, the focus will be set to it
70
+ if (isItemVisible(itemId)) {
71
+ innerFocusItem(event, itemId);
72
72
  }
73
73
  });
74
- const focusDefaultNode = (0, _useEventCallback.default)(event => {
75
- let nodeToFocusId;
74
+ const focusDefaultItem = (0, _useEventCallback.default)(event => {
75
+ let itemToFocusId;
76
76
  if (Array.isArray(models.selectedItems.value)) {
77
- nodeToFocusId = models.selectedItems.value.find(isNodeVisible);
78
- } else if (models.selectedItems.value != null && isNodeVisible(models.selectedItems.value)) {
79
- nodeToFocusId = models.selectedItems.value;
77
+ itemToFocusId = models.selectedItems.value.find(isItemVisible);
78
+ } else if (models.selectedItems.value != null && isItemVisible(models.selectedItems.value)) {
79
+ itemToFocusId = models.selectedItems.value;
80
80
  }
81
- if (nodeToFocusId == null) {
82
- nodeToFocusId = instance.getNavigableChildrenIds(null)[0];
81
+ if (itemToFocusId == null) {
82
+ itemToFocusId = instance.getNavigableChildrenIds(null)[0];
83
83
  }
84
- innerFocusItem(event, nodeToFocusId);
84
+ innerFocusItem(event, itemToFocusId);
85
85
  });
86
86
  const removeFocusedItem = (0, _useEventCallback.default)(() => {
87
- if (state.focusedNodeId == null) {
87
+ if (state.focusedItemId == null) {
88
88
  return;
89
89
  }
90
- const node = instance.getNode(state.focusedNodeId);
91
- const itemElement = document.getElementById(instance.getTreeItemId(state.focusedNodeId, node.idAttribute));
92
- if (itemElement) {
93
- itemElement.blur();
90
+ const node = instance.getNode(state.focusedItemId);
91
+ if (node) {
92
+ const itemElement = document.getElementById(instance.getTreeItemId(state.focusedItemId, node.idAttribute));
93
+ if (itemElement) {
94
+ itemElement.blur();
95
+ }
94
96
  }
95
97
  setFocusedItemId(null);
96
98
  });
97
99
  const canItemBeTabbed = itemId => itemId === tabbableItemId;
98
100
  (0, _useTreeView.populateInstance)(instance, {
99
- isNodeFocused,
101
+ isItemFocused,
100
102
  canItemBeTabbed,
101
103
  focusItem,
102
- focusDefaultNode,
104
+ focusDefaultItem,
103
105
  removeFocusedItem
104
106
  });
105
107
  (0, _useTreeView.populatePublicAPI)(publicAPI, {
106
108
  focusItem
107
109
  });
108
- (0, _useInstanceEventHandler.useInstanceEventHandler)(instance, 'removeNode', ({
110
+ (0, _useInstanceEventHandler.useInstanceEventHandler)(instance, 'removeItem', ({
109
111
  id
110
112
  }) => {
111
- if (state.focusedNodeId === id) {
112
- instance.focusDefaultNode(null);
113
+ if (state.focusedItemId === id) {
114
+ instance.focusDefaultItem(null);
113
115
  }
114
116
  });
115
117
  const createHandleFocus = otherHandlers => event => {
116
118
  otherHandlers.onFocus?.(event);
117
119
  // if the event bubbled (which is React specific) we don't want to steal focus
118
120
  if (event.target === event.currentTarget) {
119
- instance.focusDefaultNode(event);
121
+ instance.focusDefaultItem(event);
120
122
  }
121
123
  };
122
- const focusedNode = instance.getNode(state.focusedNodeId);
123
- const activeDescendant = focusedNode ? instance.getTreeItemId(focusedNode.id, focusedNode.idAttribute) : null;
124
+ const focusedItem = instance.getNode(state.focusedItemId);
125
+ const activeDescendant = focusedItem ? instance.getTreeItemId(focusedItem.id, focusedItem.idAttribute) : null;
124
126
  return {
125
127
  getRootProps: otherHandlers => ({
126
128
  onFocus: createHandleFocus(otherHandlers),
@@ -130,7 +132,7 @@ const useTreeViewFocus = ({
130
132
  };
131
133
  exports.useTreeViewFocus = useTreeViewFocus;
132
134
  useTreeViewFocus.getInitialState = () => ({
133
- focusedNodeId: null
135
+ focusedItemId: null
134
136
  });
135
137
  useTreeViewFocus.params = {
136
138
  onItemFocus: true
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "useTreeViewItems", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _useTreeViewItems.useTreeViewItems;
10
+ }
11
+ });
12
+ var _useTreeViewItems = require("./useTreeViewItems");
@@ -4,14 +4,14 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.useTreeViewNodes = void 0;
7
+ exports.useTreeViewItems = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  var _useTreeView = require("../../useTreeView/useTreeView.utils");
11
11
  var _publishTreeViewEvent = require("../../utils/publishTreeViewEvent");
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
- const updateNodesState = ({
14
+ const updateItemsState = ({
15
15
  items,
16
16
  isItemDisabled,
17
17
  getItemLabel,
@@ -25,7 +25,7 @@ const updateNodesState = ({
25
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
  if (nodeMap[id] != null) {
28
- 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.', `Tow items were provided with the same id in the \`items\` prop: "${id}"`].join('\n'));
28
+ 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.', `Two items were provided with the same id in the \`items\` prop: "${id}"`].join('\n'));
29
29
  }
30
30
  const label = getItemLabel ? getItemLabel(item) : item.label;
31
31
  if (label == null) {
@@ -53,86 +53,96 @@ const updateNodesState = ({
53
53
  itemMap
54
54
  };
55
55
  };
56
- const useTreeViewNodes = ({
56
+ const useTreeViewItems = ({
57
57
  instance,
58
58
  publicAPI,
59
59
  params,
60
60
  state,
61
61
  setState
62
62
  }) => {
63
- const getNode = React.useCallback(itemId => state.nodes.nodeMap[itemId], [state.nodes.nodeMap]);
64
- const getItem = React.useCallback(itemId => state.nodes.itemMap[itemId], [state.nodes.itemMap]);
65
- const isNodeDisabled = React.useCallback(itemId => {
63
+ const getNode = React.useCallback(itemId => state.items.nodeMap[itemId], [state.items.nodeMap]);
64
+ const getItem = React.useCallback(itemId => state.items.itemMap[itemId], [state.items.itemMap]);
65
+ const isItemDisabled = React.useCallback(itemId => {
66
66
  if (itemId == null) {
67
67
  return false;
68
68
  }
69
- let item = instance.getNode(itemId);
69
+ let node = instance.getNode(itemId);
70
70
 
71
- // This can be called before the item has been added to the node map.
72
- if (!item) {
71
+ // This can be called before the item has been added to the item map.
72
+ if (!node) {
73
73
  return false;
74
74
  }
75
- if (item.disabled) {
75
+ if (node.disabled) {
76
76
  return true;
77
77
  }
78
- while (item.parentId != null) {
79
- item = instance.getNode(item.parentId);
80
- if (item.disabled) {
78
+ while (node.parentId != null) {
79
+ node = instance.getNode(node.parentId);
80
+ if (node.disabled) {
81
81
  return true;
82
82
  }
83
83
  }
84
84
  return false;
85
85
  }, [instance]);
86
- const getChildrenIds = React.useCallback(itemId => Object.values(state.nodes.nodeMap).filter(item => item.parentId === itemId).sort((a, b) => a.index - b.index).map(child => child.id), [state.nodes.nodeMap]);
86
+ const getChildrenIds = React.useCallback(itemId => Object.values(state.items.nodeMap).filter(item => item.parentId === itemId).sort((a, b) => a.index - b.index).map(child => child.id), [state.items.nodeMap]);
87
87
  const getNavigableChildrenIds = itemId => {
88
88
  let childrenIds = instance.getChildrenIds(itemId);
89
89
  if (!params.disabledItemsFocusable) {
90
- childrenIds = childrenIds.filter(item => !instance.isNodeDisabled(item));
90
+ childrenIds = childrenIds.filter(item => !instance.isItemDisabled(item));
91
91
  }
92
92
  return childrenIds;
93
93
  };
94
+ const areItemUpdatesPreventedRef = React.useRef(false);
95
+ const preventItemUpdates = React.useCallback(() => {
96
+ areItemUpdatesPreventedRef.current = true;
97
+ }, []);
98
+ const areItemUpdatesPrevented = React.useCallback(() => areItemUpdatesPreventedRef.current, []);
94
99
  React.useEffect(() => {
100
+ if (instance.areItemUpdatesPrevented()) {
101
+ return;
102
+ }
95
103
  setState(prevState => {
96
- const newState = updateNodesState({
104
+ const newState = updateItemsState({
97
105
  items: params.items,
98
106
  isItemDisabled: params.isItemDisabled,
99
107
  getItemId: params.getItemId,
100
108
  getItemLabel: params.getItemLabel
101
109
  });
102
- Object.values(prevState.nodes.nodeMap).forEach(node => {
103
- if (!newState.nodeMap[node.id]) {
104
- (0, _publishTreeViewEvent.publishTreeViewEvent)(instance, 'removeNode', {
105
- id: node.id
110
+ Object.values(prevState.items.nodeMap).forEach(item => {
111
+ if (!newState.nodeMap[item.id]) {
112
+ (0, _publishTreeViewEvent.publishTreeViewEvent)(instance, 'removeItem', {
113
+ id: item.id
106
114
  });
107
115
  }
108
116
  });
109
117
  return (0, _extends2.default)({}, prevState, {
110
- nodes: newState
118
+ items: newState
111
119
  });
112
120
  });
113
121
  }, [instance, setState, params.items, params.isItemDisabled, params.getItemId, params.getItemLabel]);
114
- const getNodesToRender = () => {
122
+ const getItemsToRender = () => {
115
123
  const getPropsFromItemId = ({
116
124
  id,
117
125
  children
118
126
  }) => {
119
- const node = state.nodes.nodeMap[id];
127
+ const item = state.items.nodeMap[id];
120
128
  return {
121
- label: node.label,
122
- itemId: node.id,
123
- id: node.idAttribute,
129
+ label: item.label,
130
+ itemId: item.id,
131
+ id: item.idAttribute,
124
132
  children: children?.map(getPropsFromItemId)
125
133
  };
126
134
  };
127
- return state.nodes.nodeTree.map(getPropsFromItemId);
135
+ return state.items.nodeTree.map(getPropsFromItemId);
128
136
  };
129
137
  (0, _useTreeView.populateInstance)(instance, {
130
138
  getNode,
131
139
  getItem,
132
- getNodesToRender,
140
+ getItemsToRender,
133
141
  getChildrenIds,
134
142
  getNavigableChildrenIds,
135
- isNodeDisabled
143
+ isItemDisabled,
144
+ preventItemUpdates,
145
+ areItemUpdatesPrevented
136
146
  });
137
147
  (0, _useTreeView.populatePublicAPI)(publicAPI, {
138
148
  getItem
@@ -143,19 +153,19 @@ const useTreeViewNodes = ({
143
153
  }
144
154
  };
145
155
  };
146
- exports.useTreeViewNodes = useTreeViewNodes;
147
- useTreeViewNodes.getInitialState = params => ({
148
- nodes: updateNodesState({
156
+ exports.useTreeViewItems = useTreeViewItems;
157
+ useTreeViewItems.getInitialState = params => ({
158
+ items: updateItemsState({
149
159
  items: params.items,
150
160
  isItemDisabled: params.isItemDisabled,
151
161
  getItemId: params.getItemId,
152
162
  getItemLabel: params.getItemLabel
153
163
  })
154
164
  });
155
- useTreeViewNodes.getDefaultizedParams = params => (0, _extends2.default)({}, params, {
165
+ useTreeViewItems.getDefaultizedParams = params => (0, _extends2.default)({}, params, {
156
166
  disabledItemsFocusable: params.disabledItemsFocusable ?? false
157
167
  });
158
- useTreeViewNodes.params = {
168
+ useTreeViewItems.params = {
159
169
  disabledItemsFocusable: true,
160
170
  items: true,
161
171
  isItemDisabled: true,
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "useTreeViewJSXItems", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _useTreeViewJSXItems.useTreeViewJSXItems;
10
+ }
11
+ });
12
+ var _useTreeViewJSXItems = require("./useTreeViewJSXItems");
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.useTreeViewJSXNodes = void 0;
7
+ exports.useTreeViewJSXItems = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
@@ -16,45 +16,46 @@ var _DescendantProvider = require("../../TreeViewProvider/DescendantProvider");
16
16
  var _jsxRuntime = require("react/jsx-runtime");
17
17
  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); }
18
18
  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; }
19
- const useTreeViewJSXNodes = ({
19
+ const useTreeViewJSXItems = ({
20
20
  instance,
21
21
  setState
22
22
  }) => {
23
- const insertJSXNode = (0, _useEventCallback.default)(node => {
23
+ instance.preventItemUpdates();
24
+ const insertJSXItem = (0, _useEventCallback.default)(item => {
24
25
  setState(prevState => {
25
- if (prevState.nodes.nodeMap[node.id] != null) {
26
- 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.', `Tow items were provided with the same id in the \`items\` prop: "${node.id}"`].join('\n'));
26
+ if (prevState.items.nodeMap[item.id] != null) {
27
+ 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.', `Two items were provided with the same id in the \`items\` prop: "${item.id}"`].join('\n'));
27
28
  }
28
29
  return (0, _extends2.default)({}, prevState, {
29
- nodes: (0, _extends2.default)({}, prevState.nodes, {
30
- nodeMap: (0, _extends2.default)({}, prevState.nodes.nodeMap, {
31
- [node.id]: node
30
+ items: (0, _extends2.default)({}, prevState.items, {
31
+ nodeMap: (0, _extends2.default)({}, prevState.items.nodeMap, {
32
+ [item.id]: item
32
33
  }),
33
34
  // For `SimpleTreeView`, we don't have a proper `item` object, so we create a very basic one.
34
- itemMap: (0, _extends2.default)({}, prevState.nodes.itemMap, {
35
- [node.id]: {
36
- id: node.id,
37
- label: node.label
35
+ itemMap: (0, _extends2.default)({}, prevState.items.itemMap, {
36
+ [item.id]: {
37
+ id: item.id,
38
+ label: item.label
38
39
  }
39
40
  })
40
41
  })
41
42
  });
42
43
  });
43
44
  });
44
- const removeJSXNode = (0, _useEventCallback.default)(itemId => {
45
+ const removeJSXItem = (0, _useEventCallback.default)(itemId => {
45
46
  setState(prevState => {
46
- const newNodeMap = (0, _extends2.default)({}, prevState.nodes.nodeMap);
47
- const newItemMap = (0, _extends2.default)({}, prevState.nodes.itemMap);
47
+ const newNodeMap = (0, _extends2.default)({}, prevState.items.nodeMap);
48
+ const newItemMap = (0, _extends2.default)({}, prevState.items.itemMap);
48
49
  delete newNodeMap[itemId];
49
50
  delete newItemMap[itemId];
50
51
  return (0, _extends2.default)({}, prevState, {
51
- nodes: (0, _extends2.default)({}, prevState.nodes, {
52
+ items: (0, _extends2.default)({}, prevState.items, {
52
53
  nodeMap: newNodeMap,
53
54
  itemMap: newItemMap
54
55
  })
55
56
  });
56
57
  });
57
- (0, _publishTreeViewEvent.publishTreeViewEvent)(instance, 'removeNode', {
58
+ (0, _publishTreeViewEvent.publishTreeViewEvent)(instance, 'removeItem', {
58
59
  id: itemId
59
60
  });
60
61
  });
@@ -72,13 +73,13 @@ const useTreeViewJSXNodes = ({
72
73
  };
73
74
  });
74
75
  (0, _useTreeView.populateInstance)(instance, {
75
- insertJSXNode,
76
- removeJSXNode,
76
+ insertJSXItem,
77
+ removeJSXItem,
77
78
  mapFirstCharFromJSX
78
79
  });
79
80
  };
80
- exports.useTreeViewJSXNodes = useTreeViewJSXNodes;
81
- const useTreeViewJSXNodesItemPlugin = ({
81
+ exports.useTreeViewJSXItems = useTreeViewJSXItems;
82
+ const useTreeViewJSXItemsItemPlugin = ({
82
83
  props,
83
84
  rootRef,
84
85
  contentRef
@@ -113,9 +114,9 @@ const useTreeViewJSXNodesItemPlugin = ({
113
114
  parentId
114
115
  } = (0, _DescendantProvider.useDescendant)(descendant);
115
116
  React.useEffect(() => {
116
- // On the first render a node's index will be -1. We want to wait for the real index.
117
+ // On the first render a item's index will be -1. We want to wait for the real index.
117
118
  if (index !== -1) {
118
- instance.insertJSXNode({
119
+ instance.insertJSXItem({
119
120
  id: itemId,
120
121
  idAttribute: id,
121
122
  index,
@@ -123,7 +124,7 @@ const useTreeViewJSXNodesItemPlugin = ({
123
124
  expandable,
124
125
  disabled
125
126
  });
126
- return () => instance.removeJSXNode(itemId);
127
+ return () => instance.removeJSXItem(itemId);
127
128
  }
128
129
  return undefined;
129
130
  }, [instance, parentId, index, itemId, expandable, disabled, id]);
@@ -138,12 +139,12 @@ const useTreeViewJSXNodesItemPlugin = ({
138
139
  rootRef: handleRootRef
139
140
  };
140
141
  };
141
- useTreeViewJSXNodes.itemPlugin = useTreeViewJSXNodesItemPlugin;
142
- useTreeViewJSXNodes.wrapItem = ({
142
+ useTreeViewJSXItems.itemPlugin = useTreeViewJSXItemsItemPlugin;
143
+ useTreeViewJSXItems.wrapItem = ({
143
144
  children,
144
145
  itemId
145
146
  }) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_DescendantProvider.DescendantProvider, {
146
147
  id: itemId,
147
148
  children: children
148
149
  });
149
- useTreeViewJSXNodes.params = {};
150
+ useTreeViewJSXItems.params = {};