@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.
Files changed (121) hide show
  1. package/CHANGELOG.md +62 -1
  2. package/README.md +50 -2
  3. package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js.map +1 -1
  4. package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.css +1 -1
  5. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.d.ts +2 -2
  6. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js +2 -2
  7. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js.map +1 -1
  8. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.d.ts +1 -1
  9. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -1
  10. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.d.ts +1 -0
  11. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js +25 -19
  12. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js.map +1 -1
  13. package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js +3 -5
  14. package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js.map +1 -1
  15. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.d.ts +7 -7
  16. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +21 -17
  17. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js.map +1 -1
  18. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.d.ts +0 -2
  19. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.js +352 -311
  20. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.js.map +1 -1
  21. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js +4 -3
  22. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js.map +1 -1
  23. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.d.ts +2 -2
  24. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.js +4 -3
  25. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.js.map +1 -1
  26. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.d.ts +1 -1
  27. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js +2 -2
  28. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js.map +1 -1
  29. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.d.ts +10 -1
  30. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js +268 -0
  31. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js.map +1 -1
  32. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.d.ts +3 -2
  33. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js +46 -8
  34. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js.map +1 -1
  35. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.d.ts +20 -7
  36. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js +96 -20
  37. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js.map +1 -1
  38. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNode.d.ts +2 -2
  39. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNode.js.map +1 -1
  40. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeVisibilityHandler.d.ts +3 -1
  41. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeVisibilityHandler.js +410 -253
  42. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeVisibilityHandler.js.map +1 -1
  43. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/FilteredTree.d.ts +37 -0
  44. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/FilteredTree.js +193 -0
  45. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/FilteredTree.js.map +1 -0
  46. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseFilteredPaths.d.ts +18 -0
  47. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseFilteredPaths.js +51 -0
  48. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseFilteredPaths.js.map +1 -0
  49. package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.d.ts +4 -0
  50. package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.js +20 -17
  51. package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.js.map +1 -1
  52. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.d.ts +2 -2
  53. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js +1 -1
  54. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js.map +1 -1
  55. package/lib/esm/tree-widget-react/components/trees/common/Utils.d.ts +4 -0
  56. package/lib/esm/tree-widget-react/components/trees/common/Utils.js +49 -0
  57. package/lib/esm/tree-widget-react/components/trees/common/Utils.js.map +1 -1
  58. package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.d.ts +1 -1
  59. package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.js +2 -2
  60. package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.js.map +1 -1
  61. package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.d.ts +6 -0
  62. package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.js +4 -0
  63. package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.js.map +1 -1
  64. package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.d.ts +23 -3
  65. package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.js +26 -5
  66. package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.js.map +1 -1
  67. package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.d.ts +1 -1
  68. package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js +7 -8
  69. package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js.map +1 -1
  70. package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.d.ts +3 -3
  71. package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.js.map +1 -1
  72. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTree.d.ts +2 -2
  73. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTree.js.map +1 -1
  74. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.d.ts +3 -3
  75. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js +10 -9
  76. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js.map +1 -1
  77. package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js +49 -34
  78. package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js.map +1 -1
  79. package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.js.map +1 -1
  80. package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.d.ts +7 -17
  81. package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js +26 -16
  82. package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js.map +1 -1
  83. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.d.ts +5 -5
  84. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js +3 -2
  85. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js.map +1 -1
  86. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +2 -2
  87. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js +2 -2
  88. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
  89. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.d.ts +1 -1
  90. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
  91. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.d.ts +2 -2
  92. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js +2 -2
  93. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
  94. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.d.ts +1 -1
  95. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js +1 -1
  96. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
  97. package/lib/esm/tree-widget-react/components/trees/index.d.ts +2 -0
  98. package/lib/esm/tree-widget-react/components/trees/index.js +3 -0
  99. package/lib/esm/tree-widget-react/components/trees/index.js.map +1 -1
  100. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.d.ts +2 -2
  101. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js +3 -2
  102. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js.map +1 -1
  103. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.d.ts +1 -1
  104. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  105. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.d.ts +12 -10
  106. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +33 -29
  107. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -1
  108. package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.d.ts +19 -1
  109. package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js +12 -5
  110. package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js.map +1 -1
  111. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +6 -4
  112. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +24 -11
  113. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -1
  114. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.d.ts +35 -44
  115. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +373 -186
  116. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -1
  117. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.d.ts +11 -2
  118. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js +88 -34
  119. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js.map +1 -1
  120. package/lib/public/locales/en/TreeWidget.json +11 -1
  121. 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"]}
@@ -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
@@ -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
@@ -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