@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,75 +2,38 @@
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 { defer, EMPTY, filter, forkJoin, from, map, mergeAll, mergeMap, of, reduce, shareReplay, toArray } from "rxjs";
5
+ import { defer, filter, forkJoin, map, mergeAll, mergeMap, of, reduce, shareReplay, toArray } from "rxjs";
6
6
  import { assert, Guid, Id64 } from "@itwin/core-bentley";
7
7
  import { IModel } from "@itwin/core-common";
8
- import { CLASS_NAME_GeometricModel3d, CLASS_NAME_InformationPartitionElement, CLASS_NAME_Model, CLASS_NAME_SpatialCategory, CLASS_NAME_SubCategory, CLASS_NAME_Subject, } from "../../common/internal/ClassNameDefinitions.js";
9
- import { ModelCategoryElementsCountCache } from "../../common/internal/ModelCategoryElementsCountCache.js";
8
+ import { BaseIdsCacheImpl } from "../../common/internal/caches/BaseIdsCache.js";
9
+ import { CLASS_NAME_GeometricModel3d, CLASS_NAME_InformationPartitionElement, CLASS_NAME_SpatialCategory, CLASS_NAME_Subject, } from "../../common/internal/ClassNameDefinitions.js";
10
10
  import { catchBeSQLiteInterrupts } from "../../common/internal/UseErrorState.js";
11
11
  import { pushToMap } from "../../common/internal/Utils.js";
12
12
  /** @internal */
