@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.
- package/CHANGELOG.md +35 -1
- package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js +2 -1
- package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js.map +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.js +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.d.ts +4 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js +4 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js +36 -47
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.d.ts +2 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js +4 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.d.ts +4 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js +87 -38
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeNode.d.ts +86 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeNode.js +50 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeNode.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.d.ts +4 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js +38 -23
- package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.d.ts +11 -21
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +16 -168
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNodeInternal.d.ts +65 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNodeInternal.js +22 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNodeInternal.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseSearchPaths.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseSearchPaths.js +4 -4
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseSearchPaths.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.d.ts +6 -12
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.js +192 -127
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.d.ts +14 -5
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.js +43 -24
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/SearchResultsTree.d.ts +3 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/SearchResultsTree.js +78 -17
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/SearchResultsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.d.ts +2 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js +4 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js +91 -114
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeIcon.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeIcon.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeNode.d.ts +32 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeNode.js +26 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeNode.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.d.ts +13 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js +62 -32
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.d.ts +12 -9
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.js +42 -38
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.d.ts +15 -38
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js +59 -242
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNodeInternal.d.ts +29 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNodeInternal.js +19 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNodeInternal.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.d.ts +5 -9
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.js +155 -84
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHelper.js +20 -6
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHelper.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/SearchResultsTree.d.ts +6 -10
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/SearchResultsTree.js +104 -63
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/SearchResultsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/SharedTreeContextProvider.d.ts +7 -0
- package/lib/esm/tree-widget-react/components/trees/common/SharedTreeContextProvider.js +14 -0
- package/lib/esm/tree-widget-react/components/trees/common/SharedTreeContextProvider.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/TreeWidgetViewport.js +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/TreeWidgetViewport.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/Utils.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/common/Utils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.d.ts +4 -4
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.d.ts +4 -4
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js +7 -5
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js +5 -5
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/SharedTreeContextProviderInternal.d.ts +20 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/SharedTreeContextProviderInternal.js +44 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/SharedTreeContextProviderInternal.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/Types.d.ts +4 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/Types.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.d.ts +12 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.js +2 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.d.ts +17 -6
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js +58 -29
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.d.ts +8 -14
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js +22 -26
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/{AlwaysAndNeverDrawnElementInfo.d.ts → caches/AlwaysAndNeverDrawnElementInfoCache.d.ts} +15 -21
- package/lib/esm/tree-widget-react/components/trees/common/internal/{AlwaysAndNeverDrawnElementInfo.js → caches/AlwaysAndNeverDrawnElementInfoCache.js} +40 -38
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/AlwaysAndNeverDrawnElementInfoCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/BaseIdsCache.d.ts +68 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/BaseIdsCache.js +148 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/BaseIdsCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementChildrenCache.d.ts +30 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementChildrenCache.js +151 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementChildrenCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementModelCategoriesCache.d.ts +32 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementModelCategoriesCache.js +106 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementModelCategoriesCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/{ModelCategoryElementsCountCache.d.ts → caches/ModelCategoryElementsCountCache.d.ts} +9 -2
- package/lib/esm/tree-widget-react/components/trees/common/internal/{ModelCategoryElementsCountCache.js → caches/ModelCategoryElementsCountCache.js} +17 -21
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ModelCategoryElementsCountCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ModeledElementsCache.d.ts +27 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ModeledElementsCache.js +106 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ModeledElementsCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/SubCategoriesCache.d.ts +23 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/SubCategoriesCache.js +56 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/SubCategoriesCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.d.ts +6 -6
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.js +27 -17
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.d.ts +7 -13
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.js +36 -35
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseSearchResultsTree.d.ts +18 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseSearchResultsTree.js +14 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseSearchResultsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.d.ts +46 -70
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.js +229 -361
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.js +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js +32 -19
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/index.d.ts +5 -1
- package/lib/esm/tree-widget-react/components/trees/index.js +5 -1
- package/lib/esm/tree-widget-react/components/trees/index.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.d.ts +4 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js +4 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.d.ts +7 -3
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js +36 -35
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js +3 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.d.ts +3 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +70 -26
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeNode.d.ts +63 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeNode.js +56 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeNode.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.d.ts +5 -3
- package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js +26 -13
- package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +11 -23
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +56 -189
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNodeInternal.d.ts +52 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNodeInternal.js +22 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNodeInternal.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseSearchPaths.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseSearchPaths.js +8 -8
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseSearchPaths.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.d.ts +6 -12
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.js +190 -114
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHelper.d.ts +6 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHelper.js +20 -8
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHelper.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/SearchResultsTree.d.ts +4 -2
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/SearchResultsTree.js +73 -13
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/SearchResultsTree.js.map +1 -1
- package/lib/esm/tree-widget-react-internal.d.ts +1 -1
- package/lib/esm/tree-widget-react-internal.js +1 -1
- package/lib/esm/tree-widget-react-internal.js.map +1 -1
- package/package.json +77 -82
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNode.d.ts +0 -41
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNode.js +0 -50
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNode.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNode.d.ts +0 -19
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNode.js +0 -32
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNode.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseSearchPaths.d.ts +0 -20
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseSearchPaths.js +0 -53
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseSearchPaths.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/AlwaysAndNeverDrawnElementInfo.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNode.d.ts +0 -37
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNode.js +0 -54
- 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;
|
|
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,
|
|
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
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
fullClassName:
|
|
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
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
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(
|
|
244
|
-
const { className: elementClassName } = parseFullClassName(
|
|
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:
|
|
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
|
|
308
|
-
const ELEMENTS_3D_WITH_LABELS_CTE = "Elements3dWithLabels";
|
|
327
|
+
const ELEMENTS_WITH_LABELS_CTE = "ElementsWithLabels";
|
|
309
328
|
return defer(async () => {
|
|
310
|
-
const [classificationTableLabelSelectClause, classificationLabelSelectClause,
|
|
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
|
-
`${
|
|
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
|
-
'
|
|
360
|
+
'e',
|
|
364
361
|
this.ECInstanceId,
|
|
365
|
-
${
|
|
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
|
-
'
|
|
373
|
+
'e',
|
|
377
374
|
this.ECInstanceId,
|
|
378
|
-
${
|
|
375
|
+
${elementLabelSelectClause}
|
|
379
376
|
FROM
|
|
380
377
|
${CLASS_NAME_GeometricElement3d} this
|
|
381
|
-
JOIN ${
|
|
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
|
-
|
|
412
|
-
|
|
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
|
-
${
|
|
411
|
+
${ELEMENTS_WITH_LABELS_CTE} e
|
|
425
412
|
WHERE
|
|
426
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
501
|
-
element3dIds: new Array(),
|
|
477
|
+
elementIds: new Array(),
|
|
502
478
|
}), mergeMap((ids) => {
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
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,
|
|
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${
|
|
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${
|
|
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
|
|
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 "
|
|
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
|
}
|