@itwin/tree-widget-react 4.0.0-alpha.7 → 4.0.0-alpha.9

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 (98) hide show
  1. package/lib/esm/tree-widget-react/TreeWidget.d.ts +6 -1
  2. package/lib/esm/tree-widget-react/TreeWidget.js +19 -2
  3. package/lib/esm/tree-widget-react/TreeWidget.js.map +1 -1
  4. package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.d.ts +6 -0
  5. package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.js +22 -23
  6. package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.js.map +1 -1
  7. package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js +1 -1
  8. package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js.map +1 -1
  9. package/lib/esm/tree-widget-react/components/tree-header/ErrorState.js +1 -1
  10. package/lib/esm/tree-widget-react/components/tree-header/ErrorState.js.map +1 -1
  11. package/lib/esm/tree-widget-react/components/tree-header/SearchBox.d.ts +0 -1
  12. package/lib/esm/tree-widget-react/components/tree-header/SearchBox.js +3 -4
  13. package/lib/esm/tree-widget-react/components/tree-header/SearchBox.js.map +1 -1
  14. package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.css +1 -0
  15. package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.d.ts +12 -4
  16. package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.js +13 -9
  17. package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.js.map +1 -1
  18. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.d.ts +2 -2
  19. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js +2 -2
  20. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js.map +1 -1
  21. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js +3 -3
  22. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -1
  23. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.d.ts +1 -1
  24. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -1
  25. package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js +36 -182
  26. package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js.map +1 -1
  27. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +7 -11
  28. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js.map +1 -1
  29. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.js +107 -191
  30. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.js.map +1 -1
  31. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.d.ts +25 -0
  32. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js +133 -0
  33. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js.map +1 -0
  34. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseIdsCache.d.ts +8 -0
  35. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseIdsCache.js +48 -0
  36. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseIdsCache.js.map +1 -0
  37. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.d.ts +0 -2
  38. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js +8 -4
  39. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js.map +1 -1
  40. package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.js +11 -10
  41. package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.js.map +1 -1
  42. package/lib/esm/tree-widget-react/components/trees/common/Utils.d.ts +5 -0
  43. package/lib/esm/tree-widget-react/components/trees/common/Utils.js +5 -0
  44. package/lib/esm/tree-widget-react/components/trees/common/Utils.js.map +1 -1
  45. package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.d.ts +1 -1
  46. package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.js +2 -2
  47. package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.js.map +1 -1
  48. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.d.ts +3 -3
  49. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js +11 -2
  50. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js.map +1 -1
  51. package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.d.ts +6 -4
  52. package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.js +20 -25
  53. package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.js.map +1 -1
  54. package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.d.ts +1 -1
  55. package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js +10 -4
  56. package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js.map +1 -1
  57. package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.js +6 -3
  58. package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.js.map +1 -1
  59. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.d.ts +1 -1
  60. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js +12 -11
  61. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js.map +1 -1
  62. package/lib/esm/tree-widget-react/components/trees/common/internal/Tooltip.d.ts +3 -11
  63. package/lib/esm/tree-widget-react/components/trees/common/internal/Tooltip.js +3 -15
  64. package/lib/esm/tree-widget-react/components/trees/common/internal/Tooltip.js.map +1 -1
  65. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.d.ts +4 -23
  66. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js +33 -57
  67. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js.map +1 -1
  68. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +2 -2
  69. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js +8 -8
  70. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
  71. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.d.ts +1 -1
  72. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
  73. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.d.ts +2 -2
  74. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js +11 -11
  75. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
  76. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.d.ts +1 -1
  77. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js +1 -1
  78. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
  79. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.d.ts +2 -2
  80. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js +2 -2
  81. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js.map +1 -1
  82. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js +6 -6
  83. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js.map +1 -1
  84. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.d.ts +1 -1
  85. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  86. package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js +36 -220
  87. package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js.map +1 -1
  88. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +24 -87
  89. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -1
  90. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.d.ts +27 -0
  91. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js +170 -0
  92. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js.map +1 -0
  93. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseIdsCache.d.ts +8 -0
  94. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseIdsCache.js +47 -0
  95. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseIdsCache.js.map +1 -0
  96. package/lib/public/locales/en/TreeWidget.json +4 -95
  97. package/package.json +6 -6
  98. package/lib/esm/tree-widget-react/components/tree-header/SearchBox.css +0 -8
