@itwin/tree-widget-react 1.2.2 → 2.0.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 +26 -2
- package/README.md +1 -1
- package/lib/cjs/TreeWidget.d.ts +0 -1
- package/lib/cjs/TreeWidget.js +9 -10
- package/lib/cjs/TreeWidget.js.map +1 -1
- package/lib/cjs/components/SelectableTree.d.ts +9 -1
- package/lib/cjs/components/SelectableTree.js +28 -17
- package/lib/cjs/components/SelectableTree.js.map +1 -1
- package/lib/cjs/components/SelectableTree.scss +0 -16
- package/lib/cjs/components/TreeFilteringState.js +3 -3
- package/lib/cjs/components/TreeFilteringState.js.map +1 -1
- package/lib/cjs/components/TreeSelector.d.ts +28 -0
- package/lib/cjs/components/TreeSelector.js +27 -0
- package/lib/cjs/components/TreeSelector.js.map +1 -0
- package/lib/cjs/components/TreeSelector.scss +27 -0
- package/lib/cjs/components/TreeWidgetUiItemsProvider.d.ts +9 -1
- package/lib/cjs/components/TreeWidgetUiItemsProvider.js +21 -14
- package/lib/cjs/components/TreeWidgetUiItemsProvider.js.map +1 -1
- package/lib/cjs/components/TreeWidgetUiItemsProvider.scss +1 -1
- package/lib/cjs/components/tree-header/TreeHeader.d.ts +3 -0
- package/lib/cjs/components/tree-header/TreeHeader.js +20 -15
- package/lib/cjs/components/tree-header/TreeHeader.js.map +1 -1
- package/lib/cjs/components/tree-header/TreeHeader.scss +29 -1
- package/lib/cjs/components/trees/CategoriesVisibilityUtils.js +13 -8
- package/lib/cjs/components/trees/CategoriesVisibilityUtils.js.map +1 -1
- package/lib/cjs/components/trees/VisibilityTreeBase.scss +1 -1
- package/lib/cjs/components/trees/VisibilityTreeEventHandler.d.ts +1 -1
- package/lib/cjs/components/trees/VisibilityTreeEventHandler.js +18 -10
- package/lib/cjs/components/trees/VisibilityTreeEventHandler.js.map +1 -1
- package/lib/cjs/components/trees/VisibilityTreeRenderer.d.ts +20 -4
- package/lib/cjs/components/trees/VisibilityTreeRenderer.js +28 -10
- package/lib/cjs/components/trees/VisibilityTreeRenderer.js.map +1 -1
- package/lib/cjs/components/trees/category-tree/CategoriesTree.d.ts +7 -2
- package/lib/cjs/components/trees/category-tree/CategoriesTree.js +47 -30
- package/lib/cjs/components/trees/category-tree/CategoriesTree.js.map +1 -1
- package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.js +27 -18
- package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.js.map +1 -1
- package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.d.ts +2 -2
- package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.js +18 -13
- package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.js.map +1 -1
- package/lib/cjs/components/trees/common/ContextMenu.js +4 -4
- package/lib/cjs/components/trees/common/ContextMenu.js.map +1 -1
- package/lib/cjs/components/trees/common/TreeNodeRenderer.d.ts +1 -1
- package/lib/cjs/components/trees/common/TreeNodeRenderer.js +4 -4
- package/lib/cjs/components/trees/common/TreeNodeRenderer.js.map +1 -1
- package/lib/cjs/components/trees/common/TreeRenderer.d.ts +15 -1
- package/lib/cjs/components/trees/common/TreeRenderer.js +17 -7
- package/lib/cjs/components/trees/common/TreeRenderer.js.map +1 -1
- package/lib/cjs/components/trees/common/TreeRenderer.scss +39 -2
- package/lib/cjs/components/trees/common/Types.d.ts +8 -0
- package/lib/cjs/components/trees/common/Types.js +3 -3
- package/lib/cjs/components/trees/common/Types.js.map +1 -1
- package/lib/cjs/components/trees/common/UseVisibilityTreeState.d.ts +36 -0
- package/lib/cjs/components/trees/common/UseVisibilityTreeState.js +47 -0
- package/lib/cjs/components/trees/common/UseVisibilityTreeState.js.map +1 -0
- package/lib/cjs/components/trees/common/Utils.js +7 -5
- package/lib/cjs/components/trees/common/Utils.js.map +1 -1
- package/lib/cjs/components/trees/external-sources-tree/ExternalSources.json +1 -3
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +9 -3
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.js +19 -7
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +4 -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 +9 -3
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.js +16 -12
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeComponent.js +6 -5
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
- package/lib/cjs/components/trees/index.js +3 -3
- package/lib/cjs/components/trees/index.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/ModelsTree.d.ts +7 -2
- package/lib/cjs/components/trees/models-tree/ModelsTree.js +76 -62
- package/lib/cjs/components/trees/models-tree/ModelsTree.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js +27 -29
- package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.d.ts +9 -0
- package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.js +31 -0
- package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.js.map +1 -0
- package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.js +125 -66
- package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/Utils.d.ts +4 -0
- package/lib/cjs/components/trees/models-tree/Utils.js +52 -58
- package/lib/cjs/components/trees/models-tree/Utils.js.map +1 -1
- package/lib/cjs/components/utils/AutoSizer.js +7 -5
- package/lib/cjs/components/utils/AutoSizer.js.map +1 -1
- package/lib/cjs/components/utils/IsPromiseLike.js +4 -4
- package/lib/cjs/components/utils/IsPromiseLike.js.map +1 -1
- package/lib/cjs/components/utils/UseTreeTransientState.js +3 -3
- package/lib/cjs/components/utils/UseTreeTransientState.js.map +1 -1
- package/lib/cjs/tree-widget-react.js +3 -3
- package/lib/cjs/tree-widget-react.js.map +1 -1
- package/lib/esm/TreeWidget.d.ts +0 -1
- package/lib/esm/TreeWidget.js +9 -10
- package/lib/esm/TreeWidget.js.map +1 -1
- package/lib/esm/components/SelectableTree.d.ts +9 -1
- package/lib/esm/components/SelectableTree.js +28 -17
- package/lib/esm/components/SelectableTree.js.map +1 -1
- package/lib/esm/components/SelectableTree.scss +0 -16
- package/lib/esm/components/TreeFilteringState.js +3 -3
- package/lib/esm/components/TreeFilteringState.js.map +1 -1
- package/lib/esm/components/TreeSelector.d.ts +28 -0
- package/lib/esm/components/TreeSelector.js +23 -0
- package/lib/esm/components/TreeSelector.js.map +1 -0
- package/lib/esm/components/TreeSelector.scss +27 -0
- package/lib/esm/components/TreeWidgetUiItemsProvider.d.ts +9 -1
- package/lib/esm/components/TreeWidgetUiItemsProvider.js +19 -13
- package/lib/esm/components/TreeWidgetUiItemsProvider.js.map +1 -1
- package/lib/esm/components/TreeWidgetUiItemsProvider.scss +1 -1
- package/lib/esm/components/tree-header/TreeHeader.d.ts +3 -0
- package/lib/esm/components/tree-header/TreeHeader.js +20 -15
- package/lib/esm/components/tree-header/TreeHeader.js.map +1 -1
- package/lib/esm/components/tree-header/TreeHeader.scss +29 -1
- package/lib/esm/components/trees/CategoriesVisibilityUtils.js +13 -8
- package/lib/esm/components/trees/CategoriesVisibilityUtils.js.map +1 -1
- package/lib/esm/components/trees/VisibilityTreeBase.scss +1 -1
- package/lib/esm/components/trees/VisibilityTreeEventHandler.d.ts +1 -1
- package/lib/esm/components/trees/VisibilityTreeEventHandler.js +18 -10
- package/lib/esm/components/trees/VisibilityTreeEventHandler.js.map +1 -1
- package/lib/esm/components/trees/VisibilityTreeRenderer.d.ts +20 -4
- package/lib/esm/components/trees/VisibilityTreeRenderer.js +27 -10
- package/lib/esm/components/trees/VisibilityTreeRenderer.js.map +1 -1
- package/lib/esm/components/trees/category-tree/CategoriesTree.d.ts +7 -2
- package/lib/esm/components/trees/category-tree/CategoriesTree.js +51 -34
- package/lib/esm/components/trees/category-tree/CategoriesTree.js.map +1 -1
- package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.js +24 -18
- package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.js.map +1 -1
- package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.d.ts +2 -2
- package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.js +18 -13
- package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.js.map +1 -1
- package/lib/esm/components/trees/common/ContextMenu.js +4 -4
- package/lib/esm/components/trees/common/ContextMenu.js.map +1 -1
- package/lib/esm/components/trees/common/TreeNodeRenderer.d.ts +1 -1
- package/lib/esm/components/trees/common/TreeNodeRenderer.js +4 -4
- package/lib/esm/components/trees/common/TreeNodeRenderer.js.map +1 -1
- package/lib/esm/components/trees/common/TreeRenderer.d.ts +15 -1
- package/lib/esm/components/trees/common/TreeRenderer.js +15 -6
- package/lib/esm/components/trees/common/TreeRenderer.js.map +1 -1
- package/lib/esm/components/trees/common/TreeRenderer.scss +39 -2
- package/lib/esm/components/trees/common/Types.d.ts +8 -0
- package/lib/esm/components/trees/common/Types.js +3 -3
- package/lib/esm/components/trees/common/Types.js.map +1 -1
- package/lib/esm/components/trees/common/UseVisibilityTreeState.d.ts +36 -0
- package/lib/esm/components/trees/common/UseVisibilityTreeState.js +43 -0
- package/lib/esm/components/trees/common/UseVisibilityTreeState.js.map +1 -0
- package/lib/esm/components/trees/common/Utils.js +7 -5
- package/lib/esm/components/trees/common/Utils.js.map +1 -1
- package/lib/esm/components/trees/external-sources-tree/ExternalSources.json +1 -3
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +9 -3
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.js +22 -10
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +4 -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 +9 -3
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.js +19 -15
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeComponent.js +6 -5
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
- package/lib/esm/components/trees/index.js +3 -3
- package/lib/esm/components/trees/index.js.map +1 -1
- package/lib/esm/components/trees/models-tree/ModelsTree.d.ts +7 -2
- package/lib/esm/components/trees/models-tree/ModelsTree.js +80 -66
- package/lib/esm/components/trees/models-tree/ModelsTree.js.map +1 -1
- package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js +25 -30
- package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
- package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.d.ts +9 -0
- package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.js +27 -0
- package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.js.map +1 -0
- package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.js +125 -66
- package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.js.map +1 -1
- package/lib/esm/components/trees/models-tree/Utils.d.ts +4 -0
- package/lib/esm/components/trees/models-tree/Utils.js +50 -57
- package/lib/esm/components/trees/models-tree/Utils.js.map +1 -1
- package/lib/esm/components/utils/AutoSizer.js +7 -5
- package/lib/esm/components/utils/AutoSizer.js.map +1 -1
- package/lib/esm/components/utils/IsPromiseLike.js +4 -4
- package/lib/esm/components/utils/IsPromiseLike.js.map +1 -1
- package/lib/esm/components/utils/UseTreeTransientState.js +3 -3
- package/lib/esm/components/utils/UseTreeTransientState.js.map +1 -1
- package/lib/esm/tree-widget-react.js +3 -3
- package/lib/esm/tree-widget-react.js.map +1 -1
- package/lib/public/locales/en/TreeWidget.json +1 -0
- package/package.json +47 -46
- package/lib/cjs/e2e-tests/TreeWidget.test.d.ts +0 -2
- package/lib/cjs/e2e-tests/TreeWidget.test.js +0 -51
- package/lib/cjs/e2e-tests/TreeWidget.test.js.map +0 -1
- package/lib/cjs/e2e-tests/utils.d.ts +0 -9
- package/lib/cjs/e2e-tests/utils.js +0 -51
- package/lib/cjs/e2e-tests/utils.js.map +0 -1
- package/lib/esm/e2e-tests/TreeWidget.test.d.ts +0 -2
- package/lib/esm/e2e-tests/TreeWidget.test.js +0 -46
- package/lib/esm/e2e-tests/TreeWidget.test.js.map +0 -1
- package/lib/esm/e2e-tests/utils.d.ts +0 -9
- package/lib/esm/e2e-tests/utils.js +0 -40
- package/lib/esm/e2e-tests/utils.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*---------------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
-
*--------------------------------------------------------------------------------------------*/
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
5
|
import { BeEvent } from "@itwin/core-bentley";
|
|
6
6
|
import { QueryBinder, QueryRowFormat } from "@itwin/core-common";
|
|
7
7
|
import { IModelApp, PerModelCategoryVisibility } from "@itwin/core-frontend";
|
|
@@ -61,20 +61,28 @@ export class ModelsVisibilityHandler {
|
|
|
61
61
|
clearTimeout(this._pendingVisibilityChange);
|
|
62
62
|
}
|
|
63
63
|
/** Sets data provider that is used to get filtered tree hierarchy. */
|
|
64
|
-
setFilteredDataProvider(provider) {
|
|
64
|
+
setFilteredDataProvider(provider) {
|
|
65
|
+
this._filteredDataProvider = provider;
|
|
66
|
+
}
|
|
65
67
|
static getNodeType(item) {
|
|
66
|
-
if (!isPresentationTreeNodeItem(item))
|
|
68
|
+
if (!isPresentationTreeNodeItem(item)) {
|
|
67
69
|
return ModelsTreeNodeType.Unknown;
|
|
68
|
-
|
|
70
|
+
}
|
|
71
|
+
if (NodeKey.isClassGroupingNodeKey(item.key)) {
|
|
69
72
|
return ModelsTreeNodeType.Grouping;
|
|
70
|
-
|
|
73
|
+
}
|
|
74
|
+
if (!item.extendedData) {
|
|
71
75
|
return ModelsTreeNodeType.Unknown;
|
|
72
|
-
|
|
76
|
+
}
|
|
77
|
+
if (this.isSubjectNode(item)) {
|
|
73
78
|
return ModelsTreeNodeType.Subject;
|
|
74
|
-
|
|
79
|
+
}
|
|
80
|
+
if (this.isModelNode(item)) {
|
|
75
81
|
return ModelsTreeNodeType.Model;
|
|
76
|
-
|
|
82
|
+
}
|
|
83
|
+
if (this.isCategoryNode(item)) {
|
|
77
84
|
return ModelsTreeNodeType.Category;
|
|
85
|
+
}
|
|
78
86
|
return ModelsTreeNodeType.Element;
|
|
79
87
|
}
|
|
80
88
|
static isSubjectNode(node) {
|
|
@@ -89,33 +97,40 @@ export class ModelsVisibilityHandler {
|
|
|
89
97
|
/** Returns visibility status of the tree node. */
|
|
90
98
|
getVisibilityStatus(node) {
|
|
91
99
|
const nodeKey = isPresentationTreeNodeItem(node) ? node.key : undefined;
|
|
92
|
-
if (!nodeKey)
|
|
100
|
+
if (!nodeKey) {
|
|
93
101
|
return { state: "hidden", isDisabled: true };
|
|
94
|
-
|
|
102
|
+
}
|
|
103
|
+
if (NodeKey.isClassGroupingNodeKey(nodeKey)) {
|
|
95
104
|
return this.getElementGroupingNodeDisplayStatus(node.id, nodeKey);
|
|
96
|
-
|
|
105
|
+
}
|
|
106
|
+
if (!NodeKey.isInstancesNodeKey(nodeKey)) {
|
|
97
107
|
return { state: "hidden", isDisabled: true };
|
|
108
|
+
}
|
|
98
109
|
if (ModelsVisibilityHandler.isSubjectNode(node)) {
|
|
99
110
|
// note: subject nodes may be merged to represent multiple subject instances
|
|
100
111
|
return this.getSubjectNodeVisibility(nodeKey.instanceKeys.map((key) => key.id), node);
|
|
101
112
|
}
|
|
102
|
-
if (ModelsVisibilityHandler.isModelNode(node))
|
|
113
|
+
if (ModelsVisibilityHandler.isModelNode(node)) {
|
|
103
114
|
return this.getModelDisplayStatus(nodeKey.instanceKeys[0].id);
|
|
104
|
-
|
|
115
|
+
}
|
|
116
|
+
if (ModelsVisibilityHandler.isCategoryNode(node)) {
|
|
105
117
|
return this.getCategoryDisplayStatus(nodeKey.instanceKeys[0].id, this.getCategoryParentModelId(node));
|
|
118
|
+
}
|
|
106
119
|
return this.getElementDisplayStatus(nodeKey.instanceKeys[0].id, this.getElementModelId(node), this.getElementCategoryId(node));
|
|
107
120
|
}
|
|
108
121
|
/** Changes visibility of the items represented by the tree node. */
|
|
109
122
|
async changeVisibility(node, on) {
|
|
110
123
|
const nodeKey = isPresentationTreeNodeItem(node) ? node.key : undefined;
|
|
111
|
-
if (!nodeKey)
|
|
124
|
+
if (!nodeKey) {
|
|
112
125
|
return;
|
|
126
|
+
}
|
|
113
127
|
if (NodeKey.isClassGroupingNodeKey(nodeKey)) {
|
|
114
128
|
await this.changeElementGroupingNodeState(nodeKey, on);
|
|
115
129
|
return;
|
|
116
130
|
}
|
|
117
|
-
if (!NodeKey.isInstancesNodeKey(nodeKey))
|
|
131
|
+
if (!NodeKey.isInstancesNodeKey(nodeKey)) {
|
|
118
132
|
return;
|
|
133
|
+
}
|
|
119
134
|
if (ModelsVisibilityHandler.isSubjectNode(node)) {
|
|
120
135
|
await this.changeSubjectNodeState(nodeKey.instanceKeys.map((key) => key.id), node, on);
|
|
121
136
|
}
|
|
@@ -130,38 +145,45 @@ export class ModelsVisibilityHandler {
|
|
|
130
145
|
}
|
|
131
146
|
}
|
|
132
147
|
async getSubjectNodeVisibility(ids, node) {
|
|
133
|
-
if (!this._props.viewport.view.isSpatialView())
|
|
148
|
+
if (!this._props.viewport.view.isSpatialView()) {
|
|
134
149
|
return { isDisabled: true, state: "hidden", tooltip: createTooltip("disabled", "subject.nonSpatialView") };
|
|
135
|
-
|
|
150
|
+
}
|
|
151
|
+
if (this._filteredDataProvider) {
|
|
136
152
|
return this.getFilteredSubjectDisplayStatus(this._filteredDataProvider, ids, node);
|
|
153
|
+
}
|
|
137
154
|
return this.getSubjectDisplayStatus(ids);
|
|
138
155
|
}
|
|
139
156
|
async getSubjectDisplayStatus(ids) {
|
|
140
157
|
const modelIds = await this.getSubjectModelIds(ids);
|
|
141
158
|
const isDisplayed = modelIds.some((modelId) => this.getModelDisplayStatus(modelId).state === "visible");
|
|
142
|
-
if (isDisplayed)
|
|
159
|
+
if (isDisplayed) {
|
|
143
160
|
return { state: "visible", tooltip: createTooltip("visible", "subject.atLeastOneModelVisible") };
|
|
161
|
+
}
|
|
144
162
|
return { state: "hidden", tooltip: createTooltip("hidden", "subject.allModelsHidden") };
|
|
145
163
|
}
|
|
146
164
|
async getFilteredSubjectDisplayStatus(provider, ids, node) {
|
|
147
|
-
if (provider.nodeMatchesFilter(node))
|
|
165
|
+
if (provider.nodeMatchesFilter(node)) {
|
|
148
166
|
return this.getSubjectDisplayStatus(ids);
|
|
167
|
+
}
|
|
149
168
|
const children = await provider.getNodes(node);
|
|
150
169
|
const childrenDisplayStatuses = await Promise.all(children.map(async (childNode) => this.getVisibilityStatus(childNode)));
|
|
151
|
-
if (childrenDisplayStatuses.some((status) => status.state === "visible"))
|
|
170
|
+
if (childrenDisplayStatuses.some((status) => status.state === "visible")) {
|
|
152
171
|
return { state: "visible", tooltip: createTooltip("visible", "subject.atLeastOneModelVisible") };
|
|
172
|
+
}
|
|
153
173
|
return { state: "hidden", tooltip: createTooltip("hidden", "subject.allModelsHidden") };
|
|
154
174
|
}
|
|
155
175
|
getModelDisplayStatus(id) {
|
|
156
|
-
if (!this._props.viewport.view.isSpatialView())
|
|
176
|
+
if (!this._props.viewport.view.isSpatialView()) {
|
|
157
177
|
return { isDisabled: true, state: "hidden", tooltip: createTooltip("disabled", "model.nonSpatialView") };
|
|
178
|
+
}
|
|
158
179
|
const isDisplayed = this._props.viewport.view.viewsModel(id);
|
|
159
180
|
return { state: isDisplayed ? "visible" : "hidden", tooltip: createTooltip(isDisplayed ? "visible" : "hidden", undefined) };
|
|
160
181
|
}
|
|
161
182
|
getCategoryDisplayStatus(id, parentModelId) {
|
|
162
183
|
if (parentModelId) {
|
|
163
|
-
if (this.getModelDisplayStatus(parentModelId).state === "hidden")
|
|
184
|
+
if (this.getModelDisplayStatus(parentModelId).state === "hidden") {
|
|
164
185
|
return { state: "hidden", isDisabled: true, tooltip: createTooltip("disabled", "category.modelNotDisplayed") };
|
|
186
|
+
}
|
|
165
187
|
const override = this._props.viewport.perModelCategoryVisibility.getOverride(parentModelId, id);
|
|
166
188
|
switch (override) {
|
|
167
189
|
case PerModelCategoryVisibility.Override.Show:
|
|
@@ -180,8 +202,9 @@ export class ModelsVisibilityHandler {
|
|
|
180
202
|
}
|
|
181
203
|
async getElementGroupingNodeDisplayStatus(_id, key) {
|
|
182
204
|
const { modelId, categoryId, elementIds } = await this.getGroupedElementIds(key);
|
|
183
|
-
if (!modelId || !this._props.viewport.view.viewsModel(modelId))
|
|
205
|
+
if (!modelId || !this._props.viewport.view.viewsModel(modelId)) {
|
|
184
206
|
return { isDisabled: true, state: "hidden", tooltip: createTooltip("disabled", "element.modelNotDisplayed") };
|
|
207
|
+
}
|
|
185
208
|
if (this._props.viewport.alwaysDrawn !== undefined && this._props.viewport.alwaysDrawn.size > 0) {
|
|
186
209
|
let atLeastOneElementForceDisplayed = false;
|
|
187
210
|
for await (const elementId of elementIds.getElementIds()) {
|
|
@@ -190,11 +213,13 @@ export class ModelsVisibilityHandler {
|
|
|
190
213
|
break;
|
|
191
214
|
}
|
|
192
215
|
}
|
|
193
|
-
if (atLeastOneElementForceDisplayed)
|
|
216
|
+
if (atLeastOneElementForceDisplayed) {
|
|
194
217
|
return { state: "visible", tooltip: createTooltip("visible", "element.displayedThroughAlwaysDrawnList") };
|
|
218
|
+
}
|
|
195
219
|
}
|
|
196
|
-
if (this._props.viewport.alwaysDrawn !== undefined && this._props.viewport.alwaysDrawn.size !== 0 && this._props.viewport.isAlwaysDrawnExclusive)
|
|
220
|
+
if (this._props.viewport.alwaysDrawn !== undefined && this._props.viewport.alwaysDrawn.size !== 0 && this._props.viewport.isAlwaysDrawnExclusive) {
|
|
197
221
|
return { state: "hidden", tooltip: createTooltip("hidden", "element.hiddenDueToOtherElementsExclusivelyAlwaysDrawn") };
|
|
222
|
+
}
|
|
198
223
|
// istanbul ignore else
|
|
199
224
|
if (this._props.viewport.neverDrawn !== undefined && this._props.viewport.neverDrawn.size > 0) {
|
|
200
225
|
let allElementsForceHidden = true;
|
|
@@ -204,38 +229,48 @@ export class ModelsVisibilityHandler {
|
|
|
204
229
|
break;
|
|
205
230
|
}
|
|
206
231
|
}
|
|
207
|
-
if (allElementsForceHidden)
|
|
232
|
+
if (allElementsForceHidden) {
|
|
208
233
|
return { state: "hidden", tooltip: createTooltip("visible", "element.hiddenThroughNeverDrawnList") };
|
|
234
|
+
}
|
|
209
235
|
}
|
|
210
|
-
if (categoryId && this.getCategoryDisplayStatus(categoryId, modelId).state === "visible")
|
|
236
|
+
if (categoryId && this.getCategoryDisplayStatus(categoryId, modelId).state === "visible") {
|
|
211
237
|
return { state: "visible", tooltip: createTooltip("visible", undefined) };
|
|
238
|
+
}
|
|
212
239
|
return { state: "hidden", tooltip: createTooltip("hidden", "element.hiddenThroughCategory") };
|
|
213
240
|
}
|
|
214
241
|
getElementDisplayStatus(elementId, modelId, categoryId) {
|
|
215
|
-
if (!modelId || !this._props.viewport.view.viewsModel(modelId))
|
|
242
|
+
if (!modelId || !this._props.viewport.view.viewsModel(modelId)) {
|
|
216
243
|
return { isDisabled: true, state: "hidden", tooltip: createTooltip("disabled", "element.modelNotDisplayed") };
|
|
217
|
-
|
|
244
|
+
}
|
|
245
|
+
if (this._props.viewport.neverDrawn !== undefined && this._props.viewport.neverDrawn.has(elementId)) {
|
|
218
246
|
return { state: "hidden", tooltip: createTooltip("hidden", "element.hiddenThroughNeverDrawnList") };
|
|
247
|
+
}
|
|
219
248
|
if (this._props.viewport.alwaysDrawn !== undefined) {
|
|
220
|
-
if (this._props.viewport.alwaysDrawn.has(elementId))
|
|
249
|
+
if (this._props.viewport.alwaysDrawn.has(elementId)) {
|
|
221
250
|
return { state: "visible", tooltip: createTooltip("visible", "element.displayedThroughAlwaysDrawnList") };
|
|
222
|
-
|
|
251
|
+
}
|
|
252
|
+
if (this._props.viewport.alwaysDrawn.size !== 0 && this._props.viewport.isAlwaysDrawnExclusive) {
|
|
223
253
|
return { state: "hidden", tooltip: createTooltip("hidden", "element.hiddenDueToOtherElementsExclusivelyAlwaysDrawn") };
|
|
254
|
+
}
|
|
224
255
|
}
|
|
225
|
-
if (categoryId && this.getCategoryDisplayStatus(categoryId, modelId).state === "visible")
|
|
256
|
+
if (categoryId && this.getCategoryDisplayStatus(categoryId, modelId).state === "visible") {
|
|
226
257
|
return { state: "visible", tooltip: createTooltip("visible", undefined) };
|
|
258
|
+
}
|
|
227
259
|
return { state: "hidden", tooltip: createTooltip("hidden", "element.hiddenThroughCategory") };
|
|
228
260
|
}
|
|
229
261
|
async changeSubjectNodeState(ids, node, on) {
|
|
230
|
-
if (!this._props.viewport.view.isSpatialView())
|
|
262
|
+
if (!this._props.viewport.view.isSpatialView()) {
|
|
231
263
|
return;
|
|
232
|
-
|
|
264
|
+
}
|
|
265
|
+
if (this._filteredDataProvider) {
|
|
233
266
|
return this.changeFilteredSubjectState(this._filteredDataProvider, ids, node, on);
|
|
267
|
+
}
|
|
234
268
|
return this.changeSubjectState(ids, on);
|
|
235
269
|
}
|
|
236
270
|
async changeFilteredSubjectState(provider, ids, node, on) {
|
|
237
|
-
if (provider.nodeMatchesFilter(node))
|
|
271
|
+
if (provider.nodeMatchesFilter(node)) {
|
|
238
272
|
return this.changeSubjectState(ids, on);
|
|
273
|
+
}
|
|
239
274
|
const children = await provider.getNodes(node);
|
|
240
275
|
return Promise.all(children.map(async (childNode) => this.changeVisibility(childNode, on)));
|
|
241
276
|
}
|
|
@@ -244,21 +279,27 @@ export class ModelsVisibilityHandler {
|
|
|
244
279
|
return this.changeModelsVisibility(modelIds, on);
|
|
245
280
|
}
|
|
246
281
|
async changeModelState(id, on) {
|
|
247
|
-
if (!this._props.viewport.view.isSpatialView())
|
|
282
|
+
if (!this._props.viewport.view.isSpatialView()) {
|
|
248
283
|
return;
|
|
284
|
+
}
|
|
249
285
|
return this.changeModelsVisibility([id], on);
|
|
250
286
|
}
|
|
251
287
|
async changeModelsVisibility(ids, visible) {
|
|
252
|
-
if (visible)
|
|
288
|
+
if (visible) {
|
|
253
289
|
return this._props.viewport.addViewedModels(ids);
|
|
254
|
-
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
255
292
|
this._props.viewport.changeModelDisplay(ids, false);
|
|
293
|
+
}
|
|
256
294
|
}
|
|
257
295
|
changeCategoryState(categoryId, parentModelId, on) {
|
|
258
296
|
if (parentModelId) {
|
|
259
297
|
const isDisplayedInSelector = this._props.viewport.view.viewsCategory(categoryId);
|
|
260
|
-
const ovr =
|
|
261
|
-
|
|
298
|
+
const ovr = on === isDisplayedInSelector
|
|
299
|
+
? PerModelCategoryVisibility.Override.None
|
|
300
|
+
: on
|
|
301
|
+
? PerModelCategoryVisibility.Override.Show
|
|
302
|
+
: PerModelCategoryVisibility.Override.Hide;
|
|
262
303
|
this._props.viewport.perModelCategoryVisibility.setOverride(parentModelId, categoryId, ovr);
|
|
263
304
|
if (ovr === PerModelCategoryVisibility.Override.None && on) {
|
|
264
305
|
// we took off the override which means the category is displayed in selector, but
|
|
@@ -277,36 +318,41 @@ export class ModelsVisibilityHandler {
|
|
|
277
318
|
const childIdsContainer = this.getAssemblyElementIds(id);
|
|
278
319
|
async function* elementIds() {
|
|
279
320
|
yield id;
|
|
280
|
-
for await (const childId of childIdsContainer.getElementIds())
|
|
321
|
+
for await (const childId of childIdsContainer.getElementIds()) {
|
|
281
322
|
yield childId;
|
|
323
|
+
}
|
|
282
324
|
}
|
|
283
325
|
await this.changeElementsState(modelId, categoryId, elementIds(), on);
|
|
284
326
|
}
|
|
285
327
|
async changeElementsState(modelId, categoryId, elementIds, on) {
|
|
286
|
-
const isDisplayedByDefault = modelId &&
|
|
287
|
-
|
|
328
|
+
const isDisplayedByDefault = modelId &&
|
|
329
|
+
this.getModelDisplayStatus(modelId).state === "visible" &&
|
|
330
|
+
categoryId &&
|
|
331
|
+
this.getCategoryDisplayStatus(categoryId, modelId).state === "visible";
|
|
288
332
|
const isHiddenDueToExclusiveAlwaysDrawnElements = this._props.viewport.isAlwaysDrawnExclusive && this._props.viewport.alwaysDrawn && 0 !== this._props.viewport.alwaysDrawn.size;
|
|
289
333
|
const currNeverDrawn = new Set(this._props.viewport.neverDrawn ? this._props.viewport.neverDrawn : []);
|
|
290
|
-
const currAlwaysDrawn = new Set(this._props.viewport.alwaysDrawn ?
|
|
291
|
-
this._props.viewport.alwaysDrawn : /* istanbul ignore next */ []);
|
|
334
|
+
const currAlwaysDrawn = new Set(this._props.viewport.alwaysDrawn ? this._props.viewport.alwaysDrawn : /* istanbul ignore next */ []);
|
|
292
335
|
for await (const elementId of elementIds) {
|
|
293
336
|
if (on) {
|
|
294
337
|
currNeverDrawn.delete(elementId);
|
|
295
|
-
if (!isDisplayedByDefault || isHiddenDueToExclusiveAlwaysDrawnElements)
|
|
338
|
+
if (!isDisplayedByDefault || isHiddenDueToExclusiveAlwaysDrawnElements) {
|
|
296
339
|
currAlwaysDrawn.add(elementId);
|
|
340
|
+
}
|
|
297
341
|
}
|
|
298
342
|
else {
|
|
299
343
|
currAlwaysDrawn.delete(elementId);
|
|
300
|
-
if (isDisplayedByDefault && !isHiddenDueToExclusiveAlwaysDrawnElements)
|
|
344
|
+
if (isDisplayedByDefault && !isHiddenDueToExclusiveAlwaysDrawnElements) {
|
|
301
345
|
currNeverDrawn.add(elementId);
|
|
346
|
+
}
|
|
302
347
|
}
|
|
303
348
|
}
|
|
304
349
|
this._props.viewport.setNeverDrawn(currNeverDrawn);
|
|
305
350
|
this._props.viewport.setAlwaysDrawn(currAlwaysDrawn, this._props.viewport.isAlwaysDrawnExclusive);
|
|
306
351
|
}
|
|
307
352
|
onVisibilityChangeInternal() {
|
|
308
|
-
if (this._pendingVisibilityChange)
|
|
353
|
+
if (this._pendingVisibilityChange) {
|
|
309
354
|
return;
|
|
355
|
+
}
|
|
310
356
|
this._pendingVisibilityChange = setTimeout(() => {
|
|
311
357
|
this.onVisibilityChange.raiseEvent();
|
|
312
358
|
this._pendingVisibilityChange = undefined;
|
|
@@ -322,8 +368,7 @@ export class ModelsVisibilityHandler {
|
|
|
322
368
|
return elementNode.extendedData ? elementNode.extendedData.categoryId : /* istanbul ignore next */ undefined;
|
|
323
369
|
}
|
|
324
370
|
async getSubjectModelIds(subjectIds) {
|
|
325
|
-
return (await Promise.all(subjectIds.map(async (id) => this._subjectModelIdsCache.getSubjectModelIds(id))))
|
|
326
|
-
.reduce((allModelIds, curr) => [...allModelIds, ...curr], []);
|
|
371
|
+
return (await Promise.all(subjectIds.map(async (id) => this._subjectModelIdsCache.getSubjectModelIds(id)))).reduce((allModelIds, curr) => [...allModelIds, ...curr], []);
|
|
327
372
|
}
|
|
328
373
|
// istanbul ignore next
|
|
329
374
|
getAssemblyElementIds(assemblyId) {
|
|
@@ -368,19 +413,22 @@ export class SubjectModelIdsCache {
|
|
|
368
413
|
const targetPartitionSubjects = new Map();
|
|
369
414
|
for (const subject of await querySubjects()) {
|
|
370
415
|
// istanbul ignore else
|
|
371
|
-
if (subject.parentId)
|
|
416
|
+
if (subject.parentId) {
|
|
372
417
|
pushToMap(this._subjectsHierarchy, subject.parentId, subject.id);
|
|
418
|
+
}
|
|
373
419
|
// istanbul ignore if
|
|
374
|
-
if (subject.targetPartitionId)
|
|
420
|
+
if (subject.targetPartitionId) {
|
|
375
421
|
pushToMap(targetPartitionSubjects, subject.targetPartitionId, subject.id);
|
|
422
|
+
}
|
|
376
423
|
}
|
|
377
424
|
this._subjectModels = new Map();
|
|
378
425
|
for (const model of await queryModels()) {
|
|
379
426
|
// istanbul ignore next
|
|
380
427
|
const subjectIds = targetPartitionSubjects.get(model.id) ?? [];
|
|
381
428
|
// istanbul ignore else
|
|
382
|
-
if (!subjectIds.includes(model.parentId))
|
|
429
|
+
if (!subjectIds.includes(model.parentId)) {
|
|
383
430
|
subjectIds.push(model.parentId);
|
|
431
|
+
}
|
|
384
432
|
subjectIds.forEach((subjectId) => {
|
|
385
433
|
pushToMap(this._subjectModels, subjectId, model.id);
|
|
386
434
|
});
|
|
@@ -394,11 +442,13 @@ export class SubjectModelIdsCache {
|
|
|
394
442
|
}
|
|
395
443
|
appendSubjectModelsRecursively(modelIds, subjectId) {
|
|
396
444
|
const subjectModelIds = this._subjectModels.get(subjectId);
|
|
397
|
-
if (subjectModelIds)
|
|
445
|
+
if (subjectModelIds) {
|
|
398
446
|
modelIds.push(...subjectModelIds);
|
|
447
|
+
}
|
|
399
448
|
const childSubjectIds = this._subjectsHierarchy.get(subjectId);
|
|
400
|
-
if (childSubjectIds)
|
|
449
|
+
if (childSubjectIds) {
|
|
401
450
|
childSubjectIds.forEach((cs) => this.appendSubjectModelsRecursively(modelIds, cs));
|
|
451
|
+
}
|
|
402
452
|
}
|
|
403
453
|
async getSubjectModelIds(subjectId) {
|
|
404
454
|
await this.initCache();
|
|
@@ -421,8 +471,9 @@ class ElementIdsCache {
|
|
|
421
471
|
}
|
|
422
472
|
getAssemblyElementIds(assemblyId) {
|
|
423
473
|
const ids = this._assemblyElementIdsCache.get(assemblyId);
|
|
424
|
-
if (ids)
|
|
474
|
+
if (ids) {
|
|
425
475
|
return ids;
|
|
476
|
+
}
|
|
426
477
|
const container = createAssemblyElementIdsContainer(this._imodel, this._rulesetId, assemblyId);
|
|
427
478
|
this._assemblyElementIdsCache.set(assemblyId, container);
|
|
428
479
|
return container;
|
|
@@ -430,8 +481,9 @@ class ElementIdsCache {
|
|
|
430
481
|
async getGroupedElementIds(groupingNodeKey) {
|
|
431
482
|
const keyString = JSON.stringify(groupingNodeKey);
|
|
432
483
|
const ids = this._groupedElementIdsCache.get(keyString);
|
|
433
|
-
if (ids)
|
|
484
|
+
if (ids) {
|
|
434
485
|
return ids;
|
|
486
|
+
}
|
|
435
487
|
const info = await createGroupedElementsInfo(this._imodel, this._rulesetId, groupingNodeKey);
|
|
436
488
|
this._groupedElementIdsCache.set(keyString, info);
|
|
437
489
|
return info;
|
|
@@ -457,8 +509,9 @@ function createAssemblyElementIdsContainer(imodel, rulesetId, assemblyId) {
|
|
|
457
509
|
async function createGroupedElementsInfo(imodel, rulesetId, groupingNodeKey) {
|
|
458
510
|
const groupedElementIdsContainer = new CachingElementIdsContainer(createInstanceIdsGenerator(imodel, rulesetId, "AssemblyElementsRequest", [groupingNodeKey]));
|
|
459
511
|
const elementId = await groupedElementIdsContainer.getElementIds().next();
|
|
460
|
-
if (elementId.done)
|
|
512
|
+
if (elementId.done) {
|
|
461
513
|
throw new Error("Invalid grouping node key");
|
|
514
|
+
}
|
|
462
515
|
let modelId, categoryId;
|
|
463
516
|
const query = `SELECT Model.Id AS modelId, Category.Id AS categoryId FROM bis.GeometricElement3d WHERE ECInstanceId = ? LIMIT 1`;
|
|
464
517
|
const reader = imodel.createQueryReader(query, QueryBinder.from([elementId.value]), { rowFormat: QueryRowFormat.UseJsPropertyNames });
|
|
@@ -471,8 +524,9 @@ async function createGroupedElementsInfo(imodel, rulesetId, groupingNodeKey) {
|
|
|
471
524
|
const createTooltip = (status, tooltipStringId) => {
|
|
472
525
|
const statusStringId = `modelTree.status.${status}`;
|
|
473
526
|
const statusString = TreeWidget.translate(statusStringId);
|
|
474
|
-
if (!tooltipStringId)
|
|
527
|
+
if (!tooltipStringId) {
|
|
475
528
|
return statusString;
|
|
529
|
+
}
|
|
476
530
|
tooltipStringId = `modelTree.tooltips.${tooltipStringId}`;
|
|
477
531
|
const tooltipString = TreeWidget.translate(tooltipStringId);
|
|
478
532
|
return `${statusString}: ${tooltipString}`;
|
|
@@ -503,10 +557,12 @@ export async function invertAllModels(models, viewport) {
|
|
|
503
557
|
const notViewedModels = [];
|
|
504
558
|
const viewedModels = [];
|
|
505
559
|
models.forEach((modelId) => {
|
|
506
|
-
if (viewport.viewsModel(modelId))
|
|
560
|
+
if (viewport.viewsModel(modelId)) {
|
|
507
561
|
viewedModels.push(modelId);
|
|
508
|
-
|
|
562
|
+
}
|
|
563
|
+
else {
|
|
509
564
|
notViewedModels.push(modelId);
|
|
565
|
+
}
|
|
510
566
|
});
|
|
511
567
|
await viewport.addViewedModels(notViewedModels);
|
|
512
568
|
viewport.changeModelDisplay(viewedModels, false);
|
|
@@ -517,12 +573,15 @@ export async function invertAllModels(models, viewport) {
|
|
|
517
573
|
*/
|
|
518
574
|
export async function toggleModels(models, enable, viewport) {
|
|
519
575
|
// istanbul ignore if
|
|
520
|
-
if (!models)
|
|
576
|
+
if (!models) {
|
|
521
577
|
return;
|
|
522
|
-
|
|
578
|
+
}
|
|
579
|
+
if (enable) {
|
|
523
580
|
viewport.changeModelDisplay(models, false);
|
|
524
|
-
|
|
581
|
+
}
|
|
582
|
+
else {
|
|
525
583
|
await viewport.addViewedModels(models);
|
|
584
|
+
}
|
|
526
585
|
}
|
|
527
586
|
/**
|
|
528
587
|
* Checks if all given models are displayed in given viewport.
|