13
- export class ModelsTreeIdsCache {
14
- #categoryElementCounts;
15
- #categorySubCategories;
13
+ export class ModelsTreeIdsCache extends BaseIdsCacheImpl {
16
14
  #subjectInfos;
17
15
  #parentSubjectIds; // the list should contain a subject id if its node should be shown as having children
18
- #modelInfos;
19
- #modelWithCategoryModeledElements;
20
16
  #modelKeyPaths;
21
17
  #subjectKeyPaths;
22
18
  #categoryKeyPaths;
23
19
  #queryExecutor;
24
- #hierarchyConfig;
20
+ #showEmptyModels;
21
+ #hideRootSubject;
22
+ #elementClassName;
25
23
  #componentId;
26
24
  #componentName;
27
- constructor(queryExecutor, hierarchyConfig, componentId) {
28
- this.#queryExecutor = queryExecutor;
29
- this.#hierarchyConfig = hierarchyConfig;
30
- this.#componentId = componentId ?? Guid.createValue();
25
+ constructor(props) {
26
+ super(props);
27
+ this.#queryExecutor = props.queryExecutor;
28
+ this.#showEmptyModels = props.showEmptyModels;
29
+ this.#hideRootSubject = props.hideRootSubject;
30
+ this.#elementClassName = props.elementClassName;
31
+ this.#componentId = Guid.createValue();
31
32
  this.#componentName = "ModelsTreeIdsCache";
32
- this.#categoryElementCounts = new ModelCategoryElementsCountCache(this.#queryExecutor, [this.#hierarchyConfig.elementClassSpecification], this.#componentId);
33
33
  this.#modelKeyPaths = new Map();
34
34
  this.#subjectKeyPaths = new Map();
35
35
  this.#categoryKeyPaths = new Map();
36
36
  }
37
- [Symbol.dispose]() {
38
- this.#categoryElementCounts[Symbol.dispose]();
39
- }
40
- querySubCategories() {
41
- return defer(() => {
42
- const definitionsQuery = `
43
- SELECT
44
- sc.ECInstanceId id,
45
- sc.Parent.Id categoryId
46
- FROM
47
- ${CLASS_NAME_SubCategory} sc
48
- WHERE
49
- NOT sc.IsPrivate
50
- `;
51
- return this.#queryExecutor.createQueryReader({ ecsql: definitionsQuery }, { rowFormat: "ECSqlPropertyNames", limit: "unbounded", restartToken: `${this.#componentName}/${this.#componentId}/visible-sub-categories` });
52
- }).pipe(catchBeSQLiteInterrupts, map((row) => {
53
- return { id: row.id, parentId: row.categoryId };
54
- }));
55
- }
56
- getSubCategoriesInfo() {
57
- this.#categorySubCategories ??= this.querySubCategories()
58
- .pipe(reduce((acc, queriedSubCategory) => {
59
- const entry = acc.get(queriedSubCategory.parentId);
60
- if (entry) {
61
- entry.push(queriedSubCategory.id);
62
- }
63
- else {
64
- acc.set(queriedSubCategory.parentId, [queriedSubCategory.id]);
65
- }
66
- return acc;
67
- }, new Map()))
68
- .pipe(shareReplay());
69
- return this.#categorySubCategories;
70
- }
71
- getSubCategories(categoryId) {
72
- return this.getSubCategoriesInfo().pipe(map((categorySubCategories) => categorySubCategories.get(categoryId) ?? []));
73
- }
74
37
  querySubjects() {
75
38
  return defer(() => {
76
39
  const subjectsQuery = `
@@ -82,7 +45,7 @@ export class ModelsTreeIdsCache {
82
45
  FROM ${CLASS_NAME_GeometricModel3d} m
83
46
  WHERE m.ECInstanceId = HexToId(json_extract(s.JsonProperties, '$.Subject.Model.TargetPartition'))
84
47
  AND NOT m.IsPrivate
85
- AND EXISTS (SELECT 1 FROM ${this.#hierarchyConfig.elementClassSpecification} WHERE Model.Id = m.ECInstanceId)
48
+ AND EXISTS (SELECT 1 FROM ${this.#elementClassName} WHERE Model.Id = m.ECInstanceId)
86
49
  ) targetPartitionId,
87
50
  CASE
88
51
  WHEN (
@@ -106,7 +69,7 @@ export class ModelsTreeIdsCache {
106
69
  INNER JOIN ${CLASS_NAME_GeometricModel3d} m ON m.ModeledElement.Id = p.ECInstanceId
107
70
  WHERE
108
71
  NOT m.IsPrivate
109
- ${this.#hierarchyConfig.showEmptyModels ? "" : `AND EXISTS (SELECT 1 FROM ${this.#hierarchyConfig.elementClassSpecification} WHERE Model.Id = m.ECInstanceId)`}
72
+ ${this.#showEmptyModels ? "" : `AND EXISTS (SELECT 1 FROM ${this.#elementClassName} WHERE Model.Id = m.ECInstanceId)`}
110
73
  `;
111
74
  return this.#queryExecutor.createQueryReader({ ecsql: modelsQuery }, { rowFormat: "ECSqlPropertyNames", limit: "unbounded", restartToken: `${this.#componentName}/${this.#componentId}/models` });
112
75
  }).pipe(catchBeSQLiteInterrupts, map((row) => {
@@ -128,7 +91,7 @@ export class ModelsTreeIdsCache {
128
91
  acc.set(subject.id, subjectInfo);
129
92
  return acc;
130
93
  }, new Map()), map((subjectInfos) => {
131
- for (const [subjectId, { parentSubjectId: parentSubjectId }] of subjectInfos.entries()) {
94
+ for (const [subjectId, { parentSubjectId: parentSubjectId }] of subjectInfos) {
132
95
  if (parentSubjectId) {
133
96
  const parentSubjectInfo = subjectInfos.get(parentSubjectId);
134
97
  assert(!!parentSubjectInfo);
@@ -143,11 +106,11 @@ export class ModelsTreeIdsCache {
143
106
  }, new Map())),
144
107
  }).pipe(map(({ subjectInfos, targetPartitionSubjects }) => {
145
108
  for (const [partitionId, subjectIds] of targetPartitionSubjects) {
146
- subjectIds.forEach((subjectId) => {
109
+ for (const subjectId of subjectIds) {
147
110
  const subjectInfo = subjectInfos.get(subjectId);
148
111
  assert(!!subjectInfo);
149
112
  subjectInfo.childModelIds.add(partitionId);
150
- });
113
+ }
151
114
  }
152
115
  return subjectInfos;
153
116
  }), shareReplay());
@@ -157,7 +120,7 @@ export class ModelsTreeIdsCache {
157
120
  getParentSubjectIds() {
158
121
  this.#parentSubjectIds ??= this.getSubjectInfos().pipe(map((subjectInfos) => {
159
122
  const parentSubjectIds = new Set();
160
- subjectInfos.forEach((subjectInfo, subjectId) => {
123
+ for (const [subjectId, subjectInfo] of subjectInfos) {
161
124
  if (subjectInfo.childModelIds.size > 0) {
162
125
  parentSubjectIds.add(subjectId);
163
126
  let currParentId = subjectInfo.parentSubjectId;
@@ -166,7 +129,7 @@ export class ModelsTreeIdsCache {
166
129
  currParentId = subjectInfos.get(currParentId)?.parentSubjectId;
167
130
  }
168
131
  }
169
- });
132
+ }
170
133
  return [...parentSubjectIds];
171
134
  }), shareReplay());
172
135
  return this.#parentSubjectIds;
@@ -200,14 +163,20 @@ export class ModelsTreeIdsCache {
200
163
  if (!subjectInfo) {
201
164
  continue;
202
165
  }
203
- result.push(...subjectInfo.childModelIds);
204
- childSubjects.push(...subjectInfo.childSubjectIds);
166
+ for (const modelId of subjectInfo.childModelIds) {
167
+ result.push(modelId);
168
+ }
169
+ for (const childSubjectId of subjectInfo.childSubjectIds) {
170
+ childSubjects.push(childSubjectId);
171
+ }
205
172
  }
206
173
  if (childSubjects.length === 0) {
207
174
  return of(result);
208
175
  }
209
176
  return this.getSubjectModelIds(childSubjects).pipe(map((modelsOfChildSubjects) => {
210
- result.push(...modelsOfChildSubjects);
177
+ for (const modelId of modelsOfChildSubjects) {
178
+ result.push(modelId);
179
+ }
211
180
  return result;
212
181
  }));
213
182
  }));
@@ -226,10 +195,21 @@ export class ModelsTreeIdsCache {
226
195
  });
227
196
  }
228
197
  const modelIds = new Array();
229
- [...parentSubjectIds, ...hiddenSubjectIds].forEach((subjectId) => {
198
+ const addModelsForExistingSubject = (subjectId) => {
230
199
  const subjectInfo = subjectInfos.get(subjectId);
231
- subjectInfo && modelIds.push(...subjectInfo.childModelIds);
232
- });
200
+ if (!subjectInfo) {
201
+ return;
202
+ }
203
+ for (const modelId of subjectInfo.childModelIds) {
204
+ modelIds.push(modelId);
205
+ }
206
+ };
207
+ for (const subjectId of Id64.iterable(parentSubjectIds)) {
208
+ addModelsForExistingSubject(subjectId);
209
+ }
210
+ for (const subjectId of hiddenSubjectIds) {
211
+ addModelsForExistingSubject(subjectId);
212
+ }
233
213
  return modelIds;
234
214
  }));
235
215
  }
@@ -240,7 +220,7 @@ export class ModelsTreeIdsCache {
240
220
  const result = new Array();
241
221
  let currParentId = targetSubjectId;
242
222
  while (currParentId) {
243
- if (this.#hierarchyConfig.hideRootSubject && currParentId === IModel.rootSubjectId) {
223
+ if (this.#hideRootSubject && currParentId === IModel.rootSubjectId) {
244
224
  break;
245
225
  }
246
226
  const parentInfo = subjectInfos.get(currParentId);
@@ -255,112 +235,6 @@ export class ModelsTreeIdsCache {
255
235
  }
256
236
  return entry;
257
237
  }
258
- queryModelCategories() {
259
- return defer(() => {
260
- const query = `
261
- SELECT
262
- this.Model.Id modelId,
263
- this.Category.Id categoryId,
264
- m.IsPrivate isModelPrivate,
265
- MAX(IIF(this.Parent.Id IS NULL, 1, 0)) isRootElementCategory
266
- FROM ${CLASS_NAME_Model} m
267
- JOIN ${this.#hierarchyConfig.elementClassSpecification} this ON m.ECInstanceId = this.Model.Id
268
- GROUP BY modelId, categoryId, isModelPrivate
269
- `;
270
- return this.#queryExecutor.createQueryReader({ ecsql: query }, { rowFormat: "ECSqlPropertyNames", limit: "unbounded", restartToken: `${this.#componentName}/${this.#componentId}/model-categories` });
271
- }).pipe(catchBeSQLiteInterrupts, map((row) => {
272
- return { modelId: row.modelId, categoryId: row.categoryId, isModelPrivate: !!row.isModelPrivate, isRootElementCategory: !!row.isRootElementCategory };
273
- }));
274
- }
275
- queryModeledElements() {
276
- return defer(() => {
277
- const query = `
278
- SELECT
279
- pe.ECInstanceId modeledElementId,
280
- pe.Category.Id categoryId,
281
- pe.Model.Id modelId
282
- FROM ${CLASS_NAME_Model} m
283
- JOIN ${this.#hierarchyConfig.elementClassSpecification} pe ON pe.ECInstanceId = m.ModeledElement.Id
284
- WHERE
285
- m.IsPrivate = false
286
- AND m.ECInstanceId IN (SELECT Model.Id FROM ${this.#hierarchyConfig.elementClassSpecification})
287
- `;
288
- return this.#queryExecutor.createQueryReader({ ecsql: query }, { rowFormat: "ECSqlPropertyNames", limit: "unbounded", restartToken: `${this.#componentName}/${this.#componentId}/modeled-elements` });
289
- }).pipe(catchBeSQLiteInterrupts, map((row) => {
290
- return { modelId: row.modelId, categoryId: row.categoryId, modeledElementId: row.modeledElementId };
291
- }));
292
- }
293
- getModelWithCategoryModeledElements() {
294
- this.#modelWithCategoryModeledElements ??= this.queryModeledElements().pipe(reduce((acc, { modelId, categoryId, modeledElementId }) => {
295
- let modelEntry = acc.get(modelId);
296
- if (!modelEntry) {
297
- modelEntry = new Map();
298
- acc.set(modelId, modelEntry);
299
- }
300
- const categoryEntry = modelEntry.get(categoryId);
301
- if (!categoryEntry) {
302
- modelEntry.set(categoryId, new Set([modeledElementId]));
303
- }
304
- else {
305
- categoryEntry.add(modeledElementId);
306
- }
307
- return acc;
308
- }, new Map()), shareReplay());
309
- return this.#modelWithCategoryModeledElements;
310
- }
311
- getModelInfos() {
312
- this.#modelInfos ??= this.queryModelCategories().pipe(reduce((acc, { modelId, categoryId, isModelPrivate, isRootElementCategory }) => {
313
- const entry = acc.get(modelId);
314
- if (entry) {
315
- entry.categories.set(categoryId, { isRootElementCategory });
316
- entry.isModelPrivate = isModelPrivate;
317
- }
318
- else {
319
- acc.set(modelId, { categories: new Map([[categoryId, { isRootElementCategory }]]), isModelPrivate });
320
- }
321
- return acc;
322
- }, new Map()), shareReplay());
323
- return this.#modelInfos;
324
- }
325
- getAllCategories() {
326
- return this.getModelInfos().pipe(mergeMap((modelInfos) => modelInfos.values()), mergeMap(({ categories }) => categories.keys()), reduce((acc, categoryId) => {
327
- acc.add(categoryId);
328
- return acc;
329
- }, new Set()));
330
- }
331
- getModelCategoryIds(modelId) {
332
- return this.getModelInfos().pipe(mergeMap((modelInfos) => modelInfos.get(modelId)?.categories.keys() ?? []), toArray());
333
- }
334
- hasSubModel(elementId) {
335
- return this.getModelInfos().pipe(map((modelInfos) => {
336
- const modeledElementInfo = modelInfos.get(elementId);
337
- if (!modeledElementInfo) {
338
- return false;
339
- }
340
- return !modeledElementInfo.isModelPrivate;
341
- }));
342
- }
343
- getCategoriesModeledElements(modelId, categoryIds) {
344
- return this.getModelWithCategoryModeledElements().pipe(mergeMap((modelWithCategoryModeledElements) => {
345
- const result = new Array();
346
- const categoryMap = modelWithCategoryModeledElements.get(modelId);
347
- if (!categoryMap) {
348
- return of(result);
349
- }
350
- return from(Id64.iterable(categoryIds)).pipe(map((categoryId) => categoryMap.get(categoryId)), mergeMap((elementsSet) => (elementsSet ? from(elementsSet) : EMPTY)), toArray());
351
- }));
352
- }
353
- getCategoriesElementModels(categoryIds) {
354
- return this.getModelInfos().pipe(mergeMap((modelInfos) => from(Id64.iterable(categoryIds)).pipe(map((categoryId) => {
355
- const categoryModels = new Array();
356
- modelInfos.forEach(({ categories }, modelId) => {
357
- if (categories.has(categoryId)) {
358
- categoryModels.push(modelId);
359
- }
360
- });
361
- return { id: categoryId, models: categoryModels.length > 0 ? categoryModels : undefined };
362
- }))));
363
- }
364
238
  createModelInstanceKeyPaths(modelId) {
365
239
  let entry = this.#modelKeyPaths.get(modelId);
366
240
  if (!entry) {
@@ -369,19 +243,10 @@ export class ModelsTreeIdsCache {
369
243
  }
370
244
  return entry;
371
245
  }
372
- getCategoryElementsCount(modelId, categoryId) {
373
- return this.#categoryElementCounts.getCategoryElementsCount(modelId, categoryId);
374
- }
375
246
  createCategoryInstanceKeyPaths(categoryId) {
376
247
  let entry = this.#categoryKeyPaths.get(categoryId);
377
248
  if (!entry) {
378
- entry = this.getModelInfos().pipe(mergeMap((modelInfos) => modelInfos.entries()), reduce((acc, [modelId, modelInfo]) => {
379
- const categoryEntry = modelInfo.categories.get(categoryId);
380
- if (categoryEntry?.isRootElementCategory) {
381
- acc.add(modelId);
382
- }
383
- return acc;
384
- }, new Set()), mergeMap((categoryModels) => from(categoryModels)), mergeMap((categoryModelId) => this.createModelInstanceKeyPaths(categoryModelId)), mergeAll(), reduce((acc, modelPath) => {
249
+ entry = this.getModels({ categoryId, includeSubModels: true, includeOnlyIfCategoryOfTopMostElement: true }).pipe(mergeAll(), mergeMap((categoryModelId) => this.createModelInstanceKeyPaths(categoryModelId)), mergeAll(), reduce((acc, modelPath) => {
385
250
  acc.push([...modelPath, { className: CLASS_NAME_SpatialCategory, id: categoryId }]);
386
251
  return acc;
387
252
  }, new Array()), shareReplay());
@@ -392,13 +257,15 @@ export class ModelsTreeIdsCache {
392
257
  }
393
258
  function forEachChildSubject(subjectInfos, parentSubject, cb) {
394
259
  const parentSubjectInfo = typeof parentSubject === "string" ? subjectInfos.get(parentSubject) : parentSubject;
395
- parentSubjectInfo &&
396
- parentSubjectInfo.childSubjectIds.forEach((childSubjectId) => {
397
- const childSubjectInfo = subjectInfos.get(childSubjectId);
398
- if (cb(childSubjectId, childSubjectInfo) === "break") {
399
- return;
400
- }
401
- forEachChildSubject(subjectInfos, childSubjectInfo, cb);
402
- });
260
+ if (!parentSubjectInfo) {
261
+ return;
262
+ }
263
+ for (const childSubjectId of parentSubjectInfo.childSubjectIds) {
264
+ const childSubjectInfo = subjectInfos.get(childSubjectId);
265
+ if (cb(childSubjectId, childSubjectInfo) === "break") {
266
+ continue;
267
+ }
268
+ forEachChildSubject(subjectInfos, childSubjectInfo, cb);
269
+ }
403
270
  }
404
271
  //# sourceMappingURL=ModelsTreeIdsCache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ModelsTreeIdsCache.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.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 { defer, EMPTY, filter, forkJoin, from, map, mergeAll, mergeMap, of, reduce, shareReplay, toArray } from \"rxjs\";\nimport { assert, Guid, Id64 } from \"@itwin/core-bentley\";\nimport { IModel } from \"@itwin/core-common\";\nimport {\n CLASS_NAME_GeometricModel3d,\n CLASS_NAME_InformationPartitionElement,\n CLASS_NAME_Model,\n CLASS_NAME_SpatialCategory,\n CLASS_NAME_SubCategory,\n CLASS_NAME_Subject,\n} from \"../../common/internal/ClassNameDefinitions.js\";\nimport { ModelCategoryElementsCountCache } from \"../../common/internal/ModelCategoryElementsCountCache.js\";\nimport { catchBeSQLiteInterrupts } from \"../../common/internal/UseErrorState.js\";\nimport { pushToMap } from \"../../common/internal/Utils.js\";\n\nimport type { Observable } from \"rxjs\";\nimport type { GuidString, Id64Arg, Id64Array, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport type { HierarchyNodeIdentifiersPath, LimitingECSqlQueryExecutor } from \"@itwin/presentation-hierarchies\";\nimport type { InstanceKey } from \"@itwin/presentation-shared\";\nimport type { CategoryId, ElementId, ModelId, SubCategoryId, SubjectId } from \"../../common/internal/Types.js\";\nimport type { ModelsTreeDefinition } from \"../ModelsTreeDefinition.js\";\n\ninterface SubjectInfo {\n parentSubjectId: Id64String | undefined;\n hideInHierarchy: boolean;\n childSubjectIds: Id64Set;\n childModelIds: Id64Set;\n}\n\ninterface ModelInfo {\n isModelPrivate: boolean;\n categories: Map<CategoryId, { isRootElementCategory: boolean }>;\n}\n\ntype ModelsTreeHierarchyConfiguration = ConstructorParameters<typeof ModelsTreeDefinition>[0][\"hierarchyConfig\"];\n\n/** @internal */\nexport class ModelsTreeIdsCache implements Disposable {\n readonly #categoryElementCounts: ModelCategoryElementsCountCache;\n #categorySubCategories: Observable<Map<CategoryId, Array<SubCategoryId>>> | undefined;\n #subjectInfos: Observable<Map<SubjectId, SubjectInfo>> | undefined;\n #parentSubjectIds: Observable<Id64Array> | undefined; // the list should contain a subject id if its node should be shown as having children\n #modelInfos: Observable<Map<ModelId, ModelInfo>> | undefined;\n #modelWithCategoryModeledElements: Observable<Map<ModelId, Map<CategoryId, Set<ElementId>>>> | undefined;\n #modelKeyPaths: Map<ModelId, Observable<HierarchyNodeIdentifiersPath[]>>;\n #subjectKeyPaths: Map<SubjectId, Observable<HierarchyNodeIdentifiersPath>>;\n #categoryKeyPaths: Map<CategoryId, Observable<HierarchyNodeIdentifiersPath[]>>;\n #queryExecutor: LimitingECSqlQueryExecutor;\n #hierarchyConfig: ModelsTreeHierarchyConfiguration;\n #componentId: GuidString;\n #componentName: string;\n\n constructor(queryExecutor: LimitingECSqlQueryExecutor, hierarchyConfig: ModelsTreeHierarchyConfiguration, componentId?: GuidString) {\n this.#queryExecutor = queryExecutor;\n this.#hierarchyConfig = hierarchyConfig;\n this.#componentId = componentId ?? Guid.createValue();\n this.#componentName = \"ModelsTreeIdsCache\";\n this.#categoryElementCounts = new ModelCategoryElementsCountCache(\n this.#queryExecutor,\n [this.#hierarchyConfig.elementClassSpecification],\n this.#componentId,\n );\n this.#modelKeyPaths = new Map();\n this.#subjectKeyPaths = new Map();\n this.#categoryKeyPaths = new Map();\n }\n\n public [Symbol.dispose]() {\n this.#categoryElementCounts[Symbol.dispose]();\n }\n\n private querySubCategories(): Observable<{ id: SubCategoryId; parentId: CategoryId }> {\n return defer(() => {\n const definitionsQuery = `\n SELECT\n sc.ECInstanceId id,\n sc.Parent.Id categoryId\n FROM\n ${CLASS_NAME_SubCategory} sc\n WHERE\n NOT sc.IsPrivate\n `;\n return this.#queryExecutor.createQueryReader(\n { ecsql: definitionsQuery },\n { rowFormat: \"ECSqlPropertyNames\", limit: \"unbounded\", restartToken: `${this.#componentName}/${this.#componentId}/visible-sub-categories` },\n );\n }).pipe(\n catchBeSQLiteInterrupts,\n map((row) => {\n return { id: row.id, parentId: row.categoryId };\n }),\n );\n }\n private getSubCategoriesInfo() {\n this.#categorySubCategories ??= this.querySubCategories()\n .pipe(\n reduce((acc, queriedSubCategory) => {\n const entry = acc.get(queriedSubCategory.parentId);\n if (entry) {\n entry.push(queriedSubCategory.id);\n } else {\n acc.set(queriedSubCategory.parentId, [queriedSubCategory.id]);\n }\n return acc;\n }, new Map<CategoryId, Array<SubCategoryId>>()),\n )\n .pipe(shareReplay());\n return this.#categorySubCategories;\n }\n\n public getSubCategories(categoryId: Id64String): Observable<Array<SubCategoryId>> {\n return this.getSubCategoriesInfo().pipe(map((categorySubCategories) => categorySubCategories.get(categoryId) ?? []));\n }\n\n private querySubjects(): Observable<{ id: SubjectId; parentId?: SubjectId; targetPartitionId?: ModelId; hideInHierarchy: boolean }> {\n return defer(() => {\n const subjectsQuery = `\n SELECT\n s.ECInstanceId id,\n s.Parent.Id parentId,\n (\n SELECT m.ECInstanceId\n FROM ${CLASS_NAME_GeometricModel3d} m\n WHERE m.ECInstanceId = HexToId(json_extract(s.JsonProperties, '$.Subject.Model.TargetPartition'))\n AND NOT m.IsPrivate\n AND EXISTS (SELECT 1 FROM ${this.#hierarchyConfig.elementClassSpecification} WHERE Model.Id = m.ECInstanceId)\n ) targetPartitionId,\n CASE\n WHEN (\n json_extract(s.JsonProperties, '$.Subject.Job.Bridge') IS NOT NULL\n OR json_extract(s.JsonProperties, '$.Subject.Model.Type') = 'Hierarchy'\n ) THEN 1\n ELSE 0\n END hideInHierarchy\n FROM bis.Subject s\n `;\n return this.#queryExecutor.createQueryReader(\n { ecsql: subjectsQuery },\n { rowFormat: \"ECSqlPropertyNames\", limit: \"unbounded\", restartToken: `${this.#componentName}/${this.#componentId}/subjects` },\n );\n }).pipe(\n catchBeSQLiteInterrupts,\n map((row) => {\n return { id: row.id, parentId: row.parentId, targetPartitionId: row.targetPartitionId, hideInHierarchy: !!row.hideInHierarchy };\n }),\n );\n }\n\n private queryModels(): Observable<{ id: ModelId; parentId: SubjectId }> {\n return defer(() => {\n const modelsQuery = `\n SELECT p.ECInstanceId id, p.Parent.Id parentId\n FROM ${CLASS_NAME_InformationPartitionElement} p\n INNER JOIN ${CLASS_NAME_GeometricModel3d} m ON m.ModeledElement.Id = p.ECInstanceId\n WHERE\n NOT m.IsPrivate\n ${this.#hierarchyConfig.showEmptyModels ? \"\" : `AND EXISTS (SELECT 1 FROM ${this.#hierarchyConfig.elementClassSpecification} WHERE Model.Id = m.ECInstanceId)`}\n `;\n return this.#queryExecutor.createQueryReader(\n { ecsql: modelsQuery },\n { rowFormat: \"ECSqlPropertyNames\", limit: \"unbounded\", restartToken: `${this.#componentName}/${this.#componentId}/models` },\n );\n }).pipe(\n catchBeSQLiteInterrupts,\n map((row) => {\n return { id: row.id, parentId: row.parentId };\n }),\n );\n }\n\n private getSubjectInfos() {\n this.#subjectInfos ??= forkJoin({\n subjectInfos: this.querySubjects().pipe(\n reduce((acc, subject) => {\n const subjectInfo: SubjectInfo = {\n parentSubjectId: subject.parentId,\n hideInHierarchy: subject.hideInHierarchy,\n childSubjectIds: new Set(),\n childModelIds: new Set(),\n };\n if (subject.targetPartitionId) {\n subjectInfo.childModelIds.add(subject.targetPartitionId);\n }\n acc.set(subject.id, subjectInfo);\n return acc;\n }, new Map<SubjectId, SubjectInfo>()),\n map((subjectInfos) => {\n for (const [subjectId, { parentSubjectId: parentSubjectId }] of subjectInfos.entries()) {\n if (parentSubjectId) {\n const parentSubjectInfo = subjectInfos.get(parentSubjectId);\n assert(!!parentSubjectInfo);\n parentSubjectInfo.childSubjectIds.add(subjectId);\n }\n }\n return subjectInfos;\n }),\n ),\n targetPartitionSubjects: this.queryModels().pipe(\n reduce((acc, model) => {\n pushToMap(acc, model.id, model.parentId);\n return acc;\n }, new Map<ModelId, Set<Id64String>>()),\n ),\n }).pipe(\n map(({ subjectInfos, targetPartitionSubjects }) => {\n for (const [partitionId, subjectIds] of targetPartitionSubjects) {\n subjectIds.forEach((subjectId) => {\n const subjectInfo = subjectInfos.get(subjectId);\n assert(!!subjectInfo);\n subjectInfo.childModelIds.add(partitionId);\n });\n }\n return subjectInfos;\n }),\n shareReplay(),\n );\n return this.#subjectInfos;\n }\n\n /** Returns ECInstanceIDs of Subjects that either have direct Model or at least one child Subject with a Model. */\n public getParentSubjectIds(): Observable<Id64Array> {\n this.#parentSubjectIds ??= this.getSubjectInfos().pipe(\n map((subjectInfos) => {\n const parentSubjectIds = new Set<SubjectId>();\n subjectInfos.forEach((subjectInfo, subjectId) => {\n if (subjectInfo.childModelIds.size > 0) {\n parentSubjectIds.add(subjectId);\n let currParentId = subjectInfo.parentSubjectId;\n while (currParentId) {\n parentSubjectIds.add(currParentId);\n currParentId = subjectInfos.get(currParentId)?.parentSubjectId;\n }\n }\n });\n return [...parentSubjectIds];\n }),\n shareReplay(),\n );\n return this.#parentSubjectIds;\n }\n\n /**\n * Returns child subjects of the specified parent subjects as they're displayed in the hierarchy - taking into\n * account `hideInHierarchy` flag.\n */\n public getChildSubjectIds(parentSubjectIds: Id64Arg): Observable<Id64Array> {\n return this.getSubjectInfos().pipe(\n map((subjectInfos) => {\n const childSubjectIds = new Array<SubjectId>();\n for (const subjectId of Id64.iterable(parentSubjectIds)) {\n forEachChildSubject(subjectInfos, subjectId, (childSubjectId, childSubjectInfo) => {\n if (!childSubjectInfo.hideInHierarchy) {\n childSubjectIds.push(childSubjectId);\n return \"break\";\n }\n return \"continue\";\n });\n }\n return childSubjectIds;\n }),\n );\n }\n\n /** Returns ECInstanceIDs of all Models under specific parent Subjects, including their child Subjects, etc. */\n public getSubjectModelIds(subjectIds: Id64Arg): Observable<Id64Array> {\n return this.getSubjectInfos().pipe(\n mergeMap((subjectInfos) => {\n const result = new Array<ModelId>();\n const childSubjects = new Array<SubjectId>();\n for (const subjectId of Id64.iterable(subjectIds)) {\n const subjectInfo = subjectInfos.get(subjectId);\n if (!subjectInfo) {\n continue;\n }\n result.push(...subjectInfo.childModelIds);\n childSubjects.push(...subjectInfo.childSubjectIds);\n }\n if (childSubjects.length === 0) {\n return of(result);\n }\n return this.getSubjectModelIds(childSubjects).pipe(\n map((modelsOfChildSubjects) => {\n result.push(...modelsOfChildSubjects);\n return result;\n }),\n );\n }),\n );\n }\n\n /** Returns ECInstanceIDs of Models under specific parent Subjects as they are displayed in the hierarchy. */\n public getChildSubjectModelIds(parentSubjectIds: Id64Arg): Observable<Id64Array> {\n return this.getSubjectInfos().pipe(\n map((subjectInfos) => {\n const hiddenSubjectIds = new Array<SubjectId>();\n for (const subjectId of Id64.iterable(parentSubjectIds)) {\n forEachChildSubject(subjectInfos, subjectId, (childSubjectId, childSubjectInfo) => {\n if (childSubjectInfo.hideInHierarchy) {\n hiddenSubjectIds.push(childSubjectId);\n return \"continue\";\n }\n return \"break\";\n });\n }\n const modelIds = new Array<ModelId>();\n [...parentSubjectIds, ...hiddenSubjectIds].forEach((subjectId) => {\n const subjectInfo = subjectInfos.get(subjectId);\n subjectInfo && modelIds.push(...subjectInfo.childModelIds);\n });\n return modelIds;\n }),\n );\n }\n\n public createSubjectInstanceKeysPath(targetSubjectId: Id64String): Observable<HierarchyNodeIdentifiersPath> {\n let entry = this.#subjectKeyPaths.get(targetSubjectId);\n if (!entry) {\n entry = this.getSubjectInfos().pipe(\n map((subjectInfos) => {\n const result = new Array<InstanceKey>();\n let currParentId: SubjectId | undefined = targetSubjectId;\n while (currParentId) {\n if (this.#hierarchyConfig.hideRootSubject && currParentId === IModel.rootSubjectId) {\n break;\n }\n const parentInfo = subjectInfos.get(currParentId);\n if (!parentInfo?.hideInHierarchy) {\n result.push({ className: CLASS_NAME_Subject, id: currParentId });\n }\n currParentId = parentInfo?.parentSubjectId;\n }\n return result.reverse();\n }),\n shareReplay(),\n );\n this.#subjectKeyPaths.set(targetSubjectId, entry);\n }\n return entry;\n }\n\n private queryModelCategories(): Observable<{\n modelId: Id64String;\n categoryId: Id64String;\n isModelPrivate: boolean;\n isRootElementCategory: boolean;\n }> {\n return defer(() => {\n const query = `\n SELECT\n this.Model.Id modelId,\n this.Category.Id categoryId,\n m.IsPrivate isModelPrivate,\n MAX(IIF(this.Parent.Id IS NULL, 1, 0)) isRootElementCategory\n FROM ${CLASS_NAME_Model} m\n JOIN ${this.#hierarchyConfig.elementClassSpecification} this ON m.ECInstanceId = this.Model.Id\n GROUP BY modelId, categoryId, isModelPrivate\n `;\n return this.#queryExecutor.createQueryReader(\n { ecsql: query },\n { rowFormat: \"ECSqlPropertyNames\", limit: \"unbounded\", restartToken: `${this.#componentName}/${this.#componentId}/model-categories` },\n );\n }).pipe(\n catchBeSQLiteInterrupts,\n map((row) => {\n return { modelId: row.modelId, categoryId: row.categoryId, isModelPrivate: !!row.isModelPrivate, isRootElementCategory: !!row.isRootElementCategory };\n }),\n );\n }\n\n private queryModeledElements(): Observable<{ modelId: Id64String; categoryId: Id64String; modeledElementId: Id64String }> {\n return defer(() => {\n const query = `\n SELECT\n pe.ECInstanceId modeledElementId,\n pe.Category.Id categoryId,\n pe.Model.Id modelId\n FROM ${CLASS_NAME_Model} m\n JOIN ${this.#hierarchyConfig.elementClassSpecification} pe ON pe.ECInstanceId = m.ModeledElement.Id\n WHERE\n m.IsPrivate = false\n AND m.ECInstanceId IN (SELECT Model.Id FROM ${this.#hierarchyConfig.elementClassSpecification})\n `;\n return this.#queryExecutor.createQueryReader(\n { ecsql: query },\n { rowFormat: \"ECSqlPropertyNames\", limit: \"unbounded\", restartToken: `${this.#componentName}/${this.#componentId}/modeled-elements` },\n );\n }).pipe(\n catchBeSQLiteInterrupts,\n map((row) => {\n return { modelId: row.modelId, categoryId: row.categoryId, modeledElementId: row.modeledElementId };\n }),\n );\n }\n\n private getModelWithCategoryModeledElements() {\n this.#modelWithCategoryModeledElements ??= this.queryModeledElements().pipe(\n reduce((acc, { modelId, categoryId, modeledElementId }) => {\n let modelEntry = acc.get(modelId);\n if (!modelEntry) {\n modelEntry = new Map();\n acc.set(modelId, modelEntry);\n }\n const categoryEntry = modelEntry.get(categoryId);\n if (!categoryEntry) {\n modelEntry.set(categoryId, new Set([modeledElementId]));\n } else {\n categoryEntry.add(modeledElementId);\n }\n return acc;\n }, new Map<ModelId, Map<CategoryId, Set<ElementId>>>()),\n shareReplay(),\n );\n return this.#modelWithCategoryModeledElements;\n }\n\n private getModelInfos() {\n this.#modelInfos ??= this.queryModelCategories().pipe(\n reduce((acc, { modelId, categoryId, isModelPrivate, isRootElementCategory }) => {\n const entry = acc.get(modelId);\n if (entry) {\n entry.categories.set(categoryId, { isRootElementCategory });\n entry.isModelPrivate = isModelPrivate;\n } else {\n acc.set(modelId, { categories: new Map([[categoryId, { isRootElementCategory }]]), isModelPrivate });\n }\n return acc;\n }, new Map<ModelId, { categories: Map<CategoryId, { isRootElementCategory: boolean }>; isModelPrivate: boolean }>()),\n shareReplay(),\n );\n return this.#modelInfos;\n }\n\n public getAllCategories(): Observable<Id64Set> {\n return this.getModelInfos().pipe(\n mergeMap((modelInfos) => modelInfos.values()),\n mergeMap(({ categories }) => categories.keys()),\n reduce((acc, categoryId) => {\n acc.add(categoryId);\n return acc;\n }, new Set<Id64String>()),\n );\n }\n\n public getModelCategoryIds(modelId: Id64String): Observable<Id64Array> {\n return this.getModelInfos().pipe(\n mergeMap((modelInfos) => modelInfos.get(modelId)?.categories.keys() ?? []),\n toArray(),\n );\n }\n\n public hasSubModel(elementId: Id64String): Observable<boolean> {\n return this.getModelInfos().pipe(\n map((modelInfos) => {\n const modeledElementInfo = modelInfos.get(elementId);\n if (!modeledElementInfo) {\n return false;\n }\n return !modeledElementInfo.isModelPrivate;\n }),\n );\n }\n\n public getCategoriesModeledElements(modelId: Id64String, categoryIds: Id64Arg): Observable<Id64Array> {\n return this.getModelWithCategoryModeledElements().pipe(\n mergeMap((modelWithCategoryModeledElements) => {\n const result = new Array<ElementId>();\n const categoryMap = modelWithCategoryModeledElements.get(modelId);\n if (!categoryMap) {\n return of(result);\n }\n return from(Id64.iterable(categoryIds)).pipe(\n map((categoryId) => categoryMap.get(categoryId)),\n mergeMap((elementsSet) => (elementsSet ? from(elementsSet) : EMPTY)),\n toArray(),\n );\n }),\n );\n }\n\n public getCategoriesElementModels(categoryIds: Id64Arg): Observable<{ id: CategoryId; models: Array<ModelId> | undefined }> {\n return this.getModelInfos().pipe(\n mergeMap((modelInfos) =>\n from(Id64.iterable(categoryIds)).pipe(\n map((categoryId) => {\n const categoryModels = new Array<ModelId>();\n modelInfos.forEach(({ categories }, modelId) => {\n if (categories.has(categoryId)) {\n categoryModels.push(modelId);\n }\n });\n return { id: categoryId, models: categoryModels.length > 0 ? categoryModels : undefined };\n }),\n ),\n ),\n );\n }\n\n public createModelInstanceKeyPaths(modelId: Id64String): Observable<HierarchyNodeIdentifiersPath[]> {\n let entry = this.#modelKeyPaths.get(modelId);\n if (!entry) {\n entry = this.getSubjectInfos().pipe(\n mergeMap((subjectInfos) => subjectInfos.entries()),\n filter(([_, subjectInfo]) => subjectInfo.childModelIds.has(modelId)),\n mergeMap(([modelSubjectId]) =>\n this.createSubjectInstanceKeysPath(modelSubjectId).pipe(map((path) => [...path, { className: CLASS_NAME_GeometricModel3d, id: modelId }])),\n ),\n toArray(),\n shareReplay(),\n );\n\n this.#modelKeyPaths.set(modelId, entry);\n }\n return entry;\n }\n\n public getCategoryElementsCount(modelId: Id64String, categoryId: Id64String): Observable<number> {\n return this.#categoryElementCounts.getCategoryElementsCount(modelId, categoryId);\n }\n\n public createCategoryInstanceKeyPaths(categoryId: Id64String): Observable<HierarchyNodeIdentifiersPath[]> {\n let entry = this.#categoryKeyPaths.get(categoryId);\n if (!entry) {\n entry = this.getModelInfos().pipe(\n mergeMap((modelInfos) => modelInfos.entries()),\n reduce((acc, [modelId, modelInfo]) => {\n const categoryEntry = modelInfo.categories.get(categoryId);\n if (categoryEntry?.isRootElementCategory) {\n acc.add(modelId);\n }\n return acc;\n }, new Set<ModelId>()),\n mergeMap((categoryModels) => from(categoryModels)),\n mergeMap((categoryModelId) => this.createModelInstanceKeyPaths(categoryModelId)),\n mergeAll(),\n reduce((acc, modelPath) => {\n acc.push([...modelPath, { className: CLASS_NAME_SpatialCategory, id: categoryId }]);\n return acc;\n }, new Array<HierarchyNodeIdentifiersPath>()),\n shareReplay(),\n );\n this.#categoryKeyPaths.set(categoryId, entry);\n }\n return entry;\n }\n}\n\nfunction forEachChildSubject(\n subjectInfos: Map<SubjectId, SubjectInfo>,\n parentSubject: SubjectId | SubjectInfo,\n cb: (childSubjectId: SubjectId, childSubjectInfo: SubjectInfo) => \"break\" | \"continue\",\n) {\n const parentSubjectInfo = typeof parentSubject === \"string\" ? subjectInfos.get(parentSubject) : parentSubject;\n parentSubjectInfo &&\n parentSubjectInfo.childSubjectIds.forEach((childSubjectId) => {\n const childSubjectInfo = subjectInfos.get(childSubjectId)!;\n if (cb(childSubjectId, childSubjectInfo) === \"break\") {\n return;\n }\n forEachChildSubject(subjectInfos, childSubjectInfo, cb);\n });\n}\n"]}
1
+ {"version":3,"file":"ModelsTreeIdsCache.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.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 { defer, filter, forkJoin, map, mergeAll, mergeMap, of, reduce, shareReplay, toArray } from \"rxjs\";\nimport { assert, Guid, Id64 } from \"@itwin/core-bentley\";\nimport { IModel } from \"@itwin/core-common\";\nimport { BaseIdsCacheImpl } from \"../../common/internal/caches/BaseIdsCache.js\";\nimport {\n CLASS_NAME_GeometricModel3d,\n CLASS_NAME_InformationPartitionElement,\n CLASS_NAME_SpatialCategory,\n CLASS_NAME_Subject,\n} from \"../../common/internal/ClassNameDefinitions.js\";\nimport { catchBeSQLiteInterrupts } from \"../../common/internal/UseErrorState.js\";\nimport { pushToMap } from \"../../common/internal/Utils.js\";\n\nimport type { Observable } from \"rxjs\";\nimport type { GuidString, Id64Arg, Id64Array, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport type { HierarchyNodeIdentifiersPath, LimitingECSqlQueryExecutor } from \"@itwin/presentation-hierarchies\";\nimport type { InstanceKey } from \"@itwin/presentation-shared\";\nimport type { BaseIdsCacheImplProps } from \"../../common/internal/caches/BaseIdsCache.js\";\nimport type { CategoryId, ModelId, SubjectId } from \"../../common/internal/Types.js\";\n\ninterface ModelsTreeIdsCacheProps extends BaseIdsCacheImplProps {\n queryExecutor: LimitingECSqlQueryExecutor;\n showEmptyModels: boolean;\n hideRootSubject: boolean;\n elementClassName: string;\n}\n\ninterface SubjectInfo {\n parentSubjectId: Id64String | undefined;\n hideInHierarchy: boolean;\n childSubjectIds: Id64Set;\n childModelIds: Id64Set;\n}\n\n/** @internal */\nexport class ModelsTreeIdsCache extends BaseIdsCacheImpl {\n #subjectInfos: Observable<Map<SubjectId, SubjectInfo>> | undefined;\n #parentSubjectIds: Observable<Id64Array> | undefined; // the list should contain a subject id if its node should be shown as having children\n #modelKeyPaths: Map<ModelId, Observable<HierarchyNodeIdentifiersPath[]>>;\n #subjectKeyPaths: Map<SubjectId, Observable<HierarchyNodeIdentifiersPath>>;\n #categoryKeyPaths: Map<CategoryId, Observable<HierarchyNodeIdentifiersPath[]>>;\n #queryExecutor: LimitingECSqlQueryExecutor;\n #showEmptyModels: boolean;\n #hideRootSubject: boolean;\n #elementClassName: string;\n #componentId: GuidString;\n #componentName: string;\n\n constructor(props: ModelsTreeIdsCacheProps) {\n super(props);\n this.#queryExecutor = props.queryExecutor;\n this.#showEmptyModels = props.showEmptyModels;\n this.#hideRootSubject = props.hideRootSubject;\n this.#elementClassName = props.elementClassName;\n this.#componentId = Guid.createValue();\n this.#componentName = \"ModelsTreeIdsCache\";\n this.#modelKeyPaths = new Map();\n this.#subjectKeyPaths = new Map();\n this.#categoryKeyPaths = new Map();\n }\n\n private querySubjects(): Observable<{ id: SubjectId; parentId?: SubjectId; targetPartitionId?: ModelId; hideInHierarchy: boolean }> {\n return defer(() => {\n const subjectsQuery = `\n SELECT\n s.ECInstanceId id,\n s.Parent.Id parentId,\n (\n SELECT m.ECInstanceId\n FROM ${CLASS_NAME_GeometricModel3d} m\n WHERE m.ECInstanceId = HexToId(json_extract(s.JsonProperties, '$.Subject.Model.TargetPartition'))\n AND NOT m.IsPrivate\n AND EXISTS (SELECT 1 FROM ${this.#elementClassName} WHERE Model.Id = m.ECInstanceId)\n ) targetPartitionId,\n CASE\n WHEN (\n json_extract(s.JsonProperties, '$.Subject.Job.Bridge') IS NOT NULL\n OR json_extract(s.JsonProperties, '$.Subject.Model.Type') = 'Hierarchy'\n ) THEN 1\n ELSE 0\n END hideInHierarchy\n FROM bis.Subject s\n `;\n return this.#queryExecutor.createQueryReader(\n { ecsql: subjectsQuery },\n { rowFormat: \"ECSqlPropertyNames\", limit: \"unbounded\", restartToken: `${this.#componentName}/${this.#componentId}/subjects` },\n );\n }).pipe(\n catchBeSQLiteInterrupts,\n map((row) => {\n return { id: row.id, parentId: row.parentId, targetPartitionId: row.targetPartitionId, hideInHierarchy: !!row.hideInHierarchy };\n }),\n );\n }\n\n private queryModels(): Observable<{ id: ModelId; parentId: SubjectId }> {\n return defer(() => {\n const modelsQuery = `\n SELECT p.ECInstanceId id, p.Parent.Id parentId\n FROM ${CLASS_NAME_InformationPartitionElement} p\n INNER JOIN ${CLASS_NAME_GeometricModel3d} m ON m.ModeledElement.Id = p.ECInstanceId\n WHERE\n NOT m.IsPrivate\n ${this.#showEmptyModels ? \"\" : `AND EXISTS (SELECT 1 FROM ${this.#elementClassName} WHERE Model.Id = m.ECInstanceId)`}\n `;\n return this.#queryExecutor.createQueryReader(\n { ecsql: modelsQuery },\n { rowFormat: \"ECSqlPropertyNames\", limit: \"unbounded\", restartToken: `${this.#componentName}/${this.#componentId}/models` },\n );\n }).pipe(\n catchBeSQLiteInterrupts,\n map((row) => {\n return { id: row.id, parentId: row.parentId };\n }),\n );\n }\n\n private getSubjectInfos() {\n this.#subjectInfos ??= forkJoin({\n subjectInfos: this.querySubjects().pipe(\n reduce((acc, subject) => {\n const subjectInfo: SubjectInfo = {\n parentSubjectId: subject.parentId,\n hideInHierarchy: subject.hideInHierarchy,\n childSubjectIds: new Set(),\n childModelIds: new Set(),\n };\n if (subject.targetPartitionId) {\n subjectInfo.childModelIds.add(subject.targetPartitionId);\n }\n acc.set(subject.id, subjectInfo);\n return acc;\n }, new Map<SubjectId, SubjectInfo>()),\n map((subjectInfos) => {\n for (const [subjectId, { parentSubjectId: parentSubjectId }] of subjectInfos) {\n if (parentSubjectId) {\n const parentSubjectInfo = subjectInfos.get(parentSubjectId);\n assert(!!parentSubjectInfo);\n parentSubjectInfo.childSubjectIds.add(subjectId);\n }\n }\n return subjectInfos;\n }),\n ),\n targetPartitionSubjects: this.queryModels().pipe(\n reduce((acc, model) => {\n pushToMap(acc, model.id, model.parentId);\n return acc;\n }, new Map<ModelId, Set<Id64String>>()),\n ),\n }).pipe(\n map(({ subjectInfos, targetPartitionSubjects }) => {\n for (const [partitionId, subjectIds] of targetPartitionSubjects) {\n for (const subjectId of subjectIds) {\n const subjectInfo = subjectInfos.get(subjectId);\n assert(!!subjectInfo);\n subjectInfo.childModelIds.add(partitionId);\n }\n }\n return subjectInfos;\n }),\n shareReplay(),\n );\n return this.#subjectInfos;\n }\n\n /** Returns ECInstanceIDs of Subjects that either have direct Model or at least one child Subject with a Model. */\n public getParentSubjectIds(): Observable<Id64Array> {\n this.#parentSubjectIds ??= this.getSubjectInfos().pipe(\n map((subjectInfos) => {\n const parentSubjectIds = new Set<SubjectId>();\n for (const [subjectId, subjectInfo] of subjectInfos) {\n if (subjectInfo.childModelIds.size > 0) {\n parentSubjectIds.add(subjectId);\n let currParentId = subjectInfo.parentSubjectId;\n while (currParentId) {\n parentSubjectIds.add(currParentId);\n currParentId = subjectInfos.get(currParentId)?.parentSubjectId;\n }\n }\n }\n return [...parentSubjectIds];\n }),\n shareReplay(),\n );\n return this.#parentSubjectIds;\n }\n\n /**\n * Returns child subjects of the specified parent subjects as they're displayed in the hierarchy - taking into\n * account `hideInHierarchy` flag.\n */\n public getChildSubjectIds(parentSubjectIds: Id64Arg): Observable<Id64Array> {\n return this.getSubjectInfos().pipe(\n map((subjectInfos) => {\n const childSubjectIds = new Array<SubjectId>();\n for (const subjectId of Id64.iterable(parentSubjectIds)) {\n forEachChildSubject(subjectInfos, subjectId, (childSubjectId, childSubjectInfo) => {\n if (!childSubjectInfo.hideInHierarchy) {\n childSubjectIds.push(childSubjectId);\n return \"break\";\n }\n return \"continue\";\n });\n }\n return childSubjectIds;\n }),\n );\n }\n\n /** Returns ECInstanceIDs of all Models under specific parent Subjects, including their child Subjects, etc. */\n public getSubjectModelIds(subjectIds: Id64Arg): Observable<Id64Array> {\n return this.getSubjectInfos().pipe(\n mergeMap((subjectInfos) => {\n const result = new Array<ModelId>();\n const childSubjects = new Array<SubjectId>();\n for (const subjectId of Id64.iterable(subjectIds)) {\n const subjectInfo = subjectInfos.get(subjectId);\n if (!subjectInfo) {\n continue;\n }\n for (const modelId of subjectInfo.childModelIds) {\n result.push(modelId);\n }\n for (const childSubjectId of subjectInfo.childSubjectIds) {\n childSubjects.push(childSubjectId);\n }\n }\n if (childSubjects.length === 0) {\n return of(result);\n }\n return this.getSubjectModelIds(childSubjects).pipe(\n map((modelsOfChildSubjects) => {\n for (const modelId of modelsOfChildSubjects) {\n result.push(modelId);\n }\n return result;\n }),\n );\n }),\n );\n }\n\n /** Returns ECInstanceIDs of Models under specific parent Subjects as they are displayed in the hierarchy. */\n public getChildSubjectModelIds(parentSubjectIds: Id64Arg): Observable<Id64Array> {\n return this.getSubjectInfos().pipe(\n map((subjectInfos) => {\n const hiddenSubjectIds = new Array<SubjectId>();\n for (const subjectId of Id64.iterable(parentSubjectIds)) {\n forEachChildSubject(subjectInfos, subjectId, (childSubjectId, childSubjectInfo) => {\n if (childSubjectInfo.hideInHierarchy) {\n hiddenSubjectIds.push(childSubjectId);\n return \"continue\";\n }\n return \"break\";\n });\n }\n const modelIds = new Array<ModelId>();\n const addModelsForExistingSubject = (subjectId: Id64String) => {\n const subjectInfo = subjectInfos.get(subjectId);\n if (!subjectInfo) {\n return;\n }\n for (const modelId of subjectInfo.childModelIds) {\n modelIds.push(modelId);\n }\n };\n for (const subjectId of Id64.iterable(parentSubjectIds)) {\n addModelsForExistingSubject(subjectId);\n }\n\n for (const subjectId of hiddenSubjectIds) {\n addModelsForExistingSubject(subjectId);\n }\n return modelIds;\n }),\n );\n }\n\n public createSubjectInstanceKeysPath(targetSubjectId: Id64String): Observable<HierarchyNodeIdentifiersPath> {\n let entry = this.#subjectKeyPaths.get(targetSubjectId);\n if (!entry) {\n entry = this.getSubjectInfos().pipe(\n map((subjectInfos) => {\n const result = new Array<InstanceKey>();\n let currParentId: SubjectId | undefined = targetSubjectId;\n while (currParentId) {\n if (this.#hideRootSubject && currParentId === IModel.rootSubjectId) {\n break;\n }\n const parentInfo = subjectInfos.get(currParentId);\n if (!parentInfo?.hideInHierarchy) {\n result.push({ className: CLASS_NAME_Subject, id: currParentId });\n }\n currParentId = parentInfo?.parentSubjectId;\n }\n return result.reverse();\n }),\n shareReplay(),\n );\n this.#subjectKeyPaths.set(targetSubjectId, entry);\n }\n return entry;\n }\n\n public createModelInstanceKeyPaths(modelId: Id64String): Observable<HierarchyNodeIdentifiersPath[]> {\n let entry = this.#modelKeyPaths.get(modelId);\n if (!entry) {\n entry = this.getSubjectInfos().pipe(\n mergeMap((subjectInfos) => subjectInfos.entries()),\n filter(([_, subjectInfo]) => subjectInfo.childModelIds.has(modelId)),\n mergeMap(([modelSubjectId]) =>\n this.createSubjectInstanceKeysPath(modelSubjectId).pipe(map((path) => [...path, { className: CLASS_NAME_GeometricModel3d, id: modelId }])),\n ),\n toArray(),\n shareReplay(),\n );\n\n this.#modelKeyPaths.set(modelId, entry);\n }\n return entry;\n }\n\n public createCategoryInstanceKeyPaths(categoryId: Id64String): Observable<HierarchyNodeIdentifiersPath[]> {\n let entry = this.#categoryKeyPaths.get(categoryId);\n if (!entry) {\n entry = this.getModels({ categoryId, includeSubModels: true, includeOnlyIfCategoryOfTopMostElement: true }).pipe(\n mergeAll(),\n mergeMap((categoryModelId) => this.createModelInstanceKeyPaths(categoryModelId)),\n mergeAll(),\n reduce((acc, modelPath) => {\n acc.push([...modelPath, { className: CLASS_NAME_SpatialCategory, id: categoryId }]);\n return acc;\n }, new Array<HierarchyNodeIdentifiersPath>()),\n shareReplay(),\n );\n this.#categoryKeyPaths.set(categoryId, entry);\n }\n return entry;\n }\n}\n\nfunction forEachChildSubject(\n subjectInfos: Map<SubjectId, SubjectInfo>,\n parentSubject: SubjectId | SubjectInfo,\n cb: (childSubjectId: SubjectId, childSubjectInfo: SubjectInfo) => \"break\" | \"continue\",\n) {\n const parentSubjectInfo = typeof parentSubject === \"string\" ? subjectInfos.get(parentSubject) : parentSubject;\n if (!parentSubjectInfo) {\n return;\n }\n for (const childSubjectId of parentSubjectInfo.childSubjectIds) {\n const childSubjectInfo = subjectInfos.get(childSubjectId)!;\n if (cb(childSubjectId, childSubjectInfo) === \"break\") {\n continue;\n }\n forEachChildSubject(subjectInfos, childSubjectInfo, cb);\n }\n}\n"]}
@@ -0,0 +1,52 @@
1
+ import type { Id64String } from "@itwin/core-bentley";
2
+ import type { ClassGroupingNodeKey, GroupingHierarchyNode, HierarchyNode, InstancesNodeKey, NonGroupingHierarchyNode } from "@itwin/presentation-hierarchies";
3
+ import type { CategoryId } from "../../common/internal/Types.js";
4
+ /**
5
+ * Contains utility functions for working with Models Tree nodes.
6
+ *
7
+ * It is a wrapper around `ModelsTreeNode` that exposes some internal details that should not be exposed via public api.
8
+ *
9
+ * @internal
10
+ */
11
+ export declare namespace ModelsTreeNodeInternal {
12
+ const isSubjectNode: (node: Pick<HierarchyNode, "extendedData">) => node is NonGroupingHierarchyNode & {
13
+ key: InstancesNodeKey;
14
+ };
15
+ const isModelNode: (node: Pick<HierarchyNode, "extendedData">) => node is NonGroupingHierarchyNode & {
16
+ key: InstancesNodeKey;
17
+ };
18
+ const isCategoryNode: (node: Pick<HierarchyNode, "extendedData">) => node is Omit<NonGroupingHierarchyNode, "extendedData"> & {
19
+ key: InstancesNodeKey;
20
+ } & {
21
+ extendedData: {
22
+ modelIds: Id64String[];
23
+ };
24
+ };
25
+ const isElementNode: (node: Pick<HierarchyNode, "extendedData">) => node is Omit<NonGroupingHierarchyNode, "extendedData"> & {
26
+ key: InstancesNodeKey;
27
+ } & {
28
+ extendedData: {
29
+ modelId: Id64String;
30
+ categoryId: Id64String;
31
+ childrenCount: number;
32
+ categoryOfTopMostParentElement: CategoryId;
33
+ topMostParentElementId: Id64String;
34
+ };
35
+ };
36
+ const isElementClassGroupingNode: (node: Pick<HierarchyNode, "key">) => node is Omit<GroupingHierarchyNode, "extendedData"> & {
37
+ key: ClassGroupingNodeKey;
38
+ } & {
39
+ extendedData: {
40
+ modelId: Id64String;
41
+ categoryId: Id64String;
42
+ childrenCount: number;
43
+ searchTargets?: Map<Id64String, {
44
+ childrenCount: number;
45
+ }>;
46
+ categoryOfTopMostParentElement: CategoryId;
47
+ topMostParentElementId?: Id64String;
48
+ };
49
+ };
50
+ const getType: (node: HierarchyNode) => "subject" | "model" | "category" | "element" | "elements-class-group";
51
+ }
52
+ //# sourceMappingURL=ModelsTreeNodeInternal.d.ts.map
@@ -0,0 +1,22 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { ModelsTreeNode } from "../ModelsTreeNode.js";
6
+ /**
7
+ * Contains utility functions for working with Models Tree nodes.
8
+ *
9
+ * It is a wrapper around `ModelsTreeNode` that exposes some internal details that should not be exposed via public api.
10
+ *
11
+ * @internal
12
+ */
13
+ export var ModelsTreeNodeInternal;
14
+ (function (ModelsTreeNodeInternal) {
15
+ ModelsTreeNodeInternal.isSubjectNode = ModelsTreeNode.isSubjectNode;
16
+ ModelsTreeNodeInternal.isModelNode = ModelsTreeNode.isModelNode;
17
+ ModelsTreeNodeInternal.isCategoryNode = ModelsTreeNode.isCategoryNode;
18
+ ModelsTreeNodeInternal.isElementNode = (node) => ModelsTreeNode.isElementNode(node);
19
+ ModelsTreeNodeInternal.isElementClassGroupingNode = (node) => ModelsTreeNode.isElementClassGroupingNode(node);
20
+ ModelsTreeNodeInternal.getType = ModelsTreeNode.getType;
21
+ })(ModelsTreeNodeInternal || (ModelsTreeNodeInternal = {}));
22
+ //# sourceMappingURL=ModelsTreeNodeInternal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelsTreeNodeInternal.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNodeInternal.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAMtD;;;;;;GAMG;AACH,MAAM,KAAW,sBAAsB,CAiCtC;AAjCD,WAAiB,sBAAsB;IACxB,oCAAa,GAAG,cAAc,CAAC,aAAa,CAAC;IAE7C,kCAAW,GAAG,cAAc,CAAC,WAAW,CAAC;IAEzC,qCAAc,GAAG,cAAc,CAAC,cAAc,CAAC;IAE/C,oCAAa,GAAG,CAC3B,IAAyC,EASzC,EAAE,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAE3B,iDAA0B,GAAG,CACxC,IAAgC,EAUhC,EAAE,CAAC,cAAc,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAExC,8BAAO,GAAG,cAAc,CAAC,OAAO,CAAC;AAChD,CAAC,EAjCgB,sBAAsB,KAAtB,sBAAsB,QAiCtC","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 { ModelsTreeNode } from \"../ModelsTreeNode.js\";\n\nimport type { Id64String } from \"@itwin/core-bentley\";\nimport type { ClassGroupingNodeKey, GroupingHierarchyNode, HierarchyNode, InstancesNodeKey, NonGroupingHierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport type { CategoryId } from \"../../common/internal/Types.js\";\n\n/**\n * Contains utility functions for working with Models Tree nodes.\n *\n * It is a wrapper around `ModelsTreeNode` that exposes some internal details that should not be exposed via public api.\n *\n * @internal\n */\nexport namespace ModelsTreeNodeInternal {\n export const isSubjectNode = ModelsTreeNode.isSubjectNode;\n\n export const isModelNode = ModelsTreeNode.isModelNode;\n\n export const isCategoryNode = ModelsTreeNode.isCategoryNode;\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 childrenCount: number;\n categoryOfTopMostParentElement: CategoryId;\n topMostParentElementId: Id64String;\n };\n } => ModelsTreeNode.isElementNode(node);\n\n export const isElementClassGroupingNode = (\n node: Pick<HierarchyNode, \"key\">,\n ): node is Omit<GroupingHierarchyNode, \"extendedData\"> & { key: ClassGroupingNodeKey } & {\n extendedData: {\n modelId: Id64String;\n categoryId: Id64String;\n childrenCount: number;\n searchTargets?: Map<Id64String, { childrenCount: number }>;\n categoryOfTopMostParentElement: CategoryId;\n topMostParentElementId?: Id64String;\n };\n } => ModelsTreeNode.isElementClassGroupingNode(node);\n\n export const getType = ModelsTreeNode.getType;\n}\n"]}
@@ -10,7 +10,7 @@ export type ModelsTreeSearchError = "tooManySearchMatches" | "tooManyInstancesFo
10
10
  /** @internal */
11
11
  export type ModelsTreeSubTreeError = "unknownSubTreeError";
12
12
  /** @internal */
13
- export declare function useSearchPaths({ hierarchyConfiguration, searchText, getSearchPaths, getSubTreePaths, getModelsTreeIdsCache, onModelsFiltered, onSearchPathsChanged, componentId, }: {
13
+ export declare function useSearchPaths({ hierarchyConfiguration, searchText, getSearchPaths, getSubTreePaths, idsCache, onModelsFiltered, onSearchPathsChanged, componentId, }: {
14
14
  hierarchyConfiguration: ModelsTreeHierarchyConfiguration;
15
15
  searchText?: string;
16
16
  getSearchPaths?: (props: {
@@ -29,7 +29,7 @@ export declare function useSearchPaths({ hierarchyConfiguration, searchText, get
29
29
  targetItems: Array<InstanceKey | ElementsGroupInfo>;
30
30
  }) => Promise<NormalizedHierarchySearchPath[]>;
31
31
  }) => Promise<HierarchySearchPath[]>;
32
- getModelsTreeIdsCache: () => ModelsTreeIdsCache;
32
+ idsCache: ModelsTreeIdsCache;
33
33
  onModelsFiltered?: (modelIds: Id64String[] | undefined) => void;
34
34
  onSearchPathsChanged: (paths: HierarchySearchPath[] | undefined) => void;
35
35
  componentId: GuidString;