@itwin/tree-widget-react 1.2.1 → 2.0.0-dev.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.
Files changed (173) hide show
  1. package/CHANGELOG.md +11 -2
  2. package/README.md +1 -1
  3. package/lib/cjs/TreeWidget.d.ts +0 -1
  4. package/lib/cjs/TreeWidget.js +9 -10
  5. package/lib/cjs/TreeWidget.js.map +1 -1
  6. package/lib/cjs/components/SelectableTree.js +24 -13
  7. package/lib/cjs/components/SelectableTree.js.map +1 -1
  8. package/lib/cjs/components/TreeFilteringState.js +3 -3
  9. package/lib/cjs/components/TreeFilteringState.js.map +1 -1
  10. package/lib/cjs/components/TreeWidgetUiItemsProvider.js +7 -5
  11. package/lib/cjs/components/TreeWidgetUiItemsProvider.js.map +1 -1
  12. package/lib/cjs/components/TreeWidgetUiItemsProvider.scss +1 -1
  13. package/lib/cjs/components/tree-header/TreeHeader.js +15 -12
  14. package/lib/cjs/components/tree-header/TreeHeader.js.map +1 -1
  15. package/lib/cjs/components/tree-header/TreeHeader.scss +1 -1
  16. package/lib/cjs/components/trees/CategoriesVisibilityUtils.js +13 -8
  17. package/lib/cjs/components/trees/CategoriesVisibilityUtils.js.map +1 -1
  18. package/lib/cjs/components/trees/VisibilityTreeBase.scss +1 -1
  19. package/lib/cjs/components/trees/VisibilityTreeEventHandler.d.ts +1 -1
  20. package/lib/cjs/components/trees/VisibilityTreeEventHandler.js +25 -28
  21. package/lib/cjs/components/trees/VisibilityTreeEventHandler.js.map +1 -1
  22. package/lib/cjs/components/trees/VisibilityTreeRenderer.d.ts +20 -4
  23. package/lib/cjs/components/trees/VisibilityTreeRenderer.js +28 -10
  24. package/lib/cjs/components/trees/VisibilityTreeRenderer.js.map +1 -1
  25. package/lib/cjs/components/trees/category-tree/CategoriesTree.d.ts +7 -2
  26. package/lib/cjs/components/trees/category-tree/CategoriesTree.js +47 -30
  27. package/lib/cjs/components/trees/category-tree/CategoriesTree.js.map +1 -1
  28. package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.js +14 -10
  29. package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.js.map +1 -1
  30. package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.js +18 -13
  31. package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.js.map +1 -1
  32. package/lib/cjs/components/trees/common/ContextMenu.js +4 -4
  33. package/lib/cjs/components/trees/common/ContextMenu.js.map +1 -1
  34. package/lib/cjs/components/trees/common/TreeNodeRenderer.d.ts +1 -1
  35. package/lib/cjs/components/trees/common/TreeNodeRenderer.js +4 -4
  36. package/lib/cjs/components/trees/common/TreeNodeRenderer.js.map +1 -1
  37. package/lib/cjs/components/trees/common/TreeRenderer.d.ts +15 -1
  38. package/lib/cjs/components/trees/common/TreeRenderer.js +17 -7
  39. package/lib/cjs/components/trees/common/TreeRenderer.js.map +1 -1
  40. package/lib/cjs/components/trees/common/TreeRenderer.scss +7 -2
  41. package/lib/cjs/components/trees/common/Types.d.ts +8 -0
  42. package/lib/cjs/components/trees/common/Types.js +3 -3
  43. package/lib/cjs/components/trees/common/Types.js.map +1 -1
  44. package/lib/cjs/components/trees/common/UseVisibilityTreeState.d.ts +36 -0
  45. package/lib/cjs/components/trees/common/UseVisibilityTreeState.js +47 -0
  46. package/lib/cjs/components/trees/common/UseVisibilityTreeState.js.map +1 -0
  47. package/lib/cjs/components/trees/common/Utils.js +7 -5
  48. package/lib/cjs/components/trees/common/Utils.js.map +1 -1
  49. package/lib/cjs/components/trees/external-sources-tree/ExternalSources.json +1 -3
  50. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +9 -3
  51. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.js +19 -7
  52. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
  53. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +4 -4
  54. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
  55. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.d.ts +9 -3
  56. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.js +16 -12
  57. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
  58. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeComponent.js +6 -5
  59. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
  60. package/lib/cjs/components/trees/index.js +3 -3
  61. package/lib/cjs/components/trees/index.js.map +1 -1
  62. package/lib/cjs/components/trees/models-tree/ModelsTree.d.ts +7 -2
  63. package/lib/cjs/components/trees/models-tree/ModelsTree.js +76 -62
  64. package/lib/cjs/components/trees/models-tree/ModelsTree.js.map +1 -1
  65. package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js +11 -18
  66. package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  67. package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.d.ts +9 -0
  68. package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.js +31 -0
  69. package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.js.map +1 -0
  70. package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.js +125 -66
  71. package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.js.map +1 -1
  72. package/lib/cjs/components/trees/models-tree/Utils.d.ts +4 -0
  73. package/lib/cjs/components/trees/models-tree/Utils.js +52 -58
  74. package/lib/cjs/components/trees/models-tree/Utils.js.map +1 -1
  75. package/lib/cjs/components/utils/AutoSizer.js +7 -5
  76. package/lib/cjs/components/utils/AutoSizer.js.map +1 -1
  77. package/lib/cjs/components/utils/IsPromiseLike.js +4 -4
  78. package/lib/cjs/components/utils/IsPromiseLike.js.map +1 -1
  79. package/lib/cjs/components/utils/UseTreeTransientState.js +3 -3
  80. package/lib/cjs/components/utils/UseTreeTransientState.js.map +1 -1
  81. package/lib/cjs/e2e-tests/TreeWidget.test.js +55 -1
  82. package/lib/cjs/e2e-tests/TreeWidget.test.js.map +1 -1
  83. package/lib/cjs/e2e-tests/utils.d.ts +1 -0
  84. package/lib/cjs/e2e-tests/utils.js +4 -5
  85. package/lib/cjs/e2e-tests/utils.js.map +1 -1
  86. package/lib/cjs/tree-widget-react.js +3 -3
  87. package/lib/cjs/tree-widget-react.js.map +1 -1
  88. package/lib/esm/TreeWidget.d.ts +0 -1
  89. package/lib/esm/TreeWidget.js +9 -10
  90. package/lib/esm/TreeWidget.js.map +1 -1
  91. package/lib/esm/components/SelectableTree.js +24 -13
  92. package/lib/esm/components/SelectableTree.js.map +1 -1
  93. package/lib/esm/components/TreeFilteringState.js +3 -3
  94. package/lib/esm/components/TreeFilteringState.js.map +1 -1
  95. package/lib/esm/components/TreeWidgetUiItemsProvider.js +7 -5
  96. package/lib/esm/components/TreeWidgetUiItemsProvider.js.map +1 -1
  97. package/lib/esm/components/TreeWidgetUiItemsProvider.scss +1 -1
  98. package/lib/esm/components/tree-header/TreeHeader.js +15 -12
  99. package/lib/esm/components/tree-header/TreeHeader.js.map +1 -1
  100. package/lib/esm/components/tree-header/TreeHeader.scss +1 -1
  101. package/lib/esm/components/trees/CategoriesVisibilityUtils.js +13 -8
  102. package/lib/esm/components/trees/CategoriesVisibilityUtils.js.map +1 -1
  103. package/lib/esm/components/trees/VisibilityTreeBase.scss +1 -1
  104. package/lib/esm/components/trees/VisibilityTreeEventHandler.d.ts +1 -1
  105. package/lib/esm/components/trees/VisibilityTreeEventHandler.js +22 -25
  106. package/lib/esm/components/trees/VisibilityTreeEventHandler.js.map +1 -1
  107. package/lib/esm/components/trees/VisibilityTreeRenderer.d.ts +20 -4
  108. package/lib/esm/components/trees/VisibilityTreeRenderer.js +27 -10
  109. package/lib/esm/components/trees/VisibilityTreeRenderer.js.map +1 -1
  110. package/lib/esm/components/trees/category-tree/CategoriesTree.d.ts +7 -2
  111. package/lib/esm/components/trees/category-tree/CategoriesTree.js +51 -34
  112. package/lib/esm/components/trees/category-tree/CategoriesTree.js.map +1 -1
  113. package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.js +14 -10
  114. package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.js.map +1 -1
  115. package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.js +18 -13
  116. package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.js.map +1 -1
  117. package/lib/esm/components/trees/common/ContextMenu.js +4 -4
  118. package/lib/esm/components/trees/common/ContextMenu.js.map +1 -1
  119. package/lib/esm/components/trees/common/TreeNodeRenderer.d.ts +1 -1
  120. package/lib/esm/components/trees/common/TreeNodeRenderer.js +4 -4
  121. package/lib/esm/components/trees/common/TreeNodeRenderer.js.map +1 -1
  122. package/lib/esm/components/trees/common/TreeRenderer.d.ts +15 -1
  123. package/lib/esm/components/trees/common/TreeRenderer.js +15 -6
  124. package/lib/esm/components/trees/common/TreeRenderer.js.map +1 -1
  125. package/lib/esm/components/trees/common/TreeRenderer.scss +7 -2
  126. package/lib/esm/components/trees/common/Types.d.ts +8 -0
  127. package/lib/esm/components/trees/common/Types.js +3 -3
  128. package/lib/esm/components/trees/common/Types.js.map +1 -1
  129. package/lib/esm/components/trees/common/UseVisibilityTreeState.d.ts +36 -0
  130. package/lib/esm/components/trees/common/UseVisibilityTreeState.js +43 -0
  131. package/lib/esm/components/trees/common/UseVisibilityTreeState.js.map +1 -0
  132. package/lib/esm/components/trees/common/Utils.js +7 -5
  133. package/lib/esm/components/trees/common/Utils.js.map +1 -1
  134. package/lib/esm/components/trees/external-sources-tree/ExternalSources.json +1 -3
  135. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +9 -3
  136. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.js +22 -10
  137. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
  138. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +4 -4
  139. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
  140. package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.d.ts +9 -3
  141. package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.js +19 -15
  142. package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
  143. package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeComponent.js +6 -5
  144. package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
  145. package/lib/esm/components/trees/index.js +3 -3
  146. package/lib/esm/components/trees/index.js.map +1 -1
  147. package/lib/esm/components/trees/models-tree/ModelsTree.d.ts +7 -2
  148. package/lib/esm/components/trees/models-tree/ModelsTree.js +80 -66
  149. package/lib/esm/components/trees/models-tree/ModelsTree.js.map +1 -1
  150. package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js +12 -19
  151. package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  152. package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.d.ts +9 -0
  153. package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.js +27 -0
  154. package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.js.map +1 -0
  155. package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.js +125 -66
  156. package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.js.map +1 -1
  157. package/lib/esm/components/trees/models-tree/Utils.d.ts +4 -0
  158. package/lib/esm/components/trees/models-tree/Utils.js +50 -57
  159. package/lib/esm/components/trees/models-tree/Utils.js.map +1 -1
  160. package/lib/esm/components/utils/AutoSizer.js +7 -5
  161. package/lib/esm/components/utils/AutoSizer.js.map +1 -1
  162. package/lib/esm/components/utils/IsPromiseLike.js +4 -4
  163. package/lib/esm/components/utils/IsPromiseLike.js.map +1 -1
  164. package/lib/esm/components/utils/UseTreeTransientState.js +3 -3
  165. package/lib/esm/components/utils/UseTreeTransientState.js.map +1 -1
  166. package/lib/esm/e2e-tests/TreeWidget.test.js +56 -2
  167. package/lib/esm/e2e-tests/TreeWidget.test.js.map +1 -1
  168. package/lib/esm/e2e-tests/utils.d.ts +1 -0
  169. package/lib/esm/e2e-tests/utils.js +2 -4
  170. package/lib/esm/e2e-tests/utils.js.map +1 -1
  171. package/lib/esm/tree-widget-react.js +3 -3
  172. package/lib/esm/tree-widget-react.js.map +1 -1
  173. package/package.json +88 -87