@@ -1 +1 @@
1
- {"version":3,"file":"CategoriesTreeVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.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 mergeAll,\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, getTooltipOptions } from \"../../common/internal/Tooltip.js\";\nimport { getClassesByView, getDistinctMapValues, releaseMainThreadOnItemsCount, setDifference, setIntersection } from \"../../common/internal/Utils.js\";\nimport { createVisibilityChangeEventListener } from \"../../common/internal/VisibilityChangeEventListener.js\";\nimport {\n changeElementStateNoChildrenOperator,\n enableCategoryDisplay,\n enableSubCategoryDisplay,\n filterSubModeledElementIds,\n getElementOverriddenVisibility,\n getElementVisibility,\n getSubModeledElementsVisibilityStatus,\n getVisibilityFromAlwaysAndNeverDrawnElementsImpl,\n mergeVisibilityStatuses,\n} from \"../../common/internal/VisibilityUtils.js\";\nimport { createVisibilityHandlerResult } from \"../../common/UseHierarchyVisibility.js\";\nimport { CategoriesTreeNode } from \"./CategoriesTreeNode.js\";\nimport { createFilteredTree, parseCategoryKey, parseSubCategoryKey } from \"./FilteredTree.js\";\n\nimport type { CategoryAlwaysOrNeverDrawnElementsQueryProps } from \"../../common/internal/AlwaysAndNeverDrawnElementInfo.js\";\nimport type { GetVisibilityFromAlwaysAndNeverDrawnElementsProps } from \"../../common/internal/VisibilityUtils.js\";\nimport type { Observable, Subscription } from \"rxjs\";\nimport type { Id64Arg, Id64Array, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport type { Viewport } from \"@itwin/core-frontend\";\nimport type { GroupingHierarchyNode, HierarchyFilteringPath } from \"@itwin/presentation-hierarchies\";\nimport type { ECClassHierarchyInspector } from \"@itwin/presentation-shared\";\nimport type { HierarchyVisibilityHandler, VisibilityStatus } from \"../../common/UseHierarchyVisibility.js\";\nimport type { NonPartialVisibilityStatus } from \"../../common/internal/Tooltip.js\";\nimport type { CategoriesTreeHierarchyConfiguration } from \"../CategoriesTreeDefinition.js\";\nimport type { CategoriesTreeIdsCache } from \"./CategoriesTreeIdsCache.js\";\nimport type { FilteredTree } from \"./FilteredTree.js\";\nimport type { IVisibilityChangeEventListener } from \"../../common/internal/VisibilityChangeEventListener.js\";\nimport type { CategoryId, ElementId, ModelId } from \"../../common/internal/Types.js\";\n\n/** @alpha */\ninterface GetCategoryVisibilityStatusProps {\n categoryIds: Id64Array;\n modelId?: Id64String;\n ignoreSubCategories?: boolean;\n}\n\n/** @alpha */\ninterface ChangeCategoryVisibilityStateProps extends GetCategoryVisibilityStatusProps {\n on: boolean;\n}\n\n/** @alpha */\ninterface GetGeometricElementVisibilityStatusProps {\n elementId: Id64String;\n modelId: Id64String;\n categoryId: Id64String;\n}\n\n/** @alpha */\ninterface ChangeGeometricElementsDisplayStateProps {\n elementIds: Id64Set;\n modelId: Id64String;\n categoryId: Id64String;\n on: boolean;\n}\n\n/** @alpha */\ninterface ChangeModelVisibilityStateProps {\n ids: Id64Arg;\n on: boolean;\n}\n\n/** @alpha */\ninterface GetFilteredNodeVisibilityProps {\n node: HierarchyNode;\n}\n\n/** @alpha */\ninterface ChangeFilteredNodeVisibilityProps extends GetFilteredNodeVisibilityProps {\n on: boolean;\n}\n\n/**\n * Props for `createCategoriesTreeVisibilityHandler`.\n * @internal\n */\nexport interface CategoriesTreeVisibilityHandlerProps {\n viewport: Viewport;\n idsCache: CategoriesTreeIdsCache;\n imodelAccess: ECClassHierarchyInspector;\n filteredPaths?: HierarchyFilteringPath[];\n hierarchyConfig: CategoriesTreeHierarchyConfiguration;\n}\n\n/**\n * Creates an instance if `CategoriesTreeVisibilityHandler`.\n * @internal\n */\nexport function createCategoriesTreeVisibilityHandler(props: CategoriesTreeVisibilityHandlerProps): HierarchyVisibilityHandler & Disposable {\n return new CategoriesTreeVisibilityHandlerImpl(props);\n}\n\nclass CategoriesTreeVisibilityHandlerImpl implements HierarchyVisibilityHandler {\n private readonly _eventListener: IVisibilityChangeEventListener;\n private readonly _alwaysAndNeverDrawnElements: AlwaysAndNeverDrawnElementInfo;\n private readonly _idsCache: CategoriesTreeIdsCache;\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: CategoriesTreeVisibilityHandlerProps) {\n this._eventListener = createVisibilityChangeEventListener({\n viewport: _props.viewport,\n listeners: {\n models: _props.hierarchyConfig.showElements,\n categories: true,\n elements: _props.hierarchyConfig.showElements,\n displayStyle: true,\n },\n });\n this._alwaysAndNeverDrawnElements = new AlwaysAndNeverDrawnElementInfo(_props.viewport);\n this._idsCache = this._props.idsCache;\n const { categoryClass, elementClass, modelClass } = getClassesByView(_props.viewport.view.is2d() ? \"2d\" : \"3d\");\n if (_props.filteredPaths) {\n this._filteredTree = createFilteredTree({\n idsCache: this._idsCache,\n filteringPaths: _props.filteredPaths,\n categoryClassName: categoryClass,\n categoryElementClassName: elementClass,\n categoryModelClassName: modelClass,\n imodelAccess: this._props.imodelAccess,\n });\n }\n this._subscriptions.push(this._elementChangeQueue.pipe(concatAll()).subscribe());\n }\n\n public get onVisibilityChange() {\n return this._eventListener.onVisibilityChange;\n }\n\n public async getVisibilityStatus(node: HierarchyNode): Promise<VisibilityStatus> {\n return firstValueFrom(\n this.getVisibilityStatusObs(node).pipe(\n // unsubscribe from the observable if the change request for this node is received\n takeUntil(this._changeRequest.pipe(filter(({ key, depth }) => depth === node.parentKeys.length && HierarchyNodeKey.equals(node.key, key)))),\n // unsubscribe if visibility changes\n takeUntil(\n fromEventPattern(\n (handler) => {\n this._eventListener.onVisibilityChange.addListener(handler);\n },\n (handler) => {\n this._eventListener.onVisibilityChange.removeListener(handler);\n },\n ),\n ),\n defaultIfEmpty(createVisibilityStatus(\"hidden\")),\n ),\n );\n }\n\n public async changeVisibility(node: HierarchyNode, shouldDisplay: boolean): Promise<void> {\n // notify about new change request\n this._changeRequest.next({ key: node.key, depth: node.parentKeys.length });\n\n const changeObservable = this.changeVisibilityObs(node, shouldDisplay).pipe(\n // unsubscribe from the observable if the change request for this node is received\n takeUntil(this._changeRequest.pipe(filter(({ key, depth }) => depth === node.parentKeys.length && HierarchyNodeKey.equals(node.key, key)))),\n tap({\n subscribe: () => {\n this._eventListener.suppressChangeEvents();\n this._alwaysAndNeverDrawnElements.suppressChangeEvents();\n },\n finalize: () => {\n this._eventListener.resumeChangeEvents();\n this._alwaysAndNeverDrawnElements.resumeChangeEvents();\n },\n }),\n );\n\n return toVoidPromise(changeObservable);\n }\n\n public dispose() {\n this[Symbol.dispose]();\n }\n\n public [Symbol.dispose]() {\n this._eventListener[Symbol.dispose]();\n this._alwaysAndNeverDrawnElements[Symbol.dispose]();\n this._subscriptions.forEach((x) => x.unsubscribe());\n }\n\n private getVisibilityStatusObs(node: HierarchyNode): Observable<VisibilityStatus> {\n if (node.filtering?.filteredChildrenIdentifierPaths?.length && !node.filtering.isFilterTarget) {\n return this.getFilteredNodeVisibility({ node });\n }\n\n if (HierarchyNode.isClassGroupingNode(node)) {\n return this.getClassGroupingNodeDisplayStatus(node);\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (CategoriesTreeNode.isDefinitionContainerNode(node)) {\n return this.getDefinitionContainerDisplayStatus({\n definitionContainerIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n });\n }\n\n if (CategoriesTreeNode.isModelNode(node)) {\n return this.getModelVisibilityStatus({\n modelId: node.key.instanceKeys[0].id,\n });\n }\n\n if (CategoriesTreeNode.isCategoryNode(node)) {\n return this.getCategoryDisplayStatus({\n categoryIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n modelId: CategoriesTreeNode.getModelId(node),\n ignoreSubCategories: node.extendedData?.isCategoryOfSubModel,\n });\n }\n\n const categoryId = CategoriesTreeNode.getCategoryId(node);\n if (!categoryId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (CategoriesTreeNode.isSubCategoryNode(node)) {\n return this.getSubCategoryDisplayStatus({\n categoryId,\n subCategoryIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n });\n }\n\n const modelId = CategoriesTreeNode.getModelId(node);\n if (!modelId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n return this.getElementDisplayStatus({\n elementId: node.key.instanceKeys[0].id,\n modelId,\n categoryId,\n });\n }\n\n private getFilteredNodeVisibility(props: GetFilteredNodeVisibilityProps) {\n return from(this.getVisibilityChangeTargets(props)).pipe(\n mergeMap(({ definitionContainerIds: definitionContainers, subCategories, modelIds: models, categories, elements }) => {\n const observables = new Array<Observable<VisibilityStatus>>();\n if (definitionContainers?.size) {\n observables.push(\n from(definitionContainers).pipe(\n mergeMap((definitionContainerId) =>\n this.getDefinitionContainerDisplayStatus({ definitionContainerIds: [definitionContainerId], ignoreTooltip: true }),\n ),\n ),\n );\n }\n\n if (models?.size) {\n observables.push(from(models).pipe(mergeMap((modelId) => this.getModelVisibilityStatus({ modelId }))));\n }\n\n if (categories?.size) {\n observables.push(\n from(categories).pipe(\n mergeMap((key) => {\n const { modelId, categoryId } = parseCategoryKey(key);\n return this.getCategoryDisplayStatus({ ignoreTooltip: true, ignoreSubCategories: !!modelId, modelId, categoryIds: [categoryId] });\n }),\n ),\n );\n }\n\n if (subCategories?.size) {\n observables.push(\n from(subCategories).pipe(\n mergeMap((key) => {\n const { subCategoryId, categoryId } = parseSubCategoryKey(key);\n return this.getSubCategoryDisplayStatus({ subCategoryIds: [subCategoryId], categoryId, ignoreTooltip: true });\n }),\n ),\n );\n }\n\n if (elements?.size) {\n observables.push(\n from(elements).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(([categoryKey, elementIds]) => {\n const { modelId, categoryId } = parseCategoryKey(categoryKey);\n assert(modelId !== undefined);\n return from(elementIds).pipe(\n releaseMainThreadOnItemsCount(1000),\n mergeMap((elementId) => this.getElementDisplayStatus({ modelId, categoryId, elementId, ignoreTooltip: true })),\n );\n }),\n ),\n );\n }\n\n return merge(...observables);\n }),\n mergeVisibilityStatuses({ visible: undefined, hidden: undefined, partial: undefined }),\n );\n }\n\n private getModelVisibilityStatus({ modelId }: { modelId: Id64String }): Observable<VisibilityStatus> {\n const result = defer(() => {\n const viewport = this._props.viewport;\n\n if (!viewport.view.viewsModel(modelId)) {\n return from(this._idsCache.getModelCategoryIds(modelId)).pipe(\n mergeMap((categoryIds) => from(this._idsCache.getCategoriesModeledElements(modelId, categoryIds))),\n getSubModeledElementsVisibilityStatus({\n ignoreTooltips: true,\n tooltips: { visible: undefined, hidden: undefined, partial: undefined },\n parentNodeVisibilityStatus: createVisibilityStatus(\"hidden\"),\n getModelVisibilityStatus: (modelProps) => this.getModelVisibilityStatus(modelProps),\n }),\n );\n }\n\n return from(this._idsCache.getModelCategoryIds(modelId)).pipe(\n mergeAll(),\n mergeMap((categoryId) => this.getCategoryDisplayStatus({ modelId, categoryIds: [categoryId], ignoreSubCategories: true, ignoreTooltip: true })),\n mergeVisibilityStatuses(\n {\n visible: undefined,\n hidden: undefined,\n partial: undefined,\n },\n true,\n ),\n );\n });\n return createVisibilityHandlerResult(this, { id: modelId }, result, undefined);\n }\n\n private getDefinitionContainerDisplayStatus(props: { definitionContainerIds: Id64Array; ignoreTooltip?: boolean }): Observable<VisibilityStatus> {\n const result = defer(() => {\n return from(this._idsCache.getAllContainedCategories(props.definitionContainerIds)).pipe(\n mergeAll(),\n mergeMap((categoryId) => {\n return this.getCategoryDisplayStatus({ categoryIds: [categoryId], ignoreTooltip: true });\n }),\n mergeVisibilityStatuses({\n visible: \"categoriesTree.definitionContainer.visibleThroughCategories\",\n hidden: \"categoriesTree.definitionContainer.hiddenThroughCategories\",\n partial: \"categoriesTree.definitionContainer.partialThroughCategories\",\n }),\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private getSubCategoryDisplayStatus(props: { categoryId: Id64String; subCategoryIds: Id64Array; ignoreTooltip?: boolean }): Observable<VisibilityStatus> {\n const result = defer(() => {\n const { categoryId, subCategoryIds, ignoreTooltip } = props;\n const categoryOverrideResult = this.getCategoryVisibilityFromOverrides([categoryId], ignoreTooltip);\n if (categoryOverrideResult !== \"none\" && (categoryOverrideResult.state === \"hidden\" || categoryOverrideResult.state === \"visible\")) {\n return of(\n createVisibilityStatus(\n categoryOverrideResult.state,\n getTooltipOptions(`categoriesTree.subCategory.${categoryOverrideResult.state}ThroughCategoryOverride`),\n ),\n );\n }\n\n if (!this._props.viewport.view.viewsCategory(categoryId)) {\n return of(createVisibilityStatus(\"hidden\", getTooltipOptions(\"categoriesTree.subCategory.hiddenThroughCategory\", ignoreTooltip)));\n }\n\n let visibleCount = 0;\n let hiddenCount = 0;\n for (const subCategoryId of subCategoryIds) {\n const isVisible = this._props.viewport.isSubCategoryVisible(subCategoryId);\n if (isVisible) {\n ++visibleCount;\n } else {\n ++hiddenCount;\n }\n if (visibleCount > 0 && hiddenCount > 0) {\n return of(createVisibilityStatus(\"partial\", getTooltipOptions(\"categoriesTree.subCategory.partialThroughSubCategory\", ignoreTooltip)));\n }\n }\n return of(visibleCount > 0 ? createVisibilityStatus(\"visible\") : createVisibilityStatus(\"hidden\"));\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private getCategoryVisibilityFromOverrides(categoryIds: Id64Array, ignoreTooltip?: boolean): VisibilityStatus | \"none\" {\n let showOverrides = 0;\n let hideOverrides = 0;\n\n for (const currentOverride of this._props.viewport.perModelCategoryVisibility) {\n if (categoryIds.includes(currentOverride.categoryId)) {\n if (currentOverride.visible) {\n ++showOverrides;\n } else {\n ++hideOverrides;\n }\n\n if (showOverrides > 0 && hideOverrides > 0) {\n return createVisibilityStatus(\"partial\", getTooltipOptions(\"categoriesTree.category.partialThroughOverrides\", ignoreTooltip));\n }\n }\n }\n\n if (showOverrides === 0 && hideOverrides === 0) {\n return \"none\";\n }\n const visibility = showOverrides > 0 ? \"visible\" : \"hidden\";\n return createVisibilityStatus(visibility, getTooltipOptions(`categoriesTree.category.${visibility}ThroughOverrides`, ignoreTooltip));\n }\n\n private getDefaultModelsCategoryVisibilityStatus({\n modelId,\n categoryIds,\n ignoreTooltip,\n }: {\n categoryIds: Id64Array;\n modelId: Id64String;\n ignoreTooltip?: boolean;\n }): VisibilityStatus {\n const viewport = this._props.viewport;\n\n if (!viewport.view.viewsModel(modelId)) {\n return createVisibilityStatus(\"hidden\", getTooltipOptions(\"categoriesTree.category.hiddenThroughModel\", ignoreTooltip));\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\", getTooltipOptions(\"categoriesTree.category.partialThroughOverrides\", ignoreTooltip));\n }\n }\n if (hiddenCount + visibleCount > 0) {\n const overridenVisibility = hiddenCount > 0 ? \"hidden\" : \"visible\";\n return createVisibilityStatus(overridenVisibility, getTooltipOptions(`categoriesTree.category.${overridenVisibility}ThroughOverrides`, ignoreTooltip));\n }\n\n const visbility = visibleThroughCategorySelectorCount > 0 ? \"visible\" : \"hidden\";\n\n return createVisibilityStatus(visbility, getTooltipOptions(`categoriesTree.category.${visbility}ThroughCategorySelector`, ignoreTooltip));\n }\n\n private async getDefaultCategoryVisibilityStatus({\n categoryIds,\n ignoreTooltip,\n ignoreSubCategories,\n }: {\n categoryIds: Array<CategoryId>;\n ignoreTooltip?: boolean;\n ignoreSubCategories?: boolean;\n }): Promise<VisibilityStatus> {\n const overrideResult = this.getCategoryVisibilityFromOverrides(categoryIds);\n if (overrideResult !== \"none\") {\n return overrideResult;\n }\n let hiddenCount = 0;\n for (const categoryId of categoryIds) {\n const isVisible = this._props.viewport.view.viewsCategory(categoryId);\n if (!isVisible) {\n ++hiddenCount;\n }\n }\n\n if (hiddenCount > 0 || this._props.hierarchyConfig.hideSubCategories || ignoreSubCategories) {\n const visibility = hiddenCount > 0 ? \"hidden\" : \"visible\";\n return createVisibilityStatus(visibility, getTooltipOptions(`categoriesTree.category.${visibility}ThroughCategorySelector`, ignoreTooltip));\n }\n\n const subCategories = getDistinctMapValues(await this._idsCache.getSubCategories(categoryIds));\n let visibleSubCategoryCount = 0;\n let hiddenSubCategoryCount = 0;\n\n for (const subCategory of subCategories) {\n const isVisible = this._props.viewport.isSubCategoryVisible(subCategory);\n if (isVisible) {\n ++visibleSubCategoryCount;\n } else {\n ++hiddenSubCategoryCount;\n }\n if (hiddenSubCategoryCount > 0 && visibleSubCategoryCount > 0) {\n return createVisibilityStatus(\"partial\", getTooltipOptions(\"categoriesTree.category.partialThroughSubCategories\", ignoreTooltip));\n }\n }\n const subCategoryVisiblity = hiddenSubCategoryCount > 0 ? \"hidden\" : \"visible\";\n const reason = subCategories.size > 0 ? \"ThroughSubCategories\" : \"ThroughCategorySelector\";\n\n return createVisibilityStatus(subCategoryVisiblity, getTooltipOptions(`categoriesTree.category.${subCategoryVisiblity}${reason}`, ignoreTooltip));\n }\n\n private getCategoryDisplayStatus({ ignoreTooltip, ...props }: GetCategoryVisibilityStatusProps & { ignoreTooltip?: boolean }): Observable<VisibilityStatus> {\n const result = defer(() => {\n if (!this._props.hierarchyConfig.showElements) {\n return from(this.getDefaultCategoryVisibilityStatus({ categoryIds: props.categoryIds, ignoreTooltip }));\n }\n\n const modelsObservable = props.modelId\n ? of(new Map(props.categoryIds.map((id) => [id, [props.modelId as string]])))\n : from(this._idsCache.getCategoriesElementModels(props.categoryIds));\n return merge(\n // get visibility status from always and never drawn elements\n this._props.hierarchyConfig.showElements\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, ignoreTooltip }))\n : from(this.getDefaultCategoryVisibilityStatus({ categoryIds: props.categoryIds, ignoreTooltip }));\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 tooltips: {\n allElementsInAlwaysDrawnList: \"categoriesTree.category.allElementsVisible\",\n allElementsInNeverDrawnList: \"categoriesTree.category.allElementsHidden\",\n elementsInBothAlwaysAndNeverDrawn: \"categoriesTree.category.someElementsAreHidden\",\n noElementsInExclusiveAlwaysDrawnList: \"categoriesTree.category.allElementsHidden\",\n },\n defaultStatus: () => this.getDefaultModelsCategoryVisibilityStatus({ modelId: model, categoryIds: [category], ignoreTooltip }),\n ignoreTooltip: true,\n }).pipe(\n mergeMap((visibilityStatusAlwaysAndNeverDraw) => {\n return from(this._idsCache.getCategoriesModeledElements(model, [category])).pipe(\n getSubModeledElementsVisibilityStatus({\n tooltips: {\n visible: undefined,\n hidden: undefined,\n partial: undefined,\n },\n parentNodeVisibilityStatus: visibilityStatusAlwaysAndNeverDraw,\n ignoreTooltips: true,\n getModelVisibilityStatus: (modelProps) => this.getModelVisibilityStatus(modelProps),\n }),\n );\n }),\n );\n }\n return from(this._idsCache.getCategoriesModeledElements(model, [category])).pipe(\n getSubModeledElementsVisibilityStatus({\n tooltips: {\n visible: undefined,\n hidden: undefined,\n partial: undefined,\n },\n parentNodeVisibilityStatus: createVisibilityStatus(\"hidden\"),\n ignoreTooltips: true,\n getModelVisibilityStatus: (modelProps) => this.getModelVisibilityStatus(modelProps),\n }),\n );\n }),\n mergeVisibilityStatuses({ visible: undefined, hidden: undefined, partial: undefined }),\n ),\n ),\n mergeVisibilityStatuses(\n {\n visible: \"categoriesTree.category.allElementsVisible\",\n hidden: \"categoriesTree.category.allElementsHidden\",\n partial: \"categoriesTree.category.someElementsHidden\",\n },\n ignoreTooltip,\n ),\n );\n }),\n map((visibilityStatus) => {\n return { visibilityStatus, type: 0 as const };\n }),\n )\n : EMPTY,\n // get category status\n (props.modelId\n ? of(this.getDefaultModelsCategoryVisibilityStatus({ modelId: props.modelId, categoryIds: props.categoryIds, ignoreTooltip }))\n : from(this.getDefaultCategoryVisibilityStatus({ categoryIds: props.categoryIds, ignoreTooltip }))\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\n // a) SubCategories are hidden\n // b) Category needs to ignore subCategories\n // c) Category has model (it means that category is under hidden subModel)\n // We dont need to look at default category status, it is already accounted for in always/never drawn visibility\n if (this._props.hierarchyConfig.hideSubCategories || props.ignoreSubCategories || props.modelId) {\n return alwaysNeverDrawStatus;\n }\n if ((await this._idsCache.getSubCategories(props.categoryIds)).size === 0) {\n return alwaysNeverDrawStatus;\n }\n\n if (alwaysNeverDrawStatus.state === \"partial\") {\n return createVisibilityStatus(\"partial\", getTooltipOptions(\"categoriesTree.category.someChildrenVisible\", ignoreTooltip));\n }\n if (alwaysNeverDrawStatus.state === \"hidden\") {\n if (defaultStatus.state === \"hidden\") {\n return createVisibilityStatus(\"hidden\", getTooltipOptions(\"categoriesTree.category.allChildrenHidden\", ignoreTooltip));\n }\n return createVisibilityStatus(\"partial\", getTooltipOptions(\"categoriesTree.category.partialThroughSubCategories\", ignoreTooltip));\n }\n if (defaultStatus.state === \"hidden\") {\n return createVisibilityStatus(\"partial\", getTooltipOptions(\"categoriesTree.category.someChildrenVisible\", ignoreTooltip));\n }\n return createVisibilityStatus(\"visible\", getTooltipOptions(\"categoriesTree.category.allChildrenVisible\", ignoreTooltip));\n },\n ),\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private getClassGroupingNodeDisplayStatus(node: GroupingHierarchyNode): Observable<VisibilityStatus> {\n const result = defer(() => {\n const info = this.getGroupingNodeInfo(node);\n\n const { modelElementsMap, categoryId } = info;\n return from(modelElementsMap).pipe(\n mergeMap(([modelId, elementIds]) => {\n if (!this._props.viewport.view.viewsModel(modelId)) {\n return of([...elementIds]).pipe(\n filterSubModeledElementIds({ doesSubModelExist: async (id) => this._idsCache.hasSubModel(id) }),\n getSubModeledElementsVisibilityStatus({\n tooltips: {\n visible: undefined,\n hidden: undefined,\n partial: undefined,\n },\n parentNodeVisibilityStatus: createVisibilityStatus(\"hidden\"),\n getModelVisibilityStatus: (modelProps) => this.getModelVisibilityStatus(modelProps),\n }),\n );\n }\n return this.getVisibilityFromAlwaysAndNeverDrawnElements({\n elements: elementIds,\n defaultStatus: () => {\n const status = this.getDefaultModelsCategoryVisibilityStatus({ categoryIds: [categoryId], modelId, ignoreTooltip: true });\n return createVisibilityStatus(status.state, getTooltipOptions(`categoriesTree.groupingNode.${status.state}ThroughCategory`));\n },\n tooltips: {\n allElementsInAlwaysDrawnList: \"categoriesTree.groupingNode.allElementsVisible\",\n allElementsInNeverDrawnList: \"categoriesTree.groupingNode.allElementsHidden\",\n elementsInBothAlwaysAndNeverDrawn: \"categoriesTree.groupingNode.someElementsAreHidden\",\n noElementsInExclusiveAlwaysDrawnList: \"categoriesTree.groupingNode.allElementsHidden\",\n },\n }).pipe(\n mergeMap((visibilityStatusAlwaysAndNeverDraw) => {\n return of([...elementIds]).pipe(\n filterSubModeledElementIds({ doesSubModelExist: async (id) => this._idsCache.hasSubModel(id) }),\n getSubModeledElementsVisibilityStatus({\n tooltips: {\n visible: undefined,\n hidden: undefined,\n partial: undefined,\n },\n parentNodeVisibilityStatus: visibilityStatusAlwaysAndNeverDraw,\n getModelVisibilityStatus: (modelProps) => this.getModelVisibilityStatus(modelProps),\n }),\n );\n }),\n );\n }),\n mergeVisibilityStatuses(\n {\n visible: undefined,\n hidden: undefined,\n partial: undefined,\n },\n true,\n ),\n );\n });\n return createVisibilityHandlerResult(this, { node }, result, undefined);\n }\n\n private getElementDisplayStatus({\n ignoreTooltip,\n ...props\n }: GetGeometricElementVisibilityStatusProps & { ignoreTooltip?: boolean }): Observable<VisibilityStatus> {\n const result: Observable<VisibilityStatus> = defer(() => {\n const viewport = this._props.viewport;\n const { elementId, modelId, categoryId } = props;\n\n const viewsModel = viewport.view.viewsModel(modelId);\n const elementStatus = getElementOverriddenVisibility({\n elementId,\n ignoreTooltip,\n viewport,\n tooltips: {\n visibileThorughAlwaysDrawn: \"categoriesTree.element.displayedThroughAlwaysDrawnList\",\n hiddenThroughAlwaysDrawnExclusive: \"categoriesTree.element.hiddenDueToOtherElementsExclusivelyAlwaysDrawn\",\n hiddenThroughNeverDrawn: \"categoriesTree.element.hiddenThroughNeverDrawnList\",\n },\n });\n\n return from(this._idsCache.hasSubModel(elementId)).pipe(\n mergeMap((hasSubModel) => (hasSubModel ? this.getModelVisibilityStatus({ modelId: elementId }) : of(undefined))),\n map((subModelVisibilityStatus) =>\n getElementVisibility(\n ignoreTooltip,\n viewsModel,\n elementStatus,\n this.getDefaultModelsCategoryVisibilityStatus({ categoryIds: [categoryId], modelId, ignoreTooltip: true }) as unknown as NonPartialVisibilityStatus,\n \"categoriesTree\",\n subModelVisibilityStatus,\n ),\n ),\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n /** Changes visibility of the items represented by the tree node. */\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.isClassGroupingNode(node)) {\n return this.changeElementGroupingNodeState(node, on);\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (CategoriesTreeNode.isDefinitionContainerNode(node)) {\n return this.changeDefinitionContainerState({\n definitionContainerIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n on,\n });\n }\n\n if (CategoriesTreeNode.isModelNode(node)) {\n return this.changeModelState({\n ids: node.key.instanceKeys.map(({ id }) => id),\n on,\n });\n }\n\n if (CategoriesTreeNode.isCategoryNode(node)) {\n return this.changeCategoryState({\n categoryIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n modelId: CategoriesTreeNode.getModelId(node),\n on,\n ignoreSubCategories: node.extendedData?.isCategoryOfSubModel,\n });\n }\n\n const categoryId = CategoriesTreeNode.getCategoryId(node);\n if (!categoryId) {\n return EMPTY;\n }\n\n if (CategoriesTreeNode.isSubCategoryNode(node)) {\n if (this._props.hierarchyConfig.hideSubCategories) {\n return EMPTY;\n }\n return this.changeSubCategoryState({\n categoryId,\n subCategoryIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n on,\n });\n }\n\n if (!this._props.hierarchyConfig.showElements) {\n return EMPTY;\n }\n\n const modelId = CategoriesTreeNode.getModelId(node);\n if (!modelId) {\n return EMPTY;\n }\n\n return this.changeElementsState({\n elementIds: new Set([...node.key.instanceKeys.map(({ id }) => id)]),\n modelId,\n categoryId,\n on,\n });\n }\n\n private async getVisibilityChangeTargets({ node }: GetFilteredNodeVisibilityProps) {\n const filteredTree = await this._filteredTree;\n return filteredTree ? filteredTree.getVisibilityChangeTargets(node) : {};\n }\n\n private changeFilteredNodeVisibility({ on, ...props }: ChangeFilteredNodeVisibilityProps) {\n return from(this.getVisibilityChangeTargets(props)).pipe(\n mergeMap(({ definitionContainerIds: definitionContainers, subCategories, modelIds: models, categories, elements }) => {\n const observables = new Array<Observable<void>>();\n if (definitionContainers?.size) {\n observables.push(this.changeDefinitionContainerState({ definitionContainerIds: [...definitionContainers], on }));\n }\n\n if (models?.size) {\n observables.push(this.changeModelState({ ids: models, on }));\n }\n\n if (categories?.size) {\n observables.push(\n from(categories).pipe(\n mergeMap((key) => {\n const { modelId, categoryId } = parseCategoryKey(key);\n return this.changeCategoryState({ modelId, categoryIds: [categoryId], ignoreSubCategories: false, on });\n }),\n ),\n );\n }\n\n if (subCategories?.size) {\n observables.push(\n from(subCategories).pipe(\n mergeMap((key) => {\n const { subCategoryId, categoryId } = parseSubCategoryKey(key);\n return this.changeSubCategoryState({ categoryId, subCategoryIds: [subCategoryId], on });\n }),\n ),\n );\n }\n\n if (elements?.size) {\n observables.push(\n from(elements).pipe(\n mergeMap(([categoryKey, elementIds]) => {\n const { modelId, categoryId } = parseCategoryKey(categoryKey);\n assert(modelId !== undefined);\n return this.changeElementsState({ modelId, categoryId, elementIds, on });\n }),\n ),\n );\n }\n\n return merge(...observables);\n }),\n );\n }\n\n private changeModelState(props: ChangeModelVisibilityStateProps): Observable<void> {\n const { ids, on } = props;\n\n if (Id64.sizeOf(ids) === 0) {\n return EMPTY;\n }\n\n const result = defer(() => {\n const viewport = this._props.viewport;\n\n viewport.perModelCategoryVisibility.clearOverrides(ids);\n const idsObs = from(Id64.iterable(ids));\n if (!on) {\n viewport.changeModelDisplay(ids, false);\n return idsObs.pipe(\n mergeMap(async (modelId) => ({ modelId, categoryIds: await this._idsCache.getModelCategoryIds(modelId) })),\n mergeMap(({ modelId, categoryIds }) => from(this._idsCache.getCategoriesModeledElements(modelId, categoryIds))),\n mergeMap((modeledElementIds) => this.changeModelState({ ids: modeledElementIds, on })),\n );\n }\n\n return concat(\n from(viewport.addViewedModels(ids)),\n idsObs.pipe(\n mergeMap((modelId) => {\n return from(this._idsCache.getModelCategoryIds(modelId)).pipe(\n mergeAll(),\n mergeMap((categoryId) => this.changeCategoryState({ categoryIds: [categoryId], modelId, on, ignoreSubCategories: true })),\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.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 changeSubCategoryState(props: { categoryId: Id64String; subCategoryIds: Id64Array; on: boolean }): Observable<void> {\n const result = defer(() => {\n return concat(\n // make sure parent category is enabled\n props.on ? from(enableCategoryDisplay(this._props.viewport, [props.categoryId], props.on, false)) : EMPTY,\n from(props.subCategoryIds).pipe(map((subCategoryId) => enableSubCategoryDisplay(this._props.viewport, subCategoryId, props.on))),\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private changeDefinitionContainerState(props: { definitionContainerIds: Id64Array; on: boolean }): Observable<void> {\n const result = defer(() => {\n return from(this._idsCache.getAllContainedCategories(props.definitionContainerIds)).pipe(\n mergeAll(),\n mergeMap((categoryId) => {\n return this.changeCategoryState({ categoryIds: [categoryId], on: props.on });\n }),\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private changeCategoryState(props: ChangeCategoryVisibilityStateProps): Observable<void> {\n const result = defer(() => {\n const { modelId, categoryIds, on, ignoreSubCategories } = props;\n const viewport = this._props.viewport;\n if (!this._props.hierarchyConfig.showElements) {\n return from(enableCategoryDisplay(viewport, categoryIds, on, on));\n }\n\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, ignoreSubCategories ? false : 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, !!ignoreSubCategories);\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.changeModelState({ ids: modeledElementIds, on })),\n ),\n ),\n );\n }),\n ),\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private doChangeElementsState(props: ChangeGeometricElementsDisplayStateProps): Observable<void | undefined> {\n return defer(() => {\n const { modelId, categoryId, elementIds, on } = props;\n const viewport = this._props.viewport;\n return concat(\n on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY,\n defer(() => {\n const categoryVisibility = this.getDefaultModelsCategoryVisibilityStatus({ categoryIds: [categoryId], modelId, ignoreTooltip: true });\n const isDisplayedByDefault = categoryVisibility.state === \"visible\";\n return this.queueElementsVisibilityChange(elementIds, on, isDisplayedByDefault);\n }),\n from(elementIds).pipe(\n mergeMap(async (elementId) => ({ elementId, isSubModel: await this._idsCache.hasSubModel(elementId) })),\n filter(({ isSubModel }) => isSubModel),\n map(({ elementId }) => elementId),\n toArray(),\n mergeMap((subModelIds) => this.changeModelState({ ids: subModelIds, on })),\n ),\n );\n });\n }\n\n /**\n * Updates visibility of all grouping node's elements.\n * @see `changeElementState`\n */\n private changeElementGroupingNodeState(node: GroupingHierarchyNode, on: boolean): Observable<void> {\n const info = this.getGroupingNodeInfo(node);\n const result = from(info.modelElementsMap).pipe(\n mergeMap(([modelId, elementIds]) => {\n return this.doChangeElementsState({ modelId, elementIds, categoryId: info.categoryId, on });\n }),\n );\n return createVisibilityHandlerResult(this, { node, on }, result, undefined);\n }\n\n /**\n * Updates visibility of an element and all its child elements by adding them to the always/never drawn list.\n * @note If element is to be enabled and model is hidden, it will be enabled.\n */\n private changeElementsState(props: ChangeGeometricElementsDisplayStateProps): Observable<void> {\n const result = this.doChangeElementsState(props);\n return createVisibilityHandlerResult(this, props, result, 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 private getVisibilityFromAlwaysAndNeverDrawnElements({\n ignoreTooltip,\n ...props\n }: GetVisibilityFromAlwaysAndNeverDrawnElementsProps &\n ({ elements: Set<ElementId> } | { queryProps: CategoryAlwaysOrNeverDrawnElementsQueryProps }) & { ignoreTooltip?: boolean }): Observable<VisibilityStatus> {\n const viewport = this._props.viewport;\n if (viewport.isAlwaysDrawnExclusive) {\n if (!viewport?.alwaysDrawn?.size) {\n return of(createVisibilityStatus(\"hidden\", getTooltipOptions(props.tooltips.noElementsInExclusiveAlwaysDrawnList, ignoreTooltip)));\n }\n } else if (!viewport?.neverDrawn?.size && !viewport?.alwaysDrawn?.size) {\n return of(props.defaultStatus());\n }\n\n if (\"elements\" in props) {\n return of(\n getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n alwaysDrawn: viewport.alwaysDrawn?.size ? setIntersection(props.elements, viewport.alwaysDrawn) : undefined,\n neverDrawn: viewport.neverDrawn?.size ? setIntersection(props.elements, viewport.neverDrawn) : undefined,\n totalCount: props.elements.size,\n ignoreTooltip,\n viewport,\n }),\n );\n }\n const { modelId, categoryIds } = props.queryProps;\n\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) => {\n return acc + specificModelCategoryCount;\n }, 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 ignoreTooltip,\n viewport,\n });\n }),\n );\n }\n\n private getGroupingNodeInfo(node: GroupingHierarchyNode) {\n const modelElementsMap: Map<ModelId, Set<ElementId>> = node.extendedData?.modelElementsMap;\n const categoryId = node.extendedData?.categoryId;\n assert(!!modelElementsMap && !!categoryId);\n\n return { modelElementsMap, categoryId };\n }\n}\n"]}
1
+ {"version":3,"file":"CategoriesTreeVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.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 mergeAll,\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 { getClassesByView, releaseMainThreadOnItemsCount, setDifference, setIntersection } from \"../../common/internal/Utils.js\";\nimport { createVisibilityChangeEventListener } from \"../../common/internal/VisibilityChangeEventListener.js\";\nimport {\n changeElementStateNoChildrenOperator,\n enableCategoryDisplay,\n enableSubCategoryDisplay,\n filterSubModeledElementIds,\n getElementOverriddenVisibility,\n getElementVisibility,\n getSubModeledElementsVisibilityStatus,\n getVisibilityFromAlwaysAndNeverDrawnElementsImpl,\n mergeVisibilityStatuses,\n} from \"../../common/internal/VisibilityUtils.js\";\nimport { createVisibilityHandlerResult } from \"../../common/UseHierarchyVisibility.js\";\nimport { CategoriesTreeNode } from \"./CategoriesTreeNode.js\";\nimport { createFilteredTree, parseCategoryKey, parseSubCategoryKey } from \"./FilteredTree.js\";\n\nimport type { CategoryAlwaysOrNeverDrawnElementsQueryProps } from \"../../common/internal/AlwaysAndNeverDrawnElementInfo.js\";\nimport type { GetVisibilityFromAlwaysAndNeverDrawnElementsProps } from \"../../common/internal/VisibilityUtils.js\";\nimport type { Observable, Subscription } from \"rxjs\";\nimport type { Id64Arg, Id64Array, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport type { Viewport } from \"@itwin/core-frontend\";\nimport type { GroupingHierarchyNode, HierarchyFilteringPath } from \"@itwin/presentation-hierarchies\";\nimport type { ECClassHierarchyInspector } from \"@itwin/presentation-shared\";\nimport type { HierarchyVisibilityHandler, VisibilityStatus } from \"../../common/UseHierarchyVisibility.js\";\nimport type { NonPartialVisibilityStatus } from \"../../common/internal/Tooltip.js\";\nimport type { CategoriesTreeHierarchyConfiguration } from \"../CategoriesTreeDefinition.js\";\nimport type { CategoriesTreeIdsCache } from \"./CategoriesTreeIdsCache.js\";\nimport type { FilteredTree } from \"./FilteredTree.js\";\nimport type { IVisibilityChangeEventListener } from \"../../common/internal/VisibilityChangeEventListener.js\";\nimport type { CategoryId, ElementId, ModelId } from \"../../common/internal/Types.js\";\n\n/** @alpha */\ninterface GetCategoryVisibilityStatusProps {\n categoryIds: Id64Array;\n modelId?: Id64String;\n ignoreSubCategories?: boolean;\n}\n\n/** @alpha */\ninterface ChangeCategoryVisibilityStateProps extends GetCategoryVisibilityStatusProps {\n on: boolean;\n}\n\n/** @alpha */\ninterface GetGeometricElementVisibilityStatusProps {\n elementId: Id64String;\n modelId: Id64String;\n categoryId: Id64String;\n}\n\n/** @alpha */\ninterface ChangeGeometricElementsDisplayStateProps {\n elementIds: Id64Set;\n modelId: Id64String;\n categoryId: Id64String;\n on: boolean;\n}\n\n/** @alpha */\ninterface ChangeModelVisibilityStateProps {\n ids: Id64Arg;\n on: boolean;\n}\n\n/** @alpha */\ninterface GetFilteredNodeVisibilityProps {\n node: HierarchyNode;\n}\n\n/** @alpha */\ninterface ChangeFilteredNodeVisibilityProps extends GetFilteredNodeVisibilityProps {\n on: boolean;\n}\n\n/**\n * Props for `createCategoriesTreeVisibilityHandler`.\n * @internal\n */\nexport interface CategoriesTreeVisibilityHandlerProps {\n viewport: Viewport;\n idsCache: CategoriesTreeIdsCache;\n imodelAccess: ECClassHierarchyInspector;\n filteredPaths?: HierarchyFilteringPath[];\n hierarchyConfig: CategoriesTreeHierarchyConfiguration;\n}\n\n/**\n * Creates an instance if `CategoriesTreeVisibilityHandler`.\n * @internal\n */\nexport function createCategoriesTreeVisibilityHandler(props: CategoriesTreeVisibilityHandlerProps): HierarchyVisibilityHandler & Disposable {\n return new CategoriesTreeVisibilityHandlerImpl(props);\n}\n\nclass CategoriesTreeVisibilityHandlerImpl implements HierarchyVisibilityHandler {\n private readonly _eventListener: IVisibilityChangeEventListener;\n private readonly _alwaysAndNeverDrawnElements: AlwaysAndNeverDrawnElementInfo;\n private readonly _idsCache: CategoriesTreeIdsCache;\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: CategoriesTreeVisibilityHandlerProps) {\n this._eventListener = createVisibilityChangeEventListener({\n viewport: _props.viewport,\n listeners: {\n models: true,\n categories: true,\n elements: _props.hierarchyConfig.showElements,\n displayStyle: true,\n },\n });\n this._alwaysAndNeverDrawnElements = new AlwaysAndNeverDrawnElementInfo(_props.viewport);\n this._idsCache = this._props.idsCache;\n const { categoryClass, elementClass, modelClass } = getClassesByView(_props.viewport.view.is2d() ? \"2d\" : \"3d\");\n if (_props.filteredPaths) {\n this._filteredTree = createFilteredTree({\n idsCache: this._idsCache,\n filteringPaths: _props.filteredPaths,\n categoryClassName: categoryClass,\n categoryElementClassName: elementClass,\n categoryModelClassName: modelClass,\n imodelAccess: this._props.imodelAccess,\n });\n }\n this._subscriptions.push(this._elementChangeQueue.pipe(concatAll()).subscribe());\n }\n\n public get onVisibilityChange() {\n return this._eventListener.onVisibilityChange;\n }\n\n public async getVisibilityStatus(node: HierarchyNode): Promise<VisibilityStatus> {\n return firstValueFrom(\n this.getVisibilityStatusObs(node).pipe(\n // unsubscribe from the observable if the change request for this node is received\n takeUntil(this._changeRequest.pipe(filter(({ key, depth }) => depth === node.parentKeys.length && HierarchyNodeKey.equals(node.key, key)))),\n // unsubscribe if visibility changes\n takeUntil(\n fromEventPattern(\n (handler) => {\n this._eventListener.onVisibilityChange.addListener(handler);\n },\n (handler) => {\n this._eventListener.onVisibilityChange.removeListener(handler);\n },\n ),\n ),\n defaultIfEmpty(createVisibilityStatus(\"hidden\")),\n ),\n );\n }\n\n public async changeVisibility(node: HierarchyNode, shouldDisplay: boolean): Promise<void> {\n // notify about new change request\n this._changeRequest.next({ key: node.key, depth: node.parentKeys.length });\n\n const changeObservable = this.changeVisibilityObs(node, shouldDisplay).pipe(\n // unsubscribe from the observable if the change request for this node is received\n takeUntil(this._changeRequest.pipe(filter(({ key, depth }) => depth === node.parentKeys.length && HierarchyNodeKey.equals(node.key, key)))),\n tap({\n subscribe: () => {\n this._eventListener.suppressChangeEvents();\n this._alwaysAndNeverDrawnElements.suppressChangeEvents();\n },\n finalize: () => {\n this._eventListener.resumeChangeEvents();\n this._alwaysAndNeverDrawnElements.resumeChangeEvents();\n },\n }),\n );\n\n return toVoidPromise(changeObservable);\n }\n\n public dispose() {\n this[Symbol.dispose]();\n }\n\n public [Symbol.dispose]() {\n this._eventListener[Symbol.dispose]();\n this._alwaysAndNeverDrawnElements[Symbol.dispose]();\n this._subscriptions.forEach((x) => x.unsubscribe());\n }\n\n private getVisibilityStatusObs(node: HierarchyNode): Observable<VisibilityStatus> {\n if (node.filtering?.filteredChildrenIdentifierPaths?.length && !node.filtering.isFilterTarget) {\n return this.getFilteredNodeVisibility({ node });\n }\n\n if (HierarchyNode.isClassGroupingNode(node)) {\n return this.getClassGroupingNodeDisplayStatus(node);\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (CategoriesTreeNode.isDefinitionContainerNode(node)) {\n return this.getDefinitionContainerDisplayStatus({\n definitionContainerIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n });\n }\n\n if (CategoriesTreeNode.isModelNode(node)) {\n return this.getModelVisibilityStatus({\n modelId: node.key.instanceKeys[0].id,\n });\n }\n\n if (CategoriesTreeNode.isCategoryNode(node)) {\n return this.getCategoryDisplayStatus({\n categoryIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n modelId: CategoriesTreeNode.getModelId(node),\n ignoreSubCategories: node.extendedData?.isCategoryOfSubModel,\n });\n }\n\n const categoryId = CategoriesTreeNode.getCategoryId(node);\n if (!categoryId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (CategoriesTreeNode.isSubCategoryNode(node)) {\n return this.getSubCategoryDisplayStatus({\n categoryId,\n subCategoryIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n });\n }\n\n const modelId = CategoriesTreeNode.getModelId(node);\n if (!modelId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n return this.getElementDisplayStatus({\n elementId: node.key.instanceKeys[0].id,\n modelId,\n categoryId,\n });\n }\n\n private getFilteredNodeVisibility(props: GetFilteredNodeVisibilityProps) {\n return from(this.getVisibilityChangeTargets(props)).pipe(\n mergeMap(({ definitionContainerIds: definitionContainers, subCategories, modelIds: models, categories, elements }) => {\n const observables = new Array<Observable<VisibilityStatus>>();\n if (definitionContainers?.size) {\n observables.push(\n from(definitionContainers).pipe(\n mergeMap((definitionContainerId) => this.getDefinitionContainerDisplayStatus({ definitionContainerIds: [definitionContainerId] })),\n ),\n );\n }\n\n if (models?.size) {\n observables.push(from(models).pipe(mergeMap((modelId) => this.getModelVisibilityStatus({ modelId }))));\n }\n\n if (categories?.size) {\n observables.push(\n from(categories).pipe(\n mergeMap((key) => {\n const { modelId, categoryId } = parseCategoryKey(key);\n return this.getCategoryDisplayStatus({ ignoreSubCategories: !!modelId, modelId, categoryIds: [categoryId] });\n }),\n ),\n );\n }\n\n if (subCategories?.size) {\n observables.push(\n from(subCategories).pipe(\n mergeMap((key) => {\n const { subCategoryId, categoryId } = parseSubCategoryKey(key);\n return this.getSubCategoryDisplayStatus({ subCategoryIds: [subCategoryId], categoryId });\n }),\n ),\n );\n }\n\n if (elements?.size) {\n observables.push(\n from(elements).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(([categoryKey, elementIds]) => {\n const { modelId, categoryId } = parseCategoryKey(categoryKey);\n assert(modelId !== undefined);\n return from(elementIds).pipe(\n releaseMainThreadOnItemsCount(1000),\n mergeMap((elementId) => this.getElementDisplayStatus({ modelId, categoryId, elementId })),\n );\n }),\n ),\n );\n }\n\n return merge(...observables);\n }),\n mergeVisibilityStatuses,\n );\n }\n\n private getModelVisibilityStatus({ modelId }: { modelId: Id64String }): Observable<VisibilityStatus> {\n const result = defer(() => {\n const viewport = this._props.viewport;\n\n if (!viewport.view.viewsModel(modelId)) {\n return from(this._idsCache.getModelCategoryIds(modelId)).pipe(\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\n return from(this._idsCache.getModelCategoryIds(modelId)).pipe(\n mergeAll(),\n mergeMap((categoryId) => this.getCategoryDisplayStatus({ modelId, categoryIds: [categoryId], ignoreSubCategories: true })),\n mergeVisibilityStatuses,\n );\n });\n return createVisibilityHandlerResult(this, { id: modelId }, result, undefined);\n }\n\n private getDefinitionContainerDisplayStatus(props: { definitionContainerIds: Id64Array }): Observable<VisibilityStatus> {\n const result = defer(() => {\n return from(this._idsCache.getAllContainedCategories(props.definitionContainerIds)).pipe(\n mergeAll(),\n mergeMap((categoryId) => this.getCategoryDisplayStatus({ categoryIds: [categoryId] })),\n mergeVisibilityStatuses,\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private getSubCategoryDisplayStatus(props: { categoryId: Id64String; subCategoryIds: Id64Array }): Observable<VisibilityStatus> {\n const result = defer(async () => {\n const { categoryId, subCategoryIds } = props;\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 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 (subCategoryIds.length === 0) {\n if (visibility === \"hidden\") {\n return createVisibilityStatus(\"partial\");\n }\n return createVisibilityStatus(\"visible\");\n }\n\n for (const subCategoryId of subCategoryIds) {\n const isSubCategoryVisible = this._props.viewport.isSubCategoryVisible(subCategoryId);\n if (isSubCategoryVisible && visibility === \"hidden\") {\n return createVisibilityStatus(\"partial\");\n }\n if (!isSubCategoryVisible && visibility === \"visible\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = isSubCategoryVisible ? \"visible\" : \"hidden\";\n }\n assert(visibility === \"visible\" || visibility === \"hidden\");\n return createVisibilityStatus(visibility);\n });\n return createVisibilityHandlerResult(this, props, 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 return from(this._idsCache.getSubCategories(categoryIds)).pipe(\n mergeMap((categoriesSubCategoriesMap) => {\n return from(categoryIds).pipe(\n mergeMap((categoryId) => {\n const subCategoryIds = categoriesSubCategoriesMap.get(categoryId);\n return this.getSubCategoryDisplayStatus({ subCategoryIds: subCategoryIds ?? [], categoryId });\n }),\n mergeVisibilityStatuses,\n );\n }),\n );\n }\n\n private getCategoryDisplayStatus(props: GetCategoryVisibilityStatusProps): Observable<VisibilityStatus> {\n const result = defer(() => {\n if (!this._props.hierarchyConfig.showElements) {\n return from(this.getDefaultCategoryVisibilityStatus({ categoryIds: props.categoryIds }));\n }\n\n const modelsObservable = props.modelId\n ? of(new Map(props.categoryIds.map((id) => [id, [props.modelId as string]])))\n : from(this._idsCache.getCategoriesElementModels(props.categoryIds));\n return merge(\n // get visibility status from always and never drawn elements\n this._props.hierarchyConfig.showElements\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 mergeVisibilityStatuses,\n ),\n ),\n mergeVisibilityStatuses,\n );\n }),\n map((visibilityStatus) => {\n return { visibilityStatus, type: 0 as const };\n }),\n )\n : EMPTY,\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\n // a) SubCategories are hidden\n // b) Category has model (it means that category is under hidden subModel)\n // We dont need to look at default category status, it is already accounted for in always/never drawn visibility\n if (this._props.hierarchyConfig.hideSubCategories || props.modelId) {\n return alwaysNeverDrawStatus;\n }\n if ((await this._idsCache.getSubCategories(props.categoryIds)).size === 0) {\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 getClassGroupingNodeDisplayStatus(node: GroupingHierarchyNode): Observable<VisibilityStatus> {\n const result = defer(() => {\n const info = this.getGroupingNodeInfo(node);\n\n const { modelElementsMap, categoryId } = info;\n return from(modelElementsMap).pipe(\n mergeMap(([modelId, elementIds]) => {\n if (!this._props.viewport.view.viewsModel(modelId)) {\n return of([...elementIds]).pipe(\n filterSubModeledElementIds({ doesSubModelExist: async (id) => this._idsCache.hasSubModel(id) }),\n getSubModeledElementsVisibilityStatus({\n parentNodeVisibilityStatus: createVisibilityStatus(\"hidden\"),\n getModelVisibilityStatus: (modelProps) => this.getModelVisibilityStatus(modelProps),\n }),\n );\n }\n return this.getVisibilityFromAlwaysAndNeverDrawnElements({\n elements: elementIds,\n defaultStatus: () => this.getDefaultModelsCategoryVisibilityStatus({ categoryIds: [categoryId], modelId }),\n }).pipe(\n mergeMap((visibilityStatusAlwaysAndNeverDraw) => {\n return of([...elementIds]).pipe(\n filterSubModeledElementIds({ doesSubModelExist: async (id) => this._idsCache.hasSubModel(id) }),\n getSubModeledElementsVisibilityStatus({\n parentNodeVisibilityStatus: visibilityStatusAlwaysAndNeverDraw,\n getModelVisibilityStatus: (modelProps) => this.getModelVisibilityStatus(modelProps),\n }),\n );\n }),\n );\n }),\n mergeVisibilityStatuses,\n );\n });\n return createVisibilityHandlerResult(this, { node }, result, undefined);\n }\n\n private getElementDisplayStatus(props: GetGeometricElementVisibilityStatusProps): Observable<VisibilityStatus> {\n const result: Observable<VisibilityStatus> = defer(() => {\n const viewport = this._props.viewport;\n const { elementId, modelId, categoryId } = props;\n\n const viewsModel = viewport.view.viewsModel(modelId);\n const elementStatus = getElementOverriddenVisibility({\n elementId,\n viewport,\n });\n\n return from(this._idsCache.hasSubModel(elementId)).pipe(\n mergeMap((hasSubModel) => (hasSubModel ? this.getModelVisibilityStatus({ modelId: elementId }) : of(undefined))),\n map((subModelVisibilityStatus) =>\n getElementVisibility(\n viewsModel,\n elementStatus,\n this.getDefaultModelsCategoryVisibilityStatus({ categoryIds: [categoryId], modelId }) as unknown as NonPartialVisibilityStatus,\n subModelVisibilityStatus,\n ),\n ),\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n /** Changes visibility of the items represented by the tree node. */\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.isClassGroupingNode(node)) {\n return this.changeElementGroupingNodeState(node, on);\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (CategoriesTreeNode.isDefinitionContainerNode(node)) {\n return this.changeDefinitionContainerState({\n definitionContainerIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n on,\n });\n }\n\n if (CategoriesTreeNode.isModelNode(node)) {\n return this.changeModelState({\n ids: node.key.instanceKeys.map(({ id }) => id),\n on,\n });\n }\n\n if (CategoriesTreeNode.isCategoryNode(node)) {\n return this.changeCategoryState({\n categoryIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n modelId: CategoriesTreeNode.getModelId(node),\n on,\n ignoreSubCategories: node.extendedData?.isCategoryOfSubModel,\n });\n }\n\n const categoryId = CategoriesTreeNode.getCategoryId(node);\n if (!categoryId) {\n return EMPTY;\n }\n\n if (CategoriesTreeNode.isSubCategoryNode(node)) {\n if (this._props.hierarchyConfig.hideSubCategories) {\n return EMPTY;\n }\n return this.changeSubCategoryState({\n categoryId,\n subCategoryIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n on,\n });\n }\n\n if (!this._props.hierarchyConfig.showElements) {\n return EMPTY;\n }\n\n const modelId = CategoriesTreeNode.getModelId(node);\n if (!modelId) {\n return EMPTY;\n }\n\n return this.changeElementsState({\n elementIds: new Set([...node.key.instanceKeys.map(({ id }) => id)]),\n modelId,\n categoryId,\n on,\n });\n }\n\n private async getVisibilityChangeTargets({ node }: GetFilteredNodeVisibilityProps) {\n const filteredTree = await this._filteredTree;\n return filteredTree ? filteredTree.getVisibilityChangeTargets(node) : {};\n }\n\n private changeFilteredNodeVisibility({ on, ...props }: ChangeFilteredNodeVisibilityProps) {\n return from(this.getVisibilityChangeTargets(props)).pipe(\n mergeMap(({ definitionContainerIds: definitionContainers, subCategories, modelIds: models, categories, elements }) => {\n const observables = new Array<Observable<void>>();\n if (definitionContainers?.size) {\n observables.push(this.changeDefinitionContainerState({ definitionContainerIds: [...definitionContainers], on }));\n }\n\n if (models?.size) {\n observables.push(this.changeModelState({ ids: models, on }));\n }\n\n if (categories?.size) {\n observables.push(\n from(categories).pipe(\n mergeMap((key) => {\n const { modelId, categoryId } = parseCategoryKey(key);\n return this.changeCategoryState({ modelId, categoryIds: [categoryId], ignoreSubCategories: false, on });\n }),\n ),\n );\n }\n\n if (subCategories?.size) {\n observables.push(\n from(subCategories).pipe(\n mergeMap((key) => {\n const { subCategoryId, categoryId } = parseSubCategoryKey(key);\n return this.changeSubCategoryState({ categoryId, subCategoryIds: [subCategoryId], on });\n }),\n ),\n );\n }\n\n if (elements?.size) {\n observables.push(\n from(elements).pipe(\n mergeMap(([categoryKey, elementIds]) => {\n const { modelId, categoryId } = parseCategoryKey(categoryKey);\n assert(modelId !== undefined);\n return this.changeElementsState({ modelId, categoryId, elementIds, on });\n }),\n ),\n );\n }\n\n return merge(...observables);\n }),\n );\n }\n\n private changeModelState(props: ChangeModelVisibilityStateProps): Observable<void> {\n const { ids, on } = props;\n\n if (Id64.sizeOf(ids) === 0) {\n return EMPTY;\n }\n\n const result = defer(() => {\n const viewport = this._props.viewport;\n\n viewport.perModelCategoryVisibility.clearOverrides(ids);\n const idsObs = from(Id64.iterable(ids));\n if (!on) {\n viewport.changeModelDisplay(ids, false);\n return idsObs.pipe(\n mergeMap(async (modelId) => ({ modelId, categoryIds: await this._idsCache.getModelCategoryIds(modelId) })),\n mergeMap(({ modelId, categoryIds }) => from(this._idsCache.getCategoriesModeledElements(modelId, categoryIds))),\n mergeMap((modeledElementIds) => this.changeModelState({ ids: modeledElementIds, on })),\n );\n }\n\n return concat(\n from(viewport.addViewedModels(ids)),\n idsObs.pipe(\n mergeMap((modelId) => {\n return from(this._idsCache.getModelCategoryIds(modelId)).pipe(\n mergeAll(),\n mergeMap((categoryId) => this.changeCategoryState({ categoryIds: [categoryId], modelId, on, ignoreSubCategories: true })),\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.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 changeSubCategoryState(props: { categoryId: Id64String; subCategoryIds: Id64Array; on: boolean }): Observable<void> {\n const result = defer(() => {\n return concat(\n // make sure parent category and models are enabled\n props.on\n ? concat(\n from(enableCategoryDisplay(this._props.viewport, [props.categoryId], props.on, false)),\n from(this.enableCategoriesElementModelsVisibility([props.categoryId])),\n )\n : EMPTY,\n from(props.subCategoryIds).pipe(map((subCategoryId) => enableSubCategoryDisplay(this._props.viewport, subCategoryId, props.on))),\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private async enableCategoriesElementModelsVisibility(categoryIds: Id64Array) {\n const categoriesModelsMap = await this._idsCache.getCategoriesElementModels(categoryIds, true);\n const modelIds = [...categoriesModelsMap.values()].flat();\n const hiddenModels = modelIds.filter((modelId) => !this._props.viewport.view.viewsModel(modelId));\n if (hiddenModels.length > 0) {\n this._props.viewport.changeModelDisplay(hiddenModels, true);\n }\n }\n\n private changeDefinitionContainerState(props: { definitionContainerIds: Id64Array; on: boolean }): Observable<void> {\n const result = defer(() => {\n return from(this._idsCache.getAllContainedCategories(props.definitionContainerIds)).pipe(\n mergeMap((categoryIds) => {\n return this.changeCategoryState({ categoryIds, on: props.on });\n }),\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private changeCategoryState(props: ChangeCategoryVisibilityStateProps): Observable<void> {\n const result = defer(() => {\n const { modelId, categoryIds, on, ignoreSubCategories } = props;\n const viewport = this._props.viewport;\n\n if (!this._props.hierarchyConfig.showElements) {\n return concat(from(enableCategoryDisplay(viewport, categoryIds, on, on)), on ? from(this.enableCategoriesElementModelsVisibility(categoryIds)) : EMPTY);\n }\n\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, ignoreSubCategories ? false : 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, !!ignoreSubCategories);\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.changeModelState({ ids: modeledElementIds, on })),\n ),\n ),\n );\n }),\n ),\n );\n });\n return createVisibilityHandlerResult(this, props, result, undefined);\n }\n\n private doChangeElementsState(props: ChangeGeometricElementsDisplayStateProps): Observable<void | undefined> {\n return defer(() => {\n const { modelId, categoryId, elementIds, on } = props;\n const viewport = this._props.viewport;\n return concat(\n on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY,\n defer(() => {\n const categoryVisibility = this.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.changeModelState({ ids: subModelIds, on })),\n ),\n );\n });\n }\n\n /**\n * Updates visibility of all grouping node's elements.\n * @see `changeElementState`\n */\n private changeElementGroupingNodeState(node: GroupingHierarchyNode, on: boolean): Observable<void> {\n const info = this.getGroupingNodeInfo(node);\n const result = from(info.modelElementsMap).pipe(\n mergeMap(([modelId, elementIds]) => {\n return this.doChangeElementsState({ modelId, elementIds, categoryId: info.categoryId, on });\n }),\n );\n return createVisibilityHandlerResult(this, { node, on }, result, undefined);\n }\n\n /**\n * Updates visibility of an element and all its child elements by adding them to the always/never drawn list.\n * @note If element is to be enabled and model is hidden, it will be enabled.\n */\n private changeElementsState(props: ChangeGeometricElementsDisplayStateProps): Observable<void> {\n const result = this.doChangeElementsState(props);\n return createVisibilityHandlerResult(this, props, result, 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 private getVisibilityFromAlwaysAndNeverDrawnElements(\n props: GetVisibilityFromAlwaysAndNeverDrawnElementsProps & ({ elements: Set<ElementId> } | { queryProps: CategoryAlwaysOrNeverDrawnElementsQueryProps }),\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\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) => {\n return acc + specificModelCategoryCount;\n }, 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 getGroupingNodeInfo(node: GroupingHierarchyNode) {\n const modelElementsMap: Map<ModelId, Set<ElementId>> = node.extendedData?.modelElementsMap;\n const categoryId = node.extendedData?.categoryId;\n assert(!!modelElementsMap && !!categoryId);\n\n return { modelElementsMap, categoryId };\n }\n}\n"]}
@@ -0,0 +1,25 @@
1
+ import type { VisibilityTreeProps } from "../../common/components/VisibilityTree.js";
2
+ import type { CategoriesTreeHierarchyConfiguration } from "../CategoriesTreeDefinition.js";
3
+ import type { CategoriesTreeIdsCache } from "./CategoriesTreeIdsCache.js";
4
+ import type { ModelId } from "../../common/internal/Types.js";
5
+ import type { CategoryInfo } from "../../common/CategoriesVisibilityUtils.js";
6
+ /** @internal */
7
+ export type CategoriesTreeFilteringError = "tooManyFilterMatches" | "unknownFilterError";
8
+ type HierarchyFilteringPaths = Awaited<ReturnType<Required<VisibilityTreeProps>["getFilteredPaths"]>>;
9
+ /** @internal */
10
+ export declare function useFilteredPaths({ filter, viewType, hierarchyConfiguration, getCategoriesTreeIdsCache, onCategoriesFiltered, onFilteredPathsChanged, }: {
11
+ viewType: "2d" | "3d";
12
+ filter?: string;
13
+ hierarchyConfiguration: CategoriesTreeHierarchyConfiguration;
14
+ getCategoriesTreeIdsCache: () => CategoriesTreeIdsCache;
15
+ onCategoriesFiltered?: (categories: {
16
+ categories: CategoryInfo[] | undefined;
17
+ models?: Array<ModelId>;
18
+ }) => void;
19
+ onFilteredPathsChanged: (paths: HierarchyFilteringPaths | undefined) => void;
20
+ }): {
21
+ getPaths: VisibilityTreeProps["getFilteredPaths"] | undefined;
22
+ filteringError: CategoriesTreeFilteringError | undefined;
23
+ };
24
+ export {};
25
+ //# sourceMappingURL=UseFilteredPaths.d.ts.map
@@ -0,0 +1,133 @@
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 { useEffect, useMemo, useState } from "react";
6
+ import { assert } from "@itwin/core-bentley";
7
+ import { HierarchyFilteringPath, HierarchyNodeIdentifier } from "@itwin/presentation-hierarchies";
8
+ import { DEFINITION_CONTAINER_CLASS_NAME, SUB_CATEGORY_CLASS_NAME } from "../../common/internal/ClassNameDefinitions.js";
9
+ import { getClassesByView } from "../../common/internal/Utils.js";
10
+ import { FilterLimitExceededError } from "../../common/TreeErrors.js";
11
+ import { useTelemetryContext } from "../../common/UseTelemetryContext.js";
12
+ import { CategoriesTreeDefinition } from "../CategoriesTreeDefinition.js";
13
+ /** @internal */
14
+ export function useFilteredPaths({ filter, viewType, hierarchyConfiguration, getCategoriesTreeIdsCache, onCategoriesFiltered, onFilteredPathsChanged, }) {
15
+ const [filteringError, setFilteringError] = useState();
16
+ const { onFeatureUsed } = useTelemetryContext();
17
+ useEffect(() => {
18
+ setFilteringError(undefined);
19
+ onCategoriesFiltered?.({ categories: undefined, models: undefined });
20
+ if (!filter) {
21
+ onFilteredPathsChanged(undefined);
22
+ }
23
+ }, [filter, onCategoriesFiltered, onFilteredPathsChanged]);
24
+ const getFilteredPaths = useMemo(() => {
25
+ if (!filter) {
26
+ return undefined;
27
+ }
28
+ return async ({ imodelAccess }) => {
29
+ onFeatureUsed({ featureId: "filtering", reportInteraction: true });
30
+ try {
31
+ const paths = await CategoriesTreeDefinition.createInstanceKeyPaths({
32
+ imodelAccess,
33
+ label: filter,
34
+ viewType,
35
+ idsCache: getCategoriesTreeIdsCache(),
36
+ hierarchyConfig: hierarchyConfiguration,
37
+ });
38
+ onFilteredPathsChanged(paths);
39
+ const { elementClass, modelClass } = getClassesByView(viewType);
40
+ onCategoriesFiltered?.(await getCategoriesFromPaths(paths, getCategoriesTreeIdsCache(), elementClass, modelClass));
41
+ return paths;
42
+ }
43
+ catch (e) {
44
+ const newError = e instanceof FilterLimitExceededError ? "tooManyFilterMatches" : "unknownFilterError";
45
+ if (newError !== "tooManyFilterMatches") {
46
+ const feature = e instanceof Error && e.message.includes("query too long to execute or server is too busy") ? "error-timeout" : "error-unknown";
47
+ onFeatureUsed({ featureId: feature, reportInteraction: false });
48
+ }
49
+ setFilteringError(newError);
50
+ return [];
51
+ }
52
+ };
53
+ }, [onCategoriesFiltered, filter, onFilteredPathsChanged, onFeatureUsed, viewType, getCategoriesTreeIdsCache, hierarchyConfiguration]);
54
+ return {
55
+ getPaths: getFilteredPaths,
56
+ filteringError,
57
+ };
58
+ }
59
+ async function getCategoriesFromPaths(paths, idsCache, elementClassName, modelsClassName) {
60
+ if (!paths) {
61
+ return { categories: undefined };
62
+ }
63
+ const rootFilteredElementIds = new Set();
64
+ const subModelIds = new Set();
65
+ const categories = new Map();
66
+ for (const path of paths) {
67
+ const currPath = HierarchyFilteringPath.normalize(path).path;
68
+ if (currPath.length === 0) {
69
+ continue;
70
+ }
71
+ let category;
72
+ let subCategory;
73
+ let lastNodeInfo;
74
+ for (let i = 0; i < currPath.length; ++i) {
75
+ const currentNode = currPath[i];
76
+ if (!HierarchyNodeIdentifier.isInstanceNodeIdentifier(currentNode)) {
77
+ continue;
78
+ }
79
+ if (currentNode.className === elementClassName) {
80
+ rootFilteredElementIds.add(currentNode.id);
81
+ for (let j = i + 1; j < currPath.length; ++j) {
82
+ const childNode = currPath[j];
83
+ if (!HierarchyNodeIdentifier.isInstanceNodeIdentifier(childNode)) {
84
+ continue;
85
+ }
86
+ if (childNode.className === modelsClassName) {
87
+ subModelIds.add(childNode.id);
88
+ }
89
+ }
90
+ break;
91
+ }
92
+ lastNodeInfo = { lastNode: currentNode, nodeIndex: i };
93
+ }
94
+ assert(lastNodeInfo !== undefined && HierarchyNodeIdentifier.isInstanceNodeIdentifier(lastNodeInfo.lastNode));
95
+ if (lastNodeInfo.lastNode.className === DEFINITION_CONTAINER_CLASS_NAME) {
96
+ const definitionContainerCategories = await idsCache.getAllContainedCategories([lastNodeInfo.lastNode.id]);
97
+ for (const categoryId of definitionContainerCategories) {
98
+ const value = categories.get(categoryId);
99
+ if (value === undefined) {
100
+ categories.set(categoryId, []);
101
+ }
102
+ }
103
+ continue;
104
+ }
105
+ if (lastNodeInfo.lastNode.className === SUB_CATEGORY_CLASS_NAME) {
106
+ const secondToLastNode = lastNodeInfo.nodeIndex > 0 ? currPath[lastNodeInfo.nodeIndex - 1] : undefined;
107
+ assert(secondToLastNode !== undefined && HierarchyNodeIdentifier.isInstanceNodeIdentifier(secondToLastNode));
108
+ subCategory = lastNodeInfo.lastNode;
109
+ category = secondToLastNode;
110
+ }
111
+ else {
112
+ category = lastNodeInfo.lastNode;
113
+ }
114
+ let entry = categories.get(category.id);
115
+ if (entry === undefined) {
116
+ entry = [];
117
+ categories.set(category.id, entry);
118
+ }
119
+ if (subCategory) {
120
+ entry.push(subCategory.id);
121
+ }
122
+ }
123
+ const rootElementModelMap = await idsCache.getFilteredElementsModels([...rootFilteredElementIds]);
124
+ const models = [...subModelIds, ...new Set(rootElementModelMap.values())];
125
+ return {
126
+ categories: [...categories.entries()].map(([categoryId, subCategoryIds]) => ({
127
+ categoryId,
128
+ subCategoryIds: subCategoryIds.length === 0 ? undefined : subCategoryIds,
129
+ })),
130
+ models,
131
+ };
132
+ }
133
+ //# sourceMappingURL=UseFilteredPaths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UseFilteredPaths.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.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 { useEffect, useMemo, useState } from \"react\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { HierarchyFilteringPath, HierarchyNodeIdentifier } from \"@itwin/presentation-hierarchies\";\nimport { DEFINITION_CONTAINER_CLASS_NAME, SUB_CATEGORY_CLASS_NAME } from \"../../common/internal/ClassNameDefinitions.js\";\nimport { getClassesByView } from \"../../common/internal/Utils.js\";\nimport { FilterLimitExceededError } from \"../../common/TreeErrors.js\";\nimport { useTelemetryContext } from \"../../common/UseTelemetryContext.js\";\nimport { CategoriesTreeDefinition } from \"../CategoriesTreeDefinition.js\";\n\nimport type { VisibilityTreeProps } from \"../../common/components/VisibilityTree.js\";\nimport type { CategoriesTreeHierarchyConfiguration } from \"../CategoriesTreeDefinition.js\";\nimport type { CategoriesTreeIdsCache } from \"./CategoriesTreeIdsCache.js\";\nimport type { CategoryId, ElementId, ModelId, SubCategoryId } from \"../../common/internal/Types.js\";\nimport type { CategoryInfo } from \"../../common/CategoriesVisibilityUtils.js\";\n\n/** @internal */\nexport type CategoriesTreeFilteringError = \"tooManyFilterMatches\" | \"unknownFilterError\";\n\ntype HierarchyFilteringPaths = Awaited<ReturnType<Required<VisibilityTreeProps>[\"getFilteredPaths\"]>>;\n\n/** @internal */\nexport function useFilteredPaths({\n filter,\n viewType,\n hierarchyConfiguration,\n getCategoriesTreeIdsCache,\n onCategoriesFiltered,\n onFilteredPathsChanged,\n}: {\n viewType: \"2d\" | \"3d\";\n filter?: string;\n hierarchyConfiguration: CategoriesTreeHierarchyConfiguration;\n getCategoriesTreeIdsCache: () => CategoriesTreeIdsCache;\n onCategoriesFiltered?: (categories: { categories: CategoryInfo[] | undefined; models?: Array<ModelId> }) => void;\n onFilteredPathsChanged: (paths: HierarchyFilteringPaths | undefined) => void;\n}): {\n getPaths: VisibilityTreeProps[\"getFilteredPaths\"] | undefined;\n filteringError: CategoriesTreeFilteringError | undefined;\n} {\n const [filteringError, setFilteringError] = useState<CategoriesTreeFilteringError | undefined>();\n const { onFeatureUsed } = useTelemetryContext();\n\n useEffect(() => {\n setFilteringError(undefined);\n onCategoriesFiltered?.({ categories: undefined, models: undefined });\n if (!filter) {\n onFilteredPathsChanged(undefined);\n }\n }, [filter, onCategoriesFiltered, onFilteredPathsChanged]);\n\n const getFilteredPaths = useMemo<VisibilityTreeProps[\"getFilteredPaths\"] | undefined>(() => {\n if (!filter) {\n return undefined;\n }\n\n return async ({ imodelAccess }) => {\n onFeatureUsed({ featureId: \"filtering\", reportInteraction: true });\n try {\n const paths = await CategoriesTreeDefinition.createInstanceKeyPaths({\n imodelAccess,\n label: filter,\n viewType,\n idsCache: getCategoriesTreeIdsCache(),\n hierarchyConfig: hierarchyConfiguration,\n });\n onFilteredPathsChanged(paths);\n const { elementClass, modelClass } = getClassesByView(viewType);\n onCategoriesFiltered?.(await getCategoriesFromPaths(paths, getCategoriesTreeIdsCache(), elementClass, modelClass));\n return paths;\n } catch (e) {\n const newError = e instanceof FilterLimitExceededError ? \"tooManyFilterMatches\" : \"unknownFilterError\";\n if (newError !== \"tooManyFilterMatches\") {\n const feature = e instanceof Error && e.message.includes(\"query too long to execute or server is too busy\") ? \"error-timeout\" : \"error-unknown\";\n onFeatureUsed({ featureId: feature, reportInteraction: false });\n }\n setFilteringError(newError);\n return [];\n }\n };\n }, [onCategoriesFiltered, filter, onFilteredPathsChanged, onFeatureUsed, viewType, getCategoriesTreeIdsCache, hierarchyConfiguration]);\n\n return {\n getPaths: getFilteredPaths,\n filteringError,\n };\n}\n\nasync function getCategoriesFromPaths(\n paths: HierarchyFilteringPaths,\n idsCache: CategoriesTreeIdsCache,\n elementClassName: string,\n modelsClassName: string,\n): Promise<{ categories: CategoryInfo[] | undefined; models?: Array<ModelId> }> {\n if (!paths) {\n return { categories: undefined };\n }\n\n const rootFilteredElementIds = new Set<ElementId>();\n const subModelIds = new Set<ModelId>();\n\n const categories = new Map<CategoryId, Array<SubCategoryId>>();\n for (const path of paths) {\n const currPath = HierarchyFilteringPath.normalize(path).path;\n if (currPath.length === 0) {\n continue;\n }\n\n let category: HierarchyNodeIdentifier;\n let subCategory: HierarchyNodeIdentifier | undefined;\n\n let lastNodeInfo: { lastNode: HierarchyNodeIdentifier; nodeIndex: number } | undefined;\n\n for (let i = 0; i < currPath.length; ++i) {\n const currentNode = currPath[i];\n if (!HierarchyNodeIdentifier.isInstanceNodeIdentifier(currentNode)) {\n continue;\n }\n if (currentNode.className === elementClassName) {\n rootFilteredElementIds.add(currentNode.id);\n for (let j = i + 1; j < currPath.length; ++j) {\n const childNode = currPath[j];\n if (!HierarchyNodeIdentifier.isInstanceNodeIdentifier(childNode)) {\n continue;\n }\n if (childNode.className === modelsClassName) {\n subModelIds.add(childNode.id);\n }\n }\n break;\n }\n lastNodeInfo = { lastNode: currentNode, nodeIndex: i };\n }\n\n assert(lastNodeInfo !== undefined && HierarchyNodeIdentifier.isInstanceNodeIdentifier(lastNodeInfo.lastNode));\n\n if (lastNodeInfo.lastNode.className === DEFINITION_CONTAINER_CLASS_NAME) {\n const definitionContainerCategories = await idsCache.getAllContainedCategories([lastNodeInfo.lastNode.id]);\n for (const categoryId of definitionContainerCategories) {\n const value = categories.get(categoryId);\n if (value === undefined) {\n categories.set(categoryId, []);\n }\n }\n continue;\n }\n\n if (lastNodeInfo.lastNode.className === SUB_CATEGORY_CLASS_NAME) {\n const secondToLastNode = lastNodeInfo.nodeIndex > 0 ? currPath[lastNodeInfo.nodeIndex - 1] : undefined;\n assert(secondToLastNode !== undefined && HierarchyNodeIdentifier.isInstanceNodeIdentifier(secondToLastNode));\n\n subCategory = lastNodeInfo.lastNode;\n category = secondToLastNode;\n } else {\n category = lastNodeInfo.lastNode;\n }\n\n let entry = categories.get(category.id);\n if (entry === undefined) {\n entry = [];\n categories.set(category.id, entry);\n }\n\n if (subCategory) {\n entry.push(subCategory.id);\n }\n }\n const rootElementModelMap = await idsCache.getFilteredElementsModels([...rootFilteredElementIds]);\n const models = [...subModelIds, ...new Set(rootElementModelMap.values())];\n return {\n categories: [...categories.entries()].map(([categoryId, subCategoryIds]) => ({\n categoryId,\n subCategoryIds: subCategoryIds.length === 0 ? undefined : subCategoryIds,\n })),\n models,\n };\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import { CategoriesTreeIdsCache } from "./CategoriesTreeIdsCache.js";
2
+ import type { IModelConnection } from "@itwin/core-frontend";
3
+ import type { HierarchyFilteringPath } from "@itwin/presentation-hierarchies";
4
+ /** @internal */
5
+ export declare function useIdsCache(imodel: IModelConnection, viewType: "2d" | "3d", filteredPaths?: HierarchyFilteringPath[]): {
6
+ getCache: () => CategoriesTreeIdsCache;
7
+ };
8
+ //# sourceMappingURL=UseIdsCache.d.ts.map