@itwin/tree-widget-react 3.16.1 → 3.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -2
- package/lib/cjs/tree-widget-react/components/SelectableTree.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/TreeSelector.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/TreeWidgetUiItemsProvider.js +1 -1
- package/lib/cjs/tree-widget-react/components/TreeWidgetUiItemsProvider.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/tree-header/TreeHeader.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/tree-header/TreeWithHeader.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTree.d.ts +2 -2
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTree.js +2 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTree.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.d.ts +13 -0
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js +90 -73
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.d.ts +3 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js +21 -8
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.d.ts +21 -9
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +290 -242
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.d.ts +2 -0
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js +16 -7
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/UseActiveViewport.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/UseHierarchyVisibility.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/ProgressOverlay.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/Tree.d.ts +2 -2
- package/lib/cjs/tree-widget-react/components/trees/common/components/Tree.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/TreeNodeCheckbox.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/TreeNodeCheckbox.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/TreeRenderer.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/TreeRenderer.js +2 -2
- package/lib/cjs/tree-widget-react/components/trees/common/components/TreeRenderer.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/VisibilityTree.d.ts +3 -3
- package/lib/cjs/tree-widget-react/components/trees/common/components/VisibilityTree.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTree.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTree.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +8 -5
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/UseModelsTree.js +2 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/UseModelsTree.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/Utils.d.ts +1 -4
- package/lib/cjs/tree-widget-react/components/trees/models-tree/Utils.js +1 -4
- package/lib/cjs/tree-widget-react/components/trees/models-tree/Utils.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +13 -12
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +251 -278
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNode.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNode.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +47 -35
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -1
- package/lib/cjs/tree-widget-react-internal.d.ts +2 -1
- package/lib/cjs/tree-widget-react-internal.js +4 -1
- package/lib/cjs/tree-widget-react-internal.js.map +1 -1
- package/lib/esm/tree-widget-react/components/SelectableTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/TreeSelector.js.map +1 -1
- package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js +1 -1
- package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js.map +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/TreeHeader.js.map +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/TreeWithHeader.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js +2 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.d.ts +13 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js +90 -73
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.d.ts +3 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js +22 -9
- package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.d.ts +21 -9
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +290 -242
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.d.ts +2 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js +16 -7
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseActiveViewport.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeCheckbox.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeCheckbox.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTree.d.ts +3 -3
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +9 -6
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js +2 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.d.ts +1 -4
- package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.js +1 -4
- package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +13 -12
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +252 -279
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNode.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNode.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +47 -35
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react-internal.d.ts +2 -1
- package/lib/esm/tree-widget-react-internal.js +2 -1
- package/lib/esm/tree-widget-react-internal.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelsTreeVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport {\n concat,\n concatAll,\n defaultIfEmpty,\n defer,\n distinct,\n EMPTY,\n filter,\n firstValueFrom,\n forkJoin,\n from,\n fromEventPattern,\n map,\n merge,\n mergeMap,\n of,\n reduce,\n shareReplay,\n startWith,\n Subject,\n take,\n takeUntil,\n tap,\n toArray,\n} from \"rxjs\";\nimport { assert, Id64 } from \"@itwin/core-bentley\";\nimport { PerModelCategoryVisibility } from \"@itwin/core-frontend\";\nimport { HierarchyNode, HierarchyNodeKey } from \"@itwin/presentation-hierarchies\";\nimport { enableCategoryDisplay, loadCategoriesFromViewport } from \"../../common/CategoriesVisibilityUtils.js\";\nimport { reduceWhile, toVoidPromise } from \"../../common/Rxjs.js\";\nimport { createVisibilityStatus } from \"../../common/Tooltip.js\";\nimport { createVisibilityHandlerResult } from \"../../common/UseHierarchyVisibility.js\";\nimport { getIdsFromChildrenTree, releaseMainThreadOnItemsCount } from \"../Utils.js\";\nimport { AlwaysAndNeverDrawnElementInfo } from \"./AlwaysAndNeverDrawnElementInfo.js\";\nimport { createFilteredTree, parseCategoryKey } from \"./FilteredTree.js\";\nimport { ModelsTreeNode } from \"./ModelsTreeNode.js\";\nimport { createVisibilityChangeEventListener } from \"./VisibilityChangeEventListener.js\";\n\nimport type { Observable, OperatorFunction, Subscription } from \"rxjs\";\nimport type { GuidString, Id64Arg, Id64Array, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport type { Viewport } from \"@itwin/core-frontend\";\nimport type { ClassGroupingNodeKey, GroupingHierarchyNode, HierarchyFilteringPath, InstancesNodeKey } from \"@itwin/presentation-hierarchies\";\nimport type { ECClassHierarchyInspector } from \"@itwin/presentation-shared\";\nimport type { Visibility } from \"../../common/Tooltip.js\";\nimport type { HierarchyVisibilityHandler, HierarchyVisibilityHandlerOverridableMethod, VisibilityStatus } from \"../../common/UseHierarchyVisibility.js\";\nimport type { GetElementsTreeProps } from \"./AlwaysAndNeverDrawnElementInfo.js\";\nimport type { FilteredTree } from \"./FilteredTree.js\";\nimport type { ModelsTreeIdsCache } from \"./ModelsTreeIdsCache.js\";\nimport type { IVisibilityChangeEventListener } from \"./VisibilityChangeEventListener.js\";\n\n/** @beta */\ninterface GetCategoryVisibilityStatusProps {\n categoryIds: Id64Arg;\n modelId: Id64String;\n}\n\n/** @beta */\ninterface ChangeCategoryVisibilityStateProps extends GetCategoryVisibilityStatusProps {\n on: boolean;\n}\n\n/** @beta */\ninterface GetGeometricElementVisibilityStatusProps {\n elementId: Id64String;\n modelId: Id64String;\n categoryId: Id64String;\n}\n\n/** @beta */\ninterface ChangeGeometricElementsDisplayStateProps {\n elementIds: Id64Set;\n modelId: Id64String;\n categoryId: Id64String;\n on: boolean;\n}\n\n/** @beta */\ninterface ChangeModelVisibilityStateProps {\n ids: Id64Arg;\n on: boolean;\n}\n\n/** @beta */\ninterface GetFilteredNodeVisibilityProps {\n node: HierarchyNode & { key: ClassGroupingNodeKey | InstancesNodeKey };\n}\n\n/** @beta */\ninterface ChangeFilteredNodeVisibilityProps extends GetFilteredNodeVisibilityProps {\n on: boolean;\n}\n\n/**\n * Functionality of Models tree visibility handler that can be overridden.\n * Each callback is provided original implementation and reference to a `HierarchyVisibilityHandler`.\n * @beta\n */\nexport interface ModelsTreeVisibilityHandlerOverrides {\n getSubjectNodeVisibility?: HierarchyVisibilityHandlerOverridableMethod<(props: { ids: Id64Array }) => Promise<VisibilityStatus>>;\n getModelDisplayStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { ids: Id64Arg }) => Promise<VisibilityStatus>>;\n getCategoryDisplayStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: GetCategoryVisibilityStatusProps) => Promise<VisibilityStatus>>;\n getElementGroupingNodeDisplayStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { node: GroupingHierarchyNode }) => Promise<VisibilityStatus>>;\n getElementDisplayStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: GetGeometricElementVisibilityStatusProps) => Promise<VisibilityStatus>>;\n\n changeSubjectNodeState?: HierarchyVisibilityHandlerOverridableMethod<(props: { ids: Id64Array; on: boolean }) => Promise<void>>;\n changeModelState?: HierarchyVisibilityHandlerOverridableMethod<(props: ChangeModelVisibilityStateProps) => Promise<void>>;\n changeCategoryState?: HierarchyVisibilityHandlerOverridableMethod<(props: ChangeCategoryVisibilityStateProps) => Promise<void>>;\n changeElementGroupingNodeState?: HierarchyVisibilityHandlerOverridableMethod<(props: { node: GroupingHierarchyNode; on: boolean }) => Promise<void>>;\n changeElementsState?: HierarchyVisibilityHandlerOverridableMethod<(props: ChangeGeometricElementsDisplayStateProps) => Promise<void>>;\n}\n\n/**\n * Props for `createModelsTreeVisibilityHandler`.\n * @internal\n */\nexport interface ModelsTreeVisibilityHandlerProps {\n viewport: Viewport;\n idsCache: ModelsTreeIdsCache;\n imodelAccess: ECClassHierarchyInspector;\n overrides?: ModelsTreeVisibilityHandlerOverrides;\n filteredPaths?: HierarchyFilteringPath[];\n componentId?: GuidString;\n}\n\n/**\n * Creates an instance if `ModelsTreeVisibilityHandler`.\n * @internal\n */\nexport function createModelsTreeVisibilityHandler(props: ModelsTreeVisibilityHandlerProps): HierarchyVisibilityHandler & Disposable {\n return new ModelsTreeVisibilityHandlerImpl(props);\n}\n\nclass ModelsTreeVisibilityHandlerImpl implements HierarchyVisibilityHandler {\n readonly #eventListener: IVisibilityChangeEventListener;\n readonly #alwaysAndNeverDrawnElements: AlwaysAndNeverDrawnElementInfo;\n readonly #idsCache: ModelsTreeIdsCache;\n #filteredTree: Promise<FilteredTree> | undefined;\n #elementChangeQueue = new Subject<Observable<void>>();\n #subscriptions: Subscription[] = [];\n #changeRequest = new Subject<{ key: HierarchyNodeKey; depth: number }>();\n readonly #props: ModelsTreeVisibilityHandlerProps;\n\n constructor(props: ModelsTreeVisibilityHandlerProps) {\n this.#props = props;\n this.#eventListener = createVisibilityChangeEventListener(this.#props.viewport);\n this.#alwaysAndNeverDrawnElements = new AlwaysAndNeverDrawnElementInfo(this.#props.viewport, this.#props.componentId);\n this.#idsCache = this.#props.idsCache;\n this.#filteredTree = this.#props.filteredPaths ? createFilteredTree(this.#props.imodelAccess, this.#props.filteredPaths) : undefined;\n this.#subscriptions.push(this.#elementChangeQueue.pipe(concatAll()).subscribe());\n }\n\n public get onVisibilityChange() {\n return this.#eventListener.onVisibilityChange;\n }\n\n public async getVisibilityStatus(node: HierarchyNode): Promise<VisibilityStatus> {\n return firstValueFrom(\n this.getVisibilityStatusObs(node).pipe(\n // unsubscribe from the observable if the change request for this node is received\n takeUntil(this.#changeRequest.pipe(filter(({ key, depth }) => depth === node.parentKeys.length && HierarchyNodeKey.equals(node.key, key)))),\n // unsubscribe if visibility changes\n takeUntil(\n fromEventPattern(\n (handler) => {\n this.#eventListener.onVisibilityChange.addListener(handler);\n },\n (handler) => {\n this.#eventListener.onVisibilityChange.removeListener(handler);\n },\n ),\n ),\n defaultIfEmpty(createVisibilityStatus(\"hidden\")),\n ),\n );\n }\n\n public async changeVisibility(node: HierarchyNode, shouldDisplay: boolean): Promise<void> {\n // notify about new change request\n this.#changeRequest.next({ key: node.key, depth: node.parentKeys.length });\n\n const changeObservable = this.changeVisibilityObs(node, shouldDisplay).pipe(\n // unsubscribe from the observable if the change request for this node is received\n takeUntil(this.#changeRequest.pipe(filter(({ key, depth }) => depth === node.parentKeys.length && HierarchyNodeKey.equals(node.key, key)))),\n tap({\n subscribe: () => {\n this.#eventListener.suppressChangeEvents();\n this.#alwaysAndNeverDrawnElements.suppressChangeEvents();\n },\n finalize: () => {\n this.#eventListener.resumeChangeEvents();\n this.#alwaysAndNeverDrawnElements.resumeChangeEvents();\n },\n }),\n );\n\n return toVoidPromise(changeObservable);\n }\n\n public dispose() {\n this[Symbol.dispose]();\n }\n\n public [Symbol.dispose]() {\n this.#eventListener[Symbol.dispose]();\n this.#alwaysAndNeverDrawnElements[Symbol.dispose]();\n this.#subscriptions.forEach((x) => x.unsubscribe());\n }\n\n private getVisibilityStatusObs(node: HierarchyNode): Observable<VisibilityStatus> {\n if (HierarchyNode.isClassGroupingNode(node)) {\n if (node.extendedData?.hasDirectNonFilteredTargets && !node.filtering?.hasFilterTargetAncestor) {\n return this.getFilteredNodeVisibility({ node });\n }\n return this.getClassGroupingNodeDisplayStatus(node);\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (node.filtering?.filteredChildrenIdentifierPaths?.length && !node.filtering.isFilterTarget) {\n return this.getFilteredNodeVisibility({ node });\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n // note: subject nodes may be merged to represent multiple subject instances\n return this.getSubjectNodeVisibilityStatus({ subjectIds: node.key.instanceKeys.map((key) => key.id) });\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.getModelVisibilityStatus({ modelIds: node.key.instanceKeys.map(({ id }) => id) });\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n if (!modelId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.getCategoryDisplayStatus({\n categoryIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n if (!categoryId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n return this.getElementDisplayStatus({\n elementIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n categoryId,\n });\n }\n\n private getFilteredNodeVisibility(props: GetFilteredNodeVisibilityProps) {\n assert(this.#filteredTree !== undefined);\n return from(this.#filteredTree).pipe(\n map((filteredTree) => filteredTree.getVisibilityChangeTargets(props.node)),\n mergeMap(({ subjects, models, categories, elements }) => {\n const observables = new Array<Observable<VisibilityStatus>>();\n if (subjects?.size) {\n observables.push(this.getSubjectNodeVisibilityStatus({ subjectIds: [...subjects], ignoreTooltip: true }));\n }\n\n if (models?.size) {\n observables.push(this.getModelVisibilityStatus({ modelIds: models, ignoreTooltip: true }));\n }\n\n if (categories?.size) {\n observables.push(\n from(categories).pipe(\n mergeMap((key) => {\n const { modelId, categoryId } = parseCategoryKey(key);\n return this.getCategoryDisplayStatus({ modelId, categoryIds: categoryId, ignoreTooltip: true });\n }),\n ),\n );\n }\n\n if (elements?.size) {\n observables.push(\n from(elements).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(([categoryKey, elementsMap]) => {\n const { modelId, categoryId } = parseCategoryKey(categoryKey);\n return this.getElementsDisplayStatus({\n elementIds: [...elementsMap.keys()],\n modelId,\n categoryId,\n });\n }),\n ),\n );\n }\n\n return merge(...observables);\n }),\n mergeVisibilityStatuses(),\n );\n }\n\n private getSubjectNodeVisibilityStatus({ subjectIds, ignoreTooltip }: { subjectIds: Id64Array; ignoreTooltip?: boolean }): Observable<VisibilityStatus> {\n const result = defer(() => {\n if (!this.#props.viewport.view.isSpatialView()) {\n return of(createVisibilityStatus(\"disabled\", getTooltipOptions(\"modelsTree.subject.nonSpatialView\", ignoreTooltip)));\n }\n\n return from(this.#idsCache.getSubjectModelIds(subjectIds)).pipe(\n mergeMap((modelIds) => this.getModelVisibilityStatus({ modelIds, ignoreTooltip: true })),\n mergeVisibilityStatuses(\n {\n visible: \"modelsTree.subject.allModelsVisible\",\n hidden: \"modelsTree.subject.allModelsHidden\",\n partial: \"modelsTree.subject.someModelsHidden\",\n },\n ignoreTooltip,\n ),\n );\n });\n return createVisibilityHandlerResult(this, { ids: subjectIds }, result, this.#props.overrides?.getSubjectNodeVisibility);\n }\n\n private getModelVisibilityStatus({ modelIds, ignoreTooltip }: { modelIds: Id64Arg; ignoreTooltip?: boolean }): Observable<VisibilityStatus> {\n const result = defer(() => {\n const viewport = this.#props.viewport;\n if (!viewport.view.isSpatialView()) {\n return of(createVisibilityStatus(\"disabled\", getTooltipOptions(\"modelsTree.model.nonSpatialView\", ignoreTooltip)));\n }\n\n return from(Id64.iterable(modelIds)).pipe(\n distinct(),\n mergeMap((modelId) => {\n if (!viewport.view.viewsModel(modelId)) {\n return from(this.#idsCache.getModelCategories(modelId)).pipe(\n mergeMap((categoryIds) => from(this.#idsCache.getCategoriesModeledElements(modelId, categoryIds))),\n this.getSubModeledElementsVisibilityStatus({\n ignoreTooltips: ignoreTooltip,\n haveSubModel: \"yes\",\n tooltips: { visible: undefined, hidden: \"modelsTree.model.hiddenThroughModelSelector\", partial: \"modelsTree.model.someSubModelsVisible\" },\n parentNodeVisibilityStatus: createVisibilityStatus(\"hidden\"),\n }),\n );\n }\n\n return from(this.#idsCache.getModelCategories(modelId)).pipe(\n mergeMap((categoryIds) =>\n categoryIds.length === 0 ? of(createVisibilityStatus(\"visible\")) : this.getCategoryDisplayStatus({ modelId, categoryIds, ignoreTooltip: true }),\n ),\n mergeVisibilityStatuses({\n visible: \"modelsTree.model.allCategoriesVisible\",\n partial: \"modelsTree.model.someCategoriesHidden\",\n hidden: \"modelsTree.model.allCategoriesHidden\",\n }),\n );\n }),\n mergeVisibilityStatuses(),\n );\n });\n return createVisibilityHandlerResult(this, { ids: modelIds }, result, this.#props.overrides?.getModelDisplayStatus);\n }\n\n private getDefaultCategoryVisibilityStatus({\n modelId,\n categoryIds,\n ignoreTooltip,\n }: {\n categoryIds: Id64Arg;\n modelId: Id64String;\n ignoreTooltip?: boolean;\n }): VisibilityStatus {\n const viewport = this.#props.viewport;\n\n if (!viewport.view.viewsModel(modelId) || Id64.sizeOf(categoryIds) === 0) {\n return createVisibilityStatus(\"hidden\", getTooltipOptions(\"modelsTree.category.hiddenThroughModel\", ignoreTooltip));\n }\n\n let visibility: \"visible\" | \"hidden\" | \"unknown\" = \"unknown\";\n for (const categoryId of Id64.iterable(categoryIds)) {\n const override = this.#props.viewport.perModelCategoryVisibility.getOverride(modelId, categoryId);\n if (override === PerModelCategoryVisibility.Override.Show) {\n if (visibility === \"hidden\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = \"visible\";\n continue;\n }\n if (override === PerModelCategoryVisibility.Override.Hide) {\n if (visibility === \"visible\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = \"hidden\";\n continue;\n }\n const isVisible = viewport.view.viewsCategory(categoryId);\n if (isVisible && visibility === \"hidden\") {\n return createVisibilityStatus(\"partial\");\n }\n if (!isVisible && visibility === \"visible\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = isVisible ? \"visible\" : \"hidden\";\n }\n assert(visibility !== \"unknown\");\n\n return createVisibilityStatus(visibility);\n }\n\n private getCategoryDisplayStatus({ ignoreTooltip, ...props }: GetCategoryVisibilityStatusProps & { ignoreTooltip?: boolean }): Observable<VisibilityStatus> {\n const result = defer(() => {\n if (!this.#props.viewport.view.viewsModel(props.modelId)) {\n return from(this.#idsCache.getCategoriesModeledElements(props.modelId, props.categoryIds)).pipe(\n this.getSubModeledElementsVisibilityStatus({\n ignoreTooltips: ignoreTooltip,\n parentNodeVisibilityStatus: createVisibilityStatus(\"hidden\"),\n tooltips: {\n visible: undefined,\n hidden: \"modelsTree.category.hiddenThroughModel\",\n partial: \"modelsTree.category.someElementsOrSubModelsHidden\",\n },\n haveSubModel: \"yes\",\n }),\n );\n }\n\n return this.getVisibilityFromAlwaysAndNeverDrawnElements({\n categoryProps: { categoryIds: props.categoryIds, modelId: props.modelId },\n tooltips: {\n allElementsInAlwaysDrawnList: \"modelsTree.category.allElementsVisible\",\n allElementsInNeverDrawnList: \"modelsTree.category.allElementsHidden\",\n elementsInBothAlwaysAndNeverDrawn: \"modelsTree.category.someElementsAreHidden\",\n noElementsInExclusiveAlwaysDrawnList: \"modelsTree.category.allElementsHidden\",\n },\n defaultStatus: (categoryId) =>\n categoryId\n ? this.getDefaultCategoryVisibilityStatus({ modelId: props.modelId, categoryIds: categoryId })\n : this.getDefaultCategoryVisibilityStatus({ modelId: props.modelId, categoryIds: props.categoryIds }),\n ignoreTooltip,\n }).pipe(\n mergeMap((visibilityStatusAlwaysAndNeverDraw) => {\n return from(this.#idsCache.getCategoriesModeledElements(props.modelId, props.categoryIds)).pipe(\n this.getSubModeledElementsVisibilityStatus({\n tooltips: {\n visible: undefined,\n hidden: \"modelsTree.category.allElementsAndSubModelsHidden\",\n partial: \"modelsTree.category.someElementsOrSubModelsHidden\",\n },\n haveSubModel: \"yes\",\n parentNodeVisibilityStatus: visibilityStatusAlwaysAndNeverDraw,\n ignoreTooltips: ignoreTooltip,\n }),\n );\n }),\n );\n });\n return createVisibilityHandlerResult(this, props, result, this.#props.overrides?.getCategoryDisplayStatus);\n }\n\n private getClassGroupingNodeDisplayStatus(node: GroupingHierarchyNode): Observable<VisibilityStatus> {\n const { elementIds, modelId, categoryId } = this.getGroupingNodeInfo(node);\n const result = this.getElementsDisplayStatus({\n elementIds,\n modelId,\n categoryId,\n });\n return createVisibilityHandlerResult(this, { node }, result, this.#props.overrides?.getElementGroupingNodeDisplayStatus);\n }\n\n private getElementDisplayStatus({\n elementIds,\n modelId,\n categoryId,\n }: {\n elementIds: Id64Array;\n modelId: Id64String;\n categoryId: Id64String;\n }): Observable<VisibilityStatus> {\n const result = this.getElementsDisplayStatus({\n elementIds,\n modelId,\n categoryId,\n });\n return createVisibilityHandlerResult(this, { elementId: elementIds[0], modelId, categoryId }, result, this.#props.overrides?.getElementDisplayStatus);\n }\n\n private getElementsDisplayStatus(props: { elementIds: Id64Array | Id64Set; modelId: Id64String; categoryId: Id64String }): Observable<VisibilityStatus> {\n return defer(() => {\n const { modelId, categoryId, elementIds } = props;\n\n if (!this.#props.viewport.view.viewsModel(modelId)) {\n return of(elementIds).pipe(\n this.getSubModeledElementsVisibilityStatus({\n tooltips: {\n visible: undefined,\n hidden: undefined,\n partial: \"modelsTree.groupingNode.someElementsOrSubModelsHidden\",\n },\n parentNodeVisibilityStatus: createVisibilityStatus(\"hidden\"),\n haveSubModel: \"unknown\",\n }),\n );\n }\n\n return this.getVisibilityFromAlwaysAndNeverDrawnElements({\n elements: elementIds,\n defaultStatus: () => {\n const status = this.getDefaultCategoryVisibilityStatus({ categoryIds: categoryId, modelId, ignoreTooltip: true });\n return createVisibilityStatus(status.state, getTooltipOptions(`modelsTree.groupingNode.${status.state}ThroughCategory`));\n },\n tooltips: {\n allElementsInAlwaysDrawnList: \"modelsTree.groupingNode.allElementsVisible\",\n allElementsInNeverDrawnList: \"modelsTree.groupingNode.allElementsHidden\",\n elementsInBothAlwaysAndNeverDrawn: \"modelsTree.groupingNode.someElementsAreHidden\",\n noElementsInExclusiveAlwaysDrawnList: \"modelsTree.groupingNode.allElementsHidden\",\n },\n }).pipe(\n mergeMap((visibilityStatusAlwaysAndNeverDraw) => {\n return of(elementIds).pipe(\n this.getSubModeledElementsVisibilityStatus({\n tooltips: {\n visible: undefined,\n hidden: \"modelsTree.groupingNode.allElementsAndSubModelsHidden\",\n partial: \"modelsTree.groupingNode.someElementsOrSubModelsHidden\",\n },\n parentNodeVisibilityStatus: visibilityStatusAlwaysAndNeverDraw,\n haveSubModel: \"unknown\",\n }),\n );\n }),\n );\n });\n }\n /** Changes visibility of the items represented by the tree node. */\n private changeVisibilityObs(node: HierarchyNode, on: boolean): Observable<void> {\n const changeObs = defer(() => {\n if (HierarchyNode.isClassGroupingNode(node)) {\n if (node.extendedData?.hasDirectNonFilteredTargets && !node.filtering?.hasFilterTargetAncestor) {\n return this.changeFilteredNodeVisibility({ node, on });\n }\n return this.changeElementGroupingNodeState(node, on);\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (node.filtering?.filteredChildrenIdentifierPaths?.length && !node.filtering.isFilterTarget) {\n return this.changeFilteredNodeVisibility({ node, on });\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n return this.changeSubjectNodeState(\n node.key.instanceKeys.map((key) => key.id),\n on,\n );\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.changeModelState({ ids: node.key.instanceKeys.map(({ id }) => id), on });\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n if (!modelId) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.changeCategoryState({\n categoryIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n on,\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n if (!categoryId) {\n return EMPTY;\n }\n\n return this.changeElementsState({\n elementIds: new Set([...node.key.instanceKeys.map(({ id }) => id)]),\n modelId,\n categoryId,\n on,\n });\n });\n if (this.#props.viewport.isAlwaysDrawnExclusive) {\n return concat(this.removeAlwaysDrawnExclusive(), changeObs);\n }\n return changeObs;\n }\n\n private changeFilteredNodeVisibility({ on, ...props }: ChangeFilteredNodeVisibilityProps) {\n assert(this.#filteredTree !== undefined);\n return from(this.#filteredTree).pipe(\n map((filteredTree) => filteredTree.getVisibilityChangeTargets(props.node)),\n mergeMap(({ subjects, models, categories, elements }) => {\n const observables = new Array<Observable<void>>();\n if (subjects?.size) {\n observables.push(this.changeSubjectNodeState([...subjects], on));\n }\n\n if (models?.size) {\n observables.push(this.changeModelState({ ids: models, on }));\n }\n\n if (categories?.size) {\n observables.push(\n from(categories).pipe(\n mergeMap((key) => {\n const { modelId, categoryId } = parseCategoryKey(key);\n return this.changeCategoryState({ modelId, categoryIds: categoryId, on });\n }),\n ),\n );\n }\n\n if (elements?.size) {\n observables.push(\n from(elements).pipe(\n mergeMap(([categoryKey, elementsMap]) => {\n const { modelId, categoryId } = parseCategoryKey(categoryKey);\n return this.changeElementsState({ modelId, categoryId, elementIds: new Set([...elementsMap.keys()]), on });\n }),\n ),\n );\n }\n\n return merge(...observables);\n }),\n );\n }\n\n private removeAlwaysDrawnExclusive(): Observable<void> {\n return from(this.#idsCache.getAllCategories()).pipe(\n map((categoryIds) => {\n this.#props.viewport.changeCategoryDisplay(categoryIds, false, false);\n this.#props.viewport.clearNeverDrawn();\n this.#props.viewport.perModelCategoryVisibility.clearOverrides();\n this.#props.viewport.setAlwaysDrawn(this.#props.viewport.alwaysDrawn ?? new Set());\n }),\n );\n }\n\n private changeSubjectNodeState(ids: Id64Array, on: boolean): Observable<void> {\n const result = defer(() => {\n if (!this.#props.viewport.view.isSpatialView()) {\n return EMPTY;\n }\n\n return from(this.#idsCache.getSubjectModelIds(ids)).pipe(mergeMap((modelIds) => this.changeModelState({ ids: modelIds, on })));\n });\n return createVisibilityHandlerResult(this, { ids, on }, result, this.#props.overrides?.changeSubjectNodeState);\n }\n\n private changeModelState(props: ChangeModelVisibilityStateProps): Observable<void> {\n const { ids, on } = props;\n\n if (Id64.sizeOf(ids) === 0) {\n return EMPTY;\n }\n\n const result = defer(() => {\n const viewport = this.#props.viewport;\n if (!viewport.view.isSpatialView()) {\n return EMPTY;\n }\n\n const idsObs = from(Id64.iterable(ids));\n if (!on) {\n viewport.changeModelDisplay(ids, false);\n return idsObs.pipe(\n mergeMap(async (modelId) => ({ modelId, categoryIds: await this.#idsCache.getModelCategories(modelId) })),\n mergeMap(({ modelId, categoryIds }) => from(this.#idsCache.getCategoriesModeledElements(modelId, categoryIds))),\n mergeMap((modeledElementIds) => this.changeModelState({ ids: modeledElementIds, on })),\n );\n }\n\n return concat(\n defer(() => {\n viewport.perModelCategoryVisibility.clearOverrides(ids);\n return from(viewport.addViewedModels(ids));\n }),\n idsObs.pipe(\n mergeMap((modelId) => {\n return from(this.#idsCache.getModelCategories(modelId)).pipe(\n mergeMap((categoryIds) => this.changeCategoryState({ categoryIds, modelId, on: true })),\n );\n }),\n ),\n );\n });\n return createVisibilityHandlerResult(this, props, result, this.#props.overrides?.changeModelState);\n }\n\n private showModelWithoutAnyCategoriesOrElements(modelId: Id64String): Observable<void> {\n const viewport = this.#props.viewport;\n return forkJoin({\n categories: this.#idsCache.getModelCategories(modelId),\n alwaysDrawnElements: this.getAlwaysOrNeverDrawnElements({ modelIds: modelId, setType: \"always\" }),\n }).pipe(\n mergeMap(async ({ categories, alwaysDrawnElements }) => {\n const alwaysDrawn = this.#props.viewport.alwaysDrawn;\n if (alwaysDrawn && alwaysDrawnElements) {\n viewport.setAlwaysDrawn(setDifference(alwaysDrawn, alwaysDrawnElements));\n }\n categories.forEach((categoryId) => {\n this.changeCategoryStateInViewportAccordingToModelVisibility(modelId, categoryId, false);\n });\n await viewport.addViewedModels(modelId);\n }),\n );\n }\n\n private changeCategoryStateInViewportAccordingToModelVisibility(modelId: string, categoryId: string, on: boolean) {\n const viewport = this.#props.viewport;\n const isDisplayedInSelector = viewport.view.viewsCategory(categoryId);\n const override =\n on === isDisplayedInSelector\n ? PerModelCategoryVisibility.Override.None\n : on\n ? PerModelCategoryVisibility.Override.Show\n : PerModelCategoryVisibility.Override.Hide;\n viewport.perModelCategoryVisibility.setOverride(modelId, categoryId, override);\n if (override === PerModelCategoryVisibility.Override.None && on) {\n // we took off the override which means the category is displayed in selector, but\n // doesn't mean all its subcategories are displayed - this call ensures that\n viewport.changeCategoryDisplay(categoryId, true, true);\n }\n }\n\n private changeCategoryState(props: ChangeCategoryVisibilityStateProps): Observable<void> {\n const result = defer(() => {\n const viewport = this.#props.viewport;\n const { modelId, categoryIds, on } = props;\n return concat(\n props.on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY,\n defer(() => {\n for (const categoryId of Id64.iterable(categoryIds)) {\n this.changeCategoryStateInViewportAccordingToModelVisibility(modelId, categoryId, on);\n }\n return this.clearAlwaysAndNeverDrawnElements(props);\n }),\n from(this.#idsCache.getCategoriesModeledElements(modelId, categoryIds)).pipe(\n mergeMap((modeledElementIds) => this.changeModelState({ ids: modeledElementIds, on })),\n ),\n );\n });\n return createVisibilityHandlerResult(this, props, result, this.#props.overrides?.changeCategoryState);\n }\n\n private doChangeElementsState(props: ChangeGeometricElementsDisplayStateProps): Observable<void | undefined> {\n return defer(() => {\n const { modelId, categoryId, elementIds, on } = props;\n const viewport = this.#props.viewport;\n return concat(\n on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY,\n defer(() => {\n const categoryVisibility = this.getDefaultCategoryVisibilityStatus({ categoryIds: categoryId, modelId, ignoreTooltip: true });\n const isDisplayedByDefault = categoryVisibility.state === \"visible\";\n return this.queueElementsVisibilityChange(elementIds, on, isDisplayedByDefault);\n }),\n from(elementIds).pipe(\n mergeMap(async (elementId) => ({ elementId, isSubModel: await this.#idsCache.hasSubModel(elementId) })),\n filter(({ isSubModel }) => isSubModel),\n map(({ elementId }) => elementId),\n toArray(),\n mergeMap((subModelIds) => this.changeModelState({ ids: subModelIds, on })),\n ),\n );\n });\n }\n\n /**\n * Updates visibility of all grouping node's elements.\n * @see `changeElementState`\n */\n private changeElementGroupingNodeState(node: GroupingHierarchyNode, on: boolean): Observable<void> {\n const result = this.doChangeElementsState({ ...this.getGroupingNodeInfo(node), on });\n return createVisibilityHandlerResult(this, { node, on }, result, this.#props.overrides?.changeElementGroupingNodeState);\n }\n\n /**\n * Updates visibility of an element and all its child elements by adding them to the always/never drawn list.\n * @note If element is to be enabled and model is hidden, it will be enabled.\n */\n private changeElementsState(props: ChangeGeometricElementsDisplayStateProps): Observable<void> {\n const result = this.doChangeElementsState(props);\n return createVisibilityHandlerResult(this, props, result, this.#props.overrides?.changeElementsState);\n }\n\n private queueElementsVisibilityChange(elementIds: Id64Set, on: boolean, visibleByDefault: boolean) {\n const finishedSubject = new Subject<boolean>();\n // observable to track if visibility change is finished/cancelled\n const changeFinished = finishedSubject.pipe(\n startWith(false),\n shareReplay(1),\n filter((finished) => finished),\n );\n\n const changeObservable = from(elementIds).pipe(\n // check if visibility change is not finished (cancelled) due to change overall change request being cancelled\n takeUntil(changeFinished),\n this.changeElementStateNoChildrenOperator({ on, isDisplayedByDefault: visibleByDefault }),\n tap({\n next: () => {\n // notify that visibility change is finished\n finishedSubject.next(true);\n },\n }),\n );\n\n // queue visibility change. `changeObservable` will be subscribed to when other queue changes are finished\n this.#elementChangeQueue.next(changeObservable);\n\n // return observable that will emit when visibility change is finished\n return changeFinished.pipe(\n take(1),\n tap({\n unsubscribe: () => {\n // if this observable is unsubscribed before visibility change is finished, we have to notify that it queued change request is cancelled\n finishedSubject.next(true);\n },\n }),\n map(() => undefined),\n );\n }\n\n private changeElementStateNoChildrenOperator(props: { on: boolean; isDisplayedByDefault: boolean }): OperatorFunction<string, void> {\n return (elementIds: Observable<Id64String>) => {\n const { on, isDisplayedByDefault } = props;\n const isAlwaysDrawnExclusive = this.#props.viewport.isAlwaysDrawnExclusive;\n return elementIds.pipe(\n releaseMainThreadOnItemsCount(500),\n reduce<string, { changedNeverDrawn: boolean; changedAlwaysDrawn: boolean; neverDrawn: Id64Set | undefined; alwaysDrawn: Id64Set | undefined }>(\n (acc, elementId) => {\n if (acc.alwaysDrawn === undefined || acc.neverDrawn === undefined) {\n acc.alwaysDrawn = new Set(this.#props.viewport.alwaysDrawn || []);\n acc.neverDrawn = new Set(this.#props.viewport.neverDrawn || []);\n }\n if (on) {\n const wasRemoved = acc.neverDrawn.delete(elementId);\n acc.changedNeverDrawn ||= wasRemoved;\n // If exclusive mode is enabled, we must add the element to the always drawn list.\n if ((!isDisplayedByDefault || isAlwaysDrawnExclusive) && !acc.alwaysDrawn.has(elementId)) {\n acc.alwaysDrawn.add(elementId);\n acc.changedAlwaysDrawn = true;\n }\n } else {\n const wasRemoved = acc.alwaysDrawn.delete(elementId);\n acc.changedAlwaysDrawn ||= wasRemoved;\n // If exclusive mode is not enabled, we have to add the element to the never drawn list.\n if (isDisplayedByDefault && !isAlwaysDrawnExclusive && !acc.neverDrawn.has(elementId)) {\n acc.neverDrawn.add(elementId);\n acc.changedNeverDrawn = true;\n }\n }\n return acc;\n },\n {\n changedNeverDrawn: false,\n changedAlwaysDrawn: false,\n neverDrawn: undefined,\n alwaysDrawn: undefined,\n },\n ),\n map((state) => {\n state.changedNeverDrawn && state.neverDrawn && this.#props.viewport.setNeverDrawn(state.neverDrawn);\n state.changedAlwaysDrawn && state.alwaysDrawn && this.#props.viewport.setAlwaysDrawn(state.alwaysDrawn, this.#props.viewport.isAlwaysDrawnExclusive);\n }),\n );\n };\n }\n\n private getVisibilityFromAlwaysAndNeverDrawnElementsImpl(\n props: {\n alwaysDrawn: Id64Set | undefined;\n neverDrawn: Id64Set | undefined;\n totalCount: number;\n } & GetVisibilityFromAlwaysAndNeverDrawnElementsProps & { ignoreTooltip?: boolean },\n ): VisibilityStatus {\n const { alwaysDrawn, neverDrawn, totalCount, ignoreTooltip } = props;\n if (totalCount === 0) {\n return props.defaultStatus();\n }\n if (neverDrawn?.size === totalCount) {\n return createVisibilityStatus(\"hidden\", getTooltipOptions(props.tooltips.allElementsInNeverDrawnList, ignoreTooltip));\n }\n\n if (alwaysDrawn?.size === totalCount) {\n return createVisibilityStatus(\"visible\", getTooltipOptions(props.tooltips.allElementsInAlwaysDrawnList, ignoreTooltip));\n }\n\n const viewport = this.#props.viewport;\n if (viewport.isAlwaysDrawnExclusive && viewport.alwaysDrawn?.size) {\n return alwaysDrawn?.size\n ? createVisibilityStatus(\"partial\", getTooltipOptions(props.tooltips.elementsInBothAlwaysAndNeverDrawn, ignoreTooltip))\n : createVisibilityStatus(\"hidden\", getTooltipOptions(props.tooltips.noElementsInExclusiveAlwaysDrawnList, ignoreTooltip));\n }\n\n const status = props.defaultStatus();\n if ((status.state === \"visible\" && neverDrawn?.size) || (status.state === \"hidden\" && alwaysDrawn?.size)) {\n return createVisibilityStatus(\"partial\", getTooltipOptions(undefined, ignoreTooltip));\n }\n return status;\n }\n\n private getVisibilityFromAlwaysAndNeverDrawnElements({\n ignoreTooltip,\n ...props\n }: GetVisibilityFromAlwaysAndNeverDrawnElementsProps &\n ({ elements: Id64Set | Id64Array } | { categoryProps: { categoryIds: Id64Arg; modelId: Id64String } }) & {\n ignoreTooltip?: boolean;\n }): Observable<VisibilityStatus> {\n const viewport = this.#props.viewport;\n if (viewport.isAlwaysDrawnExclusive) {\n if (!viewport?.alwaysDrawn?.size) {\n return of(createVisibilityStatus(\"hidden\", getTooltipOptions(props.tooltips.noElementsInExclusiveAlwaysDrawnList, ignoreTooltip)));\n }\n } else if (!viewport?.neverDrawn?.size && !viewport?.alwaysDrawn?.size) {\n return of(props.defaultStatus());\n }\n\n if (\"elements\" in props) {\n return of(\n this.getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n alwaysDrawn: viewport.alwaysDrawn?.size ? setIntersection(props.elements, viewport.alwaysDrawn) : undefined,\n neverDrawn: viewport.neverDrawn?.size ? setIntersection(props.elements, viewport.neverDrawn) : undefined,\n totalCount: Id64.sizeOf(props.elements),\n ignoreTooltip,\n }),\n );\n }\n\n const { modelId, categoryIds } = props.categoryProps;\n return from(Id64.iterable(categoryIds)).pipe(\n mergeMap((categoryId) => {\n const totalCount = this.#idsCache.getCategoryElementsCount(modelId, categoryId);\n return forkJoin({\n totalCount,\n alwaysDrawn: this.getAlwaysOrNeverDrawnElements({ modelIds: modelId, categoryIds: categoryId, setType: \"always\" }),\n neverDrawn: this.getAlwaysOrNeverDrawnElements({ modelIds: modelId, categoryIds: categoryId, setType: \"never\" }),\n }).pipe(\n // There is a known bug:\n // Categories that don't have root elements will make visibility result incorrect\n // E.g.:\n // - CategoryA\n // - ElementA (CategoryA is visible)\n // - ChildElementB (CategoryB is hidden) ChildElementB is in always drawn list\n // Result will be \"partial\" because CategoryB will return hidden visibility, even though all elements are visible\n // TODO fix with: https://github.com/iTwin/viewer-components-react/issues/1100\n map((state) => {\n return this.getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n ...state,\n defaultStatus: () => props.defaultStatus(categoryId),\n ignoreTooltip,\n });\n }),\n );\n }),\n mergeVisibilityStatuses(),\n );\n }\n\n private getAlwaysOrNeverDrawnElements(props: GetElementsTreeProps): Observable<Id64Set> {\n return this.#alwaysAndNeverDrawnElements\n .getElementsTree(props)\n .pipe(map((childrenTree) => getIdsFromChildrenTree({ tree: childrenTree, predicate: ({ treeEntry }) => treeEntry.isInAlwaysOrNeverDrawnSet })));\n }\n\n private clearAlwaysAndNeverDrawnElements(props: { categoryIds: Id64Arg; modelId: Id64String }) {\n return forkJoin({\n alwaysDrawn: this.getAlwaysOrNeverDrawnElements({ modelIds: props.modelId, categoryIds: props.categoryIds, setType: \"always\" }),\n neverDrawn: this.getAlwaysOrNeverDrawnElements({ modelIds: props.modelId, categoryIds: props.categoryIds, setType: \"never\" }),\n }).pipe(\n map(({ alwaysDrawn, neverDrawn }) => {\n const viewport = this.#props.viewport;\n if (viewport.alwaysDrawn?.size && alwaysDrawn.size) {\n viewport.setAlwaysDrawn(setDifference(viewport.alwaysDrawn, alwaysDrawn));\n }\n if (viewport.neverDrawn?.size && neverDrawn.size) {\n viewport.setNeverDrawn(setDifference(viewport.neverDrawn, neverDrawn));\n }\n }),\n );\n }\n\n private getGroupingNodeInfo(node: GroupingHierarchyNode) {\n const modelId = ModelsTreeNode.getModelId(node);\n const categoryId = ModelsTreeNode.getCategoryId(node);\n assert(!!modelId && !!categoryId);\n\n const elementIds = new Set(node.groupedInstanceKeys.map((key) => key.id));\n return { modelId, categoryId, elementIds };\n }\n\n private getSubModeledElementsVisibilityStatus({\n parentNodeVisibilityStatus,\n haveSubModel,\n tooltips,\n ignoreTooltips,\n }: {\n parentNodeVisibilityStatus: VisibilityStatus;\n haveSubModel: \"yes\" | \"unknown\";\n tooltips: { [key in Visibility]: string | undefined };\n ignoreTooltips?: boolean;\n }): OperatorFunction<Id64Arg, VisibilityStatus> {\n return (obs) => {\n return obs.pipe(\n // ensure we're only looking at elements that have a sub-model\n mergeMap((modeledElementIds) => {\n if (haveSubModel === \"yes\") {\n return of(modeledElementIds);\n }\n return from(Id64.iterable(modeledElementIds)).pipe(\n mergeMap(async (elementId) => ({ elementId, hasSubModel: await this.#idsCache.hasSubModel(elementId) })),\n filter(({ hasSubModel }) => hasSubModel),\n map(({ elementId }) => elementId),\n toArray(),\n );\n }),\n // combine visibility status of sub-models with visibility status of parent node\n mergeMap((modeledElementIds) => {\n if (Id64.sizeOf(modeledElementIds) === 0) {\n return of(parentNodeVisibilityStatus);\n }\n return this.getModelVisibilityStatus({ modelIds: modeledElementIds }).pipe(\n startWith<VisibilityStatus>(parentNodeVisibilityStatus),\n mergeVisibilityStatuses(tooltips, ignoreTooltips),\n );\n }),\n );\n };\n }\n}\n\ninterface GetVisibilityFromAlwaysAndNeverDrawnElementsProps {\n tooltips: {\n allElementsInNeverDrawnList: string;\n allElementsInAlwaysDrawnList: string;\n elementsInBothAlwaysAndNeverDrawn: string;\n noElementsInExclusiveAlwaysDrawnList: string;\n };\n /** Status when always/never lists are empty and exclusive mode is off */\n defaultStatus: (categoryId?: Id64String) => VisibilityStatus;\n}\n\nfunction mergeVisibilities(obs: Observable<Visibility>): Observable<Visibility | \"empty\"> {\n return obs.pipe(\n reduceWhile(\n (x) => x.allVisible || x.allHidden,\n (acc, val) => {\n acc.allVisible &&= val === \"visible\";\n acc.allHidden &&= val === \"hidden\";\n return acc;\n },\n { allVisible: true, allHidden: true },\n ),\n map((x) => {\n if (!x) {\n return \"empty\";\n }\n return x.allVisible ? \"visible\" : x.allHidden ? \"hidden\" : \"partial\";\n }),\n );\n}\n\nfunction mergeVisibilityStatuses(\n tooltipMap?: { [key in Visibility]: string | undefined },\n ignoreTooltip?: boolean,\n): OperatorFunction<VisibilityStatus, VisibilityStatus> {\n return (obs) => {\n return obs.pipe(\n map((visibilityStatus) => visibilityStatus.state),\n mergeVisibilities,\n map((visibility) => {\n if (visibility === \"empty\") {\n visibility = \"visible\";\n }\n return createVisibilityStatus(visibility, getTooltipOptions(tooltipMap?.[visibility], ignoreTooltip));\n }),\n );\n };\n}\n\nfunction setDifference<T>(lhs: Iterable<T>, rhs: Set<T>): Set<T> {\n const result = new Set<T>();\n for (const x of lhs) {\n if (!rhs.has(x)) {\n result.add(x);\n }\n }\n return result;\n}\n\nfunction setIntersection<T>(lhs: Iterable<T>, rhs: Set<T>): Set<T> {\n const result = new Set<T>();\n for (const x of lhs) {\n if (rhs.has(x)) {\n result.add(x);\n }\n }\n return result;\n}\n\n/**\n * Enables display of all given models. Also enables display of all categories and clears always and\n * never drawn lists in the viewport.\n *\n * @param componentId Optional unique id of the component that consumes this function.\n * It can be any string, as long as it is not shared across different components.\n * @public\n */\nexport async function showAllModels(models: string[], viewport: Viewport, componentId?: GuidString) {\n await viewport.addViewedModels(models);\n viewport.clearNeverDrawn();\n viewport.clearAlwaysDrawn();\n\n const categories = await loadCategoriesFromViewport(viewport, componentId);\n if (categories.length === 0) {\n return;\n }\n const ids = categories.map((category) => category.categoryId);\n await enableCategoryDisplay(viewport, ids, true);\n}\n\n/**\n * Disables display of all given models.\n * @public\n */\nexport async function hideAllModels(models: string[], viewport: Viewport) {\n viewport.changeModelDisplay(models, false);\n}\n\n/**\n * Inverts display of all given models.\n * @public\n */\nexport async function invertAllModels(models: string[], viewport: Viewport) {\n const notViewedModels: string[] = [];\n const viewedModels: string[] = [];\n models.forEach((modelId) => {\n if (viewport.viewsModel(modelId)) {\n viewedModels.push(modelId);\n } else {\n notViewedModels.push(modelId);\n }\n });\n await viewport.addViewedModels(notViewedModels);\n viewport.changeModelDisplay(viewedModels, false);\n}\n\n/**\n * Based on the value of `enable` argument, either enables or disables display of given models.\n * @public\n */\nexport async function toggleModels(models: string[], enable: boolean, viewport: Viewport) {\n if (!models) {\n return;\n }\n if (enable) {\n viewport.changeModelDisplay(models, false);\n } else {\n await viewport.addViewedModels(models);\n }\n}\n\n/**\n * Checks if all given models are displayed in given viewport.\n * @public\n */\nexport function areAllModelsVisible(models: string[], viewport: Viewport) {\n return models.length !== 0 ? models.every((id) => viewport.viewsModel(id)) : false;\n}\n\nfunction getTooltipOptions(key: string | undefined, ignoreTooltip?: boolean) {\n return {\n useTooltip: ignoreTooltip ? (false as const) : key,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ModelsTreeVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport {\n concat,\n concatAll,\n defaultIfEmpty,\n defer,\n distinct,\n EMPTY,\n filter,\n firstValueFrom,\n forkJoin,\n from,\n fromEventPattern,\n map,\n merge,\n mergeMap,\n of,\n reduce,\n shareReplay,\n startWith,\n Subject,\n take,\n takeUntil,\n tap,\n toArray,\n} from \"rxjs\";\nimport { assert, Id64 } from \"@itwin/core-bentley\";\nimport { PerModelCategoryVisibility } from \"@itwin/core-frontend\";\nimport { HierarchyNode, HierarchyNodeKey } from \"@itwin/presentation-hierarchies\";\nimport { enableCategoryDisplay, loadCategoriesFromViewport } from \"../../common/CategoriesVisibilityUtils.js\";\nimport { reduceWhile, toVoidPromise } from \"../../common/Rxjs.js\";\nimport { createVisibilityStatus } from \"../../common/Tooltip.js\";\nimport { createVisibilityHandlerResult } from \"../../common/UseHierarchyVisibility.js\";\nimport { getIdsFromChildrenTree, releaseMainThreadOnItemsCount } from \"../Utils.js\";\nimport { AlwaysAndNeverDrawnElementInfo } from \"./AlwaysAndNeverDrawnElementInfo.js\";\nimport { createFilteredTree, parseCategoryKey } from \"./FilteredTree.js\";\nimport { ModelsTreeNode } from \"./ModelsTreeNode.js\";\nimport { createVisibilityChangeEventListener } from \"./VisibilityChangeEventListener.js\";\n\nimport type { Observable, OperatorFunction, Subscription } from \"rxjs\";\nimport type { GuidString, Id64Arg, Id64Array, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport type { Viewport } from \"@itwin/core-frontend\";\nimport type { ClassGroupingNodeKey, GroupingHierarchyNode, HierarchyFilteringPath, InstancesNodeKey } from \"@itwin/presentation-hierarchies\";\nimport type { ECClassHierarchyInspector } from \"@itwin/presentation-shared\";\nimport type { Visibility } from \"../../common/Tooltip.js\";\nimport type { HierarchyVisibilityHandler, HierarchyVisibilityHandlerOverridableMethod, VisibilityStatus } from \"../../common/UseHierarchyVisibility.js\";\nimport type { GetElementsTreeProps } from \"./AlwaysAndNeverDrawnElementInfo.js\";\nimport type { FilteredTree } from \"./FilteredTree.js\";\nimport type { ModelsTreeIdsCache } from \"./ModelsTreeIdsCache.js\";\nimport type { IVisibilityChangeEventListener } from \"./VisibilityChangeEventListener.js\";\n\n/** @beta */\ninterface GetCategoryVisibilityStatusProps {\n categoryIds: Id64Arg;\n modelId: Id64String;\n}\n\n/** @beta */\ninterface ChangeCategoryVisibilityStateProps extends GetCategoryVisibilityStatusProps {\n on: boolean;\n}\n\n/** @beta */\ninterface GetGeometricElementVisibilityStatusProps {\n elementId: Id64String;\n modelId: Id64String;\n categoryId: Id64String;\n}\n\n/** @beta */\ninterface ChangeGeometricElementsDisplayStateProps {\n elementIds: Id64Set;\n modelId: Id64String;\n categoryId: Id64String;\n on: boolean;\n}\n\n/** @beta */\ninterface ChangeModelVisibilityStateProps {\n ids: Id64Arg;\n on: boolean;\n}\n\n/** @beta */\ninterface GetFilteredNodeVisibilityProps {\n node: HierarchyNode & { key: ClassGroupingNodeKey | InstancesNodeKey };\n}\n\n/** @beta */\ninterface ChangeFilteredNodeVisibilityProps extends GetFilteredNodeVisibilityProps {\n on: boolean;\n}\n\n/**\n * Functionality of Models tree visibility handler that can be overridden.\n * Each callback is provided original implementation and reference to a `HierarchyVisibilityHandler`.\n * @beta\n */\nexport interface ModelsTreeVisibilityHandlerOverrides {\n getSubjectNodeVisibility?: HierarchyVisibilityHandlerOverridableMethod<(props: { ids: Id64Array }) => Promise<VisibilityStatus>>;\n getModelDisplayStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { ids: Id64Arg }) => Promise<VisibilityStatus>>;\n getCategoryDisplayStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: GetCategoryVisibilityStatusProps) => Promise<VisibilityStatus>>;\n getElementGroupingNodeDisplayStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { node: GroupingHierarchyNode }) => Promise<VisibilityStatus>>;\n getElementDisplayStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: GetGeometricElementVisibilityStatusProps) => Promise<VisibilityStatus>>;\n\n changeSubjectNodeState?: HierarchyVisibilityHandlerOverridableMethod<(props: { ids: Id64Array; on: boolean }) => Promise<void>>;\n changeModelState?: HierarchyVisibilityHandlerOverridableMethod<(props: ChangeModelVisibilityStateProps) => Promise<void>>;\n changeCategoryState?: HierarchyVisibilityHandlerOverridableMethod<(props: ChangeCategoryVisibilityStateProps) => Promise<void>>;\n changeElementGroupingNodeState?: HierarchyVisibilityHandlerOverridableMethod<(props: { node: GroupingHierarchyNode; on: boolean }) => Promise<void>>;\n changeElementsState?: HierarchyVisibilityHandlerOverridableMethod<(props: ChangeGeometricElementsDisplayStateProps) => Promise<void>>;\n}\n\n/**\n * Props for `createModelsTreeVisibilityHandler`.\n * @internal\n */\nexport interface ModelsTreeVisibilityHandlerProps {\n viewport: Viewport;\n idsCache: ModelsTreeIdsCache;\n imodelAccess: ECClassHierarchyInspector;\n overrides?: ModelsTreeVisibilityHandlerOverrides;\n filteredPaths?: HierarchyFilteringPath[];\n componentId?: GuidString;\n}\n\n/**\n * Creates an instance if `ModelsTreeVisibilityHandler`.\n * @internal\n */\nexport function createModelsTreeVisibilityHandler(props: ModelsTreeVisibilityHandlerProps): HierarchyVisibilityHandler & Disposable {\n return new ModelsTreeVisibilityHandlerImpl(props);\n}\n\nclass ModelsTreeVisibilityHandlerImpl implements HierarchyVisibilityHandler {\n readonly #eventListener: IVisibilityChangeEventListener;\n readonly #alwaysAndNeverDrawnElements: AlwaysAndNeverDrawnElementInfo;\n readonly #idsCache: ModelsTreeIdsCache;\n #filteredTree: Promise<FilteredTree> | undefined;\n #elementChangeQueue = new Subject<Observable<void>>();\n #subscriptions: Subscription[] = [];\n #changeRequest = new Subject<{ key: HierarchyNodeKey; depth: number }>();\n readonly #props: ModelsTreeVisibilityHandlerProps;\n\n constructor(props: ModelsTreeVisibilityHandlerProps) {\n this.#props = props;\n this.#eventListener = createVisibilityChangeEventListener(this.#props.viewport);\n this.#alwaysAndNeverDrawnElements = new AlwaysAndNeverDrawnElementInfo(this.#props.viewport, this.#props.componentId);\n this.#idsCache = this.#props.idsCache;\n this.#filteredTree = this.#props.filteredPaths ? createFilteredTree(this.#props.imodelAccess, this.#props.filteredPaths) : undefined;\n this.#subscriptions.push(this.#elementChangeQueue.pipe(concatAll()).subscribe());\n }\n\n public get onVisibilityChange() {\n return this.#eventListener.onVisibilityChange;\n }\n\n public async getVisibilityStatus(node: HierarchyNode): Promise<VisibilityStatus> {\n return firstValueFrom(\n this.getVisibilityStatusObs(node).pipe(\n // unsubscribe from the observable if the change request for this node is received\n takeUntil(this.#changeRequest.pipe(filter(({ key, depth }) => depth === node.parentKeys.length && HierarchyNodeKey.equals(node.key, key)))),\n // unsubscribe if visibility changes\n takeUntil(\n fromEventPattern(\n (handler) => {\n this.#eventListener.onVisibilityChange.addListener(handler);\n },\n (handler) => {\n this.#eventListener.onVisibilityChange.removeListener(handler);\n },\n ),\n ),\n defaultIfEmpty(createVisibilityStatus(\"hidden\")),\n ),\n );\n }\n\n public async changeVisibility(node: HierarchyNode, shouldDisplay: boolean): Promise<void> {\n // notify about new change request\n this.#changeRequest.next({ key: node.key, depth: node.parentKeys.length });\n\n const changeObservable = this.changeVisibilityObs(node, shouldDisplay).pipe(\n // unsubscribe from the observable if the change request for this node is received\n takeUntil(this.#changeRequest.pipe(filter(({ key, depth }) => depth === node.parentKeys.length && HierarchyNodeKey.equals(node.key, key)))),\n tap({\n subscribe: () => {\n this.#eventListener.suppressChangeEvents();\n this.#alwaysAndNeverDrawnElements.suppressChangeEvents();\n },\n finalize: () => {\n this.#eventListener.resumeChangeEvents();\n this.#alwaysAndNeverDrawnElements.resumeChangeEvents();\n },\n }),\n );\n\n return toVoidPromise(changeObservable);\n }\n\n public dispose() {\n this[Symbol.dispose]();\n }\n\n public [Symbol.dispose]() {\n this.#eventListener[Symbol.dispose]();\n this.#alwaysAndNeverDrawnElements[Symbol.dispose]();\n this.#subscriptions.forEach((x) => x.unsubscribe());\n }\n\n private getVisibilityStatusObs(node: HierarchyNode): Observable<VisibilityStatus> {\n if (HierarchyNode.isClassGroupingNode(node)) {\n if (node.extendedData?.hasDirectNonFilteredTargets && !node.filtering?.hasFilterTargetAncestor) {\n return this.getFilteredNodeVisibility({ node });\n }\n return this.getClassGroupingNodeDisplayStatus(node);\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (node.filtering?.filteredChildrenIdentifierPaths?.length && !node.filtering.isFilterTarget) {\n return this.getFilteredNodeVisibility({ node });\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n // note: subject nodes may be merged to represent multiple subject instances\n return this.getSubjectNodeVisibilityStatus({ subjectIds: node.key.instanceKeys.map((key) => key.id) });\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.getModelVisibilityStatus({ modelIds: node.key.instanceKeys.map(({ id }) => id) });\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n if (!modelId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.getCategoryDisplayStatus({\n categoryIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n if (!categoryId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n return this.getElementDisplayStatus({\n elementIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n categoryId,\n });\n }\n\n private getFilteredNodeVisibility(props: GetFilteredNodeVisibilityProps) {\n assert(this.#filteredTree !== undefined);\n return from(this.#filteredTree).pipe(\n map((filteredTree) => filteredTree.getVisibilityChangeTargets(props.node)),\n mergeMap(({ subjects, models, categories, elements }) => {\n const observables = new Array<Observable<VisibilityStatus>>();\n if (subjects?.size) {\n observables.push(this.getSubjectNodeVisibilityStatus({ subjectIds: [...subjects], ignoreTooltip: true }));\n }\n\n if (models?.size) {\n observables.push(this.getModelVisibilityStatus({ modelIds: models, ignoreTooltip: true }));\n }\n\n if (categories?.size) {\n observables.push(\n from(categories).pipe(\n mergeMap((key) => {\n const { modelId, categoryId } = parseCategoryKey(key);\n return this.getCategoryDisplayStatus({ modelId, categoryIds: categoryId, ignoreTooltip: true });\n }),\n ),\n );\n }\n\n if (elements?.size) {\n observables.push(\n from(elements).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(([categoryKey, elementsMap]) => {\n const { modelId, categoryId } = parseCategoryKey(categoryKey);\n return this.getElementsDisplayStatus({\n elementIds: [...elementsMap.keys()],\n modelId,\n categoryId,\n });\n }),\n ),\n );\n }\n\n return merge(...observables);\n }),\n mergeVisibilityStatuses(),\n );\n }\n\n private getSubjectNodeVisibilityStatus({ subjectIds, ignoreTooltip }: { subjectIds: Id64Array; ignoreTooltip?: boolean }): Observable<VisibilityStatus> {\n const result = defer(() => {\n if (!this.#props.viewport.view.isSpatialView()) {\n return of(createVisibilityStatus(\"disabled\", getTooltipOptions(\"modelsTree.subject.nonSpatialView\", ignoreTooltip)));\n }\n\n return this.#idsCache.getSubjectModelIds(subjectIds).pipe(\n mergeMap((modelIds) => this.getModelVisibilityStatus({ modelIds, ignoreTooltip: true })),\n mergeVisibilityStatuses(\n {\n visible: \"modelsTree.subject.allModelsVisible\",\n hidden: \"modelsTree.subject.allModelsHidden\",\n partial: \"modelsTree.subject.someModelsHidden\",\n },\n ignoreTooltip,\n ),\n );\n });\n return createVisibilityHandlerResult(this, { ids: subjectIds }, result, this.#props.overrides?.getSubjectNodeVisibility);\n }\n\n private getModelVisibilityStatus({ modelIds, ignoreTooltip }: { modelIds: Id64Arg; ignoreTooltip?: boolean }): Observable<VisibilityStatus> {\n const result = defer(() => {\n const viewport = this.#props.viewport;\n if (!viewport.view.isSpatialView()) {\n return of(createVisibilityStatus(\"disabled\", getTooltipOptions(\"modelsTree.model.nonSpatialView\", ignoreTooltip)));\n }\n\n return from(Id64.iterable(modelIds)).pipe(\n distinct(),\n mergeMap((modelId) => {\n if (!viewport.view.viewsModel(modelId)) {\n return this.#idsCache.getModelCategories(modelId).pipe(\n mergeMap((categoryIds) => this.#idsCache.getCategoriesModeledElements(modelId, categoryIds)),\n this.getSubModeledElementsVisibilityStatus({\n ignoreTooltips: ignoreTooltip,\n haveSubModel: \"yes\",\n tooltips: { visible: undefined, hidden: \"modelsTree.model.hiddenThroughModelSelector\", partial: \"modelsTree.model.someSubModelsVisible\" },\n parentNodeVisibilityStatus: createVisibilityStatus(\"hidden\"),\n }),\n );\n }\n return this.#idsCache.getModelCategories(modelId).pipe(\n mergeMap((categoryIds) => {\n return categoryIds.length === 0\n ? of(createVisibilityStatus(\"visible\"))\n : this.getCategoryDisplayStatus({ modelId, categoryIds, ignoreTooltip: true });\n }),\n mergeVisibilityStatuses({\n visible: \"modelsTree.model.allCategoriesVisible\",\n partial: \"modelsTree.model.someCategoriesHidden\",\n hidden: \"modelsTree.model.allCategoriesHidden\",\n }),\n );\n }),\n mergeVisibilityStatuses(),\n );\n });\n return createVisibilityHandlerResult(this, { ids: modelIds }, result, this.#props.overrides?.getModelDisplayStatus);\n }\n\n private getDefaultCategoryVisibilityStatus({\n modelId,\n categoryIds,\n ignoreTooltip,\n }: {\n categoryIds: Id64Arg;\n modelId: Id64String;\n ignoreTooltip?: boolean;\n }): VisibilityStatus {\n const viewport = this.#props.viewport;\n\n if (!viewport.view.viewsModel(modelId) || Id64.sizeOf(categoryIds) === 0) {\n return createVisibilityStatus(\"hidden\", getTooltipOptions(\"modelsTree.category.hiddenThroughModel\", ignoreTooltip));\n }\n\n let visibility: \"visible\" | \"hidden\" | \"unknown\" = \"unknown\";\n for (const categoryId of Id64.iterable(categoryIds)) {\n const override = this.#props.viewport.perModelCategoryVisibility.getOverride(modelId, categoryId);\n if (override === PerModelCategoryVisibility.Override.Show) {\n if (visibility === \"hidden\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = \"visible\";\n continue;\n }\n if (override === PerModelCategoryVisibility.Override.Hide) {\n if (visibility === \"visible\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = \"hidden\";\n continue;\n }\n const isVisible = viewport.view.viewsCategory(categoryId);\n if (isVisible && visibility === \"hidden\") {\n return createVisibilityStatus(\"partial\");\n }\n if (!isVisible && visibility === \"visible\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = isVisible ? \"visible\" : \"hidden\";\n }\n assert(visibility !== \"unknown\");\n\n return createVisibilityStatus(visibility);\n }\n\n private getCategoryDisplayStatus({ ignoreTooltip, ...props }: GetCategoryVisibilityStatusProps & { ignoreTooltip?: boolean }): Observable<VisibilityStatus> {\n const result = defer(() => {\n if (!this.#props.viewport.view.viewsModel(props.modelId)) {\n return this.#idsCache.getCategoriesModeledElements(props.modelId, props.categoryIds).pipe(\n this.getSubModeledElementsVisibilityStatus({\n ignoreTooltips: ignoreTooltip,\n parentNodeVisibilityStatus: createVisibilityStatus(\"hidden\"),\n tooltips: {\n visible: undefined,\n hidden: \"modelsTree.category.hiddenThroughModel\",\n partial: \"modelsTree.category.someElementsOrSubModelsHidden\",\n },\n haveSubModel: \"yes\",\n }),\n );\n }\n\n return this.getVisibilityFromAlwaysAndNeverDrawnElements({\n categoryProps: { categoryIds: props.categoryIds, modelId: props.modelId },\n tooltips: {\n allElementsInAlwaysDrawnList: \"modelsTree.category.allElementsVisible\",\n allElementsInNeverDrawnList: \"modelsTree.category.allElementsHidden\",\n elementsInBothAlwaysAndNeverDrawn: \"modelsTree.category.someElementsAreHidden\",\n noElementsInExclusiveAlwaysDrawnList: \"modelsTree.category.allElementsHidden\",\n },\n defaultStatus: (categoryId) =>\n categoryId\n ? this.getDefaultCategoryVisibilityStatus({ modelId: props.modelId, categoryIds: categoryId })\n : this.getDefaultCategoryVisibilityStatus({ modelId: props.modelId, categoryIds: props.categoryIds }),\n ignoreTooltip,\n }).pipe(\n mergeMap((visibilityStatusAlwaysAndNeverDraw) => {\n return this.#idsCache.getCategoriesModeledElements(props.modelId, props.categoryIds).pipe(\n this.getSubModeledElementsVisibilityStatus({\n tooltips: {\n visible: undefined,\n hidden: \"modelsTree.category.allElementsAndSubModelsHidden\",\n partial: \"modelsTree.category.someElementsOrSubModelsHidden\",\n },\n haveSubModel: \"yes\",\n parentNodeVisibilityStatus: visibilityStatusAlwaysAndNeverDraw,\n ignoreTooltips: ignoreTooltip,\n }),\n );\n }),\n );\n });\n return createVisibilityHandlerResult(this, props, result, this.#props.overrides?.getCategoryDisplayStatus);\n }\n\n private getClassGroupingNodeDisplayStatus(node: GroupingHierarchyNode): Observable<VisibilityStatus> {\n const { elementIds, modelId, categoryId } = this.getGroupingNodeInfo(node);\n const result = this.getElementsDisplayStatus({\n elementIds,\n modelId,\n categoryId,\n });\n return createVisibilityHandlerResult(this, { node }, result, this.#props.overrides?.getElementGroupingNodeDisplayStatus);\n }\n\n private getElementDisplayStatus({\n elementIds,\n modelId,\n categoryId,\n }: {\n elementIds: Id64Array;\n modelId: Id64String;\n categoryId: Id64String;\n }): Observable<VisibilityStatus> {\n const result = this.getElementsDisplayStatus({\n elementIds,\n modelId,\n categoryId,\n });\n return createVisibilityHandlerResult(this, { elementId: elementIds[0], modelId, categoryId }, result, this.#props.overrides?.getElementDisplayStatus);\n }\n\n private getElementsDisplayStatus(props: { elementIds: Id64Array | Id64Set; modelId: Id64String; categoryId: Id64String }): Observable<VisibilityStatus> {\n return defer(() => {\n const { modelId, categoryId, elementIds } = props;\n\n if (!this.#props.viewport.view.viewsModel(modelId)) {\n return of(elementIds).pipe(\n this.getSubModeledElementsVisibilityStatus({\n tooltips: {\n visible: undefined,\n hidden: undefined,\n partial: \"modelsTree.groupingNode.someElementsOrSubModelsHidden\",\n },\n parentNodeVisibilityStatus: createVisibilityStatus(\"hidden\"),\n haveSubModel: \"unknown\",\n }),\n );\n }\n\n return this.getVisibilityFromAlwaysAndNeverDrawnElements({\n elements: elementIds,\n defaultStatus: () => {\n const status = this.getDefaultCategoryVisibilityStatus({ categoryIds: categoryId, modelId, ignoreTooltip: true });\n return createVisibilityStatus(status.state, getTooltipOptions(`modelsTree.groupingNode.${status.state}ThroughCategory`));\n },\n tooltips: {\n allElementsInAlwaysDrawnList: \"modelsTree.groupingNode.allElementsVisible\",\n allElementsInNeverDrawnList: \"modelsTree.groupingNode.allElementsHidden\",\n elementsInBothAlwaysAndNeverDrawn: \"modelsTree.groupingNode.someElementsAreHidden\",\n noElementsInExclusiveAlwaysDrawnList: \"modelsTree.groupingNode.allElementsHidden\",\n },\n }).pipe(\n mergeMap((visibilityStatusAlwaysAndNeverDraw) => {\n return of(elementIds).pipe(\n this.getSubModeledElementsVisibilityStatus({\n tooltips: {\n visible: undefined,\n hidden: \"modelsTree.groupingNode.allElementsAndSubModelsHidden\",\n partial: \"modelsTree.groupingNode.someElementsOrSubModelsHidden\",\n },\n parentNodeVisibilityStatus: visibilityStatusAlwaysAndNeverDraw,\n haveSubModel: \"unknown\",\n }),\n );\n }),\n );\n });\n }\n /** Changes visibility of the items represented by the tree node. */\n private changeVisibilityObs(node: HierarchyNode, on: boolean): Observable<void> {\n const changeObs = defer(() => {\n if (HierarchyNode.isClassGroupingNode(node)) {\n if (node.extendedData?.hasDirectNonFilteredTargets && !node.filtering?.hasFilterTargetAncestor) {\n return this.changeFilteredNodeVisibility({ node, on });\n }\n return this.changeElementGroupingNodeState(node, on);\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (node.filtering?.filteredChildrenIdentifierPaths?.length && !node.filtering.isFilterTarget) {\n return this.changeFilteredNodeVisibility({ node, on });\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n return this.changeSubjectNodeState(\n node.key.instanceKeys.map((key) => key.id),\n on,\n );\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.changeModelState({ ids: node.key.instanceKeys.map(({ id }) => id), on });\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n if (!modelId) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.changeCategoryState({\n categoryIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n on,\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n if (!categoryId) {\n return EMPTY;\n }\n\n return this.changeElementsState({\n elementIds: new Set([...node.key.instanceKeys.map(({ id }) => id)]),\n modelId,\n categoryId,\n on,\n });\n });\n if (this.#props.viewport.isAlwaysDrawnExclusive) {\n return concat(this.removeAlwaysDrawnExclusive(), changeObs);\n }\n return changeObs;\n }\n\n private changeFilteredNodeVisibility({ on, ...props }: ChangeFilteredNodeVisibilityProps) {\n assert(this.#filteredTree !== undefined);\n return from(this.#filteredTree).pipe(\n map((filteredTree) => filteredTree.getVisibilityChangeTargets(props.node)),\n mergeMap(({ subjects, models, categories, elements }) => {\n const observables = new Array<Observable<void>>();\n if (subjects?.size) {\n observables.push(this.changeSubjectNodeState([...subjects], on));\n }\n\n if (models?.size) {\n observables.push(this.changeModelState({ ids: models, on }));\n }\n\n if (categories?.size) {\n observables.push(\n from(categories).pipe(\n mergeMap((key) => {\n const { modelId, categoryId } = parseCategoryKey(key);\n return this.changeCategoryState({ modelId, categoryIds: categoryId, on });\n }),\n ),\n );\n }\n\n if (elements?.size) {\n observables.push(\n from(elements).pipe(\n mergeMap(([categoryKey, elementsMap]) => {\n const { modelId, categoryId } = parseCategoryKey(categoryKey);\n return this.changeElementsState({ modelId, categoryId, elementIds: new Set([...elementsMap.keys()]), on });\n }),\n ),\n );\n }\n\n return merge(...observables);\n }),\n );\n }\n\n private removeAlwaysDrawnExclusive(): Observable<void> {\n return this.#idsCache.getAllCategories().pipe(\n map((categoryIds) => {\n this.#props.viewport.changeCategoryDisplay(categoryIds, false, false);\n this.#props.viewport.clearNeverDrawn();\n this.#props.viewport.perModelCategoryVisibility.clearOverrides();\n this.#props.viewport.setAlwaysDrawn(this.#props.viewport.alwaysDrawn ?? new Set());\n }),\n );\n }\n\n private changeSubjectNodeState(ids: Id64Array, on: boolean): Observable<void> {\n const result = defer(() => {\n if (!this.#props.viewport.view.isSpatialView()) {\n return EMPTY;\n }\n\n return this.#idsCache.getSubjectModelIds(ids).pipe(mergeMap((modelIds) => this.changeModelState({ ids: modelIds, on })));\n });\n return createVisibilityHandlerResult(this, { ids, on }, result, this.#props.overrides?.changeSubjectNodeState);\n }\n\n private changeModelState(props: ChangeModelVisibilityStateProps): Observable<void> {\n const { ids, on } = props;\n\n if (Id64.sizeOf(ids) === 0) {\n return EMPTY;\n }\n\n const result = defer(() => {\n const viewport = this.#props.viewport;\n if (!viewport.view.isSpatialView()) {\n return EMPTY;\n }\n\n const idsObs = from(Id64.iterable(ids));\n if (!on) {\n viewport.changeModelDisplay(ids, false);\n return idsObs.pipe(\n mergeMap((modelId) =>\n this.#idsCache.getModelCategories(modelId).pipe(\n map((categoryIds) => {\n return { modelId, categoryIds };\n }),\n ),\n ),\n mergeMap(({ modelId, categoryIds }) => this.#idsCache.getCategoriesModeledElements(modelId, categoryIds)),\n mergeMap((modeledElementIds) => this.changeModelState({ ids: modeledElementIds, on })),\n );\n }\n\n return concat(\n defer(() => {\n viewport.perModelCategoryVisibility.clearOverrides(ids);\n return from(viewport.addViewedModels(ids));\n }),\n idsObs.pipe(\n mergeMap((modelId) => {\n return this.#idsCache.getModelCategories(modelId).pipe(mergeMap((categoryIds) => this.changeCategoryState({ categoryIds, modelId, on: true })));\n }),\n ),\n );\n });\n return createVisibilityHandlerResult(this, props, result, this.#props.overrides?.changeModelState);\n }\n\n private showModelWithoutAnyCategoriesOrElements(modelId: Id64String): Observable<void> {\n const viewport = this.#props.viewport;\n return forkJoin({\n categories: this.#idsCache.getModelCategories(modelId),\n alwaysDrawnElements: this.getAlwaysOrNeverDrawnElements({ modelIds: modelId, setType: \"always\" }),\n }).pipe(\n mergeMap(async ({ categories, alwaysDrawnElements }) => {\n const alwaysDrawn = this.#props.viewport.alwaysDrawn;\n if (alwaysDrawn && alwaysDrawnElements) {\n viewport.setAlwaysDrawn(setDifference(alwaysDrawn, alwaysDrawnElements));\n }\n categories.forEach((categoryId) => {\n this.changeCategoryStateInViewportAccordingToModelVisibility(modelId, categoryId, false);\n });\n await viewport.addViewedModels(modelId);\n }),\n );\n }\n\n private changeCategoryStateInViewportAccordingToModelVisibility(modelId: string, categoryId: string, on: boolean) {\n const viewport = this.#props.viewport;\n const isDisplayedInSelector = viewport.view.viewsCategory(categoryId);\n const override =\n on === isDisplayedInSelector\n ? PerModelCategoryVisibility.Override.None\n : on\n ? PerModelCategoryVisibility.Override.Show\n : PerModelCategoryVisibility.Override.Hide;\n viewport.perModelCategoryVisibility.setOverride(modelId, categoryId, override);\n if (override === PerModelCategoryVisibility.Override.None && on) {\n // we took off the override which means the category is displayed in selector, but\n // doesn't mean all its subcategories are displayed - this call ensures that\n viewport.changeCategoryDisplay(categoryId, true, true);\n }\n }\n\n private changeCategoryState(props: ChangeCategoryVisibilityStateProps): Observable<void> {\n const result = defer(() => {\n const viewport = this.#props.viewport;\n const { modelId, categoryIds, on } = props;\n return concat(\n props.on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY,\n defer(() => {\n for (const categoryId of Id64.iterable(categoryIds)) {\n this.changeCategoryStateInViewportAccordingToModelVisibility(modelId, categoryId, on);\n }\n return this.clearAlwaysAndNeverDrawnElements(props);\n }),\n this.#idsCache\n .getCategoriesModeledElements(modelId, categoryIds)\n .pipe(mergeMap((modeledElementIds) => this.changeModelState({ ids: modeledElementIds, on }))),\n );\n });\n return createVisibilityHandlerResult(this, props, result, this.#props.overrides?.changeCategoryState);\n }\n\n private doChangeElementsState(props: ChangeGeometricElementsDisplayStateProps): Observable<void | undefined> {\n return defer(() => {\n const { modelId, categoryId, elementIds, on } = props;\n const viewport = this.#props.viewport;\n return concat(\n on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY,\n defer(() => {\n const categoryVisibility = this.getDefaultCategoryVisibilityStatus({ categoryIds: categoryId, modelId, ignoreTooltip: true });\n const isDisplayedByDefault = categoryVisibility.state === \"visible\";\n return this.queueElementsVisibilityChange(elementIds, on, isDisplayedByDefault);\n }),\n from(elementIds).pipe(\n mergeMap((elementId) =>\n forkJoin({\n elementId: of(elementId),\n isSubModel: this.#idsCache.hasSubModel(elementId),\n }),\n ),\n filter(({ isSubModel }) => isSubModel),\n map(({ elementId }) => elementId),\n toArray(),\n mergeMap((subModelIds) => this.changeModelState({ ids: subModelIds, on })),\n ),\n );\n });\n }\n\n /**\n * Updates visibility of all grouping node's elements.\n * @see `changeElementState`\n */\n private changeElementGroupingNodeState(node: GroupingHierarchyNode, on: boolean): Observable<void> {\n const result = this.doChangeElementsState({ ...this.getGroupingNodeInfo(node), on });\n return createVisibilityHandlerResult(this, { node, on }, result, this.#props.overrides?.changeElementGroupingNodeState);\n }\n\n /**\n * Updates visibility of an element and all its child elements by adding them to the always/never drawn list.\n * @note If element is to be enabled and model is hidden, it will be enabled.\n */\n private changeElementsState(props: ChangeGeometricElementsDisplayStateProps): Observable<void> {\n const result = this.doChangeElementsState(props);\n return createVisibilityHandlerResult(this, props, result, this.#props.overrides?.changeElementsState);\n }\n\n private queueElementsVisibilityChange(elementIds: Id64Set, on: boolean, visibleByDefault: boolean) {\n const finishedSubject = new Subject<boolean>();\n // observable to track if visibility change is finished/cancelled\n const changeFinished = finishedSubject.pipe(\n startWith(false),\n shareReplay(1),\n filter((finished) => finished),\n );\n\n const changeObservable = from(elementIds).pipe(\n // check if visibility change is not finished (cancelled) due to change overall change request being cancelled\n takeUntil(changeFinished),\n this.changeElementStateNoChildrenOperator({ on, isDisplayedByDefault: visibleByDefault }),\n tap({\n next: () => {\n // notify that visibility change is finished\n finishedSubject.next(true);\n },\n }),\n );\n\n // queue visibility change. `changeObservable` will be subscribed to when other queue changes are finished\n this.#elementChangeQueue.next(changeObservable);\n\n // return observable that will emit when visibility change is finished\n return changeFinished.pipe(\n take(1),\n tap({\n unsubscribe: () => {\n // if this observable is unsubscribed before visibility change is finished, we have to notify that it queued change request is cancelled\n finishedSubject.next(true);\n },\n }),\n map(() => undefined),\n );\n }\n\n private changeElementStateNoChildrenOperator(props: { on: boolean; isDisplayedByDefault: boolean }): OperatorFunction<string, void> {\n return (elementIds: Observable<Id64String>) => {\n const { on, isDisplayedByDefault } = props;\n const isAlwaysDrawnExclusive = this.#props.viewport.isAlwaysDrawnExclusive;\n return elementIds.pipe(\n releaseMainThreadOnItemsCount(500),\n reduce<string, { changedNeverDrawn: boolean; changedAlwaysDrawn: boolean; neverDrawn: Id64Set | undefined; alwaysDrawn: Id64Set | undefined }>(\n (acc, elementId) => {\n if (acc.alwaysDrawn === undefined || acc.neverDrawn === undefined) {\n acc.alwaysDrawn = new Set(this.#props.viewport.alwaysDrawn || []);\n acc.neverDrawn = new Set(this.#props.viewport.neverDrawn || []);\n }\n if (on) {\n const wasRemoved = acc.neverDrawn.delete(elementId);\n acc.changedNeverDrawn ||= wasRemoved;\n // If exclusive mode is enabled, we must add the element to the always drawn list.\n if ((!isDisplayedByDefault || isAlwaysDrawnExclusive) && !acc.alwaysDrawn.has(elementId)) {\n acc.alwaysDrawn.add(elementId);\n acc.changedAlwaysDrawn = true;\n }\n } else {\n const wasRemoved = acc.alwaysDrawn.delete(elementId);\n acc.changedAlwaysDrawn ||= wasRemoved;\n // If exclusive mode is not enabled, we have to add the element to the never drawn list.\n if (isDisplayedByDefault && !isAlwaysDrawnExclusive && !acc.neverDrawn.has(elementId)) {\n acc.neverDrawn.add(elementId);\n acc.changedNeverDrawn = true;\n }\n }\n return acc;\n },\n {\n changedNeverDrawn: false,\n changedAlwaysDrawn: false,\n neverDrawn: undefined,\n alwaysDrawn: undefined,\n },\n ),\n map((state) => {\n state.changedNeverDrawn && state.neverDrawn && this.#props.viewport.setNeverDrawn(state.neverDrawn);\n state.changedAlwaysDrawn && state.alwaysDrawn && this.#props.viewport.setAlwaysDrawn(state.alwaysDrawn, this.#props.viewport.isAlwaysDrawnExclusive);\n }),\n );\n };\n }\n\n private getVisibilityFromAlwaysAndNeverDrawnElementsImpl(\n props: {\n alwaysDrawn: Id64Set | undefined;\n neverDrawn: Id64Set | undefined;\n totalCount: number;\n } & GetVisibilityFromAlwaysAndNeverDrawnElementsProps & { ignoreTooltip?: boolean },\n ): VisibilityStatus {\n const { alwaysDrawn, neverDrawn, totalCount, ignoreTooltip } = props;\n if (totalCount === 0) {\n return props.defaultStatus();\n }\n if (neverDrawn?.size === totalCount) {\n return createVisibilityStatus(\"hidden\", getTooltipOptions(props.tooltips.allElementsInNeverDrawnList, ignoreTooltip));\n }\n\n if (alwaysDrawn?.size === totalCount) {\n return createVisibilityStatus(\"visible\", getTooltipOptions(props.tooltips.allElementsInAlwaysDrawnList, ignoreTooltip));\n }\n\n const viewport = this.#props.viewport;\n if (viewport.isAlwaysDrawnExclusive && viewport.alwaysDrawn?.size) {\n return alwaysDrawn?.size\n ? createVisibilityStatus(\"partial\", getTooltipOptions(props.tooltips.elementsInBothAlwaysAndNeverDrawn, ignoreTooltip))\n : createVisibilityStatus(\"hidden\", getTooltipOptions(props.tooltips.noElementsInExclusiveAlwaysDrawnList, ignoreTooltip));\n }\n\n const status = props.defaultStatus();\n if ((status.state === \"visible\" && neverDrawn?.size) || (status.state === \"hidden\" && alwaysDrawn?.size)) {\n return createVisibilityStatus(\"partial\", getTooltipOptions(undefined, ignoreTooltip));\n }\n return status;\n }\n\n private getVisibilityFromAlwaysAndNeverDrawnElements({\n ignoreTooltip,\n ...props\n }: GetVisibilityFromAlwaysAndNeverDrawnElementsProps &\n ({ elements: Id64Set | Id64Array } | { categoryProps: { categoryIds: Id64Arg; modelId: Id64String } }) & {\n ignoreTooltip?: boolean;\n }): Observable<VisibilityStatus> {\n const viewport = this.#props.viewport;\n if (viewport.isAlwaysDrawnExclusive) {\n if (!viewport?.alwaysDrawn?.size) {\n return of(createVisibilityStatus(\"hidden\", getTooltipOptions(props.tooltips.noElementsInExclusiveAlwaysDrawnList, ignoreTooltip)));\n }\n } else if (!viewport?.neverDrawn?.size && !viewport?.alwaysDrawn?.size) {\n return of(props.defaultStatus());\n }\n\n if (\"elements\" in props) {\n return of(\n this.getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n alwaysDrawn: viewport.alwaysDrawn?.size ? setIntersection(props.elements, viewport.alwaysDrawn) : undefined,\n neverDrawn: viewport.neverDrawn?.size ? setIntersection(props.elements, viewport.neverDrawn) : undefined,\n totalCount: Id64.sizeOf(props.elements),\n ignoreTooltip,\n }),\n );\n }\n const { modelId, categoryIds } = props.categoryProps;\n\n return from(Id64.iterable(categoryIds)).pipe(\n mergeMap((categoryId) =>\n forkJoin({\n categoryId: of(categoryId),\n totalCount: this.#idsCache.getCategoryElementsCount(modelId, categoryId),\n alwaysDrawn: this.getAlwaysOrNeverDrawnElements({ modelIds: modelId, categoryIds: categoryId, setType: \"always\" }),\n neverDrawn: this.getAlwaysOrNeverDrawnElements({ modelIds: modelId, categoryIds: categoryId, setType: \"never\" }),\n }),\n ),\n // There is a known bug:\n // Categories that don't have root elements will make visibility result incorrect\n // E.g.:\n // - CategoryA\n // - ElementA (CategoryA is visible)\n // - ChildElementB (CategoryB is hidden) ChildElementB is in always drawn list\n // Result will be \"partial\" because CategoryB will return hidden visibility, even though all elements are visible\n // TODO fix with: https://github.com/iTwin/viewer-components-react/issues/1100\n map((state) => {\n return this.getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n ...state,\n defaultStatus: () => props.defaultStatus(state.categoryId),\n ignoreTooltip,\n });\n }),\n mergeVisibilityStatuses(),\n );\n }\n\n private getAlwaysOrNeverDrawnElements(props: GetElementsTreeProps): Observable<Id64Set> {\n return this.#alwaysAndNeverDrawnElements\n .getElementsTree(props)\n .pipe(map((childrenTree) => getIdsFromChildrenTree({ tree: childrenTree, predicate: ({ treeEntry }) => treeEntry.isInAlwaysOrNeverDrawnSet })));\n }\n\n private clearAlwaysAndNeverDrawnElements(props: { categoryIds: Id64Arg; modelId: Id64String }) {\n return forkJoin({\n alwaysDrawn: this.getAlwaysOrNeverDrawnElements({ modelIds: props.modelId, categoryIds: props.categoryIds, setType: \"always\" }),\n neverDrawn: this.getAlwaysOrNeverDrawnElements({ modelIds: props.modelId, categoryIds: props.categoryIds, setType: \"never\" }),\n }).pipe(\n map(({ alwaysDrawn, neverDrawn }) => {\n const viewport = this.#props.viewport;\n if (viewport.alwaysDrawn?.size && alwaysDrawn.size) {\n viewport.setAlwaysDrawn(setDifference(viewport.alwaysDrawn, alwaysDrawn));\n }\n if (viewport.neverDrawn?.size && neverDrawn.size) {\n viewport.setNeverDrawn(setDifference(viewport.neverDrawn, neverDrawn));\n }\n }),\n );\n }\n\n private getGroupingNodeInfo(node: GroupingHierarchyNode) {\n const modelId = ModelsTreeNode.getModelId(node);\n const categoryId = ModelsTreeNode.getCategoryId(node);\n assert(!!modelId && !!categoryId);\n\n const elementIds = new Set(node.groupedInstanceKeys.map((key) => key.id));\n return { modelId, categoryId, elementIds };\n }\n\n private getSubModeledElementsVisibilityStatus({\n parentNodeVisibilityStatus,\n haveSubModel,\n tooltips,\n ignoreTooltips,\n }: {\n parentNodeVisibilityStatus: VisibilityStatus;\n haveSubModel: \"yes\" | \"unknown\";\n tooltips: { [key in Visibility]: string | undefined };\n ignoreTooltips?: boolean;\n }): OperatorFunction<Id64Arg, VisibilityStatus> {\n return (obs) => {\n return obs.pipe(\n // ensure we're only looking at elements that have a sub-model\n mergeMap((modeledElementIds) => {\n if (haveSubModel === \"yes\") {\n return of(modeledElementIds);\n }\n return from(Id64.iterable(modeledElementIds)).pipe(\n mergeMap((elementId) =>\n forkJoin({\n hasSubModel: this.#idsCache.hasSubModel(elementId),\n elementId: of(elementId),\n }),\n ),\n filter(({ hasSubModel }) => hasSubModel),\n map(({ elementId }) => elementId),\n toArray(),\n );\n }),\n // combine visibility status of sub-models with visibility status of parent node\n mergeMap((modeledElementIds) => {\n if (Id64.sizeOf(modeledElementIds) === 0) {\n return of(parentNodeVisibilityStatus);\n }\n return this.getModelVisibilityStatus({ modelIds: modeledElementIds }).pipe(\n startWith<VisibilityStatus>(parentNodeVisibilityStatus),\n mergeVisibilityStatuses(tooltips, ignoreTooltips),\n );\n }),\n );\n };\n }\n}\n\ninterface GetVisibilityFromAlwaysAndNeverDrawnElementsProps {\n tooltips: {\n allElementsInNeverDrawnList: string;\n allElementsInAlwaysDrawnList: string;\n elementsInBothAlwaysAndNeverDrawn: string;\n noElementsInExclusiveAlwaysDrawnList: string;\n };\n /** Status when always/never lists are empty and exclusive mode is off */\n defaultStatus: (categoryId?: Id64String) => VisibilityStatus;\n}\n\nfunction mergeVisibilities(obs: Observable<Visibility>): Observable<Visibility | \"empty\"> {\n return obs.pipe(\n reduceWhile(\n (x) => x.allVisible || x.allHidden,\n (acc, val) => {\n acc.allVisible &&= val === \"visible\";\n acc.allHidden &&= val === \"hidden\";\n return acc;\n },\n { allVisible: true, allHidden: true },\n ),\n map((x) => {\n if (!x) {\n return \"empty\";\n }\n return x.allVisible ? \"visible\" : x.allHidden ? \"hidden\" : \"partial\";\n }),\n );\n}\n\nfunction mergeVisibilityStatuses(\n tooltipMap?: { [key in Visibility]: string | undefined },\n ignoreTooltip?: boolean,\n): OperatorFunction<VisibilityStatus, VisibilityStatus> {\n return (obs) => {\n return obs.pipe(\n map((visibilityStatus) => visibilityStatus.state),\n mergeVisibilities,\n map((visibility) => {\n if (visibility === \"empty\") {\n visibility = \"visible\";\n }\n return createVisibilityStatus(visibility, getTooltipOptions(tooltipMap?.[visibility], ignoreTooltip));\n }),\n );\n };\n}\n\nfunction setDifference<T>(lhs: Iterable<T>, rhs: Set<T>): Set<T> {\n const result = new Set<T>();\n for (const x of lhs) {\n if (!rhs.has(x)) {\n result.add(x);\n }\n }\n return result;\n}\n\nfunction setIntersection<T>(lhs: Iterable<T>, rhs: Set<T>): Set<T> {\n const result = new Set<T>();\n for (const x of lhs) {\n if (rhs.has(x)) {\n result.add(x);\n }\n }\n return result;\n}\n\n/**\n * Enables display of all given models. Also enables display of all categories and clears always and\n * never drawn lists in the viewport.\n *\n * @param componentId Optional unique id of the component that consumes this function.\n * It can be any string, as long as it is not shared across different components.\n * @public\n */\nexport async function showAllModels(models: string[], viewport: Viewport, componentId?: GuidString) {\n await viewport.addViewedModels(models);\n viewport.clearNeverDrawn();\n viewport.clearAlwaysDrawn();\n\n const categories = await loadCategoriesFromViewport(viewport, componentId);\n if (categories.length === 0) {\n return;\n }\n const ids = categories.map((category) => category.categoryId);\n await enableCategoryDisplay(viewport, ids, true);\n}\n\n/**\n * Disables display of all given models.\n * @public\n */\nexport async function hideAllModels(models: string[], viewport: Viewport) {\n viewport.changeModelDisplay(models, false);\n}\n\n/**\n * Inverts display of all given models.\n * @public\n */\nexport async function invertAllModels(models: string[], viewport: Viewport) {\n const notViewedModels: string[] = [];\n const viewedModels: string[] = [];\n models.forEach((modelId) => {\n if (viewport.viewsModel(modelId)) {\n viewedModels.push(modelId);\n } else {\n notViewedModels.push(modelId);\n }\n });\n await viewport.addViewedModels(notViewedModels);\n viewport.changeModelDisplay(viewedModels, false);\n}\n\n/**\n * Based on the value of `enable` argument, either enables or disables display of given models.\n * @public\n */\nexport async function toggleModels(models: string[], enable: boolean, viewport: Viewport) {\n if (!models) {\n return;\n }\n if (enable) {\n viewport.changeModelDisplay(models, false);\n } else {\n await viewport.addViewedModels(models);\n }\n}\n\n/**\n * Checks if all given models are displayed in given viewport.\n * @public\n */\nexport function areAllModelsVisible(models: string[], viewport: Viewport) {\n return models.length !== 0 ? models.every((id) => viewport.viewsModel(id)) : false;\n}\n\nfunction getTooltipOptions(key: string | undefined, ignoreTooltip?: boolean) {\n return {\n useTooltip: ignoreTooltip ? (false as const) : key,\n };\n}\n"]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
export { ModelsTreeDefinition, defaultHierarchyConfiguration as defaultModelsTreeHierarchyConfiguration, } from "./tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js";
|
|
2
2
|
export { ModelsTreeIdsCache } from "./tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js";
|
|
3
3
|
export { createModelsTreeVisibilityHandler } from "./tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js";
|
|
4
|
-
export { CategoriesTreeDefinition } from "./tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js";
|
|
4
|
+
export { CategoriesTreeDefinition, defaultHierarchyConfiguration as defaultCategoriesTreeHierarchyConfiguration, } from "./tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js";
|
|
5
5
|
export { CategoriesTreeIdsCache } from "./tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js";
|
|
6
6
|
export { CategoriesVisibilityHandler } from "./tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js";
|
|
7
7
|
export { toVoidPromise, collect } from "./tree-widget-react/components/trees/common/Rxjs.js";
|
|
8
8
|
export { CategoriesTreeNode } from "./tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNode.js";
|
|
9
|
+
export { releaseMainThreadOnItemsCount } from "./tree-widget-react/components/trees/models-tree/Utils.js";
|
|
9
10
|
//# sourceMappingURL=tree-widget-react-internal.d.ts.map
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
5
|
*--------------------------------------------------------------------------------------------*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.CategoriesTreeNode = exports.collect = exports.toVoidPromise = exports.CategoriesVisibilityHandler = exports.CategoriesTreeIdsCache = exports.CategoriesTreeDefinition = exports.createModelsTreeVisibilityHandler = exports.ModelsTreeIdsCache = exports.defaultModelsTreeHierarchyConfiguration = exports.ModelsTreeDefinition = void 0;
|
|
7
|
+
exports.releaseMainThreadOnItemsCount = exports.CategoriesTreeNode = exports.collect = exports.toVoidPromise = exports.CategoriesVisibilityHandler = exports.CategoriesTreeIdsCache = exports.defaultCategoriesTreeHierarchyConfiguration = exports.CategoriesTreeDefinition = exports.createModelsTreeVisibilityHandler = exports.ModelsTreeIdsCache = exports.defaultModelsTreeHierarchyConfiguration = exports.ModelsTreeDefinition = void 0;
|
|
8
8
|
// WARNING: This barrel file exports internal APIs only for use by `@itwin/presentation-backend` and `@itwin/presentation-frontend` packages.
|
|
9
9
|
// They should not be used outside of these packages. These APIs may be broken or removed at any time without notice.
|
|
10
10
|
var ModelsTreeDefinition_js_1 = require("./tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js");
|
|
@@ -16,6 +16,7 @@ var ModelsTreeVisibilityHandler_js_1 = require("./tree-widget-react/components/t
|
|
|
16
16
|
Object.defineProperty(exports, "createModelsTreeVisibilityHandler", { enumerable: true, get: function () { return ModelsTreeVisibilityHandler_js_1.createModelsTreeVisibilityHandler; } });
|
|
17
17
|
var CategoriesTreeDefinition_js_1 = require("./tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js");
|
|
18
18
|
Object.defineProperty(exports, "CategoriesTreeDefinition", { enumerable: true, get: function () { return CategoriesTreeDefinition_js_1.CategoriesTreeDefinition; } });
|
|
19
|
+
Object.defineProperty(exports, "defaultCategoriesTreeHierarchyConfiguration", { enumerable: true, get: function () { return CategoriesTreeDefinition_js_1.defaultHierarchyConfiguration; } });
|
|
19
20
|
var CategoriesTreeIdsCache_js_1 = require("./tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js");
|
|
20
21
|
Object.defineProperty(exports, "CategoriesTreeIdsCache", { enumerable: true, get: function () { return CategoriesTreeIdsCache_js_1.CategoriesTreeIdsCache; } });
|
|
21
22
|
var CategoriesVisibilityHandler_js_1 = require("./tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js");
|
|
@@ -25,4 +26,6 @@ Object.defineProperty(exports, "toVoidPromise", { enumerable: true, get: functio
|
|
|
25
26
|
Object.defineProperty(exports, "collect", { enumerable: true, get: function () { return Rxjs_js_1.collect; } });
|
|
26
27
|
var CategoriesTreeNode_js_1 = require("./tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNode.js");
|
|
27
28
|
Object.defineProperty(exports, "CategoriesTreeNode", { enumerable: true, get: function () { return CategoriesTreeNode_js_1.CategoriesTreeNode; } });
|
|
29
|
+
var Utils_js_1 = require("./tree-widget-react/components/trees/models-tree/Utils.js");
|
|
30
|
+
Object.defineProperty(exports, "releaseMainThreadOnItemsCount", { enumerable: true, get: function () { return Utils_js_1.releaseMainThreadOnItemsCount; } });
|
|
28
31
|
//# sourceMappingURL=tree-widget-react-internal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree-widget-react-internal.js","sourceRoot":"","sources":["../../src/tree-widget-react-internal.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAEhG,6IAA6I;AAC7I,qHAAqH;AAErH,oHAGkF;AAFhF,+HAAA,oBAAoB,OAAA;AACpB,kJAAA,6BAA6B,OAA2C;AAE1E,yHAAqH;AAA5G,2HAAA,kBAAkB,OAAA;AAC3B,2IAA6I;AAApI,mJAAA,iCAAiC,OAAA;AAC1C,
|
|
1
|
+
{"version":3,"file":"tree-widget-react-internal.js","sourceRoot":"","sources":["../../src/tree-widget-react-internal.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAEhG,6IAA6I;AAC7I,qHAAqH;AAErH,oHAGkF;AAFhF,+HAAA,oBAAoB,OAAA;AACpB,kJAAA,6BAA6B,OAA2C;AAE1E,yHAAqH;AAA5G,2HAAA,kBAAkB,OAAA;AAC3B,2IAA6I;AAApI,mJAAA,iCAAiC,OAAA;AAC1C,gIAG0F;AAFxF,uIAAA,wBAAwB,OAAA;AACxB,0JAAA,6BAA6B,OAA+C;AAE9E,qIAAiI;AAAxH,mIAAA,sBAAsB,OAAA;AAC/B,+IAA2I;AAAlI,6IAAA,2BAA2B,OAAA;AACpC,+EAA6F;AAApF,wGAAA,aAAa,OAAA;AAAE,kGAAA,OAAO,OAAA;AAC/B,6HAAyH;AAAhH,2HAAA,kBAAkB,OAAA;AAC3B,sFAA0G;AAAjG,yHAAA,6BAA6B,OAAA","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\n// WARNING: This barrel file exports internal APIs only for use by `@itwin/presentation-backend` and `@itwin/presentation-frontend` packages.\n// They should not be used outside of these packages. These APIs may be broken or removed at any time without notice.\n\nexport {\n ModelsTreeDefinition,\n defaultHierarchyConfiguration as defaultModelsTreeHierarchyConfiguration,\n} from \"./tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js\";\nexport { ModelsTreeIdsCache } from \"./tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js\";\nexport { createModelsTreeVisibilityHandler } from \"./tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js\";\nexport {\n CategoriesTreeDefinition,\n defaultHierarchyConfiguration as defaultCategoriesTreeHierarchyConfiguration,\n} from \"./tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js\";\nexport { CategoriesTreeIdsCache } from \"./tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js\";\nexport { CategoriesVisibilityHandler } from \"./tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js\";\nexport { toVoidPromise, collect } from \"./tree-widget-react/components/trees/common/Rxjs.js\";\nexport { CategoriesTreeNode } from \"./tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNode.js\";\nexport { releaseMainThreadOnItemsCount } from \"./tree-widget-react/components/trees/models-tree/Utils.js\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectableTree.js","sourceRoot":"","sources":["../../../../src/tree-widget-react/components/SelectableTree.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAEhG,OAAO,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"SelectableTree.js","sourceRoot":"","sources":["../../../../src/tree-widget-react/components/SelectableTree.tsx"],"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 \"./SelectableTree.scss\";\n\nimport { useEffect, useState } from \"react\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { Flex, ProgressLinear } from \"@itwin/itwinui-react\";\nimport { TreeWidget } from \"../TreeWidget.js\";\nimport { TreeSelector } from \"./TreeSelector.js\";\n\nimport type { PropsWithChildren } from \"react\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type { TreeContentDefinition, TreeSelectorProps } from \"./TreeSelector.js\";\n\n/**\n * Props for rendering trees\n * @public\n */\nexport interface SelectableTreeRenderProps {\n density?: \"enlarged\" | \"default\";\n onPerformanceMeasured?: (featureId: string, elapsedTime: number) => void;\n onFeatureUsed?: (feature: string) => void;\n}\n\n/**\n * Definition of a tree component displayed in `SelectableTree`.\n * @public\n */\nexport interface SelectableTreeDefinition {\n /** Id of the tree */\n id: string;\n /** Callback that is used to get tree label */\n getLabel: () => string;\n /** Callback that is used to render tree component */\n render: (props: SelectableTreeRenderProps) => React.ReactNode;\n /**\n * Callback that is used to determine if tree should be shown for current active iModel connection.\n * If callback is `undefined` tree is shown for all iModel connections.\n */\n shouldShow?: (imodel: IModelConnection) => Promise<boolean>;\n /** Icon to render before tree label in tree selector */\n startIcon?: React.ReactNode;\n}\n\n/**\n * Props for `SelectableTree`\n * @public\n */\nexport interface SelectableTreeProps {\n trees: SelectableTreeDefinition[];\n density?: \"enlarged\" | \"default\";\n onPerformanceMeasured?: (feature: string, elapsedTime: number) => void;\n onFeatureUsed?: (feature: string) => void;\n}\n\n/**\n * A component that renders a tree (combo box) selector and the selected tree component.\n * @public\n */\nexport function SelectableTree(props: SelectableTreeProps) {\n const imodel = useActiveIModelConnection();\n if (!imodel) {\n return null;\n }\n return <SelectableTreeContent {...props} imodel={imodel} />;\n}\n\nfunction SelectableTreeContent(props: SelectableTreeProps & { imodel: IModelConnection }) {\n const { trees: treeDefinitions, imodel } = props;\n const trees = useActiveTrees(treeDefinitions, imodel);\n\n return (\n <div className=\"tree-widget-selectable-tree\">\n <TreeSelector\n {...getTreeSelectorProps(trees)}\n density={props.density}\n onPerformanceMeasured={props.onPerformanceMeasured}\n onFeatureUsed={props.onFeatureUsed}\n />\n </div>\n );\n}\n\nfunction useActiveTrees(treeDefinitions: SelectableTreeDefinition[], imodel: IModelConnection) {\n const [trees, setTrees] = useState<TreeContentDefinition[]>();\n\n useEffect(() => {\n let disposed = false;\n void (async () => {\n const visibleTrees = await getActiveTrees(treeDefinitions, imodel);\n if (!disposed) {\n setTrees(visibleTrees);\n }\n })();\n\n return () => {\n disposed = true;\n };\n }, [treeDefinitions, imodel]);\n\n return trees;\n}\n\nasync function getActiveTrees(treeDefinitions: SelectableTreeDefinition[], imodel: IModelConnection): Promise<TreeContentDefinition[]> {\n const handleDefinition = async (treeDef: SelectableTreeDefinition) => {\n if (treeDef.shouldShow !== undefined && !(await treeDef.shouldShow(imodel))) {\n return undefined;\n }\n return {\n id: treeDef.id,\n label: treeDef.getLabel(),\n render: treeDef.render,\n startIcon: treeDef.startIcon,\n };\n };\n\n return (await Promise.all(treeDefinitions.map(handleDefinition))).filter((tree) => tree !== undefined) as TreeContentDefinition[];\n}\n\nfunction getTreeSelectorProps(trees?: TreeContentDefinition[]): TreeSelectorProps {\n if (trees === undefined) {\n return {\n defaultSelectedContentId: \"loading\",\n trees: [\n {\n id: \"loading\",\n label: \"\",\n render: () => (\n <Delayed>\n <ProgressLinear indeterminate={true} />\n </Delayed>\n ),\n },\n ],\n };\n }\n\n if (trees.length === 0) {\n return {\n defaultSelectedContentId: \"no-trees\",\n trees: [\n {\n id: \"no-trees\",\n label: \"\",\n render: () => (\n <Flex justifyContent=\"center\" alignItems=\"center\" className=\"tree-widget-no-trees-container\">\n {TreeWidget.translate(\"selectableTree.noTrees\")}\n </Flex>\n ),\n },\n ],\n };\n }\n\n return {\n defaultSelectedContentId: trees[0].id,\n trees,\n };\n}\n\nfunction Delayed({ delay = 200, children }: PropsWithChildren<{ delay?: number }>) {\n const [show, setShow] = useState(false);\n\n useEffect(() => {\n const id = setTimeout(() => {\n setShow(true);\n }, delay);\n return () => {\n clearTimeout(id);\n };\n }, [delay]);\n\n if (!show) {\n return null;\n }\n\n return <>{children}</>;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeSelector.js","sourceRoot":"","sources":["../../../../src/tree-widget-react/components/TreeSelector.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAEhG,OAAO,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"TreeSelector.js","sourceRoot":"","sources":["../../../../src/tree-widget-react/components/TreeSelector.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAEhG,OAAO,qBAAqB,CAAC;AAE7B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AA4BxD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC3F,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,iBAAiB,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9F,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,KAAK,UAAU,CAAC;IAEhD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAA2B,CAAC;IACrH,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAElB,OAAO,CACL,eAAK,SAAS,EAAC,+CAA+C,aAC5D,cAAK,SAAS,EAAC,sDAAsD,YAClE,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CACrB,KAAC,MAAM,IACL,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,eAAe,CAAC,EAAE,EACzB,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EACpC,QAAQ,EAAE,CAAC,MAAc,EAAE,EAAE;wBAC3B,KAAK,CAAC,aAAa,EAAE,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC;wBAC1C,oBAAoB,CAAC,MAAM,CAAC,CAAC;oBAC/B,CAAC,EACD,YAAY,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CACnC,KAAC,QAAQ,OAAK,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,YAC3F,MAAM,CAAC,KAAK,GACJ,CACZ,GACD,CACH,GACG,EACN,cAAK,SAAS,EAAC,uDAAuD,YACnE,eAAe,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,CAAC,qBAAqB,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GACxI,IACF,CACP,CAAC;AACJ,CAAC","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 \"./TreeSelector.scss\";\n\nimport { useMemo, useState } from \"react\";\nimport { MenuItem, Select } from \"@itwin/itwinui-react\";\n\nimport type { SelectOption } from \"@itwin/itwinui-react\";\nimport type { SelectableTreeRenderProps } from \"./SelectableTree.js\";\n\n/**\n * A definition for trees displayed in `TreeSelector`\n * @internal\n */\nexport interface TreeContentDefinition {\n id: string;\n label: string;\n render: (props: SelectableTreeRenderProps) => React.ReactNode;\n startIcon?: React.ReactNode;\n}\n\n/**\n * Props for `TreeSelector`\n * @internal\n */\nexport interface TreeSelectorProps {\n defaultSelectedContentId: string;\n trees: TreeContentDefinition[];\n density?: \"enlarged\" | \"default\";\n onPerformanceMeasured?: (feature: string, elapsedTime: number) => void;\n onFeatureUsed?: (feature: string) => void;\n}\n\n/**\n * A component that accepts a list of trees and renders a select box at the top,\n * allowing to choose which of the provided tree components should be rendered at the bottom.\n * @internal\n */\nexport function TreeSelector(props: TreeSelectorProps) {\n const [selectedContentId, setSelectedContentId] = useState(props.defaultSelectedContentId);\n const selectedContent = props.trees.find((c) => c.id === selectedContentId) ?? props.trees[0];\n const isEnlarged = props.density === \"enlarged\";\n\n const options = useMemo(() => {\n return props.trees.map((c) => ({ label: c.label, value: c.id, startIcon: c.startIcon })) as SelectOption<string>[];\n }, [props.trees]);\n\n return (\n <div className=\"presentation-components-tree-selector-content\">\n <div className=\"presentation-components-tree-selector-content-header\">\n {options.length > 0 && (\n <Select\n options={options}\n value={selectedContent.id}\n size={isEnlarged ? \"large\" : \"small\"}\n onChange={(treeId: string) => {\n props.onFeatureUsed?.(`choose-${treeId}`);\n setSelectedContentId(treeId);\n }}\n itemRenderer={(option, itemProps) => (\n <MenuItem {...option} isSelected={itemProps.isSelected} size={isEnlarged ? \"large\" : \"default\"}>\n {option.label}\n </MenuItem>\n )}\n />\n )}\n </div>\n <div className=\"presentation-components-tree-selector-content-wrapper\">\n {selectedContent?.render({ density: props.density, onPerformanceMeasured: props.onPerformanceMeasured, onFeatureUsed: props.onFeatureUsed })}\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -50,7 +50,7 @@ function useTreeStorage() {
|
|
|
50
50
|
const ref = useRef(null);
|
|
51
51
|
const scrollTop = useRef();
|
|
52
52
|
const getContainer = () => {
|
|
53
|
-
return ref.current?.querySelector("#tw-tree-renderer
|
|
53
|
+
return ref.current?.querySelector("#tw-tree-renderer");
|
|
54
54
|
};
|
|
55
55
|
const persist = () => {
|
|
56
56
|
const container = getContainer();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeWidgetUiItemsProvider.js","sourceRoot":"","sources":["../../../../src/tree-widget-react/components/TreeWidgetUiItemsProvider.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAEhG,OAAO,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"TreeWidgetUiItemsProvider.js","sourceRoot":"","sources":["../../../../src/tree-widget-react/components/TreeWidgetUiItemsProvider.tsx"],"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 \"./TreeWidgetUiItemsProvider.scss\";\n\nimport { useRef } from \"react\";\nimport { ErrorBoundary } from \"react-error-boundary\";\nimport { StagePanelLocation, StagePanelSection, useTransientState } from \"@itwin/appui-react\";\nimport { SvgHierarchyTree } from \"@itwin/itwinui-icons-react\";\nimport { SvgError } from \"@itwin/itwinui-illustrations-react\";\nimport { Button, NonIdealState } from \"@itwin/itwinui-react\";\nimport { TreeWidget } from \"../TreeWidget.js\";\nimport { SelectableTree } from \"./SelectableTree.js\";\n\nimport type { Ref } from \"react\";\nimport type { FallbackProps } from \"react-error-boundary\";\nimport type { Widget } from \"@itwin/appui-react\";\nimport type { SelectableTreeDefinition, SelectableTreeProps } from \"./SelectableTree.js\";\n\n/**\n * Props for `createWidget`.\n * @public\n */\ninterface TreeWidgetProps {\n /**\n * Trees to show in the widget.\n * @see ModelsTreeComponent\n * @see CategoriesTreeComponent\n * @see ExternalSourcesTreeComponent\n * @see IModelContentTreeComponent\n */\n trees: SelectableTreeDefinition[];\n /** Modifies the density of the tree widget. `enlarged` widget contains larger content */\n density?: \"enlarged\" | \"default\";\n /** Callback that is invoked when performance of tracked feature is measured. */\n onPerformanceMeasured?: (feature: string, elapsedTime: number) => void;\n /** Callback that is invoked when a tracked feature is used. */\n onFeatureUsed?: (feature: string) => void;\n}\n\n/**\n * Creates a tree widget definition that should be returned from `UiItemsProvider.getWidgets()`.\n * @public\n */\nexport function createTreeWidget(props: TreeWidgetProps): Widget {\n return {\n id: \"tree-widget-react:trees\",\n label: TreeWidget.translate(\"widget.label\"),\n icon: <SvgHierarchyTree />,\n layouts: {\n standard: {\n section: StagePanelSection.Start,\n location: StagePanelLocation.Right,\n },\n },\n content: (\n <TreeWidgetComponent\n trees={props.trees}\n density={props.density}\n onPerformanceMeasured={props.onPerformanceMeasured}\n onFeatureUsed={props.onFeatureUsed}\n />\n ),\n };\n}\n\n/**\n * Tree widget component which allows selecting which tree to render.\n * @public\n */\nexport function TreeWidgetComponent(props: SelectableTreeProps) {\n const ref = useTreeWidgetTransientState();\n return (\n <div ref={ref} className=\"tree-widget\">\n <ErrorBoundary FallbackComponent={ErrorState}>\n <SelectableTree {...props} />\n </ErrorBoundary>\n </div>\n );\n}\n\nfunction ErrorState({ resetErrorBoundary }: FallbackProps) {\n return (\n <NonIdealState\n svg={<SvgError />}\n heading={TreeWidget.translate(\"errorState.title\")}\n description={TreeWidget.translate(\"errorState.description\")}\n actions={\n <Button styleType={\"high-visibility\"} onClick={resetErrorBoundary}>\n {TreeWidget.translate(\"errorState.retryButtonLabel\")}\n </Button>\n }\n />\n );\n}\n\nfunction useTreeWidgetTransientState() {\n const { ref, persist, restore } = useTreeStorage();\n useTransientState(persist, restore);\n return ref;\n}\n\ninterface UseTreeStorageResult {\n ref: Ref<HTMLDivElement>;\n persist: () => void;\n restore: () => void;\n}\n\nfunction useTreeStorage(): UseTreeStorageResult {\n const ref = useRef<HTMLDivElement>(null);\n const scrollTop = useRef<number | undefined>();\n\n const getContainer = () => {\n return ref.current?.querySelector(\"#tw-tree-renderer\");\n };\n\n const persist = () => {\n const container = getContainer();\n scrollTop.current = container?.scrollTop;\n };\n\n const restore = () => {\n setTimeout(() => {\n const container = getContainer();\n if (container && scrollTop.current) {\n container.scrollTop = scrollTop.current;\n }\n });\n };\n\n return { ref, persist, restore };\n}\n"]}
|