@itwin/tree-widget-react 4.0.0-alpha.24 → 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 (205) 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 +4 -2
  16. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js +87 -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 +86 -0
  19. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeNode.js +50 -0
  20. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeNode.js.map +1 -0
  21. package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.d.ts +4 -2
  22. package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js +38 -23
  23. package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js.map +1 -1
  24. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.d.ts +11 -21
  25. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +16 -168
  26. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js.map +1 -1
  27. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNodeInternal.d.ts +65 -0
  28. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNodeInternal.js +22 -0
  29. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNodeInternal.js.map +1 -0
  30. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseSearchPaths.d.ts +2 -2
  31. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseSearchPaths.js +4 -4
  32. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseSearchPaths.js.map +1 -1
  33. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.d.ts +6 -12
  34. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.js +192 -127
  35. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.js.map +1 -1
  36. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.d.ts +14 -5
  37. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.js +43 -24
  38. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.js.map +1 -1
  39. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/SearchResultsTree.d.ts +3 -1
  40. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/SearchResultsTree.js +78 -17
  41. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/SearchResultsTree.js.map +1 -1
  42. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.d.ts +2 -0
  43. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js +4 -1
  44. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js.map +1 -1
  45. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js +91 -114
  46. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js.map +1 -1
  47. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeIcon.d.ts +2 -2
  48. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeIcon.js.map +1 -1
  49. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeNode.d.ts +32 -0
  50. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeNode.js +26 -0
  51. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeNode.js.map +1 -0
  52. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.d.ts +13 -1
  53. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js +62 -32
  54. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js.map +1 -1
  55. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.d.ts +12 -9
  56. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.js +42 -38
  57. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.js.map +1 -1
  58. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.d.ts +15 -38
  59. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js +59 -242
  60. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js.map +1 -1
  61. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNodeInternal.d.ts +29 -0
  62. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNodeInternal.js +19 -0
  63. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNodeInternal.js.map +1 -0
  64. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.d.ts +5 -9
  65. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.js +155 -84
  66. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.js.map +1 -1
  67. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHelper.js +20 -6
  68. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHelper.js.map +1 -1
  69. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/SearchResultsTree.d.ts +6 -10
  70. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/SearchResultsTree.js +104 -63
  71. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/SearchResultsTree.js.map +1 -1
  72. package/lib/esm/tree-widget-react/components/trees/common/SharedTreeContextProvider.d.ts +7 -0
  73. package/lib/esm/tree-widget-react/components/trees/common/SharedTreeContextProvider.js +14 -0
  74. package/lib/esm/tree-widget-react/components/trees/common/SharedTreeContextProvider.js.map +1 -0
  75. package/lib/esm/tree-widget-react/components/trees/common/TreeWidgetViewport.js +1 -1
  76. package/lib/esm/tree-widget-react/components/trees/common/TreeWidgetViewport.js.map +1 -1
  77. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js +2 -2
  78. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js.map +1 -1
  79. package/lib/esm/tree-widget-react/components/trees/common/Utils.js +2 -2
  80. package/lib/esm/tree-widget-react/components/trees/common/Utils.js.map +1 -1
  81. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.d.ts +4 -4
  82. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js +1 -1
  83. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js.map +1 -1
  84. package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.d.ts +4 -4
  85. package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.js.map +1 -1
  86. package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js +7 -5
  87. package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js.map +1 -1
  88. package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.d.ts +2 -2
  89. package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.js.map +1 -1
  90. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js +5 -5
  91. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js.map +1 -1
  92. package/lib/esm/tree-widget-react/components/trees/common/internal/SharedTreeContextProviderInternal.d.ts +20 -0
  93. package/lib/esm/tree-widget-react/components/trees/common/internal/SharedTreeContextProviderInternal.js +44 -0
  94. package/lib/esm/tree-widget-react/components/trees/common/internal/SharedTreeContextProviderInternal.js.map +1 -0
  95. package/lib/esm/tree-widget-react/components/trees/common/internal/Types.d.ts +4 -0
  96. package/lib/esm/tree-widget-react/components/trees/common/internal/Types.js.map +1 -1
  97. package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.d.ts +12 -0
  98. package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.js +2 -1
  99. package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.js.map +1 -1
  100. package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.d.ts +17 -6
  101. package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js +58 -29
  102. package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js.map +1 -1
  103. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.d.ts +8 -14
  104. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js +22 -26
  105. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js.map +1 -1
  106. package/lib/esm/tree-widget-react/components/trees/common/internal/{AlwaysAndNeverDrawnElementInfo.d.ts → caches/AlwaysAndNeverDrawnElementInfoCache.d.ts} +15 -21
  107. package/lib/esm/tree-widget-react/components/trees/common/internal/{AlwaysAndNeverDrawnElementInfo.js → caches/AlwaysAndNeverDrawnElementInfoCache.js} +40 -38
  108. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/AlwaysAndNeverDrawnElementInfoCache.js.map +1 -0
  109. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/BaseIdsCache.d.ts +68 -0
  110. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/BaseIdsCache.js +148 -0
  111. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/BaseIdsCache.js.map +1 -0
  112. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementChildrenCache.d.ts +30 -0
  113. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementChildrenCache.js +151 -0
  114. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementChildrenCache.js.map +1 -0
  115. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementModelCategoriesCache.d.ts +32 -0
  116. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementModelCategoriesCache.js +106 -0
  117. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementModelCategoriesCache.js.map +1 -0
  118. package/lib/esm/tree-widget-react/components/trees/common/internal/{ModelCategoryElementsCountCache.d.ts → caches/ModelCategoryElementsCountCache.d.ts} +9 -2
  119. package/lib/esm/tree-widget-react/components/trees/common/internal/{ModelCategoryElementsCountCache.js → caches/ModelCategoryElementsCountCache.js} +17 -21
  120. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ModelCategoryElementsCountCache.js.map +1 -0
  121. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ModeledElementsCache.d.ts +27 -0
  122. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ModeledElementsCache.js +106 -0
  123. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ModeledElementsCache.js.map +1 -0
  124. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/SubCategoriesCache.d.ts +23 -0
  125. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/SubCategoriesCache.js +56 -0
  126. package/lib/esm/tree-widget-react/components/trees/common/internal/caches/SubCategoriesCache.js.map +1 -0
  127. package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.d.ts +6 -6
  128. package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.js +27 -17
  129. package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.js.map +1 -1
  130. package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.d.ts +7 -13
  131. package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.js +36 -35
  132. package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.js.map +1 -1
  133. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseSearchResultsTree.d.ts +18 -0
  134. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseSearchResultsTree.js +14 -1
  135. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseSearchResultsTree.js.map +1 -1
  136. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.d.ts +46 -70
  137. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.js +229 -361
  138. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.js.map +1 -1
  139. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +2 -2
  140. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
  141. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
  142. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.d.ts +2 -2
  143. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
  144. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
  145. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.js +1 -1
  146. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.js.map +1 -1
  147. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js +32 -19
  148. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js.map +1 -1
  149. package/lib/esm/tree-widget-react/components/trees/index.d.ts +5 -1
  150. package/lib/esm/tree-widget-react/components/trees/index.js +5 -1
  151. package/lib/esm/tree-widget-react/components/trees/index.js.map +1 -1
  152. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.d.ts +4 -1
  153. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js +4 -1
  154. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js.map +1 -1
  155. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.d.ts +7 -3
  156. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js +36 -35
  157. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js.map +1 -1
  158. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.d.ts +1 -0
  159. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js +3 -1
  160. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  161. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.d.ts +3 -1
  162. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +70 -26
  163. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -1
  164. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeNode.d.ts +63 -0
  165. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeNode.js +56 -0
  166. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeNode.js.map +1 -0
  167. package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.d.ts +5 -3
  168. package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js +26 -13
  169. package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js.map +1 -1
  170. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +11 -23
  171. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +56 -189
  172. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -1
  173. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNodeInternal.d.ts +52 -0
  174. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNodeInternal.js +22 -0
  175. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNodeInternal.js.map +1 -0
  176. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseSearchPaths.d.ts +2 -2
  177. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseSearchPaths.js +8 -8
  178. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseSearchPaths.js.map +1 -1
  179. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.d.ts +6 -12
  180. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.js +190 -114
  181. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.js.map +1 -1
  182. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHelper.d.ts +6 -0
  183. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHelper.js +20 -8
  184. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHelper.js.map +1 -1
  185. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/SearchResultsTree.d.ts +4 -2
  186. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/SearchResultsTree.js +73 -13
  187. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/SearchResultsTree.js.map +1 -1
  188. package/lib/esm/tree-widget-react-internal.d.ts +1 -1
  189. package/lib/esm/tree-widget-react-internal.js +1 -1
  190. package/lib/esm/tree-widget-react-internal.js.map +1 -1
  191. package/package.json +77 -82
  192. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNode.d.ts +0 -41
  193. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNode.js +0 -50
  194. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNode.js.map +0 -1
  195. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNode.d.ts +0 -19
  196. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNode.js +0 -32
  197. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNode.js.map +0 -1
  198. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseSearchPaths.d.ts +0 -20
  199. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseSearchPaths.js +0 -53
  200. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseSearchPaths.js.map +0 -1
  201. package/lib/esm/tree-widget-react/components/trees/common/internal/AlwaysAndNeverDrawnElementInfo.js.map +0 -1
  202. package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js.map +0 -1
  203. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNode.d.ts +0 -37
  204. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNode.js +0 -54
  205. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNode.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SearchResultsTree.js","sourceRoot":"","sources":["../../../../../../../../src/tree-widget-react/components/trees/categories-tree/internal/visibility/SearchResultsTree.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 { firstValueFrom } from \"rxjs\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { CLASS_NAME_SubCategory } from \"../../../common/internal/ClassNameDefinitions.js\";\nimport { createSearchResultsTree, SearchResultsNodesHandler } from \"../../../common/internal/visibility/BaseSearchResultsTree.js\";\n\nimport type { Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport type { HierarchySearchPath } from \"@itwin/presentation-hierarchies\";\nimport type { ECClassHierarchyInspector } from \"@itwin/presentation-shared\";\nimport type { CategoryId, ElementId, ModelId, SubCategoryId } from \"../../../common/internal/Types.js\";\nimport type {\n BaseSearchResultsTreeNode,\n SearchResultsTree,\n SearchResultsTreeNodeChildren,\n SearchResultsTreeRootNode,\n} from \"../../../common/internal/visibility/BaseSearchResultsTree.js\";\nimport type { CategoriesTreeIdsCache } from \"../CategoriesTreeIdsCache.js\";\n\n/** @internal */\nexport interface CategoriesTreeSearchTargets {\n categories?: Array<{ modelId: Id64String | undefined; categoryIds: Id64Set }>;\n elements?: Array<{ modelId: Id64String; categoryId: Id64String; elements: Map<ElementId, { isSearchTarget: boolean }> }>;\n definitionContainerIds?: Id64Set;\n modelIds?: Id64Set;\n subCategories?: Array<{ categoryId: Id64String; subCategoryIds: Id64Set }>;\n}\n\ninterface CategorySearchResultsTreeNode extends BaseSearchResultsTreeNode<CategorySearchResultsTreeNode> {\n type: \"category\";\n modelId?: Id64String;\n}\n\ninterface ModelSearchResultsTreeNode extends BaseSearchResultsTreeNode<ModelSearchResultsTreeNode> {\n type: \"model\";\n categoryId?: Id64String;\n}\ninterface SubCategorySearchResultsTreeNode extends BaseSearchResultsTreeNode<SubCategorySearchResultsTreeNode> {\n type: \"subCategory\";\n categoryId: Id64String;\n}\n\ninterface DefinitionContainerSearchResultsTreeNode extends BaseSearchResultsTreeNode<DefinitionContainerSearchResultsTreeNode> {\n type: \"definitionContainer\";\n}\n\ninterface ElementSearchResultsTreeNode extends BaseSearchResultsTreeNode<ElementSearchResultsTreeNode> {\n type: \"element\";\n categoryId: Id64String;\n modelId: Id64String;\n}\n\ntype SearchResultsTreeNode =\n | DefinitionContainerSearchResultsTreeNode\n | SubCategorySearchResultsTreeNode\n | CategorySearchResultsTreeNode\n | ElementSearchResultsTreeNode\n | ModelSearchResultsTreeNode;\n\ntype TemporaryElementSearchResultsNode = Omit<ElementSearchResultsTreeNode, \"modelId\" | \"children\"> & {\n modelId: string | undefined;\n children?: SearchResultsTreeNodeChildren<TemporaryElementSearchResultsNode>;\n};\n\ntype TemporarySearchResultsTreeNode =\n | DefinitionContainerSearchResultsTreeNode\n | SubCategorySearchResultsTreeNode\n | CategorySearchResultsTreeNode\n | TemporaryElementSearchResultsNode\n | ModelSearchResultsTreeNode;\n\n/** @internal */\nexport async function createCategoriesSearchResultsTree(props: {\n imodelAccess: ECClassHierarchyInspector;\n searchPaths: HierarchySearchPath[];\n categoryClassName: string;\n categoryElementClassName: string;\n categoryModelClassName: string;\n idsCache: CategoriesTreeIdsCache;\n}): Promise<SearchResultsTree<CategoriesTreeSearchTargets>> {\n const { imodelAccess, searchPaths, categoryClassName, categoryElementClassName, categoryModelClassName, idsCache } = props;\n return createSearchResultsTree({\n searchResultsNodesHandler: new CategoriesTreeSearchResultsNodesHandler({\n idsCache,\n imodelAccess,\n categoryClassName,\n categoryElementClassName,\n categoryModelClassName,\n }),\n searchPaths,\n });\n}\n\ninterface SearchTargetsInternal {\n elements?: Map<ModelCategoryKey, Map<ElementId, { isSearchTarget: boolean }>>;\n categories?: Map<ModelId | undefined, Set<CategoryId>>;\n definitionContainerIds?: Id64Set;\n modelIds?: Id64Set;\n subCategories?: Map<CategoryId, Set<SubCategoryId>>;\n}\n\ninterface CategoriesTreeSearchResultsNodesHandlerProps {\n idsCache: CategoriesTreeIdsCache;\n imodelAccess: ECClassHierarchyInspector;\n categoryClassName: string;\n categoryElementClassName: string;\n categoryModelClassName: string;\n}\n\ntype ModelCategoryKey = `${ModelId}-${CategoryId}`;\n\ninterface ProcessedSearchResultsNodes {\n searchResultsElements: Map<Id64String, Omit<ElementSearchResultsTreeNode, \"children\">>;\n}\n\nclass CategoriesTreeSearchResultsNodesHandler extends SearchResultsNodesHandler<\n ProcessedSearchResultsNodes,\n CategoriesTreeSearchTargets,\n TemporarySearchResultsTreeNode\n> {\n readonly #props: CategoriesTreeSearchResultsNodesHandlerProps;\n constructor(props: CategoriesTreeSearchResultsNodesHandlerProps) {\n super();\n this.#props = props;\n }\n\n public async getProcessedSearchResultsNodes(): Promise<ProcessedSearchResultsNodes> {\n const searchResultsTemporaryElements = new Map<Id64String, Omit<TemporaryElementSearchResultsNode, \"children\">>();\n const result: ProcessedSearchResultsNodes = {\n searchResultsElements: new Map(),\n };\n this.searchResultsNodesArr.forEach((node) => {\n if (node.type === \"element\") {\n searchResultsTemporaryElements.set(node.id, node);\n }\n });\n\n const searchResultsElementsModels = await firstValueFrom(this.#props.idsCache.getFilteredElementsModels([...searchResultsTemporaryElements.keys()]));\n searchResultsTemporaryElements.forEach((element, id) => {\n const modelId = searchResultsElementsModels.get(element.id);\n assert(modelId !== undefined);\n result.searchResultsElements.set(id, { ...element, modelId });\n });\n return result;\n }\n\n public convertNodesToSearchTargets(\n searchResultsNodes: TemporarySearchResultsTreeNode[],\n processedSearchResultsNodes: ProcessedSearchResultsNodes,\n ): CategoriesTreeSearchTargets | undefined {\n const searchTargets: SearchTargetsInternal = {};\n\n searchResultsNodes.forEach((searchResultsNode) => this.collectSearchTargets(searchTargets, searchResultsNode, processedSearchResultsNodes));\n\n return this.convertInternalSearchTargets(searchTargets);\n }\n\n private convertInternalSearchTargets(searchTargets: SearchTargetsInternal): CategoriesTreeSearchTargets | undefined {\n if (\n !searchTargets.categories &&\n !searchTargets.definitionContainerIds &&\n !searchTargets.elements &&\n !searchTargets.modelIds &&\n !searchTargets.subCategories\n ) {\n return undefined;\n }\n return {\n categories: searchTargets.categories\n ? [...searchTargets.categories.entries()].map(([modelId, categoryIds]) => {\n return { modelId, categoryIds };\n })\n : undefined,\n elements: searchTargets.elements\n ? [...searchTargets.elements.entries()].map(([modelCategoryKey, elements]) => {\n const { modelId, categoryId } = this.parseModelCategoryKey(modelCategoryKey);\n return { modelId, categoryId, elements };\n })\n : undefined,\n definitionContainerIds: searchTargets.definitionContainerIds,\n modelIds: searchTargets.modelIds,\n subCategories: searchTargets.subCategories\n ? [...searchTargets.subCategories.entries()].map(([categoryId, subCategoryIds]) => {\n return { categoryId, subCategoryIds };\n })\n : undefined,\n };\n }\n\n private collectSearchTargets(\n searchTargets: SearchTargetsInternal,\n node: TemporarySearchResultsTreeNode,\n processedSearchResultsNodes: ProcessedSearchResultsNodes,\n ) {\n const searchResultsNode = node.type !== \"element\" ? node : processedSearchResultsNodes.searchResultsElements.get(node.id);\n assert(searchResultsNode !== undefined);\n if (searchResultsNode.isSearchTarget) {\n this.addTarget(searchTargets, searchResultsNode);\n return;\n }\n\n if (searchResultsNode.type === \"element\") {\n // need to add parent ids as search target will be an element\n this.addTarget(searchTargets, searchResultsNode);\n }\n\n if (!node.children) {\n return;\n }\n\n for (const child of node.children.values()) {\n this.collectSearchTargets(searchTargets, child, processedSearchResultsNodes);\n }\n }\n\n private addTarget(searchTargets: SearchTargetsInternal, node: SearchResultsTreeNode) {\n switch (node.type) {\n case \"definitionContainer\":\n (searchTargets.definitionContainerIds ??= new Set()).add(node.id);\n return;\n case \"model\":\n (searchTargets.modelIds ??= new Set()).add(node.id);\n return;\n case \"subCategory\":\n const subCategories = (searchTargets.subCategories ??= new Map()).get(node.categoryId);\n if (subCategories) {\n subCategories.add(node.id);\n return;\n }\n searchTargets.subCategories.set(node.categoryId, new Set([node.id]));\n return;\n case \"category\":\n const categories = (searchTargets.categories ??= new Map()).get(node.modelId);\n if (!categories) {\n categories.add(node.id);\n return;\n }\n searchTargets.categories.set(node.modelId, new Set([node.id]));\n return;\n case \"element\":\n const modelCategoryKey = this.createModelCategoryKey(node.modelId, node.categoryId);\n const elements = (searchTargets.elements ??= new Map()).get(modelCategoryKey);\n if (elements) {\n elements.set(node.id, { isSearchTarget: node.isSearchTarget });\n } else {\n searchTargets.elements.set(modelCategoryKey, new Map([[node.id, { isSearchTarget: node.isSearchTarget }]]));\n }\n }\n }\n\n private createModelCategoryKey(modelId: Id64String, categoryId: Id64String): ModelCategoryKey {\n return `${modelId}-${categoryId}`;\n }\n\n private parseModelCategoryKey(key: ModelCategoryKey): { modelId: Id64String; categoryId: Id64String } {\n const [modelId, categoryId] = key.split(\"-\");\n return { modelId, categoryId };\n }\n\n public createSearchResultsTreeNode({\n type,\n id,\n isSearchTarget,\n parent,\n }: {\n type: SearchResultsTreeNode[\"type\"];\n id: Id64String;\n isSearchTarget: boolean;\n parent: TemporarySearchResultsTreeNode | SearchResultsTreeRootNode<TemporarySearchResultsTreeNode>;\n }): TemporarySearchResultsTreeNode {\n if (type === \"definitionContainer\") {\n return {\n id,\n isSearchTarget,\n type,\n };\n }\n if (type === \"subCategory\") {\n assert(\"id\" in parent);\n return {\n id,\n isSearchTarget,\n type,\n categoryId: parent.id,\n };\n }\n if (type === \"category\") {\n if (\"type\" in parent && parent.type === \"model\") {\n return {\n id,\n isSearchTarget,\n type,\n modelId: parent.id,\n };\n }\n return {\n id,\n isSearchTarget,\n type,\n };\n }\n if (type === \"model\") {\n assert(\"id\" in parent);\n return {\n id,\n isSearchTarget,\n type,\n categoryId: parent.type === \"category\" ? parent.id : undefined,\n };\n }\n\n if (\"type\" in parent) {\n if (parent.type === \"category\") {\n return {\n id,\n isSearchTarget,\n type,\n categoryId: parent.id,\n modelId: undefined,\n };\n }\n assert(parent.type === \"element\");\n return {\n id,\n isSearchTarget,\n type,\n categoryId: parent.categoryId,\n modelId: undefined,\n };\n }\n\n throw new Error(\"Invalid parent node type\");\n }\n\n public async getType(className: string): Promise<TemporarySearchResultsTreeNode[\"type\"]> {\n if (await this.#props.imodelAccess.classDerivesFrom(className, CLASS_NAME_SubCategory)) {\n return \"subCategory\";\n }\n if (await this.#props.imodelAccess.classDerivesFrom(className, this.#props.categoryElementClassName)) {\n return \"element\";\n }\n if (await this.#props.imodelAccess.classDerivesFrom(className, this.#props.categoryClassName)) {\n return \"category\";\n }\n if (await this.#props.imodelAccess.classDerivesFrom(className, this.#props.categoryModelClassName)) {\n return \"model\";\n }\n return \"definitionContainer\";\n }\n}\n"]}
