@itwin/tree-widget-react 3.15.1 → 3.16.1
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 -2
- package/lib/cjs/tree-widget-react/TreeWidget.d.ts +1 -2
- package/lib/cjs/tree-widget-react/TreeWidget.js +12 -12
- package/lib/cjs/tree-widget-react/TreeWidget.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.d.ts +2 -3
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js +5 -4
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.d.ts +4 -7
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js +39 -31
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js +6 -2
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.d.ts +3 -11
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +45 -36
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.d.ts +1 -3
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js +30 -30
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.d.ts +2 -7
- package/lib/cjs/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.js +8 -21
- package/lib/cjs/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.d.ts +3 -0
- package/lib/cjs/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.js +7 -7
- package/lib/cjs/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/useGuid.d.ts +2 -0
- package/lib/cjs/tree-widget-react/components/trees/common/useGuid.js +14 -0
- package/lib/cjs/tree-widget-react/components/trees/common/useGuid.js.map +1 -0
- package/lib/cjs/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js +4 -1
- package/lib/cjs/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.d.ts +4 -6
- package/lib/cjs/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js +31 -26
- package/lib/cjs/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js +4 -2
- package/lib/cjs/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.d.ts +1 -5
- package/lib/cjs/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.js +44 -44
- package/lib/cjs/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.d.ts +3 -6
- package/lib/cjs/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js +20 -16
- package/lib/cjs/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js +3 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.d.ts +6 -10
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +107 -64
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/UseModelsTree.js +18 -8
- package/lib/cjs/tree-widget-react/components/trees/models-tree/UseModelsTree.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/Utils.d.ts +24 -0
- package/lib/cjs/tree-widget-react/components/trees/models-tree/Utils.js +46 -0
- package/lib/cjs/tree-widget-react/components/trees/models-tree/Utils.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.d.ts +40 -9
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js +68 -39
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/FilteredTree.d.ts +13 -5
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/FilteredTree.js +20 -14
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/FilteredTree.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +4 -13
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +66 -60
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.d.ts +6 -2
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +155 -177
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/TreeWidget.d.ts +1 -2
- package/lib/esm/tree-widget-react/TreeWidget.js +12 -12
- package/lib/esm/tree-widget-react/TreeWidget.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.d.ts +2 -3
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js +5 -3
- 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/CategoriesTreeDefinition.d.ts +4 -7
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js +39 -31
- 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.js +6 -2
- 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 +3 -11
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +45 -36
- 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/CategoriesVisibilityHandler.d.ts +1 -3
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js +30 -30
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.d.ts +2 -7
- package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.js +8 -20
- package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.d.ts +3 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.js +7 -7
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/useGuid.d.ts +2 -0
- package/lib/esm/tree-widget-react/components/trees/common/useGuid.js +11 -0
- package/lib/esm/tree-widget-react/components/trees/common/useGuid.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js +4 -1
- 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/ExternalSourcesTreeDefinition.d.ts +4 -6
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js +31 -26
- 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 +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js +4 -2
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.d.ts +1 -5
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.js +44 -44
- 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 +3 -6
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js +21 -17
- 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/ModelsTreeButtons.js +3 -1
- 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/ModelsTreeDefinition.d.ts +6 -10
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +107 -64
- 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 +18 -8
- 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/Utils.d.ts +24 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.js +44 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.d.ts +40 -9
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js +70 -41
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/FilteredTree.d.ts +13 -5
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/FilteredTree.js +22 -16
- 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 -13
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +67 -61
- 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 +6 -2
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +157 -179
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelsTreeVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport {\n concat,\n concatAll,\n defaultIfEmpty,\n defer,\n distinct,\n EMPTY,\n filter,\n firstValueFrom,\n forkJoin,\n from,\n fromEventPattern,\n map,\n merge,\n mergeMap,\n of,\n reduce,\n shareReplay,\n startWith,\n Subject,\n take,\n takeUntil,\n tap,\n toArray,\n} from \"rxjs\";\nimport { assert, Id64 } from \"@itwin/core-bentley\";\nimport { PerModelCategoryVisibility } from \"@itwin/core-frontend\";\nimport { HierarchyNode, HierarchyNodeKey } from \"@itwin/presentation-hierarchies\";\nimport { toggleAllCategories } from \"../../common/CategoriesVisibilityUtils.js\";\nimport { reduceWhile, toVoidPromise } from \"../../common/Rxjs.js\";\nimport { createVisibilityStatus } from \"../../common/Tooltip.js\";\nimport { createVisibilityHandlerResult } from \"../../common/UseHierarchyVisibility.js\";\nimport { releaseMainThreadOnItemsCount } from \"../Utils.js\";\nimport { AlwaysAndNeverDrawnElementInfo } from \"./AlwaysAndNeverDrawnElementInfo.js\";\nimport { createFilteredTree, parseCategoryKey } from \"./FilteredTree.js\";\nimport { ModelsTreeNode } from \"./ModelsTreeNode.js\";\nimport { createVisibilityChangeEventListener } from \"./VisibilityChangeEventListener.js\";\n\nimport type { Observable, OperatorFunction, Subscription } from \"rxjs\";\nimport type { Id64Arg, Id64Array, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport type { Viewport } from \"@itwin/core-frontend\";\nimport type { GroupingHierarchyNode, HierarchyFilteringPath } from \"@itwin/presentation-hierarchies\";\nimport type { ECClassHierarchyInspector } from \"@itwin/presentation-shared\";\nimport type { NonPartialVisibilityStatus, Visibility } from \"../../common/Tooltip.js\";\nimport type { HierarchyVisibilityHandler, HierarchyVisibilityHandlerOverridableMethod, VisibilityStatus } from \"../../common/UseHierarchyVisibility.js\";\nimport type { FilteredTree } from \"./FilteredTree.js\";\nimport type { ModelsTreeIdsCache } from \"./ModelsTreeIdsCache.js\";\nimport type { IVisibilityChangeEventListener } from \"./VisibilityChangeEventListener.js\";\n\n/** @beta */\ninterface GetCategoryVisibilityStatusProps {\n categoryIds: Id64Arg;\n modelId: Id64String;\n}\n\n/** @beta */\ninterface ChangeCategoryVisibilityStateProps extends GetCategoryVisibilityStatusProps {\n on: boolean;\n}\n\n/** @beta */\ninterface GetGeometricElementVisibilityStatusProps {\n elementId: Id64String;\n modelId: Id64String;\n categoryId: Id64String;\n}\n\n/** @beta */\ninterface ChangeGeometricElementsDisplayStateProps {\n elementIds: Id64Set;\n modelId: Id64String;\n categoryId: Id64String;\n on: boolean;\n}\n\n/** @beta */\ninterface ChangeModelVisibilityStateProps {\n ids: Id64Arg;\n on: boolean;\n}\n\n/** @beta */\ninterface GetFilteredNodeVisibilityProps {\n node: HierarchyNode;\n}\n\n/** @beta */\ninterface ChangeFilteredNodeVisibilityProps extends GetFilteredNodeVisibilityProps {\n on: boolean;\n}\n\n/**\n * Functionality of Models tree visibility handler that can be overridden.\n * Each callback is provided original implementation and reference to a `HierarchyVisibilityHandler`.\n * @beta\n */\nexport interface ModelsTreeVisibilityHandlerOverrides {\n getSubjectNodeVisibility?: HierarchyVisibilityHandlerOverridableMethod<(props: { ids: Id64Array }) => Promise<VisibilityStatus>>;\n getModelDisplayStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { ids: Id64Arg }) => Promise<VisibilityStatus>>;\n getCategoryDisplayStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: GetCategoryVisibilityStatusProps) => Promise<VisibilityStatus>>;\n getElementGroupingNodeDisplayStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { node: GroupingHierarchyNode }) => Promise<VisibilityStatus>>;\n getElementDisplayStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: GetGeometricElementVisibilityStatusProps) => Promise<VisibilityStatus>>;\n\n changeSubjectNodeState?: HierarchyVisibilityHandlerOverridableMethod<(props: { ids: Id64Array; on: boolean }) => Promise<void>>;\n changeModelState?: HierarchyVisibilityHandlerOverridableMethod<(props: ChangeModelVisibilityStateProps) => Promise<void>>;\n changeCategoryState?: HierarchyVisibilityHandlerOverridableMethod<(props: ChangeCategoryVisibilityStateProps) => Promise<void>>;\n changeElementGroupingNodeState?: HierarchyVisibilityHandlerOverridableMethod<(props: { node: GroupingHierarchyNode; on: boolean }) => Promise<void>>;\n changeElementsState?: HierarchyVisibilityHandlerOverridableMethod<(props: ChangeGeometricElementsDisplayStateProps) => Promise<void>>;\n}\n\n/**\n * Props for `createModelsTreeVisibilityHandler`.\n * @internal\n */\nexport interface ModelsTreeVisibilityHandlerProps {\n viewport: Viewport;\n idsCache: ModelsTreeIdsCache;\n imodelAccess: ECClassHierarchyInspector;\n overrides?: ModelsTreeVisibilityHandlerOverrides;\n filteredPaths?: HierarchyFilteringPath[];\n}\n\n/**\n * Creates an instance if `ModelsTreeVisibilityHandler`.\n * @internal\n */\nexport function createModelsTreeVisibilityHandler(props: ModelsTreeVisibilityHandlerProps): HierarchyVisibilityHandler & Disposable {\n return new ModelsTreeVisibilityHandlerImpl(props);\n}\n\nclass ModelsTreeVisibilityHandlerImpl implements HierarchyVisibilityHandler {\n private readonly _eventListener: IVisibilityChangeEventListener;\n private readonly _alwaysAndNeverDrawnElements: AlwaysAndNeverDrawnElementInfo;\n private readonly _idsCache: ModelsTreeIdsCache;\n private _filteredTree: Promise<FilteredTree> | undefined;\n private _elementChangeQueue = new Subject<Observable<void>>();\n private _subscriptions: Subscription[] = [];\n private _changeRequest = new Subject<{ key: HierarchyNodeKey; depth: number }>();\n\n constructor(private readonly _props: ModelsTreeVisibilityHandlerProps) {\n this._eventListener = createVisibilityChangeEventListener(_props.viewport);\n this._alwaysAndNeverDrawnElements = new AlwaysAndNeverDrawnElementInfo(_props.viewport);\n this._idsCache = this._props.idsCache;\n this._filteredTree = _props.filteredPaths ? createFilteredTree(this._props.imodelAccess, _props.filteredPaths) : undefined;\n this._subscriptions.push(this._elementChangeQueue.pipe(concatAll()).subscribe());\n }\n\n public get onVisibilityChange() {\n return this._eventListener.onVisibilityChange;\n }\n\n public async getVisibilityStatus(node: HierarchyNode): Promise<VisibilityStatus> {\n return firstValueFrom(\n this.getVisibilityStatusObs(node).pipe(\n // unsubscribe from the observable if the change request for this node is received\n takeUntil(this._changeRequest.pipe(filter(({ key, depth }) => depth === node.parentKeys.length && HierarchyNodeKey.equals(node.key, key)))),\n // unsubscribe if visibility changes\n takeUntil(\n fromEventPattern(\n (handler) => {\n this._eventListener.onVisibilityChange.addListener(handler);\n },\n (handler) => {\n this._eventListener.onVisibilityChange.removeListener(handler);\n },\n ),\n ),\n defaultIfEmpty(createVisibilityStatus(\"hidden\")),\n ),\n );\n }\n\n public async changeVisibility(node: HierarchyNode, shouldDisplay: boolean): Promise<void> {\n // notify about new change request\n this._changeRequest.next({ key: node.key, depth: node.parentKeys.length });\n\n const changeObservable = this.changeVisibilityObs(node, shouldDisplay).pipe(\n // unsubscribe from the observable if the change request for this node is received\n takeUntil(this._changeRequest.pipe(filter(({ key, depth }) => depth === node.parentKeys.length && HierarchyNodeKey.equals(node.key, key)))),\n tap({\n subscribe: () => {\n this._eventListener.suppressChangeEvents();\n this._alwaysAndNeverDrawnElements.suppressChangeEvents();\n },\n finalize: () => {\n this._eventListener.resumeChangeEvents();\n this._alwaysAndNeverDrawnElements.resumeChangeEvents();\n },\n }),\n );\n\n return toVoidPromise(changeObservable);\n }\n\n public dispose() {\n this[Symbol.dispose]();\n }\n\n public [Symbol.dispose]() {\n this._eventListener[Symbol.dispose]();\n this._alwaysAndNeverDrawnElements[Symbol.dispose]();\n this._subscriptions.forEach((x) => x.unsubscribe());\n }\n\n private getVisibilityStatusObs(node: HierarchyNode): Observable<VisibilityStatus> {\n if (node.filtering?.filteredChildrenIdentifierPaths?.length && !node.filtering.isFilterTarget) {\n return this.getFilteredNodeVisibility({ node });\n }\n\n if (HierarchyNode.isClassGroupingNode(node)) {\n return this.getClassGroupingNodeDisplayStatus(node);\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n // note: subject nodes may be merged to represent multiple subject instances\n return this.getSubjectNodeVisibilityStatus({ subjectIds: node.key.instanceKeys.map((key) => key.id) });\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.getModelVisibilityStatus({ modelIds: node.key.instanceKeys.map(({ id }) => id) });\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n if (!modelId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.getCategoryDisplayStatus({\n categoryIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n if (!categoryId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n return this.getElementDisplayStatus({\n elementId: node.key.instanceKeys[0].id,\n modelId,\n categoryId,\n });\n }\n\n private getFilteredNodeVisibility(props: GetFilteredNodeVisibilityProps) {\n return from(this.getVisibilityChangeTargets(props)).pipe(\n mergeMap(({ subjects, models, categories, elements }) => {\n const observables = new Array<Observable<VisibilityStatus>>();\n if (subjects?.size) {\n observables.push(this.getSubjectNodeVisibilityStatus({ subjectIds: [...subjects], ignoreTooltip: true }));\n }\n\n if (models?.size) {\n observables.push(this.getModelVisibilityStatus({ modelIds: models, ignoreTooltip: true }));\n }\n\n if (categories?.size) {\n observables.push(\n from(categories).pipe(\n mergeMap((key) => {\n const { modelId, categoryId } = parseCategoryKey(key);\n return this.getCategoryDisplayStatus({ modelId, categoryIds: categoryId, ignoreTooltip: true });\n }),\n ),\n );\n }\n\n if (elements?.size) {\n observables.push(\n from(elements).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(([categoryKey, elementIds]) => {\n const { modelId, categoryId } = parseCategoryKey(categoryKey);\n return from(elementIds).pipe(\n releaseMainThreadOnItemsCount(1000),\n mergeMap((elementId) => this.getElementDisplayStatus({ modelId, categoryId, elementId, ignoreTooltip: true })),\n );\n }),\n ),\n );\n }\n\n return merge(...observables);\n }),\n mergeVisibilityStatuses(),\n );\n }\n\n private getSubjectNodeVisibilityStatus({ subjectIds, ignoreTooltip }: { subjectIds: Id64Array; ignoreTooltip?: boolean }): Observable<VisibilityStatus> {\n const result = defer(() => {\n if (!this._props.viewport.view.isSpatialView()) {\n return of(createVisibilityStatus(\"disabled\", getTooltipOptions(\"modelsTree.subject.nonSpatialView\", ignoreTooltip)));\n }\n\n return from(this._idsCache.getSubjectModelIds(subjectIds)).pipe(\n mergeMap((modelIds) => this.getModelVisibilityStatus({ modelIds, ignoreTooltip: true })),\n mergeVisibilityStatuses(\n {\n visible: \"modelsTree.subject.allModelsVisible\",\n hidden: \"modelsTree.subject.allModelsHidden\",\n partial: \"modelsTree.subject.someModelsHidden\",\n },\n ignoreTooltip,\n ),\n );\n });\n return createVisibilityHandlerResult(this, { ids: subjectIds }, result, this._props.overrides?.getSubjectNodeVisibility);\n }\n\n private getModelVisibilityStatus({ modelIds, ignoreTooltip }: { modelIds: Id64Set | Id64Array; ignoreTooltip?: boolean }): Observable<VisibilityStatus> {\n const result = defer(() => {\n const viewport = this._props.viewport;\n if (!viewport.view.isSpatialView()) {\n return of(createVisibilityStatus(\"disabled\", getTooltipOptions(\"modelsTree.model.nonSpatialView\", ignoreTooltip)));\n }\n\n return from(modelIds).pipe(\n distinct(),\n mergeMap((modelId) => {\n if (!viewport.view.viewsModel(modelId)) {\n return from(this._idsCache.getModelCategories(modelId)).pipe(\n mergeMap((categoryIds) => from(this._idsCache.getCategoriesModeledElements(modelId, categoryIds))),\n this.getSubModeledElementsVisibilityStatus({\n ignoreTooltips: ignoreTooltip,\n haveSubModel: \"yes\",\n tooltips: { visible: undefined, hidden: \"modelsTree.model.hiddenThroughModelSelector\", partial: \"modelsTree.model.someSubModelsVisible\" },\n parentNodeVisibilityStatus: createVisibilityStatus(\"hidden\"),\n }),\n );\n }\n\n return from(this._idsCache.getModelCategories(modelId)).pipe(\n mergeMap((categoryIds) =>\n categoryIds.length === 0 ? of(createVisibilityStatus(\"visible\")) : this.getCategoryDisplayStatus({ modelId, categoryIds, ignoreTooltip: true }),\n ),\n mergeVisibilityStatuses({\n visible: \"modelsTree.model.allCategoriesVisible\",\n partial: \"modelsTree.model.someCategoriesHidden\",\n hidden: \"modelsTree.model.allCategoriesHidden\",\n }),\n );\n }),\n mergeVisibilityStatuses(),\n );\n });\n return createVisibilityHandlerResult(this, { ids: modelIds }, result, this._props.overrides?.getModelDisplayStatus);\n }\n\n private getDefaultCategoryVisibilityStatus({\n modelId,\n categoryIds,\n ignoreTooltip,\n }: {\n categoryIds: Id64Arg;\n modelId: Id64String;\n ignoreTooltip?: boolean;\n }): VisibilityStatus {\n const viewport = this._props.viewport;\n\n if (!viewport.view.viewsModel(modelId) || Id64.sizeOf(categoryIds) === 0) {\n return createVisibilityStatus(\"hidden\", getTooltipOptions(\"modelsTree.category.hiddenThroughModel\", ignoreTooltip));\n }\n\n let visibility: \"visible\" | \"hidden\" | \"unknown\" = \"unknown\";\n for (const categoryId of Id64.iterable(categoryIds)) {\n const override = this._props.viewport.perModelCategoryVisibility.getOverride(modelId, categoryId);\n if (override === PerModelCategoryVisibility.Override.Show) {\n if (visibility === \"hidden\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = \"visible\";\n continue;\n }\n if (override === PerModelCategoryVisibility.Override.Hide) {\n if (visibility === \"visible\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = \"hidden\";\n continue;\n }\n const isVisible = viewport.view.viewsCategory(categoryId);\n if (isVisible && visibility === \"hidden\") {\n return createVisibilityStatus(\"partial\");\n }\n if (!isVisible && visibility === \"visible\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = isVisible ? \"visible\" : \"hidden\";\n }\n assert(visibility !== \"unknown\");\n\n return createVisibilityStatus(visibility);\n }\n\n private getCategoryDisplayStatus({ ignoreTooltip, ...props }: GetCategoryVisibilityStatusProps & { ignoreTooltip?: boolean }): Observable<VisibilityStatus> {\n const result = defer(() => {\n if (!this._props.viewport.view.viewsModel(props.modelId)) {\n return from(this._idsCache.getCategoriesModeledElements(props.modelId, props.categoryIds)).pipe(\n this.getSubModeledElementsVisibilityStatus({\n ignoreTooltips: ignoreTooltip,\n parentNodeVisibilityStatus: createVisibilityStatus(\"hidden\"),\n tooltips: {\n visible: undefined,\n hidden: \"modelsTree.category.hiddenThroughModel\",\n partial: \"modelsTree.category.someElementsOrSubModelsHidden\",\n },\n haveSubModel: \"yes\",\n }),\n );\n }\n\n return this.getVisibilityFromAlwaysAndNeverDrawnElements({\n categoryProps: { categoryIds: props.categoryIds, modelId: props.modelId },\n tooltips: {\n allElementsInAlwaysDrawnList: \"modelsTree.category.allElementsVisible\",\n allElementsInNeverDrawnList: \"modelsTree.category.allElementsHidden\",\n elementsInBothAlwaysAndNeverDrawn: \"modelsTree.category.someElementsAreHidden\",\n noElementsInExclusiveAlwaysDrawnList: \"modelsTree.category.allElementsHidden\",\n },\n defaultStatus: (categoryId) =>\n categoryId\n ? this.getDefaultCategoryVisibilityStatus({ modelId: props.modelId, categoryIds: categoryId })\n : this.getDefaultCategoryVisibilityStatus({ modelId: props.modelId, categoryIds: props.categoryIds }),\n ignoreTooltip,\n }).pipe(\n mergeMap((visibilityStatusAlwaysAndNeverDraw) => {\n return from(this._idsCache.getCategoriesModeledElements(props.modelId, props.categoryIds)).pipe(\n this.getSubModeledElementsVisibilityStatus({\n tooltips: {\n visible: undefined,\n hidden: \"modelsTree.category.allElementsAndSubModelsHidden\",\n partial: \"modelsTree.category.someElementsOrSubModelsHidden\",\n },\n haveSubModel: \"yes\",\n parentNodeVisibilityStatus: visibilityStatusAlwaysAndNeverDraw,\n ignoreTooltips: ignoreTooltip,\n }),\n );\n }),\n );\n });\n return createVisibilityHandlerResult(this, props, result, this._props.overrides?.getCategoryDisplayStatus);\n }\n\n private getClassGroupingNodeDisplayStatus(node: GroupingHierarchyNode): Observable<VisibilityStatus> {\n const result = defer(() => {\n const info = this.getGroupingNodeInfo(node);\n\n const { modelId, categoryId, elementIds } = info;\n if (!this._props.viewport.view.viewsModel(modelId)) {\n return of([...elementIds]).pipe(\n this.getSubModeledElementsVisibilityStatus({\n tooltips: {\n visible: undefined,\n hidden: undefined,\n partial: \"modelsTree.groupingNode.someElementsOrSubModelsHidden\",\n },\n parentNodeVisibilityStatus: createVisibilityStatus(\"hidden\"),\n haveSubModel: \"unknown\",\n }),\n );\n }\n\n return this.getVisibilityFromAlwaysAndNeverDrawnElements({\n elements: elementIds,\n defaultStatus: () => {\n const status = this.getDefaultCategoryVisibilityStatus({ categoryIds: categoryId, modelId, ignoreTooltip: true });\n return createVisibilityStatus(status.state, getTooltipOptions(`modelsTree.groupingNode.${status.state}ThroughCategory`));\n },\n tooltips: {\n allElementsInAlwaysDrawnList: \"modelsTree.groupingNode.allElementsVisible\",\n allElementsInNeverDrawnList: \"modelsTree.groupingNode.allElementsHidden\",\n elementsInBothAlwaysAndNeverDrawn: \"modelsTree.groupingNode.someElementsAreHidden\",\n noElementsInExclusiveAlwaysDrawnList: \"modelsTree.groupingNode.allElementsHidden\",\n },\n }).pipe(\n mergeMap((visibilityStatusAlwaysAndNeverDraw) => {\n return of([...elementIds]).pipe(\n this.getSubModeledElementsVisibilityStatus({\n tooltips: {\n visible: undefined,\n hidden: \"modelsTree.groupingNode.allElementsAndSubModelsHidden\",\n partial: \"modelsTree.groupingNode.someElementsOrSubModelsHidden\",\n },\n parentNodeVisibilityStatus: visibilityStatusAlwaysAndNeverDraw,\n haveSubModel: \"unknown\",\n }),\n );\n }),\n );\n });\n return createVisibilityHandlerResult(this, { node }, result, this._props.overrides?.getElementGroupingNodeDisplayStatus);\n }\n\n private getElementOverriddenVisibility(elementId: string, ignoreTooltip?: boolean): NonPartialVisibilityStatus | undefined {\n const viewport = this._props.viewport;\n if (viewport.neverDrawn?.has(elementId)) {\n return createVisibilityStatus(\"hidden\", getTooltipOptions(\"modelsTree.element.hiddenThroughNeverDrawnList\", ignoreTooltip));\n }\n\n if (viewport.alwaysDrawn?.size) {\n if (viewport.alwaysDrawn.has(elementId)) {\n return createVisibilityStatus(\"visible\", getTooltipOptions(\"modelsTree.element.displayedThroughAlwaysDrawnList\", ignoreTooltip));\n }\n\n if (viewport.isAlwaysDrawnExclusive) {\n return createVisibilityStatus(\"hidden\", getTooltipOptions(\"modelsTree.element.hiddenDueToOtherElementsExclusivelyAlwaysDrawn\", ignoreTooltip));\n }\n }\n\n return undefined;\n }\n\n private getElementVisibility(\n ignoreTooltip: boolean | undefined,\n viewsModel: boolean,\n overriddenVisibility: NonPartialVisibilityStatus | undefined,\n categoryVisibility: NonPartialVisibilityStatus,\n subModelVisibilityStatus?: VisibilityStatus,\n ): VisibilityStatus {\n if (subModelVisibilityStatus === undefined) {\n if (!viewsModel) {\n return createVisibilityStatus(\"hidden\", getTooltipOptions(\"modelsTree.element.hiddenThroughModel\", ignoreTooltip));\n }\n\n if (overriddenVisibility) {\n return overriddenVisibility;\n }\n\n return createVisibilityStatus(\n categoryVisibility.state,\n getTooltipOptions(categoryVisibility.state === \"visible\" ? undefined : \"modelsTree.element.hiddenThroughCategory\", ignoreTooltip),\n );\n }\n\n if (subModelVisibilityStatus.state === \"partial\") {\n return createVisibilityStatus(\"partial\", getTooltipOptions(\"modelsTree.element.someElementsAreHidden\", ignoreTooltip));\n }\n\n if (subModelVisibilityStatus.state === \"visible\") {\n if (!viewsModel || overriddenVisibility?.state === \"hidden\" || (categoryVisibility.state === \"hidden\" && !overriddenVisibility)) {\n return createVisibilityStatus(\"partial\", getTooltipOptions(\"modelsTree.element.partialThroughSubModel\", ignoreTooltip));\n }\n return createVisibilityStatus(\"visible\", getTooltipOptions(undefined, ignoreTooltip));\n }\n\n if (!viewsModel) {\n return createVisibilityStatus(\"hidden\", getTooltipOptions(\"modelsTree.element.hiddenThroughModel\", ignoreTooltip));\n }\n\n if (overriddenVisibility) {\n if (overriddenVisibility.state === \"hidden\") {\n return overriddenVisibility;\n }\n return createVisibilityStatus(\"partial\", getTooltipOptions(\"modelsTree.element.partialThroughElement\", ignoreTooltip));\n }\n\n if (categoryVisibility.state === \"visible\") {\n return createVisibilityStatus(\"partial\", getTooltipOptions(\"modelsTree.element.partialThroughCategory\", ignoreTooltip));\n }\n return createVisibilityStatus(\"hidden\", getTooltipOptions(\"modelsTree.element.hiddenThroughCategory\", ignoreTooltip));\n }\n\n private getElementDisplayStatus({\n ignoreTooltip,\n ...props\n }: GetGeometricElementVisibilityStatusProps & { ignoreTooltip?: boolean }): Observable<VisibilityStatus> {\n const result: Observable<VisibilityStatus> = defer(() => {\n const viewport = this._props.viewport;\n const { elementId, modelId, categoryId } = props;\n\n const viewsModel = viewport.view.viewsModel(modelId);\n const elementStatus = this.getElementOverriddenVisibility(elementId, ignoreTooltip);\n\n return from(this._idsCache.hasSubModel(elementId)).pipe(\n mergeMap((hasSubModel) => (hasSubModel ? this.getModelVisibilityStatus({ modelIds: [elementId] }) : of(undefined))),\n map((subModelVisibilityStatus) =>\n this.getElementVisibility(\n ignoreTooltip,\n viewsModel,\n elementStatus,\n // Single category will always return \"visible\" or \"hidden\"\n this.getDefaultCategoryVisibilityStatus({ categoryIds: categoryId, modelId, ignoreTooltip: true }) as NonPartialVisibilityStatus,\n subModelVisibilityStatus,\n ),\n ),\n );\n });\n return createVisibilityHandlerResult(this, props, result, this._props.overrides?.getElementDisplayStatus);\n }\n\n /** Changes visibility of the items represented by the tree node. */\n private changeVisibilityObs(node: HierarchyNode, on: boolean): Observable<void> {\n const changeObs = defer(() => {\n if (node.filtering?.filteredChildrenIdentifierPaths?.length && !node.filtering.isFilterTarget) {\n return this.changeFilteredNodeVisibility({ node, on });\n }\n\n if (HierarchyNode.isClassGroupingNode(node)) {\n return this.changeElementGroupingNodeState(node, on);\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n return this.changeSubjectNodeState(\n node.key.instanceKeys.map((key) => key.id),\n on,\n );\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.changeModelState({ ids: node.key.instanceKeys.map(({ id }) => id), on });\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n if (!modelId) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.changeCategoryState({\n categoryIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n on,\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n if (!categoryId) {\n return EMPTY;\n }\n\n return this.changeElementsState({\n elementIds: new Set([...node.key.instanceKeys.map(({ id }) => id)]),\n modelId,\n categoryId,\n on,\n });\n });\n if (this._props.viewport.isAlwaysDrawnExclusive) {\n return concat(this.removeAlwaysDrawnExclusive(), changeObs);\n }\n return changeObs;\n }\n\n private async getVisibilityChangeTargets({ node }: GetFilteredNodeVisibilityProps) {\n const filteredTree = await this._filteredTree;\n return filteredTree ? filteredTree.getVisibilityChangeTargets(node) : {};\n }\n\n private changeFilteredNodeVisibility({ on, ...props }: ChangeFilteredNodeVisibilityProps) {\n return from(this.getVisibilityChangeTargets(props)).pipe(\n mergeMap(({ subjects, models, categories, elements }) => {\n const observables = new Array<Observable<void>>();\n if (subjects?.size) {\n observables.push(this.changeSubjectNodeState([...subjects], on));\n }\n\n if (models?.size) {\n observables.push(this.changeModelState({ ids: models, on }));\n }\n\n if (categories?.size) {\n observables.push(\n from(categories).pipe(\n mergeMap((key) => {\n const { modelId, categoryId } = parseCategoryKey(key);\n return this.changeCategoryState({ modelId, categoryIds: categoryId, on });\n }),\n ),\n );\n }\n\n if (elements?.size) {\n observables.push(\n from(elements).pipe(\n mergeMap(([categoryKey, elementIds]) => {\n const { modelId, categoryId } = parseCategoryKey(categoryKey);\n return this.changeElementsState({ modelId, categoryId, elementIds, on });\n }),\n ),\n );\n }\n\n return merge(...observables);\n }),\n );\n }\n\n private removeAlwaysDrawnExclusive(): Observable<void> {\n return from(this._idsCache.getAllCategories()).pipe(\n map((categoryIds) => {\n this._props.viewport.changeCategoryDisplay(categoryIds, false, false);\n this._props.viewport.clearNeverDrawn();\n this._props.viewport.perModelCategoryVisibility.clearOverrides();\n this._props.viewport.setAlwaysDrawn(this._props.viewport.alwaysDrawn ?? new Set());\n }),\n );\n }\n\n private changeSubjectNodeState(ids: Id64Array, on: boolean): Observable<void> {\n const result = defer(() => {\n if (!this._props.viewport.view.isSpatialView()) {\n return EMPTY;\n }\n\n return from(this._idsCache.getSubjectModelIds(ids)).pipe(mergeMap((modelIds) => this.changeModelState({ ids: modelIds, on })));\n });\n return createVisibilityHandlerResult(this, { ids, on }, result, this._props.overrides?.changeSubjectNodeState);\n }\n\n private changeModelState(props: ChangeModelVisibilityStateProps): Observable<void> {\n const { ids, on } = props;\n\n if (Id64.sizeOf(ids) === 0) {\n return EMPTY;\n }\n\n const result = defer(() => {\n const viewport = this._props.viewport;\n if (!viewport.view.isSpatialView()) {\n return EMPTY;\n }\n\n const idsObs = from(Id64.iterable(ids));\n if (!on) {\n viewport.changeModelDisplay(ids, false);\n return idsObs.pipe(\n mergeMap(async (modelId) => ({ modelId, categoryIds: await this._idsCache.getModelCategories(modelId) })),\n mergeMap(({ modelId, categoryIds }) => from(this._idsCache.getCategoriesModeledElements(modelId, categoryIds))),\n mergeMap((modeledElementIds) => this.changeModelState({ ids: modeledElementIds, on })),\n );\n }\n\n return concat(\n defer(() => {\n viewport.perModelCategoryVisibility.clearOverrides(ids);\n return from(viewport.addViewedModels(ids));\n }),\n idsObs.pipe(\n mergeMap((modelId) => {\n return from(this._idsCache.getModelCategories(modelId)).pipe(\n mergeMap((categoryIds) => this.changeCategoryState({ categoryIds, modelId, on: true })),\n );\n }),\n ),\n );\n });\n return createVisibilityHandlerResult(this, props, result, this._props.overrides?.changeModelState);\n }\n\n private showModelWithoutAnyCategoriesOrElements(modelId: Id64String): Observable<void> {\n const viewport = this._props.viewport;\n return forkJoin({\n categories: this._idsCache.getModelCategories(modelId),\n alwaysDrawnElements: this.getAlwaysDrawnElements({ modelId }),\n }).pipe(\n mergeMap(async ({ categories, alwaysDrawnElements }) => {\n const alwaysDrawn = this._props.viewport.alwaysDrawn;\n if (alwaysDrawn && alwaysDrawnElements) {\n viewport.setAlwaysDrawn(setDifference(alwaysDrawn, alwaysDrawnElements));\n }\n categories.forEach((categoryId) => {\n this.changeCategoryStateInViewportAccordingToModelVisibility(modelId, categoryId, false);\n });\n await viewport.addViewedModels(modelId);\n }),\n );\n }\n\n private changeCategoryStateInViewportAccordingToModelVisibility(modelId: string, categoryId: string, on: boolean) {\n const viewport = this._props.viewport;\n const isDisplayedInSelector = viewport.view.viewsCategory(categoryId);\n const override =\n on === isDisplayedInSelector\n ? PerModelCategoryVisibility.Override.None\n : on\n ? PerModelCategoryVisibility.Override.Show\n : PerModelCategoryVisibility.Override.Hide;\n viewport.perModelCategoryVisibility.setOverride(modelId, categoryId, override);\n if (override === PerModelCategoryVisibility.Override.None && on) {\n // we took off the override which means the category is displayed in selector, but\n // doesn't mean all its subcategories are displayed - this call ensures that\n viewport.changeCategoryDisplay(categoryId, true, true);\n }\n }\n\n private changeCategoryState(props: ChangeCategoryVisibilityStateProps): Observable<void> {\n const result = defer(() => {\n const viewport = this._props.viewport;\n const { modelId, categoryIds, on } = props;\n return concat(\n props.on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY,\n defer(() => {\n for (const categoryId of Id64.iterable(categoryIds)) {\n this.changeCategoryStateInViewportAccordingToModelVisibility(modelId, categoryId, on);\n }\n return this.clearAlwaysAndNeverDrawnElements(props);\n }),\n from(this._idsCache.getCategoriesModeledElements(modelId, categoryIds)).pipe(\n mergeMap((modeledElementIds) => this.changeModelState({ ids: modeledElementIds, on })),\n ),\n );\n });\n return createVisibilityHandlerResult(this, props, result, this._props.overrides?.changeCategoryState);\n }\n\n private doChangeElementsState(props: ChangeGeometricElementsDisplayStateProps): Observable<void | undefined> {\n return defer(() => {\n const { modelId, categoryId, elementIds, on } = props;\n const viewport = this._props.viewport;\n return concat(\n on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY,\n defer(() => {\n const categoryVisibility = this.getDefaultCategoryVisibilityStatus({ categoryIds: categoryId, modelId, ignoreTooltip: true });\n const isDisplayedByDefault = categoryVisibility.state === \"visible\";\n return this.queueElementsVisibilityChange(elementIds, on, isDisplayedByDefault);\n }),\n from(elementIds).pipe(\n mergeMap(async (elementId) => ({ elementId, isSubModel: await this._idsCache.hasSubModel(elementId) })),\n filter(({ isSubModel }) => isSubModel),\n map(({ elementId }) => elementId),\n toArray(),\n mergeMap((subModelIds) => this.changeModelState({ ids: subModelIds, on })),\n ),\n );\n });\n }\n\n /**\n * Updates visibility of all grouping node's elements.\n * @see `changeElementState`\n */\n private changeElementGroupingNodeState(node: GroupingHierarchyNode, on: boolean): Observable<void> {\n const result = this.doChangeElementsState({ ...this.getGroupingNodeInfo(node), on });\n return createVisibilityHandlerResult(this, { node, on }, result, this._props.overrides?.changeElementGroupingNodeState);\n }\n\n /**\n * Updates visibility of an element and all its child elements by adding them to the always/never drawn list.\n * @note If element is to be enabled and model is hidden, it will be enabled.\n */\n private changeElementsState(props: ChangeGeometricElementsDisplayStateProps): Observable<void> {\n const result = this.doChangeElementsState(props);\n return createVisibilityHandlerResult(this, props, result, this._props.overrides?.changeElementsState);\n }\n\n private queueElementsVisibilityChange(elementIds: Id64Set, on: boolean, visibleByDefault: boolean) {\n const finishedSubject = new Subject<boolean>();\n // observable to track if visibility change is finished/cancelled\n const changeFinished = finishedSubject.pipe(\n startWith(false),\n shareReplay(1),\n filter((finished) => finished),\n );\n\n const changeObservable = from(elementIds).pipe(\n // check if visibility change is not finished (cancelled) due to change overall change request being cancelled\n takeUntil(changeFinished),\n this.changeElementStateNoChildrenOperator({ on, isDisplayedByDefault: visibleByDefault }),\n tap({\n next: () => {\n // notify that visibility change is finished\n finishedSubject.next(true);\n },\n }),\n );\n\n // queue visibility change. `changeObservable` will be subscribed to when other queue changes are finished\n this._elementChangeQueue.next(changeObservable);\n\n // return observable that will emit when visibility change is finished\n return changeFinished.pipe(\n take(1),\n tap({\n unsubscribe: () => {\n // if this observable is unsubscribed before visibility change is finished, we have to notify that it queued change request is cancelled\n finishedSubject.next(true);\n },\n }),\n map(() => undefined),\n );\n }\n\n private changeElementStateNoChildrenOperator(props: { on: boolean; isDisplayedByDefault: boolean }): OperatorFunction<string, void> {\n return (elementIds: Observable<Id64String>) => {\n const { on, isDisplayedByDefault } = props;\n const isAlwaysDrawnExclusive = this._props.viewport.isAlwaysDrawnExclusive;\n return elementIds.pipe(\n releaseMainThreadOnItemsCount(500),\n reduce<string, { changedNeverDrawn: boolean; changedAlwaysDrawn: boolean; neverDrawn: Id64Set | undefined; alwaysDrawn: Id64Set | undefined }>(\n (acc, elementId) => {\n if (acc.alwaysDrawn === undefined || acc.neverDrawn === undefined) {\n acc.alwaysDrawn = new Set(this._props.viewport.alwaysDrawn || []);\n acc.neverDrawn = new Set(this._props.viewport.neverDrawn || []);\n }\n if (on) {\n const wasRemoved = acc.neverDrawn.delete(elementId);\n acc.changedNeverDrawn ||= wasRemoved;\n // If exclusive mode is enabled, we must add the element to the always drawn list.\n if ((!isDisplayedByDefault || isAlwaysDrawnExclusive) && !acc.alwaysDrawn.has(elementId)) {\n acc.alwaysDrawn.add(elementId);\n acc.changedAlwaysDrawn = true;\n }\n } else {\n const wasRemoved = acc.alwaysDrawn.delete(elementId);\n acc.changedAlwaysDrawn ||= wasRemoved;\n // If exclusive mode is not enabled, we have to add the element to the never drawn list.\n if (isDisplayedByDefault && !isAlwaysDrawnExclusive && !acc.neverDrawn.has(elementId)) {\n acc.neverDrawn.add(elementId);\n acc.changedNeverDrawn = true;\n }\n }\n return acc;\n },\n {\n changedNeverDrawn: false,\n changedAlwaysDrawn: false,\n neverDrawn: undefined,\n alwaysDrawn: undefined,\n },\n ),\n map((state) => {\n state.changedNeverDrawn && state.neverDrawn && this._props.viewport.setNeverDrawn(state.neverDrawn);\n state.changedAlwaysDrawn && state.alwaysDrawn && this._props.viewport.setAlwaysDrawn(state.alwaysDrawn, this._props.viewport.isAlwaysDrawnExclusive);\n }),\n );\n };\n }\n\n private getVisibilityFromAlwaysAndNeverDrawnElementsImpl(\n props: {\n alwaysDrawn: Id64Set | undefined;\n neverDrawn: Id64Set | undefined;\n totalCount: number;\n } & GetVisibilityFromAlwaysAndNeverDrawnElementsProps & { ignoreTooltip?: boolean },\n ): VisibilityStatus {\n const { alwaysDrawn, neverDrawn, totalCount, ignoreTooltip } = props;\n if (totalCount === 0) {\n return props.defaultStatus();\n }\n if (neverDrawn?.size === totalCount) {\n return createVisibilityStatus(\"hidden\", getTooltipOptions(props.tooltips.allElementsInNeverDrawnList, ignoreTooltip));\n }\n\n if (alwaysDrawn?.size === totalCount) {\n return createVisibilityStatus(\"visible\", getTooltipOptions(props.tooltips.allElementsInAlwaysDrawnList, ignoreTooltip));\n }\n\n const viewport = this._props.viewport;\n if (viewport.isAlwaysDrawnExclusive && viewport.alwaysDrawn?.size) {\n return alwaysDrawn?.size\n ? createVisibilityStatus(\"partial\", getTooltipOptions(props.tooltips.elementsInBothAlwaysAndNeverDrawn, ignoreTooltip))\n : createVisibilityStatus(\"hidden\", getTooltipOptions(props.tooltips.noElementsInExclusiveAlwaysDrawnList, ignoreTooltip));\n }\n\n const status = props.defaultStatus();\n if ((status.state === \"visible\" && neverDrawn?.size) || (status.state === \"hidden\" && alwaysDrawn?.size)) {\n return createVisibilityStatus(\"partial\", getTooltipOptions(undefined, ignoreTooltip));\n }\n return status;\n }\n\n private getVisibilityFromAlwaysAndNeverDrawnElements({\n ignoreTooltip,\n ...props\n }: GetVisibilityFromAlwaysAndNeverDrawnElementsProps &\n ({ elements: Id64Set } | { categoryProps: { categoryIds: Id64Arg; modelId: Id64String } }) & { ignoreTooltip?: boolean }): Observable<VisibilityStatus> {\n const viewport = this._props.viewport;\n if (viewport.isAlwaysDrawnExclusive) {\n if (!viewport?.alwaysDrawn?.size) {\n return of(createVisibilityStatus(\"hidden\", getTooltipOptions(props.tooltips.noElementsInExclusiveAlwaysDrawnList, ignoreTooltip)));\n }\n } else if (!viewport?.neverDrawn?.size && !viewport?.alwaysDrawn?.size) {\n return of(props.defaultStatus());\n }\n\n if (\"elements\" in props) {\n return of(\n this.getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n alwaysDrawn: viewport.alwaysDrawn?.size ? setIntersection(props.elements, viewport.alwaysDrawn) : undefined,\n neverDrawn: viewport.neverDrawn?.size ? setIntersection(props.elements, viewport.neverDrawn) : undefined,\n totalCount: props.elements.size,\n ignoreTooltip,\n }),\n );\n }\n\n const { modelId, categoryIds } = props.categoryProps;\n return from(Id64.iterable(categoryIds)).pipe(\n mergeMap((categoryId) => {\n const totalCount = this._idsCache.getCategoryElementsCount(modelId, categoryId);\n return forkJoin({\n totalCount,\n alwaysDrawn: this.getAlwaysDrawnElements({ categoryIds: categoryId, modelId }),\n neverDrawn: this.getNeverDrawnElements({ categoryIds: categoryId, modelId }),\n }).pipe(\n // There is a known bug:\n // Categories that don't have root elements will make visibility result incorrect\n // E.g.:\n // - CategoryA\n // - ElementA (CategoryA is visible)\n // - ChildElementB (CategoryB is hidden) ChildElementB is in always drawn list\n // Result will be \"partial\" because CategoryB will return hidden visibility, even though all elements are visible\n // TODO fix with: https://github.com/iTwin/viewer-components-react/issues/1100\n map((state) => {\n return this.getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n ...state,\n defaultStatus: () => props.defaultStatus(categoryId),\n ignoreTooltip,\n });\n }),\n );\n }),\n mergeVisibilityStatuses(),\n );\n }\n\n private getAlwaysDrawnElements(props: { categoryIds?: Id64Arg; modelId: Id64String }): Observable<Id64Set> {\n return this._alwaysAndNeverDrawnElements.getElements({ modelId: props.modelId, categoryIds: props.categoryIds, setType: \"always\" });\n }\n\n private getNeverDrawnElements(props: { categoryIds?: Id64Arg; modelId: Id64String }): Observable<Id64Set> {\n return this._alwaysAndNeverDrawnElements.getElements({ modelId: props.modelId, categoryIds: props.categoryIds, setType: \"never\" });\n }\n\n private clearAlwaysAndNeverDrawnElements(props: { categoryIds: Id64Arg; modelId: Id64String }) {\n return forkJoin({\n alwaysDrawn: this.getAlwaysDrawnElements(props),\n neverDrawn: this.getNeverDrawnElements(props),\n }).pipe(\n map(({ alwaysDrawn, neverDrawn }) => {\n const viewport = this._props.viewport;\n if (viewport.alwaysDrawn?.size && alwaysDrawn.size) {\n viewport.setAlwaysDrawn(setDifference(viewport.alwaysDrawn, alwaysDrawn));\n }\n if (viewport.neverDrawn?.size && neverDrawn.size) {\n viewport.setNeverDrawn(setDifference(viewport.neverDrawn, neverDrawn));\n }\n }),\n );\n }\n\n private getGroupingNodeInfo(node: GroupingHierarchyNode) {\n const modelId = ModelsTreeNode.getModelId(node);\n const categoryId = ModelsTreeNode.getCategoryId(node);\n assert(!!modelId && !!categoryId);\n\n const elementIds = new Set(node.groupedInstanceKeys.map((key) => key.id));\n return { modelId, categoryId, elementIds };\n }\n\n private getSubModeledElementsVisibilityStatus({\n parentNodeVisibilityStatus,\n haveSubModel,\n tooltips,\n ignoreTooltips,\n }: {\n parentNodeVisibilityStatus: VisibilityStatus;\n haveSubModel: \"yes\" | \"unknown\";\n tooltips: { [key in Visibility]: string | undefined };\n ignoreTooltips?: boolean;\n }): OperatorFunction<Id64Array, VisibilityStatus> {\n return (obs) => {\n return obs.pipe(\n // ensure we're only looking at elements that have a sub-model\n mergeMap((modeledElementIds) => {\n if (haveSubModel === \"yes\") {\n return of(modeledElementIds);\n }\n return from(modeledElementIds).pipe(\n mergeMap(async (elementId) => ({ elementId, hasSubModel: await this._idsCache.hasSubModel(elementId) })),\n filter(({ hasSubModel }) => hasSubModel),\n map(({ elementId }) => elementId),\n toArray(),\n );\n }),\n // combine visibility status of sub-models with visibility status of parent node\n mergeMap((modeledElementIds) => {\n if (modeledElementIds.length === 0) {\n return of(parentNodeVisibilityStatus);\n }\n return this.getModelVisibilityStatus({ modelIds: modeledElementIds }).pipe(\n startWith<VisibilityStatus>(parentNodeVisibilityStatus),\n mergeVisibilityStatuses(tooltips, ignoreTooltips),\n );\n }),\n );\n };\n }\n}\n\ninterface GetVisibilityFromAlwaysAndNeverDrawnElementsProps {\n tooltips: {\n allElementsInNeverDrawnList: string;\n allElementsInAlwaysDrawnList: string;\n elementsInBothAlwaysAndNeverDrawn: string;\n noElementsInExclusiveAlwaysDrawnList: string;\n };\n /** Status when always/never lists are empty and exclusive mode is off */\n defaultStatus: (categoryId?: Id64String) => VisibilityStatus;\n}\n\nfunction mergeVisibilities(obs: Observable<Visibility>): Observable<Visibility | \"empty\"> {\n return obs.pipe(\n reduceWhile(\n (x) => x.allVisible || x.allHidden,\n (acc, val) => {\n acc.allVisible &&= val === \"visible\";\n acc.allHidden &&= val === \"hidden\";\n return acc;\n },\n { allVisible: true, allHidden: true },\n ),\n map((x) => {\n if (!x) {\n return \"empty\";\n }\n return x.allVisible ? \"visible\" : x.allHidden ? \"hidden\" : \"partial\";\n }),\n );\n}\n\nfunction mergeVisibilityStatuses(\n tooltipMap?: { [key in Visibility]: string | undefined },\n ignoreTooltip?: boolean,\n): OperatorFunction<VisibilityStatus, VisibilityStatus> {\n return (obs) => {\n return obs.pipe(\n map((visibilityStatus) => visibilityStatus.state),\n mergeVisibilities,\n map((visibility) => {\n if (visibility === \"empty\") {\n visibility = \"visible\";\n }\n return createVisibilityStatus(visibility, getTooltipOptions(tooltipMap?.[visibility], ignoreTooltip));\n }),\n );\n };\n}\n\nfunction setDifference<T>(lhs: Set<T>, rhs: Set<T>): Set<T> {\n const result = new Set<T>();\n lhs.forEach((x) => !rhs.has(x) && result.add(x));\n return result;\n}\n\nfunction setIntersection<T>(lhs: Set<T>, rhs: Set<T>): Set<T> {\n const result = new Set<T>();\n lhs.forEach((x) => rhs.has(x) && result.add(x));\n return result;\n}\n\n/**\n * Enables display of all given models. Also enables display of all categories and clears always and\n * never drawn lists in the viewport.\n * @public\n */\nexport async function showAllModels(models: string[], viewport: Viewport) {\n await viewport.addViewedModels(models);\n viewport.clearNeverDrawn();\n viewport.clearAlwaysDrawn();\n await toggleAllCategories(viewport, true);\n}\n\n/**\n * Disables display of all given models.\n * @public\n */\nexport async function hideAllModels(models: string[], viewport: Viewport) {\n viewport.changeModelDisplay(models, false);\n}\n\n/**\n * Inverts display of all given models.\n * @public\n */\nexport async function invertAllModels(models: string[], viewport: Viewport) {\n const notViewedModels: string[] = [];\n const viewedModels: string[] = [];\n models.forEach((modelId) => {\n if (viewport.viewsModel(modelId)) {\n viewedModels.push(modelId);\n } else {\n notViewedModels.push(modelId);\n }\n });\n await viewport.addViewedModels(notViewedModels);\n viewport.changeModelDisplay(viewedModels, false);\n}\n\n/**\n * Based on the value of `enable` argument, either enables or disables display of given models.\n * @public\n */\nexport async function toggleModels(models: string[], enable: boolean, viewport: Viewport) {\n if (!models) {\n return;\n }\n if (enable) {\n viewport.changeModelDisplay(models, false);\n } else {\n await viewport.addViewedModels(models);\n }\n}\n\n/**\n * Checks if all given models are displayed in given viewport.\n * @public\n */\nexport function areAllModelsVisible(models: string[], viewport: Viewport) {\n return models.length !== 0 ? models.every((id) => viewport.viewsModel(id)) : false;\n}\n\nfunction getTooltipOptions(key: string | undefined, ignoreTooltip?: boolean) {\n return {\n useTooltip: ignoreTooltip ? (false as const) : key,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ModelsTreeVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport {\n concat,\n concatAll,\n defaultIfEmpty,\n defer,\n distinct,\n EMPTY,\n filter,\n firstValueFrom,\n forkJoin,\n from,\n fromEventPattern,\n map,\n merge,\n mergeMap,\n of,\n reduce,\n shareReplay,\n startWith,\n Subject,\n take,\n takeUntil,\n tap,\n toArray,\n} from \"rxjs\";\nimport { assert, Id64 } from \"@itwin/core-bentley\";\nimport { PerModelCategoryVisibility } from \"@itwin/core-frontend\";\nimport { HierarchyNode, HierarchyNodeKey } from \"@itwin/presentation-hierarchies\";\nimport { enableCategoryDisplay, loadCategoriesFromViewport } from \"../../common/CategoriesVisibilityUtils.js\";\nimport { reduceWhile, toVoidPromise } from \"../../common/Rxjs.js\";\nimport { createVisibilityStatus } from \"../../common/Tooltip.js\";\nimport { createVisibilityHandlerResult } from \"../../common/UseHierarchyVisibility.js\";\nimport { getIdsFromChildrenTree, releaseMainThreadOnItemsCount } from \"../Utils.js\";\nimport { AlwaysAndNeverDrawnElementInfo } from \"./AlwaysAndNeverDrawnElementInfo.js\";\nimport { createFilteredTree, parseCategoryKey } from \"./FilteredTree.js\";\nimport { ModelsTreeNode } from \"./ModelsTreeNode.js\";\nimport { createVisibilityChangeEventListener } from \"./VisibilityChangeEventListener.js\";\n\nimport type { Observable, OperatorFunction, Subscription } from \"rxjs\";\nimport type { GuidString, Id64Arg, Id64Array, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport type { Viewport } from \"@itwin/core-frontend\";\nimport type { ClassGroupingNodeKey, GroupingHierarchyNode, HierarchyFilteringPath, InstancesNodeKey } from \"@itwin/presentation-hierarchies\";\nimport type { ECClassHierarchyInspector } from \"@itwin/presentation-shared\";\nimport type { Visibility } from \"../../common/Tooltip.js\";\nimport type { HierarchyVisibilityHandler, HierarchyVisibilityHandlerOverridableMethod, VisibilityStatus } from \"../../common/UseHierarchyVisibility.js\";\nimport type { GetElementsTreeProps } from \"./AlwaysAndNeverDrawnElementInfo.js\";\nimport type { FilteredTree } from \"./FilteredTree.js\";\nimport type { ModelsTreeIdsCache } from \"./ModelsTreeIdsCache.js\";\nimport type { IVisibilityChangeEventListener } from \"./VisibilityChangeEventListener.js\";\n\n/** @beta */\ninterface GetCategoryVisibilityStatusProps {\n categoryIds: Id64Arg;\n modelId: Id64String;\n}\n\n/** @beta */\ninterface ChangeCategoryVisibilityStateProps extends GetCategoryVisibilityStatusProps {\n on: boolean;\n}\n\n/** @beta */\ninterface GetGeometricElementVisibilityStatusProps {\n elementId: Id64String;\n modelId: Id64String;\n categoryId: Id64String;\n}\n\n/** @beta */\ninterface ChangeGeometricElementsDisplayStateProps {\n elementIds: Id64Set;\n modelId: Id64String;\n categoryId: Id64String;\n on: boolean;\n}\n\n/** @beta */\ninterface ChangeModelVisibilityStateProps {\n ids: Id64Arg;\n on: boolean;\n}\n\n/** @beta */\ninterface GetFilteredNodeVisibilityProps {\n node: HierarchyNode & { key: ClassGroupingNodeKey | InstancesNodeKey };\n}\n\n/** @beta */\ninterface ChangeFilteredNodeVisibilityProps extends GetFilteredNodeVisibilityProps {\n on: boolean;\n}\n\n/**\n * Functionality of Models tree visibility handler that can be overridden.\n * Each callback is provided original implementation and reference to a `HierarchyVisibilityHandler`.\n * @beta\n */\nexport interface ModelsTreeVisibilityHandlerOverrides {\n getSubjectNodeVisibility?: HierarchyVisibilityHandlerOverridableMethod<(props: { ids: Id64Array }) => Promise<VisibilityStatus>>;\n getModelDisplayStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { ids: Id64Arg }) => Promise<VisibilityStatus>>;\n getCategoryDisplayStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: GetCategoryVisibilityStatusProps) => Promise<VisibilityStatus>>;\n getElementGroupingNodeDisplayStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { node: GroupingHierarchyNode }) => Promise<VisibilityStatus>>;\n getElementDisplayStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: GetGeometricElementVisibilityStatusProps) => Promise<VisibilityStatus>>;\n\n changeSubjectNodeState?: HierarchyVisibilityHandlerOverridableMethod<(props: { ids: Id64Array; on: boolean }) => Promise<void>>;\n changeModelState?: HierarchyVisibilityHandlerOverridableMethod<(props: ChangeModelVisibilityStateProps) => Promise<void>>;\n changeCategoryState?: HierarchyVisibilityHandlerOverridableMethod<(props: ChangeCategoryVisibilityStateProps) => Promise<void>>;\n changeElementGroupingNodeState?: HierarchyVisibilityHandlerOverridableMethod<(props: { node: GroupingHierarchyNode; on: boolean }) => Promise<void>>;\n changeElementsState?: HierarchyVisibilityHandlerOverridableMethod<(props: ChangeGeometricElementsDisplayStateProps) => Promise<void>>;\n}\n\n/**\n * Props for `createModelsTreeVisibilityHandler`.\n * @internal\n */\nexport interface ModelsTreeVisibilityHandlerProps {\n viewport: Viewport;\n idsCache: ModelsTreeIdsCache;\n imodelAccess: ECClassHierarchyInspector;\n overrides?: ModelsTreeVisibilityHandlerOverrides;\n filteredPaths?: HierarchyFilteringPath[];\n componentId?: GuidString;\n}\n\n/**\n * Creates an instance if `ModelsTreeVisibilityHandler`.\n * @internal\n */\nexport function createModelsTreeVisibilityHandler(props: ModelsTreeVisibilityHandlerProps): HierarchyVisibilityHandler & Disposable {\n return new ModelsTreeVisibilityHandlerImpl(props);\n}\n\nclass ModelsTreeVisibilityHandlerImpl implements HierarchyVisibilityHandler {\n readonly #eventListener: IVisibilityChangeEventListener;\n readonly #alwaysAndNeverDrawnElements: AlwaysAndNeverDrawnElementInfo;\n readonly #idsCache: ModelsTreeIdsCache;\n #filteredTree: Promise<FilteredTree> | undefined;\n #elementChangeQueue = new Subject<Observable<void>>();\n #subscriptions: Subscription[] = [];\n #changeRequest = new Subject<{ key: HierarchyNodeKey; depth: number }>();\n readonly #props: ModelsTreeVisibilityHandlerProps;\n\n constructor(props: ModelsTreeVisibilityHandlerProps) {\n this.#props = props;\n this.#eventListener = createVisibilityChangeEventListener(this.#props.viewport);\n this.#alwaysAndNeverDrawnElements = new AlwaysAndNeverDrawnElementInfo(this.#props.viewport, this.#props.componentId);\n this.#idsCache = this.#props.idsCache;\n this.#filteredTree = this.#props.filteredPaths ? createFilteredTree(this.#props.imodelAccess, this.#props.filteredPaths) : undefined;\n this.#subscriptions.push(this.#elementChangeQueue.pipe(concatAll()).subscribe());\n }\n\n public get onVisibilityChange() {\n return this.#eventListener.onVisibilityChange;\n }\n\n public async getVisibilityStatus(node: HierarchyNode): Promise<VisibilityStatus> {\n return firstValueFrom(\n this.getVisibilityStatusObs(node).pipe(\n // unsubscribe from the observable if the change request for this node is received\n takeUntil(this.#changeRequest.pipe(filter(({ key, depth }) => depth === node.parentKeys.length && HierarchyNodeKey.equals(node.key, key)))),\n // unsubscribe if visibility changes\n takeUntil(\n fromEventPattern(\n (handler) => {\n this.#eventListener.onVisibilityChange.addListener(handler);\n },\n (handler) => {\n this.#eventListener.onVisibilityChange.removeListener(handler);\n },\n ),\n ),\n defaultIfEmpty(createVisibilityStatus(\"hidden\")),\n ),\n );\n }\n\n public async changeVisibility(node: HierarchyNode, shouldDisplay: boolean): Promise<void> {\n // notify about new change request\n this.#changeRequest.next({ key: node.key, depth: node.parentKeys.length });\n\n const changeObservable = this.changeVisibilityObs(node, shouldDisplay).pipe(\n // unsubscribe from the observable if the change request for this node is received\n takeUntil(this.#changeRequest.pipe(filter(({ key, depth }) => depth === node.parentKeys.length && HierarchyNodeKey.equals(node.key, key)))),\n tap({\n subscribe: () => {\n this.#eventListener.suppressChangeEvents();\n this.#alwaysAndNeverDrawnElements.suppressChangeEvents();\n },\n finalize: () => {\n this.#eventListener.resumeChangeEvents();\n this.#alwaysAndNeverDrawnElements.resumeChangeEvents();\n },\n }),\n );\n\n return toVoidPromise(changeObservable);\n }\n\n public dispose() {\n this[Symbol.dispose]();\n }\n\n public [Symbol.dispose]() {\n this.#eventListener[Symbol.dispose]();\n this.#alwaysAndNeverDrawnElements[Symbol.dispose]();\n this.#subscriptions.forEach((x) => x.unsubscribe());\n }\n\n private getVisibilityStatusObs(node: HierarchyNode): Observable<VisibilityStatus> {\n if (HierarchyNode.isClassGroupingNode(node)) {\n if (node.extendedData?.hasDirectNonFilteredTargets && !node.filtering?.hasFilterTargetAncestor) {\n return this.getFilteredNodeVisibility({ node });\n }\n return this.getClassGroupingNodeDisplayStatus(node);\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (node.filtering?.filteredChildrenIdentifierPaths?.length && !node.filtering.isFilterTarget) {\n return this.getFilteredNodeVisibility({ node });\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n // note: subject nodes may be merged to represent multiple subject instances\n return this.getSubjectNodeVisibilityStatus({ subjectIds: node.key.instanceKeys.map((key) => key.id) });\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.getModelVisibilityStatus({ modelIds: node.key.instanceKeys.map(({ id }) => id) });\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n if (!modelId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.getCategoryDisplayStatus({\n categoryIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n if (!categoryId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n return this.getElementDisplayStatus({\n elementIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n categoryId,\n });\n }\n\n private getFilteredNodeVisibility(props: GetFilteredNodeVisibilityProps) {\n assert(this.#filteredTree !== undefined);\n return from(this.#filteredTree).pipe(\n map((filteredTree) => filteredTree.getVisibilityChangeTargets(props.node)),\n mergeMap(({ subjects, models, categories, elements }) => {\n const observables = new Array<Observable<VisibilityStatus>>();\n if (subjects?.size) {\n observables.push(this.getSubjectNodeVisibilityStatus({ subjectIds: [...subjects], ignoreTooltip: true }));\n }\n\n if (models?.size) {\n observables.push(this.getModelVisibilityStatus({ modelIds: models, ignoreTooltip: true }));\n }\n\n if (categories?.size) {\n observables.push(\n from(categories).pipe(\n mergeMap((key) => {\n const { modelId, categoryId } = parseCategoryKey(key);\n return this.getCategoryDisplayStatus({ modelId, categoryIds: categoryId, ignoreTooltip: true });\n }),\n ),\n );\n }\n\n if (elements?.size) {\n observables.push(\n from(elements).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(([categoryKey, elementsMap]) => {\n const { modelId, categoryId } = parseCategoryKey(categoryKey);\n return this.getElementsDisplayStatus({\n elementIds: [...elementsMap.keys()],\n modelId,\n categoryId,\n });\n }),\n ),\n );\n }\n\n return merge(...observables);\n }),\n mergeVisibilityStatuses(),\n );\n }\n\n private getSubjectNodeVisibilityStatus({ subjectIds, ignoreTooltip }: { subjectIds: Id64Array; ignoreTooltip?: boolean }): Observable<VisibilityStatus> {\n const result = defer(() => {\n if (!this.#props.viewport.view.isSpatialView()) {\n return of(createVisibilityStatus(\"disabled\", getTooltipOptions(\"modelsTree.subject.nonSpatialView\", ignoreTooltip)));\n }\n\n return from(this.#idsCache.getSubjectModelIds(subjectIds)).pipe(\n mergeMap((modelIds) => this.getModelVisibilityStatus({ modelIds, ignoreTooltip: true })),\n mergeVisibilityStatuses(\n {\n visible: \"modelsTree.subject.allModelsVisible\",\n hidden: \"modelsTree.subject.allModelsHidden\",\n partial: \"modelsTree.subject.someModelsHidden\",\n },\n ignoreTooltip,\n ),\n );\n });\n return createVisibilityHandlerResult(this, { ids: subjectIds }, result, this.#props.overrides?.getSubjectNodeVisibility);\n }\n\n private getModelVisibilityStatus({ modelIds, ignoreTooltip }: { modelIds: Id64Arg; ignoreTooltip?: boolean }): Observable<VisibilityStatus> {\n const result = defer(() => {\n const viewport = this.#props.viewport;\n if (!viewport.view.isSpatialView()) {\n return of(createVisibilityStatus(\"disabled\", getTooltipOptions(\"modelsTree.model.nonSpatialView\", ignoreTooltip)));\n }\n\n return from(Id64.iterable(modelIds)).pipe(\n distinct(),\n mergeMap((modelId) => {\n if (!viewport.view.viewsModel(modelId)) {\n return from(this.#idsCache.getModelCategories(modelId)).pipe(\n mergeMap((categoryIds) => from(this.#idsCache.getCategoriesModeledElements(modelId, categoryIds))),\n this.getSubModeledElementsVisibilityStatus({\n ignoreTooltips: ignoreTooltip,\n haveSubModel: \"yes\",\n tooltips: { visible: undefined, hidden: \"modelsTree.model.hiddenThroughModelSelector\", partial: \"modelsTree.model.someSubModelsVisible\" },\n parentNodeVisibilityStatus: createVisibilityStatus(\"hidden\"),\n }),\n );\n }\n\n return from(this.#idsCache.getModelCategories(modelId)).pipe(\n mergeMap((categoryIds) =>\n categoryIds.length === 0 ? of(createVisibilityStatus(\"visible\")) : this.getCategoryDisplayStatus({ modelId, categoryIds, ignoreTooltip: true }),\n ),\n mergeVisibilityStatuses({\n visible: \"modelsTree.model.allCategoriesVisible\",\n partial: \"modelsTree.model.someCategoriesHidden\",\n hidden: \"modelsTree.model.allCategoriesHidden\",\n }),\n );\n }),\n mergeVisibilityStatuses(),\n );\n });\n return createVisibilityHandlerResult(this, { ids: modelIds }, result, this.#props.overrides?.getModelDisplayStatus);\n }\n\n private getDefaultCategoryVisibilityStatus({\n modelId,\n categoryIds,\n ignoreTooltip,\n }: {\n categoryIds: Id64Arg;\n modelId: Id64String;\n ignoreTooltip?: boolean;\n }): VisibilityStatus {\n const viewport = this.#props.viewport;\n\n if (!viewport.view.viewsModel(modelId) || Id64.sizeOf(categoryIds) === 0) {\n return createVisibilityStatus(\"hidden\", getTooltipOptions(\"modelsTree.category.hiddenThroughModel\", ignoreTooltip));\n }\n\n let visibility: \"visible\" | \"hidden\" | \"unknown\" = \"unknown\";\n for (const categoryId of Id64.iterable(categoryIds)) {\n const override = this.#props.viewport.perModelCategoryVisibility.getOverride(modelId, categoryId);\n if (override === PerModelCategoryVisibility.Override.Show) {\n if (visibility === \"hidden\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = \"visible\";\n continue;\n }\n if (override === PerModelCategoryVisibility.Override.Hide) {\n if (visibility === \"visible\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = \"hidden\";\n continue;\n }\n const isVisible = viewport.view.viewsCategory(categoryId);\n if (isVisible && visibility === \"hidden\") {\n return createVisibilityStatus(\"partial\");\n }\n if (!isVisible && visibility === \"visible\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = isVisible ? \"visible\" : \"hidden\";\n }\n assert(visibility !== \"unknown\");\n\n return createVisibilityStatus(visibility);\n }\n\n private getCategoryDisplayStatus({ ignoreTooltip, ...props }: GetCategoryVisibilityStatusProps & { ignoreTooltip?: boolean }): Observable<VisibilityStatus> {\n const result = defer(() => {\n if (!this.#props.viewport.view.viewsModel(props.modelId)) {\n return from(this.#idsCache.getCategoriesModeledElements(props.modelId, props.categoryIds)).pipe(\n this.getSubModeledElementsVisibilityStatus({\n ignoreTooltips: ignoreTooltip,\n parentNodeVisibilityStatus: createVisibilityStatus(\"hidden\"),\n tooltips: {\n visible: undefined,\n hidden: \"modelsTree.category.hiddenThroughModel\",\n partial: \"modelsTree.category.someElementsOrSubModelsHidden\",\n },\n haveSubModel: \"yes\",\n }),\n );\n }\n\n return this.getVisibilityFromAlwaysAndNeverDrawnElements({\n categoryProps: { categoryIds: props.categoryIds, modelId: props.modelId },\n tooltips: {\n allElementsInAlwaysDrawnList: \"modelsTree.category.allElementsVisible\",\n allElementsInNeverDrawnList: \"modelsTree.category.allElementsHidden\",\n elementsInBothAlwaysAndNeverDrawn: \"modelsTree.category.someElementsAreHidden\",\n noElementsInExclusiveAlwaysDrawnList: \"modelsTree.category.allElementsHidden\",\n },\n defaultStatus: (categoryId) =>\n categoryId\n ? this.getDefaultCategoryVisibilityStatus({ modelId: props.modelId, categoryIds: categoryId })\n : this.getDefaultCategoryVisibilityStatus({ modelId: props.modelId, categoryIds: props.categoryIds }),\n ignoreTooltip,\n }).pipe(\n mergeMap((visibilityStatusAlwaysAndNeverDraw) => {\n return from(this.#idsCache.getCategoriesModeledElements(props.modelId, props.categoryIds)).pipe(\n this.getSubModeledElementsVisibilityStatus({\n tooltips: {\n visible: undefined,\n hidden: \"modelsTree.category.allElementsAndSubModelsHidden\",\n partial: \"modelsTree.category.someElementsOrSubModelsHidden\",\n },\n haveSubModel: \"yes\",\n parentNodeVisibilityStatus: visibilityStatusAlwaysAndNeverDraw,\n ignoreTooltips: ignoreTooltip,\n }),\n );\n }),\n );\n });\n return createVisibilityHandlerResult(this, props, result, this.#props.overrides?.getCategoryDisplayStatus);\n }\n\n private getClassGroupingNodeDisplayStatus(node: GroupingHierarchyNode): Observable<VisibilityStatus> {\n const { elementIds, modelId, categoryId } = this.getGroupingNodeInfo(node);\n const result = this.getElementsDisplayStatus({\n elementIds,\n modelId,\n categoryId,\n });\n return createVisibilityHandlerResult(this, { node }, result, this.#props.overrides?.getElementGroupingNodeDisplayStatus);\n }\n\n private getElementDisplayStatus({\n elementIds,\n modelId,\n categoryId,\n }: {\n elementIds: Id64Array;\n modelId: Id64String;\n categoryId: Id64String;\n }): Observable<VisibilityStatus> {\n const result = this.getElementsDisplayStatus({\n elementIds,\n modelId,\n categoryId,\n });\n return createVisibilityHandlerResult(this, { elementId: elementIds[0], modelId, categoryId }, result, this.#props.overrides?.getElementDisplayStatus);\n }\n\n private getElementsDisplayStatus(props: { elementIds: Id64Array | Id64Set; modelId: Id64String; categoryId: Id64String }): Observable<VisibilityStatus> {\n return defer(() => {\n const { modelId, categoryId, elementIds } = props;\n\n if (!this.#props.viewport.view.viewsModel(modelId)) {\n return of(elementIds).pipe(\n this.getSubModeledElementsVisibilityStatus({\n tooltips: {\n visible: undefined,\n hidden: undefined,\n partial: \"modelsTree.groupingNode.someElementsOrSubModelsHidden\",\n },\n parentNodeVisibilityStatus: createVisibilityStatus(\"hidden\"),\n haveSubModel: \"unknown\",\n }),\n );\n }\n\n return this.getVisibilityFromAlwaysAndNeverDrawnElements({\n elements: elementIds,\n defaultStatus: () => {\n const status = this.getDefaultCategoryVisibilityStatus({ categoryIds: categoryId, modelId, ignoreTooltip: true });\n return createVisibilityStatus(status.state, getTooltipOptions(`modelsTree.groupingNode.${status.state}ThroughCategory`));\n },\n tooltips: {\n allElementsInAlwaysDrawnList: \"modelsTree.groupingNode.allElementsVisible\",\n allElementsInNeverDrawnList: \"modelsTree.groupingNode.allElementsHidden\",\n elementsInBothAlwaysAndNeverDrawn: \"modelsTree.groupingNode.someElementsAreHidden\",\n noElementsInExclusiveAlwaysDrawnList: \"modelsTree.groupingNode.allElementsHidden\",\n },\n }).pipe(\n mergeMap((visibilityStatusAlwaysAndNeverDraw) => {\n return of(elementIds).pipe(\n this.getSubModeledElementsVisibilityStatus({\n tooltips: {\n visible: undefined,\n hidden: \"modelsTree.groupingNode.allElementsAndSubModelsHidden\",\n partial: \"modelsTree.groupingNode.someElementsOrSubModelsHidden\",\n },\n parentNodeVisibilityStatus: visibilityStatusAlwaysAndNeverDraw,\n haveSubModel: \"unknown\",\n }),\n );\n }),\n );\n });\n }\n /** Changes visibility of the items represented by the tree node. */\n private changeVisibilityObs(node: HierarchyNode, on: boolean): Observable<void> {\n const changeObs = defer(() => {\n if (HierarchyNode.isClassGroupingNode(node)) {\n if (node.extendedData?.hasDirectNonFilteredTargets && !node.filtering?.hasFilterTargetAncestor) {\n return this.changeFilteredNodeVisibility({ node, on });\n }\n return this.changeElementGroupingNodeState(node, on);\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (node.filtering?.filteredChildrenIdentifierPaths?.length && !node.filtering.isFilterTarget) {\n return this.changeFilteredNodeVisibility({ node, on });\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n return this.changeSubjectNodeState(\n node.key.instanceKeys.map((key) => key.id),\n on,\n );\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.changeModelState({ ids: node.key.instanceKeys.map(({ id }) => id), on });\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n if (!modelId) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.changeCategoryState({\n categoryIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n on,\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n if (!categoryId) {\n return EMPTY;\n }\n\n return this.changeElementsState({\n elementIds: new Set([...node.key.instanceKeys.map(({ id }) => id)]),\n modelId,\n categoryId,\n on,\n });\n });\n if (this.#props.viewport.isAlwaysDrawnExclusive) {\n return concat(this.removeAlwaysDrawnExclusive(), changeObs);\n }\n return changeObs;\n }\n\n private changeFilteredNodeVisibility({ on, ...props }: ChangeFilteredNodeVisibilityProps) {\n assert(this.#filteredTree !== undefined);\n return from(this.#filteredTree).pipe(\n map((filteredTree) => filteredTree.getVisibilityChangeTargets(props.node)),\n mergeMap(({ subjects, models, categories, elements }) => {\n const observables = new Array<Observable<void>>();\n if (subjects?.size) {\n observables.push(this.changeSubjectNodeState([...subjects], on));\n }\n\n if (models?.size) {\n observables.push(this.changeModelState({ ids: models, on }));\n }\n\n if (categories?.size) {\n observables.push(\n from(categories).pipe(\n mergeMap((key) => {\n const { modelId, categoryId } = parseCategoryKey(key);\n return this.changeCategoryState({ modelId, categoryIds: categoryId, on });\n }),\n ),\n );\n }\n\n if (elements?.size) {\n observables.push(\n from(elements).pipe(\n mergeMap(([categoryKey, elementsMap]) => {\n const { modelId, categoryId } = parseCategoryKey(categoryKey);\n return this.changeElementsState({ modelId, categoryId, elementIds: new Set([...elementsMap.keys()]), on });\n }),\n ),\n );\n }\n\n return merge(...observables);\n }),\n );\n }\n\n private removeAlwaysDrawnExclusive(): Observable<void> {\n return from(this.#idsCache.getAllCategories()).pipe(\n map((categoryIds) => {\n this.#props.viewport.changeCategoryDisplay(categoryIds, false, false);\n this.#props.viewport.clearNeverDrawn();\n this.#props.viewport.perModelCategoryVisibility.clearOverrides();\n this.#props.viewport.setAlwaysDrawn(this.#props.viewport.alwaysDrawn ?? new Set());\n }),\n );\n }\n\n private changeSubjectNodeState(ids: Id64Array, on: boolean): Observable<void> {\n const result = defer(() => {\n if (!this.#props.viewport.view.isSpatialView()) {\n return EMPTY;\n }\n\n return from(this.#idsCache.getSubjectModelIds(ids)).pipe(mergeMap((modelIds) => this.changeModelState({ ids: modelIds, on })));\n });\n return createVisibilityHandlerResult(this, { ids, on }, result, this.#props.overrides?.changeSubjectNodeState);\n }\n\n private changeModelState(props: ChangeModelVisibilityStateProps): Observable<void> {\n const { ids, on } = props;\n\n if (Id64.sizeOf(ids) === 0) {\n return EMPTY;\n }\n\n const result = defer(() => {\n const viewport = this.#props.viewport;\n if (!viewport.view.isSpatialView()) {\n return EMPTY;\n }\n\n const idsObs = from(Id64.iterable(ids));\n if (!on) {\n viewport.changeModelDisplay(ids, false);\n return idsObs.pipe(\n mergeMap(async (modelId) => ({ modelId, categoryIds: await this.#idsCache.getModelCategories(modelId) })),\n mergeMap(({ modelId, categoryIds }) => from(this.#idsCache.getCategoriesModeledElements(modelId, categoryIds))),\n mergeMap((modeledElementIds) => this.changeModelState({ ids: modeledElementIds, on })),\n );\n }\n\n return concat(\n defer(() => {\n viewport.perModelCategoryVisibility.clearOverrides(ids);\n return from(viewport.addViewedModels(ids));\n }),\n idsObs.pipe(\n mergeMap((modelId) => {\n return from(this.#idsCache.getModelCategories(modelId)).pipe(\n mergeMap((categoryIds) => this.changeCategoryState({ categoryIds, modelId, on: true })),\n );\n }),\n ),\n );\n });\n return createVisibilityHandlerResult(this, props, result, this.#props.overrides?.changeModelState);\n }\n\n private showModelWithoutAnyCategoriesOrElements(modelId: Id64String): Observable<void> {\n const viewport = this.#props.viewport;\n return forkJoin({\n categories: this.#idsCache.getModelCategories(modelId),\n alwaysDrawnElements: this.getAlwaysOrNeverDrawnElements({ modelIds: modelId, setType: \"always\" }),\n }).pipe(\n mergeMap(async ({ categories, alwaysDrawnElements }) => {\n const alwaysDrawn = this.#props.viewport.alwaysDrawn;\n if (alwaysDrawn && alwaysDrawnElements) {\n viewport.setAlwaysDrawn(setDifference(alwaysDrawn, alwaysDrawnElements));\n }\n categories.forEach((categoryId) => {\n this.changeCategoryStateInViewportAccordingToModelVisibility(modelId, categoryId, false);\n });\n await viewport.addViewedModels(modelId);\n }),\n );\n }\n\n private changeCategoryStateInViewportAccordingToModelVisibility(modelId: string, categoryId: string, on: boolean) {\n const viewport = this.#props.viewport;\n const isDisplayedInSelector = viewport.view.viewsCategory(categoryId);\n const override =\n on === isDisplayedInSelector\n ? PerModelCategoryVisibility.Override.None\n : on\n ? PerModelCategoryVisibility.Override.Show\n : PerModelCategoryVisibility.Override.Hide;\n viewport.perModelCategoryVisibility.setOverride(modelId, categoryId, override);\n if (override === PerModelCategoryVisibility.Override.None && on) {\n // we took off the override which means the category is displayed in selector, but\n // doesn't mean all its subcategories are displayed - this call ensures that\n viewport.changeCategoryDisplay(categoryId, true, true);\n }\n }\n\n private changeCategoryState(props: ChangeCategoryVisibilityStateProps): Observable<void> {\n const result = defer(() => {\n const viewport = this.#props.viewport;\n const { modelId, categoryIds, on } = props;\n return concat(\n props.on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY,\n defer(() => {\n for (const categoryId of Id64.iterable(categoryIds)) {\n this.changeCategoryStateInViewportAccordingToModelVisibility(modelId, categoryId, on);\n }\n return this.clearAlwaysAndNeverDrawnElements(props);\n }),\n from(this.#idsCache.getCategoriesModeledElements(modelId, categoryIds)).pipe(\n mergeMap((modeledElementIds) => this.changeModelState({ ids: modeledElementIds, on })),\n ),\n );\n });\n return createVisibilityHandlerResult(this, props, result, this.#props.overrides?.changeCategoryState);\n }\n\n private doChangeElementsState(props: ChangeGeometricElementsDisplayStateProps): Observable<void | undefined> {\n return defer(() => {\n const { modelId, categoryId, elementIds, on } = props;\n const viewport = this.#props.viewport;\n return concat(\n on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY,\n defer(() => {\n const categoryVisibility = this.getDefaultCategoryVisibilityStatus({ categoryIds: categoryId, modelId, ignoreTooltip: true });\n const isDisplayedByDefault = categoryVisibility.state === \"visible\";\n return this.queueElementsVisibilityChange(elementIds, on, isDisplayedByDefault);\n }),\n from(elementIds).pipe(\n mergeMap(async (elementId) => ({ elementId, isSubModel: await this.#idsCache.hasSubModel(elementId) })),\n filter(({ isSubModel }) => isSubModel),\n map(({ elementId }) => elementId),\n toArray(),\n mergeMap((subModelIds) => this.changeModelState({ ids: subModelIds, on })),\n ),\n );\n });\n }\n\n /**\n * Updates visibility of all grouping node's elements.\n * @see `changeElementState`\n */\n private changeElementGroupingNodeState(node: GroupingHierarchyNode, on: boolean): Observable<void> {\n const result = this.doChangeElementsState({ ...this.getGroupingNodeInfo(node), on });\n return createVisibilityHandlerResult(this, { node, on }, result, this.#props.overrides?.changeElementGroupingNodeState);\n }\n\n /**\n * Updates visibility of an element and all its child elements by adding them to the always/never drawn list.\n * @note If element is to be enabled and model is hidden, it will be enabled.\n */\n private changeElementsState(props: ChangeGeometricElementsDisplayStateProps): Observable<void> {\n const result = this.doChangeElementsState(props);\n return createVisibilityHandlerResult(this, props, result, this.#props.overrides?.changeElementsState);\n }\n\n private queueElementsVisibilityChange(elementIds: Id64Set, on: boolean, visibleByDefault: boolean) {\n const finishedSubject = new Subject<boolean>();\n // observable to track if visibility change is finished/cancelled\n const changeFinished = finishedSubject.pipe(\n startWith(false),\n shareReplay(1),\n filter((finished) => finished),\n );\n\n const changeObservable = from(elementIds).pipe(\n // check if visibility change is not finished (cancelled) due to change overall change request being cancelled\n takeUntil(changeFinished),\n this.changeElementStateNoChildrenOperator({ on, isDisplayedByDefault: visibleByDefault }),\n tap({\n next: () => {\n // notify that visibility change is finished\n finishedSubject.next(true);\n },\n }),\n );\n\n // queue visibility change. `changeObservable` will be subscribed to when other queue changes are finished\n this.#elementChangeQueue.next(changeObservable);\n\n // return observable that will emit when visibility change is finished\n return changeFinished.pipe(\n take(1),\n tap({\n unsubscribe: () => {\n // if this observable is unsubscribed before visibility change is finished, we have to notify that it queued change request is cancelled\n finishedSubject.next(true);\n },\n }),\n map(() => undefined),\n );\n }\n\n private changeElementStateNoChildrenOperator(props: { on: boolean; isDisplayedByDefault: boolean }): OperatorFunction<string, void> {\n return (elementIds: Observable<Id64String>) => {\n const { on, isDisplayedByDefault } = props;\n const isAlwaysDrawnExclusive = this.#props.viewport.isAlwaysDrawnExclusive;\n return elementIds.pipe(\n releaseMainThreadOnItemsCount(500),\n reduce<string, { changedNeverDrawn: boolean; changedAlwaysDrawn: boolean; neverDrawn: Id64Set | undefined; alwaysDrawn: Id64Set | undefined }>(\n (acc, elementId) => {\n if (acc.alwaysDrawn === undefined || acc.neverDrawn === undefined) {\n acc.alwaysDrawn = new Set(this.#props.viewport.alwaysDrawn || []);\n acc.neverDrawn = new Set(this.#props.viewport.neverDrawn || []);\n }\n if (on) {\n const wasRemoved = acc.neverDrawn.delete(elementId);\n acc.changedNeverDrawn ||= wasRemoved;\n // If exclusive mode is enabled, we must add the element to the always drawn list.\n if ((!isDisplayedByDefault || isAlwaysDrawnExclusive) && !acc.alwaysDrawn.has(elementId)) {\n acc.alwaysDrawn.add(elementId);\n acc.changedAlwaysDrawn = true;\n }\n } else {\n const wasRemoved = acc.alwaysDrawn.delete(elementId);\n acc.changedAlwaysDrawn ||= wasRemoved;\n // If exclusive mode is not enabled, we have to add the element to the never drawn list.\n if (isDisplayedByDefault && !isAlwaysDrawnExclusive && !acc.neverDrawn.has(elementId)) {\n acc.neverDrawn.add(elementId);\n acc.changedNeverDrawn = true;\n }\n }\n return acc;\n },\n {\n changedNeverDrawn: false,\n changedAlwaysDrawn: false,\n neverDrawn: undefined,\n alwaysDrawn: undefined,\n },\n ),\n map((state) => {\n state.changedNeverDrawn && state.neverDrawn && this.#props.viewport.setNeverDrawn(state.neverDrawn);\n state.changedAlwaysDrawn && state.alwaysDrawn && this.#props.viewport.setAlwaysDrawn(state.alwaysDrawn, this.#props.viewport.isAlwaysDrawnExclusive);\n }),\n );\n };\n }\n\n private getVisibilityFromAlwaysAndNeverDrawnElementsImpl(\n props: {\n alwaysDrawn: Id64Set | undefined;\n neverDrawn: Id64Set | undefined;\n totalCount: number;\n } & GetVisibilityFromAlwaysAndNeverDrawnElementsProps & { ignoreTooltip?: boolean },\n ): VisibilityStatus {\n const { alwaysDrawn, neverDrawn, totalCount, ignoreTooltip } = props;\n if (totalCount === 0) {\n return props.defaultStatus();\n }\n if (neverDrawn?.size === totalCount) {\n return createVisibilityStatus(\"hidden\", getTooltipOptions(props.tooltips.allElementsInNeverDrawnList, ignoreTooltip));\n }\n\n if (alwaysDrawn?.size === totalCount) {\n return createVisibilityStatus(\"visible\", getTooltipOptions(props.tooltips.allElementsInAlwaysDrawnList, ignoreTooltip));\n }\n\n const viewport = this.#props.viewport;\n if (viewport.isAlwaysDrawnExclusive && viewport.alwaysDrawn?.size) {\n return alwaysDrawn?.size\n ? createVisibilityStatus(\"partial\", getTooltipOptions(props.tooltips.elementsInBothAlwaysAndNeverDrawn, ignoreTooltip))\n : createVisibilityStatus(\"hidden\", getTooltipOptions(props.tooltips.noElementsInExclusiveAlwaysDrawnList, ignoreTooltip));\n }\n\n const status = props.defaultStatus();\n if ((status.state === \"visible\" && neverDrawn?.size) || (status.state === \"hidden\" && alwaysDrawn?.size)) {\n return createVisibilityStatus(\"partial\", getTooltipOptions(undefined, ignoreTooltip));\n }\n return status;\n }\n\n private getVisibilityFromAlwaysAndNeverDrawnElements({\n ignoreTooltip,\n ...props\n }: GetVisibilityFromAlwaysAndNeverDrawnElementsProps &\n ({ elements: Id64Set | Id64Array } | { categoryProps: { categoryIds: Id64Arg; modelId: Id64String } }) & {\n ignoreTooltip?: boolean;\n }): Observable<VisibilityStatus> {\n const viewport = this.#props.viewport;\n if (viewport.isAlwaysDrawnExclusive) {\n if (!viewport?.alwaysDrawn?.size) {\n return of(createVisibilityStatus(\"hidden\", getTooltipOptions(props.tooltips.noElementsInExclusiveAlwaysDrawnList, ignoreTooltip)));\n }\n } else if (!viewport?.neverDrawn?.size && !viewport?.alwaysDrawn?.size) {\n return of(props.defaultStatus());\n }\n\n if (\"elements\" in props) {\n return of(\n this.getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n alwaysDrawn: viewport.alwaysDrawn?.size ? setIntersection(props.elements, viewport.alwaysDrawn) : undefined,\n neverDrawn: viewport.neverDrawn?.size ? setIntersection(props.elements, viewport.neverDrawn) : undefined,\n totalCount: Id64.sizeOf(props.elements),\n ignoreTooltip,\n }),\n );\n }\n\n const { modelId, categoryIds } = props.categoryProps;\n return from(Id64.iterable(categoryIds)).pipe(\n mergeMap((categoryId) => {\n const totalCount = this.#idsCache.getCategoryElementsCount(modelId, categoryId);\n return forkJoin({\n totalCount,\n alwaysDrawn: this.getAlwaysOrNeverDrawnElements({ modelIds: modelId, categoryIds: categoryId, setType: \"always\" }),\n neverDrawn: this.getAlwaysOrNeverDrawnElements({ modelIds: modelId, categoryIds: categoryId, setType: \"never\" }),\n }).pipe(\n // There is a known bug:\n // Categories that don't have root elements will make visibility result incorrect\n // E.g.:\n // - CategoryA\n // - ElementA (CategoryA is visible)\n // - ChildElementB (CategoryB is hidden) ChildElementB is in always drawn list\n // Result will be \"partial\" because CategoryB will return hidden visibility, even though all elements are visible\n // TODO fix with: https://github.com/iTwin/viewer-components-react/issues/1100\n map((state) => {\n return this.getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n ...state,\n defaultStatus: () => props.defaultStatus(categoryId),\n ignoreTooltip,\n });\n }),\n );\n }),\n mergeVisibilityStatuses(),\n );\n }\n\n private getAlwaysOrNeverDrawnElements(props: GetElementsTreeProps): Observable<Id64Set> {\n return this.#alwaysAndNeverDrawnElements\n .getElementsTree(props)\n .pipe(map((childrenTree) => getIdsFromChildrenTree({ tree: childrenTree, predicate: ({ treeEntry }) => treeEntry.isInAlwaysOrNeverDrawnSet })));\n }\n\n private clearAlwaysAndNeverDrawnElements(props: { categoryIds: Id64Arg; modelId: Id64String }) {\n return forkJoin({\n alwaysDrawn: this.getAlwaysOrNeverDrawnElements({ modelIds: props.modelId, categoryIds: props.categoryIds, setType: \"always\" }),\n neverDrawn: this.getAlwaysOrNeverDrawnElements({ modelIds: props.modelId, categoryIds: props.categoryIds, setType: \"never\" }),\n }).pipe(\n map(({ alwaysDrawn, neverDrawn }) => {\n const viewport = this.#props.viewport;\n if (viewport.alwaysDrawn?.size && alwaysDrawn.size) {\n viewport.setAlwaysDrawn(setDifference(viewport.alwaysDrawn, alwaysDrawn));\n }\n if (viewport.neverDrawn?.size && neverDrawn.size) {\n viewport.setNeverDrawn(setDifference(viewport.neverDrawn, neverDrawn));\n }\n }),\n );\n }\n\n private getGroupingNodeInfo(node: GroupingHierarchyNode) {\n const modelId = ModelsTreeNode.getModelId(node);\n const categoryId = ModelsTreeNode.getCategoryId(node);\n assert(!!modelId && !!categoryId);\n\n const elementIds = new Set(node.groupedInstanceKeys.map((key) => key.id));\n return { modelId, categoryId, elementIds };\n }\n\n private getSubModeledElementsVisibilityStatus({\n parentNodeVisibilityStatus,\n haveSubModel,\n tooltips,\n ignoreTooltips,\n }: {\n parentNodeVisibilityStatus: VisibilityStatus;\n haveSubModel: \"yes\" | \"unknown\";\n tooltips: { [key in Visibility]: string | undefined };\n ignoreTooltips?: boolean;\n }): OperatorFunction<Id64Arg, VisibilityStatus> {\n return (obs) => {\n return obs.pipe(\n // ensure we're only looking at elements that have a sub-model\n mergeMap((modeledElementIds) => {\n if (haveSubModel === \"yes\") {\n return of(modeledElementIds);\n }\n return from(Id64.iterable(modeledElementIds)).pipe(\n mergeMap(async (elementId) => ({ elementId, hasSubModel: await this.#idsCache.hasSubModel(elementId) })),\n filter(({ hasSubModel }) => hasSubModel),\n map(({ elementId }) => elementId),\n toArray(),\n );\n }),\n // combine visibility status of sub-models with visibility status of parent node\n mergeMap((modeledElementIds) => {\n if (Id64.sizeOf(modeledElementIds) === 0) {\n return of(parentNodeVisibilityStatus);\n }\n return this.getModelVisibilityStatus({ modelIds: modeledElementIds }).pipe(\n startWith<VisibilityStatus>(parentNodeVisibilityStatus),\n mergeVisibilityStatuses(tooltips, ignoreTooltips),\n );\n }),\n );\n };\n }\n}\n\ninterface GetVisibilityFromAlwaysAndNeverDrawnElementsProps {\n tooltips: {\n allElementsInNeverDrawnList: string;\n allElementsInAlwaysDrawnList: string;\n elementsInBothAlwaysAndNeverDrawn: string;\n noElementsInExclusiveAlwaysDrawnList: string;\n };\n /** Status when always/never lists are empty and exclusive mode is off */\n defaultStatus: (categoryId?: Id64String) => VisibilityStatus;\n}\n\nfunction mergeVisibilities(obs: Observable<Visibility>): Observable<Visibility | \"empty\"> {\n return obs.pipe(\n reduceWhile(\n (x) => x.allVisible || x.allHidden,\n (acc, val) => {\n acc.allVisible &&= val === \"visible\";\n acc.allHidden &&= val === \"hidden\";\n return acc;\n },\n { allVisible: true, allHidden: true },\n ),\n map((x) => {\n if (!x) {\n return \"empty\";\n }\n return x.allVisible ? \"visible\" : x.allHidden ? \"hidden\" : \"partial\";\n }),\n );\n}\n\nfunction mergeVisibilityStatuses(\n tooltipMap?: { [key in Visibility]: string | undefined },\n ignoreTooltip?: boolean,\n): OperatorFunction<VisibilityStatus, VisibilityStatus> {\n return (obs) => {\n return obs.pipe(\n map((visibilityStatus) => visibilityStatus.state),\n mergeVisibilities,\n map((visibility) => {\n if (visibility === \"empty\") {\n visibility = \"visible\";\n }\n return createVisibilityStatus(visibility, getTooltipOptions(tooltipMap?.[visibility], ignoreTooltip));\n }),\n );\n };\n}\n\nfunction setDifference<T>(lhs: Iterable<T>, rhs: Set<T>): Set<T> {\n const result = new Set<T>();\n for (const x of lhs) {\n if (!rhs.has(x)) {\n result.add(x);\n }\n }\n return result;\n}\n\nfunction setIntersection<T>(lhs: Iterable<T>, rhs: Set<T>): Set<T> {\n const result = new Set<T>();\n for (const x of lhs) {\n if (rhs.has(x)) {\n result.add(x);\n }\n }\n return result;\n}\n\n/**\n * Enables display of all given models. Also enables display of all categories and clears always and\n * never drawn lists in the viewport.\n *\n * @param componentId Optional unique id of the component that consumes this function.\n * It can be any string, as long as it is not shared across different components.\n * @public\n */\nexport async function showAllModels(models: string[], viewport: Viewport, componentId?: GuidString) {\n await viewport.addViewedModels(models);\n viewport.clearNeverDrawn();\n viewport.clearAlwaysDrawn();\n\n const categories = await loadCategoriesFromViewport(viewport, componentId);\n if (categories.length === 0) {\n return;\n }\n const ids = categories.map((category) => category.categoryId);\n await enableCategoryDisplay(viewport, ids, true);\n}\n\n/**\n * Disables display of all given models.\n * @public\n */\nexport async function hideAllModels(models: string[], viewport: Viewport) {\n viewport.changeModelDisplay(models, false);\n}\n\n/**\n * Inverts display of all given models.\n * @public\n */\nexport async function invertAllModels(models: string[], viewport: Viewport) {\n const notViewedModels: string[] = [];\n const viewedModels: string[] = [];\n models.forEach((modelId) => {\n if (viewport.viewsModel(modelId)) {\n viewedModels.push(modelId);\n } else {\n notViewedModels.push(modelId);\n }\n });\n await viewport.addViewedModels(notViewedModels);\n viewport.changeModelDisplay(viewedModels, false);\n}\n\n/**\n * Based on the value of `enable` argument, either enables or disables display of given models.\n * @public\n */\nexport async function toggleModels(models: string[], enable: boolean, viewport: Viewport) {\n if (!models) {\n return;\n }\n if (enable) {\n viewport.changeModelDisplay(models, false);\n } else {\n await viewport.addViewedModels(models);\n }\n}\n\n/**\n * Checks if all given models are displayed in given viewport.\n * @public\n */\nexport function areAllModelsVisible(models: string[], viewport: Viewport) {\n return models.length !== 0 ? models.every((id) => viewport.viewsModel(id)) : false;\n}\n\nfunction getTooltipOptions(key: string | undefined, ignoreTooltip?: boolean) {\n return {\n useTooltip: ignoreTooltip ? (false as const) : key,\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/tree-widget-react",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.16.1",
|
|
4
4
|
"description": "Tree Widget React",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Bentley",
|
|
@@ -77,11 +77,11 @@
|
|
|
77
77
|
"dependencies": {
|
|
78
78
|
"@itwin/itwinui-icons-react": "^2.9.0",
|
|
79
79
|
"@itwin/itwinui-illustrations-react": "^2.1.0",
|
|
80
|
-
"@itwin/presentation-core-interop": "^1.3.
|
|
81
|
-
"@itwin/presentation-hierarchies": "^1.7.
|
|
82
|
-
"@itwin/presentation-hierarchies-react": "^1.9.
|
|
83
|
-
"@itwin/presentation-shared": "^1.2.
|
|
84
|
-
"@itwin/unified-selection": "^1.
|
|
80
|
+
"@itwin/presentation-core-interop": "^1.3.4",
|
|
81
|
+
"@itwin/presentation-hierarchies": "^1.7.4",
|
|
82
|
+
"@itwin/presentation-hierarchies-react": "^1.9.5",
|
|
83
|
+
"@itwin/presentation-shared": "^1.2.3",
|
|
84
|
+
"@itwin/unified-selection": "^1.6.1",
|
|
85
85
|
"classnames": "^2.5.1",
|
|
86
86
|
"react-error-boundary": "^5.0.0",
|
|
87
87
|
"rxjs": "^7.8.1"
|
|
@@ -110,9 +110,9 @@
|
|
|
110
110
|
"@itwin/oidc-signin-tool": "^5.0.0",
|
|
111
111
|
"@itwin/presentation-backend": "^5.0.0",
|
|
112
112
|
"@itwin/presentation-common": "^5.0.0",
|
|
113
|
-
"@itwin/presentation-components": "^5.12.
|
|
113
|
+
"@itwin/presentation-components": "^5.12.12",
|
|
114
114
|
"@itwin/presentation-frontend": "^5.0.0",
|
|
115
|
-
"@itwin/presentation-testing": "^5.4.
|
|
115
|
+
"@itwin/presentation-testing": "^5.4.9",
|
|
116
116
|
"@itwin/webgl-compatibility": "^5.0.0",
|
|
117
117
|
"@playwright/test": "^1.48.2",
|
|
118
118
|
"@testing-library/dom": "^10.4.0",
|