@@ -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) { this._filteredDataProvider = 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
- if (NodeKey.isClassGroupingNodeKey(item.key))
70
+ }
71
+ if (NodeKey.isClassGroupingNodeKey(item.key)) {
69
72
  return ModelsTreeNodeType.Grouping;
70
- if (!item.extendedData)
73
+ }
74
+ if (!item.extendedData) {
71
75
  return ModelsTreeNodeType.Unknown;
72
- if (this.isSubjectNode(item))
76
+ }
77
+ if (this.isSubjectNode(item)) {
73
78
  return ModelsTreeNodeType.Subject;
74
- if (this.isModelNode(item))
79
+ }
80
+ if (this.isModelNode(item)) {
75
81
  return ModelsTreeNodeType.Model;
76
- if (this.isCategoryNode(item))
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
- if (NodeKey.isClassGroupingNodeKey(nodeKey))
102
+ }
103
+ if (NodeKey.isClassGroupingNodeKey(nodeKey)) {
95
104
  return this.getElementGroupingNodeDisplayStatus(node.id, nodeKey);
96
- if (!NodeKey.isInstancesNodeKey(nodeKey))
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
- if (ModelsVisibilityHandler.isCategoryNode(node))
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
- if (this._filteredDataProvider)
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
- if (this._props.viewport.neverDrawn !== undefined && this._props.viewport.neverDrawn.has(elementId))
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
- if (this._props.viewport.alwaysDrawn.size !== 0 && this._props.viewport.isAlwaysDrawnExclusive)
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
- if (this._filteredDataProvider)
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
- else
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 = (on === isDisplayedInSelector) ? PerModelCategoryVisibility.Override.None
261
- : on ? PerModelCategoryVisibility.Override.Show : PerModelCategoryVisibility.Override.Hide;
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 && this.getModelDisplayStatus(modelId).state === "visible"
287
- && categoryId && this.getCategoryDisplayStatus(categoryId, modelId).state === "visible";
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
- else
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
- if (enable)
578
+ }
579
+ if (enable) {
523
580
  viewport.changeModelDisplay(models, false);
524
- else
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.