@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
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
3
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { concat, defer, EMPTY, from, map, merge, mergeMap, of } from "rxjs";
|
|
6
|
-
import { assert, Guid
|
|
7
|
-
import {
|
|
5
|
+
import { concat, defer, EMPTY, from, map, merge, mergeAll, mergeMap, of } from "rxjs";
|
|
6
|
+
import { assert, Guid } from "@itwin/core-bentley";
|
|
7
|
+
import { HierarchyNodeKey } from "@itwin/presentation-hierarchies";
|
|
8
8
|
import { createVisibilityStatus } from "../../../common/internal/Tooltip.js";
|
|
9
9
|
import { HierarchyVisibilityHandlerImpl } from "../../../common/internal/useTreeHooks/UseCachedVisibility.js";
|
|
10
|
-
import { fromWithRelease } from "../../../common/internal/Utils.js";
|
|
10
|
+
import { fromWithRelease, getIdsFromChildrenTree, getParentElementsIdsPath, setDifference, setIntersection } from "../../../common/internal/Utils.js";
|
|
11
11
|
import { mergeVisibilityStatuses } from "../../../common/internal/VisibilityUtils.js";
|
|
12
|
-
import {
|
|
12
|
+
import { ModelsTreeNodeInternal } from "../ModelsTreeNodeInternal.js";
|
|
13
13
|
import { ModelsTreeVisibilityHelper } from "./ModelsTreeVisibilityHelper.js";
|
|
14
14
|
import { createModelsSearchResultsTree } from "./SearchResultsTree.js";
|
|
15
15
|
/**
|
|
@@ -23,23 +23,12 @@ export class ModelsTreeVisibilityHandler {
|
|
|
23
23
|
#props;
|
|
24
24
|
constructor(constructorProps) {
|
|
25
25
|
this.#props = constructorProps;
|
|
26
|
-
// Remove after https://github.com/iTwin/viewer-components-react/issues/1421.
|
|
27
|
-
// We won't need to create a custom base ids cache.
|
|
28
|
-
const baseIdsCache = {
|
|
29
|
-
getCategories: (props) => this.getCategories(props),
|
|
30
|
-
getElementsCount: (props) => this.getElementsCount(props),
|
|
31
|
-
getModels: (props) => this.getModels(props),
|
|
32
|
-
getSubCategories: (props) => this.getSubCategories(props),
|
|
33
|
-
getSubModels: (props) => this.getSubModels(props),
|
|
34
|
-
hasSubModel: (props) => this.#props.idsCache.hasSubModel(props),
|
|
35
|
-
getAllCategories: () => this.getAllCategories(),
|
|
36
|
-
};
|
|
37
26
|
this.#visibilityHelper = new ModelsTreeVisibilityHelper({
|
|
38
27
|
viewport: this.#props.viewport,
|
|
39
28
|
idsCache: this.#props.idsCache,
|
|
40
29
|
alwaysAndNeverDrawnElementInfo: this.#props.alwaysAndNeverDrawnElementInfo,
|
|
41
30
|
overrideHandler: this.#props.overrideHandler,
|
|
42
|
-
baseIdsCache,
|
|
31
|
+
baseIdsCache: this.#props.idsCache,
|
|
43
32
|
overrides: this.#props.overrides,
|
|
44
33
|
});
|
|
45
34
|
}
|
|
@@ -50,6 +39,9 @@ export class ModelsTreeVisibilityHandler {
|
|
|
50
39
|
return defer(() => {
|
|
51
40
|
const { subjectIds, modelIds, categories, elements } = targets;
|
|
52
41
|
const observables = new Array();
|
|
42
|
+
if (this.#props.viewport.viewType !== "3d") {
|
|
43
|
+
return EMPTY;
|
|
44
|
+
}
|
|
53
45
|
if (subjectIds?.size) {
|
|
54
46
|
observables.push(this.#visibilityHelper.changeSubjectsVisibilityStatus({ subjectIds, on }));
|
|
55
47
|
}
|
|
@@ -64,18 +56,76 @@ export class ModelsTreeVisibilityHandler {
|
|
|
64
56
|
}))));
|
|
65
57
|
}
|
|
66
58
|
if (elements?.length) {
|
|
67
|
-
|
|
59
|
+
const searchTargetElements = new Array();
|
|
60
|
+
const elementIdsSet = new Set();
|
|
61
|
+
const modelCategoryElementMap = new Map();
|
|
62
|
+
// elements is an array that stores elements grouped by:
|
|
63
|
+
// 1. Their path
|
|
64
|
+
// 2. Their modelId and categoryId
|
|
65
|
+
// When changing visibility of elements, visibility handler does not care about the path.
|
|
66
|
+
// So we can first get all elements and group them only by modelId and categoryId.
|
|
67
|
+
for (const { elements: elementsMap, categoryId, modelId } of elements) {
|
|
68
|
+
const key = `${modelId}-${categoryId}`;
|
|
69
|
+
let mapEntry = modelCategoryElementMap.get(key);
|
|
70
|
+
if (!mapEntry) {
|
|
71
|
+
mapEntry = [];
|
|
72
|
+
modelCategoryElementMap.set(key, mapEntry);
|
|
73
|
+
}
|
|
74
|
+
for (const [elementId, { isSearchTarget }] of elementsMap) {
|
|
75
|
+
mapEntry.push(elementId);
|
|
76
|
+
elementIdsSet.add(elementId);
|
|
77
|
+
if (isSearchTarget) {
|
|
78
|
+
searchTargetElements.push(elementId);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
observables.push(
|
|
83
|
+
// Get children for search targets, since non search targets don't have all the children present in the hierarchy.
|
|
84
|
+
this.#props.idsCache.getChildElementsTree({ elementIds: searchTargetElements }).pipe(
|
|
85
|
+
// Need to filter out and keep only those children ids that are not part of elements that are present in search paths.
|
|
86
|
+
// Elements in search paths will have their visibility changed directly: they will be provided as elementIds to changeElementsVisibilityStatus.
|
|
87
|
+
map((childrenTree) => ({
|
|
88
|
+
childrenNotInSearchPaths: setDifference(getIdsFromChildrenTree({ tree: childrenTree, predicate: ({ depth }) => depth > 0 }), elementIdsSet),
|
|
89
|
+
childrenTree,
|
|
90
|
+
})), mergeMap(({ childrenNotInSearchPaths, childrenTree }) => fromWithRelease({ source: modelCategoryElementMap.entries(), size: modelCategoryElementMap.size, releaseOnCount: 50 }).pipe(mergeMap(([key, elementsInSearchPathsGroupedByModelAndCategory]) => {
|
|
91
|
+
const [modelId, categoryId] = key.split("-");
|
|
92
|
+
const childrenIds = new Set();
|
|
93
|
+
// A shared children tree was created, need to get the children for each element in the group.
|
|
94
|
+
for (const elementId of elementsInSearchPathsGroupedByModelAndCategory) {
|
|
95
|
+
const elementChildrenTree = childrenTree.get(elementId)?.children;
|
|
96
|
+
if (!elementChildrenTree) {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
for (const childId of getIdsFromChildrenTree({ tree: elementChildrenTree })) {
|
|
100
|
+
childrenIds.add(childId);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return this.#visibilityHelper.changeElementsVisibilityStatus({
|
|
104
|
+
modelId,
|
|
105
|
+
categoryId,
|
|
106
|
+
elementIds: elementsInSearchPathsGroupedByModelAndCategory,
|
|
107
|
+
// Pass only those children that are not part of search paths.
|
|
108
|
+
children: setIntersection(childrenIds, childrenNotInSearchPaths),
|
|
109
|
+
on,
|
|
110
|
+
});
|
|
111
|
+
})))));
|
|
68
112
|
}
|
|
69
113
|
return merge(...observables);
|
|
70
114
|
});
|
|
71
115
|
}
|
|
72
116
|
getVisibilityStatus(node) {
|
|
73
|
-
if (
|
|
74
|
-
|
|
117
|
+
if (this.#props.viewport.viewType !== "3d") {
|
|
118
|
+
return of(createVisibilityStatus("disabled"));
|
|
119
|
+
}
|
|
120
|
+
if (ModelsTreeNodeInternal.isElementClassGroupingNode(node)) {
|
|
75
121
|
const result = this.#visibilityHelper.getGroupedElementsVisibilityStatus({
|
|
76
|
-
categoryId:
|
|
77
|
-
modelId:
|
|
78
|
-
elementIds:
|
|
122
|
+
categoryId: node.extendedData.categoryId,
|
|
123
|
+
modelId: node.extendedData.modelId,
|
|
124
|
+
elementIds: node.groupedInstanceKeys.map((key) => key.id),
|
|
125
|
+
parentKeys: node.parentKeys,
|
|
126
|
+
childrenCount: node.extendedData.childrenCount,
|
|
127
|
+
categoryOfTopMostParentElement: node.extendedData.categoryOfTopMostParentElement,
|
|
128
|
+
topMostParentElementId: node.extendedData.topMostParentElementId,
|
|
79
129
|
});
|
|
80
130
|
return this.#props.overrideHandler.createVisibilityHandlerResult({
|
|
81
131
|
overrideProps: { node },
|
|
@@ -83,47 +133,44 @@ export class ModelsTreeVisibilityHandler {
|
|
|
83
133
|
override: this.#props.overrides?.getElementGroupingNodeVisibilityStatus,
|
|
84
134
|
});
|
|
85
135
|
}
|
|
86
|
-
if (
|
|
87
|
-
return of(createVisibilityStatus("disabled"));
|
|
88
|
-
}
|
|
89
|
-
if (ModelsTreeNode.isSubjectNode(node)) {
|
|
136
|
+
if (ModelsTreeNodeInternal.isSubjectNode(node)) {
|
|
90
137
|
// note: subject nodes may be merged to represent multiple subject instances
|
|
91
138
|
return this.#visibilityHelper.getSubjectsVisibilityStatus({ subjectIds: node.key.instanceKeys.map((key) => key.id) });
|
|
92
139
|
}
|
|
93
|
-
if (
|
|
94
|
-
return this.#visibilityHelper.getModelsVisibilityStatus({ modelIds: node.key.instanceKeys.map(({ id }) => id)
|
|
140
|
+
if (ModelsTreeNodeInternal.isModelNode(node)) {
|
|
141
|
+
return this.#visibilityHelper.getModelsVisibilityStatus({ modelIds: node.key.instanceKeys.map(({ id }) => id) });
|
|
95
142
|
}
|
|
96
|
-
|
|
97
|
-
if (!modelId) {
|
|
98
|
-
return of(createVisibilityStatus("disabled"));
|
|
99
|
-
}
|
|
100
|
-
if (ModelsTreeNode.isCategoryNode(node)) {
|
|
143
|
+
if (ModelsTreeNodeInternal.isCategoryNode(node)) {
|
|
101
144
|
return this.#visibilityHelper.getCategoriesVisibilityStatus({
|
|
102
145
|
categoryIds: node.key.instanceKeys.map(({ id }) => id),
|
|
103
|
-
modelId,
|
|
104
|
-
type: "SpatialCategory",
|
|
146
|
+
modelId: node.extendedData.modelIds[0],
|
|
105
147
|
});
|
|
106
148
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
149
|
+
assert(ModelsTreeNodeInternal.isElementNode(node));
|
|
150
|
+
const parentElementsIdsPath = getParentElementsIdsPath({
|
|
151
|
+
parentInstanceKeys: node.parentKeys.filter((key) => HierarchyNodeKey.isInstances(key)).map((key) => key.instanceKeys),
|
|
152
|
+
topMostParentElementId: node.extendedData.topMostParentElementId,
|
|
153
|
+
});
|
|
111
154
|
return this.#visibilityHelper.getElementsVisibilityStatus({
|
|
112
155
|
elementIds: node.key.instanceKeys.map(({ id }) => id),
|
|
113
|
-
modelId,
|
|
114
|
-
categoryId,
|
|
115
|
-
|
|
156
|
+
modelId: node.extendedData.modelId,
|
|
157
|
+
categoryId: node.extendedData.categoryId,
|
|
158
|
+
parentElementsIdsPath,
|
|
159
|
+
childrenCount: node.extendedData?.childrenCount,
|
|
160
|
+
categoryOfTopMostParentElement: node.extendedData.categoryOfTopMostParentElement,
|
|
116
161
|
});
|
|
117
162
|
}
|
|
118
163
|
/** Changes visibility of the items represented by the tree node. */
|
|
119
164
|
changeVisibilityStatus(node, on) {
|
|
120
165
|
const changeObs = defer(() => {
|
|
121
|
-
if (
|
|
122
|
-
|
|
166
|
+
if (this.#props.viewport.viewType !== "3d") {
|
|
167
|
+
return EMPTY;
|
|
168
|
+
}
|
|
169
|
+
if (ModelsTreeNodeInternal.isElementClassGroupingNode(node)) {
|
|
123
170
|
const result = this.#visibilityHelper.changeGroupedElementsVisibilityStatus({
|
|
124
|
-
categoryId:
|
|
125
|
-
modelId:
|
|
126
|
-
elementIds:
|
|
171
|
+
categoryId: node.extendedData.categoryId,
|
|
172
|
+
modelId: node.extendedData.modelId,
|
|
173
|
+
elementIds: node.groupedInstanceKeys.map((key) => key.id),
|
|
127
174
|
on,
|
|
128
175
|
});
|
|
129
176
|
return this.#props.overrideHandler.createVisibilityHandlerResult({
|
|
@@ -132,46 +179,45 @@ export class ModelsTreeVisibilityHandler {
|
|
|
132
179
|
override: this.#props.overrides?.changeElementGroupingNodeVisibilityStatus,
|
|
133
180
|
});
|
|
134
181
|
}
|
|
135
|
-
if (
|
|
136
|
-
return EMPTY;
|
|
137
|
-
}
|
|
138
|
-
if (ModelsTreeNode.isSubjectNode(node)) {
|
|
182
|
+
if (ModelsTreeNodeInternal.isSubjectNode(node)) {
|
|
139
183
|
return this.#visibilityHelper.changeSubjectsVisibilityStatus({
|
|
140
184
|
subjectIds: node.key.instanceKeys.map((key) => key.id),
|
|
141
185
|
on,
|
|
142
186
|
});
|
|
143
187
|
}
|
|
144
|
-
if (
|
|
188
|
+
if (ModelsTreeNodeInternal.isModelNode(node)) {
|
|
145
189
|
return this.#visibilityHelper.changeModelsVisibilityStatus({ modelIds: node.key.instanceKeys.map(({ id }) => id), on });
|
|
146
190
|
}
|
|
147
|
-
|
|
148
|
-
if (!modelId) {
|
|
149
|
-
return EMPTY;
|
|
150
|
-
}
|
|
151
|
-
if (ModelsTreeNode.isCategoryNode(node)) {
|
|
191
|
+
if (ModelsTreeNodeInternal.isCategoryNode(node)) {
|
|
152
192
|
return this.#visibilityHelper.changeCategoriesVisibilityStatus({
|
|
153
193
|
categoryIds: node.key.instanceKeys.map(({ id }) => id),
|
|
154
|
-
modelId,
|
|
194
|
+
modelId: node.extendedData.modelIds[0],
|
|
155
195
|
on,
|
|
156
196
|
});
|
|
157
197
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
198
|
+
assert(ModelsTreeNodeInternal.isElementNode(node));
|
|
199
|
+
const elementIds = node.key.instanceKeys.map(({ id }) => id);
|
|
200
|
+
return this.#props.idsCache.getChildElementsTree({ elementIds }).pipe(map((childrenTree) => {
|
|
201
|
+
// Children tree contains provided elementIds, they are at the root of this tree.
|
|
202
|
+
// We want to skip them and only get ids of children.
|
|
203
|
+
return getIdsFromChildrenTree({ tree: childrenTree, predicate: ({ depth }) => depth > 0 });
|
|
204
|
+
}), mergeMap((children) => this.#visibilityHelper.changeElementsVisibilityStatus({
|
|
205
|
+
elementIds,
|
|
206
|
+
modelId: node.extendedData.modelId,
|
|
207
|
+
children: children.size > 0 ? children : undefined,
|
|
208
|
+
categoryId: node.extendedData.categoryId,
|
|
166
209
|
on,
|
|
167
|
-
});
|
|
210
|
+
})));
|
|
168
211
|
});
|
|
169
212
|
if (this.#props.viewport.isAlwaysDrawnExclusive) {
|
|
170
213
|
return concat(this.#visibilityHelper.removeAlwaysDrawnExclusive(), changeObs);
|
|
171
214
|
}
|
|
172
215
|
return changeObs;
|
|
173
216
|
}
|
|
174
|
-
getSearchTargetsVisibilityStatus(targets) {
|
|
217
|
+
getSearchTargetsVisibilityStatus(targets, node) {
|
|
218
|
+
if (this.#props.viewport.viewType !== "3d") {
|
|
219
|
+
return of(createVisibilityStatus("disabled"));
|
|
220
|
+
}
|
|
175
221
|
return defer(() => {
|
|
176
222
|
const { subjectIds, modelIds, categories, elements } = targets;
|
|
177
223
|
const observables = new Array();
|
|
@@ -179,61 +225,91 @@ export class ModelsTreeVisibilityHandler {
|
|
|
179
225
|
observables.push(this.#visibilityHelper.getSubjectsVisibilityStatus({ subjectIds }));
|
|
180
226
|
}
|
|
181
227
|
if (modelIds?.size) {
|
|
182
|
-
observables.push(this.#visibilityHelper.getModelsVisibilityStatus({ modelIds
|
|
228
|
+
observables.push(this.#visibilityHelper.getModelsVisibilityStatus({ modelIds }));
|
|
183
229
|
}
|
|
184
230
|
if (categories?.length) {
|
|
185
231
|
observables.push(from(categories).pipe(mergeMap(({ modelId, categoryIds }) => this.#visibilityHelper.getCategoriesVisibilityStatus({
|
|
186
232
|
categoryIds,
|
|
187
233
|
modelId,
|
|
188
|
-
type: "SpatialCategory",
|
|
189
234
|
}))));
|
|
190
235
|
}
|
|
191
236
|
if (elements?.length) {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
}
|
|
200
|
-
getAllCategories() {
|
|
201
|
-
return this.#props.idsCache.getAllCategories().pipe(map((categories) => ({ spatialCategories: categories })));
|
|
202
|
-
}
|
|
203
|
-
getElementsCount(props) {
|
|
204
|
-
return this.#props.idsCache.getCategoryElementsCount(props.modelId, props.categoryId);
|
|
205
|
-
}
|
|
206
|
-
getModels(props) {
|
|
207
|
-
return this.#props.idsCache.getCategoriesElementModels(props.categoryIds);
|
|
208
|
-
}
|
|
209
|
-
getSubCategories(props) {
|
|
210
|
-
return this.#props.idsCache.getSubCategories(props.categoryId);
|
|
211
|
-
}
|
|
212
|
-
getSubModels(props) {
|
|
213
|
-
if ("modelIds" in props) {
|
|
214
|
-
return from(Id64.iterable(props.modelIds)).pipe(mergeMap((modelId) => {
|
|
215
|
-
if (props.categoryId) {
|
|
216
|
-
return this.#props.idsCache.getCategoriesModeledElements(modelId, props.categoryId).pipe(map((subModels) => ({ id: modelId, subModels })));
|
|
237
|
+
const searchTargetElements = new Array();
|
|
238
|
+
for (const { elements: elementsMap } of elements) {
|
|
239
|
+
for (const [elementId, { isSearchTarget }] of elementsMap) {
|
|
240
|
+
if (isSearchTarget) {
|
|
241
|
+
searchTargetElements.push(elementId);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
217
244
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
245
|
+
let childrenCountMapObs;
|
|
246
|
+
if (ModelsTreeNodeInternal.isElementClassGroupingNode(node)) {
|
|
247
|
+
const groupingNodesSearchTargets = node.extendedData.searchTargets;
|
|
248
|
+
const nestedSearchTargetElements = searchTargetElements.filter((searchTarget) => !groupingNodesSearchTargets?.has(searchTarget));
|
|
249
|
+
// Only need to request children count for indirect children search targets.
|
|
250
|
+
childrenCountMapObs = this.#props.idsCache.getAllChildElementsCount({ elementIds: nestedSearchTargetElements }).pipe(map((elementCountMap) => {
|
|
251
|
+
// Direct children search targets already have children count stored in grouping nodes extended data.
|
|
252
|
+
for (const [key, value] of node.extendedData.searchTargets ?? []) {
|
|
253
|
+
elementCountMap.set(key, value.childrenCount);
|
|
254
|
+
}
|
|
255
|
+
return elementCountMap;
|
|
256
|
+
}));
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
childrenCountMapObs = this.#props.idsCache.getAllChildElementsCount({ elementIds: searchTargetElements });
|
|
260
|
+
}
|
|
261
|
+
observables.push(childrenCountMapObs.pipe(mergeMap((elementsChildrenCountMap) => fromWithRelease({ source: elements, releaseOnCount: 50 }).pipe(mergeMap(({ modelId, elements: elementsMap, categoryId, pathToElements, topMostParentElementId }) => {
|
|
262
|
+
const parentElementsIdsPath = topMostParentElementId
|
|
263
|
+
? getParentElementsIdsPath({
|
|
264
|
+
parentInstanceKeys: pathToElements.map((instanceKey) => [instanceKey]),
|
|
265
|
+
topMostParentElementId,
|
|
266
|
+
})
|
|
267
|
+
: [];
|
|
268
|
+
let totalSearchTargetsChildrenCount = 0;
|
|
269
|
+
const nonSearchTargetIds = new Array();
|
|
270
|
+
const searchTargetIds = new Array();
|
|
271
|
+
for (const [elementId, { isSearchTarget }] of elementsMap) {
|
|
272
|
+
if (!isSearchTarget) {
|
|
273
|
+
nonSearchTargetIds.push(elementId);
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
276
|
+
searchTargetIds.push(elementId);
|
|
277
|
+
const childCount = elementsChildrenCountMap.get(elementId);
|
|
278
|
+
if (childCount) {
|
|
279
|
+
totalSearchTargetsChildrenCount += childCount;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
return merge(searchTargetIds.length > 0
|
|
283
|
+
? this.#visibilityHelper.getElementsVisibilityStatus({
|
|
284
|
+
modelId,
|
|
285
|
+
categoryId,
|
|
286
|
+
elementIds: searchTargetIds,
|
|
287
|
+
parentElementsIdsPath,
|
|
288
|
+
childrenCount: totalSearchTargetsChildrenCount,
|
|
289
|
+
// Search results tree is created on search paths. Since search paths contain only categories that are directly under models
|
|
290
|
+
// or at the root, categoryId can be used here here.
|
|
291
|
+
categoryOfTopMostParentElement: categoryId,
|
|
292
|
+
})
|
|
293
|
+
: EMPTY,
|
|
294
|
+
// Set childrenCount to undefined for non search targets, as some of their child elements might be filtered out.
|
|
295
|
+
// Since childrenCount is set to undefined, these elements won't check child always/never drawn child elements status.
|
|
296
|
+
// Child always/never drawn elements will be in search paths, and their visibility status will be handled separately.
|
|
297
|
+
nonSearchTargetIds.length > 0
|
|
298
|
+
? this.#visibilityHelper.getElementsVisibilityStatus({
|
|
299
|
+
modelId,
|
|
300
|
+
categoryId,
|
|
301
|
+
elementIds: nonSearchTargetIds,
|
|
302
|
+
parentElementsIdsPath,
|
|
303
|
+
childrenCount: undefined,
|
|
304
|
+
// Search results tree is created on search paths. Since search paths contain only categories that are directly under models
|
|
305
|
+
// or at the root, categoryId can be used here here.
|
|
306
|
+
categoryOfTopMostParentElement: categoryId,
|
|
307
|
+
})
|
|
308
|
+
: EMPTY).pipe(mergeVisibilityStatuses());
|
|
309
|
+
})))));
|
|
227
310
|
}
|
|
228
|
-
return from(
|
|
229
|
-
})
|
|
230
|
-
}
|
|
231
|
-
getGroupingNodeInfo(node) {
|
|
232
|
-
const modelId = ModelsTreeNode.getModelId(node);
|
|
233
|
-
const categoryId = ModelsTreeNode.getCategoryId(node);
|
|
234
|
-
assert(!!modelId && !!categoryId);
|
|
235
|
-
const elementIds = node.groupedInstanceKeys.map((key) => key.id);
|
|
236
|
-
return { modelId, categoryId, elementIds };
|
|
311
|
+
return from(observables).pipe(mergeAll(), mergeVisibilityStatuses());
|
|
312
|
+
});
|
|
237
313
|
}
|
|
238
314
|
}
|
|
239
315
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelsTreeVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../../../src/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.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 { concat, defer, EMPTY, from, map, merge, mergeMap, of } from \"rxjs\";\nimport { assert, Guid, Id64 } from \"@itwin/core-bentley\";\nimport { HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { createVisibilityStatus } from \"../../../common/internal/Tooltip.js\";\nimport { HierarchyVisibilityHandlerImpl } from \"../../../common/internal/useTreeHooks/UseCachedVisibility.js\";\nimport { fromWithRelease } from \"../../../common/internal/Utils.js\";\nimport { mergeVisibilityStatuses } from \"../../../common/internal/VisibilityUtils.js\";\nimport { ModelsTreeNode } from \"../ModelsTreeNode.js\";\nimport { ModelsTreeVisibilityHelper } from \"./ModelsTreeVisibilityHelper.js\";\nimport { createModelsSearchResultsTree } from \"./SearchResultsTree.js\";\n\nimport type { Observable } from \"rxjs\";\nimport type { Id64Arg } from \"@itwin/core-bentley\";\nimport type { GroupingHierarchyNode, HierarchySearchPath } from \"@itwin/presentation-hierarchies\";\nimport type { ECClassHierarchyInspector } from \"@itwin/presentation-shared\";\nimport type { AlwaysAndNeverDrawnElementInfo } from \"../../../common/internal/AlwaysAndNeverDrawnElementInfo.js\";\nimport type { SearchResultsTree } from \"../../../common/internal/visibility/BaseSearchResultsTree.js\";\nimport type {\n BaseIdsCache,\n BaseTreeVisibilityHandlerOverrides,\n TreeSpecificVisibilityHandler,\n} from \"../../../common/internal/visibility/BaseVisibilityHelper.js\";\nimport type { TreeWidgetViewport } from \"../../../common/TreeWidgetViewport.js\";\nimport type {\n HierarchyVisibilityHandlerOverridableMethod,\n HierarchyVisibilityOverrideHandler,\n VisibilityStatus,\n} from \"../../../common/UseHierarchyVisibility.js\";\nimport type { ModelsTreeIdsCache } from \"../ModelsTreeIdsCache.js\";\nimport type { ModelsTreeSearchTargets } from \"./SearchResultsTree.js\";\n\n/**\n * Functionality of Models tree visibility handler that can be overridden.\n * Each callback is provided original implementation and reference to a `HierarchyVisibilityHandler`.\n * @beta\n */\nexport interface ModelsTreeVisibilityHandlerOverrides extends BaseTreeVisibilityHandlerOverrides {\n getSubjectsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { subjectIds: Id64Arg }) => Promise<VisibilityStatus>>;\n getElementGroupingNodeVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { node: GroupingHierarchyNode }) => Promise<VisibilityStatus>>;\n\n changeSubjectsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { subjectIds: Id64Arg; on: boolean }) => Promise<void>>;\n changeElementGroupingNodeVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<\n (props: { node: GroupingHierarchyNode; on: boolean }) => Promise<void>\n >;\n}\n\n/** @internal */\nexport interface ModelsTreeVisibilityHandlerProps {\n idsCache: ModelsTreeIdsCache;\n viewport: TreeWidgetViewport;\n alwaysAndNeverDrawnElementInfo: AlwaysAndNeverDrawnElementInfo;\n overrideHandler: HierarchyVisibilityOverrideHandler;\n overrides?: ModelsTreeVisibilityHandlerOverrides;\n}\n\n/**\n * Handles visibility status of models tree nodes.\n *\n * It knows how to get and change visibility status of nodes created by hierarchy definition.\n * @internal\n */\nexport class ModelsTreeVisibilityHandler implements Disposable, TreeSpecificVisibilityHandler<ModelsTreeSearchTargets> {\n #visibilityHelper: ModelsTreeVisibilityHelper;\n readonly #props: ModelsTreeVisibilityHandlerProps;\n\n constructor(constructorProps: ModelsTreeVisibilityHandlerProps) {\n this.#props = constructorProps;\n // Remove after https://github.com/iTwin/viewer-components-react/issues/1421.\n // We won't need to create a custom base ids cache.\n const baseIdsCache: BaseIdsCache = {\n getCategories: (props) => this.getCategories(props),\n getElementsCount: (props) => this.getElementsCount(props),\n getModels: (props) => this.getModels(props),\n getSubCategories: (props) => this.getSubCategories(props),\n getSubModels: (props) => this.getSubModels(props),\n hasSubModel: (props) => this.#props.idsCache.hasSubModel(props),\n getAllCategories: () => this.getAllCategories(),\n };\n this.#visibilityHelper = new ModelsTreeVisibilityHelper({\n viewport: this.#props.viewport,\n idsCache: this.#props.idsCache,\n alwaysAndNeverDrawnElementInfo: this.#props.alwaysAndNeverDrawnElementInfo,\n overrideHandler: this.#props.overrideHandler,\n baseIdsCache,\n overrides: this.#props.overrides,\n });\n }\n\n public [Symbol.dispose]() {\n this.#visibilityHelper[Symbol.dispose]();\n }\n\n public changeSearchTargetsVisibilityStatus(targets: ModelsTreeSearchTargets, on: boolean): Observable<void> {\n return defer(() => {\n const { subjectIds, modelIds, categories, elements } = targets;\n const observables = new Array<Observable<void>>();\n if (subjectIds?.size) {\n observables.push(this.#visibilityHelper.changeSubjectsVisibilityStatus({ subjectIds, on }));\n }\n\n if (modelIds?.size) {\n observables.push(this.#visibilityHelper.changeModelsVisibilityStatus({ modelIds, on }));\n }\n\n if (categories?.length) {\n observables.push(\n from(categories).pipe(\n mergeMap(({ modelId, categoryIds }) =>\n this.#visibilityHelper.changeCategoriesVisibilityStatus({\n categoryIds,\n modelId,\n on,\n }),\n ),\n ),\n );\n }\n\n if (elements?.length) {\n observables.push(\n fromWithRelease({ source: elements, releaseOnCount: 50 }).pipe(\n mergeMap(({ modelId, elements: elementsMap, categoryId }) =>\n this.#visibilityHelper.changeElementsVisibilityStatus({ modelId, categoryId, elementIds: [...elementsMap.keys()], on }),\n ),\n ),\n );\n }\n\n return merge(...observables);\n });\n }\n\n public getVisibilityStatus(node: HierarchyNode): Observable<VisibilityStatus> {\n if (HierarchyNode.isClassGroupingNode(node)) {\n const nodeInfo = this.getGroupingNodeInfo(node);\n const result = this.#visibilityHelper.getGroupedElementsVisibilityStatus({\n categoryId: nodeInfo.categoryId,\n modelId: nodeInfo.modelId,\n elementIds: nodeInfo.elementIds,\n });\n return this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: { node },\n nonOverriddenResult: result,\n override: this.#props.overrides?.getElementGroupingNodeVisibilityStatus,\n });\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n // note: subject nodes may be merged to represent multiple subject instances\n return this.#visibilityHelper.getSubjectsVisibilityStatus({ subjectIds: node.key.instanceKeys.map((key) => key.id) });\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.#visibilityHelper.getModelsVisibilityStatus({ modelIds: node.key.instanceKeys.map(({ id }) => id), type: \"GeometricModel3d\" });\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n if (!modelId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.#visibilityHelper.getCategoriesVisibilityStatus({\n categoryIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n type: \"SpatialCategory\",\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n if (!categoryId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n return this.#visibilityHelper.getElementsVisibilityStatus({\n elementIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n categoryId,\n type: \"GeometricElement3d\",\n });\n }\n\n /** Changes visibility of the items represented by the tree node. */\n public changeVisibilityStatus(node: HierarchyNode, on: boolean): Observable<void> {\n const changeObs = defer(() => {\n if (HierarchyNode.isClassGroupingNode(node)) {\n const nodeInfo = this.getGroupingNodeInfo(node);\n const result = this.#visibilityHelper.changeGroupedElementsVisibilityStatus({\n categoryId: nodeInfo.categoryId,\n modelId: nodeInfo.modelId,\n elementIds: nodeInfo.elementIds,\n on,\n });\n return this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: { node, on },\n nonOverriddenResult: result,\n override: this.#props.overrides?.changeElementGroupingNodeVisibilityStatus,\n });\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n return this.#visibilityHelper.changeSubjectsVisibilityStatus({\n subjectIds: node.key.instanceKeys.map((key) => key.id),\n on,\n });\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.#visibilityHelper.changeModelsVisibilityStatus({ modelIds: node.key.instanceKeys.map(({ id }) => id), on });\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n if (!modelId) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.#visibilityHelper.changeCategoriesVisibilityStatus({\n categoryIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n on,\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n if (!categoryId) {\n return EMPTY;\n }\n\n return this.#visibilityHelper.changeElementsVisibilityStatus({\n elementIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n categoryId,\n on,\n });\n });\n\n if (this.#props.viewport.isAlwaysDrawnExclusive) {\n return concat(this.#visibilityHelper.removeAlwaysDrawnExclusive(), changeObs);\n }\n return changeObs;\n }\n\n public getSearchTargetsVisibilityStatus(targets: ModelsTreeSearchTargets): Observable<VisibilityStatus> {\n return defer(() => {\n const { subjectIds, modelIds, categories, elements } = targets;\n const observables = new Array<Observable<VisibilityStatus>>();\n if (subjectIds?.size) {\n observables.push(this.#visibilityHelper.getSubjectsVisibilityStatus({ subjectIds }));\n }\n\n if (modelIds?.size) {\n observables.push(this.#visibilityHelper.getModelsVisibilityStatus({ modelIds, type: \"GeometricModel3d\" }));\n }\n\n if (categories?.length) {\n observables.push(\n from(categories).pipe(\n mergeMap(({ modelId, categoryIds }) =>\n this.#visibilityHelper.getCategoriesVisibilityStatus({\n categoryIds,\n modelId,\n type: \"SpatialCategory\",\n }),\n ),\n ),\n );\n }\n\n if (elements?.length) {\n observables.push(\n fromWithRelease({ source: elements, releaseOnCount: 50 }).pipe(\n mergeMap(({ modelId, elements: elementsMap, categoryId }) =>\n this.#visibilityHelper.getElementsVisibilityStatus({ modelId, categoryId, elementIds: [...elementsMap.keys()], type: \"GeometricElement3d\" }),\n ),\n ),\n );\n }\n\n return merge(...observables);\n }).pipe(mergeVisibilityStatuses);\n }\n\n private getCategories(props: Parameters<BaseIdsCache[\"getCategories\"]>[0]): ReturnType<BaseIdsCache[\"getCategories\"]> {\n return from(Id64.iterable(props.modelIds)).pipe(\n mergeMap((modelId) => this.#props.idsCache.getModelCategoryIds(modelId).pipe(map((categoryIds) => ({ id: modelId, spatialCategories: categoryIds })))),\n );\n }\n\n private getAllCategories(): ReturnType<BaseIdsCache[\"getAllCategories\"]> {\n return this.#props.idsCache.getAllCategories().pipe(map((categories) => ({ spatialCategories: categories })));\n }\n\n private getElementsCount(props: Parameters<BaseIdsCache[\"getElementsCount\"]>[0]): ReturnType<BaseIdsCache[\"getElementsCount\"]> {\n return this.#props.idsCache.getCategoryElementsCount(props.modelId, props.categoryId);\n }\n\n private getModels(props: Parameters<BaseIdsCache[\"getModels\"]>[0]): ReturnType<BaseIdsCache[\"getModels\"]> {\n return this.#props.idsCache.getCategoriesElementModels(props.categoryIds);\n }\n\n private getSubCategories(props: Parameters<BaseIdsCache[\"getSubCategories\"]>[0]): ReturnType<BaseIdsCache[\"getSubCategories\"]> {\n return this.#props.idsCache.getSubCategories(props.categoryId);\n }\n\n private getSubModels(props: Parameters<BaseIdsCache[\"getSubModels\"]>[0]): ReturnType<BaseIdsCache[\"getSubModels\"]> {\n if (\"modelIds\" in props) {\n return from(Id64.iterable(props.modelIds)).pipe(\n mergeMap((modelId) => {\n if (props.categoryId) {\n return this.#props.idsCache.getCategoriesModeledElements(modelId, props.categoryId).pipe(map((subModels) => ({ id: modelId, subModels })));\n }\n return this.#props.idsCache.getModelCategoryIds(modelId).pipe(\n mergeMap((categoryIds) => this.#props.idsCache.getCategoriesModeledElements(modelId, categoryIds)),\n map((subModels) => ({ id: modelId, subModels })),\n );\n }),\n );\n }\n\n if (props.modelId) {\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n this.#props.idsCache.getCategoriesModeledElements(props.modelId!, categoryId).pipe(map((subModels) => ({ id: categoryId, subModels }))),\n ),\n );\n }\n\n return this.#props.idsCache.getCategoriesElementModels(props.categoryIds).pipe(\n mergeMap(({ id, models }) => {\n if (!models) {\n return of({ id, subModels: undefined });\n }\n return from(models).pipe(\n mergeMap((modelId) => this.#props.idsCache.getCategoriesModeledElements(modelId, id)),\n map((subModels) => ({ id, subModels })),\n );\n }),\n );\n }\n\n private getGroupingNodeInfo(node: GroupingHierarchyNode) {\n const modelId = ModelsTreeNode.getModelId(node);\n const categoryId = ModelsTreeNode.getCategoryId(node);\n assert(!!modelId && !!categoryId);\n\n const elementIds = node.groupedInstanceKeys.map((key) => key.id);\n return { modelId, categoryId, elementIds };\n }\n}\n\n/**\n * Creates models tree visibility handler. Is used by integration and performance tests.\n * @internal\n */\nexport function createModelsTreeVisibilityHandler(props: {\n viewport: TreeWidgetViewport;\n idsCache: ModelsTreeIdsCache;\n imodelAccess: ECClassHierarchyInspector;\n overrides?: ModelsTreeVisibilityHandlerOverrides;\n searchPaths?: HierarchySearchPath[];\n}) {\n return new HierarchyVisibilityHandlerImpl<ModelsTreeSearchTargets>({\n getSearchResultsTree: (): undefined | Promise<SearchResultsTree<ModelsTreeSearchTargets>> => {\n if (!props.searchPaths) {\n return undefined;\n }\n return createModelsSearchResultsTree({\n searchPaths: props.searchPaths,\n imodelAccess: props.imodelAccess,\n });\n },\n getTreeSpecificVisibilityHandler: (info, overrideHandler) => {\n return new ModelsTreeVisibilityHandler({\n alwaysAndNeverDrawnElementInfo: info,\n idsCache: props.idsCache,\n viewport: props.viewport,\n overrideHandler,\n overrides: props.overrides,\n });\n },\n viewport: props.viewport,\n componentId: Guid.createValue(),\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ModelsTreeVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../../../src/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.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 { concat, defer, EMPTY, from, map, merge, mergeAll, mergeMap, of } from \"rxjs\";\nimport { assert, Guid } from \"@itwin/core-bentley\";\nimport { HierarchyNodeKey } from \"@itwin/presentation-hierarchies\";\nimport { createVisibilityStatus } from \"../../../common/internal/Tooltip.js\";\nimport { HierarchyVisibilityHandlerImpl } from \"../../../common/internal/useTreeHooks/UseCachedVisibility.js\";\nimport { fromWithRelease, getIdsFromChildrenTree, getParentElementsIdsPath, setDifference, setIntersection } from \"../../../common/internal/Utils.js\";\nimport { mergeVisibilityStatuses } from \"../../../common/internal/VisibilityUtils.js\";\nimport { ModelsTreeNodeInternal } from \"../ModelsTreeNodeInternal.js\";\nimport { ModelsTreeVisibilityHelper } from \"./ModelsTreeVisibilityHelper.js\";\nimport { createModelsSearchResultsTree } from \"./SearchResultsTree.js\";\n\nimport type { Observable } from \"rxjs\";\nimport type { Id64Arg, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport type { ClassGroupingNodeKey, GroupingHierarchyNode, HierarchyNode, HierarchySearchPath, InstancesNodeKey } from \"@itwin/presentation-hierarchies\";\nimport type { ECClassHierarchyInspector } from \"@itwin/presentation-shared\";\nimport type { AlwaysAndNeverDrawnElementInfoCache } from \"../../../common/internal/caches/AlwaysAndNeverDrawnElementInfoCache.js\";\nimport type { CategoryId, ElementId, ModelId } from \"../../../common/internal/Types.js\";\nimport type { SearchResultsTree } from \"../../../common/internal/visibility/BaseSearchResultsTree.js\";\nimport type { BaseTreeVisibilityHandlerOverrides, TreeSpecificVisibilityHandler } from \"../../../common/internal/visibility/BaseVisibilityHelper.js\";\nimport type { TreeWidgetViewport } from \"../../../common/TreeWidgetViewport.js\";\nimport type {\n HierarchyVisibilityHandlerOverridableMethod,\n HierarchyVisibilityOverrideHandler,\n VisibilityStatus,\n} from \"../../../common/UseHierarchyVisibility.js\";\nimport type { ModelsTreeIdsCache } from \"../ModelsTreeIdsCache.js\";\nimport type { ModelsTreeSearchTargets } from \"./SearchResultsTree.js\";\n\n/**\n * Functionality of Models tree visibility handler that can be overridden.\n * Each callback is provided original implementation and reference to a `HierarchyVisibilityHandler`.\n * @beta\n */\nexport interface ModelsTreeVisibilityHandlerOverrides extends BaseTreeVisibilityHandlerOverrides {\n getSubjectsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { subjectIds: Id64Arg }) => Promise<VisibilityStatus>>;\n getElementGroupingNodeVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { node: GroupingHierarchyNode }) => Promise<VisibilityStatus>>;\n\n changeSubjectsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { subjectIds: Id64Arg; on: boolean }) => Promise<void>>;\n changeElementGroupingNodeVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<\n (props: { node: GroupingHierarchyNode; on: boolean }) => Promise<void>\n >;\n}\n\n/** @internal */\nexport interface ModelsTreeVisibilityHandlerProps {\n idsCache: ModelsTreeIdsCache;\n viewport: TreeWidgetViewport;\n alwaysAndNeverDrawnElementInfo: AlwaysAndNeverDrawnElementInfoCache;\n overrideHandler: HierarchyVisibilityOverrideHandler;\n overrides?: ModelsTreeVisibilityHandlerOverrides;\n}\n\n/**\n * Handles visibility status of models tree nodes.\n *\n * It knows how to get and change visibility status of nodes created by hierarchy definition.\n * @internal\n */\nexport class ModelsTreeVisibilityHandler implements Disposable, TreeSpecificVisibilityHandler<ModelsTreeSearchTargets> {\n #visibilityHelper: ModelsTreeVisibilityHelper;\n readonly #props: ModelsTreeVisibilityHandlerProps;\n\n constructor(constructorProps: ModelsTreeVisibilityHandlerProps) {\n this.#props = constructorProps;\n this.#visibilityHelper = new ModelsTreeVisibilityHelper({\n viewport: this.#props.viewport,\n idsCache: this.#props.idsCache,\n alwaysAndNeverDrawnElementInfo: this.#props.alwaysAndNeverDrawnElementInfo,\n overrideHandler: this.#props.overrideHandler,\n baseIdsCache: this.#props.idsCache,\n overrides: this.#props.overrides,\n });\n }\n\n public [Symbol.dispose]() {\n this.#visibilityHelper[Symbol.dispose]();\n }\n\n public changeSearchTargetsVisibilityStatus(targets: ModelsTreeSearchTargets, on: boolean): Observable<void> {\n return defer(() => {\n const { subjectIds, modelIds, categories, elements } = targets;\n const observables = new Array<Observable<void>>();\n if (this.#props.viewport.viewType !== \"3d\") {\n return EMPTY;\n }\n if (subjectIds?.size) {\n observables.push(this.#visibilityHelper.changeSubjectsVisibilityStatus({ subjectIds, on }));\n }\n\n if (modelIds?.size) {\n observables.push(this.#visibilityHelper.changeModelsVisibilityStatus({ modelIds, on }));\n }\n\n if (categories?.length) {\n observables.push(\n from(categories).pipe(\n mergeMap(({ modelId, categoryIds }) =>\n this.#visibilityHelper.changeCategoriesVisibilityStatus({\n categoryIds,\n modelId,\n on,\n }),\n ),\n ),\n );\n }\n\n if (elements?.length) {\n const searchTargetElements = new Array<Id64String>();\n const elementIdsSet = new Set<Id64String>();\n const modelCategoryElementMap = new Map<`${ModelId}-${CategoryId}`, Array<ElementId>>();\n // elements is an array that stores elements grouped by:\n // 1. Their path\n // 2. Their modelId and categoryId\n // When changing visibility of elements, visibility handler does not care about the path.\n // So we can first get all elements and group them only by modelId and categoryId.\n for (const { elements: elementsMap, categoryId, modelId } of elements) {\n const key: `${ModelId}-${CategoryId}` = `${modelId}-${categoryId}`;\n let mapEntry = modelCategoryElementMap.get(key);\n if (!mapEntry) {\n mapEntry = [];\n modelCategoryElementMap.set(key, mapEntry);\n }\n for (const [elementId, { isSearchTarget }] of elementsMap) {\n mapEntry.push(elementId);\n elementIdsSet.add(elementId);\n if (isSearchTarget) {\n searchTargetElements.push(elementId);\n }\n }\n }\n observables.push(\n // Get children for search targets, since non search targets don't have all the children present in the hierarchy.\n this.#props.idsCache.getChildElementsTree({ elementIds: searchTargetElements }).pipe(\n // Need to filter out and keep only those children ids that are not part of elements that are present in search paths.\n // Elements in search paths will have their visibility changed directly: they will be provided as elementIds to changeElementsVisibilityStatus.\n map((childrenTree) => ({\n childrenNotInSearchPaths: setDifference(getIdsFromChildrenTree({ tree: childrenTree, predicate: ({ depth }) => depth > 0 }), elementIdsSet),\n childrenTree,\n })),\n mergeMap(({ childrenNotInSearchPaths, childrenTree }) =>\n fromWithRelease({ source: modelCategoryElementMap.entries(), size: modelCategoryElementMap.size, releaseOnCount: 50 }).pipe(\n mergeMap(([key, elementsInSearchPathsGroupedByModelAndCategory]) => {\n const [modelId, categoryId] = key.split(\"-\");\n const childrenIds = new Set<Id64String>();\n // A shared children tree was created, need to get the children for each element in the group.\n for (const elementId of elementsInSearchPathsGroupedByModelAndCategory) {\n const elementChildrenTree = childrenTree.get(elementId)?.children;\n if (!elementChildrenTree) {\n continue;\n }\n for (const childId of getIdsFromChildrenTree({ tree: elementChildrenTree })) {\n childrenIds.add(childId);\n }\n }\n return this.#visibilityHelper.changeElementsVisibilityStatus({\n modelId,\n categoryId,\n elementIds: elementsInSearchPathsGroupedByModelAndCategory,\n // Pass only those children that are not part of search paths.\n children: setIntersection(childrenIds, childrenNotInSearchPaths),\n on,\n });\n }),\n ),\n ),\n ),\n );\n }\n\n return merge(...observables);\n });\n }\n\n public getVisibilityStatus(node: HierarchyNode): Observable<VisibilityStatus> {\n if (this.#props.viewport.viewType !== \"3d\") {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (ModelsTreeNodeInternal.isElementClassGroupingNode(node)) {\n const result = this.#visibilityHelper.getGroupedElementsVisibilityStatus({\n categoryId: node.extendedData.categoryId,\n modelId: node.extendedData.modelId,\n elementIds: node.groupedInstanceKeys.map((key) => key.id),\n parentKeys: node.parentKeys,\n childrenCount: node.extendedData.childrenCount,\n categoryOfTopMostParentElement: node.extendedData.categoryOfTopMostParentElement,\n topMostParentElementId: node.extendedData.topMostParentElementId,\n });\n return this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: { node },\n nonOverriddenResult: result,\n override: this.#props.overrides?.getElementGroupingNodeVisibilityStatus,\n });\n }\n\n if (ModelsTreeNodeInternal.isSubjectNode(node)) {\n // note: subject nodes may be merged to represent multiple subject instances\n return this.#visibilityHelper.getSubjectsVisibilityStatus({ subjectIds: node.key.instanceKeys.map((key) => key.id) });\n }\n\n if (ModelsTreeNodeInternal.isModelNode(node)) {\n return this.#visibilityHelper.getModelsVisibilityStatus({ modelIds: node.key.instanceKeys.map(({ id }) => id) });\n }\n\n if (ModelsTreeNodeInternal.isCategoryNode(node)) {\n return this.#visibilityHelper.getCategoriesVisibilityStatus({\n categoryIds: node.key.instanceKeys.map(({ id }) => id),\n modelId: node.extendedData.modelIds[0],\n });\n }\n\n assert(ModelsTreeNodeInternal.isElementNode(node));\n const parentElementsIdsPath = getParentElementsIdsPath({\n parentInstanceKeys: node.parentKeys.filter((key) => HierarchyNodeKey.isInstances(key)).map((key) => key.instanceKeys),\n topMostParentElementId: node.extendedData.topMostParentElementId,\n });\n return this.#visibilityHelper.getElementsVisibilityStatus({\n elementIds: node.key.instanceKeys.map(({ id }) => id),\n modelId: node.extendedData.modelId,\n categoryId: node.extendedData.categoryId,\n parentElementsIdsPath,\n childrenCount: node.extendedData?.childrenCount,\n categoryOfTopMostParentElement: node.extendedData.categoryOfTopMostParentElement,\n });\n }\n\n /** Changes visibility of the items represented by the tree node. */\n public changeVisibilityStatus(node: HierarchyNode, on: boolean): Observable<void> {\n const changeObs = defer(() => {\n if (this.#props.viewport.viewType !== \"3d\") {\n return EMPTY;\n }\n if (ModelsTreeNodeInternal.isElementClassGroupingNode(node)) {\n const result = this.#visibilityHelper.changeGroupedElementsVisibilityStatus({\n categoryId: node.extendedData.categoryId,\n modelId: node.extendedData.modelId,\n elementIds: node.groupedInstanceKeys.map((key) => key.id),\n on,\n });\n return this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: { node, on },\n nonOverriddenResult: result,\n override: this.#props.overrides?.changeElementGroupingNodeVisibilityStatus,\n });\n }\n\n if (ModelsTreeNodeInternal.isSubjectNode(node)) {\n return this.#visibilityHelper.changeSubjectsVisibilityStatus({\n subjectIds: node.key.instanceKeys.map((key) => key.id),\n on,\n });\n }\n\n if (ModelsTreeNodeInternal.isModelNode(node)) {\n return this.#visibilityHelper.changeModelsVisibilityStatus({ modelIds: node.key.instanceKeys.map(({ id }) => id), on });\n }\n\n if (ModelsTreeNodeInternal.isCategoryNode(node)) {\n return this.#visibilityHelper.changeCategoriesVisibilityStatus({\n categoryIds: node.key.instanceKeys.map(({ id }) => id),\n modelId: node.extendedData.modelIds[0],\n on,\n });\n }\n\n assert(ModelsTreeNodeInternal.isElementNode(node));\n const elementIds = node.key.instanceKeys.map(({ id }) => id);\n return this.#props.idsCache.getChildElementsTree({ elementIds }).pipe(\n map((childrenTree): Id64Set => {\n // Children tree contains provided elementIds, they are at the root of this tree.\n // We want to skip them and only get ids of children.\n return getIdsFromChildrenTree({ tree: childrenTree, predicate: ({ depth }) => depth > 0 });\n }),\n mergeMap((children) =>\n this.#visibilityHelper.changeElementsVisibilityStatus({\n elementIds,\n modelId: node.extendedData.modelId,\n children: children.size > 0 ? children : undefined,\n categoryId: node.extendedData.categoryId,\n on,\n }),\n ),\n );\n });\n\n if (this.#props.viewport.isAlwaysDrawnExclusive) {\n return concat(this.#visibilityHelper.removeAlwaysDrawnExclusive(), changeObs);\n }\n return changeObs;\n }\n\n public getSearchTargetsVisibilityStatus(\n targets: ModelsTreeSearchTargets,\n node: HierarchyNode & {\n key: ClassGroupingNodeKey | InstancesNodeKey;\n },\n ): Observable<VisibilityStatus> {\n if (this.#props.viewport.viewType !== \"3d\") {\n return of(createVisibilityStatus(\"disabled\"));\n }\n return defer(() => {\n const { subjectIds, modelIds, categories, elements } = targets;\n const observables = new Array<Observable<VisibilityStatus>>();\n if (subjectIds?.size) {\n observables.push(this.#visibilityHelper.getSubjectsVisibilityStatus({ subjectIds }));\n }\n\n if (modelIds?.size) {\n observables.push(this.#visibilityHelper.getModelsVisibilityStatus({ modelIds }));\n }\n\n if (categories?.length) {\n observables.push(\n from(categories).pipe(\n mergeMap(({ modelId, categoryIds }) =>\n this.#visibilityHelper.getCategoriesVisibilityStatus({\n categoryIds,\n modelId,\n }),\n ),\n ),\n );\n }\n\n if (elements?.length) {\n const searchTargetElements = new Array<Id64String>();\n for (const { elements: elementsMap } of elements) {\n for (const [elementId, { isSearchTarget }] of elementsMap) {\n if (isSearchTarget) {\n searchTargetElements.push(elementId);\n }\n }\n }\n let childrenCountMapObs: Observable<Map<Id64String, number>>;\n if (ModelsTreeNodeInternal.isElementClassGroupingNode(node)) {\n const groupingNodesSearchTargets: Map<Id64String, { childrenCount: number }> | undefined = node.extendedData.searchTargets;\n const nestedSearchTargetElements = searchTargetElements.filter((searchTarget) => !groupingNodesSearchTargets?.has(searchTarget));\n // Only need to request children count for indirect children search targets.\n childrenCountMapObs = this.#props.idsCache.getAllChildElementsCount({ elementIds: nestedSearchTargetElements }).pipe(\n map((elementCountMap) => {\n // Direct children search targets already have children count stored in grouping nodes extended data.\n for (const [key, value] of node.extendedData.searchTargets ?? []) {\n elementCountMap.set(key, value.childrenCount);\n }\n return elementCountMap;\n }),\n );\n } else {\n childrenCountMapObs = this.#props.idsCache.getAllChildElementsCount({ elementIds: searchTargetElements });\n }\n observables.push(\n childrenCountMapObs.pipe(\n mergeMap((elementsChildrenCountMap) =>\n fromWithRelease({ source: elements, releaseOnCount: 50 }).pipe(\n mergeMap(({ modelId, elements: elementsMap, categoryId, pathToElements, topMostParentElementId }) => {\n const parentElementsIdsPath = topMostParentElementId\n ? getParentElementsIdsPath({\n parentInstanceKeys: pathToElements.map((instanceKey) => [instanceKey]),\n topMostParentElementId,\n })\n : [];\n let totalSearchTargetsChildrenCount = 0;\n const nonSearchTargetIds = new Array<Id64String>();\n const searchTargetIds = new Array<Id64String>();\n for (const [elementId, { isSearchTarget }] of elementsMap) {\n if (!isSearchTarget) {\n nonSearchTargetIds.push(elementId);\n continue;\n }\n searchTargetIds.push(elementId);\n const childCount = elementsChildrenCountMap.get(elementId);\n if (childCount) {\n totalSearchTargetsChildrenCount += childCount;\n }\n }\n return merge(\n searchTargetIds.length > 0\n ? this.#visibilityHelper.getElementsVisibilityStatus({\n modelId,\n categoryId,\n elementIds: searchTargetIds,\n parentElementsIdsPath,\n childrenCount: totalSearchTargetsChildrenCount,\n // Search results tree is created on search paths. Since search paths contain only categories that are directly under models\n // or at the root, categoryId can be used here here.\n categoryOfTopMostParentElement: categoryId,\n })\n : EMPTY,\n // Set childrenCount to undefined for non search targets, as some of their child elements might be filtered out.\n // Since childrenCount is set to undefined, these elements won't check child always/never drawn child elements status.\n // Child always/never drawn elements will be in search paths, and their visibility status will be handled separately.\n nonSearchTargetIds.length > 0\n ? this.#visibilityHelper.getElementsVisibilityStatus({\n modelId,\n categoryId,\n elementIds: nonSearchTargetIds,\n parentElementsIdsPath,\n childrenCount: undefined,\n // Search results tree is created on search paths. Since search paths contain only categories that are directly under models\n // or at the root, categoryId can be used here here.\n categoryOfTopMostParentElement: categoryId,\n })\n : EMPTY,\n ).pipe(mergeVisibilityStatuses());\n }),\n ),\n ),\n ),\n );\n }\n\n return from(observables).pipe(mergeAll(), mergeVisibilityStatuses());\n });\n }\n}\n\n/**\n * Creates models tree visibility handler. Is used by integration and performance tests.\n * @internal\n */\nexport function createModelsTreeVisibilityHandler(props: {\n viewport: TreeWidgetViewport;\n idsCache: ModelsTreeIdsCache;\n imodelAccess: ECClassHierarchyInspector;\n overrides?: ModelsTreeVisibilityHandlerOverrides;\n searchPaths?: HierarchySearchPath[];\n}) {\n return new HierarchyVisibilityHandlerImpl<ModelsTreeSearchTargets>({\n getSearchResultsTree: (): undefined | Promise<SearchResultsTree<ModelsTreeSearchTargets>> => {\n if (!props.searchPaths) {\n return undefined;\n }\n return createModelsSearchResultsTree({\n searchPaths: props.searchPaths,\n imodelAccess: props.imodelAccess,\n });\n },\n getTreeSpecificVisibilityHandler: (info, overrideHandler) => {\n return new ModelsTreeVisibilityHandler({\n alwaysAndNeverDrawnElementInfo: info,\n idsCache: props.idsCache,\n viewport: props.viewport,\n overrideHandler,\n overrides: props.overrides,\n });\n },\n viewport: props.viewport,\n componentId: Guid.createValue(),\n });\n}\n"]}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { HierarchyNodeKey } from "@itwin/presentation-hierarchies";
|
|
1
2
|
import { BaseVisibilityHelper } from "../../../common/internal/visibility/BaseVisibilityHelper.js";
|
|
2
3
|
import type { Observable } from "rxjs";
|
|
3
4
|
import type { Id64Arg, Id64String } from "@itwin/core-bentley";
|
|
5
|
+
import type { CategoryId, ElementId } from "../../../common/internal/Types.js";
|
|
4
6
|
import type { BaseVisibilityHelperProps } from "../../../common/internal/visibility/BaseVisibilityHelper.js";
|
|
5
7
|
import type { VisibilityStatus } from "../../../common/UseHierarchyVisibility.js";
|
|
6
8
|
import type { ModelsTreeIdsCache } from "../ModelsTreeIdsCache.js";
|
|
@@ -32,6 +34,10 @@ export declare class ModelsTreeVisibilityHelper extends BaseVisibilityHelper {
|
|
|
32
34
|
modelId: Id64String;
|
|
33
35
|
categoryId: Id64String;
|
|
34
36
|
elementIds: Id64Arg;
|
|
37
|
+
parentKeys: HierarchyNodeKey[];
|
|
38
|
+
childrenCount: number;
|
|
39
|
+
categoryOfTopMostParentElement: CategoryId;
|
|
40
|
+
topMostParentElementId?: ElementId;
|
|
35
41
|
}): Observable<VisibilityStatus>;
|
|
36
42
|
/**
|
|
37
43
|
* Changes visibility status of subjects.
|