@itwin/tree-widget-react 4.0.0-alpha.5 → 4.0.0-alpha.7
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.js +1 -1
- package/lib/esm/tree-widget-react/TreeWidget.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 -0
- package/lib/esm/tree-widget-react/components/tree-header/SearchBox.js +3 -2
- 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 -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 +3 -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 +30 -3
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js +588 -170
- 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 +15 -4
- package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js +149 -56
- 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 +192 -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 +785 -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/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 -0
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js +4 -2
- 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 +2 -1
- 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 +33 -23
- package/lib/esm/tree-widget-react/components/trees/common/Utils.js +60 -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.js +3 -3
- 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/EmptyTree.css +1 -0
- 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 +4 -3
- package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/{categories-tree/internal/ClassNameDefinitions.js → common/components/SkeletonTree.css} +12 -7
- package/lib/esm/tree-widget-react/components/trees/common/components/SkeletonTree.d.ts +4 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/SkeletonTree.js +16 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/SkeletonTree.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.css +11 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js +8 -7
- 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.js +3 -3
- 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/UseVisibilityButtonHandler.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.js +1 -0
- 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.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} +5 -1
- package/lib/esm/tree-widget-react/components/trees/common/{Tooltip.js → internal/Tooltip.js} +7 -1
- 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/trees/common/internal/Types.js +6 -0
- 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 +82 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js +234 -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 +7 -2
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js +24 -18
- 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 +9 -2
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js +44 -34
- 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.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/index.d.ts +4 -2
- package/lib/esm/tree-widget-react/components/trees/index.js +4 -2
- 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 +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.d.ts +5 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js +73 -49
- 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 +75 -291
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -1
- package/lib/public/locales/en/TreeWidget.json +55 -6
- package/package.json +17 -18
- 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.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, getTooltipOptions } 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,7 +119,7 @@ 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
125
|
observables.push(this.getSubjectNodeVisibilityStatus({ subjectIds: [...subjects], ignoreTooltip: true }));
|
|
@@ -132,17 +140,18 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
132
140
|
})));
|
|
133
141
|
}
|
|
134
142
|
return merge(...observables);
|
|
135
|
-
}),
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
143
|
+
}), mergeVisibilityStatuses({
|
|
144
|
+
visible: undefined,
|
|
145
|
+
hidden: undefined,
|
|
146
|
+
partial: undefined,
|
|
147
|
+
}, true));
|
|
139
148
|
}
|
|
140
149
|
getSubjectNodeVisibilityStatus({ subjectIds, ignoreTooltip }) {
|
|
141
150
|
const result = defer(() => {
|
|
142
151
|
if (!this._props.viewport.view.isSpatialView()) {
|
|
143
152
|
return of(createVisibilityStatus("disabled", getTooltipOptions("modelsTree.subject.nonSpatialView", ignoreTooltip)));
|
|
144
153
|
}
|
|
145
|
-
return from(this._idsCache.getSubjectModelIds(subjectIds)).pipe(concatAll(), distinct(), mergeMap((modelId) => this.getModelVisibilityStatus({ modelId, ignoreTooltip: true })),
|
|
154
|
+
return from(this._idsCache.getSubjectModelIds(subjectIds)).pipe(concatAll(), distinct(), mergeMap((modelId) => this.getModelVisibilityStatus({ modelId, ignoreTooltip: true })), mergeVisibilityStatuses({
|
|
146
155
|
visible: "modelsTree.subject.allModelsVisible",
|
|
147
156
|
hidden: "modelsTree.subject.allModelsHidden",
|
|
148
157
|
partial: "modelsTree.subject.someModelsHidden",
|
|
@@ -157,16 +166,17 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
157
166
|
return of(createVisibilityStatus("disabled", getTooltipOptions("modelsTree.model.nonSpatialView", ignoreTooltip)));
|
|
158
167
|
}
|
|
159
168
|
if (!viewport.view.viewsModel(modelId)) {
|
|
160
|
-
return from(this._idsCache.
|
|
169
|
+
return from(this._idsCache.getModelCategoryIds(modelId)).pipe(mergeMap((categoryIds) => from(this._idsCache.getCategoriesModeledElements(modelId, categoryIds))), getSubModeledElementsVisibilityStatus({
|
|
161
170
|
ignoreTooltips: ignoreTooltip,
|
|
162
|
-
haveSubModel: "yes",
|
|
163
171
|
tooltips: { visible: undefined, hidden: "modelsTree.model.hiddenThroughModelSelector", partial: "modelsTree.model.someSubModelsVisible" },
|
|
164
172
|
parentNodeVisibilityStatus: createVisibilityStatus("hidden"),
|
|
173
|
+
getModelVisibilityStatus: (modelProps) => this.getModelVisibilityStatus(modelProps),
|
|
165
174
|
}));
|
|
166
175
|
}
|
|
167
|
-
return from(this._idsCache.
|
|
168
|
-
|
|
169
|
-
|
|
176
|
+
return from(this._idsCache.getModelCategoryIds(modelId)).pipe(concatAll(), mergeMap((categoryId) => this.getCategoryDisplayStatus({ modelId, categoryId, ignoreTooltip: true })), mergeVisibilityStatuses({
|
|
177
|
+
visible: "modelsTree.model.allCategoriesVisible",
|
|
178
|
+
hidden: "modelsTree.model.allCategoriesHidden",
|
|
179
|
+
partial: "modelsTree.model.someCategoriesHidden",
|
|
170
180
|
}));
|
|
171
181
|
});
|
|
172
182
|
return createVisibilityHandlerResult(this, { id: modelId }, result, this._props.overrides?.getModelDisplayStatus);
|
|
@@ -190,7 +200,7 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
190
200
|
getCategoryDisplayStatus({ ignoreTooltip, ...props }) {
|
|
191
201
|
const result = defer(() => {
|
|
192
202
|
if (!this._props.viewport.view.viewsModel(props.modelId)) {
|
|
193
|
-
return from(this._idsCache.getCategoriesModeledElements(props.modelId, [props.categoryId])).pipe(
|
|
203
|
+
return from(this._idsCache.getCategoriesModeledElements(props.modelId, [props.categoryId])).pipe(getSubModeledElementsVisibilityStatus({
|
|
194
204
|
ignoreTooltips: ignoreTooltip,
|
|
195
205
|
parentNodeVisibilityStatus: createVisibilityStatus("hidden"),
|
|
196
206
|
tooltips: {
|
|
@@ -198,11 +208,14 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
198
208
|
hidden: "modelsTree.category.hiddenThroughModel",
|
|
199
209
|
partial: "modelsTree.category.someElementsOrSubModelsHidden",
|
|
200
210
|
},
|
|
201
|
-
|
|
211
|
+
getModelVisibilityStatus: (modelProps) => this.getModelVisibilityStatus(modelProps),
|
|
202
212
|
}));
|
|
203
213
|
}
|
|
204
214
|
return this.getVisibilityFromAlwaysAndNeverDrawnElements({
|
|
205
|
-
queryProps:
|
|
215
|
+
queryProps: {
|
|
216
|
+
categoryIds: [props.categoryId],
|
|
217
|
+
modelId: props.modelId,
|
|
218
|
+
},
|
|
206
219
|
tooltips: {
|
|
207
220
|
allElementsInAlwaysDrawnList: "modelsTree.category.allElementsVisible",
|
|
208
221
|
allElementsInNeverDrawnList: "modelsTree.category.allElementsHidden",
|
|
@@ -212,15 +225,15 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
212
225
|
defaultStatus: () => this.getDefaultCategoryVisibilityStatus(props),
|
|
213
226
|
ignoreTooltip,
|
|
214
227
|
}).pipe(mergeMap((visibilityStatusAlwaysAndNeverDraw) => {
|
|
215
|
-
return from(this._idsCache.getCategoriesModeledElements(props.modelId, [props.categoryId])).pipe(
|
|
228
|
+
return from(this._idsCache.getCategoriesModeledElements(props.modelId, [props.categoryId])).pipe(getSubModeledElementsVisibilityStatus({
|
|
216
229
|
tooltips: {
|
|
217
230
|
visible: undefined,
|
|
218
231
|
hidden: "modelsTree.category.allElementsAndSubModelsHidden",
|
|
219
232
|
partial: "modelsTree.category.someElementsOrSubModelsHidden",
|
|
220
233
|
},
|
|
221
|
-
haveSubModel: "yes",
|
|
222
234
|
parentNodeVisibilityStatus: visibilityStatusAlwaysAndNeverDraw,
|
|
223
235
|
ignoreTooltips: ignoreTooltip,
|
|
236
|
+
getModelVisibilityStatus: (modelProps) => this.getModelVisibilityStatus(modelProps),
|
|
224
237
|
}));
|
|
225
238
|
}));
|
|
226
239
|
});
|
|
@@ -231,14 +244,14 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
231
244
|
const info = this.getGroupingNodeInfo(node);
|
|
232
245
|
const { modelId, categoryId, elementIds } = info;
|
|
233
246
|
if (!this._props.viewport.view.viewsModel(modelId)) {
|
|
234
|
-
return of([...elementIds]).pipe(this.getSubModeledElementsVisibilityStatus({
|
|
247
|
+
return of([...elementIds]).pipe(filterSubModeledElementIds({ doesSubModelExist: async (id) => this._idsCache.hasSubModel(id) }), getSubModeledElementsVisibilityStatus({
|
|
235
248
|
tooltips: {
|
|
236
249
|
visible: undefined,
|
|
237
250
|
hidden: undefined,
|
|
238
251
|
partial: "modelsTree.groupingNode.someElementsOrSubModelsHidden",
|
|
239
252
|
},
|
|
240
253
|
parentNodeVisibilityStatus: createVisibilityStatus("hidden"),
|
|
241
|
-
|
|
254
|
+
getModelVisibilityStatus: (modelProps) => this.getModelVisibilityStatus(modelProps),
|
|
242
255
|
}));
|
|
243
256
|
}
|
|
244
257
|
return this.getVisibilityFromAlwaysAndNeverDrawnElements({
|
|
@@ -254,74 +267,35 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
254
267
|
noElementsInExclusiveAlwaysDrawnList: "modelsTree.groupingNode.allElementsHidden",
|
|
255
268
|
},
|
|
256
269
|
}).pipe(mergeMap((visibilityStatusAlwaysAndNeverDraw) => {
|
|
257
|
-
return of([...elementIds]).pipe(this.getSubModeledElementsVisibilityStatus({
|
|
270
|
+
return of([...elementIds]).pipe(filterSubModeledElementIds({ doesSubModelExist: async (id) => this._idsCache.hasSubModel(id) }), getSubModeledElementsVisibilityStatus({
|
|
258
271
|
tooltips: {
|
|
259
272
|
visible: undefined,
|
|
260
273
|
hidden: "modelsTree.groupingNode.allElementsAndSubModelsHidden",
|
|
261
274
|
partial: "modelsTree.groupingNode.someElementsOrSubModelsHidden",
|
|
262
275
|
},
|
|
263
276
|
parentNodeVisibilityStatus: visibilityStatusAlwaysAndNeverDraw,
|
|
264
|
-
|
|
277
|
+
getModelVisibilityStatus: (modelProps) => this.getModelVisibilityStatus(modelProps),
|
|
265
278
|
}));
|
|
266
279
|
}));
|
|
267
280
|
});
|
|
268
281
|
return createVisibilityHandlerResult(this, { node }, result, this._props.overrides?.getElementGroupingNodeDisplayStatus);
|
|
269
282
|
}
|
|
270
|
-
getElementOverriddenVisibility(elementId, ignoreTooltip) {
|
|
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
283
|
getElementDisplayStatus({ ignoreTooltip, ...props }) {
|
|
319
284
|
const result = defer(() => {
|
|
320
285
|
const viewport = this._props.viewport;
|
|
321
286
|
const { elementId, modelId, categoryId } = props;
|
|
322
287
|
const viewsModel = viewport.view.viewsModel(modelId);
|
|
323
|
-
const elementStatus =
|
|
324
|
-
|
|
288
|
+
const elementStatus = getElementOverriddenVisibility({
|
|
289
|
+
elementId,
|
|
290
|
+
ignoreTooltip,
|
|
291
|
+
viewport,
|
|
292
|
+
tooltips: {
|
|
293
|
+
visibileThorughAlwaysDrawn: "modelsTree.element.displayedThroughAlwaysDrawnList",
|
|
294
|
+
hiddenThroughAlwaysDrawnExclusive: "modelsTree.element.hiddenDueToOtherElementsExclusivelyAlwaysDrawn",
|
|
295
|
+
hiddenThroughNeverDrawn: "modelsTree.element.hiddenThroughNeverDrawnList",
|
|
296
|
+
},
|
|
297
|
+
});
|
|
298
|
+
return from(this._idsCache.hasSubModel(elementId)).pipe(mergeMap((hasSubModel) => (hasSubModel ? this.getModelVisibilityStatus({ modelId: elementId }) : of(undefined))), map((subModelVisibilityStatus) => getElementVisibility(ignoreTooltip, viewsModel, elementStatus, this.getDefaultCategoryVisibilityStatus({ categoryId, modelId, ignoreTooltip: true }), "modelsTree", subModelVisibilityStatus)));
|
|
325
299
|
});
|
|
326
300
|
return createVisibilityHandlerResult(this, props, result, this._props.overrides?.getElementDisplayStatus);
|
|
327
301
|
}
|
|
@@ -369,7 +343,7 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
369
343
|
return filteredTree ? filteredTree.getVisibilityChangeTargets(node) : {};
|
|
370
344
|
}
|
|
371
345
|
changeFilteredNodeVisibility({ on, ...props }) {
|
|
372
|
-
return from(this.getVisibilityChangeTargets(props)).pipe(mergeMap(({ subjects, models, categories, elements }) => {
|
|
346
|
+
return from(this.getVisibilityChangeTargets(props)).pipe(mergeMap(({ subjectIds: subjects, modelIds: models, categories, elements }) => {
|
|
373
347
|
const observables = new Array();
|
|
374
348
|
if (subjects?.size) {
|
|
375
349
|
observables.push(this.changeSubjectNodeState([...subjects], on));
|
|
@@ -392,14 +366,14 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
392
366
|
return merge(...observables);
|
|
393
367
|
}));
|
|
394
368
|
}
|
|
395
|
-
changeSubjectNodeState(
|
|
369
|
+
changeSubjectNodeState(subjectIds, on) {
|
|
396
370
|
const result = defer(() => {
|
|
397
371
|
if (!this._props.viewport.view.isSpatialView()) {
|
|
398
372
|
return EMPTY;
|
|
399
373
|
}
|
|
400
|
-
return from(this._idsCache.getSubjectModelIds(
|
|
374
|
+
return from(this._idsCache.getSubjectModelIds(subjectIds)).pipe(mergeMap((modelIds) => this.changeModelState({ ids: modelIds, on })));
|
|
401
375
|
});
|
|
402
|
-
return createVisibilityHandlerResult(this, { ids, on }, result, this._props.overrides?.changeSubjectNodeState);
|
|
376
|
+
return createVisibilityHandlerResult(this, { ids: subjectIds, on }, result, this._props.overrides?.changeSubjectNodeState);
|
|
403
377
|
}
|
|
404
378
|
changeModelState(props) {
|
|
405
379
|
const { ids, on } = props;
|
|
@@ -414,13 +388,13 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
414
388
|
const idsObs = from(Id64.iterable(ids));
|
|
415
389
|
if (!on) {
|
|
416
390
|
viewport.changeModelDisplay(ids, false);
|
|
417
|
-
return idsObs.pipe(mergeMap(async (modelId) => ({ modelId, categoryIds: await this._idsCache.
|
|
391
|
+
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
392
|
}
|
|
419
393
|
return concat(defer(() => {
|
|
420
394
|
viewport.perModelCategoryVisibility.clearOverrides(ids);
|
|
421
395
|
return from(viewport.addViewedModels(ids));
|
|
422
396
|
}), idsObs.pipe(mergeMap((modelId) => {
|
|
423
|
-
return from(this._idsCache.
|
|
397
|
+
return from(this._idsCache.getModelCategoryIds(modelId)).pipe(concatAll(), mergeMap((categoryId) => this.changeCategoryState({ categoryId, modelId, on: true })));
|
|
424
398
|
})));
|
|
425
399
|
});
|
|
426
400
|
return createVisibilityHandlerResult(this, props, result, this._props.overrides?.changeModelState);
|
|
@@ -428,8 +402,8 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
428
402
|
showModelWithoutAnyCategoriesOrElements(modelId) {
|
|
429
403
|
const viewport = this._props.viewport;
|
|
430
404
|
return forkJoin({
|
|
431
|
-
categories: this._idsCache.
|
|
432
|
-
alwaysDrawnElements: this.getAlwaysDrawnElements({ modelId }),
|
|
405
|
+
categories: this._idsCache.getModelCategoryIds(modelId),
|
|
406
|
+
alwaysDrawnElements: this._alwaysAndNeverDrawnElements.getAlwaysDrawnElements({ modelId }),
|
|
433
407
|
}).pipe(mergeMap(async ({ categories, alwaysDrawnElements }) => {
|
|
434
408
|
const alwaysDrawn = this._props.viewport.alwaysDrawn;
|
|
435
409
|
if (alwaysDrawn && alwaysDrawnElements) {
|
|
@@ -462,7 +436,7 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
462
436
|
const { modelId, categoryId, on } = props;
|
|
463
437
|
return concat(props.on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY, defer(() => {
|
|
464
438
|
this.changeCategoryStateInViewportAccordingToModelVisibility(modelId, categoryId, on);
|
|
465
|
-
return this.clearAlwaysAndNeverDrawnElements(props);
|
|
439
|
+
return this._alwaysAndNeverDrawnElements.clearAlwaysAndNeverDrawnElements({ categoryIds: [props.categoryId], modelId: props.modelId });
|
|
466
440
|
}), from(this._idsCache.getCategoriesModeledElements(modelId, [categoryId])).pipe(mergeMap((modeledElementIds) => this.changeModelState({ ids: modeledElementIds, on }))));
|
|
467
441
|
});
|
|
468
442
|
return createVisibilityHandlerResult(this, props, result, this._props.overrides?.changeCategoryState);
|
|
@@ -500,7 +474,7 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
500
474
|
const changeFinished = finishedSubject.pipe(startWith(false), shareReplay(1), filter((finished) => finished));
|
|
501
475
|
const changeObservable = from(elementIds).pipe(
|
|
502
476
|
// check if visibility change is not finished (cancelled) due to change overall change request being cancelled
|
|
503
|
-
takeUntil(changeFinished),
|
|
477
|
+
takeUntil(changeFinished), changeElementStateNoChildrenOperator({ on, isDisplayedByDefault: visibleByDefault, viewport: this._props.viewport }), tap({
|
|
504
478
|
next: () => {
|
|
505
479
|
// notify that visibility change is finished
|
|
506
480
|
finishedSubject.next(true);
|
|
@@ -516,65 +490,6 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
516
490
|
},
|
|
517
491
|
}), map(() => undefined));
|
|
518
492
|
}
|
|
519
|
-
changeElementStateNoChildrenOperator(props) {
|
|
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
493
|
getVisibilityFromAlwaysAndNeverDrawnElements({ ignoreTooltip, ...props }) {
|
|
579
494
|
const viewport = this._props.viewport;
|
|
580
495
|
if (viewport.isAlwaysDrawnExclusive) {
|
|
@@ -586,48 +501,31 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
586
501
|
return of(props.defaultStatus());
|
|
587
502
|
}
|
|
588
503
|
if ("elements" in props) {
|
|
589
|
-
return of(
|
|
504
|
+
return of(getVisibilityFromAlwaysAndNeverDrawnElementsImpl({
|
|
590
505
|
...props,
|
|
591
506
|
alwaysDrawn: viewport.alwaysDrawn?.size ? setIntersection(props.elements, viewport.alwaysDrawn) : undefined,
|
|
592
507
|
neverDrawn: viewport.neverDrawn?.size ? setIntersection(props.elements, viewport.neverDrawn) : undefined,
|
|
593
508
|
totalCount: props.elements.size,
|
|
594
509
|
ignoreTooltip,
|
|
510
|
+
viewport,
|
|
595
511
|
}));
|
|
596
512
|
}
|
|
597
|
-
const { modelId,
|
|
598
|
-
|
|
513
|
+
const { modelId, categoryIds } = props.queryProps;
|
|
514
|
+
assert(modelId !== undefined);
|
|
515
|
+
const totalCount = this._idsCache.getCategoryElementsCount(modelId, categoryIds[0]);
|
|
599
516
|
return forkJoin({
|
|
600
517
|
totalCount,
|
|
601
|
-
alwaysDrawn: this.getAlwaysDrawnElements(props.queryProps),
|
|
602
|
-
neverDrawn: this.getNeverDrawnElements(props.queryProps),
|
|
518
|
+
alwaysDrawn: this._alwaysAndNeverDrawnElements.getAlwaysDrawnElements(props.queryProps),
|
|
519
|
+
neverDrawn: this._alwaysAndNeverDrawnElements.getNeverDrawnElements(props.queryProps),
|
|
603
520
|
}).pipe(map((state) => {
|
|
604
|
-
return
|
|
521
|
+
return getVisibilityFromAlwaysAndNeverDrawnElementsImpl({
|
|
605
522
|
...props,
|
|
606
523
|
...state,
|
|
524
|
+
viewport,
|
|
607
525
|
ignoreTooltip,
|
|
608
526
|
});
|
|
609
527
|
}));
|
|
610
528
|
}
|
|
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
529
|
getGroupingNodeInfo(node) {
|
|
632
530
|
const modelId = ModelsTreeNode.getModelId(node);
|
|
633
531
|
const categoryId = ModelsTreeNode.getCategoryId(node);
|
|
@@ -635,119 +533,5 @@ class ModelsTreeVisibilityHandlerImpl {
|
|
|
635
533
|
const elementIds = new Set(node.groupedInstanceKeys.map((key) => key.id));
|
|
636
534
|
return { modelId, categoryId, elementIds };
|
|
637
535
|
}
|
|
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
536
|
}
|
|
753
537
|
//# sourceMappingURL=ModelsTreeVisibilityHandler.js.map
|