@itwin/tree-widget-react 4.0.0-alpha.25 → 4.0.0-alpha.26

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 (192) hide show
  1. package/CHANGELOG.md +35 -1
  2. package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js +2 -1
  3. package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js.map +1 -1
  4. package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.js +1 -1
  5. package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.js.map +1 -1
  6. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.d.ts +4 -1
  7. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js +4 -1
  8. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js.map +1 -1
  9. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.d.ts +1 -0
  10. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js +36 -47
  11. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -1
  12. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.d.ts +2 -0
  13. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js +4 -1
  14. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -1
  15. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.d.ts +2 -1
  16. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js +75 -38
  17. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js.map +1 -1
  18. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeNode.d.ts +3 -1
  19. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeNode.js.map +1 -1
  20. package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.d.ts +4 -2
  21. package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js +38 -23
  22. package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js.map +1 -1
  23. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.d.ts +11 -21
  24. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +16 -168
  25. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js.map +1 -1
  26. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNodeInternal.d.ts +65 -0
  27. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNodeInternal.js +22 -0
  28. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNodeInternal.js.map +1 -0
  29. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseSearchPaths.d.ts +2 -2
  30. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseSearchPaths.js +4 -4
  31. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseSearchPaths.js.map +1 -1
  32. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.d.ts +6 -10
  33. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.js +180 -88
  34. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.js.map +1 -1
  35. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.d.ts +14 -5
  36. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.js +43 -24
  37. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.js.map +1 -1
  38. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/SearchResultsTree.d.ts +3 -1
  39. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/SearchResultsTree.js +78 -17
  40. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/SearchResultsTree.js.map +1 -1
  41. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.d.ts +2 -0
  42. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js +4 -1
  43. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js.map +1 -1
  44. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js +91 -114
  45. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js.map +1 -1
  46. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeIcon.d.ts +2 -2
  47. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeIcon.js.map +1 -1
  48. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeNode.d.ts +1 -3
  49. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeNode.js +2 -4
  50. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeNode.js.map +1 -1
  51. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.d.ts +13 -1
  52. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js +62 -32
  53. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js.map +1 -1
  54. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.d.ts +12 -9
  55. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.js +42 -38
  56. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.js.map +1 -1
  57. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.d.ts +15 -38
  58. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js +59 -242
  59. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js.map +1 -1
  60. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNodeInternal.d.ts +29 -0
  61. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNodeInternal.js +19 -0
  62. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNodeInternal.js.map +1 -0
  63. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.d.ts +4 -8
  64. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.js +154 -78
  65. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.js.map +1 -1
  66. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHelper.js +20 -6
  67. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHelper.js.map +1 -1
  68. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/SearchResultsTree.d.ts +6 -10
  69. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/SearchResultsTree.js +104 -63
  70. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/SearchResultsTree.js.map +1 -1
  71. package/lib/esm/tree-widget-react/components/trees/common/SharedTreeContextProvider.d.ts +7 -0
  72. package/lib/esm/tree-widget-react/components/trees/common/SharedTreeContextProvider.js +14 -0
  73. package/lib/esm/tree-widget-react/components/trees/common/SharedTreeContextProvider.js.map +1 -0
  74. package/lib/esm/tree-widget-react/components/trees/common/TreeWidgetViewport.js +1 -1
  75. package/lib/esm/tree-widget-react/components/trees/common/TreeWidgetViewport.js.map +1 -1
  76. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js +2 -2
  77. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js.map +1 -1
  78. package/lib/esm/tree-widget-react/components/trees/common/Utils.js +2 -2
  79. package/lib/esm/tree-widget-react/components/trees/common/Utils.js.map +1 -1
  80. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.d.ts +4 -4
  81. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js +1 -1
  82. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js.map +1 -1
  83. package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.d.ts +4 -4
  84. package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.js.map +1 -1
  85. package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js +7 -5
  86. package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js.map +1 -1
  87. package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.d.ts +2 -2
  88. package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.js.map +1 -1
  89. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js +5 -5
  90. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js.map +1 -1
  91. package/lib/esm/tree-widget-react/components/trees/common/internal/SharedTreeContextProviderInternal.d.ts +20 -0
  92. package/lib/esm/tree-widget-react/components/trees/common/internal/SharedTreeContextProviderInternal.js +44 -0
  93. package/lib/esm/tree-widget-react/components/trees/common/internal/SharedTreeContextProviderInternal.js.map +1 -0
  94. package/lib/esm/tree-widget-react/components/trees/common/internal/Types.d.ts +4 -0
  95. package/lib/esm/tree-widget-react/components/trees/common/internal/Types.js.map +1 -1
  96. package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.d.ts +12 -0
  97. package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.js +2 -1
  98. package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.js.map +1 -1
  99. package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.d.ts +17 -6
  100. package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js +58 -29
  101. package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js.map +1 -1
  102. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.d.ts +8 -14
  103. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js +22 -26
  104. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js.map +1 -1
  105. package/lib/esm/tree-widget-react/components/trees/common/internal/{AlwaysAndNeverDrawnElementInfo.d.ts → caches/AlwaysAndNeverDrawnElementInfoCache.d.ts} +15 -21
  106. package/lib/esm/tree-widget-react/components/trees/common/internal/{AlwaysAndNeverDrawnElementInfo.js → caches/AlwaysAndNeverDrawnElementInfoCache.js} +40 -38
  107. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/AlwaysAndNeverDrawnElementInfoCache.js.map +1 -0
  108. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/BaseIdsCache.d.ts +68 -0
  109. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/BaseIdsCache.js +148 -0
  110. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/BaseIdsCache.js.map +1 -0
  111. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementChildrenCache.d.ts +30 -0
  112. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementChildrenCache.js +151 -0
  113. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementChildrenCache.js.map +1 -0
  114. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementModelCategoriesCache.d.ts +32 -0
  115. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementModelCategoriesCache.js +106 -0
  116. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementModelCategoriesCache.js.map +1 -0
  117. package/lib/esm/tree-widget-react/components/trees/common/internal/{ModelCategoryElementsCountCache.d.ts → caches/ModelCategoryElementsCountCache.d.ts} +9 -2
  118. package/lib/esm/tree-widget-react/components/trees/common/internal/{ModelCategoryElementsCountCache.js → caches/ModelCategoryElementsCountCache.js} +17 -21
  119. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ModelCategoryElementsCountCache.js.map +1 -0
  120. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ModeledElementsCache.d.ts +27 -0
  121. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ModeledElementsCache.js +106 -0
  122. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ModeledElementsCache.js.map +1 -0
  123. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/SubCategoriesCache.d.ts +23 -0
  124. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/SubCategoriesCache.js +56 -0
  125. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/SubCategoriesCache.js.map +1 -0
  126. package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.d.ts +6 -6
  127. package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.js +27 -17
  128. package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.js.map +1 -1
  129. package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.d.ts +7 -13
  130. package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.js +36 -35
  131. package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.js.map +1 -1
  132. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseSearchResultsTree.d.ts +18 -0
  133. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseSearchResultsTree.js +14 -1
  134. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseSearchResultsTree.js.map +1 -1
  135. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.d.ts +46 -70
  136. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.js +229 -361
  137. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.js.map +1 -1
  138. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +2 -2
  139. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
  140. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
  141. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.d.ts +2 -2
  142. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
  143. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
  144. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.js +1 -1
  145. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.js.map +1 -1
  146. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js +32 -19
  147. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js.map +1 -1
  148. package/lib/esm/tree-widget-react/components/trees/index.d.ts +2 -1
  149. package/lib/esm/tree-widget-react/components/trees/index.js +2 -1
  150. package/lib/esm/tree-widget-react/components/trees/index.js.map +1 -1
  151. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.d.ts +4 -1
  152. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js +4 -1
  153. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js.map +1 -1
  154. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.d.ts +7 -3
  155. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js +36 -35
  156. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js.map +1 -1
  157. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.d.ts +1 -0
  158. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js +3 -1
  159. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  160. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.d.ts +1 -0
  161. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +56 -26
  162. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -1
  163. package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.d.ts +5 -3
  164. package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js +25 -12
  165. package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js.map +1 -1
  166. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +11 -23
  167. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +56 -189
  168. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -1
  169. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNodeInternal.d.ts +52 -0
  170. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNodeInternal.js +22 -0
  171. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNodeInternal.js.map +1 -0
  172. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseSearchPaths.d.ts +2 -2
  173. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseSearchPaths.js +8 -8
  174. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseSearchPaths.js.map +1 -1
  175. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.d.ts +6 -10
  176. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.js +179 -72
  177. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.js.map +1 -1
  178. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHelper.d.ts +6 -0
  179. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHelper.js +20 -8
  180. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHelper.js.map +1 -1
  181. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/SearchResultsTree.d.ts +4 -2
  182. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/SearchResultsTree.js +73 -13
  183. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/SearchResultsTree.js.map +1 -1
  184. package/lib/esm/tree-widget-react-internal.d.ts +1 -0
  185. package/lib/esm/tree-widget-react-internal.js +1 -0
  186. package/lib/esm/tree-widget-react-internal.js.map +1 -1
  187. package/package.json +77 -82
  188. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseSearchPaths.d.ts +0 -20
  189. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseSearchPaths.js +0 -53
  190. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseSearchPaths.js.map +0 -1
  191. package/lib/esm/tree-widget-react/components/trees/common/internal/AlwaysAndNeverDrawnElementInfo.js.map +0 -1
  192. package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js.map +0 -1
@@ -2,13 +2,13 @@
2
2
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
- import { bufferCount, defaultIfEmpty, defer, distinct, EMPTY, firstValueFrom, forkJoin, from, fromEvent, identity, lastValueFrom, map, merge, mergeMap, of, reduce, takeUntil, toArray, } from "rxjs";
5
+ import { bufferCount, defaultIfEmpty, defer, distinct, EMPTY, firstValueFrom, forkJoin, from, fromEvent, identity, lastValueFrom, map, merge, mergeAll, mergeMap, of, reduce, takeUntil, toArray, } from "rxjs";
6
6
  import { assert, Guid } from "@itwin/core-bentley";
7
- import { createNodesQueryClauseFactory, createPredicateBasedHierarchyDefinition, ProcessedHierarchyNode } from "@itwin/presentation-hierarchies";
7
+ import { createNodesQueryClauseFactory, createPredicateBasedHierarchyDefinition, HierarchyNode, ProcessedHierarchyNode } from "@itwin/presentation-hierarchies";
8
8
  import { createBisInstanceLabelSelectClauseFactory, ECSql } from "@itwin/presentation-shared";
9
9
  import { CLASS_NAME_DefinitionContainer, CLASS_NAME_InformationPartitionElement, CLASS_NAME_ISubModeledElement, CLASS_NAME_Model, CLASS_NAME_SubCategory, } from "../common/internal/ClassNameDefinitions.js";
10
10
  import { catchBeSQLiteInterrupts } from "../common/internal/UseErrorState.js";
11
- import { createIdsSelector, fromWithRelease, getClassesByView, getOptimalBatchSize, groupingNodeHasSearchTargets, parseIdsSelectorResult, releaseMainThreadOnItemsCount, } from "../common/internal/Utils.js";
11
+ import { createIdsSelector, fromWithRelease, getClassesByView, getOptimalBatchSize, groupingNodeDataFromChildren, parseIdsSelectorResult, releaseMainThreadOnItemsCount, } from "../common/internal/Utils.js";
12
12
  import { SearchLimitExceededError } from "../common/TreeErrors.js";
13
13
  const MAX_SEARCH_INSTANCE_KEY_COUNT = 100;
14
14
  /** @internal */
