@itwin/tree-widget-react 4.0.0-alpha.6 → 4.0.0-alpha.8
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 +22 -1
- package/README.md +2 -1
- package/lib/esm/tree-widget-react/TreeWidget.d.ts +6 -1
- package/lib/esm/tree-widget-react/TreeWidget.js +19 -2
- package/lib/esm/tree-widget-react/TreeWidget.js.map +1 -1
- package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.d.ts +6 -0
- package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.js +22 -23
- package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.js.map +1 -1
- package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js +1 -1
- package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js.map +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/ErrorState.js +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/ErrorState.js.map +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/SearchBox.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/SearchBox.js +4 -4
- package/lib/esm/tree-widget-react/components/tree-header/SearchBox.js.map +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/SelectableTree.css +2 -0
- package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.css +1 -0
- package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.d.ts +12 -4
- package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.js +13 -9
- 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 +2 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js +2 -2
- 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 +9 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js +53 -7
- 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 +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js +1 -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 +17 -3
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js +561 -161
- 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/UseCategoriesTree.d.ts +6 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js +46 -117
- 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 +30 -15
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +188 -38
- 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/CategoriesTreeNode.d.ts +18 -3
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNode.js +30 -3
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNode.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.d.ts +24 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.js +701 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/FilteredTree.d.ts +39 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/FilteredTree.js +221 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/FilteredTree.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.d.ts +25 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js +133 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseIdsCache.d.ts +8 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseIdsCache.js +48 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseIdsCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.d.ts +5 -17
- package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.js +5 -62
- package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js +11 -5
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.js +13 -11
- package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseTelemetryContext.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/UseTelemetryContext.js +2 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseTelemetryContext.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/Utils.d.ts +38 -23
- package/lib/esm/tree-widget-react/components/trees/common/Utils.js +65 -47
- package/lib/esm/tree-widget-react/components/trees/common/Utils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.js +4 -4
- package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/Delayed.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/Delayed.js +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/Delayed.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.js +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.css +2 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.d.ts +3 -3
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js +15 -6
- 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 +6 -4
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.js +20 -25
- 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.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js +10 -4
- 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 +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.js +7 -3
- 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/VisibilityTree.js +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js +12 -11
- 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/AlwaysAndNeverDrawnElementInfo.d.ts +44 -0
- package/lib/esm/tree-widget-react/components/trees/{models-tree → common}/internal/AlwaysAndNeverDrawnElementInfo.js +81 -31
- package/lib/esm/tree-widget-react/components/trees/common/internal/AlwaysAndNeverDrawnElementInfo.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/ClassNameDefinitions.d.ts +33 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/ClassNameDefinitions.js +37 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/ClassNameDefinitions.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.d.ts +16 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js +72 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/{Rxjs.d.ts → internal/Rxjs.d.ts} +9 -2
- package/lib/esm/tree-widget-react/components/trees/common/{Rxjs.js → internal/Rxjs.js} +9 -2
- package/lib/esm/tree-widget-react/components/trees/common/internal/Rxjs.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/{Tooltip.d.ts → internal/Tooltip.d.ts} +4 -8
- package/lib/esm/tree-widget-react/components/trees/common/{Tooltip.js → internal/Tooltip.js} +4 -10
- package/lib/esm/tree-widget-react/components/trees/common/internal/Tooltip.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/Types.d.ts +14 -0
- package/lib/esm/tree-widget-react/components/{tree-header/SearchBox.css → trees/common/internal/Types.js} +2 -4
- package/lib/esm/tree-widget-react/components/trees/common/internal/Types.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseActiveViewport.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/{UseHierarchiesLocalization.d.ts → internal/UseHierarchiesLocalization.d.ts} +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/{UseHierarchiesLocalization.js → internal/UseHierarchiesLocalization.js} +6 -2
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseHierarchiesLocalization.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/{UseHierarchyFiltering.d.ts → internal/UseHierarchyFiltering.d.ts} +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/{UseHierarchyFiltering.js → internal/UseHierarchyFiltering.js} +4 -3
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseHierarchyFiltering.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/{UseIModelChangeListener.d.ts → internal/UseIModelChangeListener.d.ts} +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/{UseIModelChangeListener.js → internal/UseIModelChangeListener.js} +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelChangeListener.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.d.ts +47 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js +101 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityChangeEventListener.d.ts +20 -0
- package/lib/esm/tree-widget-react/components/trees/{models-tree → common}/internal/VisibilityChangeEventListener.js +17 -9
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityChangeEventListener.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.d.ts +63 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js +210 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js.map +1 -0
- 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 +8 -8
- 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.d.ts +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/external-sources-tree/ExternalSourcesTreeDefinition.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js +1 -0
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.d.ts +4 -2
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js +22 -18
- 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.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js +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.d.ts +13 -0
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.js +39 -38
- 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.d.ts +5 -5
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js +25 -24
- 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/models-tree/ModelsTree.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js +2 -2
- 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.js +15 -11
- 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 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js +1 -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 +7 -2
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +73 -70
- 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/UseModelsTree.js +36 -202
- 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/FilteredTree.d.ts +7 -9
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/FilteredTree.js +4 -6
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/FilteredTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +4 -5
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +54 -104
- 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/ModelsTreeVisibilityHandler.d.ts +0 -26
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +80 -359
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.d.ts +27 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js +170 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseIdsCache.d.ts +8 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseIdsCache.js +47 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseIdsCache.js.map +1 -0
- package/lib/public/locales/en/TreeWidget.json +13 -59
- package/package.json +19 -20
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.d.ts +0 -37
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js +0 -214
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/ClassNameDefinitions.d.ts +0 -7
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/ClassNameDefinitions.js +0 -11
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/ClassNameDefinitions.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/Rxjs.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/Tooltip.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseActiveViewport.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseFiltering.d.ts +0 -11
- package/lib/esm/tree-widget-react/components/trees/common/UseFiltering.js +0 -24
- package/lib/esm/tree-widget-react/components/trees/common/UseFiltering.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchiesLocalization.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyFiltering.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseIModelChangeListener.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.d.ts +0 -7
- package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.js +0 -21
- package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.d.ts +0 -29
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/VisibilityChangeEventListener.d.ts +0 -12
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/VisibilityChangeEventListener.js.map +0 -1
- /package/lib/esm/tree-widget-react/components/trees/common/{UseActiveViewport.d.ts → internal/UseActiveViewport.d.ts} +0 -0
- /package/lib/esm/tree-widget-react/components/trees/common/{UseActiveViewport.js → internal/UseActiveViewport.js} +0 -0
|
@@ -2,19 +2,20 @@
|
|
|
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, concatAll, defer, distinct, EMPTY, filter, firstValueFrom, forkJoin, from, fromEventPattern, map, merge, mergeMap, of,
|
|
5
|
+
import { concat, concatAll, defaultIfEmpty, defer, distinct, EMPTY, filter, firstValueFrom, forkJoin, from, fromEventPattern, map, merge, mergeMap, of, shareReplay, startWith, Subject, take, takeUntil, tap, toArray, } from "rxjs";
|
|
6
6
|
import { assert, Id64 } from "@itwin/core-bentley";
|
|
7
7
|
import { PerModelCategoryVisibility } from "@itwin/core-frontend";
|
|
8
8
|
import { HierarchyNode, HierarchyNodeKey } from "@itwin/presentation-hierarchies";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
9
|
+
import { AlwaysAndNeverDrawnElementInfo } from "../../common/internal/AlwaysAndNeverDrawnElementInfo.js";
|
|
10
|
+
import { GEOMETRIC_ELEMENT_3D_CLASS_NAME } from "../../common/internal/ClassNameDefinitions.js";
|
|
11
|
+
import { toVoidPromise } from "../../common/internal/Rxjs.js";
|
|
12
|
+
import { createVisibilityStatus } from "../../common/internal/Tooltip.js";
|
|
13
|
+
import { releaseMainThreadOnItemsCount, setDifference, setIntersection } from "../../common/internal/Utils.js";
|
|
14
|
+
import { createVisibilityChangeEventListener } from "../../common/internal/VisibilityChangeEventListener.js";
|
|
15
|
+
import { changeElementStateNoChildrenOperator, filterSubModeledElementIds, getElementOverriddenVisibility, getElementVisibility, getSubModeledElementsVisibilityStatus, getVisibilityFromAlwaysAndNeverDrawnElementsImpl, mergeVisibilityStatuses, } from "../../common/internal/VisibilityUtils.js";
|
|
12
16
|
import { createVisibilityHandlerResult } from "../../common/UseHierarchyVisibility.js";
|
|
13
|
-
import { releaseMainThreadOnItemsCount } from "../Utils.js";
|
|
14
|
-
import { AlwaysAndNeverDrawnElementInfo } from "./AlwaysAndNeverDrawnElementInfo.js";
|
|
15
17
|
import { createFilteredTree, parseCategoryKey } from "./FilteredTree.js";
|
|
16
18
|
import { ModelsTreeNode } from "./ModelsTreeNode.js";
|
|
17
|
-
import { createVisibilityChangeEventListener } from "./VisibilityChangeEventListener.js";
|
|
18
19
|
/**
|
|
19
20
|
* Creates an instance if `ModelsTreeVisibilityHandler`.
|
|
20
21
|
* @internal
|
|
@@ -28,8 +29,15 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
28
29
|
this._elementChangeQueue = new Subject();
|
|
29
30
|
this._subscriptions = [];
|
|
30
31
|
this._changeRequest = new Subject();
|
|
31
|
-
this._eventListener = createVisibilityChangeEventListener(
|
|
32
|
-
|
|
32
|
+
this._eventListener = createVisibilityChangeEventListener({
|
|
33
|
+
viewport: _props.viewport,
|
|
34
|
+
listeners: {
|
|
35
|
+
models: true,
|
|
36
|
+
categories: true,
|
|
37
|
+
elements: true,
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
this._alwaysAndNeverDrawnElements = new AlwaysAndNeverDrawnElementInfo(_props.viewport, GEOMETRIC_ELEMENT_3D_CLASS_NAME);
|
|
33
41
|
this._idsCache = this._props.idsCache;
|
|
34
42
|
this._filteredTree = _props.filteredPaths ? createFilteredTree(this._props.imodelAccess, _props.filteredPaths) : undefined;
|
|
35
43
|
this._subscriptions.push(this._elementChangeQueue.pipe(concatAll()).subscribe());
|
|
@@ -46,7 +54,7 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
46
54
|
this._eventListener.onVisibilityChange.addListener(handler);
|
|
47
55
|
}, (handler) => {
|
|
48
56
|
this._eventListener.onVisibilityChange.removeListener(handler);
|
|
49
|
-
}))));
|
|
57
|
+
})), defaultIfEmpty(createVisibilityStatus("hidden"))));
|
|
50
58
|
}
|
|
51
59
|
async changeVisibility(node, shouldDisplay) {
|
|
52
60
|
// notify about new change request
|
|
@@ -69,8 +77,8 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
69
77
|
this[Symbol.dispose]();
|
|
70
78
|
}
|
|
71
79
|
[Symbol.dispose]() {
|
|
72
|
-
this._eventListener.dispose();
|
|
73
|
-
this._alwaysAndNeverDrawnElements.dispose();
|
|
80
|
+
this._eventListener[Symbol.dispose]();
|
|
81
|
+
this._alwaysAndNeverDrawnElements[Symbol.dispose]();
|
|
74
82
|
this._subscriptions.forEach((x) => x.unsubscribe());
|
|
75
83
|
}
|
|
76
84
|
getVisibilityStatusObs(node) {
|
|
@@ -111,116 +119,85 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
111
119
|
});
|
|
112
120
|
}
|
|
113
121
|
getFilteredNodeVisibility(props) {
|
|
114
|
-
return from(this.getVisibilityChangeTargets(props)).pipe(mergeMap(({ subjects, models, categories, elements }) => {
|
|
122
|
+
return from(this.getVisibilityChangeTargets(props)).pipe(mergeMap(({ subjectIds: subjects, modelIds: models, categories, elements }) => {
|
|
115
123
|
const observables = new Array();
|
|
116
124
|
if (subjects?.size) {
|
|
117
|
-
observables.push(this.getSubjectNodeVisibilityStatus({ subjectIds: [...subjects]
|
|
125
|
+
observables.push(this.getSubjectNodeVisibilityStatus({ subjectIds: [...subjects] }));
|
|
118
126
|
}
|
|
119
127
|
if (models?.size) {
|
|
120
|
-
observables.push(from(models).pipe(mergeMap((modelId) => this.getModelVisibilityStatus({ modelId
|
|
128
|
+
observables.push(from(models).pipe(mergeMap((modelId) => this.getModelVisibilityStatus({ modelId }))));
|
|
121
129
|
}
|
|
122
130
|
if (categories?.size) {
|
|
123
131
|
observables.push(from(categories).pipe(mergeMap((key) => {
|
|
124
132
|
const { modelId, categoryId } = parseCategoryKey(key);
|
|
125
|
-
return this.getCategoryDisplayStatus({ modelId, categoryId
|
|
133
|
+
return this.getCategoryDisplayStatus({ modelId, categoryId });
|
|
126
134
|
})));
|
|
127
135
|
}
|
|
128
136
|
if (elements?.size) {
|
|
129
137
|
observables.push(from(elements).pipe(releaseMainThreadOnItemsCount(50), mergeMap(([categoryKey, elementIds]) => {
|
|
130
138
|
const { modelId, categoryId } = parseCategoryKey(categoryKey);
|
|
131
|
-
return from(elementIds).pipe(releaseMainThreadOnItemsCount(1000), mergeMap((elementId) => this.getElementDisplayStatus({ modelId, categoryId, elementId
|
|
139
|
+
return from(elementIds).pipe(releaseMainThreadOnItemsCount(1000), mergeMap((elementId) => this.getElementDisplayStatus({ modelId, categoryId, elementId })));
|
|
132
140
|
})));
|
|
133
141
|
}
|
|
134
142
|
return merge(...observables);
|
|
135
|
-
}),
|
|
136
|
-
assert(x !== "empty");
|
|
137
|
-
return createVisibilityStatus(x);
|
|
138
|
-
}));
|
|
143
|
+
}), mergeVisibilityStatuses);
|
|
139
144
|
}
|
|
140
|
-
getSubjectNodeVisibilityStatus({ subjectIds
|
|
145
|
+
getSubjectNodeVisibilityStatus({ subjectIds }) {
|
|
141
146
|
const result = defer(() => {
|
|
142
147
|
if (!this._props.viewport.view.isSpatialView()) {
|
|
143
|
-
return of(createVisibilityStatus("disabled"
|
|
148
|
+
return of(createVisibilityStatus("disabled"));
|
|
144
149
|
}
|
|
145
|
-
return from(this._idsCache.getSubjectModelIds(subjectIds)).pipe(concatAll(), distinct(), mergeMap((modelId) => this.getModelVisibilityStatus({ modelId
|
|
146
|
-
visible: "modelsTree.subject.allModelsVisible",
|
|
147
|
-
hidden: "modelsTree.subject.allModelsHidden",
|
|
148
|
-
partial: "modelsTree.subject.someModelsHidden",
|
|
149
|
-
}, ignoreTooltip));
|
|
150
|
+
return from(this._idsCache.getSubjectModelIds(subjectIds)).pipe(concatAll(), distinct(), mergeMap((modelId) => this.getModelVisibilityStatus({ modelId })), mergeVisibilityStatuses);
|
|
150
151
|
});
|
|
151
152
|
return createVisibilityHandlerResult(this, { ids: subjectIds }, result, this._props.overrides?.getSubjectNodeVisibility);
|
|
152
153
|
}
|
|
153
|
-
getModelVisibilityStatus({ modelId
|
|
154
|
+
getModelVisibilityStatus({ modelId }) {
|
|
154
155
|
const result = defer(() => {
|
|
155
156
|
const viewport = this._props.viewport;
|
|
156
157
|
if (!viewport.view.isSpatialView()) {
|
|
157
|
-
return of(createVisibilityStatus("disabled"
|
|
158
|
+
return of(createVisibilityStatus("disabled"));
|
|
158
159
|
}
|
|
159
160
|
if (!viewport.view.viewsModel(modelId)) {
|
|
160
|
-
return from(this._idsCache.
|
|
161
|
-
ignoreTooltips: ignoreTooltip,
|
|
162
|
-
haveSubModel: "yes",
|
|
163
|
-
tooltips: { visible: undefined, hidden: "modelsTree.model.hiddenThroughModelSelector", partial: "modelsTree.model.someSubModelsVisible" },
|
|
161
|
+
return from(this._idsCache.getModelCategoryIds(modelId)).pipe(mergeMap((categoryIds) => from(this._idsCache.getCategoriesModeledElements(modelId, categoryIds))), getSubModeledElementsVisibilityStatus({
|
|
164
162
|
parentNodeVisibilityStatus: createVisibilityStatus("hidden"),
|
|
163
|
+
getModelVisibilityStatus: (modelProps) => this.getModelVisibilityStatus(modelProps),
|
|
165
164
|
}));
|
|
166
165
|
}
|
|
167
|
-
return from(this._idsCache.
|
|
168
|
-
const state = visibilityByCategories === "empty" ? "visible" : visibilityByCategories;
|
|
169
|
-
return createVisibilityStatus(state, getTooltipOptions(state === "partial" ? "modelsTree.model.someCategoriesHidden" : `modelsTree.model.allCategories${state ? "Visible" : "Hidden"}`, ignoreTooltip));
|
|
170
|
-
}));
|
|
166
|
+
return from(this._idsCache.getModelCategoryIds(modelId)).pipe(concatAll(), mergeMap((categoryId) => this.getCategoryDisplayStatus({ modelId, categoryId })), mergeVisibilityStatuses);
|
|
171
167
|
});
|
|
172
168
|
return createVisibilityHandlerResult(this, { id: modelId }, result, this._props.overrides?.getModelDisplayStatus);
|
|
173
169
|
}
|
|
174
|
-
getDefaultCategoryVisibilityStatus({ modelId, categoryId
|
|
170
|
+
getDefaultCategoryVisibilityStatus({ modelId, categoryId }) {
|
|
175
171
|
const viewport = this._props.viewport;
|
|
176
172
|
if (!viewport.view.viewsModel(modelId)) {
|
|
177
|
-
return createVisibilityStatus("hidden"
|
|
173
|
+
return createVisibilityStatus("hidden");
|
|
178
174
|
}
|
|
179
175
|
switch (this._props.viewport.perModelCategoryVisibility.getOverride(modelId, categoryId)) {
|
|
180
176
|
case PerModelCategoryVisibility.Override.Show:
|
|
181
|
-
return createVisibilityStatus("visible"
|
|
177
|
+
return createVisibilityStatus("visible");
|
|
182
178
|
case PerModelCategoryVisibility.Override.Hide:
|
|
183
|
-
return createVisibilityStatus("hidden"
|
|
179
|
+
return createVisibilityStatus("hidden");
|
|
184
180
|
}
|
|
185
|
-
|
|
186
|
-
return isVisible
|
|
187
|
-
? createVisibilityStatus("visible", getTooltipOptions("modelsTree.category.displayedThroughCategorySelector", ignoreTooltip))
|
|
188
|
-
: createVisibilityStatus("hidden", getTooltipOptions("modelsTree.category.hiddenThroughCategorySelector", ignoreTooltip));
|
|
181
|
+
return createVisibilityStatus(viewport.view.viewsCategory(categoryId) ? "visible" : "hidden");
|
|
189
182
|
}
|
|
190
|
-
getCategoryDisplayStatus(
|
|
183
|
+
getCategoryDisplayStatus(props) {
|
|
191
184
|
const result = defer(() => {
|
|
192
185
|
if (!this._props.viewport.view.viewsModel(props.modelId)) {
|
|
193
|
-
return from(this._idsCache.getCategoriesModeledElements(props.modelId, [props.categoryId])).pipe(
|
|
194
|
-
ignoreTooltips: ignoreTooltip,
|
|
186
|
+
return from(this._idsCache.getCategoriesModeledElements(props.modelId, [props.categoryId])).pipe(getSubModeledElementsVisibilityStatus({
|
|
195
187
|
parentNodeVisibilityStatus: createVisibilityStatus("hidden"),
|
|
196
|
-
|
|
197
|
-
visible: undefined,
|
|
198
|
-
hidden: "modelsTree.category.hiddenThroughModel",
|
|
199
|
-
partial: "modelsTree.category.someElementsOrSubModelsHidden",
|
|
200
|
-
},
|
|
201
|
-
haveSubModel: "yes",
|
|
188
|
+
getModelVisibilityStatus: (modelProps) => this.getModelVisibilityStatus(modelProps),
|
|
202
189
|
}));
|
|
203
190
|
}
|
|
204
191
|
return this.getVisibilityFromAlwaysAndNeverDrawnElements({
|
|
205
|
-
queryProps:
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
allElementsInNeverDrawnList: "modelsTree.category.allElementsHidden",
|
|
209
|
-
elementsInBothAlwaysAndNeverDrawn: "modelsTree.category.someElementsAreHidden",
|
|
210
|
-
noElementsInExclusiveAlwaysDrawnList: "modelsTree.category.allElementsHidden",
|
|
192
|
+
queryProps: {
|
|
193
|
+
categoryIds: [props.categoryId],
|
|
194
|
+
modelId: props.modelId,
|
|
211
195
|
},
|
|
212
196
|
defaultStatus: () => this.getDefaultCategoryVisibilityStatus(props),
|
|
213
|
-
ignoreTooltip,
|
|
214
197
|
}).pipe(mergeMap((visibilityStatusAlwaysAndNeverDraw) => {
|
|
215
|
-
return from(this._idsCache.getCategoriesModeledElements(props.modelId, [props.categoryId])).pipe(
|
|
216
|
-
tooltips: {
|
|
217
|
-
visible: undefined,
|
|
218
|
-
hidden: "modelsTree.category.allElementsAndSubModelsHidden",
|
|
219
|
-
partial: "modelsTree.category.someElementsOrSubModelsHidden",
|
|
220
|
-
},
|
|
221
|
-
haveSubModel: "yes",
|
|
198
|
+
return from(this._idsCache.getCategoriesModeledElements(props.modelId, [props.categoryId])).pipe(getSubModeledElementsVisibilityStatus({
|
|
222
199
|
parentNodeVisibilityStatus: visibilityStatusAlwaysAndNeverDraw,
|
|
223
|
-
|
|
200
|
+
getModelVisibilityStatus: (modelProps) => this.getModelVisibilityStatus(modelProps),
|
|
224
201
|
}));
|
|
225
202
|
}));
|
|
226
203
|
});
|
|
@@ -231,97 +208,33 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
231
208
|
const info = this.getGroupingNodeInfo(node);
|
|
232
209
|
const { modelId, categoryId, elementIds } = info;
|
|
233
210
|
if (!this._props.viewport.view.viewsModel(modelId)) {
|
|
234
|
-
return of([...elementIds]).pipe(this.getSubModeledElementsVisibilityStatus({
|
|
235
|
-
tooltips: {
|
|
236
|
-
visible: undefined,
|
|
237
|
-
hidden: undefined,
|
|
238
|
-
partial: "modelsTree.groupingNode.someElementsOrSubModelsHidden",
|
|
239
|
-
},
|
|
211
|
+
return of([...elementIds]).pipe(filterSubModeledElementIds({ doesSubModelExist: async (id) => this._idsCache.hasSubModel(id) }), getSubModeledElementsVisibilityStatus({
|
|
240
212
|
parentNodeVisibilityStatus: createVisibilityStatus("hidden"),
|
|
241
|
-
|
|
213
|
+
getModelVisibilityStatus: (modelProps) => this.getModelVisibilityStatus(modelProps),
|
|
242
214
|
}));
|
|
243
215
|
}
|
|
244
216
|
return this.getVisibilityFromAlwaysAndNeverDrawnElements({
|
|
245
217
|
elements: elementIds,
|
|
246
|
-
defaultStatus: () => {
|
|
247
|
-
const status = this.getDefaultCategoryVisibilityStatus({ categoryId, modelId, ignoreTooltip: true });
|
|
248
|
-
return createVisibilityStatus(status.state, getTooltipOptions(`modelsTree.groupingNode.${status.state}ThroughCategory`));
|
|
249
|
-
},
|
|
250
|
-
tooltips: {
|
|
251
|
-
allElementsInAlwaysDrawnList: "modelsTree.groupingNode.allElementsVisible",
|
|
252
|
-
allElementsInNeverDrawnList: "modelsTree.groupingNode.allElementsHidden",
|
|
253
|
-
elementsInBothAlwaysAndNeverDrawn: "modelsTree.groupingNode.someElementsAreHidden",
|
|
254
|
-
noElementsInExclusiveAlwaysDrawnList: "modelsTree.groupingNode.allElementsHidden",
|
|
255
|
-
},
|
|
218
|
+
defaultStatus: () => this.getDefaultCategoryVisibilityStatus({ categoryId, modelId }),
|
|
256
219
|
}).pipe(mergeMap((visibilityStatusAlwaysAndNeverDraw) => {
|
|
257
|
-
return of([...elementIds]).pipe(this.getSubModeledElementsVisibilityStatus({
|
|
258
|
-
tooltips: {
|
|
259
|
-
visible: undefined,
|
|
260
|
-
hidden: "modelsTree.groupingNode.allElementsAndSubModelsHidden",
|
|
261
|
-
partial: "modelsTree.groupingNode.someElementsOrSubModelsHidden",
|
|
262
|
-
},
|
|
220
|
+
return of([...elementIds]).pipe(filterSubModeledElementIds({ doesSubModelExist: async (id) => this._idsCache.hasSubModel(id) }), getSubModeledElementsVisibilityStatus({
|
|
263
221
|
parentNodeVisibilityStatus: visibilityStatusAlwaysAndNeverDraw,
|
|
264
|
-
|
|
222
|
+
getModelVisibilityStatus: (modelProps) => this.getModelVisibilityStatus(modelProps),
|
|
265
223
|
}));
|
|
266
224
|
}));
|
|
267
225
|
});
|
|
268
226
|
return createVisibilityHandlerResult(this, { node }, result, this._props.overrides?.getElementGroupingNodeDisplayStatus);
|
|
269
227
|
}
|
|
270
|
-
|
|
271
|
-
const viewport = this._props.viewport;
|
|
272
|
-
if (viewport.neverDrawn?.has(elementId)) {
|
|
273
|
-
return createVisibilityStatus("hidden", getTooltipOptions("modelsTree.element.hiddenThroughNeverDrawnList", ignoreTooltip));
|
|
274
|
-
}
|
|
275
|
-
if (viewport.alwaysDrawn?.size) {
|
|
276
|
-
if (viewport.alwaysDrawn.has(elementId)) {
|
|
277
|
-
return createVisibilityStatus("visible", getTooltipOptions("modelsTree.element.displayedThroughAlwaysDrawnList", ignoreTooltip));
|
|
278
|
-
}
|
|
279
|
-
if (viewport.isAlwaysDrawnExclusive) {
|
|
280
|
-
return createVisibilityStatus("hidden", getTooltipOptions("modelsTree.element.hiddenDueToOtherElementsExclusivelyAlwaysDrawn", ignoreTooltip));
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
return undefined;
|
|
284
|
-
}
|
|
285
|
-
getElementVisibility(ignoreTooltip, viewsModel, overridenVisibility, categoryVisibility, subModelVisibilityStatus) {
|
|
286
|
-
if (subModelVisibilityStatus === undefined) {
|
|
287
|
-
if (!viewsModel) {
|
|
288
|
-
return createVisibilityStatus("hidden", getTooltipOptions("modelsTree.element.hiddenThroughModel", ignoreTooltip));
|
|
289
|
-
}
|
|
290
|
-
if (overridenVisibility) {
|
|
291
|
-
return overridenVisibility;
|
|
292
|
-
}
|
|
293
|
-
return createVisibilityStatus(categoryVisibility.state, getTooltipOptions(categoryVisibility.state === "visible" ? undefined : "modelsTree.element.hiddenThroughCategory", ignoreTooltip));
|
|
294
|
-
}
|
|
295
|
-
if (subModelVisibilityStatus.state === "partial") {
|
|
296
|
-
return createVisibilityStatus("partial", getTooltipOptions("modelsTree.element.someElementsAreHidden", ignoreTooltip));
|
|
297
|
-
}
|
|
298
|
-
if (subModelVisibilityStatus.state === "visible") {
|
|
299
|
-
if (!viewsModel || overridenVisibility?.state === "hidden" || (categoryVisibility.state === "hidden" && !overridenVisibility)) {
|
|
300
|
-
return createVisibilityStatus("partial", getTooltipOptions("modelsTree.element.partialThroughSubModel", ignoreTooltip));
|
|
301
|
-
}
|
|
302
|
-
return createVisibilityStatus("visible", getTooltipOptions(undefined, ignoreTooltip));
|
|
303
|
-
}
|
|
304
|
-
if (!viewsModel) {
|
|
305
|
-
return createVisibilityStatus("hidden", getTooltipOptions("modelsTree.element.hiddenThroughModel", ignoreTooltip));
|
|
306
|
-
}
|
|
307
|
-
if (overridenVisibility) {
|
|
308
|
-
if (overridenVisibility.state === "hidden") {
|
|
309
|
-
return overridenVisibility;
|
|
310
|
-
}
|
|
311
|
-
return createVisibilityStatus("partial", getTooltipOptions("modelsTree.element.partialThroughElement", ignoreTooltip));
|
|
312
|
-
}
|
|
313
|
-
if (categoryVisibility.state === "visible") {
|
|
314
|
-
return createVisibilityStatus("partial", getTooltipOptions("modelsTree.element.partialThroughCategory", ignoreTooltip));
|
|
315
|
-
}
|
|
316
|
-
return createVisibilityStatus("hidden", getTooltipOptions("modelsTree.element.hiddenThroughCategory", ignoreTooltip));
|
|
317
|
-
}
|
|
318
|
-
getElementDisplayStatus({ ignoreTooltip, ...props }) {
|
|
228
|
+
getElementDisplayStatus(props) {
|
|
319
229
|
const result = defer(() => {
|
|
320
230
|
const viewport = this._props.viewport;
|
|
321
231
|
const { elementId, modelId, categoryId } = props;
|
|
322
232
|
const viewsModel = viewport.view.viewsModel(modelId);
|
|
323
|
-
const elementStatus =
|
|
324
|
-
|
|
233
|
+
const elementStatus = getElementOverriddenVisibility({
|
|
234
|
+
elementId,
|
|
235
|
+
viewport,
|
|
236
|
+
});
|
|
237
|
+
return from(this._idsCache.hasSubModel(elementId)).pipe(mergeMap((hasSubModel) => (hasSubModel ? this.getModelVisibilityStatus({ modelId: elementId }) : of(undefined))), map((subModelVisibilityStatus) => getElementVisibility(viewsModel, elementStatus, this.getDefaultCategoryVisibilityStatus({ categoryId, modelId }), subModelVisibilityStatus)));
|
|
325
238
|
});
|
|
326
239
|
return createVisibilityHandlerResult(this, props, result, this._props.overrides?.getElementDisplayStatus);
|
|
327
240
|
}
|
|
@@ -369,7 +282,7 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
369
282
|
return filteredTree ? filteredTree.getVisibilityChangeTargets(node) : {};
|
|
370
283
|
}
|
|
371
284
|
changeFilteredNodeVisibility({ on, ...props }) {
|
|
372
|
-
return from(this.getVisibilityChangeTargets(props)).pipe(mergeMap(({ subjects, models, categories, elements }) => {
|
|
285
|
+
return from(this.getVisibilityChangeTargets(props)).pipe(mergeMap(({ subjectIds: subjects, modelIds: models, categories, elements }) => {
|
|
373
286
|
const observables = new Array();
|
|
374
287
|
if (subjects?.size) {
|
|
375
288
|
observables.push(this.changeSubjectNodeState([...subjects], on));
|
|
@@ -392,14 +305,14 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
392
305
|
return merge(...observables);
|
|
393
306
|
}));
|
|
394
307
|
}
|
|
395
|
-
changeSubjectNodeState(
|
|
308
|
+
changeSubjectNodeState(subjectIds, on) {
|
|
396
309
|
const result = defer(() => {
|
|
397
310
|
if (!this._props.viewport.view.isSpatialView()) {
|
|
398
311
|
return EMPTY;
|
|
399
312
|
}
|
|
400
|
-
return from(this._idsCache.getSubjectModelIds(
|
|
313
|
+
return from(this._idsCache.getSubjectModelIds(subjectIds)).pipe(mergeMap((modelIds) => this.changeModelState({ ids: modelIds, on })));
|
|
401
314
|
});
|
|
402
|
-
return createVisibilityHandlerResult(this, { ids, on }, result, this._props.overrides?.changeSubjectNodeState);
|
|
315
|
+
return createVisibilityHandlerResult(this, { ids: subjectIds, on }, result, this._props.overrides?.changeSubjectNodeState);
|
|
403
316
|
}
|
|
404
317
|
changeModelState(props) {
|
|
405
318
|
const { ids, on } = props;
|
|
@@ -414,13 +327,13 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
414
327
|
const idsObs = from(Id64.iterable(ids));
|
|
415
328
|
if (!on) {
|
|
416
329
|
viewport.changeModelDisplay(ids, false);
|
|
417
|
-
return idsObs.pipe(mergeMap(async (modelId) => ({ modelId, categoryIds: await this._idsCache.
|
|
330
|
+
return idsObs.pipe(mergeMap(async (modelId) => ({ modelId, categoryIds: await this._idsCache.getModelCategoryIds(modelId) })), mergeMap(({ modelId, categoryIds }) => from(this._idsCache.getCategoriesModeledElements(modelId, categoryIds))), mergeMap((modeledElementIds) => this.changeModelState({ ids: modeledElementIds, on })));
|
|
418
331
|
}
|
|
419
332
|
return concat(defer(() => {
|
|
420
333
|
viewport.perModelCategoryVisibility.clearOverrides(ids);
|
|
421
334
|
return from(viewport.addViewedModels(ids));
|
|
422
335
|
}), idsObs.pipe(mergeMap((modelId) => {
|
|
423
|
-
return from(this._idsCache.
|
|
336
|
+
return from(this._idsCache.getModelCategoryIds(modelId)).pipe(concatAll(), mergeMap((categoryId) => this.changeCategoryState({ categoryId, modelId, on: true })));
|
|
424
337
|
})));
|
|
425
338
|
});
|
|
426
339
|
return createVisibilityHandlerResult(this, props, result, this._props.overrides?.changeModelState);
|
|
@@ -428,8 +341,8 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
428
341
|
showModelWithoutAnyCategoriesOrElements(modelId) {
|
|
429
342
|
const viewport = this._props.viewport;
|
|
430
343
|
return forkJoin({
|
|
431
|
-
categories: this._idsCache.
|
|
432
|
-
alwaysDrawnElements: this.getAlwaysDrawnElements({ modelId }),
|
|
344
|
+
categories: this._idsCache.getModelCategoryIds(modelId),
|
|
345
|
+
alwaysDrawnElements: this._alwaysAndNeverDrawnElements.getAlwaysDrawnElements({ modelId }),
|
|
433
346
|
}).pipe(mergeMap(async ({ categories, alwaysDrawnElements }) => {
|
|
434
347
|
const alwaysDrawn = this._props.viewport.alwaysDrawn;
|
|
435
348
|
if (alwaysDrawn && alwaysDrawnElements) {
|
|
@@ -462,7 +375,7 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
462
375
|
const { modelId, categoryId, on } = props;
|
|
463
376
|
return concat(props.on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY, defer(() => {
|
|
464
377
|
this.changeCategoryStateInViewportAccordingToModelVisibility(modelId, categoryId, on);
|
|
465
|
-
return this.clearAlwaysAndNeverDrawnElements(props);
|
|
378
|
+
return this._alwaysAndNeverDrawnElements.clearAlwaysAndNeverDrawnElements({ categoryIds: [props.categoryId], modelId: props.modelId });
|
|
466
379
|
}), from(this._idsCache.getCategoriesModeledElements(modelId, [categoryId])).pipe(mergeMap((modeledElementIds) => this.changeModelState({ ids: modeledElementIds, on }))));
|
|
467
380
|
});
|
|
468
381
|
return createVisibilityHandlerResult(this, props, result, this._props.overrides?.changeCategoryState);
|
|
@@ -472,7 +385,7 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
472
385
|
const { modelId, categoryId, elementIds, on } = props;
|
|
473
386
|
const viewport = this._props.viewport;
|
|
474
387
|
return concat(on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY, defer(() => {
|
|
475
|
-
const categoryVisibility = this.getDefaultCategoryVisibilityStatus({ categoryId, modelId
|
|
388
|
+
const categoryVisibility = this.getDefaultCategoryVisibilityStatus({ categoryId, modelId });
|
|
476
389
|
const isDisplayedByDefault = categoryVisibility.state === "visible";
|
|
477
390
|
return this.queueElementsVisibilityChange(elementIds, on, isDisplayedByDefault);
|
|
478
391
|
}), from(elementIds).pipe(mergeMap(async (elementId) => ({ elementId, isSubModel: await this._idsCache.hasSubModel(elementId) })), filter(({ isSubModel }) => isSubModel), map(({ elementId }) => elementId), toArray(), mergeMap((subModelIds) => this.changeModelState({ ids: subModelIds, on }))));
|
|
@@ -500,7 +413,7 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
500
413
|
const changeFinished = finishedSubject.pipe(startWith(false), shareReplay(1), filter((finished) => finished));
|
|
501
414
|
const changeObservable = from(elementIds).pipe(
|
|
502
415
|
// check if visibility change is not finished (cancelled) due to change overall change request being cancelled
|
|
503
|
-
takeUntil(changeFinished),
|
|
416
|
+
takeUntil(changeFinished), changeElementStateNoChildrenOperator({ on, isDisplayedByDefault: visibleByDefault, viewport: this._props.viewport }), tap({
|
|
504
417
|
next: () => {
|
|
505
418
|
// notify that visibility change is finished
|
|
506
419
|
finishedSubject.next(true);
|
|
@@ -516,118 +429,40 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
516
429
|
},
|
|
517
430
|
}), map(() => undefined));
|
|
518
431
|
}
|
|
519
|
-
|
|
520
|
-
return (elementIds) => {
|
|
521
|
-
const { on, isDisplayedByDefault } = props;
|
|
522
|
-
const isAlwaysDrawnExclusive = this._props.viewport.isAlwaysDrawnExclusive;
|
|
523
|
-
return elementIds.pipe(releaseMainThreadOnItemsCount(500), reduce((acc, elementId) => {
|
|
524
|
-
if (acc.alwaysDrawn === undefined || acc.neverDrawn === undefined) {
|
|
525
|
-
acc.alwaysDrawn = new Set(this._props.viewport.alwaysDrawn || []);
|
|
526
|
-
acc.neverDrawn = new Set(this._props.viewport.neverDrawn || []);
|
|
527
|
-
}
|
|
528
|
-
if (on) {
|
|
529
|
-
const wasRemoved = acc.neverDrawn.delete(elementId);
|
|
530
|
-
acc.changedNeverDrawn ||= wasRemoved;
|
|
531
|
-
// If exclusive mode is enabled, we must add the element to the always drawn list.
|
|
532
|
-
if ((!isDisplayedByDefault || isAlwaysDrawnExclusive) && !acc.alwaysDrawn.has(elementId)) {
|
|
533
|
-
acc.alwaysDrawn.add(elementId);
|
|
534
|
-
acc.changedAlwaysDrawn = true;
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
else {
|
|
538
|
-
const wasRemoved = acc.alwaysDrawn.delete(elementId);
|
|
539
|
-
acc.changedAlwaysDrawn ||= wasRemoved;
|
|
540
|
-
// If exclusive mode is not enabled, we have to add the element to the never drawn list.
|
|
541
|
-
if (isDisplayedByDefault && !isAlwaysDrawnExclusive && !acc.neverDrawn.has(elementId)) {
|
|
542
|
-
acc.neverDrawn.add(elementId);
|
|
543
|
-
acc.changedNeverDrawn = true;
|
|
544
|
-
}
|
|
545
|
-
}
|
|
546
|
-
return acc;
|
|
547
|
-
}, {
|
|
548
|
-
changedNeverDrawn: false,
|
|
549
|
-
changedAlwaysDrawn: false,
|
|
550
|
-
neverDrawn: undefined,
|
|
551
|
-
alwaysDrawn: undefined,
|
|
552
|
-
}), map((state) => {
|
|
553
|
-
state.changedNeverDrawn && state.neverDrawn && this._props.viewport.setNeverDrawn(state.neverDrawn);
|
|
554
|
-
state.changedAlwaysDrawn && state.alwaysDrawn && this._props.viewport.setAlwaysDrawn(state.alwaysDrawn, this._props.viewport.isAlwaysDrawnExclusive);
|
|
555
|
-
}));
|
|
556
|
-
};
|
|
557
|
-
}
|
|
558
|
-
getVisibilityFromAlwaysAndNeverDrawnElementsImpl(props) {
|
|
559
|
-
const { alwaysDrawn, neverDrawn, totalCount, ignoreTooltip } = props;
|
|
560
|
-
if (neverDrawn?.size === totalCount) {
|
|
561
|
-
return createVisibilityStatus("hidden", getTooltipOptions(props.tooltips.allElementsInNeverDrawnList, ignoreTooltip));
|
|
562
|
-
}
|
|
563
|
-
if (alwaysDrawn?.size === totalCount) {
|
|
564
|
-
return createVisibilityStatus("visible", getTooltipOptions(props.tooltips.allElementsInAlwaysDrawnList, ignoreTooltip));
|
|
565
|
-
}
|
|
566
|
-
const viewport = this._props.viewport;
|
|
567
|
-
if (viewport.isAlwaysDrawnExclusive && viewport.alwaysDrawn?.size) {
|
|
568
|
-
return alwaysDrawn?.size
|
|
569
|
-
? createVisibilityStatus("partial", getTooltipOptions(props.tooltips.elementsInBothAlwaysAndNeverDrawn, ignoreTooltip))
|
|
570
|
-
: createVisibilityStatus("hidden", getTooltipOptions(props.tooltips.noElementsInExclusiveAlwaysDrawnList, ignoreTooltip));
|
|
571
|
-
}
|
|
572
|
-
const status = props.defaultStatus();
|
|
573
|
-
if ((status.state === "visible" && neverDrawn?.size) || (status.state === "hidden" && alwaysDrawn?.size)) {
|
|
574
|
-
return createVisibilityStatus("partial", getTooltipOptions(undefined, ignoreTooltip));
|
|
575
|
-
}
|
|
576
|
-
return status;
|
|
577
|
-
}
|
|
578
|
-
getVisibilityFromAlwaysAndNeverDrawnElements({ ignoreTooltip, ...props }) {
|
|
432
|
+
getVisibilityFromAlwaysAndNeverDrawnElements(props) {
|
|
579
433
|
const viewport = this._props.viewport;
|
|
580
434
|
if (viewport.isAlwaysDrawnExclusive) {
|
|
581
435
|
if (!viewport?.alwaysDrawn?.size) {
|
|
582
|
-
return of(createVisibilityStatus("hidden"
|
|
436
|
+
return of(createVisibilityStatus("hidden"));
|
|
583
437
|
}
|
|
584
438
|
}
|
|
585
439
|
else if (!viewport?.neverDrawn?.size && !viewport?.alwaysDrawn?.size) {
|
|
586
440
|
return of(props.defaultStatus());
|
|
587
441
|
}
|
|
588
442
|
if ("elements" in props) {
|
|
589
|
-
return of(
|
|
443
|
+
return of(getVisibilityFromAlwaysAndNeverDrawnElementsImpl({
|
|
590
444
|
...props,
|
|
591
445
|
alwaysDrawn: viewport.alwaysDrawn?.size ? setIntersection(props.elements, viewport.alwaysDrawn) : undefined,
|
|
592
446
|
neverDrawn: viewport.neverDrawn?.size ? setIntersection(props.elements, viewport.neverDrawn) : undefined,
|
|
593
447
|
totalCount: props.elements.size,
|
|
594
|
-
|
|
448
|
+
viewport,
|
|
595
449
|
}));
|
|
596
450
|
}
|
|
597
|
-
const { modelId,
|
|
598
|
-
|
|
451
|
+
const { modelId, categoryIds } = props.queryProps;
|
|
452
|
+
assert(modelId !== undefined);
|
|
453
|
+
const totalCount = this._idsCache.getCategoryElementsCount(modelId, categoryIds[0]);
|
|
599
454
|
return forkJoin({
|
|
600
455
|
totalCount,
|
|
601
|
-
alwaysDrawn: this.getAlwaysDrawnElements(props.queryProps),
|
|
602
|
-
neverDrawn: this.getNeverDrawnElements(props.queryProps),
|
|
456
|
+
alwaysDrawn: this._alwaysAndNeverDrawnElements.getAlwaysDrawnElements(props.queryProps),
|
|
457
|
+
neverDrawn: this._alwaysAndNeverDrawnElements.getNeverDrawnElements(props.queryProps),
|
|
603
458
|
}).pipe(map((state) => {
|
|
604
|
-
return
|
|
459
|
+
return getVisibilityFromAlwaysAndNeverDrawnElementsImpl({
|
|
605
460
|
...props,
|
|
606
461
|
...state,
|
|
607
|
-
|
|
462
|
+
viewport,
|
|
608
463
|
});
|
|
609
464
|
}));
|
|
610
465
|
}
|
|
611
|
-
getAlwaysDrawnElements(props) {
|
|
612
|
-
return this._alwaysAndNeverDrawnElements.getElements({ ...props, setType: "always" });
|
|
613
|
-
}
|
|
614
|
-
getNeverDrawnElements(props) {
|
|
615
|
-
return this._alwaysAndNeverDrawnElements.getElements({ ...props, setType: "never" });
|
|
616
|
-
}
|
|
617
|
-
clearAlwaysAndNeverDrawnElements(props) {
|
|
618
|
-
return forkJoin({
|
|
619
|
-
alwaysDrawn: this.getAlwaysDrawnElements(props),
|
|
620
|
-
neverDrawn: this.getNeverDrawnElements(props),
|
|
621
|
-
}).pipe(map(({ alwaysDrawn, neverDrawn }) => {
|
|
622
|
-
const viewport = this._props.viewport;
|
|
623
|
-
if (viewport.alwaysDrawn?.size && alwaysDrawn.size) {
|
|
624
|
-
viewport.setAlwaysDrawn(setDifference(viewport.alwaysDrawn, alwaysDrawn));
|
|
625
|
-
}
|
|
626
|
-
if (viewport.neverDrawn?.size && neverDrawn.size) {
|
|
627
|
-
viewport.setNeverDrawn(setDifference(viewport.neverDrawn, neverDrawn));
|
|
628
|
-
}
|
|
629
|
-
}));
|
|
630
|
-
}
|
|
631
466
|
getGroupingNodeInfo(node) {
|
|
632
467
|
const modelId = ModelsTreeNode.getModelId(node);
|
|
633
468
|
const categoryId = ModelsTreeNode.getCategoryId(node);
|
|
@@ -635,119 +470,5 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
635
470
|
const elementIds = new Set(node.groupedInstanceKeys.map((key) => key.id));
|
|
636
471
|
return { modelId, categoryId, elementIds };
|
|
637
472
|
}
|
|
638
|
-
getSubModeledElementsVisibilityStatus({ parentNodeVisibilityStatus, haveSubModel, tooltips, ignoreTooltips, }) {
|
|
639
|
-
return (obs) => {
|
|
640
|
-
return obs.pipe(
|
|
641
|
-
// ensure we're only looking at elements that have a sub-model
|
|
642
|
-
mergeMap((modeledElementIds) => {
|
|
643
|
-
if (haveSubModel === "yes") {
|
|
644
|
-
return of(modeledElementIds);
|
|
645
|
-
}
|
|
646
|
-
return from(modeledElementIds).pipe(mergeMap(async (elementId) => ({ elementId, hasSubModel: await this._idsCache.hasSubModel(elementId) })), filter(({ hasSubModel }) => hasSubModel), map(({ elementId }) => elementId), toArray());
|
|
647
|
-
}),
|
|
648
|
-
// combine visibility status of sub-models with visibility status of parent node
|
|
649
|
-
mergeMap((modeledElementIds) => {
|
|
650
|
-
if (modeledElementIds.length === 0) {
|
|
651
|
-
return of(parentNodeVisibilityStatus);
|
|
652
|
-
}
|
|
653
|
-
return from(modeledElementIds).pipe(mergeMap((modeledElementId) => this.getModelVisibilityStatus({ modelId: modeledElementId })), startWith(parentNodeVisibilityStatus), map((visibilityStatus) => visibilityStatus.state), getVisibilityStatusFromTreeNodeChildren(tooltips, ignoreTooltips));
|
|
654
|
-
}));
|
|
655
|
-
};
|
|
656
|
-
}
|
|
657
|
-
}
|
|
658
|
-
function getVisibilityFromTreeNodeChildren(obs) {
|
|
659
|
-
return obs.pipe(reduceWhile((x) => x.allVisible || x.allHidden, (acc, val) => {
|
|
660
|
-
acc.allVisible &&= val === "visible";
|
|
661
|
-
acc.allHidden &&= val === "hidden";
|
|
662
|
-
return acc;
|
|
663
|
-
}, { allVisible: true, allHidden: true }), map((x) => {
|
|
664
|
-
if (!x) {
|
|
665
|
-
return "empty";
|
|
666
|
-
}
|
|
667
|
-
return x.allVisible ? "visible" : x.allHidden ? "hidden" : "partial";
|
|
668
|
-
}));
|
|
669
|
-
}
|
|
670
|
-
function getVisibilityStatusFromTreeNodeChildren(tooltipMap, ignoreTooltip) {
|
|
671
|
-
return (obs) => {
|
|
672
|
-
return getVisibilityFromTreeNodeChildren(obs).pipe(map((visibility) => {
|
|
673
|
-
if (visibility === "empty") {
|
|
674
|
-
visibility = "visible";
|
|
675
|
-
}
|
|
676
|
-
return createVisibilityStatus(visibility, getTooltipOptions(tooltipMap[visibility], ignoreTooltip));
|
|
677
|
-
}));
|
|
678
|
-
};
|
|
679
|
-
}
|
|
680
|
-
function setDifference(lhs, rhs) {
|
|
681
|
-
const result = new Set();
|
|
682
|
-
lhs.forEach((x) => !rhs.has(x) && result.add(x));
|
|
683
|
-
return result;
|
|
684
|
-
}
|
|
685
|
-
function setIntersection(lhs, rhs) {
|
|
686
|
-
const result = new Set();
|
|
687
|
-
lhs.forEach((x) => rhs.has(x) && result.add(x));
|
|
688
|
-
return result;
|
|
689
|
-
}
|
|
690
|
-
/**
|
|
691
|
-
* Enables display of all given models. Also enables display of all categories and clears always and
|
|
692
|
-
* never drawn lists in the viewport.
|
|
693
|
-
* @public
|
|
694
|
-
*/
|
|
695
|
-
export async function showAllModels(models, viewport) {
|
|
696
|
-
await viewport.addViewedModels(models);
|
|
697
|
-
viewport.clearNeverDrawn();
|
|
698
|
-
viewport.clearAlwaysDrawn();
|
|
699
|
-
await toggleAllCategories(viewport, true);
|
|
700
|
-
}
|
|
701
|
-
/**
|
|
702
|
-
* Disables display of all given models.
|
|
703
|
-
* @public
|
|
704
|
-
*/
|
|
705
|
-
export async function hideAllModels(models, viewport) {
|
|
706
|
-
viewport.changeModelDisplay(models, false);
|
|
707
|
-
}
|
|
708
|
-
/**
|
|
709
|
-
* Inverts display of all given models.
|
|
710
|
-
* @public
|
|
711
|
-
*/
|
|
712
|
-
export async function invertAllModels(models, viewport) {
|
|
713
|
-
const notViewedModels = [];
|
|
714
|
-
const viewedModels = [];
|
|
715
|
-
models.forEach((modelId) => {
|
|
716
|
-
if (viewport.viewsModel(modelId)) {
|
|
717
|
-
viewedModels.push(modelId);
|
|
718
|
-
}
|
|
719
|
-
else {
|
|
720
|
-
notViewedModels.push(modelId);
|
|
721
|
-
}
|
|
722
|
-
});
|
|
723
|
-
await viewport.addViewedModels(notViewedModels);
|
|
724
|
-
viewport.changeModelDisplay(viewedModels, false);
|
|
725
|
-
}
|
|
726
|
-
/**
|
|
727
|
-
* Based on the value of `enable` argument, either enables or disables display of given models.
|
|
728
|
-
* @public
|
|
729
|
-
*/
|
|
730
|
-
export async function toggleModels(models, enable, viewport) {
|
|
731
|
-
if (!models) {
|
|
732
|
-
return;
|
|
733
|
-
}
|
|
734
|
-
if (enable) {
|
|
735
|
-
viewport.changeModelDisplay(models, false);
|
|
736
|
-
}
|
|
737
|
-
else {
|
|
738
|
-
await viewport.addViewedModels(models);
|
|
739
|
-
}
|
|
740
|
-
}
|
|
741
|
-
/**
|
|
742
|
-
* Checks if all given models are displayed in given viewport.
|
|
743
|
-
* @public
|
|
744
|
-
*/
|
|
745
|
-
export function areAllModelsVisible(models, viewport) {
|
|
746
|
-
return models.length !== 0 ? models.every((id) => viewport.viewsModel(id)) : false;
|
|
747
|
-
}
|
|
748
|
-
function getTooltipOptions(key, ignoreTooltip) {
|
|
749
|
-
return {
|
|
750
|
-
useTooltip: ignoreTooltip ? false : key,
|
|
751
|
-
};
|
|
752
473
|
}
|
|
753
474
|
//# sourceMappingURL=ModelsTreeVisibilityHandler.js.map
|