@mui/x-tree-view 7.0.0-alpha.1 → 7.0.0-alpha.7
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 +1254 -188
- package/README.md +0 -1
- package/RichTreeView/RichTreeView.d.ts +20 -0
- package/RichTreeView/RichTreeView.js +324 -0
- package/RichTreeView/RichTreeView.types.d.ts +55 -0
- package/RichTreeView/RichTreeView.types.js +1 -0
- package/RichTreeView/index.d.ts +3 -0
- package/RichTreeView/index.js +3 -0
- package/RichTreeView/package.json +6 -0
- package/RichTreeView/richTreeViewClasses.d.ts +7 -0
- package/RichTreeView/richTreeViewClasses.js +6 -0
- package/SimpleTreeView/SimpleTreeView.d.ts +20 -0
- package/SimpleTreeView/SimpleTreeView.js +268 -0
- package/SimpleTreeView/SimpleTreeView.plugins.d.ts +6 -0
- package/SimpleTreeView/SimpleTreeView.plugins.js +5 -0
- package/SimpleTreeView/SimpleTreeView.types.d.ts +38 -0
- package/SimpleTreeView/SimpleTreeView.types.js +1 -0
- package/SimpleTreeView/index.d.ts +3 -0
- package/SimpleTreeView/index.js +3 -0
- package/SimpleTreeView/package.json +6 -0
- package/SimpleTreeView/simpleTreeViewClasses.d.ts +7 -0
- package/SimpleTreeView/simpleTreeViewClasses.js +6 -0
- package/TreeItem/TreeItem.js +44 -89
- package/TreeItem/TreeItem.types.d.ts +2 -1
- package/TreeItem/index.d.ts +2 -2
- package/TreeItem/index.js +2 -2
- package/TreeItem/useTreeItem.js +5 -5
- package/TreeView/TreeView.d.ts +4 -0
- package/TreeView/TreeView.js +80 -87
- package/TreeView/TreeView.types.d.ts +4 -26
- package/TreeView/index.d.ts +1 -1
- package/index.d.ts +3 -0
- package/index.js +5 -2
- package/internals/TreeViewProvider/TreeViewContext.d.ts +1 -2
- package/internals/TreeViewProvider/TreeViewContext.js +1 -14
- package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -3
- package/internals/TreeViewProvider/useTreeViewContext.js +7 -1
- package/internals/corePlugins/corePlugins.d.ts +1 -1
- package/internals/corePlugins/corePlugins.js +1 -1
- package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.d.ts +0 -5
- package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +0 -6
- package/internals/hooks/useLazyRef.d.ts +2 -0
- package/internals/hooks/useLazyRef.js +11 -0
- package/internals/hooks/useOnMount.d.ts +2 -0
- package/internals/hooks/useOnMount.js +7 -0
- package/internals/hooks/useTimeout.d.ts +9 -0
- package/internals/hooks/useTimeout.js +28 -0
- package/internals/models/plugin.d.ts +23 -0
- package/internals/models/treeView.d.ts +5 -1
- package/internals/plugins/defaultPlugins.d.ts +3 -2
- package/internals/plugins/defaultPlugins.js +2 -1
- package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +8 -6
- package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.d.ts +1 -6
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +26 -17
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +12 -5
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +13 -6
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +4 -1
- package/internals/plugins/useTreeViewId/index.d.ts +2 -0
- package/internals/plugins/useTreeViewId/index.js +1 -0
- package/internals/plugins/useTreeViewId/useTreeViewId.d.ts +3 -0
- package/internals/plugins/useTreeViewId/useTreeViewId.js +18 -0
- package/internals/plugins/useTreeViewId/useTreeViewId.types.d.ts +17 -0
- package/internals/plugins/useTreeViewId/useTreeViewId.types.js +1 -0
- package/internals/plugins/useTreeViewJSXNodes/index.d.ts +2 -0
- package/internals/plugins/useTreeViewJSXNodes/index.js +1 -0
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.d.ts +3 -0
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +114 -0
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.d.ts +16 -0
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +1 -0
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +20 -9
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +5 -2
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +83 -18
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +48 -5
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.d.ts +1 -1
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +41 -28
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +15 -8
- package/internals/useTreeView/useTreeView.js +40 -3
- package/internals/useTreeView/useTreeView.types.d.ts +2 -1
- package/internals/utils/warning.d.ts +1 -0
- package/internals/utils/warning.js +14 -0
- package/legacy/RichTreeView/RichTreeView.js +317 -0
- package/legacy/RichTreeView/RichTreeView.types.js +1 -0
- package/legacy/RichTreeView/index.js +3 -0
- package/legacy/RichTreeView/richTreeViewClasses.js +6 -0
- package/legacy/SimpleTreeView/SimpleTreeView.js +264 -0
- package/legacy/SimpleTreeView/SimpleTreeView.plugins.js +6 -0
- package/legacy/SimpleTreeView/SimpleTreeView.types.js +1 -0
- package/legacy/SimpleTreeView/index.js +3 -0
- package/legacy/SimpleTreeView/simpleTreeViewClasses.js +6 -0
- package/legacy/TreeItem/TreeItem.js +49 -103
- package/legacy/TreeItem/index.js +2 -2
- package/legacy/TreeItem/useTreeItem.js +5 -5
- package/legacy/TreeView/TreeView.js +80 -82
- package/legacy/index.js +5 -2
- package/legacy/internals/TreeViewProvider/TreeViewContext.js +1 -14
- package/legacy/internals/TreeViewProvider/useTreeViewContext.js +5 -1
- package/legacy/internals/corePlugins/corePlugins.js +1 -1
- package/legacy/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +0 -6
- package/legacy/internals/hooks/useLazyRef.js +11 -0
- package/legacy/internals/hooks/useOnMount.js +7 -0
- package/legacy/internals/hooks/useTimeout.js +38 -0
- package/legacy/internals/plugins/defaultPlugins.js +2 -1
- package/legacy/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +11 -8
- package/legacy/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +26 -17
- package/legacy/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +13 -6
- package/legacy/internals/plugins/useTreeViewId/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewId/useTreeViewId.js +21 -0
- package/legacy/internals/plugins/useTreeViewId/useTreeViewId.types.js +1 -0
- package/legacy/internals/plugins/useTreeViewJSXNodes/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +120 -0
- package/legacy/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +1 -0
- package/legacy/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +20 -9
- package/legacy/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +89 -20
- package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +45 -28
- package/legacy/internals/useTreeView/useTreeView.js +39 -3
- package/legacy/internals/utils/warning.js +15 -0
- package/legacy/models/index.js +1 -0
- package/legacy/models/items.js +1 -0
- package/models/index.d.ts +1 -0
- package/models/index.js +1 -0
- package/models/items.d.ts +7 -0
- package/models/items.js +1 -0
- package/models/package.json +6 -0
- package/modern/RichTreeView/RichTreeView.js +322 -0
- package/modern/RichTreeView/RichTreeView.types.js +1 -0
- package/modern/RichTreeView/index.js +3 -0
- package/modern/RichTreeView/richTreeViewClasses.js +6 -0
- package/modern/SimpleTreeView/SimpleTreeView.js +267 -0
- package/modern/SimpleTreeView/SimpleTreeView.plugins.js +5 -0
- package/modern/SimpleTreeView/SimpleTreeView.types.js +1 -0
- package/modern/SimpleTreeView/index.js +3 -0
- package/modern/SimpleTreeView/simpleTreeViewClasses.js +6 -0
- package/modern/TreeItem/TreeItem.js +44 -88
- package/modern/TreeItem/index.js +2 -2
- package/modern/TreeItem/useTreeItem.js +5 -5
- package/modern/TreeView/TreeView.js +80 -87
- package/modern/index.js +5 -2
- package/modern/internals/TreeViewProvider/TreeViewContext.js +1 -14
- package/modern/internals/TreeViewProvider/useTreeViewContext.js +7 -1
- package/modern/internals/corePlugins/corePlugins.js +1 -1
- package/modern/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +0 -6
- package/modern/internals/hooks/useLazyRef.js +11 -0
- package/modern/internals/hooks/useOnMount.js +7 -0
- package/modern/internals/hooks/useTimeout.js +28 -0
- package/modern/internals/plugins/defaultPlugins.js +2 -1
- package/modern/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +8 -6
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +26 -17
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -6
- package/modern/internals/plugins/useTreeViewId/index.js +1 -0
- package/modern/internals/plugins/useTreeViewId/useTreeViewId.js +18 -0
- package/modern/internals/plugins/useTreeViewId/useTreeViewId.types.js +1 -0
- package/modern/internals/plugins/useTreeViewJSXNodes/index.js +1 -0
- package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +113 -0
- package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +1 -0
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +19 -9
- package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +82 -18
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +41 -28
- package/modern/internals/useTreeView/useTreeView.js +40 -3
- package/modern/internals/utils/warning.js +14 -0
- package/modern/models/index.js +1 -0
- package/modern/models/items.js +1 -0
- package/node/RichTreeView/RichTreeView.js +330 -0
- package/node/RichTreeView/RichTreeView.types.js +5 -0
- package/node/RichTreeView/index.js +27 -0
- package/node/RichTreeView/richTreeViewClasses.js +14 -0
- package/node/SimpleTreeView/SimpleTreeView.js +275 -0
- package/node/SimpleTreeView/SimpleTreeView.plugins.js +11 -0
- package/node/SimpleTreeView/SimpleTreeView.types.js +5 -0
- package/node/SimpleTreeView/index.js +27 -0
- package/node/SimpleTreeView/simpleTreeViewClasses.js +14 -0
- package/node/TreeItem/TreeItem.js +44 -88
- package/node/TreeItem/index.js +11 -15
- package/node/TreeItem/useTreeItem.js +5 -5
- package/node/TreeView/TreeView.js +80 -87
- package/node/index.js +38 -2
- package/node/internals/TreeViewProvider/TreeViewContext.js +2 -15
- package/node/internals/TreeViewProvider/useTreeViewContext.js +7 -1
- package/node/internals/corePlugins/corePlugins.js +1 -1
- package/node/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +0 -6
- package/node/internals/hooks/useLazyRef.js +19 -0
- package/node/internals/hooks/useOnMount.js +15 -0
- package/node/internals/hooks/useTimeout.js +34 -0
- package/node/internals/plugins/defaultPlugins.js +2 -1
- package/node/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +8 -7
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +26 -17
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -6
- package/node/internals/plugins/useTreeViewId/index.js +12 -0
- package/node/internals/plugins/useTreeViewId/useTreeViewId.js +28 -0
- package/node/internals/plugins/useTreeViewId/useTreeViewId.types.js +5 -0
- package/node/internals/plugins/useTreeViewJSXNodes/index.js +12 -0
- package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +123 -0
- package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +5 -0
- package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +19 -9
- package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +82 -18
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +41 -28
- package/node/internals/useTreeView/useTreeView.js +40 -3
- package/node/internals/utils/warning.js +21 -0
- package/node/models/index.js +16 -0
- package/node/models/items.js +5 -0
- package/package.json +8 -7
- package/themeAugmentation/components.d.ts +14 -4
- package/themeAugmentation/overrides.d.ts +8 -4
- package/themeAugmentation/props.d.ts +7 -3
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.TREE_VIEW_CORE_PLUGINS = void 0;
|
|
7
7
|
var _useTreeViewInstanceEvents = require("./useTreeViewInstanceEvents");
|
|
8
8
|
/**
|
|
9
|
-
* Internal plugins that
|
|
9
|
+
* Internal plugins that create the tools used by the other plugins.
|
|
10
10
|
* These plugins are used by the tree view components.
|
|
11
11
|
*/
|
|
12
12
|
const TREE_VIEW_CORE_PLUGINS = exports.TREE_VIEW_CORE_PLUGINS = [_useTreeViewInstanceEvents.useTreeViewInstanceEvents];
|
|
@@ -12,12 +12,6 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
|
|
|
12
12
|
const isSyntheticEvent = event => {
|
|
13
13
|
return event.isPropagationStopped !== undefined;
|
|
14
14
|
};
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Plugin responsible for the registration of the nodes defined as JSX children of the TreeView.
|
|
18
|
-
* When we will have both a SimpleTreeView using JSX children and a TreeView using a data prop,
|
|
19
|
-
* this plugin will only be used by SimpleTreeView.
|
|
20
|
-
*/
|
|
21
15
|
const useTreeViewInstanceEvents = ({
|
|
22
16
|
instance
|
|
23
17
|
}) => {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useLazyRef = useLazyRef;
|
|
7
|
+
var React = _interopRequireWildcard(require("react"));
|
|
8
|
+
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); }
|
|
9
|
+
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; }
|
|
10
|
+
const UNINITIALIZED = {};
|
|
11
|
+
|
|
12
|
+
// See https://github.com/facebook/react/issues/14490 for when to use this.
|
|
13
|
+
function useLazyRef(init, initArg) {
|
|
14
|
+
const ref = React.useRef(UNINITIALIZED);
|
|
15
|
+
if (ref.current === UNINITIALIZED) {
|
|
16
|
+
ref.current = init(initArg);
|
|
17
|
+
}
|
|
18
|
+
return ref;
|
|
19
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useOnMount = useOnMount;
|
|
7
|
+
var React = _interopRequireWildcard(require("react"));
|
|
8
|
+
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); }
|
|
9
|
+
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; }
|
|
10
|
+
const EMPTY = [];
|
|
11
|
+
function useOnMount(fn) {
|
|
12
|
+
/* eslint-disable react-hooks/exhaustive-deps */
|
|
13
|
+
React.useEffect(fn, EMPTY);
|
|
14
|
+
/* eslint-enable react-hooks/exhaustive-deps */
|
|
15
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useTimeout = useTimeout;
|
|
7
|
+
var _useLazyRef = require("./useLazyRef");
|
|
8
|
+
var _useOnMount = require("./useOnMount");
|
|
9
|
+
class Timeout {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.currentId = 0;
|
|
12
|
+
this.clear = () => {
|
|
13
|
+
if (this.currentId !== 0) {
|
|
14
|
+
clearTimeout(this.currentId);
|
|
15
|
+
this.currentId = 0;
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
this.disposeEffect = () => {
|
|
19
|
+
return this.clear;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
static create() {
|
|
23
|
+
return new Timeout();
|
|
24
|
+
}
|
|
25
|
+
start(delay, fn) {
|
|
26
|
+
this.clear();
|
|
27
|
+
this.currentId = setTimeout(fn, delay);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function useTimeout() {
|
|
31
|
+
const timeout = (0, _useLazyRef.useLazyRef)(Timeout.create).current;
|
|
32
|
+
(0, _useOnMount.useOnMount)(timeout.disposeEffect);
|
|
33
|
+
return timeout;
|
|
34
|
+
}
|
|
@@ -4,12 +4,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.DEFAULT_TREE_VIEW_PLUGINS = void 0;
|
|
7
|
+
var _useTreeViewId = require("./useTreeViewId");
|
|
7
8
|
var _useTreeViewNodes = require("./useTreeViewNodes");
|
|
8
9
|
var _useTreeViewExpansion = require("./useTreeViewExpansion");
|
|
9
10
|
var _useTreeViewSelection = require("./useTreeViewSelection");
|
|
10
11
|
var _useTreeViewFocus = require("./useTreeViewFocus");
|
|
11
12
|
var _useTreeViewKeyboardNavigation = require("./useTreeViewKeyboardNavigation");
|
|
12
13
|
var _useTreeViewContextValueBuilder = require("./useTreeViewContextValueBuilder");
|
|
13
|
-
const DEFAULT_TREE_VIEW_PLUGINS = exports.DEFAULT_TREE_VIEW_PLUGINS = [_useTreeViewNodes.useTreeViewNodes, _useTreeViewExpansion.useTreeViewExpansion, _useTreeViewSelection.useTreeViewSelection, _useTreeViewFocus.useTreeViewFocus, _useTreeViewKeyboardNavigation.useTreeViewKeyboardNavigation, _useTreeViewContextValueBuilder.useTreeViewContextValueBuilder];
|
|
14
|
+
const DEFAULT_TREE_VIEW_PLUGINS = exports.DEFAULT_TREE_VIEW_PLUGINS = [_useTreeViewId.useTreeViewId, _useTreeViewNodes.useTreeViewNodes, _useTreeViewExpansion.useTreeViewExpansion, _useTreeViewSelection.useTreeViewSelection, _useTreeViewFocus.useTreeViewFocus, _useTreeViewKeyboardNavigation.useTreeViewKeyboardNavigation, _useTreeViewContextValueBuilder.useTreeViewContextValueBuilder];
|
|
14
15
|
|
|
15
16
|
// We can't infer this type from the plugin, otherwise we would lose the generics.
|
package/node/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js
CHANGED
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.useTreeViewContextValueBuilder = void 0;
|
|
8
|
-
var _useId = _interopRequireDefault(require("@mui/utils/useId"));
|
|
9
7
|
const useTreeViewContextValueBuilder = ({
|
|
10
8
|
instance,
|
|
11
9
|
params
|
|
12
10
|
}) => {
|
|
13
|
-
const treeId = (0, _useId.default)(params.id);
|
|
14
11
|
return {
|
|
15
|
-
getRootProps: () => ({
|
|
16
|
-
id: treeId
|
|
17
|
-
}),
|
|
18
12
|
contextValue: {
|
|
19
|
-
treeId,
|
|
20
13
|
instance: instance,
|
|
21
14
|
multiSelect: params.multiSelect,
|
|
15
|
+
runItemPlugins: ({
|
|
16
|
+
props,
|
|
17
|
+
ref
|
|
18
|
+
}) => ({
|
|
19
|
+
props,
|
|
20
|
+
ref,
|
|
21
|
+
wrapItem: children => children
|
|
22
|
+
}),
|
|
22
23
|
disabledItemsFocusable: params.disabledItemsFocusable,
|
|
23
24
|
icons: {
|
|
24
25
|
defaultCollapseIcon: params.defaultCollapseIcon,
|
|
@@ -17,34 +17,43 @@ const useTreeViewExpansion = ({
|
|
|
17
17
|
models
|
|
18
18
|
}) => {
|
|
19
19
|
const isNodeExpanded = React.useCallback(nodeId => {
|
|
20
|
-
return Array.isArray(models.
|
|
21
|
-
}, [models.
|
|
20
|
+
return Array.isArray(models.expandedNodes.value) ? models.expandedNodes.value.indexOf(nodeId) !== -1 : false;
|
|
21
|
+
}, [models.expandedNodes.value]);
|
|
22
22
|
const isNodeExpandable = React.useCallback(nodeId => !!instance.getNode(nodeId)?.expandable, [instance]);
|
|
23
23
|
const toggleNodeExpansion = (0, _useEventCallback.default)((event, nodeId) => {
|
|
24
24
|
if (nodeId == null) {
|
|
25
25
|
return;
|
|
26
26
|
}
|
|
27
|
+
const isExpandedBefore = models.expandedNodes.value.indexOf(nodeId) !== -1;
|
|
27
28
|
let newExpanded;
|
|
28
|
-
if (
|
|
29
|
-
newExpanded = models.
|
|
29
|
+
if (isExpandedBefore) {
|
|
30
|
+
newExpanded = models.expandedNodes.value.filter(id => id !== nodeId);
|
|
30
31
|
} else {
|
|
31
|
-
newExpanded = [nodeId].concat(models.
|
|
32
|
+
newExpanded = [nodeId].concat(models.expandedNodes.value);
|
|
32
33
|
}
|
|
33
|
-
if (params.
|
|
34
|
-
params.
|
|
34
|
+
if (params.onNodeExpansionToggle) {
|
|
35
|
+
params.onNodeExpansionToggle(event, nodeId, !isExpandedBefore);
|
|
35
36
|
}
|
|
36
|
-
|
|
37
|
+
if (params.onExpandedNodesChange) {
|
|
38
|
+
params.onExpandedNodesChange(event, newExpanded);
|
|
39
|
+
}
|
|
40
|
+
models.expandedNodes.setValue(newExpanded);
|
|
37
41
|
});
|
|
38
42
|
const expandAllSiblings = (event, nodeId) => {
|
|
39
43
|
const node = instance.getNode(nodeId);
|
|
40
44
|
const siblings = instance.getChildrenIds(node.parentId);
|
|
41
45
|
const diff = siblings.filter(child => instance.isNodeExpandable(child) && !instance.isNodeExpanded(child));
|
|
42
|
-
const newExpanded = models.
|
|
46
|
+
const newExpanded = models.expandedNodes.value.concat(diff);
|
|
43
47
|
if (diff.length > 0) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
48
|
+
if (params.onNodeExpansionToggle) {
|
|
49
|
+
diff.forEach(newlyExpandedNodeId => {
|
|
50
|
+
params.onNodeExpansionToggle(event, newlyExpandedNodeId, true);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
if (params.onExpandedNodesChange) {
|
|
54
|
+
params.onExpandedNodesChange(event, newExpanded);
|
|
47
55
|
}
|
|
56
|
+
models.expandedNodes.setValue(newExpanded);
|
|
48
57
|
}
|
|
49
58
|
};
|
|
50
59
|
(0, _useTreeView.populateInstance)(instance, {
|
|
@@ -56,12 +65,12 @@ const useTreeViewExpansion = ({
|
|
|
56
65
|
};
|
|
57
66
|
exports.useTreeViewExpansion = useTreeViewExpansion;
|
|
58
67
|
useTreeViewExpansion.models = {
|
|
59
|
-
|
|
60
|
-
controlledProp: '
|
|
61
|
-
defaultProp: '
|
|
68
|
+
expandedNodes: {
|
|
69
|
+
controlledProp: 'expandedNodes',
|
|
70
|
+
defaultProp: 'defaultExpandedNodes'
|
|
62
71
|
}
|
|
63
72
|
};
|
|
64
|
-
const
|
|
73
|
+
const DEFAULT_EXPANDED_NODES = [];
|
|
65
74
|
useTreeViewExpansion.getDefaultizedParams = params => (0, _extends2.default)({}, params, {
|
|
66
|
-
|
|
75
|
+
defaultExpandedNodes: params.defaultExpandedNodes ?? DEFAULT_EXPANDED_NODES
|
|
67
76
|
});
|
|
@@ -36,9 +36,15 @@ const useTreeViewFocus = ({
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
});
|
|
39
|
+
const focusRoot = (0, _useEventCallback.default)(() => {
|
|
40
|
+
rootRef.current?.focus({
|
|
41
|
+
preventScroll: true
|
|
42
|
+
});
|
|
43
|
+
});
|
|
39
44
|
(0, _useTreeView.populateInstance)(instance, {
|
|
40
45
|
isNodeFocused,
|
|
41
|
-
focusNode
|
|
46
|
+
focusNode,
|
|
47
|
+
focusRoot
|
|
42
48
|
});
|
|
43
49
|
(0, _useInstanceEventHandler.useInstanceEventHandler)(instance, 'removeNode', ({
|
|
44
50
|
id
|
|
@@ -60,10 +66,10 @@ const useTreeViewFocus = ({
|
|
|
60
66
|
return node && (node.parentId == null || instance.isNodeExpanded(node.parentId));
|
|
61
67
|
};
|
|
62
68
|
let nodeToFocusId;
|
|
63
|
-
if (Array.isArray(models.
|
|
64
|
-
nodeToFocusId = models.
|
|
65
|
-
} else if (models.
|
|
66
|
-
nodeToFocusId = models.
|
|
69
|
+
if (Array.isArray(models.selectedNodes.value)) {
|
|
70
|
+
nodeToFocusId = models.selectedNodes.value.find(isNodeVisible);
|
|
71
|
+
} else if (models.selectedNodes.value != null && isNodeVisible(models.selectedNodes.value)) {
|
|
72
|
+
nodeToFocusId = models.selectedNodes.value;
|
|
67
73
|
}
|
|
68
74
|
if (nodeToFocusId == null) {
|
|
69
75
|
nodeToFocusId = instance.getNavigableChildrenIds(null)[0];
|
|
@@ -76,7 +82,7 @@ const useTreeViewFocus = ({
|
|
|
76
82
|
setFocusedNodeId(null);
|
|
77
83
|
};
|
|
78
84
|
const focusedNode = instance.getNode(state.focusedNodeId);
|
|
79
|
-
const activeDescendant = focusedNode ? focusedNode.idAttribute : null;
|
|
85
|
+
const activeDescendant = focusedNode ? instance.getTreeItemId(focusedNode.id, focusedNode.idAttribute) : null;
|
|
80
86
|
return {
|
|
81
87
|
getRootProps: otherHandlers => ({
|
|
82
88
|
onFocus: createHandleFocus(otherHandlers),
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "useTreeViewId", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _useTreeViewId.useTreeViewId;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
var _useTreeViewId = require("./useTreeViewId");
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useTreeViewId = void 0;
|
|
8
|
+
var React = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _useId = _interopRequireDefault(require("@mui/utils/useId"));
|
|
10
|
+
var _useTreeView = require("../../useTreeView/useTreeView.utils");
|
|
11
|
+
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 && 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; }
|
|
13
|
+
const useTreeViewId = ({
|
|
14
|
+
instance,
|
|
15
|
+
params
|
|
16
|
+
}) => {
|
|
17
|
+
const treeId = (0, _useId.default)(params.id);
|
|
18
|
+
const getTreeItemId = React.useCallback((nodeId, idAttribute) => idAttribute ?? `${treeId}-${nodeId}`, [treeId]);
|
|
19
|
+
(0, _useTreeView.populateInstance)(instance, {
|
|
20
|
+
getTreeItemId
|
|
21
|
+
});
|
|
22
|
+
return {
|
|
23
|
+
getRootProps: () => ({
|
|
24
|
+
id: treeId
|
|
25
|
+
})
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
exports.useTreeViewId = useTreeViewId;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "useTreeViewJSXNodes", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _useTreeViewJSXNodes.useTreeViewJSXNodes;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
var _useTreeViewJSXNodes = require("./useTreeViewJSXNodes");
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useTreeViewJSXNodes = void 0;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
var React = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
|
|
11
|
+
var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
|
|
12
|
+
var _useTreeView = require("../../useTreeView/useTreeView.utils");
|
|
13
|
+
var _publishTreeViewEvent = require("../../utils/publishTreeViewEvent");
|
|
14
|
+
var _useTreeViewContext = require("../../TreeViewProvider/useTreeViewContext");
|
|
15
|
+
var _DescendantProvider = require("../../TreeViewProvider/DescendantProvider");
|
|
16
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
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
|
+
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 = ({
|
|
20
|
+
instance,
|
|
21
|
+
setState
|
|
22
|
+
}) => {
|
|
23
|
+
const insertJSXNode = (0, _useEventCallback.default)(node => {
|
|
24
|
+
setState(prevState => (0, _extends2.default)({}, prevState, {
|
|
25
|
+
nodeMap: (0, _extends2.default)({}, prevState.nodeMap, {
|
|
26
|
+
[node.id]: node
|
|
27
|
+
})
|
|
28
|
+
}));
|
|
29
|
+
});
|
|
30
|
+
const removeJSXNode = (0, _useEventCallback.default)(nodeId => {
|
|
31
|
+
setState(prevState => {
|
|
32
|
+
const newMap = (0, _extends2.default)({}, prevState.nodeMap);
|
|
33
|
+
delete newMap[nodeId];
|
|
34
|
+
return (0, _extends2.default)({}, prevState, {
|
|
35
|
+
nodeMap: newMap
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
(0, _publishTreeViewEvent.publishTreeViewEvent)(instance, 'removeNode', {
|
|
39
|
+
id: nodeId
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
const mapFirstCharFromJSX = (0, _useEventCallback.default)((nodeId, firstChar) => {
|
|
43
|
+
instance.updateFirstCharMap(firstCharMap => {
|
|
44
|
+
firstCharMap[nodeId] = firstChar;
|
|
45
|
+
return firstCharMap;
|
|
46
|
+
});
|
|
47
|
+
return () => {
|
|
48
|
+
instance.updateFirstCharMap(firstCharMap => {
|
|
49
|
+
const newMap = (0, _extends2.default)({}, firstCharMap);
|
|
50
|
+
delete newMap[nodeId];
|
|
51
|
+
return newMap;
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
(0, _useTreeView.populateInstance)(instance, {
|
|
56
|
+
insertJSXNode,
|
|
57
|
+
removeJSXNode,
|
|
58
|
+
mapFirstCharFromJSX
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
exports.useTreeViewJSXNodes = useTreeViewJSXNodes;
|
|
62
|
+
const useTreeViewJSXNodesItemPlugin = ({
|
|
63
|
+
props,
|
|
64
|
+
ref
|
|
65
|
+
}) => {
|
|
66
|
+
const {
|
|
67
|
+
children,
|
|
68
|
+
disabled = false,
|
|
69
|
+
label,
|
|
70
|
+
nodeId,
|
|
71
|
+
id,
|
|
72
|
+
ContentProps: inContentProps
|
|
73
|
+
} = props;
|
|
74
|
+
const {
|
|
75
|
+
instance
|
|
76
|
+
} = (0, _useTreeViewContext.useTreeViewContext)();
|
|
77
|
+
const expandable = Boolean(Array.isArray(children) ? children.length : children);
|
|
78
|
+
const [treeItemElement, setTreeItemElement] = React.useState(null);
|
|
79
|
+
const contentRef = React.useRef(null);
|
|
80
|
+
const handleRef = (0, _useForkRef.default)(setTreeItemElement, ref);
|
|
81
|
+
const descendant = React.useMemo(() => ({
|
|
82
|
+
element: treeItemElement,
|
|
83
|
+
id: nodeId
|
|
84
|
+
}), [nodeId, treeItemElement]);
|
|
85
|
+
const {
|
|
86
|
+
index,
|
|
87
|
+
parentId
|
|
88
|
+
} = (0, _DescendantProvider.useDescendant)(descendant);
|
|
89
|
+
React.useEffect(() => {
|
|
90
|
+
// On the first render a node's index will be -1. We want to wait for the real index.
|
|
91
|
+
if (instance && index !== -1) {
|
|
92
|
+
instance.insertJSXNode({
|
|
93
|
+
id: nodeId,
|
|
94
|
+
idAttribute: id,
|
|
95
|
+
index,
|
|
96
|
+
parentId,
|
|
97
|
+
expandable,
|
|
98
|
+
disabled
|
|
99
|
+
});
|
|
100
|
+
return () => instance.removeJSXNode(nodeId);
|
|
101
|
+
}
|
|
102
|
+
return undefined;
|
|
103
|
+
}, [instance, parentId, index, nodeId, expandable, disabled, id]);
|
|
104
|
+
React.useEffect(() => {
|
|
105
|
+
if (instance && label) {
|
|
106
|
+
return instance.mapFirstCharFromJSX(nodeId, (contentRef.current?.textContent ?? '').substring(0, 1).toLowerCase());
|
|
107
|
+
}
|
|
108
|
+
return undefined;
|
|
109
|
+
}, [instance, nodeId, label]);
|
|
110
|
+
return {
|
|
111
|
+
props: (0, _extends2.default)({}, props, {
|
|
112
|
+
ContentProps: (0, _extends2.default)({}, inContentProps, {
|
|
113
|
+
ref: contentRef
|
|
114
|
+
})
|
|
115
|
+
}),
|
|
116
|
+
ref: handleRef,
|
|
117
|
+
wrapItem: item => /*#__PURE__*/(0, _jsxRuntime.jsx)(_DescendantProvider.DescendantProvider, {
|
|
118
|
+
id: nodeId,
|
|
119
|
+
children: item
|
|
120
|
+
})
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
useTreeViewJSXNodes.itemPlugin = useTreeViewJSXNodesItemPlugin;
|
package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js
CHANGED
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.useTreeViewKeyboardNavigation = void 0;
|
|
8
|
-
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
8
|
var React = _interopRequireWildcard(require("react"));
|
|
10
9
|
var _styles = require("@mui/material/styles");
|
|
11
10
|
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
|
|
@@ -31,16 +30,27 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
31
30
|
const theme = (0, _styles.useTheme)();
|
|
32
31
|
const isRtl = theme.direction === 'rtl';
|
|
33
32
|
const firstCharMap = React.useRef({});
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
delete newMap[nodeId];
|
|
39
|
-
firstCharMap.current = newMap;
|
|
40
|
-
};
|
|
33
|
+
const hasFirstCharMapBeenUpdatedImperatively = React.useRef(false);
|
|
34
|
+
const updateFirstCharMap = (0, _useEventCallback.default)(callback => {
|
|
35
|
+
hasFirstCharMapBeenUpdatedImperatively.current = true;
|
|
36
|
+
firstCharMap.current = callback(firstCharMap.current);
|
|
41
37
|
});
|
|
38
|
+
React.useEffect(() => {
|
|
39
|
+
if (hasFirstCharMapBeenUpdatedImperatively.current) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const newFirstCharMap = {};
|
|
43
|
+
const processItem = item => {
|
|
44
|
+
const getItemId = params.getItemId;
|
|
45
|
+
const nodeId = getItemId ? getItemId(item) : item.id;
|
|
46
|
+
newFirstCharMap[nodeId] = instance.getNode(nodeId).label.substring(0, 1).toLowerCase();
|
|
47
|
+
item.children?.forEach(processItem);
|
|
48
|
+
};
|
|
49
|
+
params.items.forEach(processItem);
|
|
50
|
+
firstCharMap.current = newFirstCharMap;
|
|
51
|
+
}, [params.items, params.getItemId, instance]);
|
|
42
52
|
(0, _useTreeView.populateInstance)(instance, {
|
|
43
|
-
|
|
53
|
+
updateFirstCharMap
|
|
44
54
|
});
|
|
45
55
|
const handleNextArrow = event => {
|
|
46
56
|
if (state.focusedNodeId != null && instance.isNodeExpandable(state.focusedNodeId)) {
|
|
@@ -12,23 +12,49 @@ var _useTreeView = require("../../useTreeView/useTreeView.utils");
|
|
|
12
12
|
var _publishTreeViewEvent = require("../../utils/publishTreeViewEvent");
|
|
13
13
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
14
14
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
15
|
+
const updateState = ({
|
|
16
|
+
items,
|
|
17
|
+
isItemDisabled,
|
|
18
|
+
getItemLabel,
|
|
19
|
+
getItemId
|
|
20
|
+
}) => {
|
|
21
|
+
const nodeMap = {};
|
|
22
|
+
const processItem = (item, index, parentId) => {
|
|
23
|
+
const id = getItemId ? getItemId(item) : item.id;
|
|
24
|
+
if (id == null) {
|
|
25
|
+
throw new Error(['MUI: The Tree View component requires all items to have a unique `id` property.', 'Alternatively, you can use the `getItemId` prop to specify a custom id for each item.', 'An item was provided without id in the `items` prop:', JSON.stringify(item)].join('\n'));
|
|
26
|
+
}
|
|
27
|
+
const label = getItemLabel ? getItemLabel(item) : item.label;
|
|
28
|
+
if (label == null) {
|
|
29
|
+
throw new Error(['MUI: The Tree View component requires all items to have a `label` property.', 'Alternatively, you can use the `getItemLabel` prop to specify a custom label for each item.', 'An item was provided without label in the `items` prop:', JSON.stringify(item)].join('\n'));
|
|
30
|
+
}
|
|
31
|
+
nodeMap[id] = {
|
|
32
|
+
id,
|
|
33
|
+
label,
|
|
34
|
+
index,
|
|
35
|
+
parentId,
|
|
36
|
+
idAttribute: id,
|
|
37
|
+
expandable: !!item.children?.length,
|
|
38
|
+
disabled: isItemDisabled ? isItemDisabled(item) : false
|
|
39
|
+
};
|
|
40
|
+
return {
|
|
41
|
+
id,
|
|
42
|
+
children: item.children?.map((child, childIndex) => processItem(child, childIndex, id))
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
const nodeTree = items.map((item, itemIndex) => processItem(item, itemIndex, null));
|
|
46
|
+
return {
|
|
47
|
+
nodeMap,
|
|
48
|
+
nodeTree
|
|
49
|
+
};
|
|
50
|
+
};
|
|
15
51
|
const useTreeViewNodes = ({
|
|
16
52
|
instance,
|
|
17
|
-
params
|
|
53
|
+
params,
|
|
54
|
+
state,
|
|
55
|
+
setState
|
|
18
56
|
}) => {
|
|
19
|
-
const
|
|
20
|
-
const getNode = React.useCallback(nodeId => nodeMap.current[nodeId], []);
|
|
21
|
-
const insertNode = React.useCallback(node => {
|
|
22
|
-
nodeMap.current[node.id] = node;
|
|
23
|
-
}, []);
|
|
24
|
-
const removeNode = React.useCallback(nodeId => {
|
|
25
|
-
const newMap = (0, _extends2.default)({}, nodeMap.current);
|
|
26
|
-
delete newMap[nodeId];
|
|
27
|
-
nodeMap.current = newMap;
|
|
28
|
-
(0, _publishTreeViewEvent.publishTreeViewEvent)(instance, 'removeNode', {
|
|
29
|
-
id: nodeId
|
|
30
|
-
});
|
|
31
|
-
}, [instance]);
|
|
57
|
+
const getNode = React.useCallback(nodeId => state.nodeMap[nodeId], [state.nodeMap]);
|
|
32
58
|
const isNodeDisabled = React.useCallback(nodeId => {
|
|
33
59
|
if (nodeId == null) {
|
|
34
60
|
return false;
|
|
@@ -50,7 +76,7 @@ const useTreeViewNodes = ({
|
|
|
50
76
|
}
|
|
51
77
|
return false;
|
|
52
78
|
}, [instance]);
|
|
53
|
-
const getChildrenIds = (0, _useEventCallback.default)(nodeId => Object.values(nodeMap
|
|
79
|
+
const getChildrenIds = (0, _useEventCallback.default)(nodeId => Object.values(state.nodeMap).filter(node => node.parentId === nodeId).sort((a, b) => a.index - b.index).map(child => child.id));
|
|
54
80
|
const getNavigableChildrenIds = nodeId => {
|
|
55
81
|
let childrenIds = instance.getChildrenIds(nodeId);
|
|
56
82
|
if (!params.disabledItemsFocusable) {
|
|
@@ -58,13 +84,51 @@ const useTreeViewNodes = ({
|
|
|
58
84
|
}
|
|
59
85
|
return childrenIds;
|
|
60
86
|
};
|
|
87
|
+
React.useEffect(() => {
|
|
88
|
+
setState(prevState => {
|
|
89
|
+
const newState = updateState({
|
|
90
|
+
items: params.items,
|
|
91
|
+
isItemDisabled: params.isItemDisabled,
|
|
92
|
+
getItemId: params.getItemId,
|
|
93
|
+
getItemLabel: params.getItemLabel
|
|
94
|
+
});
|
|
95
|
+
Object.values(prevState.nodeMap).forEach(node => {
|
|
96
|
+
if (!newState.nodeMap[node.id]) {
|
|
97
|
+
(0, _publishTreeViewEvent.publishTreeViewEvent)(instance, 'removeNode', {
|
|
98
|
+
id: node.id
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
return (0, _extends2.default)({}, prevState, newState);
|
|
103
|
+
});
|
|
104
|
+
}, [instance, setState, params.items, params.isItemDisabled, params.getItemId, params.getItemLabel]);
|
|
105
|
+
const getNodesToRender = (0, _useEventCallback.default)(() => {
|
|
106
|
+
const getPropsFromNodeId = ({
|
|
107
|
+
id,
|
|
108
|
+
children
|
|
109
|
+
}) => {
|
|
110
|
+
const node = state.nodeMap[id];
|
|
111
|
+
return {
|
|
112
|
+
label: node.label,
|
|
113
|
+
nodeId: node.id,
|
|
114
|
+
id: node.idAttribute,
|
|
115
|
+
children: children?.map(getPropsFromNodeId)
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
return state.nodeTree.map(getPropsFromNodeId);
|
|
119
|
+
});
|
|
61
120
|
(0, _useTreeView.populateInstance)(instance, {
|
|
62
121
|
getNode,
|
|
63
|
-
|
|
64
|
-
removeNode,
|
|
122
|
+
getNodesToRender,
|
|
65
123
|
getChildrenIds,
|
|
66
124
|
getNavigableChildrenIds,
|
|
67
125
|
isNodeDisabled
|
|
68
126
|
});
|
|
69
127
|
};
|
|
70
|
-
exports.useTreeViewNodes = useTreeViewNodes;
|
|
128
|
+
exports.useTreeViewNodes = useTreeViewNodes;
|
|
129
|
+
useTreeViewNodes.getInitialState = params => updateState({
|
|
130
|
+
items: params.items,
|
|
131
|
+
isItemDisabled: params.isItemDisabled,
|
|
132
|
+
getItemId: params.getItemId,
|
|
133
|
+
getItemLabel: params.getItemLabel
|
|
134
|
+
});
|