@@ -58,26 +58,36 @@ export class CategoriesTreeDefinition {
58
58
  async postProcessNode(node) {
59
59
  if (ProcessedHierarchyNode.isGroupingNode(node)) {
60
60
  const modelElementsMap = new Map();
61
- node.children.forEach((child) => {
61
+ for (const child of node.children) {
62
62
  let modelEntry = modelElementsMap.get(child.extendedData?.modelId);
63
63
  if (!modelEntry) {
64
- modelEntry = new Set();
64
+ modelEntry = {
65
+ elementIds: new Set(),
66
+ categoryOfTopMostParentElement: child.extendedData?.categoryOfTopMostParentElement,
67
+ };
65
68
  modelElementsMap.set(child.extendedData?.modelId, modelEntry);
66
69
  }
67
70
  assert(child.key.type === "instances");
68
71
  for (const { id } of child.key.instanceKeys) {
69
- modelEntry.add(id);
72
+ modelEntry.elementIds.add(id);
70
73
  }
71
- });
72
- const { hasSearchTargetAncestor, hasDirectNonSearchTargets } = groupingNodeHasSearchTargets(node.children);
74
+ }
75
+ const { hasSearchTargetAncestor, hasDirectNonSearchTargets, childrenCount, searchTargets } = groupingNodeDataFromChildren(node.children);
76
+ const firstChild = node.children[0];
77
+ assert(HierarchyNode.isInstancesNode(firstChild));
73
78
  return {
74
79
  ...node,
75
80
  label: node.label,
76
81
  extendedData: {
77
82
  ...node.extendedData,
83
+ topMostParentElementId: firstChild.key.instanceKeys.every((instanceKey) => instanceKey.id !== firstChild.extendedData?.topMostParentElementId)
84
+ ? firstChild.extendedData?.topMostParentElementId
85
+ : undefined,
78
86
  // add `categoryId` from the first grouped element
79
- categoryId: node.children[0].extendedData?.categoryId,
87
+ categoryId: firstChild.extendedData?.categoryId,
80
88
  modelElementsMap,
89
+ childrenCount,
90
+ ...(!!searchTargets?.size ? { searchTargets } : {}),
81
91
  ...(hasDirectNonSearchTargets ? { hasDirectNonSearchTargets } : {}),
82
92
  ...(hasSearchTargetAncestor ? { hasSearchTargetAncestor } : {}),
83
93
  // `imageId` is assigned to instance nodes at query time, but grouping ones need to
@@ -108,7 +118,7 @@ export class CategoriesTreeDefinition {
108
118
  },
109
119
  {
110
120
  parentInstancesNodePredicate: this.#categoryModelClass,
111
- definitions: async (requestProps) => this.createGeometricModel3dChildrenQuery(requestProps),
121
+ definitions: async (requestProps) => this.createGeometricModelChildrenQuery(requestProps),
112
122
  },
113
123
  ]
114
124
  : []),
@@ -167,18 +177,24 @@ export class CategoriesTreeDefinition {
167
177
  },
168
178
  ];
169
179
  }
170
- async createGeometricModel3dChildrenQuery({ parentNodeInstanceIds: modelIds, instanceFilter, }) {
171
- const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({
172
- filter: instanceFilter,
173
- contentClass: { fullName: this.#categoryClass, alias: "this" },
174
- });
180
+ async createGeometricModelChildrenQuery({ parentNodeInstanceIds: modelIds, instanceFilter, }) {
181
+ const [instanceFilterClauses, categoryIds] = await Promise.all([
182
+ this.#selectQueryFactory.createFilterClauses({
183
+ filter: instanceFilter,
184
+ contentClass: { fullName: this.#categoryClass, alias: "this" },
185
+ }),
186
+ firstValueFrom(this.#idsCache.getCategoriesOfModelsTopMostElements(modelIds).pipe(map((categoriesSet) => [...categoriesSet]))),
187
+ ]);
188
+ if (categoryIds.length === 0) {
189
+ return [];
190
+ }
175
191
  return [
176
192
  {
177
193
  fullClassName: this.#categoryClass,
178
194
  query: {
179
195
  ecsql: `
180
- SELECT
181
- ${await this.#selectQueryFactory.createSelectClause({
196
+ SELECT
197
+ ${await this.#selectQueryFactory.createSelectClause({
182
198
  ecClassId: { selector: "this.ECClassId" },
183
199
  ecInstanceId: { selector: "this.ECInstanceId" },
184
200
  nodeLabel: {
@@ -197,19 +213,12 @@ export class CategoriesTreeDefinition {
197
213
  },
198
214
  supportsFiltering: true,
199
215
  })}
200
- FROM ${instanceFilterClauses.from} this
201
- ${instanceFilterClauses.joins}
202
- WHERE
203
- EXISTS (
204
- SELECT 1
205
- FROM ${this.#categoryElementClass} element
206
- WHERE
207
- element.Model.Id IN (${modelIds.join(",")})
208
- AND element.Category.Id = +this.ECInstanceId
209
- AND element.Parent.Id IS NULL
210
- )
216
+ FROM ${instanceFilterClauses.from} this
217
+ ${instanceFilterClauses.joins}
218
+ WHERE InVirtualSet(?, this.ECInstanceId)
211
219
  ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : ""}
212
- `,
220
+ `,
221
+ bindings: [{ type: "idset", value: categoryIds }],
213
222
  },
214
223
  },
215
224
  ];
@@ -224,10 +233,10 @@ export class CategoriesTreeDefinition {
224
233
  }));
225
234
  const hierarchyDefinition = new Array();
226
235
  if (categories.length > 0) {
227
- hierarchyDefinition.push(...(await this.createCategoriesQuery({ categories, instanceFilter })));
236
+ (await this.createCategoriesQuery({ categories, instanceFilter })).forEach((def) => hierarchyDefinition.push(def));
228
237
  }
229
238
  if (definitionContainers.length > 0) {
230
- hierarchyDefinition.push(...(await this.createDefinitionContainersQuery({ definitionContainerIds: definitionContainers, instanceFilter })));
239
+ (await this.createDefinitionContainersQuery({ definitionContainerIds: definitionContainers, instanceFilter })).forEach((def) => hierarchyDefinition.push(def));
231
240
  }
232
241
  return hierarchyDefinition;
233
242
  }
@@ -378,6 +387,22 @@ export class CategoriesTreeDefinition {
378
387
  },
379
388
  ];
380
389
  }
390
+ createElementChildrenCountSelector(props) {
391
+ return `(
392
+ WITH RECURSIVE
393
+ ElementWithParent(id) AS (
394
+ SELECT e.ECInstanceId
395
+ FROM ${this.#categoryElementClass} e
396
+ WHERE e.ECInstanceId = ${props.elementIdSelector}
397
+ UNION ALL
398
+ SELECT c.ECInstanceId
399
+ FROM ${this.#categoryElementClass} c
400
+ JOIN ElementWithParent p ON p.id = c.Parent.Id
401
+ )
402
+ SELECT COUNT(1) - 1
403
+ FROM ElementWithParent
404
+ )`;
405
+ }
381
406
  async createCategoryElementsQuery({ parentNodeInstanceIds: categoryIds, instanceFilter, parentNode, }) {
382
407
  const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({
383
408
  filter: instanceFilter,
@@ -385,13 +410,14 @@ export class CategoriesTreeDefinition {
385
410
  });
386
411
  const modelIds = parentNode.extendedData?.isCategoryOfSubModel
387
412
  ? parseIdsSelectorResult(parentNode.extendedData?.modelIds)
388
- : await firstValueFrom(this.#idsCache.getCategoriesElementModels(categoryIds).pipe(mergeMap(({ models }) => models ?? []), distinct(), toArray()));
413
+ : await firstValueFrom(from(categoryIds).pipe(mergeMap((categoryId) => this.#idsCache.getModels({ categoryId })), mergeAll(), distinct(), toArray()));
389
414
  if (modelIds.length === 0) {
390
415
  return [];
391
416
  }
392
- const modeledElements = await firstValueFrom(from(modelIds).pipe(mergeMap((modelId) => this.#idsCache.getCategoriesModeledElements(modelId, categoryIds)), reduce((acc, foundModeledElements) => {
393
- return acc.concat(foundModeledElements);
394
- }, new Array())));
417
+ const modeledElements = await firstValueFrom(from(modelIds).pipe(mergeMap((modelId) => from(categoryIds).pipe(mergeMap((categoryId) => this.#idsCache.getSubModels({ modelId, categoryId })), mergeAll())), toArray()));
418
+ const bindings = new Array();
419
+ categoryIds.forEach((id) => bindings.push({ type: "id", value: id }));
420
+ modelIds.forEach((id) => bindings.push({ type: "id", value: id }));
395
421
  return [
396
422
  {
397
423
  fullClassName: this.#categoryElementClass,
@@ -429,6 +455,9 @@ export class CategoriesTreeDefinition {
429
455
  categoryId: { selector: "IdToHex(this.Category.Id)" },
430
456
  imageId: "icon-item",
431
457
  isElement: true,
458
+ childrenCount: { selector: this.createElementChildrenCountSelector({ elementIdSelector: "this.ECInstanceId" }) },
459
+ categoryOfTopMostParentElement: { selector: "IdToHex(this.Category.Id)" },
460
+ topMostParentElementId: { selector: "IdToHex(this.ECInstanceId)" },
432
461
  },
433
462
  supportsFiltering: true,
434
463
  })}
@@ -436,20 +465,23 @@ export class CategoriesTreeDefinition {
436
465
  ${parentNode.extendedData?.isCategoryOfSubModel ? "" : `JOIN ${CLASS_NAME_InformationPartitionElement} ipe ON ipe.ECInstanceId = this.Model.Id`}
437
466
  ${instanceFilterClauses.joins}
438
467
  WHERE
439
- this.Category.Id IN (${categoryIds.join(",")})
440
- AND this.Model.Id IN (${modelIds.join(",")})
468
+ this.Category.Id IN (${categoryIds.map(() => "?").join(",")})
469
+ AND this.Model.Id IN (${modelIds.map(() => "?").join(",")})
441
470
  AND this.Parent.Id IS NULL
442
471
  ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : ""}
443
472
  `,
473
+ bindings,
444
474
  },
445
475
  },
446
476
  ];
447
477
  }
448
- async createElementChildrenQuery({ parentNodeInstanceIds: elementIds, instanceFilter, }) {
478
+ async createElementChildrenQuery({ parentNodeInstanceIds: elementIds, instanceFilter, parentNode, }) {
449
479
  const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({
450
480
  filter: instanceFilter,
451
481
  contentClass: { fullName: this.#categoryElementClass, alias: "this" },
452
482
  });
483
+ const bindings = new Array();
484
+ elementIds.forEach((id) => bindings.push({ type: "id", value: id }));
453
485
  return [
454
486
  {
455
487
  fullClassName: this.#categoryElementClass,
@@ -484,6 +516,11 @@ export class CategoriesTreeDefinition {
484
516
  categoryId: { selector: "IdToHex(this.Category.Id)" },
485
517
  imageId: "icon-item",
486
518
  isElement: true,
519
+ childrenCount: { selector: this.createElementChildrenCountSelector({ elementIdSelector: "this.ECInstanceId" }) },
520
+ categoryOfTopMostParentElement: {
521
+ selector: `IdToHex(${parentNode.extendedData?.categoryOfTopMostParentElement})`,
522
+ },
523
+ topMostParentElementId: { selector: `IdToHex(${parentNode.extendedData?.topMostParentElementId})` },
487
524
  },
488
525
  supportsFiltering: true,
489
526
  })}
@@ -1 +1 @@
1
- {"version":3,"file":"CategoriesTreeDefinition.js","sourceRoot":"","sources":["../../../../../../src/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport {\n bufferCount,\n defaultIfEmpty,\n defer,\n distinct,\n EMPTY,\n firstValueFrom,\n forkJoin,\n from,\n fromEvent,\n identity,\n lastValueFrom,\n map,\n merge,\n mergeMap,\n of,\n reduce,\n takeUntil,\n toArray,\n} from \"rxjs\";\nimport { assert, Guid } from \"@itwin/core-bentley\";\nimport { createNodesQueryClauseFactory, createPredicateBasedHierarchyDefinition, ProcessedHierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { createBisInstanceLabelSelectClauseFactory, ECSql } from \"@itwin/presentation-shared\";\nimport {\n CLASS_NAME_DefinitionContainer,\n CLASS_NAME_InformationPartitionElement,\n CLASS_NAME_ISubModeledElement,\n CLASS_NAME_Model,\n CLASS_NAME_SubCategory,\n} from \"../common/internal/ClassNameDefinitions.js\";\nimport { catchBeSQLiteInterrupts } from \"../common/internal/UseErrorState.js\";\nimport {\n createIdsSelector,\n fromWithRelease,\n getClassesByView,\n getOptimalBatchSize,\n groupingNodeHasSearchTargets,\n parseIdsSelectorResult,\n releaseMainThreadOnItemsCount,\n} from \"../common/internal/Utils.js\";\nimport { SearchLimitExceededError } from \"../common/TreeErrors.js\";\n\nimport type { Observable } from \"rxjs\";\nimport type { GuidString, Id64Array, MarkRequired } from \"@itwin/core-bentley\";\nimport type {\n DefineHierarchyLevelProps,\n DefineInstanceNodeChildHierarchyLevelProps,\n DefineRootHierarchyLevelProps,\n GenericInstanceFilter,\n HierarchyDefinition,\n HierarchyLevelDefinition,\n HierarchyNodesDefinition,\n LimitingECSqlQueryExecutor,\n NodePreProcessor,\n NodesQueryClauseFactory,\n} from \"@itwin/presentation-hierarchies\";\nimport type {\n ECClassHierarchyInspector,\n ECSchemaProvider,\n ECSqlBinding,\n ECSqlQueryRow,\n IInstanceLabelSelectClauseFactory,\n InstanceKey,\n} from \"@itwin/presentation-shared\";\nimport type { CategoryId, DefinitionContainerId, ElementId, ModelId, SubCategoryId } from \"../common/internal/Types.js\";\nimport type { NormalizedHierarchySearchPath } from \"../common/Utils.js\";\nimport type { CategoriesTreeIdsCache, CategoryInfo } from \"./internal/CategoriesTreeIdsCache.js\";\n\nconst MAX_SEARCH_INSTANCE_KEY_COUNT = 100;\n\ninterface CategoriesTreeDefinitionProps {\n imodelAccess: ECSchemaProvider & ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n viewType: \"2d\" | \"3d\";\n idsCache: CategoriesTreeIdsCache;\n hierarchyConfig: CategoriesTreeHierarchyConfiguration;\n}\n\ninterface CategoriesTreeInstanceKeyPathsFromInstanceLabelProps {\n imodelAccess: ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n label: string;\n viewType: \"2d\" | \"3d\";\n limit?: number | \"unbounded\";\n idsCache: CategoriesTreeIdsCache;\n hierarchyConfig: CategoriesTreeHierarchyConfiguration;\n abortSignal?: AbortSignal;\n componentId?: GuidString;\n}\n\n/**\n * Defines hierarchy configuration supported by `CategoriesTree`.\n * @beta\n */\nexport interface CategoriesTreeHierarchyConfiguration {\n /** Should SubCategories be hidden. Defaults to `false` */\n hideSubCategories: boolean;\n /** Should Elements be shown. Defaults to `false` */\n showElements: boolean;\n /** Should categories without elements be shown. Defaults to `false`. */\n showEmptyCategories: boolean;\n}\n\n/** @internal */\nexport const defaultHierarchyConfiguration: CategoriesTreeHierarchyConfiguration = {\n hideSubCategories: false,\n showElements: false,\n showEmptyCategories: false,\n};\n\n/** @internal */\nexport class CategoriesTreeDefinition implements HierarchyDefinition {\n #impl: Promise<HierarchyDefinition> | undefined;\n #selectQueryFactory: NodesQueryClauseFactory;\n #nodeLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory;\n #idsCache: CategoriesTreeIdsCache;\n #hierarchyConfig: CategoriesTreeHierarchyConfiguration;\n #iModelAccess: ECSchemaProvider & ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n #categoryClass: string;\n #categoryElementClass: string;\n #categoryModelClass: string;\n static #componentName = \"CategoriesTreeDefinition\";\n\n public constructor(props: CategoriesTreeDefinitionProps) {\n this.#iModelAccess = props.imodelAccess;\n this.#idsCache = props.idsCache;\n this.#nodeLabelSelectClauseFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: props.imodelAccess });\n this.#selectQueryFactory = createNodesQueryClauseFactory({\n imodelAccess: props.imodelAccess,\n instanceLabelSelectClauseFactory: this.#nodeLabelSelectClauseFactory,\n });\n this.#hierarchyConfig = props.hierarchyConfig;\n const { categoryClass, elementClass, modelClass } = getClassesByView(props.viewType);\n this.#categoryClass = categoryClass;\n this.#categoryElementClass = elementClass;\n this.#categoryModelClass = modelClass;\n }\n\n public preProcessNode: NodePreProcessor = async (node) => {\n if (node.extendedData?.isCategory) {\n return {\n ...node,\n extendedData: {\n ...node.extendedData,\n modelIds: parseIdsSelectorResult(node.extendedData.modelIds),\n },\n };\n }\n return node;\n };\n\n public async postProcessNode(node: ProcessedHierarchyNode): Promise<ProcessedHierarchyNode> {\n if (ProcessedHierarchyNode.isGroupingNode(node)) {\n const modelElementsMap = new Map<ModelId, Set<ElementId>>();\n node.children.forEach((child) => {\n let modelEntry = modelElementsMap.get(child.extendedData?.modelId);\n if (!modelEntry) {\n modelEntry = new Set();\n modelElementsMap.set(child.extendedData?.modelId, modelEntry);\n }\n assert(child.key.type === \"instances\");\n for (const { id } of child.key.instanceKeys) {\n modelEntry.add(id);\n }\n });\n\n const { hasSearchTargetAncestor, hasDirectNonSearchTargets } = groupingNodeHasSearchTargets(node.children);\n\n return {\n ...node,\n label: node.label,\n extendedData: {\n ...node.extendedData,\n // add `categoryId` from the first grouped element\n categoryId: node.children[0].extendedData?.categoryId,\n modelElementsMap,\n ...(hasDirectNonSearchTargets ? { hasDirectNonSearchTargets } : {}),\n ...(hasSearchTargetAncestor ? { hasSearchTargetAncestor } : {}),\n // `imageId` is assigned to instance nodes at query time, but grouping ones need to\n // be handled during post-processing\n imageId: \"icon-ec-class\",\n },\n };\n }\n return node;\n }\n\n private async getHierarchyDefinition(): Promise<HierarchyDefinition> {\n this.#impl ??= (async () => {\n const isDefinitionContainerSupported = await firstValueFrom(this.#idsCache.getIsDefinitionContainerSupported());\n return createPredicateBasedHierarchyDefinition({\n classHierarchyInspector: this.#iModelAccess,\n hierarchy: {\n rootNodes: async (requestProps: DefineRootHierarchyLevelProps) => this.createDefinitionContainersAndCategoriesQuery(requestProps),\n childNodes: [\n ...(this.#hierarchyConfig.showElements\n ? [\n {\n parentInstancesNodePredicate: this.#categoryElementClass,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createElementChildrenQuery(requestProps),\n },\n {\n parentInstancesNodePredicate: CLASS_NAME_ISubModeledElement,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createISubModeledElementChildrenQuery(requestProps),\n },\n {\n parentInstancesNodePredicate: this.#categoryModelClass,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createGeometricModel3dChildrenQuery(requestProps),\n },\n ]\n : []),\n ...(this.#hierarchyConfig.hideSubCategories && !this.#hierarchyConfig.showElements\n ? []\n : [\n {\n parentInstancesNodePredicate: this.#categoryClass,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createCategoryChildrenQuery(requestProps),\n },\n ]),\n ...(isDefinitionContainerSupported\n ? [\n {\n parentInstancesNodePredicate: CLASS_NAME_DefinitionContainer,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) =>\n this.createDefinitionContainersAndCategoriesQuery(requestProps),\n },\n ]\n : []),\n ],\n },\n });\n })();\n return this.#impl;\n }\n\n public async defineHierarchyLevel(props: DefineHierarchyLevelProps) {\n return (await this.getHierarchyDefinition()).defineHierarchyLevel(props);\n }\n\n private async createISubModeledElementChildrenQuery({\n parentNodeInstanceIds: elementIds,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n // note: we do not apply hierarchy level filtering on this hierarchy level, because it's always\n // hidden - the filter will get applied on the child hierarchy levels\n return [\n {\n fullClassName: this.#categoryModelClass,\n query: {\n ecsql: `\n SELECT\n ${await this.#selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"this.ECClassId\" },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: \"\", // doesn't matter - the node is always hidden\n hideNodeInHierarchy: true,\n hasChildren: true,\n extendedData: {\n isModel: true,\n },\n })}\n FROM ${this.#categoryModelClass} this\n WHERE\n this.ModeledElement.Id IN (${elementIds.map(() => \"?\").join(\",\")})\n AND NOT this.IsPrivate\n AND this.ECInstanceId IN (SELECT Model.Id FROM ${this.#categoryElementClass})\n `,\n bindings: [...elementIds.map((id): ECSqlBinding => ({ type: \"id\", value: id }))],\n },\n },\n ];\n }\n\n private async createGeometricModel3dChildrenQuery({\n parentNodeInstanceIds: modelIds,\n instanceFilter,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: this.#categoryClass, alias: \"this\" },\n });\n\n return [\n {\n fullClassName: this.#categoryClass,\n query: {\n ecsql: `\n SELECT\n ${await this.#selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"this.ECClassId\" },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this.#nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: this.#categoryClass,\n }),\n },\n grouping: { byLabel: { action: \"merge\", groupId: \"category\" } },\n hasChildren: true,\n extendedData: {\n imageId: \"icon-layers\",\n isCategory: true,\n modelIds: { selector: createIdsSelector(modelIds) },\n isCategoryOfSubModel: true,\n },\n supportsFiltering: true,\n })}\n FROM ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n EXISTS (\n SELECT 1\n FROM ${this.#categoryElementClass} element\n WHERE\n element.Model.Id IN (${modelIds.join(\",\")})\n AND element.Category.Id = +this.ECInstanceId\n AND element.Parent.Id IS NULL\n )\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n },\n },\n ];\n }\n\n private async createDefinitionContainersAndCategoriesQuery(props: {\n parentNodeInstanceIds?: Id64Array;\n instanceFilter?: GenericInstanceFilter;\n }): Promise<HierarchyLevelDefinition> {\n const { parentNodeInstanceIds, instanceFilter } = props;\n const { definitionContainers, categories } = await firstValueFrom(\n parentNodeInstanceIds === undefined\n ? this.#idsCache.getRootDefinitionContainersAndCategories({ includeEmpty: this.#hierarchyConfig.showEmptyCategories })\n : this.#idsCache.getDirectChildDefinitionContainersAndCategories({\n parentDefinitionContainerIds: parentNodeInstanceIds,\n includeEmpty: this.#hierarchyConfig.showEmptyCategories,\n }),\n );\n const hierarchyDefinition = new Array<HierarchyNodesDefinition>();\n if (categories.length > 0) {\n hierarchyDefinition.push(...(await this.createCategoriesQuery({ categories, instanceFilter })));\n }\n if (definitionContainers.length > 0) {\n hierarchyDefinition.push(...(await this.createDefinitionContainersQuery({ definitionContainerIds: definitionContainers, instanceFilter })));\n }\n return hierarchyDefinition;\n }\n\n private async createDefinitionContainersQuery({\n definitionContainerIds,\n instanceFilter,\n }: {\n definitionContainerIds: Id64Array;\n instanceFilter?: GenericInstanceFilter;\n }): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: CLASS_NAME_DefinitionContainer, alias: \"this\" },\n });\n\n return [\n {\n fullClassName: CLASS_NAME_DefinitionContainer,\n query: {\n ecsql: `\n SELECT\n ${await this.#selectQueryFactory.createSelectClause({\n ecClassId: { selector: ECSql.createRawPropertyValueSelector(\"this\", \"ECClassId\") },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this.#nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: CLASS_NAME_DefinitionContainer,\n }),\n },\n extendedData: {\n isDefinitionContainer: true,\n imageId: \"icon-definition-container\",\n },\n hasChildren: true,\n supportsFiltering: true,\n })}\n FROM\n ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n this.ECInstanceId IN (${definitionContainerIds.join(\", \")})\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n },\n },\n ];\n }\n\n private async createCategoriesQuery({\n categories,\n instanceFilter,\n }: {\n categories: Array<CategoryInfo>;\n instanceFilter?: GenericInstanceFilter;\n }): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: this.#categoryClass, alias: \"this\" },\n });\n const categoriesWithMultipleSubCategories = categories\n .filter((categoryInfo) => categoryInfo.subCategoryChildCount > 1)\n .map((categoryInfo) => categoryInfo.id);\n\n const hasChildrenSelector = () => {\n const conditions = new Array<string>();\n if (!this.#hierarchyConfig.hideSubCategories && categoriesWithMultipleSubCategories.length > 0) {\n conditions.push(`this.ECInstanceId IN (${categoriesWithMultipleSubCategories.join(\",\")})`);\n }\n if (this.#hierarchyConfig.showElements) {\n conditions.push(`\n this.ECInstanceId IN (\n SELECT e.Category.Id\n FROM ${this.#categoryElementClass} e\n WHERE\n e.Parent.Id IS NULL\n AND e.ECInstanceId NOT IN (SELECT m.ECInstanceId FROM ${this.#categoryModelClass} m)\n )`);\n }\n return conditions.length > 0\n ? {\n selector: `IIF(${conditions.join(\" OR \")}, 1, 0)`,\n }\n : false;\n };\n\n return [\n {\n fullClassName: this.#categoryClass,\n query: {\n ecsql: `\n SELECT\n ${await this.#selectQueryFactory.createSelectClause({\n ecClassId: { selector: ECSql.createRawPropertyValueSelector(\"this\", \"ECClassId\") },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this.#nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: this.#categoryClass,\n }),\n },\n hasChildren: hasChildrenSelector(),\n extendedData: {\n description: { selector: \"this.Description\" },\n isCategory: true,\n imageId: \"icon-layers\",\n hasSubCategories:\n categoriesWithMultipleSubCategories.length > 0\n ? { selector: `IIF(this.ECInstanceId IN (${categoriesWithMultipleSubCategories.join(\",\")}), true, false) ` }\n : false,\n },\n supportsFiltering: true,\n })}\n FROM\n ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n this.ECInstanceId IN (${categories.map((category) => category.id).join(\", \")})\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n },\n },\n ];\n }\n\n private async createCategoryChildrenQuery(props: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n return (\n await Promise.all([\n ...(!this.#hierarchyConfig.hideSubCategories && props.parentNode.extendedData?.hasSubCategories ? [this.createSubCategoriesQuery(props)] : []),\n ...(this.#hierarchyConfig.showElements ? [this.createCategoryElementsQuery(props)] : []),\n ])\n ).reduce((acc, levelDefinition) => acc.concat(levelDefinition), new Array<HierarchyNodesDefinition>());\n }\n\n private async createSubCategoriesQuery({\n parentNodeInstanceIds: categoryIds,\n instanceFilter,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: CLASS_NAME_SubCategory, alias: \"this\" },\n });\n\n return [\n {\n fullClassName: CLASS_NAME_SubCategory,\n query: {\n ecsql: `\n SELECT\n ${await this.#selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"this.ECClassId\" },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this.#nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: CLASS_NAME_SubCategory,\n }),\n },\n extendedData: {\n categoryId: { selector: \"printf('0x%x', this.Parent.Id)\" },\n isSubCategory: true,\n imageId: \"icon-layers-isolate\",\n },\n supportsFiltering: false,\n })}\n FROM ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n NOT this.IsPrivate AND this.Parent.Id IN (${categoryIds.join(\",\")})\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n },\n },\n ];\n }\n\n private async createCategoryElementsQuery({\n parentNodeInstanceIds: categoryIds,\n instanceFilter,\n parentNode,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: this.#categoryElementClass, alias: \"this\" },\n });\n const modelIds: Id64Array = parentNode.extendedData?.isCategoryOfSubModel\n ? parseIdsSelectorResult(parentNode.extendedData?.modelIds)\n : await firstValueFrom(\n this.#idsCache.getCategoriesElementModels(categoryIds).pipe(\n mergeMap(({ models }) => models ?? []),\n distinct(),\n toArray(),\n ),\n );\n\n if (modelIds.length === 0) {\n return [];\n }\n const modeledElements = await firstValueFrom(\n from(modelIds).pipe(\n mergeMap((modelId) => this.#idsCache.getCategoriesModeledElements(modelId, categoryIds)),\n reduce((acc, foundModeledElements) => {\n return acc.concat(foundModeledElements);\n }, new Array<ElementId>()),\n ),\n );\n\n return [\n {\n fullClassName: this.#categoryElementClass,\n query: {\n ecsql: `\n SELECT\n ${await this.#selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"this.ECClassId\" },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this.#nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: this.#categoryElementClass,\n }),\n },\n hasChildren: {\n selector: `\n IIF(\n ${modeledElements.length ? `this.ECInstanceId IN (${modeledElements.join(\",\")})` : `FALSE`},\n 1,\n IFNULL((\n SELECT 1\n FROM ${this.#categoryElementClass} ce\n WHERE ce.Parent.Id = this.ECInstanceId\n LIMIT 1\n ), 0)\n )\n `,\n },\n grouping: {\n byClass: true,\n },\n extendedData: {\n modelId: { selector: \"IdToHex(this.Model.Id)\" },\n categoryId: { selector: \"IdToHex(this.Category.Id)\" },\n imageId: \"icon-item\",\n isElement: true,\n },\n supportsFiltering: true,\n })}\n FROM ${instanceFilterClauses.from} this\n ${parentNode.extendedData?.isCategoryOfSubModel ? \"\" : `JOIN ${CLASS_NAME_InformationPartitionElement} ipe ON ipe.ECInstanceId = this.Model.Id`}\n ${instanceFilterClauses.joins}\n WHERE\n this.Category.Id IN (${categoryIds.join(\",\")})\n AND this.Model.Id IN (${modelIds.join(\",\")})\n AND this.Parent.Id IS NULL\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n },\n },\n ];\n }\n\n private async createElementChildrenQuery({\n parentNodeInstanceIds: elementIds,\n instanceFilter,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: this.#categoryElementClass, alias: \"this\" },\n });\n return [\n {\n fullClassName: this.#categoryElementClass,\n query: {\n ecsql: `\n SELECT\n ${await this.#selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"this.ECClassId\" },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this.#nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: this.#categoryElementClass,\n }),\n },\n hasChildren: {\n selector: `\n IFNULL((\n SELECT 1\n FROM ${this.#categoryElementClass} ce\n JOIN ${CLASS_NAME_Model} m ON ce.Model.Id = m.ECInstanceId\n WHERE ce.Parent.Id = this.ECInstanceId OR (ce.Model.Id = this.ECInstanceId AND m.IsPrivate = false)\n LIMIT 1\n ), 0)\n `,\n },\n grouping: {\n byClass: true,\n },\n extendedData: {\n modelId: { selector: \"IdToHex(this.Model.Id)\" },\n categoryId: { selector: \"IdToHex(this.Category.Id)\" },\n imageId: \"icon-item\",\n isElement: true,\n },\n supportsFiltering: true,\n })}\n FROM ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n this.Parent.Id IN (${elementIds.join(\",\")})\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n },\n },\n ];\n }\n\n public static async createInstanceKeyPaths(props: CategoriesTreeInstanceKeyPathsFromInstanceLabelProps): Promise<NormalizedHierarchySearchPath[]> {\n const labelsFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: props.imodelAccess });\n return createInstanceKeyPathsFromInstanceLabel({\n ...props,\n labelsFactory,\n componentId: props.componentId ?? Guid.createValue(),\n componentName: this.#componentName,\n });\n }\n}\n\nasync function createInstanceKeyPathsFromInstanceLabel(\n props: MarkRequired<CategoriesTreeInstanceKeyPathsFromInstanceLabelProps, \"componentId\"> & {\n labelsFactory: IInstanceLabelSelectClauseFactory;\n componentName: string;\n },\n): Promise<NormalizedHierarchySearchPath[]> {\n const { idsCache, abortSignal, label, viewType, labelsFactory, limit, hierarchyConfig, imodelAccess, componentId, componentName } = props;\n const { categoryClass, elementClass } = getClassesByView(viewType);\n\n const adjustedLabel = label.replace(/[%_\\\\]/g, \"\\\\$&\");\n\n const CATEGORIES_WITH_LABELS_CTE = \"CategoriesWithLabels\";\n const ELEMENTS_WITH_LABELS_CTE = \"ElementsWithLabels\";\n const SUBCATEGORIES_WITH_LABELS_CTE = \"SubCategoriesWithLabels\";\n const DEFINITION_CONTAINERS_WITH_LABELS_CTE = \"DefinitionContainersWithLabels\";\n\n return lastValueFrom(\n idsCache\n .getAllDefinitionContainersAndCategories({\n includeEmpty: props.hierarchyConfig.showEmptyCategories,\n })\n .pipe(\n mergeMap(async ({ definitionContainers, categories }) => {\n if (categories.length === 0) {\n return undefined;\n }\n const [categoryLabelSelectClause, subCategoryLabelSelectClause, elementLabelSelectClause, definitionContainerLabelSelectClause] = await Promise.all(\n [categoryClass, CLASS_NAME_SubCategory, elementClass, ...(definitionContainers.length > 0 ? [CLASS_NAME_DefinitionContainer] : [])].map(\n async (className) => labelsFactory.createSelectClause({ classAlias: \"this\", className }),\n ),\n );\n const ctes = [\n `${CATEGORIES_WITH_LABELS_CTE}(ClassName, ECInstanceId, ChildCount, DisplayLabel) AS (\n SELECT\n 'c',\n this.ECInstanceId,\n COUNT(sc.ECInstanceId),\n ${categoryLabelSelectClause}\n FROM\n ${categoryClass} this\n JOIN ${CLASS_NAME_SubCategory} sc ON sc.Parent.Id = this.ECInstanceId\n WHERE\n this.ECInstanceId IN (${categories.join(\", \")})\n GROUP BY this.ECInstanceId\n )`,\n ...(hierarchyConfig.showElements\n ? [\n `${ELEMENTS_WITH_LABELS_CTE}(ClassName, ECInstanceId, ParentId, DisplayLabel) AS (\n SELECT\n 'e',\n this.ECInstanceId,\n this.Parent.Id,\n ${elementLabelSelectClause}\n FROM\n ${elementClass} this\n JOIN ${CLASS_NAME_Model} m ON this.Model.Id = m.ECInstanceId\n WHERE\n NOT m.IsPrivate\n AND this.Category.Id IN (${categories.join(\", \")})\n )`,\n ]\n : []),\n ...(hierarchyConfig.hideSubCategories\n ? []\n : [\n `${SUBCATEGORIES_WITH_LABELS_CTE}(ClassName, ECInstanceId, ParentId, DisplayLabel) AS (\n SELECT\n 'sc',\n this.ECInstanceId,\n this.Parent.Id,\n ${subCategoryLabelSelectClause}\n FROM\n ${CLASS_NAME_SubCategory} this\n WHERE\n NOT this.IsPrivate\n AND this.Parent.Id IN (${categories.join(\", \")})\n )`,\n ]),\n ...(definitionContainers.length > 0\n ? [\n `${DEFINITION_CONTAINERS_WITH_LABELS_CTE}(ClassName, ECInstanceId, DisplayLabel) AS (\n SELECT\n 'dc',\n this.ECInstanceId,\n ${definitionContainerLabelSelectClause}\n FROM\n ${CLASS_NAME_DefinitionContainer} this\n WHERE\n this.ECInstanceId IN (${definitionContainers.join(\", \")})\n )`,\n ]\n : []),\n ];\n const ecsql = `\n SELECT * FROM (\n SELECT\n c.ClassName AS ClassName,\n c.ECInstanceId AS ECInstanceId\n FROM\n ${CATEGORIES_WITH_LABELS_CTE} c\n WHERE\n c.DisplayLabel LIKE '%' || ? || '%' ESCAPE '\\\\'\n ${\n hierarchyConfig.showElements\n ? `\n UNION ALL\n SELECT\n e.ClassName AS ClassName,\n e.ECInstanceId AS ECInstanceId\n FROM\n ${ELEMENTS_WITH_LABELS_CTE} e\n WHERE\n e.DisplayLabel LIKE '%' || ? || '%' ESCAPE '\\\\'\n `\n : \"\"\n }\n ${\n hierarchyConfig.hideSubCategories\n ? \"\"\n : `\n UNION ALL\n SELECT\n sc.ClassName AS ClassName,\n sc.ECInstanceId AS ECInstanceId\n FROM\n ${CATEGORIES_WITH_LABELS_CTE} c\n JOIN ${SUBCATEGORIES_WITH_LABELS_CTE} sc ON sc.ParentId = c.ECInstanceId\n WHERE\n c.ChildCount > 1\n AND sc.DisplayLabel LIKE '%' || ? || '%' ESCAPE '\\\\'\n `\n }\n ${\n definitionContainers.length > 0\n ? `\n UNION ALL\n SELECT\n dc.ClassName AS ClassName,\n dc.ECInstanceId AS ECInstanceId\n FROM\n ${DEFINITION_CONTAINERS_WITH_LABELS_CTE} dc\n WHERE\n dc.DisplayLabel LIKE '%' || ? || '%' ESCAPE '\\\\'\n `\n : \"\"\n }\n )\n ${limit === undefined ? `LIMIT ${MAX_SEARCH_INSTANCE_KEY_COUNT + 1}` : limit !== \"unbounded\" ? `LIMIT ${limit}` : \"\"}\n `;\n const bindings = [\n { type: \"string\" as const, value: adjustedLabel },\n ...(hierarchyConfig.showElements ? [{ type: \"string\" as const, value: adjustedLabel }] : []),\n ...(hierarchyConfig.hideSubCategories ? [] : [{ type: \"string\" as const, value: adjustedLabel }]),\n ...(definitionContainers.length > 0 ? [{ type: \"string\" as const, value: adjustedLabel }] : []),\n ];\n return { ctes, ecsql, bindings };\n }),\n mergeMap((queryProps) => {\n if (!queryProps) {\n return EMPTY;\n }\n return from(imodelAccess.createQueryReader(queryProps, { restartToken: `${componentName}/${componentId}/filter-by-label`, limit })).pipe(\n catchBeSQLiteInterrupts,\n );\n }),\n releaseMainThreadOnItemsCount(1000),\n map((row): InstanceKey => {\n let className: string;\n switch (row.ClassName) {\n case \"c\":\n className = categoryClass;\n break;\n case \"sc\":\n className = CLASS_NAME_SubCategory;\n break;\n case \"e\":\n className = elementClass;\n break;\n default:\n className = CLASS_NAME_DefinitionContainer;\n break;\n }\n return {\n className,\n id: row.ECInstanceId,\n };\n }),\n toArray(),\n mergeMap((targetItems) => createInstanceKeyPathsFromTargetItems({ ...props, targetItems })),\n toArray(),\n abortSignal ? takeUntil(fromEvent(abortSignal, \"abort\")) : identity,\n defaultIfEmpty([]),\n ),\n );\n}\n\nfunction createInstanceKeyPathsFromTargetItems({\n targetItems,\n imodelAccess,\n viewType,\n hierarchyConfig,\n idsCache,\n limit,\n componentId,\n componentName,\n}: MarkRequired<CategoriesTreeInstanceKeyPathsFromInstanceLabelProps, \"componentId\"> & {\n targetItems: InstanceKey[];\n componentName: string;\n}): Observable<NormalizedHierarchySearchPath> {\n if (limit !== \"unbounded\" && targetItems.length > (limit ?? MAX_SEARCH_INSTANCE_KEY_COUNT)) {\n throw new SearchLimitExceededError(limit ?? MAX_SEARCH_INSTANCE_KEY_COUNT);\n }\n const { categoryClass } = getClassesByView(viewType);\n return fromWithRelease({ source: targetItems, releaseOnCount: 500 }).pipe(\n reduce(\n (acc, { id, className }) => {\n if (className === categoryClass) {\n acc.categoryIds.push(id);\n return acc;\n }\n if (className === CLASS_NAME_DefinitionContainer) {\n acc.definitionContainerIds.push(id);\n return acc;\n }\n if (className === CLASS_NAME_SubCategory) {\n if (hierarchyConfig.hideSubCategories) {\n return acc;\n }\n acc.subCategoryIds.push(id);\n return acc;\n }\n\n if (!hierarchyConfig.showElements) {\n return acc;\n }\n acc.elementIds.push(id);\n return acc;\n },\n {\n definitionContainerIds: new Array<DefinitionContainerId>(),\n categoryIds: new Array<CategoryId>(),\n subCategoryIds: new Array<SubCategoryId>(),\n elementIds: new Array<ElementId>(),\n },\n ),\n mergeMap((ids) => {\n const elementsLength = ids.elementIds.length;\n return merge(\n fromWithRelease({ source: ids.definitionContainerIds, releaseOnCount: 200 }).pipe(\n mergeMap((id) => idsCache.getInstanceKeyPaths({ definitionContainerId: id })),\n map((path) => ({ path, options: { reveal: true } })),\n ),\n fromWithRelease({ source: ids.categoryIds, releaseOnCount: 200 }).pipe(\n mergeMap((id) => idsCache.getInstanceKeyPaths({ categoryId: id })),\n map((path) => ({ path, options: { reveal: true } })),\n ),\n fromWithRelease({ source: ids.subCategoryIds, releaseOnCount: 200 }).pipe(\n mergeMap((id) => idsCache.getInstanceKeyPaths({ subCategoryId: id })),\n map((path) => ({ path, options: { reveal: true } })),\n ),\n from(ids.elementIds).pipe(\n bufferCount(getOptimalBatchSize({ totalSize: elementsLength, maximumBatchSize: 5000 })),\n releaseMainThreadOnItemsCount(1),\n mergeMap(\n (block, chunkIndex) =>\n createGeometricElementInstanceKeyPaths({\n imodelAccess,\n idsCache,\n hierarchyConfig,\n viewType,\n targetItems: block,\n chunkIndex,\n componentId,\n componentName,\n }),\n 10,\n ),\n ),\n );\n }),\n );\n}\n\nfunction createGeometricElementInstanceKeyPaths(props: {\n imodelAccess: ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n idsCache: CategoriesTreeIdsCache;\n hierarchyConfig: CategoriesTreeHierarchyConfiguration;\n viewType: \"2d\" | \"3d\";\n targetItems: Id64Array;\n componentId: GuidString;\n componentName: string;\n chunkIndex: number;\n}): Observable<NormalizedHierarchySearchPath> {\n const separator = \";\";\n const { targetItems, chunkIndex, componentId, componentName, hierarchyConfig, idsCache, imodelAccess, viewType } = props;\n const { categoryClass, elementClass, modelClass } = getClassesByView(viewType);\n if (targetItems.length === 0 || !hierarchyConfig.showElements) {\n return EMPTY;\n }\n\n return defer(() => {\n const ctes = [\n `CategoriesElementsHierarchy(ECInstanceId, ParentId, ModelId, Path) AS (\n SELECT\n e.ECInstanceId,\n e.Parent.Id,\n e.Model.Id,\n IIF(e.Parent.Id IS NULL,\n 'm${separator}' || CAST(IdToHex([m].[ECInstanceId]) AS TEXT) || '${separator}c${separator}' || CAST(IdToHex([c].[ECInstanceId]) AS TEXT) || '${separator}e${separator}' || CAST(IdToHex([e].[ECInstanceId]) AS TEXT),\n 'e${separator}' || CAST(IdToHex([e].[ECInstanceId]) AS TEXT)\n )\n FROM ${elementClass} e\n LEFT JOIN ${modelClass} m ON (e.Parent.Id IS NULL AND m.ECInstanceId = e.Model.Id)\n LEFT JOIN ${categoryClass} c ON (e.Parent.Id IS NULL AND c.ECInstanceId = e.Category.Id)\n WHERE e.ECInstanceId IN (${targetItems.join(\",\")})\n\n UNION ALL\n\n SELECT\n pe.ECInstanceId,\n pe.Parent.Id,\n pe.Model.Id,\n IIF(pe.Parent.Id IS NULL,\n 'm${separator}' || CAST(IdToHex([m].[ECInstanceId]) AS TEXT) || '${separator}c${separator}' || CAST(IdToHex([c].[ECInstanceId]) AS TEXT) || '${separator}e${separator}' || CAST(IdToHex([pe].[ECInstanceId]) AS TEXT) || '${separator}' || ce.Path,\n 'e${separator}' || CAST(IdToHex([pe].[ECInstanceId]) AS TEXT) || '${separator}' || ce.Path\n )\n FROM CategoriesElementsHierarchy ce\n JOIN ${elementClass} pe ON (pe.ECInstanceId = ce.ParentId OR pe.ECInstanceId = ce.ModelId AND ce.ParentId IS NULL)\n LEFT JOIN ${modelClass} m ON (pe.Parent.Id IS NULL AND m.ECInstanceId = pe.Model.Id)\n LEFT JOIN ${categoryClass} c ON (pe.Parent.Id IS NULL AND c.ECInstanceId = pe.Category.Id)\n )`,\n ];\n const ecsql = `\n SELECT mce.Path\n FROM CategoriesElementsHierarchy mce\n WHERE mce.ParentId IS NULL\n `;\n\n return imodelAccess.createQueryReader(\n { ctes, ecsql },\n { rowFormat: \"Indexes\", limit: \"unbounded\", restartToken: `${componentName}/${componentId}/element-paths/${chunkIndex}` },\n );\n }).pipe(\n catchBeSQLiteInterrupts,\n releaseMainThreadOnItemsCount(300),\n map((row) => parseQueryRow(row, separator, elementClass, categoryClass, modelClass)),\n mergeMap((elementHierarchyPath) =>\n forkJoin({ elementHierarchyPath: of(elementHierarchyPath), pathToCategory: idsCache.getInstanceKeyPaths({ categoryId: elementHierarchyPath[0].id }) }),\n ),\n map(({ elementHierarchyPath, pathToCategory }) => {\n pathToCategory.pop(); // category is already included in the element hierarchy path\n const path = [...pathToCategory, ...elementHierarchyPath];\n return { path, options: { reveal: true } };\n }),\n );\n}\n\nfunction parseQueryRow(row: ECSqlQueryRow, separator: string, elementClassName: string, categoryClassName: string, modelClassName: string) {\n const rowElements: string[] = row[0].split(separator);\n const path = new Array<InstanceKey>();\n for (let i = 0; i < rowElements.length; i += 2) {\n switch (rowElements[i]) {\n case \"e\":\n path.push({ className: elementClassName, id: rowElements[i + 1] });\n break;\n case \"c\":\n path.push({ className: categoryClassName, id: rowElements[i + 1] });\n break;\n case \"m\":\n // Ignore first model since it isn't in hierarchy\n if (i === 0) {\n break;\n }\n path.push({ className: modelClassName, id: rowElements[i + 1] });\n break;\n }\n }\n\n return path;\n}\n"]}
1
+ {"version":3,"file":"CategoriesTreeDefinition.js","sourceRoot":"","sources":["../../../../../../src/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport {\n bufferCount,\n defaultIfEmpty,\n defer,\n distinct,\n EMPTY,\n firstValueFrom,\n forkJoin,\n from,\n fromEvent,\n identity,\n lastValueFrom,\n map,\n merge,\n mergeAll,\n mergeMap,\n of,\n reduce,\n takeUntil,\n toArray,\n} from \"rxjs\";\nimport { assert, Guid } from \"@itwin/core-bentley\";\nimport { createNodesQueryClauseFactory, createPredicateBasedHierarchyDefinition, HierarchyNode, ProcessedHierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { createBisInstanceLabelSelectClauseFactory, ECSql } from \"@itwin/presentation-shared\";\nimport {\n CLASS_NAME_DefinitionContainer,\n CLASS_NAME_InformationPartitionElement,\n CLASS_NAME_ISubModeledElement,\n CLASS_NAME_Model,\n CLASS_NAME_SubCategory,\n} from \"../common/internal/ClassNameDefinitions.js\";\nimport { catchBeSQLiteInterrupts } from \"../common/internal/UseErrorState.js\";\nimport {\n createIdsSelector,\n fromWithRelease,\n getClassesByView,\n getOptimalBatchSize,\n groupingNodeDataFromChildren,\n parseIdsSelectorResult,\n releaseMainThreadOnItemsCount,\n} from \"../common/internal/Utils.js\";\nimport { SearchLimitExceededError } from \"../common/TreeErrors.js\";\n\nimport type { Observable } from \"rxjs\";\nimport type { GuidString, Id64Array, MarkRequired } from \"@itwin/core-bentley\";\nimport type {\n DefineHierarchyLevelProps,\n DefineInstanceNodeChildHierarchyLevelProps,\n DefineRootHierarchyLevelProps,\n GenericInstanceFilter,\n HierarchyDefinition,\n HierarchyLevelDefinition,\n HierarchyNodesDefinition,\n LimitingECSqlQueryExecutor,\n NodePreProcessor,\n NodesQueryClauseFactory,\n} from \"@itwin/presentation-hierarchies\";\nimport type {\n ECClassHierarchyInspector,\n ECSchemaProvider,\n ECSqlBinding,\n ECSqlQueryRow,\n IInstanceLabelSelectClauseFactory,\n InstanceKey,\n} from \"@itwin/presentation-shared\";\nimport type { CategoryId, DefinitionContainerId, ElementId, ModelId, SubCategoryId } from \"../common/internal/Types.js\";\nimport type { NormalizedHierarchySearchPath } from \"../common/Utils.js\";\nimport type { CategoriesTreeIdsCache, CategoryInfo } from \"./internal/CategoriesTreeIdsCache.js\";\n\nconst MAX_SEARCH_INSTANCE_KEY_COUNT = 100;\n\ninterface CategoriesTreeDefinitionProps {\n imodelAccess: ECSchemaProvider & ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n viewType: \"2d\" | \"3d\";\n idsCache: CategoriesTreeIdsCache;\n hierarchyConfig: CategoriesTreeHierarchyConfiguration;\n}\n\ninterface CategoriesTreeInstanceKeyPathsFromInstanceLabelProps {\n imodelAccess: ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n label: string;\n viewType: \"2d\" | \"3d\";\n limit?: number | \"unbounded\";\n idsCache: CategoriesTreeIdsCache;\n hierarchyConfig: CategoriesTreeHierarchyConfiguration;\n abortSignal?: AbortSignal;\n componentId?: GuidString;\n}\n\n/**\n * Defines hierarchy configuration supported by `CategoriesTree`.\n * @beta\n */\nexport interface CategoriesTreeHierarchyConfiguration {\n /** Should SubCategories be hidden. Defaults to `false` */\n hideSubCategories: boolean;\n /** Should Elements be shown. Defaults to `false` */\n showElements: boolean;\n /** Should categories without elements be shown. Defaults to `false`. */\n showEmptyCategories: boolean;\n}\n\n/** @internal */\nexport const defaultHierarchyConfiguration: CategoriesTreeHierarchyConfiguration = {\n hideSubCategories: false,\n showElements: false,\n showEmptyCategories: false,\n};\n\n/** @internal */\nexport class CategoriesTreeDefinition implements HierarchyDefinition {\n #impl: Promise<HierarchyDefinition> | undefined;\n #selectQueryFactory: NodesQueryClauseFactory;\n #nodeLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory;\n #idsCache: CategoriesTreeIdsCache;\n #hierarchyConfig: CategoriesTreeHierarchyConfiguration;\n #iModelAccess: ECSchemaProvider & ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n #categoryClass: string;\n #categoryElementClass: string;\n #categoryModelClass: string;\n static #componentName = \"CategoriesTreeDefinition\";\n\n public constructor(props: CategoriesTreeDefinitionProps) {\n this.#iModelAccess = props.imodelAccess;\n this.#idsCache = props.idsCache;\n this.#nodeLabelSelectClauseFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: props.imodelAccess });\n this.#selectQueryFactory = createNodesQueryClauseFactory({\n imodelAccess: props.imodelAccess,\n instanceLabelSelectClauseFactory: this.#nodeLabelSelectClauseFactory,\n });\n this.#hierarchyConfig = props.hierarchyConfig;\n const { categoryClass, elementClass, modelClass } = getClassesByView(props.viewType);\n this.#categoryClass = categoryClass;\n this.#categoryElementClass = elementClass;\n this.#categoryModelClass = modelClass;\n }\n\n public preProcessNode: NodePreProcessor = async (node) => {\n if (node.extendedData?.isCategory) {\n return {\n ...node,\n extendedData: {\n ...node.extendedData,\n modelIds: parseIdsSelectorResult(node.extendedData.modelIds),\n },\n };\n }\n return node;\n };\n\n public async postProcessNode(node: ProcessedHierarchyNode): Promise<ProcessedHierarchyNode> {\n if (ProcessedHierarchyNode.isGroupingNode(node)) {\n const modelElementsMap = new Map<ModelId, { elementIds: Set<ElementId>; categoryOfTopMostParentElement: CategoryId }>();\n for (const child of node.children) {\n let modelEntry = modelElementsMap.get(child.extendedData?.modelId);\n if (!modelEntry) {\n modelEntry = {\n elementIds: new Set(),\n categoryOfTopMostParentElement: child.extendedData?.categoryOfTopMostParentElement,\n };\n modelElementsMap.set(child.extendedData?.modelId, modelEntry);\n }\n assert(child.key.type === \"instances\");\n for (const { id } of child.key.instanceKeys) {\n modelEntry.elementIds.add(id);\n }\n }\n\n const { hasSearchTargetAncestor, hasDirectNonSearchTargets, childrenCount, searchTargets } = groupingNodeDataFromChildren(node.children);\n const firstChild = node.children[0];\n assert(HierarchyNode.isInstancesNode(firstChild));\n return {\n ...node,\n label: node.label,\n extendedData: {\n ...node.extendedData,\n topMostParentElementId: firstChild.key.instanceKeys.every((instanceKey) => instanceKey.id !== firstChild.extendedData?.topMostParentElementId)\n ? firstChild.extendedData?.topMostParentElementId\n : undefined,\n // add `categoryId` from the first grouped element\n categoryId: firstChild.extendedData?.categoryId,\n modelElementsMap,\n childrenCount,\n ...(!!searchTargets?.size ? { searchTargets } : {}),\n ...(hasDirectNonSearchTargets ? { hasDirectNonSearchTargets } : {}),\n ...(hasSearchTargetAncestor ? { hasSearchTargetAncestor } : {}),\n // `imageId` is assigned to instance nodes at query time, but grouping ones need to\n // be handled during post-processing\n imageId: \"icon-ec-class\",\n },\n };\n }\n return node;\n }\n\n private async getHierarchyDefinition(): Promise<HierarchyDefinition> {\n this.#impl ??= (async () => {\n const isDefinitionContainerSupported = await firstValueFrom(this.#idsCache.getIsDefinitionContainerSupported());\n return createPredicateBasedHierarchyDefinition({\n classHierarchyInspector: this.#iModelAccess,\n hierarchy: {\n rootNodes: async (requestProps: DefineRootHierarchyLevelProps) => this.createDefinitionContainersAndCategoriesQuery(requestProps),\n childNodes: [\n ...(this.#hierarchyConfig.showElements\n ? [\n {\n parentInstancesNodePredicate: this.#categoryElementClass,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createElementChildrenQuery(requestProps),\n },\n {\n parentInstancesNodePredicate: CLASS_NAME_ISubModeledElement,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createISubModeledElementChildrenQuery(requestProps),\n },\n {\n parentInstancesNodePredicate: this.#categoryModelClass,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createGeometricModelChildrenQuery(requestProps),\n },\n ]\n : []),\n ...(this.#hierarchyConfig.hideSubCategories && !this.#hierarchyConfig.showElements\n ? []\n : [\n {\n parentInstancesNodePredicate: this.#categoryClass,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createCategoryChildrenQuery(requestProps),\n },\n ]),\n ...(isDefinitionContainerSupported\n ? [\n {\n parentInstancesNodePredicate: CLASS_NAME_DefinitionContainer,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) =>\n this.createDefinitionContainersAndCategoriesQuery(requestProps),\n },\n ]\n : []),\n ],\n },\n });\n })();\n return this.#impl;\n }\n\n public async defineHierarchyLevel(props: DefineHierarchyLevelProps) {\n return (await this.getHierarchyDefinition()).defineHierarchyLevel(props);\n }\n\n private async createISubModeledElementChildrenQuery({\n parentNodeInstanceIds: elementIds,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n // note: we do not apply hierarchy level filtering on this hierarchy level, because it's always\n // hidden - the filter will get applied on the child hierarchy levels\n return [\n {\n fullClassName: this.#categoryModelClass,\n query: {\n ecsql: `\n SELECT\n ${await this.#selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"this.ECClassId\" },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: \"\", // doesn't matter - the node is always hidden\n hideNodeInHierarchy: true,\n hasChildren: true,\n extendedData: {\n isModel: true,\n },\n })}\n FROM ${this.#categoryModelClass} this\n WHERE\n this.ModeledElement.Id IN (${elementIds.map(() => \"?\").join(\",\")})\n AND NOT this.IsPrivate\n AND this.ECInstanceId IN (SELECT Model.Id FROM ${this.#categoryElementClass})\n `,\n bindings: [...elementIds.map((id): ECSqlBinding => ({ type: \"id\", value: id }))],\n },\n },\n ];\n }\n\n private async createGeometricModelChildrenQuery({\n parentNodeInstanceIds: modelIds,\n instanceFilter,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const [instanceFilterClauses, categoryIds] = await Promise.all([\n this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: this.#categoryClass, alias: \"this\" },\n }),\n firstValueFrom(this.#idsCache.getCategoriesOfModelsTopMostElements(modelIds).pipe(map((categoriesSet) => [...categoriesSet]))),\n ]);\n if (categoryIds.length === 0) {\n return [];\n }\n\n return [\n {\n fullClassName: this.#categoryClass,\n query: {\n ecsql: `\n SELECT\n ${await this.#selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"this.ECClassId\" },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this.#nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: this.#categoryClass,\n }),\n },\n grouping: { byLabel: { action: \"merge\", groupId: \"category\" } },\n hasChildren: true,\n extendedData: {\n imageId: \"icon-layers\",\n isCategory: true,\n modelIds: { selector: createIdsSelector(modelIds) },\n isCategoryOfSubModel: true,\n },\n supportsFiltering: true,\n })}\n FROM ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE InVirtualSet(?, this.ECInstanceId)\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n bindings: [{ type: \"idset\", value: categoryIds }],\n },\n },\n ];\n }\n\n private async createDefinitionContainersAndCategoriesQuery(props: {\n parentNodeInstanceIds?: Id64Array;\n instanceFilter?: GenericInstanceFilter;\n }): Promise<HierarchyLevelDefinition> {\n const { parentNodeInstanceIds, instanceFilter } = props;\n const { definitionContainers, categories } = await firstValueFrom(\n parentNodeInstanceIds === undefined\n ? this.#idsCache.getRootDefinitionContainersAndCategories({ includeEmpty: this.#hierarchyConfig.showEmptyCategories })\n : this.#idsCache.getDirectChildDefinitionContainersAndCategories({\n parentDefinitionContainerIds: parentNodeInstanceIds,\n includeEmpty: this.#hierarchyConfig.showEmptyCategories,\n }),\n );\n const hierarchyDefinition = new Array<HierarchyNodesDefinition>();\n if (categories.length > 0) {\n (await this.createCategoriesQuery({ categories, instanceFilter })).forEach((def) => hierarchyDefinition.push(def));\n }\n if (definitionContainers.length > 0) {\n (await this.createDefinitionContainersQuery({ definitionContainerIds: definitionContainers, instanceFilter })).forEach((def) =>\n hierarchyDefinition.push(def),\n );\n }\n return hierarchyDefinition;\n }\n\n private async createDefinitionContainersQuery({\n definitionContainerIds,\n instanceFilter,\n }: {\n definitionContainerIds: Id64Array;\n instanceFilter?: GenericInstanceFilter;\n }): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: CLASS_NAME_DefinitionContainer, alias: \"this\" },\n });\n\n return [\n {\n fullClassName: CLASS_NAME_DefinitionContainer,\n query: {\n ecsql: `\n SELECT\n ${await this.#selectQueryFactory.createSelectClause({\n ecClassId: { selector: ECSql.createRawPropertyValueSelector(\"this\", \"ECClassId\") },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this.#nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: CLASS_NAME_DefinitionContainer,\n }),\n },\n extendedData: {\n isDefinitionContainer: true,\n imageId: \"icon-definition-container\",\n },\n hasChildren: true,\n supportsFiltering: true,\n })}\n FROM\n ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n this.ECInstanceId IN (${definitionContainerIds.join(\", \")})\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n },\n },\n ];\n }\n\n private async createCategoriesQuery({\n categories,\n instanceFilter,\n }: {\n categories: Array<CategoryInfo>;\n instanceFilter?: GenericInstanceFilter;\n }): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: this.#categoryClass, alias: \"this\" },\n });\n const categoriesWithMultipleSubCategories = categories\n .filter((categoryInfo) => categoryInfo.subCategoryChildCount > 1)\n .map((categoryInfo) => categoryInfo.id);\n\n const hasChildrenSelector = () => {\n const conditions = new Array<string>();\n if (!this.#hierarchyConfig.hideSubCategories && categoriesWithMultipleSubCategories.length > 0) {\n conditions.push(`this.ECInstanceId IN (${categoriesWithMultipleSubCategories.join(\",\")})`);\n }\n if (this.#hierarchyConfig.showElements) {\n conditions.push(`\n this.ECInstanceId IN (\n SELECT e.Category.Id\n FROM ${this.#categoryElementClass} e\n WHERE\n e.Parent.Id IS NULL\n AND e.ECInstanceId NOT IN (SELECT m.ECInstanceId FROM ${this.#categoryModelClass} m)\n )`);\n }\n return conditions.length > 0\n ? {\n selector: `IIF(${conditions.join(\" OR \")}, 1, 0)`,\n }\n : false;\n };\n\n return [\n {\n fullClassName: this.#categoryClass,\n query: {\n ecsql: `\n SELECT\n ${await this.#selectQueryFactory.createSelectClause({\n ecClassId: { selector: ECSql.createRawPropertyValueSelector(\"this\", \"ECClassId\") },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this.#nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: this.#categoryClass,\n }),\n },\n hasChildren: hasChildrenSelector(),\n extendedData: {\n description: { selector: \"this.Description\" },\n isCategory: true,\n imageId: \"icon-layers\",\n hasSubCategories:\n categoriesWithMultipleSubCategories.length > 0\n ? { selector: `IIF(this.ECInstanceId IN (${categoriesWithMultipleSubCategories.join(\",\")}), true, false) ` }\n : false,\n },\n supportsFiltering: true,\n })}\n FROM\n ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n this.ECInstanceId IN (${categories.map((category) => category.id).join(\", \")})\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n },\n },\n ];\n }\n\n private async createCategoryChildrenQuery(props: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n return (\n await Promise.all([\n ...(!this.#hierarchyConfig.hideSubCategories && props.parentNode.extendedData?.hasSubCategories ? [this.createSubCategoriesQuery(props)] : []),\n ...(this.#hierarchyConfig.showElements ? [this.createCategoryElementsQuery(props)] : []),\n ])\n ).reduce((acc, levelDefinition) => acc.concat(levelDefinition), new Array<HierarchyNodesDefinition>());\n }\n\n private async createSubCategoriesQuery({\n parentNodeInstanceIds: categoryIds,\n instanceFilter,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: CLASS_NAME_SubCategory, alias: \"this\" },\n });\n\n return [\n {\n fullClassName: CLASS_NAME_SubCategory,\n query: {\n ecsql: `\n SELECT\n ${await this.#selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"this.ECClassId\" },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this.#nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: CLASS_NAME_SubCategory,\n }),\n },\n extendedData: {\n categoryId: { selector: \"printf('0x%x', this.Parent.Id)\" },\n isSubCategory: true,\n imageId: \"icon-layers-isolate\",\n },\n supportsFiltering: false,\n })}\n FROM ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n NOT this.IsPrivate AND this.Parent.Id IN (${categoryIds.join(\",\")})\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n },\n },\n ];\n }\n\n private createElementChildrenCountSelector(props: { elementIdSelector: string }): string {\n return `(\n WITH RECURSIVE\n ElementWithParent(id) AS (\n SELECT e.ECInstanceId\n FROM ${this.#categoryElementClass} e\n WHERE e.ECInstanceId = ${props.elementIdSelector}\n UNION ALL\n SELECT c.ECInstanceId\n FROM ${this.#categoryElementClass} c\n JOIN ElementWithParent p ON p.id = c.Parent.Id\n )\n SELECT COUNT(1) - 1\n FROM ElementWithParent\n )`;\n }\n\n private async createCategoryElementsQuery({\n parentNodeInstanceIds: categoryIds,\n instanceFilter,\n parentNode,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: this.#categoryElementClass, alias: \"this\" },\n });\n const modelIds: Id64Array = parentNode.extendedData?.isCategoryOfSubModel\n ? parseIdsSelectorResult(parentNode.extendedData?.modelIds)\n : await firstValueFrom(\n from(categoryIds).pipe(\n mergeMap((categoryId) => this.#idsCache.getModels({ categoryId })),\n mergeAll(),\n distinct(),\n toArray(),\n ),\n );\n\n if (modelIds.length === 0) {\n return [];\n }\n const modeledElements = await firstValueFrom(\n from(modelIds).pipe(\n mergeMap((modelId) =>\n from(categoryIds).pipe(\n mergeMap((categoryId) => this.#idsCache.getSubModels({ modelId, categoryId })),\n mergeAll(),\n ),\n ),\n toArray(),\n ),\n );\n const bindings = new Array<ECSqlBinding>();\n categoryIds.forEach((id) => bindings.push({ type: \"id\", value: id }));\n modelIds.forEach((id) => bindings.push({ type: \"id\", value: id }));\n return [\n {\n fullClassName: this.#categoryElementClass,\n query: {\n ecsql: `\n SELECT\n ${await this.#selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"this.ECClassId\" },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this.#nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: this.#categoryElementClass,\n }),\n },\n hasChildren: {\n selector: `\n IIF(\n ${modeledElements.length ? `this.ECInstanceId IN (${modeledElements.join(\",\")})` : `FALSE`},\n 1,\n IFNULL((\n SELECT 1\n FROM ${this.#categoryElementClass} ce\n WHERE ce.Parent.Id = this.ECInstanceId\n LIMIT 1\n ), 0)\n )\n `,\n },\n grouping: {\n byClass: true,\n },\n extendedData: {\n modelId: { selector: \"IdToHex(this.Model.Id)\" },\n categoryId: { selector: \"IdToHex(this.Category.Id)\" },\n imageId: \"icon-item\",\n isElement: true,\n childrenCount: { selector: this.createElementChildrenCountSelector({ elementIdSelector: \"this.ECInstanceId\" }) },\n categoryOfTopMostParentElement: { selector: \"IdToHex(this.Category.Id)\" },\n topMostParentElementId: { selector: \"IdToHex(this.ECInstanceId)\" },\n },\n supportsFiltering: true,\n })}\n FROM ${instanceFilterClauses.from} this\n ${parentNode.extendedData?.isCategoryOfSubModel ? \"\" : `JOIN ${CLASS_NAME_InformationPartitionElement} ipe ON ipe.ECInstanceId = this.Model.Id`}\n ${instanceFilterClauses.joins}\n WHERE\n this.Category.Id IN (${categoryIds.map(() => \"?\").join(\",\")})\n AND this.Model.Id IN (${modelIds.map(() => \"?\").join(\",\")})\n AND this.Parent.Id IS NULL\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n bindings,\n },\n },\n ];\n }\n\n private async createElementChildrenQuery({\n parentNodeInstanceIds: elementIds,\n instanceFilter,\n parentNode,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: this.#categoryElementClass, alias: \"this\" },\n });\n const bindings = new Array<ECSqlBinding>();\n elementIds.forEach((id) => bindings.push({ type: \"id\", value: id }));\n return [\n {\n fullClassName: this.#categoryElementClass,\n query: {\n ecsql: `\n SELECT\n ${await this.#selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"this.ECClassId\" },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this.#nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: this.#categoryElementClass,\n }),\n },\n hasChildren: {\n selector: `\n IFNULL((\n SELECT 1\n FROM ${this.#categoryElementClass} ce\n JOIN ${CLASS_NAME_Model} m ON ce.Model.Id = m.ECInstanceId\n WHERE ce.Parent.Id = this.ECInstanceId OR (ce.Model.Id = this.ECInstanceId AND m.IsPrivate = false)\n LIMIT 1\n ), 0)\n `,\n },\n grouping: {\n byClass: true,\n },\n extendedData: {\n modelId: { selector: \"IdToHex(this.Model.Id)\" },\n categoryId: { selector: \"IdToHex(this.Category.Id)\" },\n imageId: \"icon-item\",\n isElement: true,\n childrenCount: { selector: this.createElementChildrenCountSelector({ elementIdSelector: \"this.ECInstanceId\" }) },\n categoryOfTopMostParentElement: {\n selector: `IdToHex(${parentNode.extendedData?.categoryOfTopMostParentElement})`,\n },\n topMostParentElementId: { selector: `IdToHex(${parentNode.extendedData?.topMostParentElementId})` },\n },\n supportsFiltering: true,\n })}\n FROM ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n this.Parent.Id IN (${elementIds.join(\",\")})\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n },\n },\n ];\n }\n\n public static async createInstanceKeyPaths(props: CategoriesTreeInstanceKeyPathsFromInstanceLabelProps): Promise<NormalizedHierarchySearchPath[]> {\n const labelsFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: props.imodelAccess });\n return createInstanceKeyPathsFromInstanceLabel({\n ...props,\n labelsFactory,\n componentId: props.componentId ?? Guid.createValue(),\n componentName: this.#componentName,\n });\n }\n}\n\nasync function createInstanceKeyPathsFromInstanceLabel(\n props: MarkRequired<CategoriesTreeInstanceKeyPathsFromInstanceLabelProps, \"componentId\"> & {\n labelsFactory: IInstanceLabelSelectClauseFactory;\n componentName: string;\n },\n): Promise<NormalizedHierarchySearchPath[]> {\n const { idsCache, abortSignal, label, viewType, labelsFactory, limit, hierarchyConfig, imodelAccess, componentId, componentName } = props;\n const { categoryClass, elementClass } = getClassesByView(viewType);\n\n const adjustedLabel = label.replace(/[%_\\\\]/g, \"\\\\$&\");\n\n const CATEGORIES_WITH_LABELS_CTE = \"CategoriesWithLabels\";\n const ELEMENTS_WITH_LABELS_CTE = \"ElementsWithLabels\";\n const SUBCATEGORIES_WITH_LABELS_CTE = \"SubCategoriesWithLabels\";\n const DEFINITION_CONTAINERS_WITH_LABELS_CTE = \"DefinitionContainersWithLabels\";\n\n return lastValueFrom(\n idsCache\n .getAllDefinitionContainersAndCategories({\n includeEmpty: props.hierarchyConfig.showEmptyCategories,\n })\n .pipe(\n mergeMap(async ({ definitionContainers, categories }) => {\n if (categories.length === 0) {\n return undefined;\n }\n const [categoryLabelSelectClause, subCategoryLabelSelectClause, elementLabelSelectClause, definitionContainerLabelSelectClause] = await Promise.all(\n [categoryClass, CLASS_NAME_SubCategory, elementClass, ...(definitionContainers.length > 0 ? [CLASS_NAME_DefinitionContainer] : [])].map(\n async (className) => labelsFactory.createSelectClause({ classAlias: \"this\", className }),\n ),\n );\n const ctes = [\n `${CATEGORIES_WITH_LABELS_CTE}(ClassName, ECInstanceId, ChildCount, DisplayLabel) AS (\n SELECT\n 'c',\n this.ECInstanceId,\n COUNT(sc.ECInstanceId),\n ${categoryLabelSelectClause}\n FROM\n ${categoryClass} this\n JOIN ${CLASS_NAME_SubCategory} sc ON sc.Parent.Id = this.ECInstanceId\n WHERE\n this.ECInstanceId IN (${categories.join(\", \")})\n GROUP BY this.ECInstanceId\n )`,\n ...(hierarchyConfig.showElements\n ? [\n `${ELEMENTS_WITH_LABELS_CTE}(ClassName, ECInstanceId, ParentId, DisplayLabel) AS (\n SELECT\n 'e',\n this.ECInstanceId,\n this.Parent.Id,\n ${elementLabelSelectClause}\n FROM\n ${elementClass} this\n JOIN ${CLASS_NAME_Model} m ON this.Model.Id = m.ECInstanceId\n WHERE\n NOT m.IsPrivate\n AND this.Category.Id IN (${categories.join(\", \")})\n )`,\n ]\n : []),\n ...(hierarchyConfig.hideSubCategories\n ? []\n : [\n `${SUBCATEGORIES_WITH_LABELS_CTE}(ClassName, ECInstanceId, ParentId, DisplayLabel) AS (\n SELECT\n 'sc',\n this.ECInstanceId,\n this.Parent.Id,\n ${subCategoryLabelSelectClause}\n FROM\n ${CLASS_NAME_SubCategory} this\n WHERE\n NOT this.IsPrivate\n AND this.Parent.Id IN (${categories.join(\", \")})\n )`,\n ]),\n ...(definitionContainers.length > 0\n ? [\n `${DEFINITION_CONTAINERS_WITH_LABELS_CTE}(ClassName, ECInstanceId, DisplayLabel) AS (\n SELECT\n 'dc',\n this.ECInstanceId,\n ${definitionContainerLabelSelectClause}\n FROM\n ${CLASS_NAME_DefinitionContainer} this\n WHERE\n this.ECInstanceId IN (${definitionContainers.join(\", \")})\n )`,\n ]\n : []),\n ];\n const ecsql = `\n SELECT * FROM (\n SELECT\n c.ClassName AS ClassName,\n c.ECInstanceId AS ECInstanceId\n FROM\n ${CATEGORIES_WITH_LABELS_CTE} c\n WHERE\n c.DisplayLabel LIKE '%' || ? || '%' ESCAPE '\\\\'\n ${\n hierarchyConfig.showElements\n ? `\n UNION ALL\n SELECT\n e.ClassName AS ClassName,\n e.ECInstanceId AS ECInstanceId\n FROM\n ${ELEMENTS_WITH_LABELS_CTE} e\n WHERE\n e.DisplayLabel LIKE '%' || ? || '%' ESCAPE '\\\\'\n `\n : \"\"\n }\n ${\n hierarchyConfig.hideSubCategories\n ? \"\"\n : `\n UNION ALL\n SELECT\n sc.ClassName AS ClassName,\n sc.ECInstanceId AS ECInstanceId\n FROM\n ${CATEGORIES_WITH_LABELS_CTE} c\n JOIN ${SUBCATEGORIES_WITH_LABELS_CTE} sc ON sc.ParentId = c.ECInstanceId\n WHERE\n c.ChildCount > 1\n AND sc.DisplayLabel LIKE '%' || ? || '%' ESCAPE '\\\\'\n `\n }\n ${\n definitionContainers.length > 0\n ? `\n UNION ALL\n SELECT\n dc.ClassName AS ClassName,\n dc.ECInstanceId AS ECInstanceId\n FROM\n ${DEFINITION_CONTAINERS_WITH_LABELS_CTE} dc\n WHERE\n dc.DisplayLabel LIKE '%' || ? || '%' ESCAPE '\\\\'\n `\n : \"\"\n }\n )\n ${limit === undefined ? `LIMIT ${MAX_SEARCH_INSTANCE_KEY_COUNT + 1}` : limit !== \"unbounded\" ? `LIMIT ${limit}` : \"\"}\n `;\n const bindings = [\n { type: \"string\" as const, value: adjustedLabel },\n ...(hierarchyConfig.showElements ? [{ type: \"string\" as const, value: adjustedLabel }] : []),\n ...(hierarchyConfig.hideSubCategories ? [] : [{ type: \"string\" as const, value: adjustedLabel }]),\n ...(definitionContainers.length > 0 ? [{ type: \"string\" as const, value: adjustedLabel }] : []),\n ];\n return { ctes, ecsql, bindings };\n }),\n mergeMap((queryProps) => {\n if (!queryProps) {\n return EMPTY;\n }\n return from(imodelAccess.createQueryReader(queryProps, { restartToken: `${componentName}/${componentId}/filter-by-label`, limit })).pipe(\n catchBeSQLiteInterrupts,\n );\n }),\n releaseMainThreadOnItemsCount(1000),\n map((row): InstanceKey => {\n let className: string;\n switch (row.ClassName) {\n case \"c\":\n className = categoryClass;\n break;\n case \"sc\":\n className = CLASS_NAME_SubCategory;\n break;\n case \"e\":\n className = elementClass;\n break;\n default:\n className = CLASS_NAME_DefinitionContainer;\n break;\n }\n return {\n className,\n id: row.ECInstanceId,\n };\n }),\n toArray(),\n mergeMap((targetItems) => createInstanceKeyPathsFromTargetItems({ ...props, targetItems })),\n toArray(),\n abortSignal ? takeUntil(fromEvent(abortSignal, \"abort\")) : identity,\n defaultIfEmpty([]),\n ),\n );\n}\n\nfunction createInstanceKeyPathsFromTargetItems({\n targetItems,\n imodelAccess,\n viewType,\n hierarchyConfig,\n idsCache,\n limit,\n componentId,\n componentName,\n}: Omit<MarkRequired<CategoriesTreeInstanceKeyPathsFromInstanceLabelProps, \"componentId\">, \"label\"> & {\n targetItems: InstanceKey[];\n componentName: string;\n}): Observable<NormalizedHierarchySearchPath> {\n if (limit !== \"unbounded\" && targetItems.length > (limit ?? MAX_SEARCH_INSTANCE_KEY_COUNT)) {\n throw new SearchLimitExceededError(limit ?? MAX_SEARCH_INSTANCE_KEY_COUNT);\n }\n const { categoryClass } = getClassesByView(viewType);\n return fromWithRelease({ source: targetItems, releaseOnCount: 500 }).pipe(\n reduce(\n (acc, { id, className }) => {\n if (className === categoryClass) {\n acc.categoryIds.push(id);\n return acc;\n }\n if (className === CLASS_NAME_DefinitionContainer) {\n acc.definitionContainerIds.push(id);\n return acc;\n }\n if (className === CLASS_NAME_SubCategory) {\n if (hierarchyConfig.hideSubCategories) {\n return acc;\n }\n acc.subCategoryIds.push(id);\n return acc;\n }\n\n if (!hierarchyConfig.showElements) {\n return acc;\n }\n acc.elementIds.push(id);\n return acc;\n },\n {\n definitionContainerIds: new Array<DefinitionContainerId>(),\n categoryIds: new Array<CategoryId>(),\n subCategoryIds: new Array<SubCategoryId>(),\n elementIds: new Array<ElementId>(),\n },\n ),\n mergeMap((ids) => {\n const elementsLength = ids.elementIds.length;\n return merge(\n fromWithRelease({ source: ids.definitionContainerIds, releaseOnCount: 200 }).pipe(\n mergeMap((id) => idsCache.getInstanceKeyPaths({ definitionContainerId: id })),\n map((path) => ({ path, options: { reveal: true } })),\n ),\n fromWithRelease({ source: ids.categoryIds, releaseOnCount: 200 }).pipe(\n mergeMap((id) => idsCache.getInstanceKeyPaths({ categoryId: id })),\n map((path) => ({ path, options: { reveal: true } })),\n ),\n fromWithRelease({ source: ids.subCategoryIds, releaseOnCount: 200 }).pipe(\n mergeMap((id) => idsCache.getInstanceKeyPaths({ subCategoryId: id })),\n map((path) => ({ path, options: { reveal: true } })),\n ),\n from(ids.elementIds).pipe(\n bufferCount(getOptimalBatchSize({ totalSize: elementsLength, maximumBatchSize: 5000 })),\n releaseMainThreadOnItemsCount(1),\n mergeMap(\n (block, chunkIndex) =>\n createGeometricElementInstanceKeyPaths({\n imodelAccess,\n idsCache,\n hierarchyConfig,\n viewType,\n targetItems: block,\n chunkIndex,\n componentId,\n componentName,\n }),\n 10,\n ),\n ),\n );\n }),\n );\n}\n\nfunction createGeometricElementInstanceKeyPaths(props: {\n imodelAccess: ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n idsCache: CategoriesTreeIdsCache;\n hierarchyConfig: CategoriesTreeHierarchyConfiguration;\n viewType: \"2d\" | \"3d\";\n targetItems: Id64Array;\n componentId: GuidString;\n componentName: string;\n chunkIndex: number;\n}): Observable<NormalizedHierarchySearchPath> {\n const separator = \";\";\n const { targetItems, chunkIndex, componentId, componentName, hierarchyConfig, idsCache, imodelAccess, viewType } = props;\n const { categoryClass, elementClass, modelClass } = getClassesByView(viewType);\n if (targetItems.length === 0 || !hierarchyConfig.showElements) {\n return EMPTY;\n }\n\n return defer(() => {\n const ctes = [\n `CategoriesElementsHierarchy(ECInstanceId, ParentId, ModelId, Path) AS (\n SELECT\n e.ECInstanceId,\n e.Parent.Id,\n e.Model.Id,\n IIF(e.Parent.Id IS NULL,\n 'm${separator}' || CAST(IdToHex([m].[ECInstanceId]) AS TEXT) || '${separator}c${separator}' || CAST(IdToHex([c].[ECInstanceId]) AS TEXT) || '${separator}e${separator}' || CAST(IdToHex([e].[ECInstanceId]) AS TEXT),\n 'e${separator}' || CAST(IdToHex([e].[ECInstanceId]) AS TEXT)\n )\n FROM ${elementClass} e\n LEFT JOIN ${modelClass} m ON (e.Parent.Id IS NULL AND m.ECInstanceId = e.Model.Id)\n LEFT JOIN ${categoryClass} c ON (e.Parent.Id IS NULL AND c.ECInstanceId = e.Category.Id)\n WHERE e.ECInstanceId IN (${targetItems.join(\",\")})\n\n UNION ALL\n\n SELECT\n pe.ECInstanceId,\n pe.Parent.Id,\n pe.Model.Id,\n IIF(pe.Parent.Id IS NULL,\n 'm${separator}' || CAST(IdToHex([m].[ECInstanceId]) AS TEXT) || '${separator}c${separator}' || CAST(IdToHex([c].[ECInstanceId]) AS TEXT) || '${separator}e${separator}' || CAST(IdToHex([pe].[ECInstanceId]) AS TEXT) || '${separator}' || ce.Path,\n 'e${separator}' || CAST(IdToHex([pe].[ECInstanceId]) AS TEXT) || '${separator}' || ce.Path\n )\n FROM CategoriesElementsHierarchy ce\n JOIN ${elementClass} pe ON (pe.ECInstanceId = ce.ParentId OR pe.ECInstanceId = ce.ModelId AND ce.ParentId IS NULL)\n LEFT JOIN ${modelClass} m ON (pe.Parent.Id IS NULL AND m.ECInstanceId = pe.Model.Id)\n LEFT JOIN ${categoryClass} c ON (pe.Parent.Id IS NULL AND c.ECInstanceId = pe.Category.Id)\n )`,\n ];\n const ecsql = `\n SELECT mce.Path\n FROM CategoriesElementsHierarchy mce\n WHERE mce.ParentId IS NULL\n `;\n\n return imodelAccess.createQueryReader(\n { ctes, ecsql },\n { rowFormat: \"Indexes\", limit: \"unbounded\", restartToken: `${componentName}/${componentId}/element-paths/${chunkIndex}` },\n );\n }).pipe(\n catchBeSQLiteInterrupts,\n releaseMainThreadOnItemsCount(300),\n map((row) => parseQueryRow(row, separator, elementClass, categoryClass, modelClass)),\n mergeMap((elementHierarchyPath) =>\n forkJoin({ elementHierarchyPath: of(elementHierarchyPath), pathToCategory: idsCache.getInstanceKeyPaths({ categoryId: elementHierarchyPath[0].id }) }),\n ),\n map(({ elementHierarchyPath, pathToCategory }) => {\n pathToCategory.pop(); // category is already included in the element hierarchy path\n const path = [...pathToCategory, ...elementHierarchyPath];\n return { path, options: { reveal: true } };\n }),\n );\n}\n\nfunction parseQueryRow(row: ECSqlQueryRow, separator: string, elementClassName: string, categoryClassName: string, modelClassName: string) {\n const rowElements: string[] = row[0].split(separator);\n const path = new Array<InstanceKey>();\n for (let i = 0; i < rowElements.length; i += 2) {\n switch (rowElements[i]) {\n case \"e\":\n path.push({ className: elementClassName, id: rowElements[i + 1] });\n break;\n case \"c\":\n path.push({ className: categoryClassName, id: rowElements[i + 1] });\n break;\n case \"m\":\n // Ignore first model since it isn't in hierarchy\n if (i === 0) {\n break;\n }\n path.push({ className: modelClassName, id: rowElements[i + 1] });\n break;\n }\n }\n\n return path;\n}\n"]}
@@ -64,7 +64,9 @@ export declare namespace CategoriesTreeNode {
64
64
  } & {
65
65
  extendedData: {
66
66
  categoryId: Id64String;
67
- modelElementsMap: Map<Id64String, Set<Id64String>>;
67
+ modelElementsMap: Map<Id64String, {
68
+ elementIds: Set<Id64String>;
69
+ }>;
68
70
  };
69
71
  };
70
72
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"CategoriesTreeNode.js","sourceRoot":"","sources":["../../../../../../src/tree-widget-react/components/trees/categories-tree/CategoriesTreeNode.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAKhE;;;GAGG;AACH,MAAM,KAAW,kBAAkB,CAiFlC;AAjFD,WAAiB,kBAAkB;IACjC,mFAAmF;IACtE,4CAAyB,GAAG,CAAC,IAAyC,EAAgE,EAAE,CACnJ,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,uBAAuB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC;IAEnH;;;;;;;;OAQG;IACU,iCAAc,GAAG,CAC5B,IAAyC,EAezC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;IAEhG,6DAA6D;IAChD,8BAAW,GAAG,CAAC,IAAyC,EAAgE,EAAE,CACrI,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IAEvF;;;;;;OAMG;IACU,gCAAa,GAAG,CAC3B,IAAyC,EAMzC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,WAAW,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;IAE9F;;;;;;OAMG;IACU,6CAA0B,GAAG,CACxC,IAAgC,EAMhC,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAE7C;;;;;OAKG;IACU,oCAAiB,GAAG,CAC/B,IAAyC,EAKzC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,eAAe,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;AACxG,CAAC,EAjFgB,kBAAkB,KAAlB,kBAAkB,QAiFlC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { HierarchyNode } from \"@itwin/presentation-hierarchies\";\n\nimport type { Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport type { ClassGroupingNodeKey, GroupingHierarchyNode, InstancesNodeKey, NonGroupingHierarchyNode } from \"@itwin/presentation-hierarchies\";\n\n/**\n * Contains utility functions for working with Categories Tree nodes.\n * @beta\n */\nexport namespace CategoriesTreeNode {\n /** Checks if the given node represents a `BisCore.DefinitionContainer` element. */\n export const isDefinitionContainerNode = (node: Pick<HierarchyNode, \"extendedData\">): node is NonGroupingHierarchyNode & { key: InstancesNodeKey } =>\n !!node.extendedData && \"isDefinitionContainer\" in node.extendedData && !!node.extendedData.isDefinitionContainer;\n\n /**\n * Checks if the given node represents a `BisCore.Category` element.\n *\n * If it does, the node's `extendedData` will contain the following properties:\n * - `description`: Optional description of the category\n * - `hasSubCategories`: Indicates whether the category has sub-categories\n * - `isCategoryOfSubModel`: Indicates that this node is located under a SubModel\n * - `modelIds`: (only if `isCategoryOfSubModel` is true) Ids of models that this category node is contained under\n */\n export const isCategoryNode = (\n node: Pick<HierarchyNode, \"extendedData\">,\n ): node is Omit<NonGroupingHierarchyNode, \"extendedData\"> & { key: InstancesNodeKey } & {\n extendedData: {\n description?: string;\n hasSubCategories?: boolean;\n } & (\n | {\n isCategoryOfSubModel?: false;\n }\n | {\n /** Ids of models that this category node is contained under. */\n modelIds: Id64Array;\n isCategoryOfSubModel: true;\n }\n );\n } => !!node.extendedData && \"isCategory\" in node.extendedData && !!node.extendedData.isCategory;\n\n /** Checks if the given node represents a `BisCore.Model`. */\n export const isModelNode = (node: Pick<HierarchyNode, \"extendedData\">): node is NonGroupingHierarchyNode & { key: InstancesNodeKey } =>\n !!node.extendedData && \"isModel\" in node.extendedData && !!node.extendedData.isModel;\n\n /**\n * Checks if the given node represents a `BisCore.GeometricElement` element.\n *\n * If it does, the node's `extendedData` will contain the following properties:\n * - `modelId`: `Id64String` of the model containing the element\n * - `categoryId`: `Id64String` of the category of the element\n */\n export const isElementNode = (\n node: Pick<HierarchyNode, \"extendedData\">,\n ): node is Omit<NonGroupingHierarchyNode, \"extendedData\"> & { key: InstancesNodeKey } & {\n extendedData: {\n modelId: Id64String;\n categoryId: Id64String;\n };\n } => !!node.extendedData && \"isElement\" in node.extendedData && !!node.extendedData.isElement;\n\n /**\n * Checks if the given node is a class grouping node of `BisCore.GeometricElement` nodes.\n *\n * If it does, the node's `extendedData` will contain the following properties:\n * - `categoryId`: `Id64String` of the category of the element\n * - `modelElementsMap`: A map of model's `Id64String` -> Set of elements' `Id64String`s contained within this grouping node\n */\n export const isElementClassGroupingNode = (\n node: Pick<HierarchyNode, \"key\">,\n ): node is Omit<GroupingHierarchyNode, \"extendedData\"> & { key: ClassGroupingNodeKey } & {\n extendedData: {\n categoryId: Id64String;\n modelElementsMap: Map<Id64String, Set<Id64String>>;\n };\n } => HierarchyNode.isClassGroupingNode(node);\n\n /**\n * Checks if the given node represents a `BisCore.SubCategory` element.\n *\n * If it does, the node's `extendedData` will contain the following properties:\n * - `categoryId`: `Id64String` of the parent category\n */\n export const isSubCategoryNode = (\n node: Pick<HierarchyNode, \"extendedData\">,\n ): node is Omit<NonGroupingHierarchyNode, \"extendedData\"> & { key: InstancesNodeKey } & {\n extendedData: {\n categoryId: Id64String;\n };\n } => !!node.extendedData && \"isSubCategory\" in node.extendedData && !!node.extendedData.isSubCategory;\n}\n"]}
1
+ {"version":3,"file":"CategoriesTreeNode.js","sourceRoot":"","sources":["../../../../../../src/tree-widget-react/components/trees/categories-tree/CategoriesTreeNode.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAKhE;;;GAGG;AACH,MAAM,KAAW,kBAAkB,CAiFlC;AAjFD,WAAiB,kBAAkB;IACjC,mFAAmF;IACtE,4CAAyB,GAAG,CAAC,IAAyC,EAAgE,EAAE,CACnJ,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,uBAAuB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC;IAEnH;;;;;;;;OAQG;IACU,iCAAc,GAAG,CAC5B,IAAyC,EAezC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;IAEhG,6DAA6D;IAChD,8BAAW,GAAG,CAAC,IAAyC,EAAgE,EAAE,CACrI,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IAEvF;;;;;;OAMG;IACU,gCAAa,GAAG,CAC3B,IAAyC,EAMzC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,WAAW,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;IAE9F;;;;;;OAMG;IACU,6CAA0B,GAAG,CACxC,IAAgC,EAMhC,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAE7C;;;;;OAKG;IACU,oCAAiB,GAAG,CAC/B,IAAyC,EAKzC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,eAAe,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;AACxG,CAAC,EAjFgB,kBAAkB,KAAlB,kBAAkB,QAiFlC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { HierarchyNode } from \"@itwin/presentation-hierarchies\";\n\nimport type { Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport type { ClassGroupingNodeKey, GroupingHierarchyNode, InstancesNodeKey, NonGroupingHierarchyNode } from \"@itwin/presentation-hierarchies\";\n\n/**\n * Contains utility functions for working with Categories Tree nodes.\n * @beta\n */\nexport namespace CategoriesTreeNode {\n /** Checks if the given node represents a `BisCore.DefinitionContainer` element. */\n export const isDefinitionContainerNode = (node: Pick<HierarchyNode, \"extendedData\">): node is NonGroupingHierarchyNode & { key: InstancesNodeKey } =>\n !!node.extendedData && \"isDefinitionContainer\" in node.extendedData && !!node.extendedData.isDefinitionContainer;\n\n /**\n * Checks if the given node represents a `BisCore.Category` element.\n *\n * If it does, the node's `extendedData` will contain the following properties:\n * - `description`: Optional description of the category\n * - `hasSubCategories`: Indicates whether the category has sub-categories\n * - `isCategoryOfSubModel`: Indicates that this node is located under a SubModel\n * - `modelIds`: (only if `isCategoryOfSubModel` is true) Ids of models that this category node is contained under\n */\n export const isCategoryNode = (\n node: Pick<HierarchyNode, \"extendedData\">,\n ): node is Omit<NonGroupingHierarchyNode, \"extendedData\"> & { key: InstancesNodeKey } & {\n extendedData: {\n description?: string;\n hasSubCategories?: boolean;\n } & (\n | {\n isCategoryOfSubModel?: false;\n }\n | {\n /** Ids of models that this category node is contained under. */\n modelIds: Id64Array;\n isCategoryOfSubModel: true;\n }\n );\n } => !!node.extendedData && \"isCategory\" in node.extendedData && !!node.extendedData.isCategory;\n\n /** Checks if the given node represents a `BisCore.Model`. */\n export const isModelNode = (node: Pick<HierarchyNode, \"extendedData\">): node is NonGroupingHierarchyNode & { key: InstancesNodeKey } =>\n !!node.extendedData && \"isModel\" in node.extendedData && !!node.extendedData.isModel;\n\n /**\n * Checks if the given node represents a `BisCore.GeometricElement` element.\n *\n * If it does, the node's `extendedData` will contain the following properties:\n * - `modelId`: `Id64String` of the model containing the element\n * - `categoryId`: `Id64String` of the category of the element\n */\n export const isElementNode = (\n node: Pick<HierarchyNode, \"extendedData\">,\n ): node is Omit<NonGroupingHierarchyNode, \"extendedData\"> & { key: InstancesNodeKey } & {\n extendedData: {\n modelId: Id64String;\n categoryId: Id64String;\n };\n } => !!node.extendedData && \"isElement\" in node.extendedData && !!node.extendedData.isElement;\n\n /**\n * Checks if the given node is a class grouping node of `BisCore.GeometricElement` nodes.\n *\n * If it does, the node's `extendedData` will contain the following properties:\n * - `categoryId`: `Id64String` of the category of the element\n * - `modelElementsMap`: A map of model's `Id64String` -> Set of elements' `Id64String`s contained within this grouping node\n */\n export const isElementClassGroupingNode = (\n node: Pick<HierarchyNode, \"key\">,\n ): node is Omit<GroupingHierarchyNode, \"extendedData\"> & { key: ClassGroupingNodeKey } & {\n extendedData: {\n categoryId: Id64String;\n modelElementsMap: Map<Id64String, { elementIds: Set<Id64String> }>;\n };\n } => HierarchyNode.isClassGroupingNode(node);\n\n /**\n * Checks if the given node represents a `BisCore.SubCategory` element.\n *\n * If it does, the node's `extendedData` will contain the following properties:\n * - `categoryId`: `Id64String` of the parent category\n */\n export const isSubCategoryNode = (\n node: Pick<HierarchyNode, \"extendedData\">,\n ): node is Omit<NonGroupingHierarchyNode, \"extendedData\"> & { key: InstancesNodeKey } & {\n extendedData: {\n categoryId: Id64String;\n };\n } => !!node.extendedData && \"isSubCategory\" in node.extendedData && !!node.extendedData.isSubCategory;\n}\n"]}