@mui/x-tree-view 7.3.0 → 7.3.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.
- package/CHANGELOG.md +79 -2
- package/TreeItem/TreeItem.js +1 -2
- package/TreeItem/TreeItemContent.js +1 -2
- package/TreeItem/useTreeItemState.js +1 -3
- package/TreeItem2/TreeItem2.js +1 -2
- package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +1 -3
- package/index.js +1 -1
- package/internals/TreeViewProvider/useTreeViewContext.d.ts +1 -1
- package/internals/hooks/useInstanceEventHandler.d.ts +2 -2
- package/internals/models/treeView.d.ts +0 -6
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +1 -4
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +31 -63
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +82 -94
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +32 -5
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +9 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +21 -0
- package/internals/useTreeView/useTreeView.types.d.ts +1 -1
- package/internals/useTreeView/useTreeViewModels.d.ts +1 -1
- package/internals/utils/extractPluginParamsFromProps.d.ts +1 -1
- package/internals/utils/publishTreeViewEvent.d.ts +1 -1
- package/internals/utils/tree.d.ts +17 -1
- package/internals/utils/tree.js +34 -4
- package/modern/TreeItem/TreeItem.js +1 -2
- package/modern/TreeItem/TreeItemContent.js +1 -2
- package/modern/TreeItem/useTreeItemState.js +1 -3
- package/modern/TreeItem2/TreeItem2.js +1 -2
- package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +1 -3
- package/modern/index.js +1 -1
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +1 -4
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +31 -63
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +82 -94
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +21 -0
- package/modern/internals/utils/tree.js +34 -4
- package/node/RichTreeView/RichTreeView.js +1 -1
- package/node/SimpleTreeView/SimpleTreeView.js +1 -1
- package/node/TreeItem/TreeItem.js +1 -1
- package/node/TreeItem/TreeItemContent.js +1 -1
- package/node/TreeItem/useTreeItemState.js +1 -3
- package/node/TreeItem2/TreeItem2.js +1 -1
- package/node/TreeItem2Icon/TreeItem2Icon.js +1 -1
- package/node/TreeView/TreeView.js +1 -1
- package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +1 -3
- package/node/hooks/useTreeViewApiRef.js +1 -1
- package/node/icons/icons.js +1 -1
- package/node/index.js +1 -1
- package/node/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +1 -1
- package/node/internals/TreeViewProvider/TreeViewContext.js +1 -1
- package/node/internals/TreeViewProvider/TreeViewProvider.js +1 -1
- package/node/internals/TreeViewProvider/useTreeViewContext.js +1 -1
- package/node/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +1 -1
- package/node/internals/hooks/useInstanceEventHandler.js +1 -1
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +1 -1
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +2 -5
- package/node/internals/plugins/useTreeViewId/useTreeViewId.js +1 -1
- package/node/internals/plugins/useTreeViewItems/useTreeViewItems.js +1 -1
- package/node/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +1 -1
- package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +32 -64
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +82 -94
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +29 -0
- package/node/internals/useTreeView/useTreeView.js +1 -1
- package/node/internals/useTreeView/useTreeViewModels.js +1 -1
- package/node/internals/utils/tree.js +37 -5
- package/package.json +3 -5
|
@@ -8,16 +8,27 @@ exports.useTreeViewSelection = void 0;
|
|
|
8
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
9
|
var React = _interopRequireWildcard(require("react"));
|
|
10
10
|
var _tree = require("../../utils/tree");
|
|
11
|
+
var _useTreeViewSelection = require("./useTreeViewSelection.utils");
|
|
11
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); }
|
|
12
|
-
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 &&
|
|
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 && {}.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; }
|
|
13
14
|
const useTreeViewSelection = ({
|
|
14
15
|
instance,
|
|
15
16
|
params,
|
|
16
17
|
models
|
|
17
18
|
}) => {
|
|
18
19
|
const lastSelectedItem = React.useRef(null);
|
|
19
|
-
const
|
|
20
|
-
const
|
|
20
|
+
const lastSelectedRange = React.useRef({});
|
|
21
|
+
const selectedItemsMap = React.useMemo(() => {
|
|
22
|
+
const temp = new Map();
|
|
23
|
+
if (Array.isArray(models.selectedItems.value)) {
|
|
24
|
+
models.selectedItems.value.forEach(id => {
|
|
25
|
+
temp.set(id, true);
|
|
26
|
+
});
|
|
27
|
+
} else if (models.selectedItems.value != null) {
|
|
28
|
+
temp.set(models.selectedItems.value, true);
|
|
29
|
+
}
|
|
30
|
+
return temp;
|
|
31
|
+
}, [models.selectedItems.value]);
|
|
21
32
|
const setSelectedItems = (event, newSelectedItems) => {
|
|
22
33
|
if (params.onItemSelectionToggle) {
|
|
23
34
|
if (params.multiSelect) {
|
|
@@ -43,115 +54,90 @@ const useTreeViewSelection = ({
|
|
|
43
54
|
}
|
|
44
55
|
models.selectedItems.setControlledValue(newSelectedItems);
|
|
45
56
|
};
|
|
46
|
-
const isItemSelected = itemId =>
|
|
57
|
+
const isItemSelected = itemId => selectedItemsMap.has(itemId);
|
|
47
58
|
const selectItem = (event, itemId, multiple = false) => {
|
|
48
59
|
if (params.disableSelection) {
|
|
49
60
|
return;
|
|
50
61
|
}
|
|
62
|
+
let newSelected;
|
|
51
63
|
if (multiple) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
newSelected = [itemId].concat(models.selectedItems.value);
|
|
58
|
-
}
|
|
59
|
-
setSelectedItems(event, newSelected);
|
|
64
|
+
const cleanSelectedItems = (0, _useTreeViewSelection.convertSelectedItemsToArray)(models.selectedItems.value);
|
|
65
|
+
if (instance.isItemSelected(itemId)) {
|
|
66
|
+
newSelected = cleanSelectedItems.filter(id => id !== itemId);
|
|
67
|
+
} else {
|
|
68
|
+
newSelected = [itemId].concat(cleanSelectedItems);
|
|
60
69
|
}
|
|
61
70
|
} else {
|
|
62
|
-
|
|
63
|
-
setSelectedItems(event, newSelected);
|
|
71
|
+
newSelected = params.multiSelect ? [itemId] : itemId;
|
|
64
72
|
}
|
|
73
|
+
setSelectedItems(event, newSelected);
|
|
65
74
|
lastSelectedItem.current = itemId;
|
|
66
|
-
|
|
67
|
-
currentRangeSelection.current = [];
|
|
75
|
+
lastSelectedRange.current = {};
|
|
68
76
|
};
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
const {
|
|
72
|
-
start,
|
|
73
|
-
next,
|
|
74
|
-
current
|
|
75
|
-
} = items;
|
|
76
|
-
if (!next || !current) {
|
|
77
|
+
const selectRange = (event, [start, end]) => {
|
|
78
|
+
if (params.disableSelection || !params.multiSelect) {
|
|
77
79
|
return;
|
|
78
80
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
currentRangeSelection.current = currentRangeSelection.current.filter(id => id === start || id !== current);
|
|
86
|
-
} else {
|
|
87
|
-
base.push(next);
|
|
88
|
-
currentRangeSelection.current.push(next);
|
|
89
|
-
}
|
|
90
|
-
} else {
|
|
91
|
-
base.push(next);
|
|
92
|
-
currentRangeSelection.current.push(current, next);
|
|
81
|
+
let newSelectedItems = (0, _useTreeViewSelection.convertSelectedItemsToArray)(models.selectedItems.value).slice();
|
|
82
|
+
|
|
83
|
+
// If the last selection was a range selection,
|
|
84
|
+
// remove the items that were part of the last range from the model
|
|
85
|
+
if (Object.keys(lastSelectedRange.current).length > 0) {
|
|
86
|
+
newSelectedItems = newSelectedItems.filter(id => !lastSelectedRange.current[id]);
|
|
93
87
|
}
|
|
94
|
-
|
|
88
|
+
|
|
89
|
+
// Add to the model the items that are part of the new range and not already part of the model.
|
|
90
|
+
const selectedItemsLookup = (0, _useTreeViewSelection.getLookupFromArray)(newSelectedItems);
|
|
91
|
+
const range = (0, _tree.getNonDisabledItemsInRange)(instance, start, end);
|
|
92
|
+
const itemsToAddToModel = range.filter(id => !selectedItemsLookup[id]);
|
|
93
|
+
newSelectedItems = newSelectedItems.concat(itemsToAddToModel);
|
|
94
|
+
setSelectedItems(event, newSelectedItems);
|
|
95
|
+
lastSelectedRange.current = (0, _useTreeViewSelection.getLookupFromArray)(range);
|
|
95
96
|
};
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
start,
|
|
100
|
-
end
|
|
101
|
-
} = items;
|
|
102
|
-
// If last selection was a range selection ignore items that were selected.
|
|
103
|
-
if (lastSelectionWasRange.current) {
|
|
104
|
-
base = base.filter(id => currentRangeSelection.current.indexOf(id) === -1);
|
|
97
|
+
const expandSelectionRange = (event, itemId) => {
|
|
98
|
+
if (lastSelectedItem.current != null) {
|
|
99
|
+
const [start, end] = (0, _tree.findOrderInTremauxTree)(instance, itemId, lastSelectedItem.current);
|
|
100
|
+
selectRange(event, [start, end]);
|
|
105
101
|
}
|
|
106
|
-
let range = (0, _tree.getNavigableItemsInRange)(instance, start, end);
|
|
107
|
-
range = range.filter(item => !instance.isItemDisabled(item));
|
|
108
|
-
currentRangeSelection.current = range;
|
|
109
|
-
let newSelected = base.concat(range);
|
|
110
|
-
newSelected = newSelected.filter((id, i) => newSelected.indexOf(id) === i);
|
|
111
|
-
setSelectedItems(event, newSelected);
|
|
112
102
|
};
|
|
113
|
-
const
|
|
114
|
-
|
|
103
|
+
const selectRangeFromStartToItem = (event, itemId) => {
|
|
104
|
+
selectRange(event, [(0, _tree.getFirstNavigableItem)(instance), itemId]);
|
|
105
|
+
};
|
|
106
|
+
const selectRangeFromItemToEnd = (event, itemId) => {
|
|
107
|
+
selectRange(event, [itemId, (0, _tree.getLastNavigableItem)(instance)]);
|
|
108
|
+
};
|
|
109
|
+
const selectAllNavigableItems = event => {
|
|
110
|
+
if (params.disableSelection || !params.multiSelect) {
|
|
115
111
|
return;
|
|
116
112
|
}
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
current
|
|
121
|
-
} = items;
|
|
122
|
-
if (stacked) {
|
|
123
|
-
handleRangeArrowSelect(event, {
|
|
124
|
-
start,
|
|
125
|
-
next: end,
|
|
126
|
-
current
|
|
127
|
-
});
|
|
128
|
-
} else if (start != null && end != null) {
|
|
129
|
-
handleRangeSelect(event, {
|
|
130
|
-
start,
|
|
131
|
-
end
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
lastSelectionWasRange.current = true;
|
|
113
|
+
const navigableItems = (0, _tree.getAllNavigableItems)(instance);
|
|
114
|
+
setSelectedItems(event, navigableItems);
|
|
115
|
+
lastSelectedRange.current = (0, _useTreeViewSelection.getLookupFromArray)(navigableItems);
|
|
135
116
|
};
|
|
136
|
-
const
|
|
137
|
-
if (!
|
|
138
|
-
|
|
117
|
+
const selectItemFromArrowNavigation = (event, currentItem, nextItem) => {
|
|
118
|
+
if (params.disableSelection || !params.multiSelect) {
|
|
119
|
+
return;
|
|
139
120
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
121
|
+
let newSelectedItems = (0, _useTreeViewSelection.convertSelectedItemsToArray)(models.selectedItems.value).slice();
|
|
122
|
+
if (Object.keys(lastSelectedRange.current).length === 0) {
|
|
123
|
+
newSelectedItems.push(nextItem);
|
|
124
|
+
lastSelectedRange.current = {
|
|
125
|
+
[currentItem]: true,
|
|
126
|
+
[nextItem]: true
|
|
127
|
+
};
|
|
128
|
+
} else {
|
|
129
|
+
if (!lastSelectedRange.current[currentItem]) {
|
|
130
|
+
lastSelectedRange.current = {};
|
|
131
|
+
}
|
|
132
|
+
if (lastSelectedRange.current[nextItem]) {
|
|
133
|
+
newSelectedItems = newSelectedItems.filter(id => id !== currentItem);
|
|
134
|
+
delete lastSelectedRange.current[currentItem];
|
|
135
|
+
} else {
|
|
136
|
+
newSelectedItems.push(nextItem);
|
|
137
|
+
lastSelectedRange.current[nextItem] = true;
|
|
138
|
+
}
|
|
149
139
|
}
|
|
150
|
-
|
|
151
|
-
instance.selectRange(event, {
|
|
152
|
-
start,
|
|
153
|
-
end: (0, _tree.getLastNavigableItem)(instance)
|
|
154
|
-
});
|
|
140
|
+
setSelectedItems(event, newSelectedItems);
|
|
155
141
|
};
|
|
156
142
|
return {
|
|
157
143
|
getRootProps: () => ({
|
|
@@ -160,9 +146,11 @@ const useTreeViewSelection = ({
|
|
|
160
146
|
instance: {
|
|
161
147
|
isItemSelected,
|
|
162
148
|
selectItem,
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
149
|
+
selectAllNavigableItems,
|
|
150
|
+
expandSelectionRange,
|
|
151
|
+
selectRangeFromStartToItem,
|
|
152
|
+
selectRangeFromItemToEnd,
|
|
153
|
+
selectItemFromArrowNavigation
|
|
166
154
|
},
|
|
167
155
|
contextValue: {
|
|
168
156
|
selection: {
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getLookupFromArray = exports.convertSelectedItemsToArray = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Transform the `selectedItems` model to be an array if it was a string or null.
|
|
9
|
+
* @param {string[] | string | null} model The raw model.
|
|
10
|
+
* @returns {string[]} The converted model.
|
|
11
|
+
*/
|
|
12
|
+
const convertSelectedItemsToArray = model => {
|
|
13
|
+
if (Array.isArray(model)) {
|
|
14
|
+
return model;
|
|
15
|
+
}
|
|
16
|
+
if (model != null) {
|
|
17
|
+
return [model];
|
|
18
|
+
}
|
|
19
|
+
return [];
|
|
20
|
+
};
|
|
21
|
+
exports.convertSelectedItemsToArray = convertSelectedItemsToArray;
|
|
22
|
+
const getLookupFromArray = array => {
|
|
23
|
+
const lookup = {};
|
|
24
|
+
array.forEach(itemId => {
|
|
25
|
+
lookup[itemId] = true;
|
|
26
|
+
});
|
|
27
|
+
return lookup;
|
|
28
|
+
};
|
|
29
|
+
exports.getLookupFromArray = getLookupFromArray;
|
|
@@ -12,7 +12,7 @@ var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
|
|
|
12
12
|
var _useTreeViewModels = require("./useTreeViewModels");
|
|
13
13
|
var _corePlugins = require("../corePlugins");
|
|
14
14
|
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
|
-
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 &&
|
|
15
|
+
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
16
|
function useTreeViewApiInitialization(inputApiRef) {
|
|
17
17
|
const fallbackPublicApiRef = React.useRef({});
|
|
18
18
|
if (inputApiRef) {
|
|
@@ -8,7 +8,7 @@ exports.useTreeViewModels = void 0;
|
|
|
8
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
9
|
var React = _interopRequireWildcard(require("react"));
|
|
10
10
|
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); }
|
|
11
|
-
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 &&
|
|
11
|
+
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; }
|
|
12
12
|
/**
|
|
13
13
|
* Implements the same behavior as `useControlled` but for several models.
|
|
14
14
|
* The controlled models are never stored in the state and the state is only updated if the model is not controlled.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.getPreviousNavigableItem = exports.
|
|
6
|
+
exports.getPreviousNavigableItem = exports.getNonDisabledItemsInRange = exports.getNextNavigableItem = exports.getLastNavigableItem = exports.getFirstNavigableItem = exports.getAllNavigableItems = exports.findOrderInTremauxTree = void 0;
|
|
7
7
|
const getLastNavigableItemInArray = (instance, items) => {
|
|
8
8
|
// Equivalent to Array.prototype.findLastIndex
|
|
9
9
|
let itemIndex = items.length - 1;
|
|
@@ -135,14 +135,46 @@ const findOrderInTremauxTree = (instance, itemAId, itemBId) => {
|
|
|
135
135
|
const bSide = bFamily[bFamily.indexOf(commonAncestor) - 1];
|
|
136
136
|
return ancestorFamily.indexOf(aSide) < ancestorFamily.indexOf(bSide) ? [itemAId, itemBId] : [itemBId, itemAId];
|
|
137
137
|
};
|
|
138
|
-
|
|
138
|
+
exports.findOrderInTremauxTree = findOrderInTremauxTree;
|
|
139
|
+
const getNonDisabledItemsInRange = (instance, itemAId, itemBId) => {
|
|
140
|
+
const getNextItem = itemId => {
|
|
141
|
+
// If the item is expanded and has some children, return the first of them.
|
|
142
|
+
if (instance.isItemExpandable(itemId) && instance.isItemExpanded(itemId)) {
|
|
143
|
+
return instance.getItemOrderedChildrenIds(itemId)[0];
|
|
144
|
+
}
|
|
145
|
+
let itemMeta = instance.getItemMeta(itemId);
|
|
146
|
+
while (itemMeta != null) {
|
|
147
|
+
// Try to find the first navigable sibling after the current item.
|
|
148
|
+
const siblings = instance.getItemOrderedChildrenIds(itemMeta.parentId);
|
|
149
|
+
const currentItemIndex = instance.getItemIndex(itemMeta.id);
|
|
150
|
+
if (currentItemIndex < siblings.length - 1) {
|
|
151
|
+
return siblings[currentItemIndex + 1];
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// If the item is the last of its siblings, go up a level to the parent and try again.
|
|
155
|
+
itemMeta = instance.getItemMeta(itemMeta.parentId);
|
|
156
|
+
}
|
|
157
|
+
throw new Error('Invalid range');
|
|
158
|
+
};
|
|
139
159
|
const [first, last] = findOrderInTremauxTree(instance, itemAId, itemBId);
|
|
140
160
|
const items = [first];
|
|
141
161
|
let current = first;
|
|
142
162
|
while (current !== last) {
|
|
143
|
-
current =
|
|
144
|
-
|
|
163
|
+
current = getNextItem(current);
|
|
164
|
+
if (!instance.isItemDisabled(current)) {
|
|
165
|
+
items.push(current);
|
|
166
|
+
}
|
|
145
167
|
}
|
|
146
168
|
return items;
|
|
147
169
|
};
|
|
148
|
-
exports.
|
|
170
|
+
exports.getNonDisabledItemsInRange = getNonDisabledItemsInRange;
|
|
171
|
+
const getAllNavigableItems = instance => {
|
|
172
|
+
let item = getFirstNavigableItem(instance);
|
|
173
|
+
const navigableItems = [];
|
|
174
|
+
while (item != null) {
|
|
175
|
+
navigableItems.push(item);
|
|
176
|
+
item = getNextNavigableItem(instance, item);
|
|
177
|
+
}
|
|
178
|
+
return navigableItems;
|
|
179
|
+
};
|
|
180
|
+
exports.getAllNavigableItems = getAllNavigableItems;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mui/x-tree-view",
|
|
3
|
-
"version": "7.3.
|
|
3
|
+
"version": "7.3.1",
|
|
4
4
|
"description": "The community edition of the Tree View components (MUI X).",
|
|
5
5
|
"author": "MUI Team",
|
|
6
6
|
"main": "./node/index.js",
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
},
|
|
16
16
|
"sideEffects": false,
|
|
17
17
|
"publishConfig": {
|
|
18
|
-
"access": "public"
|
|
18
|
+
"access": "public",
|
|
19
|
+
"directory": "build"
|
|
19
20
|
},
|
|
20
21
|
"keywords": [
|
|
21
22
|
"react",
|
|
@@ -48,9 +49,6 @@
|
|
|
48
49
|
"react": "^17.0.0 || ^18.0.0",
|
|
49
50
|
"react-dom": "^17.0.0 || ^18.0.0"
|
|
50
51
|
},
|
|
51
|
-
"setupFiles": [
|
|
52
|
-
"<rootDir>/src/setupTests.js"
|
|
53
|
-
],
|
|
54
52
|
"engines": {
|
|
55
53
|
"node": ">=14.0.0"
|
|
56
54
|
},
|