1
+ {"version":3,"file":"SearchResultsTree.js","sourceRoot":"","sources":["../../../../../../../../src/tree-widget-react/components/trees/categories-tree/internal/visibility/SearchResultsTree.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 { firstValueFrom } from \"rxjs\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { CLASS_NAME_DefinitionContainer, CLASS_NAME_SubCategory } from \"../../../common/internal/ClassNameDefinitions.js\";\nimport { createSearchResultsTree, SearchResultsNodesHandler } from \"../../../common/internal/visibility/BaseSearchResultsTree.js\";\n\nimport type { Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport type { HierarchySearchPath } from \"@itwin/presentation-hierarchies\";\nimport type { ECClassHierarchyInspector, InstanceKey } from \"@itwin/presentation-shared\";\nimport type { CategoryId, ElementId, ModelId, SubCategoryId } from \"../../../common/internal/Types.js\";\nimport type {\n BaseSearchResultsTreeNode,\n SearchResultsNodeIdentifierAsString,\n SearchResultsTree,\n SearchResultsTreeNodeChildren,\n SearchResultsTreeRootNode,\n} from \"../../../common/internal/visibility/BaseSearchResultsTree.js\";\nimport type { CategoriesTreeIdsCache } from \"../CategoriesTreeIdsCache.js\";\n\n/** @internal */\nexport interface CategoriesTreeSearchTargets {\n categories?: Array<{ modelId: Id64String | undefined; categoryIds: Id64Set }>;\n elements?: Array<{\n pathToElements: InstanceKey[];\n modelId: Id64String;\n categoryId: Id64String;\n elements: Map<ElementId, { isSearchTarget: boolean }>;\n topMostParentElementId?: ElementId;\n }>;\n definitionContainerIds?: Id64Set;\n modelIds?: Id64Set;\n subCategories?: Array<{ categoryId: Id64String; subCategoryIds: Id64Set }>;\n}\n\ninterface CategorySearchResultsTreeNode extends BaseSearchResultsTreeNode<CategorySearchResultsTreeNode> {\n type: \"category\";\n modelId?: Id64String;\n}\n\ninterface ModelSearchResultsTreeNode extends BaseSearchResultsTreeNode<ModelSearchResultsTreeNode> {\n type: \"model\";\n categoryId?: Id64String;\n}\ninterface SubCategorySearchResultsTreeNode extends BaseSearchResultsTreeNode<SubCategorySearchResultsTreeNode> {\n type: \"subCategory\";\n categoryId: Id64String;\n}\n\ninterface DefinitionContainerSearchResultsTreeNode extends BaseSearchResultsTreeNode<DefinitionContainerSearchResultsTreeNode> {\n type: \"definitionContainer\";\n}\n\ninterface ElementSearchResultsTreeNode extends BaseSearchResultsTreeNode<ElementSearchResultsTreeNode> {\n type: \"element\";\n categoryId: Id64String;\n modelId: Id64String;\n}\n\ntype SearchResultsTreeNode =\n | DefinitionContainerSearchResultsTreeNode\n | SubCategorySearchResultsTreeNode\n | CategorySearchResultsTreeNode\n | ElementSearchResultsTreeNode\n | ModelSearchResultsTreeNode;\n\ntype TemporaryElementSearchResultsNode = Omit<ElementSearchResultsTreeNode, \"modelId\" | \"children\"> & {\n modelId: string | undefined;\n children?: SearchResultsTreeNodeChildren<TemporaryElementSearchResultsNode>;\n};\n\ntype TemporarySearchResultsTreeNode =\n | DefinitionContainerSearchResultsTreeNode\n | SubCategorySearchResultsTreeNode\n | CategorySearchResultsTreeNode\n | TemporaryElementSearchResultsNode\n | ModelSearchResultsTreeNode;\n\n/** @internal */\nexport async function createCategoriesSearchResultsTree(props: {\n imodelAccess: ECClassHierarchyInspector;\n searchPaths: HierarchySearchPath[];\n categoryClassName: string;\n categoryElementClassName: string;\n categoryModelClassName: string;\n idsCache: CategoriesTreeIdsCache;\n}): Promise<SearchResultsTree<CategoriesTreeSearchTargets>> {\n const { imodelAccess, searchPaths, categoryClassName, categoryElementClassName, categoryModelClassName, idsCache } = props;\n return createSearchResultsTree({\n searchResultsNodesHandler: new CategoriesTreeSearchResultsNodesHandler({\n idsCache,\n imodelAccess,\n categoryClassName,\n categoryElementClassName,\n categoryModelClassName,\n }),\n searchPaths,\n });\n}\n\ntype SearchTargetsInternalElements = Map<\n SearchResultsNodeIdentifierAsString,\n {\n children?: SearchTargetsInternalElements;\n topMostParentElementId?: Id64String;\n modelCategoryElements?: Map<ModelCategoryKey, Map<ElementId, { isSearchTarget: boolean }>>;\n }\n>;\n\ninterface SearchTargetsInternal {\n elements?: SearchTargetsInternalElements;\n categories?: Map<ModelId | undefined, Set<CategoryId>>;\n definitionContainerIds?: Id64Set;\n modelIds?: Id64Set;\n subCategories?: Map<CategoryId, Set<SubCategoryId>>;\n}\n\ninterface CategoriesTreeSearchResultsNodesHandlerProps {\n idsCache: CategoriesTreeIdsCache;\n imodelAccess: ECClassHierarchyInspector;\n categoryClassName: string;\n categoryElementClassName: string;\n categoryModelClassName: string;\n}\n\ntype ModelCategoryKey = `${ModelId}-${CategoryId}`;\n\ninterface ProcessedSearchResultsNodes {\n searchResultsElements: Map<Id64String, Omit<ElementSearchResultsTreeNode, \"children\">>;\n}\n\nclass CategoriesTreeSearchResultsNodesHandler extends SearchResultsNodesHandler<\n ProcessedSearchResultsNodes,\n CategoriesTreeSearchTargets,\n TemporarySearchResultsTreeNode\n> {\n readonly #props: CategoriesTreeSearchResultsNodesHandlerProps;\n constructor(props: CategoriesTreeSearchResultsNodesHandlerProps) {\n super();\n this.#props = props;\n }\n\n public async getProcessedSearchResultsNodes(): Promise<ProcessedSearchResultsNodes> {\n const searchResultsTemporaryElements = new Map<Id64String, Omit<TemporaryElementSearchResultsNode, \"children\">>();\n const result: ProcessedSearchResultsNodes = {\n searchResultsElements: new Map(),\n };\n for (const node of this.searchResultsNodesArr) {\n if (node.type === \"element\") {\n searchResultsTemporaryElements.set(node.id, node);\n }\n }\n\n const searchResultsElementsModels = await firstValueFrom(this.#props.idsCache.getFilteredElementsModels([...searchResultsTemporaryElements.keys()]));\n for (const [id, element] of searchResultsTemporaryElements) {\n const modelId = searchResultsElementsModels.get(element.id);\n assert(modelId !== undefined);\n result.searchResultsElements.set(id, { ...element, modelId });\n }\n return result;\n }\n\n public convertNodesToSearchTargets(\n searchResultsNodes: TemporarySearchResultsTreeNode[],\n processedSearchResultsNodes: ProcessedSearchResultsNodes,\n ): CategoriesTreeSearchTargets | undefined {\n const searchTargets: SearchTargetsInternal = {};\n\n searchResultsNodes.forEach((searchResultsNode) => this.collectSearchTargets(searchTargets, searchResultsNode, processedSearchResultsNodes));\n\n return this.convertInternalSearchTargets(searchTargets);\n }\n\n private convertInternalSearchTargetElementsRecursively(\n searchTargetsInternalElements: SearchTargetsInternalElements,\n currentPath: InstanceKey[],\n ): Required<CategoriesTreeSearchTargets>[\"elements\"] {\n const result: Required<CategoriesTreeSearchTargets>[\"elements\"] = [];\n // Internal search target elements are stored in a tree structure, need to convert that to array structure.\n for (const [identifierAsString, entry] of searchTargetsInternalElements) {\n const identifier = this.convertSearchResultsNodeIdentifierStringToHierarchyNodeIdentifier(identifierAsString);\n if (entry.modelCategoryElements) {\n for (const [modelCategoryKey, elements] of entry.modelCategoryElements) {\n const { modelId, categoryId } = this.parseModelCategoryKey(modelCategoryKey);\n result.push({ pathToElements: [...currentPath, identifier], modelId, categoryId, elements, topMostParentElementId: entry.topMostParentElementId });\n }\n }\n if (!entry.children) {\n continue;\n }\n for (const childValue of this.convertInternalSearchTargetElementsRecursively(entry.children, [...currentPath, identifier])) {\n result.push(childValue);\n }\n }\n return result;\n }\n\n private convertInternalSearchTargets(searchTargets: SearchTargetsInternal): CategoriesTreeSearchTargets | undefined {\n if (\n !searchTargets.categories &&\n !searchTargets.definitionContainerIds &&\n !searchTargets.elements &&\n !searchTargets.modelIds &&\n !searchTargets.subCategories\n ) {\n return undefined;\n }\n return {\n categories: searchTargets.categories\n ? [...searchTargets.categories.entries()].map(([modelId, categoryIds]) => {\n return { modelId, categoryIds };\n })\n : undefined,\n elements: searchTargets.elements ? this.convertInternalSearchTargetElementsRecursively(searchTargets.elements, []) : undefined,\n definitionContainerIds: searchTargets.definitionContainerIds,\n modelIds: searchTargets.modelIds,\n subCategories: searchTargets.subCategories\n ? [...searchTargets.subCategories.entries()].map(([categoryId, subCategoryIds]) => {\n return { categoryId, subCategoryIds };\n })\n : undefined,\n };\n }\n\n private collectSearchTargets(\n searchTargets: SearchTargetsInternal,\n node: TemporarySearchResultsTreeNode,\n processedSearchResultsNodes: ProcessedSearchResultsNodes,\n ) {\n const searchResultsNode = node.type !== \"element\" ? node : processedSearchResultsNodes.searchResultsElements.get(node.id);\n assert(searchResultsNode !== undefined);\n if (searchResultsNode.isSearchTarget) {\n this.addTarget(searchTargets, searchResultsNode);\n return;\n }\n\n if (searchResultsNode.type === \"element\") {\n // need to add parent ids as search target will be an element\n this.addTarget(searchTargets, searchResultsNode);\n }\n\n if (!node.children) {\n return;\n }\n\n for (const child of node.children.values()) {\n this.collectSearchTargets(searchTargets, child, processedSearchResultsNodes);\n }\n }\n\n private addTarget(searchTargets: SearchTargetsInternal, node: SearchResultsTreeNode) {\n switch (node.type) {\n case \"definitionContainer\":\n (searchTargets.definitionContainerIds ??= new Set()).add(node.id);\n return;\n case \"model\":\n (searchTargets.modelIds ??= new Set()).add(node.id);\n return;\n case \"subCategory\":\n const subCategories = (searchTargets.subCategories ??= new Map()).get(node.categoryId);\n if (subCategories) {\n subCategories.add(node.id);\n return;\n }\n searchTargets.subCategories.set(node.categoryId, new Set([node.id]));\n return;\n case \"category\":\n const categories = (searchTargets.categories ??= new Map()).get(node.modelId);\n if (!categories) {\n categories.add(node.id);\n return;\n }\n searchTargets.categories.set(node.modelId, new Set([node.id]));\n return;\n case \"element\":\n // Internal search target elements need to have path saved in some way.\n // For this, a tree structure is used, where keys are stringified identifiers of parent nodes depending on the hierarchy.\n const modelCategoryKey = this.createModelCategoryKey(node.modelId, node.categoryId);\n searchTargets.elements ??= new Map();\n let entry = searchTargets.elements;\n let topMostParentElementId: Id64String | undefined;\n for (let i = 0; i < node.pathToNode.length; ++i) {\n if (topMostParentElementId === undefined && node.pathToNode[i].type === \"element\") {\n topMostParentElementId = node.pathToNode[i].id;\n }\n const identifierAsString = this.convertSearchResultsNodeIdentifierToString(node.pathToNode[i]);\n let identifierEntry = entry.get(identifierAsString);\n // create a new entry for parent node if it does not exist\n if (!identifierEntry) {\n identifierEntry = { topMostParentElementId };\n entry.set(identifierAsString, identifierEntry);\n }\n // last entry in the path don't need to have children\n if (i < node.pathToNode.length - 1) {\n identifierEntry.children ??= new Map();\n entry = identifierEntry.children;\n continue;\n }\n\n const elements = (identifierEntry.modelCategoryElements ??= new Map()).get(modelCategoryKey);\n // Add elements who share the same path to the modelCategoryElements map\n if (elements) {\n elements.set(node.id, { isSearchTarget: node.isSearchTarget });\n } else {\n identifierEntry.modelCategoryElements.set(modelCategoryKey, new Map([[node.id, { isSearchTarget: node.isSearchTarget }]]));\n }\n }\n }\n }\n\n private createModelCategoryKey(modelId: Id64String, categoryId: Id64String): ModelCategoryKey {\n return `${modelId}-${categoryId}`;\n }\n\n private parseModelCategoryKey(key: ModelCategoryKey): { modelId: Id64String; categoryId: Id64String } {\n const [modelId, categoryId] = key.split(\"-\");\n return { modelId, categoryId };\n }\n\n public createSearchResultsTreeNode({\n type,\n id,\n isSearchTarget,\n parent,\n }: {\n type: SearchResultsTreeNode[\"type\"];\n id: Id64String;\n isSearchTarget: boolean;\n parent: TemporarySearchResultsTreeNode | SearchResultsTreeRootNode<TemporarySearchResultsTreeNode>;\n }): TemporarySearchResultsTreeNode {\n const pathToNode = \"pathToNode\" in parent ? [...parent.pathToNode, { type: parent.type, id: parent.id }] : [];\n if (type === \"definitionContainer\") {\n return {\n id,\n isSearchTarget,\n type,\n pathToNode,\n };\n }\n if (type === \"subCategory\") {\n assert(\"id\" in parent);\n return {\n id,\n isSearchTarget,\n type,\n categoryId: parent.id,\n pathToNode,\n };\n }\n if (type === \"category\") {\n if (\"type\" in parent && parent.type === \"model\") {\n return {\n id,\n isSearchTarget,\n type,\n modelId: parent.id,\n pathToNode,\n };\n }\n return {\n id,\n isSearchTarget,\n type,\n pathToNode,\n };\n }\n if (type === \"model\") {\n assert(\"id\" in parent);\n return {\n id,\n isSearchTarget,\n type,\n categoryId: parent.type === \"category\" ? parent.id : undefined,\n pathToNode,\n };\n }\n\n if (\"type\" in parent) {\n if (parent.type === \"category\") {\n return {\n id,\n isSearchTarget,\n type,\n categoryId: parent.id,\n modelId: undefined,\n pathToNode,\n };\n }\n assert(parent.type === \"element\");\n return {\n id,\n isSearchTarget,\n type,\n categoryId: parent.categoryId,\n modelId: undefined,\n pathToNode,\n };\n }\n\n throw new Error(\"Invalid parent node type\");\n }\n\n public async getType(className: string): Promise<TemporarySearchResultsTreeNode[\"type\"]> {\n if (await this.#props.imodelAccess.classDerivesFrom(className, CLASS_NAME_SubCategory)) {\n return \"subCategory\";\n }\n if (await this.#props.imodelAccess.classDerivesFrom(className, this.#props.categoryElementClassName)) {\n return \"element\";\n }\n if (await this.#props.imodelAccess.classDerivesFrom(className, this.#props.categoryClassName)) {\n return \"category\";\n }\n if (await this.#props.imodelAccess.classDerivesFrom(className, this.#props.categoryModelClassName)) {\n return \"model\";\n }\n return \"definitionContainer\";\n }\n\n public getClassName(type: TemporarySearchResultsTreeNode[\"type\"]): string {\n switch (type) {\n case \"definitionContainer\":\n return CLASS_NAME_DefinitionContainer;\n case \"subCategory\":\n return CLASS_NAME_SubCategory;\n case \"category\":\n return this.#props.categoryClassName;\n case \"model\":\n return this.#props.categoryModelClassName;\n default:\n return this.#props.categoryElementClassName;\n }\n }\n}\n"]}
@@ -14,6 +14,8 @@ interface ClassificationsTreeComponentProps extends Pick<ClassificationsTreeProp
14
14
  }
