@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,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
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
|
-
*--------------------------------------------------------------------------------------------*/
|
|
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
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.areAllModelsVisible = exports.toggleModels = exports.invertAllModels = exports.hideAllModels = exports.showAllModels = exports.SubjectModelIdsCache = exports.ModelsVisibilityHandler = exports.ModelsTreeNodeType = void 0;
|
|
8
8
|
const core_bentley_1 = require("@itwin/core-bentley");
|
|
@@ -64,20 +64,28 @@ class ModelsVisibilityHandler {
|
|
|
64
64
|
clearTimeout(this._pendingVisibilityChange);
|
|
65
65
|
}
|
|
66
66
|
/** Sets data provider that is used to get filtered tree hierarchy. */
|
|
67
|
-
setFilteredDataProvider(provider) {
|
|
67
|
+
setFilteredDataProvider(provider) {
|
|
68
|
+
this._filteredDataProvider = provider;
|
|
69
|
+
}
|
|
68
70
|
static getNodeType(item) {
|
|
69
|
-
if (!(0, presentation_components_1.isPresentationTreeNodeItem)(item))
|
|
71
|
+
if (!(0, presentation_components_1.isPresentationTreeNodeItem)(item)) {
|
|
70
72
|
return ModelsTreeNodeType.Unknown;
|
|
71
|
-
|
|
73
|
+
}
|
|
74
|
+
if (presentation_common_1.NodeKey.isClassGroupingNodeKey(item.key)) {
|
|
72
75
|
return ModelsTreeNodeType.Grouping;
|
|
73
|
-
|
|
76
|
+
}
|
|
77
|
+
if (!item.extendedData) {
|
|
74
78
|
return ModelsTreeNodeType.Unknown;
|
|
75
|
-
|
|
79
|
+
}
|
|
80
|
+
if (this.isSubjectNode(item)) {
|
|
76
81
|
return ModelsTreeNodeType.Subject;
|
|
77
|
-
|
|
82
|
+
}
|
|
83
|
+
if (this.isModelNode(item)) {
|
|
78
84
|
return ModelsTreeNodeType.Model;
|
|
79
|
-
|
|
85
|
+
}
|
|
86
|
+
if (this.isCategoryNode(item)) {
|
|
80
87
|
return ModelsTreeNodeType.Category;
|
|
88
|
+
}
|
|
81
89
|
return ModelsTreeNodeType.Element;
|
|
82
90
|
}
|
|
83
91
|
static isSubjectNode(node) {
|
|
@@ -92,33 +100,40 @@ class ModelsVisibilityHandler {
|
|
|
92
100
|
/** Returns visibility status of the tree node. */
|
|
93
101
|
getVisibilityStatus(node) {
|
|
94
102
|
const nodeKey = (0, presentation_components_1.isPresentationTreeNodeItem)(node) ? node.key : undefined;
|
|
95
|
-
if (!nodeKey)
|
|
103
|
+
if (!nodeKey) {
|
|
96
104
|
return { state: "hidden", isDisabled: true };
|
|
97
|
-
|
|
105
|
+
}
|
|
106
|
+
if (presentation_common_1.NodeKey.isClassGroupingNodeKey(nodeKey)) {
|
|
98
107
|
return this.getElementGroupingNodeDisplayStatus(node.id, nodeKey);
|
|
99
|
-
|
|
108
|
+
}
|
|
109
|
+
if (!presentation_common_1.NodeKey.isInstancesNodeKey(nodeKey)) {
|
|
100
110
|
return { state: "hidden", isDisabled: true };
|
|
111
|
+
}
|
|
101
112
|
if (ModelsVisibilityHandler.isSubjectNode(node)) {
|
|
102
113
|
// note: subject nodes may be merged to represent multiple subject instances
|
|
103
114
|
return this.getSubjectNodeVisibility(nodeKey.instanceKeys.map((key) => key.id), node);
|
|
104
115
|
}
|
|
105
|
-
if (ModelsVisibilityHandler.isModelNode(node))
|
|
116
|
+
if (ModelsVisibilityHandler.isModelNode(node)) {
|
|
106
117
|
return this.getModelDisplayStatus(nodeKey.instanceKeys[0].id);
|
|
107
|
-
|
|
118
|
+
}
|
|
119
|
+
if (ModelsVisibilityHandler.isCategoryNode(node)) {
|
|
108
120
|
return this.getCategoryDisplayStatus(nodeKey.instanceKeys[0].id, this.getCategoryParentModelId(node));
|
|
121
|
+
}
|
|
109
122
|
return this.getElementDisplayStatus(nodeKey.instanceKeys[0].id, this.getElementModelId(node), this.getElementCategoryId(node));
|
|
110
123
|
}
|
|
111
124
|
/** Changes visibility of the items represented by the tree node. */
|
|
112
125
|
async changeVisibility(node, on) {
|
|
113
126
|
const nodeKey = (0, presentation_components_1.isPresentationTreeNodeItem)(node) ? node.key : undefined;
|
|
114
|
-
if (!nodeKey)
|
|
127
|
+
if (!nodeKey) {
|
|
115
128
|
return;
|
|
129
|
+
}
|
|
116
130
|
if (presentation_common_1.NodeKey.isClassGroupingNodeKey(nodeKey)) {
|
|
117
131
|
await this.changeElementGroupingNodeState(nodeKey, on);
|
|
118
132
|
return;
|
|
119
133
|
}
|
|
120
|
-
if (!presentation_common_1.NodeKey.isInstancesNodeKey(nodeKey))
|
|
134
|
+
if (!presentation_common_1.NodeKey.isInstancesNodeKey(nodeKey)) {
|
|
121
135
|
return;
|
|
136
|
+
}
|
|
122
137
|
if (ModelsVisibilityHandler.isSubjectNode(node)) {
|
|
123
138
|
await this.changeSubjectNodeState(nodeKey.instanceKeys.map((key) => key.id), node, on);
|
|
124
139
|
}
|
|
@@ -133,38 +148,45 @@ class ModelsVisibilityHandler {
|
|
|
133
148
|
}
|
|
134
149
|
}
|
|
135
150
|
async getSubjectNodeVisibility(ids, node) {
|
|
136
|
-
if (!this._props.viewport.view.isSpatialView())
|
|
151
|
+
if (!this._props.viewport.view.isSpatialView()) {
|
|
137
152
|
return { isDisabled: true, state: "hidden", tooltip: createTooltip("disabled", "subject.nonSpatialView") };
|
|
138
|
-
|
|
153
|
+
}
|
|
154
|
+
if (this._filteredDataProvider) {
|
|
139
155
|
return this.getFilteredSubjectDisplayStatus(this._filteredDataProvider, ids, node);
|
|
156
|
+
}
|
|
140
157
|
return this.getSubjectDisplayStatus(ids);
|
|
141
158
|
}
|
|
142
159
|
async getSubjectDisplayStatus(ids) {
|
|
143
160
|
const modelIds = await this.getSubjectModelIds(ids);
|
|
144
161
|
const isDisplayed = modelIds.some((modelId) => this.getModelDisplayStatus(modelId).state === "visible");
|
|
145
|
-
if (isDisplayed)
|
|
162
|
+
if (isDisplayed) {
|
|
146
163
|
return { state: "visible", tooltip: createTooltip("visible", "subject.atLeastOneModelVisible") };
|
|
164
|
+
}
|
|
147
165
|
return { state: "hidden", tooltip: createTooltip("hidden", "subject.allModelsHidden") };
|
|
148
166
|
}
|
|
149
167
|
async getFilteredSubjectDisplayStatus(provider, ids, node) {
|
|
150
|
-
if (provider.nodeMatchesFilter(node))
|
|
168
|
+
if (provider.nodeMatchesFilter(node)) {
|
|
151
169
|
return this.getSubjectDisplayStatus(ids);
|
|
170
|
+
}
|
|
152
171
|
const children = await provider.getNodes(node);
|
|
153
172
|
const childrenDisplayStatuses = await Promise.all(children.map(async (childNode) => this.getVisibilityStatus(childNode)));
|
|
154
|
-
if (childrenDisplayStatuses.some((status) => status.state === "visible"))
|
|
173
|
+
if (childrenDisplayStatuses.some((status) => status.state === "visible")) {
|
|
155
174
|
return { state: "visible", tooltip: createTooltip("visible", "subject.atLeastOneModelVisible") };
|
|
175
|
+
}
|
|
156
176
|
return { state: "hidden", tooltip: createTooltip("hidden", "subject.allModelsHidden") };
|
|
157
177
|
}
|
|
158
178
|
getModelDisplayStatus(id) {
|
|
159
|
-
if (!this._props.viewport.view.isSpatialView())
|
|
179
|
+
if (!this._props.viewport.view.isSpatialView()) {
|
|
160
180
|
return { isDisabled: true, state: "hidden", tooltip: createTooltip("disabled", "model.nonSpatialView") };
|
|
181
|
+
}
|
|
161
182
|
const isDisplayed = this._props.viewport.view.viewsModel(id);
|
|
162
183
|
return { state: isDisplayed ? "visible" : "hidden", tooltip: createTooltip(isDisplayed ? "visible" : "hidden", undefined) };
|
|
163
184
|
}
|
|
164
185
|
getCategoryDisplayStatus(id, parentModelId) {
|
|
165
186
|
if (parentModelId) {
|
|
166
|
-
if (this.getModelDisplayStatus(parentModelId).state === "hidden")
|
|
187
|
+
if (this.getModelDisplayStatus(parentModelId).state === "hidden") {
|
|
167
188
|
return { state: "hidden", isDisabled: true, tooltip: createTooltip("disabled", "category.modelNotDisplayed") };
|
|
189
|
+
}
|
|
168
190
|
const override = this._props.viewport.perModelCategoryVisibility.getOverride(parentModelId, id);
|
|
169
191
|
switch (override) {
|
|
170
192
|
case core_frontend_1.PerModelCategoryVisibility.Override.Show:
|
|
@@ -183,8 +205,9 @@ class ModelsVisibilityHandler {
|
|
|
183
205
|
}
|
|
184
206
|
async getElementGroupingNodeDisplayStatus(_id, key) {
|
|
185
207
|
const { modelId, categoryId, elementIds } = await this.getGroupedElementIds(key);
|
|
186
|
-
if (!modelId || !this._props.viewport.view.viewsModel(modelId))
|
|
208
|
+
if (!modelId || !this._props.viewport.view.viewsModel(modelId)) {
|
|
187
209
|
return { isDisabled: true, state: "hidden", tooltip: createTooltip("disabled", "element.modelNotDisplayed") };
|
|
210
|
+
}
|
|
188
211
|
if (this._props.viewport.alwaysDrawn !== undefined && this._props.viewport.alwaysDrawn.size > 0) {
|
|
189
212
|
let atLeastOneElementForceDisplayed = false;
|
|
190
213
|
for await (const elementId of elementIds.getElementIds()) {
|
|
@@ -193,11 +216,13 @@ class ModelsVisibilityHandler {
|
|
|
193
216
|
break;
|
|
194
217
|
}
|
|
195
218
|
}
|
|
196
|
-
if (atLeastOneElementForceDisplayed)
|
|
219
|
+
if (atLeastOneElementForceDisplayed) {
|
|
197
220
|
return { state: "visible", tooltip: createTooltip("visible", "element.displayedThroughAlwaysDrawnList") };
|
|
221
|
+
}
|
|
198
222
|
}
|
|
199
|
-
if (this._props.viewport.alwaysDrawn !== undefined && this._props.viewport.alwaysDrawn.size !== 0 && this._props.viewport.isAlwaysDrawnExclusive)
|
|
223
|
+
if (this._props.viewport.alwaysDrawn !== undefined && this._props.viewport.alwaysDrawn.size !== 0 && this._props.viewport.isAlwaysDrawnExclusive) {
|
|
200
224
|
return { state: "hidden", tooltip: createTooltip("hidden", "element.hiddenDueToOtherElementsExclusivelyAlwaysDrawn") };
|
|
225
|
+
}
|
|
201
226
|
// istanbul ignore else
|
|
202
227
|
if (this._props.viewport.neverDrawn !== undefined && this._props.viewport.neverDrawn.size > 0) {
|
|
203
228
|
let allElementsForceHidden = true;
|
|
@@ -207,38 +232,48 @@ class ModelsVisibilityHandler {
|
|
|
207
232
|
break;
|
|
208
233
|
}
|
|
209
234
|
}
|
|
210
|
-
if (allElementsForceHidden)
|
|
235
|
+
if (allElementsForceHidden) {
|
|
211
236
|
return { state: "hidden", tooltip: createTooltip("visible", "element.hiddenThroughNeverDrawnList") };
|
|
237
|
+
}
|
|
212
238
|
}
|
|
213
|
-
if (categoryId && this.getCategoryDisplayStatus(categoryId, modelId).state === "visible")
|
|
239
|
+
if (categoryId && this.getCategoryDisplayStatus(categoryId, modelId).state === "visible") {
|
|
214
240
|
return { state: "visible", tooltip: createTooltip("visible", undefined) };
|
|
241
|
+
}
|
|
215
242
|
return { state: "hidden", tooltip: createTooltip("hidden", "element.hiddenThroughCategory") };
|
|
216
243
|
}
|
|
217
244
|
getElementDisplayStatus(elementId, modelId, categoryId) {
|
|
218
|
-
if (!modelId || !this._props.viewport.view.viewsModel(modelId))
|
|
245
|
+
if (!modelId || !this._props.viewport.view.viewsModel(modelId)) {
|
|
219
246
|
return { isDisabled: true, state: "hidden", tooltip: createTooltip("disabled", "element.modelNotDisplayed") };
|
|
220
|
-
|
|
247
|
+
}
|
|
248
|
+
if (this._props.viewport.neverDrawn !== undefined && this._props.viewport.neverDrawn.has(elementId)) {
|
|
221
249
|
return { state: "hidden", tooltip: createTooltip("hidden", "element.hiddenThroughNeverDrawnList") };
|
|
250
|
+
}
|
|
222
251
|
if (this._props.viewport.alwaysDrawn !== undefined) {
|
|
223
|
-
if (this._props.viewport.alwaysDrawn.has(elementId))
|
|
252
|
+
if (this._props.viewport.alwaysDrawn.has(elementId)) {
|
|
224
253
|
return { state: "visible", tooltip: createTooltip("visible", "element.displayedThroughAlwaysDrawnList") };
|
|
225
|
-
|
|
254
|
+
}
|
|
255
|
+
if (this._props.viewport.alwaysDrawn.size !== 0 && this._props.viewport.isAlwaysDrawnExclusive) {
|
|
226
256
|
return { state: "hidden", tooltip: createTooltip("hidden", "element.hiddenDueToOtherElementsExclusivelyAlwaysDrawn") };
|
|
257
|
+
}
|
|
227
258
|
}
|
|
228
|
-
if (categoryId && this.getCategoryDisplayStatus(categoryId, modelId).state === "visible")
|
|
259
|
+
if (categoryId && this.getCategoryDisplayStatus(categoryId, modelId).state === "visible") {
|
|
229
260
|
return { state: "visible", tooltip: createTooltip("visible", undefined) };
|
|
261
|
+
}
|
|
230
262
|
return { state: "hidden", tooltip: createTooltip("hidden", "element.hiddenThroughCategory") };
|
|
231
263
|
}
|
|
232
264
|
async changeSubjectNodeState(ids, node, on) {
|
|
233
|
-
if (!this._props.viewport.view.isSpatialView())
|
|
265
|
+
if (!this._props.viewport.view.isSpatialView()) {
|
|
234
266
|
return;
|
|
235
|
-
|
|
267
|
+
}
|
|
268
|
+
if (this._filteredDataProvider) {
|
|
236
269
|
return this.changeFilteredSubjectState(this._filteredDataProvider, ids, node, on);
|
|
270
|
+
}
|
|
237
271
|
return this.changeSubjectState(ids, on);
|
|
238
272
|
}
|
|
239
273
|
async changeFilteredSubjectState(provider, ids, node, on) {
|
|
240
|
-
if (provider.nodeMatchesFilter(node))
|
|
274
|
+
if (provider.nodeMatchesFilter(node)) {
|
|
241
275
|
return this.changeSubjectState(ids, on);
|
|
276
|
+
}
|
|
242
277
|
const children = await provider.getNodes(node);
|
|
243
278
|
return Promise.all(children.map(async (childNode) => this.changeVisibility(childNode, on)));
|
|
244
279
|
}
|
|
@@ -247,21 +282,27 @@ class ModelsVisibilityHandler {
|
|
|
247
282
|
return this.changeModelsVisibility(modelIds, on);
|
|
248
283
|
}
|
|
249
284
|
async changeModelState(id, on) {
|
|
250
|
-
if (!this._props.viewport.view.isSpatialView())
|
|
285
|
+
if (!this._props.viewport.view.isSpatialView()) {
|
|
251
286
|
return;
|
|
287
|
+
}
|
|
252
288
|
return this.changeModelsVisibility([id], on);
|
|
253
289
|
}
|
|
254
290
|
async changeModelsVisibility(ids, visible) {
|
|
255
|
-
if (visible)
|
|
291
|
+
if (visible) {
|
|
256
292
|
return this._props.viewport.addViewedModels(ids);
|
|
257
|
-
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
258
295
|
this._props.viewport.changeModelDisplay(ids, false);
|
|
296
|
+
}
|
|
259
297
|
}
|
|
260
298
|
changeCategoryState(categoryId, parentModelId, on) {
|
|
261
299
|
if (parentModelId) {
|
|
262
300
|
const isDisplayedInSelector = this._props.viewport.view.viewsCategory(categoryId);
|
|
263
|
-
const ovr =
|
|
264
|
-
|
|
301
|
+
const ovr = on === isDisplayedInSelector
|
|
302
|
+
? core_frontend_1.PerModelCategoryVisibility.Override.None
|
|
303
|
+
: on
|
|
304
|
+
? core_frontend_1.PerModelCategoryVisibility.Override.Show
|
|
305
|
+
: core_frontend_1.PerModelCategoryVisibility.Override.Hide;
|
|
265
306
|
this._props.viewport.perModelCategoryVisibility.setOverride(parentModelId, categoryId, ovr);
|
|
266
307
|
if (ovr === core_frontend_1.PerModelCategoryVisibility.Override.None && on) {
|
|
267
308
|
// we took off the override which means the category is displayed in selector, but
|
|
@@ -280,36 +321,41 @@ class ModelsVisibilityHandler {
|
|
|
280
321
|
const childIdsContainer = this.getAssemblyElementIds(id);
|
|
281
322
|
async function* elementIds() {
|
|
282
323
|
yield id;
|
|
283
|
-
for await (const childId of childIdsContainer.getElementIds())
|
|
324
|
+
for await (const childId of childIdsContainer.getElementIds()) {
|
|
284
325
|
yield childId;
|
|
326
|
+
}
|
|
285
327
|
}
|
|
286
328
|
await this.changeElementsState(modelId, categoryId, elementIds(), on);
|
|
287
329
|
}
|
|
288
330
|
async changeElementsState(modelId, categoryId, elementIds, on) {
|
|
289
|
-
const isDisplayedByDefault = modelId &&
|
|
290
|
-
|
|
331
|
+
const isDisplayedByDefault = modelId &&
|
|
332
|
+
this.getModelDisplayStatus(modelId).state === "visible" &&
|
|
333
|
+
categoryId &&
|
|
334
|
+
this.getCategoryDisplayStatus(categoryId, modelId).state === "visible";
|
|
291
335
|
const isHiddenDueToExclusiveAlwaysDrawnElements = this._props.viewport.isAlwaysDrawnExclusive && this._props.viewport.alwaysDrawn && 0 !== this._props.viewport.alwaysDrawn.size;
|
|
292
336
|
const currNeverDrawn = new Set(this._props.viewport.neverDrawn ? this._props.viewport.neverDrawn : []);
|
|
293
|
-
const currAlwaysDrawn = new Set(this._props.viewport.alwaysDrawn ?
|
|
294
|
-
this._props.viewport.alwaysDrawn : /* istanbul ignore next */ []);
|
|
337
|
+
const currAlwaysDrawn = new Set(this._props.viewport.alwaysDrawn ? this._props.viewport.alwaysDrawn : /* istanbul ignore next */ []);
|
|
295
338
|
for await (const elementId of elementIds) {
|
|
296
339
|
if (on) {
|
|
297
340
|
currNeverDrawn.delete(elementId);
|
|
298
|
-
if (!isDisplayedByDefault || isHiddenDueToExclusiveAlwaysDrawnElements)
|
|
341
|
+
if (!isDisplayedByDefault || isHiddenDueToExclusiveAlwaysDrawnElements) {
|
|
299
342
|
currAlwaysDrawn.add(elementId);
|
|
343
|
+
}
|
|
300
344
|
}
|
|
301
345
|
else {
|
|
302
346
|
currAlwaysDrawn.delete(elementId);
|
|
303
|
-
if (isDisplayedByDefault && !isHiddenDueToExclusiveAlwaysDrawnElements)
|
|
347
|
+
if (isDisplayedByDefault && !isHiddenDueToExclusiveAlwaysDrawnElements) {
|
|
304
348
|
currNeverDrawn.add(elementId);
|
|
349
|
+
}
|
|
305
350
|
}
|
|
306
351
|
}
|
|
307
352
|
this._props.viewport.setNeverDrawn(currNeverDrawn);
|
|
308
353
|
this._props.viewport.setAlwaysDrawn(currAlwaysDrawn, this._props.viewport.isAlwaysDrawnExclusive);
|
|
309
354
|
}
|
|
310
355
|
onVisibilityChangeInternal() {
|
|
311
|
-
if (this._pendingVisibilityChange)
|
|
356
|
+
if (this._pendingVisibilityChange) {
|
|
312
357
|
return;
|
|
358
|
+
}
|
|
313
359
|
this._pendingVisibilityChange = setTimeout(() => {
|
|
314
360
|
this.onVisibilityChange.raiseEvent();
|
|
315
361
|
this._pendingVisibilityChange = undefined;
|
|
@@ -325,8 +371,7 @@ class ModelsVisibilityHandler {
|
|
|
325
371
|
return elementNode.extendedData ? elementNode.extendedData.categoryId : /* istanbul ignore next */ undefined;
|
|
326
372
|
}
|
|
327
373
|
async getSubjectModelIds(subjectIds) {
|
|
328
|
-
return (await Promise.all(subjectIds.map(async (id) => this._subjectModelIdsCache.getSubjectModelIds(id))))
|
|
329
|
-
.reduce((allModelIds, curr) => [...allModelIds, ...curr], []);
|
|
374
|
+
return (await Promise.all(subjectIds.map(async (id) => this._subjectModelIdsCache.getSubjectModelIds(id)))).reduce((allModelIds, curr) => [...allModelIds, ...curr], []);
|
|
330
375
|
}
|
|
331
376
|
// istanbul ignore next
|
|
332
377
|
getAssemblyElementIds(assemblyId) {
|
|
@@ -372,19 +417,22 @@ class SubjectModelIdsCache {
|
|
|
372
417
|
const targetPartitionSubjects = new Map();
|
|
373
418
|
for (const subject of await querySubjects()) {
|
|
374
419
|
// istanbul ignore else
|
|
375
|
-
if (subject.parentId)
|
|
420
|
+
if (subject.parentId) {
|
|
376
421
|
pushToMap(this._subjectsHierarchy, subject.parentId, subject.id);
|
|
422
|
+
}
|
|
377
423
|
// istanbul ignore if
|
|
378
|
-
if (subject.targetPartitionId)
|
|
424
|
+
if (subject.targetPartitionId) {
|
|
379
425
|
pushToMap(targetPartitionSubjects, subject.targetPartitionId, subject.id);
|
|
426
|
+
}
|
|
380
427
|
}
|
|
381
428
|
this._subjectModels = new Map();
|
|
382
429
|
for (const model of await queryModels()) {
|
|
383
430
|
// istanbul ignore next
|
|
384
431
|
const subjectIds = targetPartitionSubjects.get(model.id) ?? [];
|
|
385
432
|
// istanbul ignore else
|
|
386
|
-
if (!subjectIds.includes(model.parentId))
|
|
433
|
+
if (!subjectIds.includes(model.parentId)) {
|
|
387
434
|
subjectIds.push(model.parentId);
|
|
435
|
+
}
|
|
388
436
|
subjectIds.forEach((subjectId) => {
|
|
389
437
|
pushToMap(this._subjectModels, subjectId, model.id);
|
|
390
438
|
});
|
|
@@ -398,11 +446,13 @@ class SubjectModelIdsCache {
|
|
|
398
446
|
}
|
|
399
447
|
appendSubjectModelsRecursively(modelIds, subjectId) {
|
|
400
448
|
const subjectModelIds = this._subjectModels.get(subjectId);
|
|
401
|
-
if (subjectModelIds)
|
|
449
|
+
if (subjectModelIds) {
|
|
402
450
|
modelIds.push(...subjectModelIds);
|
|
451
|
+
}
|
|
403
452
|
const childSubjectIds = this._subjectsHierarchy.get(subjectId);
|
|
404
|
-
if (childSubjectIds)
|
|
453
|
+
if (childSubjectIds) {
|
|
405
454
|
childSubjectIds.forEach((cs) => this.appendSubjectModelsRecursively(modelIds, cs));
|
|
455
|
+
}
|
|
406
456
|
}
|
|
407
457
|
async getSubjectModelIds(subjectId) {
|
|
408
458
|
await this.initCache();
|
|
@@ -426,8 +476,9 @@ class ElementIdsCache {
|
|
|
426
476
|
}
|
|
427
477
|
getAssemblyElementIds(assemblyId) {
|
|
428
478
|
const ids = this._assemblyElementIdsCache.get(assemblyId);
|
|
429
|
-
if (ids)
|
|
479
|
+
if (ids) {
|
|
430
480
|
return ids;
|
|
481
|
+
}
|
|
431
482
|
const container = createAssemblyElementIdsContainer(this._imodel, this._rulesetId, assemblyId);
|
|
432
483
|
this._assemblyElementIdsCache.set(assemblyId, container);
|
|
433
484
|
return container;
|
|
@@ -435,8 +486,9 @@ class ElementIdsCache {
|
|
|
435
486
|
async getGroupedElementIds(groupingNodeKey) {
|
|
436
487
|
const keyString = JSON.stringify(groupingNodeKey);
|
|
437
488
|
const ids = this._groupedElementIdsCache.get(keyString);
|
|
438
|
-
if (ids)
|
|
489
|
+
if (ids) {
|
|
439
490
|
return ids;
|
|
491
|
+
}
|
|
440
492
|
const info = await createGroupedElementsInfo(this._imodel, this._rulesetId, groupingNodeKey);
|
|
441
493
|
this._groupedElementIdsCache.set(keyString, info);
|
|
442
494
|
return info;
|
|
@@ -462,8 +514,9 @@ function createAssemblyElementIdsContainer(imodel, rulesetId, assemblyId) {
|
|
|
462
514
|
async function createGroupedElementsInfo(imodel, rulesetId, groupingNodeKey) {
|
|
463
515
|
const groupedElementIdsContainer = new Utils_1.CachingElementIdsContainer(createInstanceIdsGenerator(imodel, rulesetId, "AssemblyElementsRequest", [groupingNodeKey]));
|
|
464
516
|
const elementId = await groupedElementIdsContainer.getElementIds().next();
|
|
465
|
-
if (elementId.done)
|
|
517
|
+
if (elementId.done) {
|
|
466
518
|
throw new Error("Invalid grouping node key");
|
|
519
|
+
}
|
|
467
520
|
let modelId, categoryId;
|
|
468
521
|
const query = `SELECT Model.Id AS modelId, Category.Id AS categoryId FROM bis.GeometricElement3d WHERE ECInstanceId = ? LIMIT 1`;
|
|
469
522
|
const reader = imodel.createQueryReader(query, core_common_1.QueryBinder.from([elementId.value]), { rowFormat: core_common_1.QueryRowFormat.UseJsPropertyNames });
|
|
@@ -476,8 +529,9 @@ async function createGroupedElementsInfo(imodel, rulesetId, groupingNodeKey) {
|
|
|
476
529
|
const createTooltip = (status, tooltipStringId) => {
|
|
477
530
|
const statusStringId = `modelTree.status.${status}`;
|
|
478
531
|
const statusString = TreeWidget_1.TreeWidget.translate(statusStringId);
|
|
479
|
-
if (!tooltipStringId)
|
|
532
|
+
if (!tooltipStringId) {
|
|
480
533
|
return statusString;
|
|
534
|
+
}
|
|
481
535
|
tooltipStringId = `modelTree.tooltips.${tooltipStringId}`;
|
|
482
536
|
const tooltipString = TreeWidget_1.TreeWidget.translate(tooltipStringId);
|
|
483
537
|
return `${statusString}: ${tooltipString}`;
|
|
@@ -510,10 +564,12 @@ async function invertAllModels(models, viewport) {
|
|
|
510
564
|
const notViewedModels = [];
|
|
511
565
|
const viewedModels = [];
|
|
512
566
|
models.forEach((modelId) => {
|
|
513
|
-
if (viewport.viewsModel(modelId))
|
|
567
|
+
if (viewport.viewsModel(modelId)) {
|
|
514
568
|
viewedModels.push(modelId);
|
|
515
|
-
|
|
569
|
+
}
|
|
570
|
+
else {
|
|
516
571
|
notViewedModels.push(modelId);
|
|
572
|
+
}
|
|
517
573
|
});
|
|
518
574
|
await viewport.addViewedModels(notViewedModels);
|
|
519
575
|
viewport.changeModelDisplay(viewedModels, false);
|
|
@@ -525,12 +581,15 @@ exports.invertAllModels = invertAllModels;
|
|
|
525
581
|
*/
|
|
526
582
|
async function toggleModels(models, enable, viewport) {
|
|
527
583
|
// istanbul ignore if
|
|
528
|
-
if (!models)
|
|
584
|
+
if (!models) {
|
|
529
585
|
return;
|
|
530
|
-
|
|
586
|
+
}
|
|
587
|
+
if (enable) {
|
|
531
588
|
viewport.changeModelDisplay(models, false);
|
|
532
|
-
|
|
589
|
+
}
|
|
590
|
+
else {
|
|
533
591
|
await viewport.addViewedModels(models);
|
|
592
|
+
}
|
|
534
593
|
}
|
|
535
594
|
exports.toggleModels = toggleModels;
|
|
536
595
|
/**
|