@itwin/tree-widget-react 4.0.0-alpha.13 → 4.0.0-alpha.15
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 +62 -1
- package/README.md +50 -2
- package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js.map +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.css +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js +25 -19
- 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 +3 -5
- 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 +7 -7
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +21 -17
- 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/CategoriesTreeVisibilityHandler.d.ts +0 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.js +352 -311
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js +4 -3
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.js +4 -3
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.d.ts +10 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js +268 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.d.ts +3 -2
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js +46 -8
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.d.ts +20 -7
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js +96 -20
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNode.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNode.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeVisibilityHandler.d.ts +3 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeVisibilityHandler.js +410 -253
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/FilteredTree.d.ts +37 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/FilteredTree.js +193 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/FilteredTree.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseFilteredPaths.d.ts +18 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseFilteredPaths.js +51 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseFilteredPaths.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.d.ts +4 -0
- package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.js +20 -17
- package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/Utils.d.ts +4 -0
- package/lib/esm/tree-widget-react/components/trees/common/Utils.js +49 -0
- package/lib/esm/tree-widget-react/components/trees/common/Utils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.d.ts +6 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.js +4 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.d.ts +23 -3
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.js +26 -5
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js +7 -8
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.d.ts +3 -3
- package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTree.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.d.ts +3 -3
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js +10 -9
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js +49 -34
- package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.d.ts +7 -17
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js +26 -16
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.d.ts +5 -5
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js +3 -2
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/index.d.ts +2 -0
- package/lib/esm/tree-widget-react/components/trees/index.js +3 -0
- package/lib/esm/tree-widget-react/components/trees/index.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js +3 -2
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.d.ts +12 -10
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +33 -29
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.d.ts +19 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js +12 -5
- package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +6 -4
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +24 -11
- 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 +35 -44
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +373 -186
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.d.ts +11 -2
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js +88 -34
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js.map +1 -1
- package/lib/public/locales/en/TreeWidget.json +11 -1
- package/package.json +12 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClassificationsTreeVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeVisibilityHandler.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, concatAll, defaultIfEmpty, defer, distinct, EMPTY, filter, firstValueFrom, forkJoin, from, fromEventPattern, map, merge, mergeAll, mergeMap,\n of, reduce, shareReplay, startWith, Subject, take, takeUntil, tap, 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 { AlwaysAndNeverDrawnElementInfo } from \"../../common/internal/AlwaysAndNeverDrawnElementInfo.js\";\nimport { toVoidPromise } from \"../../common/internal/Rxjs.js\";\nimport { createVisibilityStatus } from \"../../common/internal/Tooltip.js\";\nimport { setDifference, setIntersection } from \"../../common/internal/Utils.js\";\nimport { createVisibilityChangeEventListener } from \"../../common/internal/VisibilityChangeEventListener.js\";\nimport {\n changeElementStateNoChildrenOperator, enableCategoryDisplay, getElementOverriddenVisibility, getElementVisibility,\n getSubModeledElementsVisibilityStatus, getVisibilityFromAlwaysAndNeverDrawnElementsImpl, mergeVisibilityStatuses,\n} from \"../../common/internal/VisibilityUtils.js\";\nimport { createVisibilityHandlerResult } from \"../../common/UseHierarchyVisibility.js\";\nimport { ClassificationsTreeNode } from \"./ClassificationsTreeNode.js\";\n\nimport type { GetVisibilityFromAlwaysAndNeverDrawnElementsProps } from \"../../common/internal/VisibilityUtils.js\";\nimport type { Viewport } from \"@itwin/core-frontend\";\nimport type { HierarchyVisibilityHandler, VisibilityStatus } from \"../../common/UseHierarchyVisibility.js\";\nimport type { NonPartialVisibilityStatus } from \"../../common/internal/Tooltip.js\";\nimport type { Observable, Subscription } from \"rxjs\";\nimport type { ECClassHierarchyInspector } from \"@itwin/presentation-shared\";\nimport type { ClassificationsTreeIdsCache } from \"./ClassificationsTreeIdsCache.js\";\nimport type { IVisibilityChangeEventListener } from \"../../common/internal/VisibilityChangeEventListener.js\";\nimport type { Id64Arg, Id64Array, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport type { CategoryId, ElementId } from \"../../common/internal/Types.js\";\n\n/**\n * Props for `createClassificationsTreeVisibilityHandler`.\n * @internal\n */\nexport interface ClassificationsTreeVisibilityHandlerProps {\n viewport: Viewport;\n idsCache: ClassificationsTreeIdsCache;\n imodelAccess: ECClassHierarchyInspector;\n}\n\n/**\n * Creates an instance if `ClassificationsTreeVisibilityHandler`.\n * @internal\n */\nexport function createClassificationsTreeVisibilityHandler(props: ClassificationsTreeVisibilityHandlerProps): HierarchyVisibilityHandler & Disposable {\n return new ClassificationsTreeVisibilityHandlerImpl(props);\n}\n\nclass ClassificationsTreeVisibilityHandlerImpl implements HierarchyVisibilityHandler {\n private readonly _eventListener: IVisibilityChangeEventListener;\n private readonly _alwaysAndNeverDrawnElements: AlwaysAndNeverDrawnElementInfo;\n private readonly _idsCache: ClassificationsTreeIdsCache;\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: ClassificationsTreeVisibilityHandlerProps) {\n this._eventListener = createVisibilityChangeEventListener({\n viewport: _props.viewport,\n listeners: {\n models: true,\n categories: true,\n elements: true,\n },\n });\n this._alwaysAndNeverDrawnElements = new AlwaysAndNeverDrawnElementInfo(_props.viewport);\n this._idsCache = this._props.idsCache;\n this._subscriptions.push(this._elementChangeQueue.pipe(concatAll()).subscribe());\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 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(\"disabled\")),\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 private getVisibilityStatusObs(node: HierarchyNode): Observable<VisibilityStatus> {\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (ClassificationsTreeNode.isClassificationTableNode(node)) {\n return this.getClassificationTableDisplayStatus({\n classificationTableIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n });\n }\n\n if (ClassificationsTreeNode.isClassificationNode(node)) {\n return this.getClassificationDisplayStatus({\n classificationIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n });\n }\n\n return this.getGeometricElementDisplayStatus({\n elementId: (() => {\n assert(node.key.instanceKeys.length === 1);\n return node.key.instanceKeys[0].id;\n })(),\n modelId: ClassificationsTreeNode.getModelId(node),\n categoryId: ClassificationsTreeNode.getCategoryId(node),\n elementType: node.extendedData?.type,\n });\n }\n\n private getClassificationTableDisplayStatus(props: { classificationTableIds: Id64Array }): Observable<VisibilityStatus> {\n const result = defer(() => {\n return from(this._idsCache.getAllContainedCategories(props.classificationTableIds)).pipe(\n mergeMap(({ drawing, spatial }) =>\n merge(\n of(drawing).pipe(mergeMap((categoryIds) => this.getCategoryDisplayStatus({ categoryIds, type: \"DrawingCategory\" }))),\n of(spatial).pipe(mergeMap((categoryIds) => this.getCategoryDisplayStatus({ categoryIds, type: \"SpatialCategory\" }))),\n ),\n ),\n mergeVisibilityStatuses,\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private getClassificationDisplayStatus(props: { classificationIds: Id64Array }): Observable<VisibilityStatus> {\n const result = defer(() => {\n return from(this._idsCache.getAllContainedCategories(props.classificationIds)).pipe(\n mergeMap(({ drawing, spatial }) =>\n merge(\n of(drawing).pipe(mergeMap((categoryIds) => this.getCategoryDisplayStatus({ categoryIds, type: \"DrawingCategory\" }))),\n of(spatial).pipe(mergeMap((categoryIds) => this.getCategoryDisplayStatus({ categoryIds, type: \"SpatialCategory\" }))),\n ),\n ),\n mergeVisibilityStatuses,\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private getModelVisibilityStatus({ modelIds }: { modelIds: Id64Array | Id64Set }): Observable<VisibilityStatus> {\n const result = defer(() => {\n const viewport = this._props.viewport;\n return from(modelIds).pipe(\n distinct(),\n mergeMap((modelId) => {\n if (!viewport.view.viewsModel(modelId)) {\n return from(this._idsCache.getModelCategoryIds(modelId)).pipe(\n mergeMap(({ drawing, spatial }) => merge(drawing, spatial)),\n toArray(),\n mergeMap((categoryIds) => from(this._idsCache.getCategoriesModeledElements(modelId, categoryIds))),\n getSubModeledElementsVisibilityStatus({\n parentNodeVisibilityStatus: createVisibilityStatus(\"hidden\"),\n getModelVisibilityStatus: (modelProps) => this.getModelVisibilityStatus(modelProps),\n }),\n );\n }\n return from(this._idsCache.getModelCategoryIds(modelId)).pipe(\n mergeMap(({ drawing, spatial }) =>\n merge(\n of(drawing).pipe(mergeMap((categoryIds) => this.getCategoryDisplayStatus({ modelId, categoryIds, type: \"DrawingCategory\" }))),\n of(spatial).pipe(mergeMap((categoryIds) => this.getCategoryDisplayStatus({ modelId, categoryIds, type: \"SpatialCategory\" }))),\n ),\n ),\n mergeVisibilityStatuses,\n );\n }),\n mergeVisibilityStatuses,\n );\n });\n return createVisibilityHandlerResult(this, { ids: modelIds }, result, undefined);\n }\n\n private getDefaultModelsCategoryVisibilityStatus({ modelId, categoryIds }: { categoryIds: Id64Array; modelId: Id64String }): VisibilityStatus {\n const viewport = this._props.viewport;\n\n if (!viewport.view.viewsModel(modelId)) {\n return createVisibilityStatus(\"hidden\");\n }\n\n let visibleCount = 0;\n let hiddenCount = 0;\n let visibleThroughCategorySelectorCount = 0;\n for (const categoryId of categoryIds) {\n if (viewport.view.viewsCategory(categoryId)) {\n ++visibleThroughCategorySelectorCount;\n }\n\n const override = this._props.viewport.perModelCategoryVisibility.getOverride(modelId, categoryId);\n if (override === PerModelCategoryVisibility.Override.Show) {\n ++visibleCount;\n continue;\n }\n if (override === PerModelCategoryVisibility.Override.Hide) {\n ++hiddenCount;\n continue;\n }\n if (visibleCount > 0 && hiddenCount > 0) {\n return createVisibilityStatus(\"partial\");\n }\n }\n if (hiddenCount + visibleCount > 0) {\n return createVisibilityStatus(hiddenCount > 0 ? \"hidden\" : \"visible\");\n }\n\n return createVisibilityStatus(visibleThroughCategorySelectorCount > 0 ? \"visible\" : \"hidden\");\n }\n\n private getDefaultCategoryVisibilityStatus({ categoryIds }: { categoryIds: Array<CategoryId> }): Observable<VisibilityStatus> {\n const result = from(categoryIds).pipe(\n mergeMap(async (categoryId) => {\n let visibility: \"visible\" | \"hidden\" | \"unknown\" = \"unknown\";\n const categoryModels = [...(await this._idsCache.getCategoriesElementModels([categoryId], true)).values()].flat();\n let nonDefaultModelDisplayStatesCount = 0;\n for (const modelId of categoryModels) {\n if (!this._props.viewport.view.viewsModel(modelId)) {\n if (visibility === \"visible\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = \"hidden\";\n ++nonDefaultModelDisplayStatesCount;\n continue;\n }\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 ++nonDefaultModelDisplayStatesCount;\n continue;\n }\n if (override === PerModelCategoryVisibility.Override.Hide) {\n if (visibility === \"visible\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = \"hidden\";\n ++nonDefaultModelDisplayStatesCount;\n continue;\n }\n }\n\n if (categoryModels.length > 0 && nonDefaultModelDisplayStatesCount === categoryModels.length) {\n assert(visibility === \"visible\" || visibility === \"hidden\");\n return createVisibilityStatus(visibility);\n }\n\n if (!this._props.viewport.view.viewsCategory(categoryId)) {\n return createVisibilityStatus(visibility === \"visible\" ? \"partial\" : \"hidden\");\n }\n\n if (visibility === \"hidden\") {\n return createVisibilityStatus(\"partial\");\n }\n return createVisibilityStatus(\"visible\");\n }),\n mergeVisibilityStatuses,\n );\n return result;\n }\n\n private getCategoryDisplayStatus(props: {\n modelId?: Id64String;\n categoryIds: Id64Array;\n type: \"DrawingCategory\" | \"SpatialCategory\";\n }): Observable<VisibilityStatus> {\n const result = defer(() => {\n if (props.categoryIds.length === 0) {\n return EMPTY;\n }\n\n const isSupportedInView =\n (this._props.viewport.view.is3d() && props.type === \"SpatialCategory\") || (this._props.viewport.view.is2d() && props.type === \"DrawingCategory\");\n if (!isSupportedInView) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n const modelsObservable = props.modelId\n ? of(new Map(props.categoryIds.map((id) => [id, [props.modelId!]])))\n : from(this._idsCache.getCategoriesElementModels(props.categoryIds));\n return merge(\n // get visibility status from always and never drawn elements\n modelsObservable.pipe(\n mergeMap((categoryModelsMap) => {\n if (categoryModelsMap.size === 0) {\n return props.modelId\n ? of(this.getDefaultModelsCategoryVisibilityStatus({ modelId: props.modelId, categoryIds: props.categoryIds }))\n : from(this.getDefaultCategoryVisibilityStatus({ categoryIds: props.categoryIds }));\n }\n return from(categoryModelsMap).pipe(\n mergeMap(([category, models]) =>\n from(models).pipe(\n mergeMap((model) => {\n if (this._props.viewport.view.viewsModel(model)) {\n return this.getVisibilityFromAlwaysAndNeverDrawnElements({\n queryProps: props,\n defaultStatus: () => this.getDefaultModelsCategoryVisibilityStatus({ modelId: model, categoryIds: [category] }),\n }).pipe(\n mergeMap((visibilityStatusAlwaysAndNeverDraw) => {\n return from(this._idsCache.getCategoriesModeledElements(model, [category])).pipe(\n getSubModeledElementsVisibilityStatus({\n parentNodeVisibilityStatus: visibilityStatusAlwaysAndNeverDraw,\n getModelVisibilityStatus: (modelProps) => this.getModelVisibilityStatus(modelProps),\n }),\n );\n }),\n );\n }\n return from(this._idsCache.getCategoriesModeledElements(model, [category])).pipe(\n getSubModeledElementsVisibilityStatus({\n parentNodeVisibilityStatus: createVisibilityStatus(\"hidden\"),\n getModelVisibilityStatus: (modelProps) => this.getModelVisibilityStatus(modelProps),\n }),\n );\n }),\n ),\n ),\n mergeVisibilityStatuses,\n );\n }),\n map((visibilityStatus) => {\n return { visibilityStatus, type: 0 as const };\n }),\n ),\n // get category status\n (props.modelId\n ? of(this.getDefaultModelsCategoryVisibilityStatus({ modelId: props.modelId, categoryIds: props.categoryIds }))\n : from(this.getDefaultCategoryVisibilityStatus({ categoryIds: props.categoryIds }))\n ).pipe(\n map((visibilityStatus) => {\n return { visibilityStatus, type: 1 as const };\n }),\n ),\n ).pipe(\n toArray(),\n mergeMap(\n async (\n visibilityStatusesInfo: Array<{ visibilityStatus: VisibilityStatus; type: 1 } | { visibilityStatus: VisibilityStatus | undefined; type: 0 }>,\n ) => {\n let defaultStatus: VisibilityStatus | undefined;\n let alwaysNeverDrawStatus: VisibilityStatus | undefined;\n visibilityStatusesInfo.forEach((visibilityStatusInfo) => {\n switch (visibilityStatusInfo.type) {\n case 0:\n alwaysNeverDrawStatus = visibilityStatusInfo.visibilityStatus;\n break;\n case 1:\n defaultStatus = visibilityStatusInfo.visibilityStatus;\n break;\n }\n });\n assert(defaultStatus !== undefined);\n\n if (defaultStatus.state === \"partial\") {\n return defaultStatus;\n }\n\n // This can happen if:\n // a) showElements is set to false\n // b) root category does not have any elements (that dont have Parent)\n // In both cases we don't need to look at modeled elements visibility\n if (alwaysNeverDrawStatus === undefined) {\n return defaultStatus;\n }\n // In cases where Category has model (it means that category is under hidden subModel)\n // We don't need to look at default category status, it is already accounted for in always/never drawn visibility\n if (props.modelId) {\n return alwaysNeverDrawStatus;\n }\n\n if (alwaysNeverDrawStatus.state === \"partial\" || alwaysNeverDrawStatus.state !== defaultStatus.state) {\n return createVisibilityStatus(\"partial\");\n }\n return alwaysNeverDrawStatus;\n },\n ),\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private getVisibilityFromAlwaysAndNeverDrawnElements(\n props: GetVisibilityFromAlwaysAndNeverDrawnElementsProps &\n ({ elements: Set<ElementId> } | { queryProps: { modelId?: Id64String; categoryIds: Id64Array } }),\n ): Observable<VisibilityStatus> {\n const viewport = this._props.viewport;\n if (viewport.isAlwaysDrawnExclusive) {\n if (!viewport?.alwaysDrawn?.size) {\n return of(createVisibilityStatus(\"hidden\"));\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 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 viewport,\n }),\n );\n }\n const { modelId, categoryIds } = props.queryProps;\n const totalCount = (\n modelId ? of(new Map(categoryIds.map((categoryId) => [categoryId, [modelId]]))) : from(this._idsCache.getCategoriesElementModels(categoryIds))\n ).pipe(\n mergeMap((categoriesMap) => from(categoriesMap)),\n mergeMap(([categoryId, modelIds]) => {\n return from(modelIds).pipe(\n mergeMap((modelOfCategory) => from(this._idsCache.getCategoryElementsCount(modelOfCategory, categoryId))),\n reduce((acc, specificModelCategoryCount) => acc + specificModelCategoryCount, 0),\n );\n }),\n );\n return forkJoin({\n totalCount,\n alwaysDrawn: this._alwaysAndNeverDrawnElements.getAlwaysDrawnElements(props.queryProps),\n neverDrawn: this._alwaysAndNeverDrawnElements.getNeverDrawnElements(props.queryProps),\n }).pipe(\n map((state) => {\n return getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n ...state,\n viewport,\n });\n }),\n );\n }\n\n private getGeometricElementDisplayStatus(props: {\n elementId: Id64String;\n categoryId: Id64String;\n modelId: Id64String;\n elementType: string;\n }): Observable<VisibilityStatus> {\n const result: Observable<VisibilityStatus> = defer(() => {\n const viewport = this._props.viewport;\n const { elementId, modelId, categoryId, elementType } = props;\n\n const isSupportedInView =\n (viewport.view.is3d() && elementType === \"GeometricElement3d\") || (viewport.view.is2d() && elementType === \"GeometricElement2d\");\n if (!isSupportedInView) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n const viewsModel = viewport.view.viewsModel(modelId);\n const elementStatus = getElementOverriddenVisibility({\n elementId,\n viewport,\n });\n\n return from(this._idsCache.hasSubModel(elementId)).pipe(\n mergeMap((hasSubModel) => (hasSubModel ? this.getModelVisibilityStatus({ modelIds: [elementId] }) : of(undefined))),\n map((subModelVisibilityStatus) =>\n getElementVisibility(\n viewsModel,\n elementStatus,\n this.getDefaultModelsCategoryVisibilityStatus({ categoryIds: [categoryId], modelId }) as NonPartialVisibilityStatus,\n subModelVisibilityStatus,\n ),\n ),\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private changeVisibilityObs(node: HierarchyNode, on: boolean): Observable<void> {\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (ClassificationsTreeNode.isClassificationTableNode(node)) {\n return this.changeClassificationTableDisplayState({\n classificationTableIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n on,\n });\n }\n\n if (ClassificationsTreeNode.isClassificationNode(node)) {\n return this.changeClassificationDisplayState({\n classificationIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n on,\n });\n }\n\n return this.changeGeometricElementsDisplayState({\n elementIds: new Set([...node.key.instanceKeys.map(({ id }) => id)]),\n modelId: ClassificationsTreeNode.getModelId(node),\n categoryId: ClassificationsTreeNode.getCategoryId(node),\n on,\n });\n }\n\n private changeClassificationTableDisplayState(props: { classificationTableIds: Id64Array; on: boolean }): Observable<void> {\n const result = defer(() => {\n return from(this._idsCache.getAllContainedCategories(props.classificationTableIds)).pipe(\n mergeMap(({ drawing, spatial }) => merge(drawing, spatial)),\n toArray(),\n mergeMap((categoryIds) => {\n return this.changeCategoryDisplayState({ categoryIds, on: props.on });\n }),\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private changeClassificationDisplayState(props: { classificationIds: Id64Array; on: boolean }): Observable<void> {\n const result = defer(() => {\n return from(this._idsCache.getAllContainedCategories(props.classificationIds)).pipe(\n mergeMap(({ drawing, spatial }) => merge(drawing, spatial)),\n toArray(),\n mergeMap((categoryIds) => {\n return this.changeCategoryDisplayState({ categoryIds, on: props.on });\n }),\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private changeModelDisplayState(props: { modelIds: Id64Arg; on: boolean }): Observable<void> {\n const { modelIds, on } = props;\n\n if (Id64.sizeOf(modelIds) === 0) {\n return EMPTY;\n }\n\n const result = defer(() => {\n const viewport = this._props.viewport;\n\n viewport.perModelCategoryVisibility.clearOverrides(modelIds);\n const idsObs = from(Id64.iterable(modelIds));\n if (!on) {\n viewport.changeModelDisplay(modelIds, false);\n return idsObs.pipe(\n mergeMap(async (modelId) => ({ modelId, categoryIds: await this._idsCache.getModelCategoryIds(modelId) })),\n mergeMap(({ modelId, categoryIds }) => from(this._idsCache.getCategoriesModeledElements(modelId, [...categoryIds.drawing, ...categoryIds.spatial]))),\n mergeMap((modeledElementIds) => this.changeModelDisplayState({ modelIds: modeledElementIds, on })),\n );\n }\n\n return concat(\n from(viewport.addViewedModels(modelIds)),\n idsObs.pipe(\n mergeMap((modelId) => {\n return from(this._idsCache.getModelCategoryIds(modelId)).pipe(\n mergeMap(({ drawing, spatial }) => merge(drawing, spatial)),\n mergeMap((categoryId) => this.changeCategoryDisplayState({ categoryIds: [categoryId], modelId, on })),\n );\n }),\n ),\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private showModelWithoutAnyCategoriesOrElements(modelId: Id64String): Observable<void> {\n const viewport = this._props.viewport;\n return forkJoin({\n categories: this._idsCache.getModelCategoryIds(modelId),\n alwaysDrawnElements: this._alwaysAndNeverDrawnElements.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.drawing.forEach((categoryId) => {\n this.changeCategoryStateInViewportAccordingToModelVisibility(modelId, categoryId, false);\n });\n categories.spatial.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\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);\n }\n }\n\n private changeCategoryDisplayState(props: { categoryIds: Id64Array; modelId?: Id64String; on: boolean }): Observable<void> {\n const result = defer(() => {\n const { modelId, categoryIds, on } = props;\n const viewport = this._props.viewport;\n const modelIdsObservable = modelId\n ? of(new Map(categoryIds.map((id) => [id, [modelId]])))\n : from(this._idsCache.getCategoriesElementModels(categoryIds, true));\n return concat(\n modelId ? EMPTY : from(enableCategoryDisplay(viewport, categoryIds, on)),\n on\n ? modelIdsObservable.pipe(\n mergeMap((categoriesMap) => from(categoriesMap.values())),\n mergeAll(),\n filter((modelIdToCheck) => !viewport.view.viewsModel(modelIdToCheck)),\n mergeMap((modelIdToCheck) => this.showModelWithoutAnyCategoriesOrElements(modelIdToCheck)),\n )\n : EMPTY,\n modelIdsObservable.pipe(\n mergeMap((categoriesMap) => from(categoriesMap.entries())),\n mergeMap(([categoryId, modelIds]) => {\n return from(modelIds).pipe(\n mergeMap((modelOfCategory) => {\n this.changeCategoryStateInViewportAccordingToModelVisibility(modelOfCategory, categoryId, on);\n return this._alwaysAndNeverDrawnElements.clearAlwaysAndNeverDrawnElements({ modelId: modelOfCategory, categoryIds: [categoryId] });\n }),\n );\n }),\n ),\n modelIdsObservable.pipe(\n mergeMap((categoriesMap) => from(categoriesMap.entries())),\n mergeMap(([categoryId, modelIds]) => {\n return from(modelIds).pipe(\n mergeMap((modelOfCategory) =>\n from(this._idsCache.getCategoriesModeledElements(modelOfCategory, [categoryId])).pipe(\n mergeMap((modeledElementIds) => this.changeModelDisplayState({ modelIds: modeledElementIds, on })),\n ),\n ),\n );\n }),\n ),\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private changeGeometricElementsDisplayState(props: { elementIds: Id64Set; modelId: Id64String; categoryId: Id64String; on: boolean }): Observable<void> {\n const { modelId, categoryId, elementIds, on } = props;\n const viewport = this._props.viewport;\n const result = concat(\n on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY,\n defer(() => {\n const categoryVisibility = this.getDefaultModelsCategoryVisibilityStatus({ categoryIds: [categoryId], modelId });\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.changeModelDisplayState({ modelIds: subModelIds, on })),\n ),\n );\n return createVisibilityHandlerResult(this, props, result, undefined);\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 changeElementStateNoChildrenOperator({ on, isDisplayedByDefault: visibleByDefault, viewport: this._props.viewport }),\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"]}
|
|
1
|
+
{"version":3,"file":"ClassificationsTreeVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeVisibilityHandler.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 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 { AlwaysAndNeverDrawnElementInfo } from \"../../common/internal/AlwaysAndNeverDrawnElementInfo.js\";\nimport { toVoidPromise } from \"../../common/internal/Rxjs.js\";\nimport { createVisibilityStatus } from \"../../common/internal/Tooltip.js\";\nimport { getSetFromId64Arg, releaseMainThreadOnItemsCount, setDifference, setIntersection } from \"../../common/internal/Utils.js\";\nimport { createVisibilityChangeEventListener } from \"../../common/internal/VisibilityChangeEventListener.js\";\nimport {\n changeElementStateNoChildrenOperator,\n enableCategoryDisplay,\n getVisibilityFromAlwaysAndNeverDrawnElementsImpl,\n mergeVisibilityStatuses,\n} from \"../../common/internal/VisibilityUtils.js\";\nimport { createVisibilityHandlerResult } from \"../../common/UseHierarchyVisibility.js\";\nimport { ClassificationsTreeNode } from \"./ClassificationsTreeNode.js\";\nimport { createFilteredTree } from \"./FilteredTree.js\";\n\nimport type { Observable, Subscription } from \"rxjs\";\nimport type { Id64Arg, Id64String } from \"@itwin/core-bentley\";\nimport type { Viewport } from \"@itwin/core-frontend\";\nimport type { HierarchyFilteringPath } from \"@itwin/presentation-hierarchies\";\nimport type { ECClassHierarchyInspector } from \"@itwin/presentation-shared\";\nimport type { IVisibilityChangeEventListener } from \"../../common/internal/VisibilityChangeEventListener.js\";\nimport type { GetVisibilityFromAlwaysAndNeverDrawnElementsProps } from \"../../common/internal/VisibilityUtils.js\";\nimport type { CategoryId, ModelId } from \"../../common/internal/Types.js\";\nimport type { HierarchyVisibilityHandler, VisibilityStatus } from \"../../common/UseHierarchyVisibility.js\";\nimport type { ClassificationsTreeIdsCache } from \"./ClassificationsTreeIdsCache.js\";\nimport type { FilteredTree } from \"./FilteredTree.js\";\n\n/**\n * Props for `createClassificationsTreeVisibilityHandler`.\n * @internal\n */\nexport interface ClassificationsTreeVisibilityHandlerProps {\n viewport: Viewport;\n idsCache: ClassificationsTreeIdsCache;\n imodelAccess: ECClassHierarchyInspector;\n filteredPaths?: HierarchyFilteringPath[];\n}\n\ninterface GetFilteredNodeVisibilityProps {\n node: HierarchyNode;\n}\n\ninterface ChangeFilteredNodeVisibilityProps extends GetFilteredNodeVisibilityProps {\n on: boolean;\n}\n\n/**\n * Creates an instance if `ClassificationsTreeVisibilityHandler`.\n * @internal\n */\nexport function createClassificationsTreeVisibilityHandler(props: ClassificationsTreeVisibilityHandlerProps): HierarchyVisibilityHandler & Disposable {\n return new ClassificationsTreeVisibilityHandlerImpl(props);\n}\n\nclass ClassificationsTreeVisibilityHandlerImpl implements HierarchyVisibilityHandler {\n private readonly _eventListener: IVisibilityChangeEventListener;\n private readonly _alwaysAndNeverDrawnElements: AlwaysAndNeverDrawnElementInfo;\n private readonly _idsCache: ClassificationsTreeIdsCache;\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: ClassificationsTreeVisibilityHandlerProps) {\n this._eventListener = createVisibilityChangeEventListener({\n viewport: _props.viewport,\n listeners: {\n models: true,\n categories: true,\n elements: true,\n },\n });\n this._alwaysAndNeverDrawnElements = new AlwaysAndNeverDrawnElementInfo(_props.viewport);\n this._idsCache = this._props.idsCache;\n if (_props.filteredPaths) {\n this._filteredTree = createFilteredTree({\n idsCache: this._idsCache,\n filteringPaths: _props.filteredPaths,\n imodelAccess: this._props.imodelAccess,\n });\n }\n this._subscriptions.push(this._elementChangeQueue.pipe(concatAll()).subscribe());\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 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(\"disabled\")),\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 private getVisibilityStatusObs(node: HierarchyNode): Observable<VisibilityStatus> {\n if (node.filtering?.filteredChildrenIdentifierPaths?.length && !node.filtering.isFilterTarget) {\n return this.getFilteredNodeVisibility({ node });\n }\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (ClassificationsTreeNode.isClassificationTableNode(node)) {\n return this.getClassificationTablesVisibilityStatus({\n classificationTableIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n });\n }\n\n if (ClassificationsTreeNode.isClassificationNode(node)) {\n return this.getClassificationsVisibilityStatus({\n classificationIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n });\n }\n\n return this.getElementsVisibilityStatus({\n elementIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n modelId: ClassificationsTreeNode.getModelId(node),\n categoryId: ClassificationsTreeNode.getCategoryId(node),\n type: node.extendedData?.type,\n });\n }\n\n private getFilteredNodeVisibility(props: GetFilteredNodeVisibilityProps) {\n return from(this.getVisibilityChangeTargets(props)).pipe(\n mergeMap(({ classificationIds, classificationTableIds, elements2d, elements3d }) => {\n const observables = new Array<Observable<VisibilityStatus>>();\n if (classificationTableIds?.size) {\n observables.push(this.getClassificationTablesVisibilityStatus({ classificationTableIds }));\n }\n\n if (classificationIds?.size) {\n observables.push(this.getClassificationsVisibilityStatus({ classificationIds }));\n }\n if (elements2d?.length) {\n observables.push(\n from(elements2d).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(({ modelId, categoryId, elementIds }) => {\n return from(elementIds).pipe(\n releaseMainThreadOnItemsCount(1000),\n mergeMap((elementId) => this.getElementsVisibilityStatus({ modelId, categoryId, elementIds: elementId, type: \"GeometricElement2d\" })),\n );\n }),\n ),\n );\n }\n\n if (elements3d?.length) {\n observables.push(\n from(elements3d).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(({ modelId, categoryId, elementIds }) => {\n return from(elementIds).pipe(\n releaseMainThreadOnItemsCount(1000),\n mergeMap((elementId) => this.getElementsVisibilityStatus({ modelId, categoryId, elementIds: elementId, type: \"GeometricElement3d\" })),\n );\n }),\n ),\n );\n }\n\n return merge(...observables);\n }),\n mergeVisibilityStatuses,\n );\n }\n\n private async getVisibilityChangeTargets({ node }: GetFilteredNodeVisibilityProps) {\n const filteredTree = await this._filteredTree;\n return filteredTree ? filteredTree.getVisibilityChangeTargets(node) : {};\n }\n\n private getClassificationTablesVisibilityStatus(props: { classificationTableIds: Id64Arg }): Observable<VisibilityStatus> {\n const result = defer(() => {\n return from(this._idsCache.getAllContainedCategories(props.classificationTableIds)).pipe(\n mergeMap(({ drawing, spatial }) =>\n merge(\n of(drawing).pipe(mergeMap((categoryIds) => this.getCategoriesVisibilityStatus({ modelId: undefined, categoryIds, type: \"DrawingCategory\" }))),\n of(spatial).pipe(mergeMap((categoryIds) => this.getCategoriesVisibilityStatus({ modelId: undefined, categoryIds, type: \"SpatialCategory\" }))),\n ),\n ),\n mergeVisibilityStatuses,\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private getClassificationsVisibilityStatus(props: { classificationIds: Id64Arg }): Observable<VisibilityStatus> {\n const result = defer(() => {\n return from(this._idsCache.getAllContainedCategories(props.classificationIds)).pipe(\n mergeMap(({ drawing, spatial }) =>\n merge(\n of(drawing).pipe(mergeMap((categoryIds) => this.getCategoriesVisibilityStatus({ modelId: undefined, categoryIds, type: \"DrawingCategory\" }))),\n of(spatial).pipe(mergeMap((categoryIds) => this.getCategoriesVisibilityStatus({ modelId: undefined, categoryIds, type: \"SpatialCategory\" }))),\n ),\n ),\n mergeVisibilityStatuses,\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private getModelsVisibilityStatus({ modelIds }: { modelIds: Id64Arg }): Observable<VisibilityStatus> {\n const result = defer(() => {\n return from(Id64.iterable(modelIds)).pipe(\n mergeMap((modelId) => {\n // For hidden models we only need to check subModels\n if (!this._props.viewport.view.viewsModel(modelId)) {\n return this.getSubModels({ modelIds: modelId }).pipe(\n mergeMap(({ subModels }) => {\n if (subModels && Id64.sizeOf(subModels) > 0) {\n return this.getModelsVisibilityStatus({ modelIds: subModels }).pipe(\n map((subModelsVisibilityStatus) =>\n subModelsVisibilityStatus.state !== \"hidden\" ? createVisibilityStatus(\"partial\") : createVisibilityStatus(\"hidden\"),\n ),\n );\n }\n return of(createVisibilityStatus(\"hidden\"));\n }),\n );\n }\n // For visible models we need to check all categories\n return this.getCategories({ modelIds: modelId }).pipe(\n mergeMap(({ drawingCategories, spatialCategories }) =>\n merge(\n drawingCategories\n ? of(drawingCategories).pipe(mergeMap((categoryIds) => this.getCategoriesVisibilityStatus({ modelId, categoryIds, type: \"DrawingCategory\" })))\n : EMPTY,\n spatialCategories\n ? of(spatialCategories).pipe(mergeMap((categoryIds) => this.getCategoriesVisibilityStatus({ modelId, categoryIds, type: \"SpatialCategory\" })))\n : EMPTY,\n ),\n ),\n defaultIfEmpty(createVisibilityStatus(\"visible\")),\n );\n }),\n mergeVisibilityStatuses,\n );\n });\n return createVisibilityHandlerResult(this, { modelIds }, result, undefined);\n }\n\n private getVisibleModelCategoriesVisibilityStatus({ modelId, categoryIds }: { modelId: Id64String; categoryIds: Id64Arg }) {\n return merge(\n this.getVisibilityFromAlwaysAndNeverDrawnElements({\n queryProps: { modelId, categoryIds },\n defaultStatus: () => this.getVisibleModelDefaultCategoriesVisibilityStatus({ modelId, categoryIds }),\n }),\n this.getSubModels({ modelId, categoryIds }).pipe(\n mergeMap(({ subModels }) => {\n if (subModels && Id64.sizeOf(subModels) > 0) {\n return this.getModelsVisibilityStatus({ modelIds: subModels });\n }\n return EMPTY;\n }),\n ),\n ).pipe(mergeVisibilityStatuses);\n }\n\n private getVisibileCategorySubCategoriesVisibilityStatus(props: { subCategoryIds: Id64Arg }): VisibilityStatus {\n const { subCategoryIds } = props;\n let subCategoryVisiblity: \"visible\" | \"hidden\" | \"unknown\" = \"unknown\";\n for (const subCategoryId of Id64.iterable(subCategoryIds)) {\n const isSubCategoryVisible = this._props.viewport.isSubCategoryVisible(subCategoryId);\n if (isSubCategoryVisible && subCategoryVisiblity === \"hidden\") {\n return createVisibilityStatus(\"partial\");\n }\n if (!isSubCategoryVisible && subCategoryVisiblity === \"visible\") {\n return createVisibilityStatus(\"partial\");\n }\n subCategoryVisiblity = isSubCategoryVisible ? \"visible\" : \"hidden\";\n }\n // If visibility is unknown, no subCategories were provided,\n // Since category is visible we return visible\n return createVisibilityStatus(subCategoryVisiblity === \"unknown\" ? \"visible\" : subCategoryVisiblity);\n }\n\n private getSubCategoriesVisibilityStatus(props: { subCategoryIds: Id64Arg; categoryId: Id64String; modelId?: Id64String }): Observable<VisibilityStatus> {\n const result = defer(() => {\n return (props.modelId ? of({ id: props.categoryId, models: props.modelId }) : from(this.getModels({ categoryIds: props.categoryId }))).pipe(\n map(({ models }) => {\n let visibility: \"visible\" | \"hidden\" | \"unknown\" = \"unknown\";\n let nonDefaultModelDisplayStatesCount = 0;\n for (const modelId of Id64.iterable(models ?? [])) {\n if (!this._props.viewport.view.viewsModel(modelId)) {\n if (visibility === \"visible\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = \"hidden\";\n ++nonDefaultModelDisplayStatesCount;\n continue;\n }\n const override = this._props.viewport.perModelCategoryVisibility.getOverride(modelId, props.categoryId);\n if (override === PerModelCategoryVisibility.Override.Show) {\n if (visibility === \"hidden\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = \"visible\";\n ++nonDefaultModelDisplayStatesCount;\n continue;\n }\n if (override === PerModelCategoryVisibility.Override.Hide) {\n if (visibility === \"visible\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = \"hidden\";\n ++nonDefaultModelDisplayStatesCount;\n continue;\n }\n }\n if (models && Id64.sizeOf(models) > 0 && nonDefaultModelDisplayStatesCount === Id64.sizeOf(models)) {\n assert(visibility === \"visible\" || visibility === \"hidden\");\n return createVisibilityStatus(visibility);\n }\n if (!this._props.viewport.view.viewsCategory(props.categoryId)) {\n return createVisibilityStatus(visibility === \"visible\" ? \"partial\" : \"hidden\");\n }\n\n if (Id64.sizeOf(props.subCategoryIds) === 0) {\n if (visibility === \"hidden\") {\n return createVisibilityStatus(\"partial\");\n }\n return createVisibilityStatus(\"visible\");\n }\n\n const subCategoriesVisibility = this.getVisibileCategorySubCategoriesVisibilityStatus({ subCategoryIds: props.subCategoryIds });\n return subCategoriesVisibility.state === visibility || visibility === \"unknown\" ? subCategoriesVisibility : createVisibilityStatus(\"partial\");\n }),\n mergeVisibilityStatuses,\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private getVisibleModelDefaultCategoriesVisibilityStatus({ modelId, categoryIds }: { categoryIds: Id64Arg; modelId: Id64String }): VisibilityStatus {\n const viewport = this._props.viewport;\n\n let visibleCount = 0;\n for (const categoryId of Id64.iterable(categoryIds)) {\n const override = this._props.viewport.perModelCategoryVisibility.getOverride(modelId, categoryId);\n if (\n override === PerModelCategoryVisibility.Override.Show ||\n (override === PerModelCategoryVisibility.Override.None && viewport.view.viewsCategory(categoryId))\n ) {\n ++visibleCount;\n continue;\n }\n if (visibleCount > 0) {\n return createVisibilityStatus(\"partial\");\n }\n }\n return visibleCount > 0 ? createVisibilityStatus(\"visible\") : createVisibilityStatus(\"hidden\");\n }\n\n private getCategoriesVisibilityStatus(props: {\n categoryIds: Id64Arg;\n modelId: Id64String | undefined;\n type: \"DrawingCategory\" | \"SpatialCategory\";\n }): Observable<VisibilityStatus> {\n const result = defer(() => {\n const { categoryIds, modelId: modelIdFromProps, type } = props;\n if (Id64.sizeOf(categoryIds) === 0) {\n return EMPTY;\n }\n\n const isSupportedInView =\n (this._props.viewport.view.is3d() && type === \"SpatialCategory\") || (this._props.viewport.view.is2d() && type === \"DrawingCategory\");\n if (!isSupportedInView) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n return (\n modelIdFromProps\n ? from(Id64.iterable(categoryIds)).pipe(map((categoryId) => ({ id: categoryId, models: modelIdFromProps })))\n : this.getModels({ categoryIds })\n ).pipe(\n map(({ id, models }) => {\n const acc = { categoryId: id, visibleModels: new Array<Id64String>(), hiddenModels: new Array<Id64String>() };\n if (!models) {\n return acc;\n }\n for (const modelId of Id64.iterable(models)) {\n if (this._props.viewport.view.viewsModel(modelId)) {\n acc.visibleModels.push(modelId);\n } else {\n acc.hiddenModels.push(modelId);\n }\n }\n return acc;\n }),\n mergeMap(({ categoryId, visibleModels, hiddenModels }) => {\n return merge(\n // For hidden models we only need to check subModels\n hiddenModels.length > 0\n ? this.getSubModels({ modelIds: hiddenModels }).pipe(\n mergeMap(({ subModels }) => {\n if (subModels && Id64.sizeOf(subModels) > 0) {\n return this.getModelsVisibilityStatus({\n modelIds: subModels,\n }).pipe(\n map((subModelsVisibilityStatus) =>\n subModelsVisibilityStatus.state !== \"hidden\" ? createVisibilityStatus(\"partial\") : createVisibilityStatus(\"hidden\"),\n ),\n );\n }\n return of(createVisibilityStatus(\"hidden\"));\n }),\n )\n : EMPTY,\n // For visible models we need to check all categories\n visibleModels.length > 0\n ? from(visibleModels).pipe(\n mergeMap((modelId) =>\n this.getVisibleModelCategoriesVisibilityStatus({\n modelId,\n categoryIds: categoryId,\n }),\n ),\n )\n : EMPTY,\n // We need to check subCategories as well\n this.getSubCategories({ categoryIds: categoryId }).pipe(\n mergeMap(({ subCategories }) => {\n if (subCategories && Id64.sizeOf(subCategories) > 0) {\n return this.getSubCategoriesVisibilityStatus({ categoryId, modelId: modelIdFromProps, subCategoryIds: subCategories });\n }\n\n return EMPTY;\n }),\n ),\n ).pipe(defaultIfEmpty(createVisibilityStatus(this._props.viewport.view.viewsCategory(categoryId) ? \"visible\" : \"hidden\")));\n }),\n mergeVisibilityStatuses,\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private getElementsVisibilityStatus(props: {\n elementIds: Id64Arg;\n modelId: Id64String;\n categoryId: Id64String;\n type: \"GeometricElement3d\" | \"GeometricElement2d\";\n }): Observable<VisibilityStatus> {\n const result = defer(() => {\n const { elementIds, modelId, categoryId, type } = props;\n\n const isSupportedInView =\n (this._props.viewport.view.is3d() && type === \"GeometricElement3d\") || (this._props.viewport.view.is2d() && type === \"GeometricElement2d\");\n if (!isSupportedInView) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n // TODO: check child elements that are subModels\n if (!this._props.viewport.view.viewsModel(modelId)) {\n return from(elementIds).pipe(\n mergeMap((elementId) =>\n from(this._idsCache.hasSubModel(elementId)).pipe(\n mergeMap((isSubModel) => {\n if (isSubModel) {\n return this.getModelsVisibilityStatus({\n modelIds: elementId,\n }).pipe(\n map((subModelVisibilityStatus) =>\n subModelVisibilityStatus.state !== \"hidden\" ? createVisibilityStatus(\"partial\") : createVisibilityStatus(\"hidden\"),\n ),\n );\n }\n return of(createVisibilityStatus(\"hidden\"));\n }),\n ),\n ),\n mergeVisibilityStatuses,\n );\n }\n // TODO: check child elements\n // TODO: check child element categories\n // TODO: check child elements that are subModels\n return this.getVisibilityFromAlwaysAndNeverDrawnElements({\n elements: elementIds,\n defaultStatus: () => this.getVisibleModelDefaultCategoriesVisibilityStatus({ categoryIds: categoryId, modelId }),\n }).pipe(\n mergeMap((visibilityStatusAlwaysAndNeverDraw) => {\n return from(Id64.iterable(elementIds)).pipe(\n mergeMap((elementId) =>\n from(this._idsCache.hasSubModel(elementId)).pipe(\n mergeMap((isSubModel) => {\n if (isSubModel) {\n return this.getModelsVisibilityStatus({\n modelIds: elementId,\n }).pipe(\n map((subModelVisibilityStatus) =>\n subModelVisibilityStatus.state !== visibilityStatusAlwaysAndNeverDraw.state\n ? createVisibilityStatus(\"partial\")\n : visibilityStatusAlwaysAndNeverDraw,\n ),\n );\n }\n return of(visibilityStatusAlwaysAndNeverDraw);\n }),\n ),\n ),\n mergeVisibilityStatuses,\n );\n }),\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private changeVisibilityObs(node: HierarchyNode, on: boolean): Observable<void> {\n if (node.filtering?.filteredChildrenIdentifierPaths?.length && !node.filtering.isFilterTarget) {\n return this.changeFilteredNodeVisibility({ node, on });\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (ClassificationsTreeNode.isClassificationTableNode(node)) {\n return this.changeClassificationTablesVisibilityStatus({\n classificationTableIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n on,\n });\n }\n\n if (ClassificationsTreeNode.isClassificationNode(node)) {\n return this.changeClassificationsVisibilityStatus({\n classificationIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n on,\n });\n }\n\n return this.changeElementsVisibilityStatus({\n elementIds: node.key.instanceKeys.map(({ id }) => id),\n modelId: ClassificationsTreeNode.getModelId(node),\n categoryId: ClassificationsTreeNode.getCategoryId(node),\n on,\n });\n }\n\n private changeFilteredNodeVisibility({ on, ...props }: ChangeFilteredNodeVisibilityProps) {\n return from(this.getVisibilityChangeTargets(props)).pipe(\n mergeMap(({ classificationTableIds, classificationIds, elements2d, elements3d }) => {\n const observables = new Array<Observable<void>>();\n if (classificationTableIds?.size) {\n observables.push(this.changeClassificationTablesVisibilityStatus({ classificationTableIds, on }));\n }\n\n if (classificationIds?.size) {\n observables.push(this.changeClassificationsVisibilityStatus({ classificationIds, on }));\n }\n\n if (elements2d?.length) {\n observables.push(\n from(elements2d).pipe(\n mergeMap(({ modelId, categoryId, elementIds }) => {\n return this.changeElementsVisibilityStatus({ modelId, categoryId, elementIds, on });\n }),\n ),\n );\n }\n\n if (elements3d?.length) {\n observables.push(\n from(elements3d).pipe(\n mergeMap(({ modelId, categoryId, elementIds }) => {\n return this.changeElementsVisibilityStatus({ modelId, categoryId, elementIds, on });\n }),\n ),\n );\n }\n\n return merge(...observables);\n }),\n );\n }\n\n private changeClassificationTablesVisibilityStatus(props: { classificationTableIds: Id64Arg; on: boolean }): Observable<void> {\n const result = defer(() => {\n return from(this._idsCache.getAllContainedCategories(props.classificationTableIds)).pipe(\n mergeMap(({ drawing, spatial }) => merge(drawing, spatial)),\n toArray(),\n mergeMap((categoryIds) => this.changeCategoriesVisibilityStatus({ modelId: undefined, categoryIds, on: props.on })),\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private changeClassificationsVisibilityStatus(props: { classificationIds: Id64Arg; on: boolean }): Observable<void> {\n const result = defer(() => {\n return from(this._idsCache.getAllContainedCategories(props.classificationIds)).pipe(\n mergeMap(({ drawing, spatial }) => merge(drawing, spatial)),\n toArray(),\n mergeMap((categoryIds) => this.changeCategoriesVisibilityStatus({ modelId: undefined, categoryIds, on: props.on })),\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private changeModelsVisibilityStatus(props: { modelIds: Id64Arg; on: boolean }): Observable<void> {\n const { modelIds, on } = props;\n\n if (Id64.sizeOf(modelIds) === 0) {\n return EMPTY;\n }\n\n const result = defer(() => {\n const viewport = this._props.viewport;\n\n viewport.perModelCategoryVisibility.clearOverrides(modelIds);\n if (!on) {\n viewport.changeModelDisplay(modelIds, false);\n return this.getSubModels({ modelIds }).pipe(\n mergeMap(({ subModels }) => (subModels ? this.changeModelsVisibilityStatus({ modelIds: subModels, on }) : EMPTY)),\n );\n }\n\n return concat(\n from(viewport.addViewedModels(modelIds)),\n this.getCategories({ modelIds }).pipe(\n mergeMap(({ id, drawingCategories, spatialCategories }) => {\n return merge(\n drawingCategories ? this.changeCategoriesVisibilityStatus({ categoryIds: drawingCategories, modelId: id, on }) : EMPTY,\n spatialCategories ? this.changeCategoriesVisibilityStatus({ categoryIds: spatialCategories, modelId: id, on }) : EMPTY,\n );\n }),\n ),\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private showModelWithoutAnyCategoriesOrElements(modelId: Id64String, categoriesToNotOverride?: Id64Arg): Observable<void> {\n const viewport = this._props.viewport;\n return forkJoin({\n allModelCategories: this.getCategories({ modelIds: modelId }).pipe(\n reduce((acc, { drawingCategories, spatialCategories }) => {\n for (const category of Id64.iterable(drawingCategories ?? [])) {\n acc.add(category);\n }\n for (const category of Id64.iterable(spatialCategories ?? [])) {\n acc.add(category);\n }\n return acc;\n }, new Set<Id64String>()),\n ),\n modelAlwaysDrawnElements: this._alwaysAndNeverDrawnElements.getAlwaysDrawnElements({ modelId }),\n }).pipe(\n mergeMap(async ({ allModelCategories, modelAlwaysDrawnElements }) => {\n const alwaysDrawn = this._props.viewport.alwaysDrawn;\n if (alwaysDrawn && modelAlwaysDrawnElements) {\n viewport.setAlwaysDrawn(setDifference(alwaysDrawn, modelAlwaysDrawnElements));\n }\n const categoriesToOverride = categoriesToNotOverride\n ? setDifference(allModelCategories, getSetFromId64Arg(categoriesToNotOverride))\n : allModelCategories;\n categoriesToOverride.forEach((categoryId) => {\n this.changeCategoryStateInViewportAccordingToModelVisibility(modelId, categoryId, false, false);\n });\n await viewport.addViewedModels(modelId);\n }),\n );\n }\n\n private changeCategoryStateInViewportAccordingToModelVisibility(modelId: string, categoryId: string, on: boolean, changeSubCategories: 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\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, changeSubCategories);\n }\n }\n\n private changeCategoriesVisibilityStatus(props: { modelId: Id64String | undefined; categoryIds: Id64Arg; on: boolean }): Observable<void> {\n const result = defer(() => {\n const { modelId: modelIdFromProps, categoryIds, on } = props;\n const viewport = this._props.viewport;\n const modelIdsObservable = (\n modelIdFromProps\n ? of(new Map<ModelId, Set<CategoryId>>([[modelIdFromProps, getSetFromId64Arg(categoryIds)]]))\n : this.getModels({ categoryIds }).pipe(\n reduce((acc, { id, models }) => {\n if (!models) {\n return acc;\n }\n for (const modelId of Id64.iterable(models)) {\n let entry = acc.get(modelId);\n if (!entry) {\n entry = new Set();\n acc.set(modelId, entry);\n }\n entry.add(id);\n }\n return acc;\n }, new Map<ModelId, Set<CategoryId>>()),\n )\n ).pipe(\n mergeMap((modelCategoriesMap) => modelCategoriesMap.entries()),\n shareReplay(),\n );\n return concat(\n // If modelId was provided: add override\n // If modelId was not provided: change categoryDisplay and remove categories per model overrides\n modelIdFromProps\n ? of(\n viewport.perModelCategoryVisibility.setOverride(\n modelIdFromProps,\n categoryIds,\n on ? PerModelCategoryVisibility.Override.Show : PerModelCategoryVisibility.Override.Hide,\n ),\n )\n : concat(\n from(enableCategoryDisplay(viewport, categoryIds, on, on)),\n modelIdsObservable.pipe(\n map(([modelId, modelCategories]) => {\n viewport.perModelCategoryVisibility.setOverride(modelId, modelCategories, PerModelCategoryVisibility.Override.None);\n }),\n ),\n ),\n // If categories visibility needs to be turned on, we need to turn on models without turning on unrelated elements or categories for that model\n on\n ? modelIdsObservable.pipe(\n mergeMap(([modelId, categories]) => {\n if (!viewport.view.viewsModel(modelId)) {\n return this.showModelWithoutAnyCategoriesOrElements(modelId, categories);\n }\n return EMPTY;\n }),\n )\n : EMPTY,\n this._alwaysAndNeverDrawnElements.clearAlwaysAndNeverDrawnElements({ categoryIds, modelId: modelIdFromProps }),\n this.getSubModels({ categoryIds, modelId: modelIdFromProps }).pipe(\n mergeMap(({ subModels }) => (subModels ? this.changeModelsVisibilityStatus({ modelIds: subModels, on }) : EMPTY)),\n ),\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private changeElementsVisibilityStatus(props: { elementIds: Id64Arg; modelId: Id64String; categoryId: Id64String; on: boolean }): Observable<void> {\n const result = defer(() => {\n const { modelId, categoryId, elementIds, on } = props;\n const viewport = this._props.viewport;\n // TODO: change child elements\n // TODO: change child element categories\n // TODO: change child subModels\n return concat(\n // Change elements state\n defer(() => {\n if (!viewport.view.viewsModel(modelId)) {\n if (!on) {\n return this.queueElementsVisibilityChange(elementIds, on, false);\n }\n\n return this.showModelWithoutAnyCategoriesOrElements(modelId).pipe(\n mergeMap(() => {\n const defaultVisibility = this.getVisibleModelDefaultCategoriesVisibilityStatus({ categoryIds: categoryId, modelId });\n const displayedByDefault = defaultVisibility.state === \"visible\";\n return this.queueElementsVisibilityChange(elementIds, on, displayedByDefault);\n }),\n );\n }\n\n const categoryVisibility = this.getVisibleModelDefaultCategoriesVisibilityStatus({ categoryIds: categoryId, modelId });\n const isDisplayedByDefault = categoryVisibility.state === \"visible\";\n return this.queueElementsVisibilityChange(elementIds, on, isDisplayedByDefault);\n }),\n // Change visibility of elements that are models\n from(Id64.iterable(elementIds)).pipe(\n mergeMap((elementId) =>\n from(this._idsCache.hasSubModel(elementId)).pipe(\n mergeMap((isSubModel) => {\n if (isSubModel) {\n return this.changeModelsVisibilityStatus({ modelIds: elementId, on });\n }\n return EMPTY;\n }),\n ),\n ),\n ),\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private queueElementsVisibilityChange(elementIds: Id64Arg, 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(Id64.iterable(elementIds)).pipe(\n // check if visibility change is not finished (cancelled) due to change overall change request being cancelled\n takeUntil(changeFinished),\n changeElementStateNoChildrenOperator({ on, isDisplayedByDefault: visibleByDefault, viewport: this._props.viewport }),\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 getVisibilityFromAlwaysAndNeverDrawnElements(\n props: GetVisibilityFromAlwaysAndNeverDrawnElementsProps & ({ elements: Id64Arg } | { queryProps: { modelId: Id64String; categoryIds: Id64Arg } }),\n ): Observable<VisibilityStatus> {\n const viewport = this._props.viewport;\n if (viewport.isAlwaysDrawnExclusive) {\n if (!viewport?.alwaysDrawn?.size) {\n return of(createVisibilityStatus(\"hidden\"));\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 getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n alwaysDrawn: viewport.alwaysDrawn?.size ? setIntersection(Id64.iterable(props.elements), viewport.alwaysDrawn) : undefined,\n neverDrawn: viewport.neverDrawn?.size ? setIntersection(Id64.iterable(props.elements), viewport.neverDrawn) : undefined,\n totalCount: Id64.sizeOf(props.elements),\n viewport,\n }),\n );\n }\n const { modelId, categoryIds } = props.queryProps;\n const totalCount = from(Id64.iterable(categoryIds)).pipe(\n mergeMap((categoryId) => this.getElementsCount({ modelId, categoryId })),\n reduce((acc, specificModelCategoryCount) => {\n return acc + specificModelCategoryCount;\n }, 0),\n );\n return forkJoin({\n totalCount,\n alwaysDrawn: this._alwaysAndNeverDrawnElements.getAlwaysDrawnElements(props.queryProps),\n neverDrawn: this._alwaysAndNeverDrawnElements.getNeverDrawnElements(props.queryProps),\n }).pipe(\n map((state) => {\n return getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n ...state,\n viewport,\n });\n }),\n );\n }\n\n private getCategories(props: { modelIds: Id64Arg }): Observable<{ id: ModelId; drawingCategories?: Id64Arg; spatialCategories?: Id64Arg }> {\n return from(Id64.iterable(props.modelIds)).pipe(\n mergeMap((modelId) =>\n from(this._props.idsCache.getModelCategoryIds(modelId)).pipe(\n map(({ spatial, drawing }) => ({ id: modelId, drawingCategories: drawing, spatialCategories: spatial })),\n ),\n ),\n );\n }\n\n private getElementsCount(props: { modelId: Id64String; categoryId: Id64String }): Observable<number> {\n return from(this._props.idsCache.getCategoryElementsCount(props.modelId, props.categoryId));\n }\n\n private getModels(props: { categoryIds: Id64Arg }): Observable<{ id: CategoryId; models: Id64Arg | undefined }> {\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n from(this._props.idsCache.getCategoriesElementModels(categoryId, true)).pipe(\n mergeMap((categoryModelsMap) => (categoryModelsMap.size > 0 ? categoryModelsMap.values() : of(new Array<ModelId>()))),\n map((categoryModels) => ({ id: categoryId, models: categoryModels })),\n ),\n ),\n );\n }\n\n private getSubCategories(props: { categoryIds: Id64Arg }): Observable<{ id: CategoryId; subCategories: undefined }> {\n return from(Id64.iterable(props.categoryIds)).pipe(map((categoryId) => ({ id: categoryId, subCategories: undefined })));\n }\n\n private getSubModels(\n props: { modelIds: Id64Arg } | { modelId: Id64String | undefined; categoryIds: Id64Arg },\n ): Observable<{ id: CategoryId | ModelId; subModels: Id64Arg | undefined }> {\n if (\"modelIds\" in props) {\n return from(Id64.iterable(props.modelIds)).pipe(\n mergeMap((modelId) =>\n from(this._props.idsCache.getModelCategoryIds(modelId)).pipe(\n mergeMap(({ drawing, spatial }) => merge(drawing, spatial)),\n toArray(),\n mergeMap((categoryIds) => from(this._props.idsCache.getCategoriesModeledElements(modelId, categoryIds))),\n map((subModels) => ({ id: modelId, subModels })),\n ),\n ),\n );\n }\n\n if (props.modelId) {\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n from(this._props.idsCache.getCategoriesModeledElements(props.modelId!, categoryId)).pipe(map((subModels) => ({ id: categoryId, subModels }))),\n ),\n );\n }\n\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n from(this._props.idsCache.getCategoriesElementModels(categoryId)).pipe(\n mergeMap((categoryModelsMap) => {\n const models = categoryModelsMap.get(categoryId);\n if (!models) {\n return of({ id: categoryId, subModels: undefined });\n }\n return from(models).pipe(\n mergeMap((modelId) => from(this._props.idsCache.getCategoriesModeledElements(modelId, categoryId))),\n map((subModels) => ({ id: categoryId, subModels })),\n );\n }),\n ),\n ),\n );\n }\n}\n"]}
|
package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/FilteredTree.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Id64Set, Id64String } from "@itwin/core-bentley";
|
|
2
|
+
import { HierarchyFilteringPath } from "@itwin/presentation-hierarchies";
|
|
3
|
+
import type { HierarchyNode } from "@itwin/presentation-hierarchies";
|
|
4
|
+
import type { ECClassHierarchyInspector } from "@itwin/presentation-shared";
|
|
5
|
+
import type { CategoryId, ModelId } from "../../common/internal/Types.js";
|
|
6
|
+
import type { ClassificationsTreeIdsCache } from "./ClassificationsTreeIdsCache.js";
|
|
7
|
+
export interface FilteredTree {
|
|
8
|
+
getVisibilityChangeTargets(node: HierarchyNode): VisibilityChangeTargets;
|
|
9
|
+
}
|
|
10
|
+
type ModelCategoryKey = `${ModelId}-${CategoryId}`;
|
|
11
|
+
/** @internal */
|
|
12
|
+
export declare function parseModelCategoryKey(key: ModelCategoryKey): {
|
|
13
|
+
modelId: Id64String;
|
|
14
|
+
categoryId: Id64String;
|
|
15
|
+
};
|
|
16
|
+
interface VisibilityChangeTargets {
|
|
17
|
+
elements2d?: Array<{
|
|
18
|
+
modelId: Id64String;
|
|
19
|
+
categoryId: Id64String;
|
|
20
|
+
elementIds: Set<Id64String>;
|
|
21
|
+
}>;
|
|
22
|
+
elements3d?: Array<{
|
|
23
|
+
modelId: Id64String;
|
|
24
|
+
categoryId: Id64String;
|
|
25
|
+
elementIds: Set<Id64String>;
|
|
26
|
+
}>;
|
|
27
|
+
classificationTableIds?: Id64Set;
|
|
28
|
+
classificationIds?: Id64Set;
|
|
29
|
+
}
|
|
30
|
+
/** @internal */
|
|
31
|
+
export declare function createFilteredTree(props: {
|
|
32
|
+
imodelAccess: ECClassHierarchyInspector;
|
|
33
|
+
filteringPaths: HierarchyFilteringPath[];
|
|
34
|
+
idsCache: ClassificationsTreeIdsCache;
|
|
35
|
+
}): Promise<FilteredTree>;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=FilteredTree.d.ts.map
|
package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/FilteredTree.js
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { assert } from "@itwin/core-bentley";
|
|
6
|
+
import { HierarchyFilteringPath, HierarchyNodeIdentifier, HierarchyNodeKey } from "@itwin/presentation-hierarchies";
|
|
7
|
+
import { CLASS_NAME_Classification, CLASS_NAME_ClassificationTable, CLASS_NAME_GeometricElement2d } from "../../common/internal/ClassNameDefinitions.js";
|
|
8
|
+
function createModelCategoryKey(modelId, categoryId) {
|
|
9
|
+
return `${modelId}-${categoryId}`;
|
|
10
|
+
}
|
|
11
|
+
/** @internal */
|
|
12
|
+
export function parseModelCategoryKey(key) {
|
|
13
|
+
const [modelId, categoryId] = key.split("-");
|
|
14
|
+
return { modelId, categoryId };
|
|
15
|
+
}
|
|
16
|
+
/** @internal */
|
|
17
|
+
export async function createFilteredTree(props) {
|
|
18
|
+
const { imodelAccess, filteringPaths, idsCache } = props;
|
|
19
|
+
const root = {
|
|
20
|
+
children: new Map(),
|
|
21
|
+
};
|
|
22
|
+
const filtered2dElements = new Array();
|
|
23
|
+
const filtered3dElements = new Array();
|
|
24
|
+
for (const filteringPath of filteringPaths) {
|
|
25
|
+
const normalizedPath = HierarchyFilteringPath.normalize(filteringPath).path;
|
|
26
|
+
let parentNode = root;
|
|
27
|
+
for (let i = 0; i < normalizedPath.length; ++i) {
|
|
28
|
+
if ("type" in parentNode && parentNode.isFilterTarget) {
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
const identifier = normalizedPath[i];
|
|
32
|
+
if (!HierarchyNodeIdentifier.isInstanceNodeIdentifier(identifier)) {
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
const currentNode = parentNode.children?.get(identifier.id);
|
|
36
|
+
if (currentNode !== undefined) {
|
|
37
|
+
parentNode = currentNode;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
const type = await getType(imodelAccess, identifier.className);
|
|
41
|
+
const newNode = createFilteredTreeNode({
|
|
42
|
+
type,
|
|
43
|
+
id: identifier.id,
|
|
44
|
+
isFilterTarget: i === normalizedPath.length - 1,
|
|
45
|
+
});
|
|
46
|
+
(parentNode.children ??= new Map()).set(identifier.id, newNode);
|
|
47
|
+
parentNode = newNode;
|
|
48
|
+
if (newNode.type === "element2d") {
|
|
49
|
+
filtered2dElements.push(newNode);
|
|
50
|
+
}
|
|
51
|
+
else if (newNode.type === "element3d") {
|
|
52
|
+
filtered3dElements.push(newNode);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const filteredElementsModels = await idsCache.getFilteredElementsData({
|
|
57
|
+
element2dIds: filtered2dElements.map(({ id }) => id),
|
|
58
|
+
element3dIds: filtered3dElements.map(({ id }) => id),
|
|
59
|
+
});
|
|
60
|
+
// We populate filtered elements array with references, this causes root to change accordingly
|
|
61
|
+
[filtered2dElements, filtered3dElements].forEach((elementsArr) => elementsArr.forEach((element) => {
|
|
62
|
+
const entry = filteredElementsModels.get(element.id);
|
|
63
|
+
assert(entry !== undefined);
|
|
64
|
+
element.modelId = entry.modelId;
|
|
65
|
+
element.categoryId = entry.categoryId;
|
|
66
|
+
}));
|
|
67
|
+
return {
|
|
68
|
+
getVisibilityChangeTargets: (node) => getVisibilityChangeTargets(root, node),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function getVisibilityChangeTargets(root, node) {
|
|
72
|
+
let lookupParents = [root];
|
|
73
|
+
const changeTargets = {};
|
|
74
|
+
const nodeKey = node.key;
|
|
75
|
+
if (!HierarchyNodeKey.isInstances(nodeKey)) {
|
|
76
|
+
return {};
|
|
77
|
+
}
|
|
78
|
+
// find the filtered parent nodes of the `node`
|
|
79
|
+
for (const parentKey of node.parentKeys) {
|
|
80
|
+
if (!HierarchyNodeKey.isInstances(parentKey)) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
// tree node might be merged from multiple instances. As filtered tree stores only one instance per node, we need to find all matching nodes
|
|
84
|
+
// and use them when checking for matching node in one level deeper.
|
|
85
|
+
const parentNodes = findMatchingFilteredNodes(lookupParents, parentKey.instanceKeys);
|
|
86
|
+
if (parentNodes.length === 0) {
|
|
87
|
+
return {};
|
|
88
|
+
}
|
|
89
|
+
lookupParents = parentNodes;
|
|
90
|
+
}
|
|
91
|
+
// find filtered nodes that match the `node`
|
|
92
|
+
const filteredNodes = findMatchingFilteredNodes(lookupParents, nodeKey.instanceKeys);
|
|
93
|
+
if (filteredNodes.length === 0) {
|
|
94
|
+
return {};
|
|
95
|
+
}
|
|
96
|
+
for (const filteredNode of filteredNodes) {
|
|
97
|
+
collectVisibilityChangeTargets(changeTargets, filteredNode);
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
classificationIds: changeTargets.classificationIds,
|
|
101
|
+
classificationTableIds: changeTargets.classificationIds,
|
|
102
|
+
elements2d: changeTargets.elements2d
|
|
103
|
+
? [...changeTargets.elements2d?.entries()].map(([modelCategoryKey, elementIds]) => {
|
|
104
|
+
const { modelId, categoryId } = parseModelCategoryKey(modelCategoryKey);
|
|
105
|
+
return { modelId, categoryId, elementIds };
|
|
106
|
+
})
|
|
107
|
+
: undefined,
|
|
108
|
+
elements3d: changeTargets.elements3d
|
|
109
|
+
? [...changeTargets.elements3d?.entries()].map(([modelCategoryKey, elementIds]) => {
|
|
110
|
+
const { modelId, categoryId } = parseModelCategoryKey(modelCategoryKey);
|
|
111
|
+
return { modelId, categoryId, elementIds };
|
|
112
|
+
})
|
|
113
|
+
: undefined,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function findMatchingFilteredNodes(lookupParents, keys) {
|
|
117
|
+
return lookupParents
|
|
118
|
+
.flatMap((lookup) => keys.map((key) => lookup.children?.get(key.id)))
|
|
119
|
+
.filter((lookupNode) => lookupNode !== undefined);
|
|
120
|
+
}
|
|
121
|
+
function collectVisibilityChangeTargets(changeTargets, filteredNode) {
|
|
122
|
+
if (filteredNode.isFilterTarget) {
|
|
123
|
+
addTarget(changeTargets, filteredNode);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (filteredNode.type === "element2d" || filteredNode.type === "element3d") {
|
|
127
|
+
// need to add parent ids as filter target will be an element
|
|
128
|
+
addTarget(changeTargets, filteredNode);
|
|
129
|
+
}
|
|
130
|
+
if (!filteredNode.children) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
for (const child of filteredNode.children.values()) {
|
|
134
|
+
collectVisibilityChangeTargets(changeTargets, child);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function addTarget(filterTargets, node) {
|
|
138
|
+
switch (node.type) {
|
|
139
|
+
case "classificationTable":
|
|
140
|
+
(filterTargets.classificationTableIds ??= new Set()).add(node.id);
|
|
141
|
+
return;
|
|
142
|
+
case "classification":
|
|
143
|
+
(filterTargets.classificationIds ??= new Set()).add(node.id);
|
|
144
|
+
return;
|
|
145
|
+
case "element2d":
|
|
146
|
+
const element2dKey = createModelCategoryKey(node.modelId, node.categoryId);
|
|
147
|
+
const elements2d = (filterTargets.elements2d ??= new Map()).get(element2dKey);
|
|
148
|
+
if (elements2d) {
|
|
149
|
+
elements2d.add(node.id);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
filterTargets.elements2d.set(element2dKey, new Set([node.id]));
|
|
153
|
+
return;
|
|
154
|
+
case "element3d":
|
|
155
|
+
const element3dKey = createModelCategoryKey(node.modelId, node.categoryId);
|
|
156
|
+
const elements3d = (filterTargets.elements3d ??= new Map()).get(element3dKey);
|
|
157
|
+
if (elements3d) {
|
|
158
|
+
elements3d.add(node.id);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
filterTargets.elements3d.set(element3dKey, new Set([node.id]));
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function createFilteredTreeNode({ type, id, isFilterTarget, }) {
|
|
166
|
+
if (type === "element2d" || type === "element3d") {
|
|
167
|
+
return {
|
|
168
|
+
id,
|
|
169
|
+
isFilterTarget,
|
|
170
|
+
type,
|
|
171
|
+
modelId: undefined,
|
|
172
|
+
categoryId: undefined,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
id,
|
|
177
|
+
isFilterTarget,
|
|
178
|
+
type,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
async function getType(hierarchyChecker, className) {
|
|
182
|
+
if (await hierarchyChecker.classDerivesFrom(className, CLASS_NAME_ClassificationTable)) {
|
|
183
|
+
return "classificationTable";
|
|
184
|
+
}
|
|
185
|
+
if (await hierarchyChecker.classDerivesFrom(className, CLASS_NAME_Classification)) {
|
|
186
|
+
return "classification";
|
|
187
|
+
}
|
|
188
|
+
if (await hierarchyChecker.classDerivesFrom(className, CLASS_NAME_GeometricElement2d)) {
|
|
189
|
+
return "element2d";
|
|
190
|
+
}
|
|
191
|
+
return "element3d";
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=FilteredTree.js.map
|
package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/FilteredTree.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilteredTree.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/classifications-tree/internal/FilteredTree.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 type { Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { HierarchyFilteringPath, HierarchyNodeIdentifier, HierarchyNodeKey } from \"@itwin/presentation-hierarchies\";\nimport { CLASS_NAME_Classification, CLASS_NAME_ClassificationTable, CLASS_NAME_GeometricElement2d } from \"../../common/internal/ClassNameDefinitions.js\";\n\nimport type { HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport type { ECClassHierarchyInspector, InstanceKey } from \"@itwin/presentation-shared\";\nimport type { CategoryId, ElementId, ModelId } from \"../../common/internal/Types.js\";\nimport type { ClassificationsTreeIdsCache } from \"./ClassificationsTreeIdsCache.js\";\n\ninterface FilteredTreeRootNode {\n children: Map<Id64String, FilteredTreeNode>;\n}\n\ninterface BaseFilteredTreeNode {\n id: Id64String;\n children?: Map<Id64String, FilteredTreeNode>;\n isFilterTarget: boolean;\n}\n\ninterface ClassificationTableFilteredTreeNode extends BaseFilteredTreeNode {\n type: \"classificationTable\";\n}\n\ninterface ClassificationFilteredTreeNode extends BaseFilteredTreeNode {\n type: \"classification\";\n}\n\ninterface Element2dFilteredTreeNode extends BaseFilteredTreeNode {\n type: \"element2d\";\n categoryId: Id64String;\n modelId: Id64String;\n}\n\ninterface Element3dFilteredTreeNode extends BaseFilteredTreeNode {\n type: \"element3d\";\n categoryId: Id64String;\n modelId: Id64String;\n}\n\ntype FilteredTreeNode = ClassificationTableFilteredTreeNode | ClassificationFilteredTreeNode | Element2dFilteredTreeNode | Element3dFilteredTreeNode;\n\nexport interface FilteredTree {\n getVisibilityChangeTargets(node: HierarchyNode): VisibilityChangeTargets;\n}\n\ntype ModelCategoryKey = `${ModelId}-${CategoryId}`;\n\nfunction createModelCategoryKey(modelId: Id64String, categoryId: Id64String): ModelCategoryKey {\n return `${modelId}-${categoryId}`;\n}\n\n/** @internal */\nexport function parseModelCategoryKey(key: ModelCategoryKey): { modelId: Id64String; categoryId: Id64String } {\n const [modelId, categoryId] = key.split(\"-\");\n return { modelId, categoryId };\n}\n\ninterface VisibilityChangeTargetsInternal {\n elements2d?: Map<ModelCategoryKey, Set<ElementId>>;\n elements3d?: Map<ModelCategoryKey, Set<ElementId>>;\n classificationTableIds?: Id64Set;\n classificationIds?: Id64Set;\n}\n\ninterface VisibilityChangeTargets {\n elements2d?: Array<{ modelId: Id64String; categoryId: Id64String; elementIds: Set<Id64String> }>;\n elements3d?: Array<{ modelId: Id64String; categoryId: Id64String; elementIds: Set<Id64String> }>;\n classificationTableIds?: Id64Set;\n classificationIds?: Id64Set;\n}\n\n/** @internal */\nexport async function createFilteredTree(props: {\n imodelAccess: ECClassHierarchyInspector;\n filteringPaths: HierarchyFilteringPath[];\n idsCache: ClassificationsTreeIdsCache;\n}): Promise<FilteredTree> {\n const { imodelAccess, filteringPaths, idsCache } = props;\n const root: FilteredTreeRootNode = {\n children: new Map(),\n };\n\n const filtered2dElements = new Array<\n Omit<Element2dFilteredTreeNode, \"modelId\" | \"categoryId\"> & { modelId: string | undefined; categoryId: string | undefined }\n >();\n const filtered3dElements = new Array<\n Omit<Element3dFilteredTreeNode, \"modelId\" | \"categoryId\"> & { modelId: string | undefined; categoryId: string | undefined }\n >();\n for (const filteringPath of filteringPaths) {\n const normalizedPath = HierarchyFilteringPath.normalize(filteringPath).path;\n\n let parentNode:\n | FilteredTreeRootNode\n | ClassificationTableFilteredTreeNode\n | ClassificationFilteredTreeNode\n | (Omit<Element2dFilteredTreeNode, \"modelId\" | \"categoryId\"> & { modelId: string | undefined; categoryId: string | undefined })\n | (Omit<Element3dFilteredTreeNode, \"modelId\" | \"categoryId\"> & { modelId: string | undefined; categoryId: string | undefined }) = root;\n for (let i = 0; i < normalizedPath.length; ++i) {\n if (\"type\" in parentNode && parentNode.isFilterTarget) {\n break;\n }\n\n const identifier = normalizedPath[i];\n\n if (!HierarchyNodeIdentifier.isInstanceNodeIdentifier(identifier)) {\n break;\n }\n\n const currentNode: FilteredTreeNode | undefined = parentNode.children?.get(identifier.id);\n if (currentNode !== undefined) {\n parentNode = currentNode;\n continue;\n }\n\n const type = await getType(imodelAccess, identifier.className);\n\n const newNode = createFilteredTreeNode({\n type,\n id: identifier.id,\n isFilterTarget: i === normalizedPath.length - 1,\n });\n (parentNode.children ??= new Map()).set(identifier.id, newNode);\n parentNode = newNode;\n if (newNode.type === \"element2d\") {\n filtered2dElements.push(newNode);\n } else if (newNode.type === \"element3d\") {\n filtered3dElements.push(newNode);\n }\n }\n }\n const filteredElementsModels = await idsCache.getFilteredElementsData({\n element2dIds: filtered2dElements.map(({ id }) => id),\n element3dIds: filtered3dElements.map(({ id }) => id),\n });\n // We populate filtered elements array with references, this causes root to change accordingly\n [filtered2dElements, filtered3dElements].forEach((elementsArr) =>\n elementsArr.forEach((element) => {\n const entry = filteredElementsModels.get(element.id);\n assert(entry !== undefined);\n element.modelId = entry.modelId;\n element.categoryId = entry.categoryId;\n }),\n );\n\n return {\n getVisibilityChangeTargets: (node: HierarchyNode) => getVisibilityChangeTargets(root, node),\n };\n}\n\nfunction getVisibilityChangeTargets(root: FilteredTreeRootNode, node: HierarchyNode): VisibilityChangeTargets {\n let lookupParents: Array<{ children?: Map<Id64String, FilteredTreeNode> }> = [root];\n const changeTargets: VisibilityChangeTargetsInternal = {};\n\n const nodeKey = node.key;\n if (!HierarchyNodeKey.isInstances(nodeKey)) {\n return {};\n }\n\n // find the filtered parent nodes of the `node`\n for (const parentKey of node.parentKeys) {\n if (!HierarchyNodeKey.isInstances(parentKey)) {\n continue;\n }\n\n // tree node might be merged from multiple instances. As filtered tree stores only one instance per node, we need to find all matching nodes\n // and use them when checking for matching node in one level deeper.\n const parentNodes = findMatchingFilteredNodes(lookupParents, parentKey.instanceKeys);\n if (parentNodes.length === 0) {\n return {};\n }\n lookupParents = parentNodes;\n }\n\n // find filtered nodes that match the `node`\n const filteredNodes = findMatchingFilteredNodes(lookupParents, nodeKey.instanceKeys);\n if (filteredNodes.length === 0) {\n return {};\n }\n\n for (const filteredNode of filteredNodes) {\n collectVisibilityChangeTargets(changeTargets, filteredNode);\n }\n return {\n classificationIds: changeTargets.classificationIds,\n classificationTableIds: changeTargets.classificationIds,\n elements2d: changeTargets.elements2d\n ? [...changeTargets.elements2d?.entries()].map(([modelCategoryKey, elementIds]) => {\n const { modelId, categoryId } = parseModelCategoryKey(modelCategoryKey);\n return { modelId, categoryId, elementIds };\n })\n : undefined,\n elements3d: changeTargets.elements3d\n ? [...changeTargets.elements3d?.entries()].map(([modelCategoryKey, elementIds]) => {\n const { modelId, categoryId } = parseModelCategoryKey(modelCategoryKey);\n return { modelId, categoryId, elementIds };\n })\n : undefined,\n };\n}\n\nfunction findMatchingFilteredNodes(lookupParents: Array<{ children?: Map<Id64String, FilteredTreeNode> }>, keys: InstanceKey[]) {\n return lookupParents\n .flatMap((lookup) => keys.map((key) => lookup.children?.get(key.id)))\n .filter((lookupNode): lookupNode is FilteredTreeNode => lookupNode !== undefined);\n}\n\nfunction collectVisibilityChangeTargets(changeTargets: VisibilityChangeTargetsInternal, filteredNode: FilteredTreeNode) {\n if (filteredNode.isFilterTarget) {\n addTarget(changeTargets, filteredNode);\n return;\n }\n\n if (filteredNode.type === \"element2d\" || filteredNode.type === \"element3d\") {\n // need to add parent ids as filter target will be an element\n addTarget(changeTargets, filteredNode);\n }\n\n if (!filteredNode.children) {\n return;\n }\n\n for (const child of filteredNode.children.values()) {\n collectVisibilityChangeTargets(changeTargets, child);\n }\n}\n\nfunction addTarget(filterTargets: VisibilityChangeTargetsInternal, node: FilteredTreeNode) {\n switch (node.type) {\n case \"classificationTable\":\n (filterTargets.classificationTableIds ??= new Set()).add(node.id);\n return;\n case \"classification\":\n (filterTargets.classificationIds ??= new Set()).add(node.id);\n return;\n case \"element2d\":\n const element2dKey = createModelCategoryKey(node.modelId, node.categoryId);\n const elements2d = (filterTargets.elements2d ??= new Map()).get(element2dKey);\n if (elements2d) {\n elements2d.add(node.id);\n return;\n }\n filterTargets.elements2d.set(element2dKey, new Set([node.id]));\n return;\n case \"element3d\":\n const element3dKey = createModelCategoryKey(node.modelId, node.categoryId);\n const elements3d = (filterTargets.elements3d ??= new Map()).get(element3dKey);\n if (elements3d) {\n elements3d.add(node.id);\n return;\n }\n filterTargets.elements3d.set(element3dKey, new Set([node.id]));\n return;\n }\n}\n\nfunction createFilteredTreeNode({\n type,\n id,\n isFilterTarget,\n}: {\n type: FilteredTreeNode[\"type\"];\n id: Id64String;\n isFilterTarget: boolean;\n}): BaseFilteredTreeNode &\n (\n | {\n type: \"classification\" | \"classificationTable\";\n }\n | { type: \"element2d\"; modelId: undefined; categoryId: undefined }\n | { type: \"element3d\"; modelId: undefined; categoryId: undefined }\n ) {\n if (type === \"element2d\" || type === \"element3d\") {\n return {\n id,\n isFilterTarget,\n type,\n modelId: undefined,\n categoryId: undefined,\n };\n }\n return {\n id,\n isFilterTarget,\n type,\n };\n}\n\nasync function getType(hierarchyChecker: ECClassHierarchyInspector, className: string) {\n if (await hierarchyChecker.classDerivesFrom(className, CLASS_NAME_ClassificationTable)) {\n return \"classificationTable\";\n }\n if (await hierarchyChecker.classDerivesFrom(className, CLASS_NAME_Classification)) {\n return \"classification\";\n }\n if (await hierarchyChecker.classDerivesFrom(className, CLASS_NAME_GeometricElement2d)) {\n return \"element2d\";\n }\n return \"element3d\";\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ClassificationsTreeHierarchyConfiguration } from "../ClassificationsTreeDefinition.js";
|
|
2
|
+
import type { ClassificationsTreeIdsCache } from "./ClassificationsTreeIdsCache.js";
|
|
3
|
+
import type { VisibilityTreeProps } from "../../common/components/VisibilityTree.js";
|
|
4
|
+
/** @internal */
|
|
5
|
+
export type ClassificationsTreeFilteringError = "tooManyFilterMatches" | "unknownFilterError";
|
|
6
|
+
type HierarchyFilteringPaths = Awaited<ReturnType<Required<VisibilityTreeProps>["getFilteredPaths"]>>;
|
|
7
|
+
/** @internal */
|
|
8
|
+
export declare function useFilteredPaths({ filter, hierarchyConfiguration, getClassificationsTreeIdsCache, onFilteredPathsChanged, }: {
|
|
9
|
+
filter?: string;
|
|
10
|
+
hierarchyConfiguration: ClassificationsTreeHierarchyConfiguration;
|
|
11
|
+
getClassificationsTreeIdsCache: () => ClassificationsTreeIdsCache;
|
|
12
|
+
onFilteredPathsChanged: (paths: HierarchyFilteringPaths | undefined) => void;
|
|
13
|
+
}): {
|
|
14
|
+
getPaths: VisibilityTreeProps["getFilteredPaths"] | undefined;
|
|
15
|
+
filteringError: ClassificationsTreeFilteringError | undefined;
|
|
16
|
+
};
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=UseFilteredPaths.d.ts.map
|