15
15
  /**
16
16
  * A component that renders `ClassificationsTree` with active iModel and viewport.
17
+ *
18
+ * **Note:** Wrap tree components with a single `SharedTreeContextProvider` to improve trees' performance.
17
19
  * @alpha
18
20
  */
19
21
  export declare const ClassificationsTreeComponent: {
@@ -7,11 +7,14 @@ import { useActiveIModelConnection } from "@itwin/appui-react";
7
7
  import { SchemaKey, SchemaMatchType } from "@itwin/ecschema-metadata";
8
8
  import { TreeWidget } from "../../../TreeWidget.js";
9
9
  import { SelectableTree } from "../../tree-header/SelectableTree.js";
10
+ import { SharedTreeContextProviderInternal } from "../common/internal/SharedTreeContextProviderInternal.js";
10
11
  import { useActiveTreeWidgetViewport } from "../common/internal/UseActiveTreeWidgetViewport.js";
11
12
  import { TelemetryContextProvider } from "../common/UseTelemetryContext.js";
12
13
  import { ClassificationsTree } from "./ClassificationsTree.js";
13
14
  /**
14
15
  * A component that renders `ClassificationsTree` with active iModel and viewport.
16
+ *
17
+ * **Note:** Wrap tree components with a single `SharedTreeContextProvider` to improve trees' performance.
15
18
  * @alpha
16
19
  */
17
20
  export const ClassificationsTreeComponent = (props) => {
@@ -20,7 +23,7 @@ export const ClassificationsTreeComponent = (props) => {
20
23
  if (!iModel || !viewport) {
21
24
  return null;
22
25
  }
23
- return _jsx(ClassificationsTreeComponentImpl, { ...props, iModel: iModel, viewport: viewport });
26
+ return (_jsx(SharedTreeContextProviderInternal, { showWarning: true, children: _jsx(ClassificationsTreeComponentImpl, { ...props, iModel: iModel, viewport: viewport }) }));
24
27
  };
25
28
  /**
26
29
  * Id of the component. May be used when a creating a `TreeDefinition`.
@@ -1 +1 @@
1
- {"version":3,"file":"ClassificationsTreeComponent.js","sourceRoot":"","sources":["../../../../../../src/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AAChG,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAiC/D;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,KAAwC,EAAE,EAAE;IACvF,MAAM,MAAM,GAAG,yBAAyB,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,2BAA2B,CAAC,EAAE,kBAAkB,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAErF,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAC,gCAAgC,OAAK,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAI,CAAC;AAC7F,CAAC,CAAC;AAEF;;;GAGG;AACH,4BAA4B,CAAC,EAAE,GAAG,sBAAsB,CAAC;AAEzD;;;GAGG;AACH,4BAA4B,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;AAEhG,aAAa;AACb,4BAA4B,CAAC,mBAAmB,GAAG,KAAK,EAAE,MAAwB,EAAE,EAAE;IACpF,IAAI,CAAC;QACH,OAAO,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,uBAAuB,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IACtH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,SAAS,gCAAgC,CAAC,EACxC,MAAM,EACN,QAAQ,EACR,qBAAqB,EACrB,aAAa,EACb,UAAU,EACV,SAAS,EACT,GAAG,SAAS,EACmF;IAC/F,OAAO,CACL,KAAC,wBAAwB,IAAC,mBAAmB,EAAE,4BAA4B,CAAC,EAAE,EAAE,aAAa,EAAE,aAAa,EAAE,qBAAqB,EAAE,qBAAqB,YACxJ,KAAC,cAAc,cACb,KAAC,mBAAmB,OAAK,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAI,GAC3G,GACQ,CAC5B,CAAC;AACJ,CAAC","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 { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { SchemaKey, SchemaMatchType } from \"@itwin/ecschema-metadata\";\nimport { TreeWidget } from \"../../../TreeWidget.js\";\nimport { SelectableTree } from \"../../tree-header/SelectableTree.js\";\nimport { useActiveTreeWidgetViewport } from \"../common/internal/UseActiveTreeWidgetViewport.js\";\nimport { TelemetryContextProvider } from \"../common/UseTelemetryContext.js\";\nimport { ClassificationsTree } from \"./ClassificationsTree.js\";\n\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type { TreeWidgetViewport } from \"../common/TreeWidgetViewport.js\";\nimport type { ClassificationsTreeProps } from \"./ClassificationsTree.js\";\n\n/** @alpha */\ninterface ClassificationsTreeComponentProps\n extends Pick<\n ClassificationsTreeProps,\n | \"selectionStorage\"\n | \"hierarchyLevelConfig\"\n | \"selectionMode\"\n | \"searchText\"\n | \"emptyTreeContent\"\n | \"getInlineActions\"\n | \"getMenuActions\"\n | \"getContextMenuActions\"\n | \"getTreeItemProps\"\n | \"hierarchyConfig\"\n | \"getEditingProps\"\n | \"treeLabel\"\n > {\n /**\n * Viewport used for visibility controls.\n *\n * When viewport is not provided, `IModelApp.viewManager.selectedView` will be used.\n */\n viewport?: TreeWidgetViewport;\n onPerformanceMeasured?: (featureId: string, duration: number) => void;\n onFeatureUsed?: (feature: string) => void;\n}\n\n/**\n * A component that renders `ClassificationsTree` with active iModel and viewport.\n * @alpha\n */\nexport const ClassificationsTreeComponent = (props: ClassificationsTreeComponentProps) => {\n const iModel = useActiveIModelConnection();\n const viewport = useActiveTreeWidgetViewport({ treeWidgetViewport: props.viewport });\n\n if (!iModel || !viewport) {\n return null;\n }\n\n return <ClassificationsTreeComponentImpl {...props} iModel={iModel} viewport={viewport} />;\n};\n\n/**\n * Id of the component. May be used when a creating a `TreeDefinition`.\n * @alpha\n */\nClassificationsTreeComponent.id = \"classifications-tree\";\n\n/**\n * Label of the component. May be used when a creating a `TreeDefinition`.\n * @alpha\n */\nClassificationsTreeComponent.getLabel = () => TreeWidget.translate(\"classificationsTree.label\");\n\n/** @alpha */\nClassificationsTreeComponent.isSupportedByIModel = async (imodel: IModelConnection) => {\n try {\n return !!(await imodel.schemaContext.getSchemaInfo(new SchemaKey(\"ClassificationSystems\"), SchemaMatchType.Latest));\n } catch {\n return false;\n }\n};\n\nfunction ClassificationsTreeComponentImpl({\n iModel,\n viewport,\n onPerformanceMeasured,\n onFeatureUsed,\n searchText,\n treeLabel,\n ...treeProps\n}: ClassificationsTreeComponentProps & { iModel: IModelConnection; viewport: TreeWidgetViewport }) {\n return (\n <TelemetryContextProvider componentIdentifier={ClassificationsTreeComponent.id} onFeatureUsed={onFeatureUsed} onPerformanceMeasured={onPerformanceMeasured}>\n <SelectableTree>\n <ClassificationsTree {...treeProps} imodel={iModel} activeView={viewport} searchText={searchText} treeLabel={treeLabel} />\n </SelectableTree>\n </TelemetryContextProvider>\n );\n}\n"]}
1
+ {"version":3,"file":"ClassificationsTreeComponent.js","sourceRoot":"","sources":["../../../../../../src/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,iCAAiC,EAAE,MAAM,yDAAyD,CAAC;AAC5G,OAAO,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AAChG,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAgC/D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,KAAwC,EAAE,EAAE;IACvF,MAAM,MAAM,GAAG,yBAAyB,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,2BAA2B,CAAC,EAAE,kBAAkB,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAErF,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,KAAC,iCAAiC,IAAC,WAAW,EAAE,IAAI,YAClD,KAAC,gCAAgC,OAAK,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAI,GACjD,CACrC,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACH,4BAA4B,CAAC,EAAE,GAAG,sBAAsB,CAAC;AAEzD;;;GAGG;AACH,4BAA4B,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;AAEhG,aAAa;AACb,4BAA4B,CAAC,mBAAmB,GAAG,KAAK,EAAE,MAAwB,EAAE,EAAE;IACpF,IAAI,CAAC;QACH,OAAO,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,uBAAuB,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IACtH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,SAAS,gCAAgC,CAAC,EACxC,MAAM,EACN,QAAQ,EACR,qBAAqB,EACrB,aAAa,EACb,UAAU,EACV,SAAS,EACT,GAAG,SAAS,EACmF;IAC/F,OAAO,CACL,KAAC,wBAAwB,IAAC,mBAAmB,EAAE,4BAA4B,CAAC,EAAE,EAAE,aAAa,EAAE,aAAa,EAAE,qBAAqB,EAAE,qBAAqB,YACxJ,KAAC,cAAc,cACb,KAAC,mBAAmB,OAAK,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAI,GAC3G,GACQ,CAC5B,CAAC;AACJ,CAAC","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 { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { SchemaKey, SchemaMatchType } from \"@itwin/ecschema-metadata\";\nimport { TreeWidget } from \"../../../TreeWidget.js\";\nimport { SelectableTree } from \"../../tree-header/SelectableTree.js\";\nimport { SharedTreeContextProviderInternal } from \"../common/internal/SharedTreeContextProviderInternal.js\";\nimport { useActiveTreeWidgetViewport } from \"../common/internal/UseActiveTreeWidgetViewport.js\";\nimport { TelemetryContextProvider } from \"../common/UseTelemetryContext.js\";\nimport { ClassificationsTree } from \"./ClassificationsTree.js\";\n\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type { TreeWidgetViewport } from \"../common/TreeWidgetViewport.js\";\nimport type { ClassificationsTreeProps } from \"./ClassificationsTree.js\";\n\n/** @alpha */\ninterface ClassificationsTreeComponentProps extends Pick<\n ClassificationsTreeProps,\n | \"selectionStorage\"\n | \"hierarchyLevelConfig\"\n | \"selectionMode\"\n | \"searchText\"\n | \"emptyTreeContent\"\n | \"getInlineActions\"\n | \"getMenuActions\"\n | \"getContextMenuActions\"\n | \"getTreeItemProps\"\n | \"hierarchyConfig\"\n | \"getEditingProps\"\n | \"treeLabel\"\n> {\n /**\n * Viewport used for visibility controls.\n *\n * When viewport is not provided, `IModelApp.viewManager.selectedView` will be used.\n */\n viewport?: TreeWidgetViewport;\n onPerformanceMeasured?: (featureId: string, duration: number) => void;\n onFeatureUsed?: (feature: string) => void;\n}\n\n/**\n * A component that renders `ClassificationsTree` with active iModel and viewport.\n *\n * **Note:** Wrap tree components with a single `SharedTreeContextProvider` to improve trees' performance.\n * @alpha\n */\nexport const ClassificationsTreeComponent = (props: ClassificationsTreeComponentProps) => {\n const iModel = useActiveIModelConnection();\n const viewport = useActiveTreeWidgetViewport({ treeWidgetViewport: props.viewport });\n\n if (!iModel || !viewport) {\n return null;\n }\n\n return (\n <SharedTreeContextProviderInternal showWarning={true}>\n <ClassificationsTreeComponentImpl {...props} iModel={iModel} viewport={viewport} />\n </SharedTreeContextProviderInternal>\n );\n};\n\n/**\n * Id of the component. May be used when a creating a `TreeDefinition`.\n * @alpha\n */\nClassificationsTreeComponent.id = \"classifications-tree\";\n\n/**\n * Label of the component. May be used when a creating a `TreeDefinition`.\n * @alpha\n */\nClassificationsTreeComponent.getLabel = () => TreeWidget.translate(\"classificationsTree.label\");\n\n/** @alpha */\nClassificationsTreeComponent.isSupportedByIModel = async (imodel: IModelConnection) => {\n try {\n return !!(await imodel.schemaContext.getSchemaInfo(new SchemaKey(\"ClassificationSystems\"), SchemaMatchType.Latest));\n } catch {\n return false;\n }\n};\n\nfunction ClassificationsTreeComponentImpl({\n iModel,\n viewport,\n onPerformanceMeasured,\n onFeatureUsed,\n searchText,\n treeLabel,\n ...treeProps\n}: ClassificationsTreeComponentProps & { iModel: IModelConnection; viewport: TreeWidgetViewport }) {\n return (\n <TelemetryContextProvider componentIdentifier={ClassificationsTreeComponent.id} onFeatureUsed={onFeatureUsed} onPerformanceMeasured={onPerformanceMeasured}>\n <SelectableTree>\n <ClassificationsTree {...treeProps} imodel={iModel} activeView={viewport} searchText={searchText} treeLabel={treeLabel} />\n </SelectableTree>\n </TelemetryContextProvider>\n );\n}\n"]}
@@ -6,7 +6,7 @@ import { bufferCount, defaultIfEmpty, defer, EMPTY, firstValueFrom, from, fromEv
6
6
  import { Guid } from "@itwin/core-bentley";
7
7
  import { createNodesQueryClauseFactory, createPredicateBasedHierarchyDefinition } from "@itwin/presentation-hierarchies";
8
8
  import { createBisInstanceLabelSelectClauseFactory, ECSql, parseFullClassName } from "@itwin/presentation-shared";
9
- import { CLASS_NAME_Classification, CLASS_NAME_ClassificationSystem, CLASS_NAME_ClassificationTable, CLASS_NAME_Element, CLASS_NAME_ElementHasClassifications, CLASS_NAME_GeometricElement, CLASS_NAME_GeometricElement2d, CLASS_NAME_GeometricElement3d, } from "../common/internal/ClassNameDefinitions.js";
9
+ import { CLASS_NAME_Classification, CLASS_NAME_ClassificationSystem, CLASS_NAME_ClassificationTable, CLASS_NAME_Element, CLASS_NAME_ElementHasClassifications, CLASS_NAME_GeometricElement, CLASS_NAME_GeometricElement3d, } from "../common/internal/ClassNameDefinitions.js";
10
10
  import { catchBeSQLiteInterrupts } from "../common/internal/UseErrorState.js";
11
11
  import { fromWithRelease, getOptimalBatchSize, releaseMainThreadOnItemsCount } from "../common/internal/Utils.js";
12
12
  import { SearchLimitExceededError } from "../common/TreeErrors.js";
@@ -152,7 +152,27 @@ export class ClassificationsTreeDefinition {
152
152
  return [];
153
153
  }
154
154
  const classificationIds = await firstValueFrom(this.#props.getIdsCache(parentImodelKey).getDirectChildClassifications(parentClassificationIds));
155
+ const elementsInstanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({
156
+ filter: instanceFilter,
157
+ contentClass: { fullName: CLASS_NAME_GeometricElement3d, alias: "this" },
158
+ });
155
159
  return [
160
+ // load classification elements
161
+ {
162
+ fullClassName: CLASS_NAME_GeometricElement3d,
163
+ query: {
164
+ ecsql: `
165
+ SELECT ${await this.#createElementSelectClause({})}
166
+ FROM ${elementsInstanceFilterClauses.from} this
167
+ JOIN ${CLASS_NAME_ElementHasClassifications} ehc ON ehc.SourceECInstanceId = this.ECInstanceId
168
+ ${elementsInstanceFilterClauses.joins}
169
+ WHERE
170
+ ehc.TargetECInstanceId IN (${parentClassificationIds.join(",")})
171
+ AND this.Parent.Id IS NULL
172
+ ${elementsInstanceFilterClauses.where ? `AND ${elementsInstanceFilterClauses.where}` : ""}
173
+ `,
174
+ },
175
+ },
156
176
  // load child classifications
157
177
  ...(classificationIds.length
158
178
  ? [
@@ -195,60 +215,38 @@ export class ClassificationsTreeDefinition {
195
215
  })(),
196
216
  ]
197
217
  : []),
198
- // load classification elements
199
- ...(await Promise.all([CLASS_NAME_GeometricElement2d, CLASS_NAME_GeometricElement3d].map(async (elementClassName) => {
200
- const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({
201
- filter: instanceFilter,
202
- contentClass: { fullName: elementClassName, alias: "this" },
203
- });
204
- return {
205
- fullClassName: elementClassName,
206
- query: {
207
- ecsql: `
208
- SELECT ${await this.#createElementSelectClause(elementClassName)}
209
- FROM ${instanceFilterClauses.from} this
210
- JOIN ${CLASS_NAME_ElementHasClassifications} ehc ON ehc.SourceECInstanceId = this.ECInstanceId
211
- ${instanceFilterClauses.joins}
212
- WHERE
213
- ehc.TargetECInstanceId IN (${parentClassificationIds.join(",")})
214
- AND this.Parent.Id IS NULL
215
- ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : ""}
216
- `,
217
- },
218
- };
219
- }))),
220
218
  ];
221
219
  }
