@itwin/tree-widget-react 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +42 -181
- package/lib/cjs/TreeWidget.d.ts +1 -0
- package/lib/cjs/TreeWidget.js +10 -3
- package/lib/cjs/TreeWidget.js.map +1 -1
- package/lib/cjs/components/SelectableTree.scss +0 -1
- package/lib/cjs/components/trees/VisibilityTreeBase.scss +55 -84
- package/lib/cjs/components/trees/VisibilityTreeRenderer.d.ts +4 -3
- package/lib/cjs/components/trees/VisibilityTreeRenderer.js +5 -4
- package/lib/cjs/components/trees/VisibilityTreeRenderer.js.map +1 -1
- package/lib/cjs/components/trees/category-tree/CategoriesTree.d.ts +1 -1
- package/lib/cjs/components/trees/category-tree/CategoriesTree.js +13 -1
- package/lib/cjs/components/trees/category-tree/CategoriesTree.js.map +1 -1
- package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.d.ts +2 -2
- package/lib/cjs/components/trees/common/ContextMenu.d.ts +39 -0
- package/lib/cjs/components/trees/common/ContextMenu.js +44 -0
- package/lib/cjs/components/trees/common/ContextMenu.js.map +1 -0
- package/lib/cjs/components/trees/common/TreeNodeRenderer.d.ts +61 -0
- package/lib/cjs/components/trees/common/TreeNodeRenderer.js +50 -0
- package/lib/cjs/components/trees/common/TreeNodeRenderer.js.map +1 -0
- package/lib/cjs/components/trees/common/TreeRenderer.d.ts +26 -0
- package/lib/cjs/components/trees/common/TreeRenderer.js +41 -0
- package/lib/cjs/components/trees/common/TreeRenderer.js.map +1 -0
- package/lib/cjs/components/trees/common/TreeRenderer.scss +102 -0
- package/lib/cjs/components/trees/{Common.d.ts → common/Types.d.ts} +3 -2
- package/lib/cjs/components/trees/{Common.js → common/Types.js} +1 -1
- package/lib/cjs/components/trees/common/Types.js.map +1 -0
- package/lib/cjs/components/trees/common/Utils.d.ts +11 -0
- package/lib/cjs/components/trees/common/Utils.js +49 -0
- package/lib/cjs/components/trees/common/Utils.js.map +1 -0
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +1 -1
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.js +9 -4
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.d.ts +7 -1
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +1 -4
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.d.ts +1 -1
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.js +8 -2
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
- package/lib/cjs/components/trees/index.d.ts +4 -2
- package/lib/cjs/components/trees/index.js +4 -2
- package/lib/cjs/components/trees/index.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/ModelsTree.d.ts +6 -4
- package/lib/cjs/components/trees/models-tree/ModelsTree.js +25 -10
- package/lib/cjs/components/trees/models-tree/ModelsTree.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/Utils.d.ts +2 -2
- package/lib/cjs/components/trees/models-tree/Utils.js +269 -335
- package/lib/cjs/components/trees/models-tree/Utils.js.map +1 -1
- package/lib/esm/TreeWidget.d.ts +1 -0
- package/lib/esm/TreeWidget.js +10 -3
- package/lib/esm/TreeWidget.js.map +1 -1
- package/lib/esm/components/SelectableTree.scss +0 -1
- package/lib/esm/components/trees/VisibilityTreeBase.scss +55 -84
- package/lib/esm/components/trees/VisibilityTreeRenderer.d.ts +4 -3
- package/lib/esm/components/trees/VisibilityTreeRenderer.js +6 -5
- package/lib/esm/components/trees/VisibilityTreeRenderer.js.map +1 -1
- package/lib/esm/components/trees/category-tree/CategoriesTree.d.ts +1 -1
- package/lib/esm/components/trees/category-tree/CategoriesTree.js +10 -1
- package/lib/esm/components/trees/category-tree/CategoriesTree.js.map +1 -1
- package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.d.ts +2 -2
- package/lib/esm/components/trees/common/ContextMenu.d.ts +39 -0
- package/lib/esm/components/trees/common/ContextMenu.js +39 -0
- package/lib/esm/components/trees/common/ContextMenu.js.map +1 -0
- package/lib/esm/components/trees/common/TreeNodeRenderer.d.ts +61 -0
- package/lib/esm/components/trees/common/TreeNodeRenderer.js +44 -0
- package/lib/esm/components/trees/common/TreeNodeRenderer.js.map +1 -0
- package/lib/esm/components/trees/common/TreeRenderer.d.ts +26 -0
- package/lib/esm/components/trees/common/TreeRenderer.js +34 -0
- package/lib/esm/components/trees/common/TreeRenderer.js.map +1 -0
- package/lib/esm/components/trees/common/TreeRenderer.scss +102 -0
- package/lib/esm/components/trees/{Common.d.ts → common/Types.d.ts} +3 -2
- package/lib/esm/components/trees/{Common.js → common/Types.js} +1 -1
- package/lib/esm/components/trees/common/Types.js.map +1 -0
- package/lib/esm/components/trees/common/Utils.d.ts +11 -0
- package/lib/esm/components/trees/common/Utils.js +42 -0
- package/lib/esm/components/trees/common/Utils.js.map +1 -0
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +1 -1
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.js +9 -4
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.d.ts +7 -1
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +1 -4
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.d.ts +1 -1
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.js +8 -2
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
- package/lib/esm/components/trees/index.d.ts +4 -2
- package/lib/esm/components/trees/index.js +4 -2
- package/lib/esm/components/trees/index.js.map +1 -1
- package/lib/esm/components/trees/models-tree/ModelsTree.d.ts +6 -4
- package/lib/esm/components/trees/models-tree/ModelsTree.js +19 -7
- package/lib/esm/components/trees/models-tree/ModelsTree.js.map +1 -1
- package/lib/esm/components/trees/models-tree/Utils.d.ts +2 -2
- package/lib/esm/components/trees/models-tree/Utils.js +267 -333
- package/lib/esm/components/trees/models-tree/Utils.js.map +1 -1
- package/package.json +1 -2
- package/lib/cjs/components/trees/Common.js.map +0 -1
- package/lib/esm/components/trees/Common.js.map +0 -1
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.registerRenderers = exports.addTreeNodeItemCheckbox = exports.addCustomTreeNodeItemLabelRenderer = exports.combineTreeNodeItemCustomizations = void 0;
|
|
8
|
+
const components_react_1 = require("@itwin/components-react");
|
|
9
|
+
const core_react_1 = require("@itwin/core-react");
|
|
10
|
+
const TreeNodeRenderer_1 = require("./TreeNodeRenderer");
|
|
11
|
+
/** @internal */
|
|
12
|
+
function combineTreeNodeItemCustomizations(customizations) {
|
|
13
|
+
return (item, node) => {
|
|
14
|
+
customizations.forEach((customize) => customize(item, node));
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
exports.combineTreeNodeItemCustomizations = combineTreeNodeItemCustomizations;
|
|
18
|
+
/** @internal */
|
|
19
|
+
function addCustomTreeNodeItemLabelRenderer(item) {
|
|
20
|
+
if (!item.label) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
item.label.property.renderer = { name: TreeNodeRenderer_1.TREE_NODE_LABEL_RENDERER };
|
|
24
|
+
}
|
|
25
|
+
exports.addCustomTreeNodeItemLabelRenderer = addCustomTreeNodeItemLabelRenderer;
|
|
26
|
+
/** @internal */
|
|
27
|
+
function addTreeNodeItemCheckbox(item) {
|
|
28
|
+
item.isCheckboxVisible = true;
|
|
29
|
+
item.isCheckboxDisabled = true;
|
|
30
|
+
item.checkBoxState = core_react_1.CheckBoxState.Off;
|
|
31
|
+
}
|
|
32
|
+
exports.addTreeNodeItemCheckbox = addTreeNodeItemCheckbox;
|
|
33
|
+
/** @internal */
|
|
34
|
+
function registerRenderers() {
|
|
35
|
+
const renderers = [{
|
|
36
|
+
name: TreeNodeRenderer_1.TREE_NODE_LABEL_RENDERER,
|
|
37
|
+
renderer: new TreeNodeRenderer_1.TreeNodeLabelRenderer(),
|
|
38
|
+
}];
|
|
39
|
+
for (const { name, renderer } of renderers) {
|
|
40
|
+
components_react_1.PropertyValueRendererManager.defaultManager.registerRenderer(name, renderer);
|
|
41
|
+
}
|
|
42
|
+
return () => {
|
|
43
|
+
for (const { name } of renderers) {
|
|
44
|
+
components_react_1.PropertyValueRendererManager.defaultManager.unregisterRenderer(name);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
exports.registerRenderers = registerRenderers;
|
|
49
|
+
//# sourceMappingURL=Utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../../src/components/trees/common/Utils.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,8DAAuE;AACvE,kDAAkD;AAClD,yDAAqF;AAKrF,gBAAgB;AAChB,SAAgB,iCAAiC,CAAC,cAA4F;IAC5I,OAAO,CAAC,IAAsC,EAAE,IAAmB,EAAE,EAAE;QACrE,cAAc,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC;AACJ,CAAC;AAJD,8EAIC;AAED,gBAAgB;AAChB,SAAgB,kCAAkC,CAAC,IAAsC;IACvF,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;QACf,OAAO;KACR;IAED,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,GAAG,EAAE,IAAI,EAAE,2CAAwB,EAAE,CAAC;AACpE,CAAC;AAND,gFAMC;AAED,gBAAgB;AAChB,SAAgB,uBAAuB,CAAC,IAAsC;IAC5E,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAC9B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,aAAa,GAAG,0BAAa,CAAC,GAAG,CAAC;AACzC,CAAC;AAJD,0DAIC;AAED,gBAAgB;AAChB,SAAgB,iBAAiB;IAC/B,MAAM,SAAS,GAA8D,CAAC;YAC5E,IAAI,EAAE,2CAAwB;YAC9B,QAAQ,EAAG,IAAI,wCAAqB,EAAE;SACvC,CAAC,CAAC;IAEH,KAAK,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,SAAS,EAAE;QAC1C,+CAA4B,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KAC9E;IAED,OAAO,GAAG,EAAE;QACV,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,SAAS,EAAE;YAChC,+CAA4B,CAAC,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;SACtE;IACH,CAAC,CAAC;AACJ,CAAC;AAfD,8CAeC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { PropertyValueRendererManager } from \"@itwin/components-react\";\nimport { CheckBoxState } from \"@itwin/core-react\";\nimport { TREE_NODE_LABEL_RENDERER, TreeNodeLabelRenderer } from \"./TreeNodeRenderer\";\n\nimport type { DelayLoadedTreeNodeItem, IPropertyValueRenderer } from \"@itwin/components-react\";\nimport type { Node } from \"@itwin/presentation-common\";\n\n/** @internal */\nexport function combineTreeNodeItemCustomizations(customizations: Array<(item: Partial<DelayLoadedTreeNodeItem>, node: Partial<Node>) => void>) {\n return (item: Partial<DelayLoadedTreeNodeItem>, node: Partial<Node>) => {\n customizations.forEach((customize) => customize(item, node));\n };\n}\n\n/** @internal */\nexport function addCustomTreeNodeItemLabelRenderer(item: Partial<DelayLoadedTreeNodeItem>) {\n if (!item.label) {\n return;\n }\n\n item.label.property.renderer = { name: TREE_NODE_LABEL_RENDERER };\n}\n\n/** @internal */\nexport function addTreeNodeItemCheckbox(item: Partial<DelayLoadedTreeNodeItem>) {\n item.isCheckboxVisible = true;\n item.isCheckboxDisabled = true;\n item.checkBoxState = CheckBoxState.Off;\n}\n\n/** @internal */\nexport function registerRenderers() {\n const renderers: Array<{ name: string, renderer: IPropertyValueRenderer }> = [{\n name: TREE_NODE_LABEL_RENDERER,\n renderer: new TreeNodeLabelRenderer(),\n }];\n\n for (const { name, renderer } of renderers) {\n PropertyValueRendererManager.defaultManager.registerRenderer(name, renderer);\n }\n\n return () => {\n for (const { name } of renderers) {\n PropertyValueRendererManager.defaultManager.unregisterRenderer(name);\n }\n };\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import "../VisibilityTreeBase.scss";
|
|
3
3
|
import type { Ruleset } from "@itwin/presentation-common";
|
|
4
|
-
import type { BaseTreeProps } from "../
|
|
4
|
+
import type { BaseTreeProps } from "../common/Types";
|
|
5
5
|
/**
|
|
6
6
|
* Presentation rules used by ControlledCategoriesTree
|
|
7
7
|
* @internal
|
|
@@ -32,6 +32,8 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
32
32
|
require("../VisibilityTreeBase.scss");
|
|
33
33
|
const components_react_1 = require("@itwin/components-react");
|
|
34
34
|
const presentation_components_1 = require("@itwin/presentation-components");
|
|
35
|
+
const TreeRenderer_1 = require("../common/TreeRenderer");
|
|
36
|
+
const Utils_1 = require("../common/Utils");
|
|
35
37
|
const RULESET_EXTERNAL_SOURCES_IMPORT = __importStar(require("./ExternalSources.json"));
|
|
36
38
|
/**
|
|
37
39
|
* Presentation rules used by ControlledCategoriesTree
|
|
@@ -52,10 +54,13 @@ function ExternalSourcesTree(props) {
|
|
|
52
54
|
});
|
|
53
55
|
const eventsHandler = (0, presentation_components_1.useUnifiedSelectionTreeEventHandler)({ nodeLoader });
|
|
54
56
|
const treeModel = (0, components_react_1.useTreeModel)(nodeLoader.modelSource);
|
|
55
|
-
return ((0, jsx_runtime_1.jsx)("div", { className: "tree-widget-
|
|
57
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "tree-widget-tree-container", children: (0, jsx_runtime_1.jsx)(components_react_1.ControlledTree, { nodeLoader: nodeLoader, model: treeModel, selectionMode: props.selectionMode ?? components_react_1.SelectionMode.Extended, eventsHandler: eventsHandler, width: props.width, height: props.height, iconsEnabled: true, treeRenderer: (treeProps) => (0, jsx_runtime_1.jsx)(TreeRenderer_1.TreeRenderer, { ...treeProps, contextMenuItems: props.contextMenuItems, nodeLabelRenderer: props.nodeLabelRenderer, density: props.density }) }) }));
|
|
56
58
|
}
|
|
57
59
|
exports.ExternalSourcesTree = ExternalSourcesTree;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
60
|
+
const customizeTreeNodeItem = (0, Utils_1.combineTreeNodeItemCustomizations)([
|
|
61
|
+
Utils_1.addCustomTreeNodeItemLabelRenderer,
|
|
62
|
+
(item, node) => {
|
|
63
|
+
item.icon = node.extendedData?.imageId;
|
|
64
|
+
},
|
|
65
|
+
]);
|
|
61
66
|
//# sourceMappingURL=ExternalSourcesTree.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExternalSourcesTree.js","sourceRoot":"","sources":["../../../../../src/components/trees/external-sources-tree/ExternalSourcesTree.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAE/F,sCAAoC;AACpC,8DAAsF;AACtF,4EAAoH;AACpH,wFAA0E;
|
|
1
|
+
{"version":3,"file":"ExternalSourcesTree.js","sourceRoot":"","sources":["../../../../../src/components/trees/external-sources-tree/ExternalSourcesTree.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAE/F,sCAAoC;AACpC,8DAAsF;AACtF,4EAAoH;AACpH,yDAAsD;AACtD,2CAAwG;AACxG,wFAA0E;AAI1E;;;GAGG;AACU,QAAA,wBAAwB,GAAG,+BAA0C,CAAC;AAEnF,MAAM,WAAW,GAAG,EAAE,CAAC;AAQvB;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,KAA+B;IACjE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAA,uDAA6B,EAAC;QACnD,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,gCAAwB;QACjC,UAAU,EAAE,WAAW;QACvB,qBAAqB;KACtB,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,IAAA,6DAAmC,EAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,IAAA,+BAAY,EAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACvD,OAAO,CACL,gCAAK,SAAS,EAAC,4BAA4B,YACzC,uBAAC,iCAAc,IACb,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,SAAS,EAChB,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,gCAAa,CAAC,QAAQ,EAC5D,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,YAAY,EAAE,IAAI,EAClB,YAAY,EAAE,CAAC,SAAS,EAAE,EAAE,CAC1B,uBAAC,2BAAY,OACP,SAAS,EACb,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EACxC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAC1C,OAAO,EAAE,KAAK,CAAC,OAAO,GACtB,GAEJ,GACE,CACP,CAAC;AACJ,CAAC;AA9BD,kDA8BC;AAED,MAAM,qBAAqB,GAAG,IAAA,yCAAiC,EAAC;IAC9D,0CAAkC;IAClC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC;IACzC,CAAC;CACF,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport \"../VisibilityTreeBase.scss\";\nimport { ControlledTree, SelectionMode, useTreeModel } from \"@itwin/components-react\";\nimport { usePresentationTreeNodeLoader, useUnifiedSelectionTreeEventHandler } from \"@itwin/presentation-components\";\nimport { TreeRenderer } from \"../common/TreeRenderer\";\nimport { addCustomTreeNodeItemLabelRenderer, combineTreeNodeItemCustomizations } from \"../common/Utils\";\nimport * as RULESET_EXTERNAL_SOURCES_IMPORT from \"./ExternalSources.json\";\n\nimport type { Ruleset } from \"@itwin/presentation-common\";\nimport type { BaseTreeProps } from \"../common/Types\";\n/**\n * Presentation rules used by ControlledCategoriesTree\n * @internal\n */\nexport const RULESET_EXTERNAL_SOURCES = RULESET_EXTERNAL_SOURCES_IMPORT as Ruleset;\n\nconst PAGING_SIZE = 20;\n\n/**\n * Props for the [[ExternalSourcesTree]] component\n * @alpha\n */\nexport type ExternalSourcesTreeProps = BaseTreeProps;\n\n/**\n * Tree which displays a hierarchy of ExternalSources and their elements.\n * @alpha\n */\nexport function ExternalSourcesTree(props: ExternalSourcesTreeProps) {\n const { nodeLoader } = usePresentationTreeNodeLoader({\n imodel: props.iModel,\n ruleset: RULESET_EXTERNAL_SOURCES,\n pagingSize: PAGING_SIZE,\n customizeTreeNodeItem,\n });\n const eventsHandler = useUnifiedSelectionTreeEventHandler({ nodeLoader });\n const treeModel = useTreeModel(nodeLoader.modelSource);\n return (\n <div className=\"tree-widget-tree-container\">\n <ControlledTree\n nodeLoader={nodeLoader}\n model={treeModel}\n selectionMode={props.selectionMode ?? SelectionMode.Extended}\n eventsHandler={eventsHandler}\n width={props.width}\n height={props.height}\n iconsEnabled={true}\n treeRenderer={(treeProps) =>\n <TreeRenderer\n {...treeProps}\n contextMenuItems={props.contextMenuItems}\n nodeLabelRenderer={props.nodeLabelRenderer}\n density={props.density}\n />\n }\n />\n </div>\n );\n}\n\nconst customizeTreeNodeItem = combineTreeNodeItemCustomizations([\n addCustomTreeNodeItemLabelRenderer,\n (item, node) => {\n item.icon = node.extendedData?.imageId;\n },\n]);\n"]}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import "../VisibilityTreeBase.scss";
|
|
3
|
+
import type { ExternalSourcesTreeProps } from "./ExternalSourcesTree";
|
|
4
|
+
/**
|
|
5
|
+
* Props for [[ExternalSourcesTreeComponent]].
|
|
6
|
+
* @alpha
|
|
7
|
+
*/
|
|
8
|
+
export type ExternalSourcesTreeComponentProps = Omit<ExternalSourcesTreeProps, "iModel" | "width" | "height">;
|
|
3
9
|
/**
|
|
4
10
|
* A component that displays an External Sources tree and any necessary "chrome".
|
|
5
11
|
* @alpha
|
|
6
12
|
*/
|
|
7
13
|
export declare const ExternalSourcesTreeComponent: {
|
|
8
|
-
(props:
|
|
14
|
+
(props: ExternalSourcesTreeComponentProps): JSX.Element | null;
|
|
9
15
|
/**
|
|
10
16
|
* Id of the component. May be used when a creating a [[TreeDefinition]] for [[ExternalSourcesTreeComponent]].
|
|
11
17
|
* @alpha
|
|
@@ -20,12 +20,9 @@ const ExternalSourcesTreeComponent = (props) => {
|
|
|
20
20
|
if (!iModel) {
|
|
21
21
|
return null;
|
|
22
22
|
}
|
|
23
|
-
return ((0, jsx_runtime_1.jsx)(
|
|
23
|
+
return ((0, jsx_runtime_1.jsx)(AutoSizer_1.AutoSizer, { children: ({ width, height }) => ((0, jsx_runtime_1.jsx)(ExternalSourcesTree_1.ExternalSourcesTree, { ...props, iModel: iModel, width: width, height: height })) }));
|
|
24
24
|
};
|
|
25
25
|
exports.ExternalSourcesTreeComponent = ExternalSourcesTreeComponent;
|
|
26
|
-
function ExternalSourcesTreeComponentImpl(props) {
|
|
27
|
-
return ((0, jsx_runtime_1.jsx)(AutoSizer_1.AutoSizer, { children: ({ width, height }) => ((0, jsx_runtime_1.jsx)(ExternalSourcesTree_1.ExternalSourcesTree, { ...props, width: width, height: height })) }));
|
|
28
|
-
}
|
|
29
26
|
/**
|
|
30
27
|
* Id of the component. May be used when a creating a [[TreeDefinition]] for [[ExternalSourcesTreeComponent]].
|
|
31
28
|
* @alpha
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExternalSourcesTreeComponent.js","sourceRoot":"","sources":["../../../../../src/components/trees/external-sources-tree/ExternalSourcesTreeComponent.tsx"],"names":[],"mappings":";;;;AAAA;;;+FAG+F;AAE/F,sCAAoC;AACpC,oDAA+D;AAC/D,oDAAiD;AACjD,qDAAkD;AAClD,+DAA4D;
|
|
1
|
+
{"version":3,"file":"ExternalSourcesTreeComponent.js","sourceRoot":"","sources":["../../../../../src/components/trees/external-sources-tree/ExternalSourcesTreeComponent.tsx"],"names":[],"mappings":";;;;AAAA;;;+FAG+F;AAE/F,sCAAoC;AACpC,oDAA+D;AAC/D,oDAAiD;AACjD,qDAAkD;AAClD,+DAA4D;AAU5D;;;GAGG;AACI,MAAM,4BAA4B,GAAG,CAAC,KAAwC,EAAE,EAAE;IACvF,MAAM,MAAM,GAAG,IAAA,uCAAyB,GAAE,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,IAAI,CAAC;KACb;IAED,OAAO,CACL,uBAAC,qBAAS,cACP,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CACtB,uBAAC,yCAAmB,OACd,KAAK,EACT,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,GACd,CACH,GACS,CACb,CAAC;AACJ,CAAC,CAAC;AAlBW,QAAA,4BAA4B,gCAkBvC;AAEF;;;GAGG;AACH,oCAA4B,CAAC,EAAE,GAAG,uBAAuB,CAAC;AAE1D;;;GAGG;AACH,oCAA4B,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,uBAAU,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport \"../VisibilityTreeBase.scss\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { TreeWidget } from \"../../../TreeWidget\";\nimport { AutoSizer } from \"../../utils/AutoSizer\";\nimport { ExternalSourcesTree } from \"./ExternalSourcesTree\";\n\nimport type { ExternalSourcesTreeProps } from \"./ExternalSourcesTree\";\n\n/**\n * Props for [[ExternalSourcesTreeComponent]].\n * @alpha\n */\nexport type ExternalSourcesTreeComponentProps = Omit<ExternalSourcesTreeProps, \"iModel\" | \"width\" | \"height\">;\n\n/**\n * A component that displays an External Sources tree and any necessary \"chrome\".\n * @alpha\n */\nexport const ExternalSourcesTreeComponent = (props: ExternalSourcesTreeComponentProps) => {\n const iModel = useActiveIModelConnection();\n if (!iModel) {\n return null;\n }\n\n return (\n <AutoSizer>\n {({ width, height }) => (\n <ExternalSourcesTree\n {...props}\n iModel={iModel}\n width={width}\n height={height}\n />\n )}\n </AutoSizer>\n );\n};\n\n/**\n * Id of the component. May be used when a creating a [[TreeDefinition]] for [[ExternalSourcesTreeComponent]].\n * @alpha\n */\nExternalSourcesTreeComponent.id = \"external-sources-tree\";\n\n/**\n * Label of the component. May be used when a creating a [[TreeDefinition]] for [[ExternalSourcesTreeComponent]].\n * @alpha\n */\nExternalSourcesTreeComponent.getLabel = () => TreeWidget.translate(\"externalSources\");\n"]}
|
|
@@ -9,6 +9,8 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
9
9
|
const react_1 = require("react");
|
|
10
10
|
const components_react_1 = require("@itwin/components-react");
|
|
11
11
|
const presentation_components_1 = require("@itwin/presentation-components");
|
|
12
|
+
const TreeRenderer_1 = require("../common/TreeRenderer");
|
|
13
|
+
const Utils_1 = require("../common/Utils");
|
|
12
14
|
/**
|
|
13
15
|
* Presentation rules used by IModelContentTree
|
|
14
16
|
* @internal
|
|
@@ -20,16 +22,20 @@ exports.RULESET_IMODEL_CONTENT = require("./IModelContent.json"); // eslint-disa
|
|
|
20
22
|
* @public
|
|
21
23
|
*/
|
|
22
24
|
const IModelContentTree = (props) => {
|
|
23
|
-
const { iModel, width, height, selectionMode } = props;
|
|
25
|
+
const { iModel, width, height, selectionMode, contextMenuItems } = props;
|
|
24
26
|
const { nodeLoader } = (0, presentation_components_1.usePresentationTreeNodeLoader)({
|
|
25
27
|
imodel: iModel,
|
|
26
28
|
ruleset: exports.RULESET_IMODEL_CONTENT,
|
|
27
29
|
pagingSize: 20,
|
|
28
30
|
appendChildrenCountForGroupingNodes: true,
|
|
31
|
+
customizeTreeNodeItem,
|
|
29
32
|
});
|
|
30
33
|
const eventHandler = (0, components_react_1.useTreeEventsHandler)((0, react_1.useMemo)(() => ({ nodeLoader, modelSource: nodeLoader.modelSource }), [nodeLoader]));
|
|
31
34
|
const treeModel = (0, components_react_1.useTreeModel)(nodeLoader.modelSource);
|
|
32
|
-
return ((0, jsx_runtime_1.jsx)("div", { className: "
|
|
35
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "tree-widget-tree-container", children: (0, jsx_runtime_1.jsx)(components_react_1.ControlledTree, { width: width, height: height, nodeLoader: nodeLoader, selectionMode: selectionMode ?? components_react_1.SelectionMode.None, eventsHandler: eventHandler, model: treeModel, iconsEnabled: true, treeRenderer: (treeProps) => (0, jsx_runtime_1.jsx)(TreeRenderer_1.TreeRenderer, { ...treeProps, contextMenuItems: contextMenuItems, nodeLabelRenderer: props.nodeLabelRenderer, density: props.density }) }) }));
|
|
33
36
|
};
|
|
34
37
|
exports.IModelContentTree = IModelContentTree;
|
|
38
|
+
const customizeTreeNodeItem = (0, Utils_1.combineTreeNodeItemCustomizations)([
|
|
39
|
+
Utils_1.addCustomTreeNodeItemLabelRenderer,
|
|
40
|
+
]);
|
|
35
41
|
//# sourceMappingURL=IModelContentTree.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelContentTree.js","sourceRoot":"","sources":["../../../../../src/components/trees/imodel-content-tree/IModelContentTree.tsx"],"names":[],"mappings":";;;;AAAA;;;+FAG+F;AAE/F,iCAAgC;AAChC,8DAA4G;AAC5G,4EAA+E;
|
|
1
|
+
{"version":3,"file":"IModelContentTree.js","sourceRoot":"","sources":["../../../../../src/components/trees/imodel-content-tree/IModelContentTree.tsx"],"names":[],"mappings":";;;;AAAA;;;+FAG+F;AAE/F,iCAAgC;AAChC,8DAA4G;AAC5G,4EAA+E;AAC/E,yDAAsD;AACtD,2CAAwG;AAKxG;;;GAGG;AACU,QAAA,sBAAsB,GAAY,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,yDAAyD;AAQzI;;;;GAIG;AACI,MAAM,iBAAiB,GAAG,CAAC,KAA6B,EAAE,EAAE;IACjE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;IAEzE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAA,uDAA6B,EAAC;QACnD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,8BAAsB;QAC/B,UAAU,EAAE,EAAE;QACd,mCAAmC,EAAE,IAAI;QACzC,qBAAqB;KACtB,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,IAAA,uCAAoB,EAAC,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAE9H,MAAM,SAAS,GAAG,IAAA,+BAAY,EAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAEvD,OAAO,CACL,gCAAK,SAAS,EAAC,4BAA4B,YACzC,uBAAC,iCAAc,IACb,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,IAAI,gCAAa,CAAC,IAAI,EAClD,aAAa,EAAE,YAAY,EAC3B,KAAK,EAAE,SAAS,EAChB,YAAY,EAAE,IAAI,EAClB,YAAY,EAAE,CAAC,SAAS,EAAE,EAAE,CAC1B,uBAAC,2BAAY,OACP,SAAS,EACb,gBAAgB,EAAE,gBAAgB,EAClC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAC1C,OAAO,EAAE,KAAK,CAAC,OAAO,GACtB,GAEJ,GACE,CACP,CAAC;AACJ,CAAC,CAAC;AAnCW,QAAA,iBAAiB,qBAmC5B;AAEF,MAAM,qBAAqB,GAAG,IAAA,yCAAiC,EAAC;IAC9D,0CAAkC;CACnC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { useMemo } from \"react\";\nimport { ControlledTree, SelectionMode, useTreeEventsHandler, useTreeModel } from \"@itwin/components-react\";\nimport { usePresentationTreeNodeLoader } from \"@itwin/presentation-components\";\nimport { TreeRenderer } from \"../common/TreeRenderer\";\nimport { addCustomTreeNodeItemLabelRenderer, combineTreeNodeItemCustomizations } from \"../common/Utils\";\n\nimport type { Ruleset } from \"@itwin/presentation-common\";\nimport type { BaseTreeProps } from \"../common/Types\";\n\n/**\n * Presentation rules used by IModelContentTree\n * @internal\n */\nexport const RULESET_IMODEL_CONTENT: Ruleset = require(\"./IModelContent.json\"); // eslint-disable-line @typescript-eslint/no-var-requires\n\n/**\n * Props for [[IModelContentTree]].\n * @public\n */\nexport type IModelContentTreeProps = BaseTreeProps;\n\n/**\n * A tree that shows all iModel content starting from the root Subject, then the hierarchy of child\n * Subjects, their Models and Elements contained in those Models.\n * @public\n */\nexport const IModelContentTree = (props: IModelContentTreeProps) => {\n const { iModel, width, height, selectionMode, contextMenuItems } = props;\n\n const { nodeLoader } = usePresentationTreeNodeLoader({\n imodel: iModel,\n ruleset: RULESET_IMODEL_CONTENT,\n pagingSize: 20,\n appendChildrenCountForGroupingNodes: true,\n customizeTreeNodeItem,\n });\n const eventHandler = useTreeEventsHandler(useMemo(() => ({ nodeLoader, modelSource: nodeLoader.modelSource }), [nodeLoader]));\n\n const treeModel = useTreeModel(nodeLoader.modelSource);\n\n return (\n <div className=\"tree-widget-tree-container\">\n <ControlledTree\n width={width}\n height={height}\n nodeLoader={nodeLoader}\n selectionMode={selectionMode ?? SelectionMode.None}\n eventsHandler={eventHandler}\n model={treeModel}\n iconsEnabled={true}\n treeRenderer={(treeProps) =>\n <TreeRenderer\n {...treeProps}\n contextMenuItems={contextMenuItems}\n nodeLabelRenderer={props.nodeLabelRenderer}\n density={props.density}\n />\n }\n />\n </div>\n );\n};\n\nconst customizeTreeNodeItem = combineTreeNodeItemCustomizations([\n addCustomTreeNodeItemLabelRenderer,\n]);\n"]}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
export * from "./
|
|
1
|
+
export * from "./common/Types";
|
|
2
|
+
export * from "./common/ContextMenu";
|
|
3
|
+
export * from "./common/TreeRenderer";
|
|
4
|
+
export * from "./common/TreeNodeRenderer";
|
|
2
5
|
export * from "./VisibilityTreeEventHandler";
|
|
3
6
|
export * from "./VisibilityTreeRenderer";
|
|
4
7
|
export * from "./imodel-content-tree/IModelContentTree";
|
|
@@ -11,5 +14,4 @@ export * from "./external-sources-tree/ExternalSourcesTreeComponent";
|
|
|
11
14
|
export * from "./models-tree/ModelsTree";
|
|
12
15
|
export * from "./models-tree/ModelsTreeComponent";
|
|
13
16
|
export * from "./models-tree/ModelsVisibilityHandler";
|
|
14
|
-
export * from "./models-tree/Utils";
|
|
15
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -18,7 +18,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
18
18
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
19
19
|
};
|
|
20
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
-
__exportStar(require("./
|
|
21
|
+
__exportStar(require("./common/Types"), exports);
|
|
22
|
+
__exportStar(require("./common/ContextMenu"), exports);
|
|
23
|
+
__exportStar(require("./common/TreeRenderer"), exports);
|
|
24
|
+
__exportStar(require("./common/TreeNodeRenderer"), exports);
|
|
22
25
|
__exportStar(require("./VisibilityTreeEventHandler"), exports);
|
|
23
26
|
__exportStar(require("./VisibilityTreeRenderer"), exports);
|
|
24
27
|
__exportStar(require("./imodel-content-tree/IModelContentTree"), exports);
|
|
@@ -31,5 +34,4 @@ __exportStar(require("./external-sources-tree/ExternalSourcesTreeComponent"), ex
|
|
|
31
34
|
__exportStar(require("./models-tree/ModelsTree"), exports);
|
|
32
35
|
__exportStar(require("./models-tree/ModelsTreeComponent"), exports);
|
|
33
36
|
__exportStar(require("./models-tree/ModelsVisibilityHandler"), exports);
|
|
34
|
-
__exportStar(require("./models-tree/Utils"), exports);
|
|
35
37
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/trees/index.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;;;;;;;;;;;;;;AAE/F,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/trees/index.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;;;;;;;;;;;;;;AAE/F,iDAA+B;AAC/B,uDAAqC;AACrC,wDAAsC;AACtC,4DAA0C;AAC1C,+DAA6C;AAC7C,2DAAyC;AAEzC,0EAAwD;AACxD,mFAAiE;AAEjE,iEAA+C;AAC/C,0EAAwD;AACxD,4EAA0D;AAE1D,8EAA4D;AAC5D,uFAAqE;AAErE,2DAAyC;AACzC,oEAAkD;AAClD,wEAAsD","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nexport * from \"./common/Types\";\nexport * from \"./common/ContextMenu\";\nexport * from \"./common/TreeRenderer\";\nexport * from \"./common/TreeNodeRenderer\";\nexport * from \"./VisibilityTreeEventHandler\";\nexport * from \"./VisibilityTreeRenderer\";\n\nexport * from \"./imodel-content-tree/IModelContentTree\";\nexport * from \"./imodel-content-tree/IModelContentTreeComponent\";\n\nexport * from \"./category-tree/CategoriesTree\";\nexport * from \"./category-tree/CategoriesTreeComponent\";\nexport * from \"./category-tree/CategoryVisibilityHandler\";\n\nexport * from \"./external-sources-tree/ExternalSourcesTree\";\nexport * from \"./external-sources-tree/ExternalSourcesTreeComponent\";\n\nexport * from \"./models-tree/ModelsTree\";\nexport * from \"./models-tree/ModelsTreeComponent\";\nexport * from \"./models-tree/ModelsVisibilityHandler\";\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import "../VisibilityTreeBase.scss";
|
|
3
|
-
import { ClassGroupingOption } from "../
|
|
3
|
+
import { ClassGroupingOption } from "../common/Types";
|
|
4
4
|
import { ModelsVisibilityHandler } from "./ModelsVisibilityHandler";
|
|
5
|
-
import type { Viewport } from "@itwin/core-frontend";
|
|
6
5
|
import type { SingleSchemaClassSpecification } from "@itwin/presentation-common";
|
|
7
|
-
import type {
|
|
6
|
+
import type { Viewport } from "@itwin/core-frontend";
|
|
7
|
+
import type { BaseFilterableTreeProps } from "../common/Types";
|
|
8
8
|
import type { ModelsTreeSelectionPredicate } from "./ModelsVisibilityHandler";
|
|
9
9
|
/**
|
|
10
10
|
* Props for configuring the hierarchy in [[ModelsTree]].
|
|
@@ -18,9 +18,11 @@ export interface ModelsTreeHierarchyConfiguration {
|
|
|
18
18
|
* Defaults to `bis.GeometricElement3d`. It's expected for the given class to derive from it.
|
|
19
19
|
*/
|
|
20
20
|
elementClassSpecification?: SingleSchemaClassSpecification;
|
|
21
|
+
/** Should the tree show models without elements. */
|
|
22
|
+
showEmptyModels?: boolean;
|
|
21
23
|
}
|
|
22
24
|
/**
|
|
23
|
-
* Props for [[ModelsTree]] component
|
|
25
|
+
* Props for [[ModelsTree]] component.
|
|
24
26
|
* @public
|
|
25
27
|
*/
|
|
26
28
|
export interface ModelsTreeProps extends BaseFilterableTreeProps {
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.ModelsTree = void 0;
|
|
4
7
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
@@ -7,16 +10,18 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
7
10
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
8
11
|
*--------------------------------------------------------------------------------------------*/
|
|
9
12
|
require("../VisibilityTreeBase.scss");
|
|
13
|
+
const classnames_1 = __importDefault(require("classnames"));
|
|
10
14
|
const react_1 = require("react");
|
|
11
15
|
const components_react_1 = require("@itwin/components-react");
|
|
12
16
|
const core_react_1 = require("@itwin/core-react");
|
|
13
17
|
const presentation_components_1 = require("@itwin/presentation-components");
|
|
14
18
|
const TreeWidget_1 = require("../../../TreeWidget");
|
|
15
|
-
const
|
|
19
|
+
const Types_1 = require("../common/Types");
|
|
20
|
+
const Utils_1 = require("../common/Utils");
|
|
16
21
|
const VisibilityTreeEventHandler_1 = require("../VisibilityTreeEventHandler");
|
|
17
22
|
const VisibilityTreeRenderer_1 = require("../VisibilityTreeRenderer");
|
|
18
23
|
const ModelsVisibilityHandler_1 = require("./ModelsVisibilityHandler");
|
|
19
|
-
const
|
|
24
|
+
const Utils_2 = require("./Utils");
|
|
20
25
|
const PAGING_SIZE = 20;
|
|
21
26
|
/**
|
|
22
27
|
* A tree component that shows a subject - model - category - element
|
|
@@ -37,6 +42,9 @@ function ModelsTree(props) {
|
|
|
37
42
|
}), [filteredNodeLoader, visibilityHandler, selectionPredicate]));
|
|
38
43
|
const treeModel = (0, components_react_1.useTreeModel)(filteredNodeLoader.modelSource);
|
|
39
44
|
const treeRenderer = (0, VisibilityTreeRenderer_1.createVisibilityTreeRenderer)({
|
|
45
|
+
contextMenuItems: props.contextMenuItems,
|
|
46
|
+
nodeLabelRenderer: props.nodeLabelRenderer,
|
|
47
|
+
density: props.density,
|
|
40
48
|
nodeRendererProps: {
|
|
41
49
|
iconsEnabled: true,
|
|
42
50
|
descriptionEnabled: false,
|
|
@@ -49,33 +57,40 @@ function ModelsTree(props) {
|
|
|
49
57
|
const noFilteredDataRenderer = (0, react_1.useCallback)(() => {
|
|
50
58
|
return (0, jsx_runtime_1.jsx)(VisibilityTreeRenderer_1.VisibilityTreeNoFilteredData, { title: TreeWidget_1.TreeWidget.translate("modelTree.noModelFound"), message: TreeWidget_1.TreeWidget.translate("modelTree.noMatchingModelNames") });
|
|
51
59
|
}, []);
|
|
52
|
-
return ((0, jsx_runtime_1.jsxs)("div", { className: "tree-widget-visibility-tree-base", children: [(0, jsx_runtime_1.jsx)(components_react_1.ControlledTree, { nodeLoader: filteredNodeLoader, model: treeModel, selectionMode: props.selectionMode || components_react_1.SelectionMode.None, eventsHandler: eventHandler, treeRenderer: treeRenderer, nodeHighlightingProps: nodeHighlightingProps, noDataRenderer: filterApplied ? noFilteredDataRenderer : undefined, onItemsRendered: onItemsRendered, width: props.width, height: props.height }), overlay] }));
|
|
60
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: (0, classnames_1.default)("tree-widget-visibility-tree-base", "tree-widget-tree-container"), children: [(0, jsx_runtime_1.jsx)(components_react_1.ControlledTree, { nodeLoader: filteredNodeLoader, model: treeModel, selectionMode: props.selectionMode || components_react_1.SelectionMode.None, eventsHandler: eventHandler, treeRenderer: treeRenderer, nodeHighlightingProps: nodeHighlightingProps, noDataRenderer: filterApplied ? noFilteredDataRenderer : undefined, onItemsRendered: onItemsRendered, width: props.width, height: props.height }), overlay] }));
|
|
53
61
|
}
|
|
54
62
|
exports.ModelsTree = ModelsTree;
|
|
63
|
+
const customizeTreeNodeItem = (0, Utils_1.combineTreeNodeItemCustomizations)([
|
|
64
|
+
Utils_1.addCustomTreeNodeItemLabelRenderer,
|
|
65
|
+
Utils_1.addTreeNodeItemCheckbox,
|
|
66
|
+
Utils_2.addModelsTreeNodeItemIcons,
|
|
67
|
+
]);
|
|
55
68
|
function useModelsTreeNodeLoader(props) {
|
|
56
69
|
const rulesets = {
|
|
57
|
-
general: (0, react_1.useMemo)(() => (0,
|
|
70
|
+
general: (0, react_1.useMemo)(() => (0, Utils_2.createRuleset)({
|
|
58
71
|
enableElementsClassGrouping: !!props.hierarchyConfig?.enableElementsClassGrouping,
|
|
59
72
|
elementClassSpecification: props.hierarchyConfig?.elementClassSpecification,
|
|
60
|
-
|
|
61
|
-
|
|
73
|
+
showEmptyModels: props.hierarchyConfig?.showEmptyModels,
|
|
74
|
+
}), [props.hierarchyConfig?.enableElementsClassGrouping, props.hierarchyConfig?.elementClassSpecification, props.hierarchyConfig?.showEmptyModels]),
|
|
75
|
+
search: (0, react_1.useMemo)(() => (0, Utils_2.createSearchRuleset)({
|
|
62
76
|
elementClassSpecification: props.hierarchyConfig?.elementClassSpecification,
|
|
63
|
-
|
|
77
|
+
showEmptyModels: props.hierarchyConfig?.showEmptyModels,
|
|
78
|
+
}), [props.hierarchyConfig?.elementClassSpecification, props.hierarchyConfig?.showEmptyModels]),
|
|
64
79
|
};
|
|
65
80
|
const { nodeLoader, onItemsRendered } = (0, presentation_components_1.usePresentationTreeNodeLoader)({
|
|
66
81
|
imodel: props.iModel,
|
|
67
82
|
ruleset: rulesets.general,
|
|
68
|
-
appendChildrenCountForGroupingNodes: (props.hierarchyConfig?.enableElementsClassGrouping ===
|
|
83
|
+
appendChildrenCountForGroupingNodes: (props.hierarchyConfig?.enableElementsClassGrouping === Types_1.ClassGroupingOption.YesWithCounts),
|
|
69
84
|
pagingSize: PAGING_SIZE,
|
|
70
85
|
enableHierarchyAutoUpdate: props.enableHierarchyAutoUpdate,
|
|
71
|
-
customizeTreeNodeItem
|
|
86
|
+
customizeTreeNodeItem,
|
|
72
87
|
});
|
|
73
88
|
const { nodeLoader: searchNodeLoader, onItemsRendered: onSearchItemsRendered } = (0, presentation_components_1.usePresentationTreeNodeLoader)({
|
|
74
89
|
imodel: props.iModel,
|
|
75
90
|
ruleset: rulesets.search,
|
|
76
91
|
pagingSize: PAGING_SIZE,
|
|
77
92
|
enableHierarchyAutoUpdate: props.enableHierarchyAutoUpdate,
|
|
78
|
-
customizeTreeNodeItem
|
|
93
|
+
customizeTreeNodeItem,
|
|
79
94
|
});
|
|
80
95
|
const activeNodeLoader = props.filterInfo?.filter ? searchNodeLoader : nodeLoader;
|
|
81
96
|
const activeItemsRenderedCallback = props.filterInfo?.filter ? onSearchItemsRendered : onItemsRendered;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelsTree.js","sourceRoot":"","sources":["../../../../../src/components/trees/models-tree/ModelsTree.tsx"],"names":[],"mappings":";;;;AAAA;;;+FAG+F;AAE/F,sCAAoC;AACpC,iCAAwD;AACxD,8DAAsF;AACtF,kDAAkD;AAClD,4EAA2G;AAC3G,oDAAiD;AACjD,sCAAgD;AAChD,8EAA2E;AAC3E,sEAAmI;AACnI,uEAA0F;AAC1F,mCAA0F;AAQ1F,MAAM,WAAW,GAAG,EAAE,CAAC;AA4CvB;;;;;GAKG;AACH,SAAgB,UAAU,CAAC,KAAsB;IAC/C,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,EAAE,kBAAkB,EAAE,WAAW,EAAE,qBAAqB,EAAE,GAAG,IAAA,mDAA0B,EAAC,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;IACnJ,MAAM,aAAa,GAAG,kBAAkB,KAAK,UAAU,CAAC;IAExD,MAAM,EAAE,UAAU,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAC;IAE1E,MAAM,iBAAiB,GAAG,oBAAoB,CAC5C,UAAU,CAAC,YAAY,CAAC,SAAS,EACjC,KAAK,CAAC,MAAM,EACZ,UAAU,EACV,uBAAuB,EACvB,uBAAuB,CAAC,kBAAkB,CAAC,YAAY,CAAC,EACxD,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACnC,MAAM,YAAY,GAAG,IAAA,0BAAa,EAAC,IAAA,mBAAW,EAAC,GAAG,EAAE,CAAC,IAAI,uDAA0B,CAAC;QAClF,UAAU,EAAE,kBAAkB;QAC9B,iBAAiB;QACjB,kBAAkB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,kBAAkB,IAAI,CAAC,IAAA,oDAA0B,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,iDAAuB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KACxK,CAAC,EAAE,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAElE,MAAM,SAAS,GAAG,IAAA,+BAAY,EAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,IAAA,qDAA4B,EAAC;QAChD,iBAAiB,EAAE;YACjB,YAAY,EAAE,IAAI;YAClB,kBAAkB,EAAE,KAAK;YACzB,WAAW,EAAE,EAAE;YACf,uBAAuB,EAAE,IAAI;SAC9B;KACF,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,gCAAK,SAAS,EAAC,qBAAqB,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IAElF,uBAAuB;IACvB,MAAM,sBAAsB,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QAC9C,OAAO,uBAAC,qDAA4B,IAClC,KAAK,EAAE,uBAAU,CAAC,SAAS,CAAC,wBAAwB,CAAC,EACrD,OAAO,EAAE,uBAAU,CAAC,SAAS,CAAC,gCAAgC,CAAC,GAC/D,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,iCAAK,SAAS,EAAC,kCAAkC,aAC/C,uBAAC,iCAAc,IACb,UAAU,EAAE,kBAAkB,EAC9B,KAAK,EAAE,SAAS,EAChB,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,gCAAa,CAAC,IAAI,EACxD,aAAa,EAAE,YAAY,EAC3B,YAAY,EAAE,YAAY,EAC1B,qBAAqB,EAAE,qBAAqB,EAC5C,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS,EAClE,eAAe,EAAE,eAAe,EAChC,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,MAAM,EAAE,KAAK,CAAC,MAAM,GACpB,EACD,OAAO,IACJ,CACP,CAAC;AACJ,CAAC;AAzDD,gCAyDC;AAED,SAAS,uBAAuB,CAAC,KAAsB;IACrD,MAAM,QAAQ,GAAG;QACf,OAAO,EAAE,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,IAAA,qBAAa,EAAC;YACnC,2BAA2B,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B;YACjF,yBAAyB,EAAE,KAAK,CAAC,eAAe,EAAE,yBAAyB;SAC5E,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,EAAE,KAAK,CAAC,eAAe,EAAE,yBAAyB,CAAC,CAAC;QAC3G,MAAM,EAAE,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,IAAA,2BAAmB,EAAC;YACxC,yBAAyB,EAAE,KAAK,CAAC,eAAe,EAAE,yBAAyB;SAC5E,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,yBAAyB,CAAC,CAAC;KACxD,CAAC;IAEF,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,IAAA,uDAA6B,EAAC;QACpE,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,mCAAmC,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,2BAA2B,KAAK,4BAAmB,CAAC,aAAa,CAAC;QAC/H,UAAU,EAAE,WAAW;QACvB,yBAAyB,EAAE,KAAK,CAAC,yBAAyB;QAC1D,qBAAqB,EAAE,mCAA2B;KACnD,CAAC,CAAC;IACH,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,qBAAqB,EAAE,GAAG,IAAA,uDAA6B,EAAC;QAC7G,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,QAAQ,CAAC,MAAM;QACxB,UAAU,EAAE,WAAW;QACvB,yBAAyB,EAAE,KAAK,CAAC,yBAAyB;QAC1D,qBAAqB,EAAE,mCAA2B;KACnD,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC;IAClF,MAAM,2BAA2B,GAAG,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,eAAe,CAAC;IAEvG,OAAO;QACL,UAAU,EAAE,gBAAgB;QAC5B,eAAe,EAAE,2BAA2B;KAC7C,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,SAAiB,EACjB,MAAwB,EACxB,UAAoB,EACpB,iBAA2C,EAC3C,oBAA4D,EAC5D,0BAAoC;IAEpC,MAAM,oBAAoB,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,IAAI,8CAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEvF,MAAM,wBAAwB,GAAG,IAAA,0BAAa,EAAC,IAAA,mBAAW,EACxD,GAAG,EAAE,CACH,IAAI,iDAAuB,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,CAAC,EACpH,CAAC,SAAS,EAAE,UAAU,EAAE,oBAAoB,EAAE,0BAA0B,CAAC,CAAC,CAC3E,CAAC;IAEF,MAAM,OAAO,GAAG,iBAAiB,IAAI,wBAAwB,CAAC;IAE9D,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,OAAO,IAAI,OAAO,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,CAAC;IACnE,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAEpC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,sBAAsB,GAAG,CAAC,YAAmF,EAAyD,EAAE;IAC5K,MAAM,gBAAgB,GAAG,YAAqD,CAAC;IAC/E,OAAO,gBAAgB,CAAC,iBAAiB,KAAK,SAAS,IAAI,gBAAgB,CAAC,cAAc,KAAK,SAAS,IAAI,gBAAgB,CAAC,qBAAqB,KAAK,SAAS,CAAC;AACnK,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,YAAmF,EAAqD,EAAE;IACzK,OAAO,sBAAsB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;AACzE,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport \"../VisibilityTreeBase.scss\";\nimport { useCallback, useEffect, useMemo } from \"react\";\nimport { ControlledTree, SelectionMode, useTreeModel } from \"@itwin/components-react\";\nimport { useDisposable } from \"@itwin/core-react\";\nimport { isPresentationTreeNodeItem, usePresentationTreeNodeLoader } from \"@itwin/presentation-components\";\nimport { TreeWidget } from \"../../../TreeWidget\";\nimport { ClassGroupingOption } from \"../Common\";\nimport { VisibilityTreeEventHandler } from \"../VisibilityTreeEventHandler\";\nimport { createVisibilityTreeRenderer, useVisibilityTreeFiltering, VisibilityTreeNoFilteredData } from \"../VisibilityTreeRenderer\";\nimport { ModelsVisibilityHandler, SubjectModelIdsCache } from \"./ModelsVisibilityHandler\";\nimport { createRuleset, createSearchRuleset, customizeModelsTreeNodeItem } from \"./Utils\";\n\nimport type { IModelConnection, Viewport } from \"@itwin/core-frontend\";\nimport type { SingleSchemaClassSpecification } from \"@itwin/presentation-common\";\nimport type { IFilteredPresentationTreeDataProvider, IPresentationTreeDataProvider } from \"@itwin/presentation-components\";\nimport type { BaseFilterableTreeProps } from \"../Common\";\nimport type { ModelsTreeSelectionPredicate } from \"./ModelsVisibilityHandler\";\n\nconst PAGING_SIZE = 20;\n\n/**\n * Props for configuring the hierarchy in [[ModelsTree]].\n * @public\n */\nexport interface ModelsTreeHierarchyConfiguration {\n /** Should the tree group displayed element nodes by class. Defaults to `ClassGroupingOption.No`. */\n enableElementsClassGrouping?: ClassGroupingOption;\n /**\n * Defines the `bis.GeometricElement3d` sub-class that should be used to load element nodes.\n * Defaults to `bis.GeometricElement3d`. It's expected for the given class to derive from it.\n */\n elementClassSpecification?: SingleSchemaClassSpecification;\n}\n\n/**\n * Props for [[ModelsTree]] component\n * @public\n */\nexport interface ModelsTreeProps extends BaseFilterableTreeProps {\n /**\n * Predicate which indicates whether node can be selected or no\n */\n selectionPredicate?: ModelsTreeSelectionPredicate;\n /**\n * Active view used to determine and control visibility\n */\n activeView: Viewport;\n /**\n * Configuration options for the hierarchy loaded in the component.\n */\n hierarchyConfig?: ModelsTreeHierarchyConfiguration;\n /**\n * Auto-update the hierarchy when data in the iModel changes.\n * @alpha\n */\n enableHierarchyAutoUpdate?: boolean;\n /**\n * Custom visibility handler.\n */\n modelsVisibilityHandler?: ModelsVisibilityHandler;\n}\n\n/**\n * A tree component that shows a subject - model - category - element\n * hierarchy along with checkboxes that represent and allow changing\n * the display of those instances.\n * @public\n */\nexport function ModelsTree(props: ModelsTreeProps) {\n const { nodeLoader, onItemsRendered } = useModelsTreeNodeLoader(props);\n const { filteredNodeLoader, isFiltering, nodeHighlightingProps } = useVisibilityTreeFiltering(nodeLoader, props.filterInfo, props.onFilterApplied);\n const filterApplied = filteredNodeLoader !== nodeLoader;\n\n const { activeView, modelsVisibilityHandler, selectionPredicate } = props;\n\n const visibilityHandler = useVisibilityHandler(\n nodeLoader.dataProvider.rulesetId,\n props.iModel,\n activeView,\n modelsVisibilityHandler,\n getFilteredDataProvider(filteredNodeLoader.dataProvider),\n props.enableHierarchyAutoUpdate);\n const eventHandler = useDisposable(useCallback(() => new VisibilityTreeEventHandler({\n nodeLoader: filteredNodeLoader,\n visibilityHandler,\n selectionPredicate: (node) => !selectionPredicate || !isPresentationTreeNodeItem(node) ? true : selectionPredicate(node.key, ModelsVisibilityHandler.getNodeType(node)),\n }), [filteredNodeLoader, visibilityHandler, selectionPredicate]));\n\n const treeModel = useTreeModel(filteredNodeLoader.modelSource);\n const treeRenderer = createVisibilityTreeRenderer({\n nodeRendererProps: {\n iconsEnabled: true,\n descriptionEnabled: false,\n levelOffset: 10,\n disableRootNodeCollapse: true,\n },\n });\n\n const overlay = isFiltering ? <div className=\"filteredTreeOverlay\" /> : undefined;\n\n // istanbul ignore next\n const noFilteredDataRenderer = useCallback(() => {\n return <VisibilityTreeNoFilteredData\n title={TreeWidget.translate(\"modelTree.noModelFound\")}\n message={TreeWidget.translate(\"modelTree.noMatchingModelNames\")}\n />;\n }, []);\n\n return (\n <div className=\"tree-widget-visibility-tree-base\">\n <ControlledTree\n nodeLoader={filteredNodeLoader}\n model={treeModel}\n selectionMode={props.selectionMode || SelectionMode.None}\n eventsHandler={eventHandler}\n treeRenderer={treeRenderer}\n nodeHighlightingProps={nodeHighlightingProps}\n noDataRenderer={filterApplied ? noFilteredDataRenderer : undefined}\n onItemsRendered={onItemsRendered}\n width={props.width}\n height={props.height}\n />\n {overlay}\n </div>\n );\n}\n\nfunction useModelsTreeNodeLoader(props: ModelsTreeProps) {\n const rulesets = {\n general: useMemo(() => createRuleset({\n enableElementsClassGrouping: !!props.hierarchyConfig?.enableElementsClassGrouping,\n elementClassSpecification: props.hierarchyConfig?.elementClassSpecification,\n }), [props.hierarchyConfig?.enableElementsClassGrouping, props.hierarchyConfig?.elementClassSpecification]),\n search: useMemo(() => createSearchRuleset({\n elementClassSpecification: props.hierarchyConfig?.elementClassSpecification,\n }), [props.hierarchyConfig?.elementClassSpecification]),\n };\n\n const { nodeLoader, onItemsRendered } = usePresentationTreeNodeLoader({\n imodel: props.iModel,\n ruleset: rulesets.general,\n appendChildrenCountForGroupingNodes: (props.hierarchyConfig?.enableElementsClassGrouping === ClassGroupingOption.YesWithCounts),\n pagingSize: PAGING_SIZE,\n enableHierarchyAutoUpdate: props.enableHierarchyAutoUpdate,\n customizeTreeNodeItem: customizeModelsTreeNodeItem,\n });\n const { nodeLoader: searchNodeLoader, onItemsRendered: onSearchItemsRendered } = usePresentationTreeNodeLoader({\n imodel: props.iModel,\n ruleset: rulesets.search,\n pagingSize: PAGING_SIZE,\n enableHierarchyAutoUpdate: props.enableHierarchyAutoUpdate,\n customizeTreeNodeItem: customizeModelsTreeNodeItem,\n });\n\n const activeNodeLoader = props.filterInfo?.filter ? searchNodeLoader : nodeLoader;\n const activeItemsRenderedCallback = props.filterInfo?.filter ? onSearchItemsRendered : onItemsRendered;\n\n return {\n nodeLoader: activeNodeLoader,\n onItemsRendered: activeItemsRenderedCallback,\n };\n}\n\nfunction useVisibilityHandler(\n rulesetId: string,\n iModel: IModelConnection,\n activeView: Viewport,\n visibilityHandler?: ModelsVisibilityHandler,\n filteredDataProvider?: IFilteredPresentationTreeDataProvider,\n hierarchyAutoUpdateEnabled?: boolean,\n) {\n const subjectModelIdsCache = useMemo(() => new SubjectModelIdsCache(iModel), [iModel]);\n\n const defaultVisibilityHandler = useDisposable(useCallback(\n () =>\n new ModelsVisibilityHandler({ rulesetId, viewport: activeView, hierarchyAutoUpdateEnabled, subjectModelIdsCache }),\n [rulesetId, activeView, subjectModelIdsCache, hierarchyAutoUpdateEnabled])\n );\n\n const handler = visibilityHandler ?? defaultVisibilityHandler;\n\n useEffect(() => {\n handler && handler.setFilteredDataProvider(filteredDataProvider);\n }, [handler, filteredDataProvider]);\n\n return handler;\n}\n\nconst isFilteredDataProvider = (dataProvider: IPresentationTreeDataProvider | IFilteredPresentationTreeDataProvider): dataProvider is IFilteredPresentationTreeDataProvider => {\n const filteredProvider = dataProvider as IFilteredPresentationTreeDataProvider;\n return filteredProvider.nodeMatchesFilter !== undefined && filteredProvider.getActiveMatch !== undefined && filteredProvider.countFilteringResults !== undefined;\n};\n\nconst getFilteredDataProvider = (dataProvider: IPresentationTreeDataProvider | IFilteredPresentationTreeDataProvider): IFilteredPresentationTreeDataProvider | undefined => {\n return isFilteredDataProvider(dataProvider) ? dataProvider : undefined;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"ModelsTree.js","sourceRoot":"","sources":["../../../../../src/components/trees/models-tree/ModelsTree.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport \"../VisibilityTreeBase.scss\";\nimport classNames from \"classnames\";\nimport { useCallback, useEffect, useMemo } from \"react\";\nimport { ControlledTree, SelectionMode, useTreeModel } from \"@itwin/components-react\";\nimport { useDisposable } from \"@itwin/core-react\";\nimport { isPresentationTreeNodeItem, usePresentationTreeNodeLoader } from \"@itwin/presentation-components\";\nimport { TreeWidget } from \"../../../TreeWidget\";\nimport { ClassGroupingOption } from \"../common/Types\";\nimport { addCustomTreeNodeItemLabelRenderer, addTreeNodeItemCheckbox, combineTreeNodeItemCustomizations } from \"../common/Utils\";\nimport { VisibilityTreeEventHandler } from \"../VisibilityTreeEventHandler\";\nimport { createVisibilityTreeRenderer, useVisibilityTreeFiltering, VisibilityTreeNoFilteredData } from \"../VisibilityTreeRenderer\";\nimport { ModelsVisibilityHandler, SubjectModelIdsCache } from \"./ModelsVisibilityHandler\";\nimport { addModelsTreeNodeItemIcons, createRuleset, createSearchRuleset } from \"./Utils\";\n\nimport type { SingleSchemaClassSpecification } from \"@itwin/presentation-common\";\nimport type { IModelConnection, Viewport } from \"@itwin/core-frontend\";\nimport type { IFilteredPresentationTreeDataProvider, IPresentationTreeDataProvider } from \"@itwin/presentation-components\";\nimport type { BaseFilterableTreeProps } from \"../common/Types\";\nimport type { ModelsTreeSelectionPredicate } from \"./ModelsVisibilityHandler\";\n\nconst PAGING_SIZE = 20;\n\n/**\n * Props for configuring the hierarchy in [[ModelsTree]].\n * @public\n */\nexport interface ModelsTreeHierarchyConfiguration {\n /** Should the tree group displayed element nodes by class. Defaults to `ClassGroupingOption.No`. */\n enableElementsClassGrouping?: ClassGroupingOption;\n /**\n * Defines the `bis.GeometricElement3d` sub-class that should be used to load element nodes.\n * Defaults to `bis.GeometricElement3d`. It's expected for the given class to derive from it.\n */\n elementClassSpecification?: SingleSchemaClassSpecification;\n /** Should the tree show models without elements. */\n showEmptyModels?: boolean;\n}\n\n/**\n * Props for [[ModelsTree]] component.\n * @public\n */\nexport interface ModelsTreeProps extends BaseFilterableTreeProps {\n /**\n * Predicate which indicates whether node can be selected or no\n */\n selectionPredicate?: ModelsTreeSelectionPredicate;\n /**\n * Active view used to determine and control visibility\n */\n activeView: Viewport;\n /**\n * Configuration options for the hierarchy loaded in the component.\n */\n hierarchyConfig?: ModelsTreeHierarchyConfiguration;\n /**\n * Auto-update the hierarchy when data in the iModel changes.\n * @alpha\n */\n enableHierarchyAutoUpdate?: boolean;\n /**\n * Custom visibility handler.\n */\n modelsVisibilityHandler?: ModelsVisibilityHandler;\n}\n\n/**\n * A tree component that shows a subject - model - category - element\n * hierarchy along with checkboxes that represent and allow changing\n * the display of those instances.\n * @public\n */\nexport function ModelsTree(props: ModelsTreeProps) {\n const { nodeLoader, onItemsRendered } = useModelsTreeNodeLoader(props);\n const { filteredNodeLoader, isFiltering, nodeHighlightingProps } = useVisibilityTreeFiltering(nodeLoader, props.filterInfo, props.onFilterApplied);\n const filterApplied = filteredNodeLoader !== nodeLoader;\n\n const { activeView, modelsVisibilityHandler, selectionPredicate } = props;\n\n const visibilityHandler = useVisibilityHandler(\n nodeLoader.dataProvider.rulesetId,\n props.iModel,\n activeView,\n modelsVisibilityHandler,\n getFilteredDataProvider(filteredNodeLoader.dataProvider),\n props.enableHierarchyAutoUpdate);\n const eventHandler = useDisposable(useCallback(() => new VisibilityTreeEventHandler({\n nodeLoader: filteredNodeLoader,\n visibilityHandler,\n selectionPredicate: (node) => !selectionPredicate || !isPresentationTreeNodeItem(node) ? true : selectionPredicate(node.key, ModelsVisibilityHandler.getNodeType(node)),\n }), [filteredNodeLoader, visibilityHandler, selectionPredicate]));\n\n const treeModel = useTreeModel(filteredNodeLoader.modelSource);\n const treeRenderer = createVisibilityTreeRenderer({\n contextMenuItems: props.contextMenuItems,\n nodeLabelRenderer: props.nodeLabelRenderer,\n density: props.density,\n nodeRendererProps: {\n iconsEnabled: true,\n descriptionEnabled: false,\n levelOffset: 10,\n disableRootNodeCollapse: true,\n },\n });\n\n const overlay = isFiltering ? <div className=\"filteredTreeOverlay\" /> : undefined;\n\n // istanbul ignore next\n const noFilteredDataRenderer = useCallback(() => {\n return <VisibilityTreeNoFilteredData\n title={TreeWidget.translate(\"modelTree.noModelFound\")}\n message={TreeWidget.translate(\"modelTree.noMatchingModelNames\")}\n />;\n }, []);\n\n return (\n <div className={classNames(\"tree-widget-visibility-tree-base\", \"tree-widget-tree-container\")}>\n <ControlledTree\n nodeLoader={filteredNodeLoader}\n model={treeModel}\n selectionMode={props.selectionMode || SelectionMode.None}\n eventsHandler={eventHandler}\n treeRenderer={treeRenderer}\n nodeHighlightingProps={nodeHighlightingProps}\n noDataRenderer={filterApplied ? noFilteredDataRenderer : undefined}\n onItemsRendered={onItemsRendered}\n width={props.width}\n height={props.height}\n />\n {overlay}\n </div>\n );\n}\n\nconst customizeTreeNodeItem = combineTreeNodeItemCustomizations([\n addCustomTreeNodeItemLabelRenderer,\n addTreeNodeItemCheckbox,\n addModelsTreeNodeItemIcons,\n]);\n\nfunction useModelsTreeNodeLoader(props: ModelsTreeProps) {\n const rulesets = {\n general: useMemo(() => createRuleset({\n enableElementsClassGrouping: !!props.hierarchyConfig?.enableElementsClassGrouping,\n elementClassSpecification: props.hierarchyConfig?.elementClassSpecification,\n showEmptyModels: props.hierarchyConfig?.showEmptyModels,\n }), [props.hierarchyConfig?.enableElementsClassGrouping, props.hierarchyConfig?.elementClassSpecification, props.hierarchyConfig?.showEmptyModels]),\n search: useMemo(() => createSearchRuleset({\n elementClassSpecification: props.hierarchyConfig?.elementClassSpecification,\n showEmptyModels: props.hierarchyConfig?.showEmptyModels,\n }), [props.hierarchyConfig?.elementClassSpecification, props.hierarchyConfig?.showEmptyModels]),\n };\n\n const { nodeLoader, onItemsRendered } = usePresentationTreeNodeLoader({\n imodel: props.iModel,\n ruleset: rulesets.general,\n appendChildrenCountForGroupingNodes: (props.hierarchyConfig?.enableElementsClassGrouping === ClassGroupingOption.YesWithCounts),\n pagingSize: PAGING_SIZE,\n enableHierarchyAutoUpdate: props.enableHierarchyAutoUpdate,\n customizeTreeNodeItem,\n });\n const { nodeLoader: searchNodeLoader, onItemsRendered: onSearchItemsRendered } = usePresentationTreeNodeLoader({\n imodel: props.iModel,\n ruleset: rulesets.search,\n pagingSize: PAGING_SIZE,\n enableHierarchyAutoUpdate: props.enableHierarchyAutoUpdate,\n customizeTreeNodeItem,\n });\n\n const activeNodeLoader = props.filterInfo?.filter ? searchNodeLoader : nodeLoader;\n const activeItemsRenderedCallback = props.filterInfo?.filter ? onSearchItemsRendered : onItemsRendered;\n\n return {\n nodeLoader: activeNodeLoader,\n onItemsRendered: activeItemsRenderedCallback,\n };\n}\n\nfunction useVisibilityHandler(\n rulesetId: string,\n iModel: IModelConnection,\n activeView: Viewport,\n visibilityHandler?: ModelsVisibilityHandler,\n filteredDataProvider?: IFilteredPresentationTreeDataProvider,\n hierarchyAutoUpdateEnabled?: boolean,\n) {\n const subjectModelIdsCache = useMemo(() => new SubjectModelIdsCache(iModel), [iModel]);\n\n const defaultVisibilityHandler = useDisposable(useCallback(\n () =>\n new ModelsVisibilityHandler({ rulesetId, viewport: activeView, hierarchyAutoUpdateEnabled, subjectModelIdsCache }),\n [rulesetId, activeView, subjectModelIdsCache, hierarchyAutoUpdateEnabled])\n );\n\n const handler = visibilityHandler ?? defaultVisibilityHandler;\n\n useEffect(() => {\n handler && handler.setFilteredDataProvider(filteredDataProvider);\n }, [handler, filteredDataProvider]);\n\n return handler;\n}\n\nconst isFilteredDataProvider = (dataProvider: IPresentationTreeDataProvider | IFilteredPresentationTreeDataProvider): dataProvider is IFilteredPresentationTreeDataProvider => {\n const filteredProvider = dataProvider as IFilteredPresentationTreeDataProvider;\n return filteredProvider.nodeMatchesFilter !== undefined && filteredProvider.getActiveMatch !== undefined && filteredProvider.countFilteringResults !== undefined;\n};\n\nconst getFilteredDataProvider = (dataProvider: IPresentationTreeDataProvider | IFilteredPresentationTreeDataProvider): IFilteredPresentationTreeDataProvider | undefined => {\n return isFilteredDataProvider(dataProvider) ? dataProvider : undefined;\n};\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Id64String } from "@itwin/core-bentley";
|
|
2
|
-
import type { DelayLoadedTreeNodeItem } from "@itwin/components-react";
|
|
3
2
|
import type { Node, Ruleset } from "@itwin/presentation-common";
|
|
3
|
+
import type { DelayLoadedTreeNodeItem } from "@itwin/components-react";
|
|
4
4
|
import type { ModelsTreeHierarchyConfiguration } from "./ModelsTree";
|
|
5
5
|
/** @internal */
|
|
6
6
|
export declare class CachingElementIdsContainer {
|
|
@@ -21,5 +21,5 @@ export type CreateSearchRulesetProps = Omit<ModelsTreeHierarchyConfiguration, "e
|
|
|
21
21
|
/** @internal */
|
|
22
22
|
export declare function createSearchRuleset(props: CreateSearchRulesetProps): Ruleset;
|
|
23
23
|
/** @internal */
|
|
24
|
-
export declare function
|
|
24
|
+
export declare function addModelsTreeNodeItemIcons(item: Partial<DelayLoadedTreeNodeItem>, node: Partial<Node>): void;
|
|
25
25
|
//# sourceMappingURL=Utils.d.ts.map
|