222
- async #createGeometricElementChildrenQuery({ parentNodeInstanceIds: parentElementIds, instanceFilter, }) {
223
- return Promise.all([CLASS_NAME_GeometricElement2d, CLASS_NAME_GeometricElement3d].map(async (elementClassName) => {
224
- const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({
225
- filter: instanceFilter,
226
- contentClass: { fullName: elementClassName, alias: "this" },
227
- });
228
- return {
229
- fullClassName: elementClassName,
220
+ async #createGeometricElementChildrenQuery({ parentNodeInstanceIds: parentElementIds, instanceFilter, parentNode, }) {
221
+ const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({
222
+ filter: instanceFilter,
223
+ contentClass: { fullName: CLASS_NAME_GeometricElement3d, alias: "this" },
224
+ });
225
+ return [
226
+ {
227
+ fullClassName: CLASS_NAME_GeometricElement3d,
230
228
  query: {
231
229
  ecsql: `
232
- SELECT ${await this.#createElementSelectClause(elementClassName)}
233
- FROM ${instanceFilterClauses.from} this
234
- ${instanceFilterClauses.joins}
235
- WHERE
236
- this.Parent.Id IN (${parentElementIds.join(",")})
237
- ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : ""}
238
- `,
230
+ SELECT ${await this.#createElementSelectClause({ categoryOfTopMostParentElement: parentNode.extendedData?.categoryOfTopMostParentElement, topMostParentElementId: parentNode.extendedData?.topMostParentElementId })}
231
+ FROM ${instanceFilterClauses.from} this
232
+ ${instanceFilterClauses.joins}
233
+ WHERE
234
+ this.Parent.Id IN (${parentElementIds.join(",")})
235
+ ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : ""}
236
+ `,
239
237
  },
240
- };
241
- }));
238
+ },
239
+ ];
242
240
  }
243
- async #createElementSelectClause(elementFullClassName) {
244
- const { className: elementClassName } = parseFullClassName(elementFullClassName);
241
+ async #createElementSelectClause({ categoryOfTopMostParentElement, topMostParentElementId, }) {
242
+ const { className: elementClassName } = parseFullClassName(CLASS_NAME_GeometricElement3d);
245
243
  return this.#selectQueryFactory.createSelectClause({
246
244
  ecClassId: { selector: "this.ECClassId" },
247
245
  ecInstanceId: { selector: "this.ECInstanceId" },
248
246
  nodeLabel: {
249
247
  selector: await this.#nodeLabelSelectClauseFactory.createSelectClause({
250
248
  classAlias: "this",
251
- className: elementFullClassName,
249
+ className: CLASS_NAME_GeometricElement3d,
252
250
  }),
253
251
  },
254
252
  hasChildren: {
@@ -265,6 +263,28 @@ export class ClassificationsTreeDefinition {
265
263
  type: elementClassName,
266
264
  modelId: { selector: "IdToHex(this.Model.Id)" },
267
265
  categoryId: { selector: "IdToHex(this.Category.Id)" },
266
+ childrenCount: {
267
+ selector: `
268
+ (
269
+ WITH RECURSIVE
270
+ ElementWithParent(id) AS (
271
+ SELECT e.ECInstanceId
272
+ FROM ${CLASS_NAME_GeometricElement3d} e
273
+ WHERE e.ECInstanceId = this.ECInstanceId
274
+ UNION ALL
275
+ SELECT c.ECInstanceId
276
+ FROM ${CLASS_NAME_GeometricElement3d} c
277
+ JOIN ElementWithParent p ON p.id = c.Parent.Id
278
+ )
279
+ SELECT COUNT(1) - 1
280
+ FROM ElementWithParent
281
+ )
282
+ `,
283
+ },
284
+ categoryOfTopMostParentElement: {
285
+ selector: `IdToHex(${categoryOfTopMostParentElement ?? "this.Category.Id"})`,
286
+ },
287
+ topMostParentElementId: { selector: `IdToHex(${topMostParentElementId ?? "this.ECInstanceId"})` },
268
288
  },
269
289
  supportsFiltering: true,
270
290
  });
@@ -304,10 +324,9 @@ function createInstanceKeyPathsFromInstanceLabelObs({ label, ...props }) {
304
324
  const adjustedLabel = label.replace(/[%_\\]/g, "\\$&");
305
325
  const CLASSIFICATION_TABLES_WITH_LABELS_CTE = "ClassificationTablesWithLabels";
306
326
  const CLASSIFICATIONS_WITH_LABELS_CTE = "ClassificationsWithLabels";
307
- const ELEMENTS_2D_WITH_LABELS_CTE = "Elements2dWithLabels";
308
- const ELEMENTS_3D_WITH_LABELS_CTE = "Elements3dWithLabels";
327
+ const ELEMENTS_WITH_LABELS_CTE = "ElementsWithLabels";
309
328
  return defer(async () => {
310
- const [classificationTableLabelSelectClause, classificationLabelSelectClause, element2dLabelSelectClause, element3dLabelSelectClause] = await Promise.all([CLASS_NAME_ClassificationTable, CLASS_NAME_Classification, CLASS_NAME_GeometricElement2d, CLASS_NAME_GeometricElement3d].map(async (className) => props.labelsFactory.createSelectClause({ classAlias: "this", className })));
329
+ const [classificationTableLabelSelectClause, classificationLabelSelectClause, elementLabelSelectClause] = await Promise.all([CLASS_NAME_ClassificationTable, CLASS_NAME_Classification, CLASS_NAME_GeometricElement3d].map(async (className) => props.labelsFactory.createSelectClause({ classAlias: "this", className })));
311
330
  const classificationIds = await firstValueFrom(props.idsCache.getAllClassifications());
312
331
  const ctes = [
313
332
  `
@@ -336,33 +355,11 @@ function createInstanceKeyPathsFromInstanceLabelObs({ label, ...props }) {
336
355
  WHERE
337
356
  this.ECInstanceId IN (${classificationIds.join(",")})
338
357
  )`,
339
- `${ELEMENTS_2D_WITH_LABELS_CTE}(ClassName, ECInstanceId, DisplayLabel) AS (
340
- SELECT
341
- 'e2d',
342
- this.ECInstanceId,
343
- ${element2dLabelSelectClause}
344
- FROM
345
- ${CLASS_NAME_GeometricElement2d} this
346
- JOIN ${CLASS_NAME_ElementHasClassifications} ehc ON ehc.SourceECInstanceId = this.ECInstanceId
347
- WHERE
348
- ehc.TargetECInstanceId IN (${classificationIds.join(",")})
349
- AND this.Parent.Id IS NULL
350
-
351
- UNION ALL
352
-
353
- SELECT
354
- 'e2d',
355
- this.ECInstanceId,
356
- ${element2dLabelSelectClause}
357
- FROM
358
- ${CLASS_NAME_GeometricElement2d} this
359
- JOIN ${ELEMENTS_2D_WITH_LABELS_CTE} pe ON pe.ECInstanceId = this.Parent.Id
360
- )`,
361
- `${ELEMENTS_3D_WITH_LABELS_CTE}(ClassName, ECInstanceId, DisplayLabel) AS (
358
+ `${ELEMENTS_WITH_LABELS_CTE}(ClassName, ECInstanceId, DisplayLabel) AS (
362
359
  SELECT
363
- 'e3d',
360
+ 'e',
364
361
  this.ECInstanceId,
365
- ${element3dLabelSelectClause}
362
+ ${elementLabelSelectClause}
366
363
  FROM
367
364
  ${CLASS_NAME_GeometricElement3d} this
368
365
  JOIN ${CLASS_NAME_ElementHasClassifications} ehc ON ehc.SourceECInstanceId = this.ECInstanceId
@@ -373,12 +370,12 @@ function createInstanceKeyPathsFromInstanceLabelObs({ label, ...props }) {
373
370
  UNION ALL
374
371
 
375
372
  SELECT
376
- 'e3d',
373
+ 'e',
377
374
  this.ECInstanceId,
378
- ${element3dLabelSelectClause}
375
+ ${elementLabelSelectClause}
379
376
  FROM
380
377
  ${CLASS_NAME_GeometricElement3d} this
381
- JOIN ${ELEMENTS_3D_WITH_LABELS_CTE} pe ON pe.ECInstanceId = this.Parent.Id
378
+ JOIN ${ELEMENTS_WITH_LABELS_CTE} pe ON pe.ECInstanceId = this.Parent.Id
382
379
  )`,
383
380
  ]
384
381
  : []),
@@ -408,22 +405,12 @@ function createInstanceKeyPathsFromInstanceLabelObs({ label, ...props }) {
408
405
  UNION ALL
409
406
 
410
407
  SELECT
411
- e2d.ClassName AS ClassName,
412
- e2d.ECInstanceId AS ECInstanceId
413
- FROM
414
- ${ELEMENTS_2D_WITH_LABELS_CTE} e2d
415
- WHERE
416
- e2d.DisplayLabel LIKE '%' || ? || '%' ESCAPE '\\'
417
-
418
- UNION ALL
419
-
420
- SELECT
421
- e3d.ClassName AS ClassName,
422
- e3d.ECInstanceId AS ECInstanceId
408
+ e.ClassName AS ClassName,
409
+ e.ECInstanceId AS ECInstanceId
423
410
  FROM
424
- ${ELEMENTS_3D_WITH_LABELS_CTE} e3d
411
+ ${ELEMENTS_WITH_LABELS_CTE} e
425
412
  WHERE
426
- e3d.DisplayLabel LIKE '%' || ? || '%' ESCAPE '\\'
413
+ e.DisplayLabel LIKE '%' || ? || '%' ESCAPE '\\'
427
414
  `
428
415
  : ""}
429
416
  )
@@ -435,7 +422,6 @@ function createInstanceKeyPathsFromInstanceLabelObs({ label, ...props }) {
435
422
  ? [
436
423
  { type: "string", value: adjustedLabel },
437
424
  { type: "string", value: adjustedLabel },
438
- { type: "string", value: adjustedLabel },
439
425
  ]
440
426
  : []),
441
427
  ];
@@ -449,9 +435,6 @@ function createInstanceKeyPathsFromInstanceLabelObs({ label, ...props }) {
449
435
  case "c":
450
436
  className = CLASS_NAME_Classification;
451
437
  break;
452
- case "e2d":
453
- className = CLASS_NAME_GeometricElement2d;
454
- break;
455
438
  default:
456
439
  className = CLASS_NAME_GeometricElement3d;
457
440
  break;
@@ -474,10 +457,7 @@ function createInstanceKeyPathsFromTargetItemsObs({ idsCache, imodelAccess, limi
474
457
  if (await imodelAccess.classDerivesFrom(key.className, CLASS_NAME_Classification)) {
475
458
  return { id: key.id, type: 1 };
476
459
  }
477
- if (await imodelAccess.classDerivesFrom(key.className, CLASS_NAME_GeometricElement2d)) {
478
- return { id: key.id, type: 2 };
479
- }
480
- return { id: key.id, type: 3 };
460
+ return { id: key.id, type: 2 };
481
461
  }, 2), reduce((acc, { id, type }) => {
482
462
  switch (type) {
483
463
  case 0:
@@ -487,27 +467,27 @@ function createInstanceKeyPathsFromTargetItemsObs({ idsCache, imodelAccess, limi
487
467
  acc.classificationIds.push(id);
488
468
  break;
489
469
  case 2:
490
- acc.element2dIds.push(id);
491
- break;
492
- case 3:
493
- acc.element3dIds.push(id);
470
+ acc.elementIds.push(id);
494
471
  break;
495
472
  }
496
473
  return acc;
497
474
  }, {
498
475
  classificationTableIds: new Array(),
499
476
  classificationIds: new Array(),
500
- element2dIds: new Array(),
501
- element3dIds: new Array(),
477
+ elementIds: new Array(),
502
478
  }), mergeMap((ids) => {
503
- const elements2dLength = ids.element2dIds.length;
504
- const elements3dLength = ids.element3dIds.length;
505
- const getElementsPathsObs = (elementType) => from(elementType === "2d" ? ids.element2dIds : ids.element3dIds).pipe(bufferCount(getOptimalBatchSize({ totalSize: elementType === "2d" ? elements2dLength : elements3dLength, maximumBatchSize: 5000 })), releaseMainThreadOnItemsCount(1), mergeMap((block, chunkIndex) => createGeometricElementInstanceKeyPaths({ idsCache, imodelAccess, targetItems: block, type: elementType, chunkIndex, componentId, componentName }), 10));
506
- return merge(from(ids.classificationTableIds).pipe(map((id) => ({ path: [{ id, className: CLASS_NAME_ClassificationTable }], options: { reveal: true } }))), idsCache.getClassificationsPathObs(ids.classificationIds).pipe(map((path) => ({ path, options: { reveal: true } }))), getElementsPathsObs("2d"), getElementsPathsObs("3d"));
479
+ return merge(from(ids.classificationTableIds).pipe(map((id) => ({ path: [{ id, className: CLASS_NAME_ClassificationTable }], options: { reveal: true } }))), idsCache.getClassificationsPathObs(ids.classificationIds).pipe(map((path) => ({ path, options: { reveal: true } }))), from(ids.elementIds).pipe(bufferCount(getOptimalBatchSize({ totalSize: ids.elementIds.length, maximumBatchSize: 5000 })), releaseMainThreadOnItemsCount(1), mergeMap((block, chunkIndex) => createGeometricElementInstanceKeyPaths({
480
+ idsCache,
481
+ imodelAccess,
482
+ targetItems: block,
483
+ chunkIndex,
484
+ componentId,
485
+ componentName,
486
+ }), 10)));
507
487
  }), toArray());
508
488
  }
509
489
  function createGeometricElementInstanceKeyPaths(props) {
510
- const { targetItems, imodelAccess, type, idsCache, componentId, componentName, chunkIndex } = props;
490
+ const { targetItems, imodelAccess, idsCache, componentId, componentName, chunkIndex } = props;
511
491
  if (targetItems.length === 0) {
512
492
  return EMPTY;
513
493
  }
@@ -518,7 +498,7 @@ function createGeometricElementInstanceKeyPaths(props) {
518
498
  SELECT
519
499
  e.ECInstanceId,
520
500
  e.Parent.Id,
521
- 'e${type}${separator}' || CAST(IdToHex([e].[ECInstanceId]) AS TEXT)
501
+ 'e${separator}' || CAST(IdToHex([e].[ECInstanceId]) AS TEXT)
522
502
  FROM ${CLASS_NAME_Element} e
523
503
  WHERE e.ECInstanceId IN (${targetItems.join(",")})
524
504
 
@@ -527,7 +507,7 @@ function createGeometricElementInstanceKeyPaths(props) {
527
507
  SELECT
528
508
  pe.ECInstanceId,
529
509
  pe.Parent.Id,
530
- 'e${type}${separator}' || CAST(IdToHex([pe].[ECInstanceId]) AS TEXT) || '${separator}' || ce.Path
510
+ 'e${separator}' || CAST(IdToHex([pe].[ECInstanceId]) AS TEXT) || '${separator}' || ce.Path
531
511
  FROM ElementsHierarchy ce
532
512
  JOIN ${CLASS_NAME_Element} pe ON pe.ECInstanceId = ce.ParentId
533
513
  )`,
@@ -542,7 +522,7 @@ function createGeometricElementInstanceKeyPaths(props) {
542
522
  JOIN ElementsHierarchy e ON ehc.SourceECInstanceId = e.ECInstanceId
543
523
  WHERE e.ParentId IS NULL
544
524
  `;
545
- return imodelAccess.createQueryReader({ ctes, ecsql }, { rowFormat: "ECSqlPropertyNames", limit: "unbounded", restartToken: `${componentName}/${componentId}/elements${type}-filter-paths/${chunkIndex}` });
525
+ return imodelAccess.createQueryReader({ ctes, ecsql }, { rowFormat: "ECSqlPropertyNames", limit: "unbounded", restartToken: `${componentName}/${componentId}/elements-filter-paths/${chunkIndex}` });
546
526
  }).pipe(catchBeSQLiteInterrupts, releaseMainThreadOnItemsCount(300), map((row) => parseQueryRow(row, separator)), mergeMap(({ path, parentClassificationId }) => {
547
527
  if (parentClassificationId) {
548
528
  return idsCache
@@ -557,10 +537,7 @@ function parseQueryRow(row, separator) {
557
537
  const path = [];
558
538
  for (let i = 0; i < rowElements.length; i += 2) {
559
539
  switch (rowElements[i]) {
560
- case "e2d":
561
- path.push({ className: CLASS_NAME_GeometricElement2d, id: rowElements[i + 1] });
562
- break;
563
- case "e3d":
540
+ case "e":
564
541
  path.push({ className: CLASS_NAME_GeometricElement3d, id: rowElements[i + 1] });
565
542
  break;
566
543
  }