@itwin/tree-widget-react 3.0.2 → 3.1.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 +25 -2
- package/lib/cjs/components/tree-header/TreeHeader.js +1 -1
- package/lib/cjs/components/tree-header/TreeHeader.js.map +1 -1
- package/lib/cjs/components/trees/categories-tree/CategoriesTreeButtons.js +3 -3
- package/lib/cjs/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -1
- package/lib/cjs/components/trees/categories-tree/CategoriesVisibilityHandler.js +2 -1
- package/lib/cjs/components/trees/categories-tree/CategoriesVisibilityHandler.js.map +1 -1
- package/lib/cjs/components/trees/{models-tree/internal → common}/Tooltip.d.ts +7 -3
- package/lib/cjs/components/trees/{models-tree/internal → common}/Tooltip.js +5 -5
- package/lib/cjs/components/trees/common/Tooltip.js.map +1 -0
- package/lib/cjs/components/trees/common/UseActiveViewport.js.map +1 -1
- package/lib/cjs/components/trees/common/UseHierarchyVisibility.js +6 -3
- package/lib/cjs/components/trees/common/UseHierarchyVisibility.js.map +1 -1
- package/lib/cjs/components/trees/common/Utils.js +1 -1
- package/lib/cjs/components/trees/common/Utils.js.map +1 -1
- package/lib/cjs/components/trees/common/components/TreeNodeCheckbox.js +5 -5
- package/lib/cjs/components/trees/common/components/TreeNodeCheckbox.js.map +1 -1
- package/lib/cjs/components/trees/common/components/TreeRenderer.d.ts +1 -1
- package/lib/cjs/components/trees/common/components/TreeRenderer.js +4 -3
- package/lib/cjs/components/trees/common/components/TreeRenderer.js.map +1 -1
- package/lib/cjs/components/trees/common/components/TreeRenderer.scss +0 -6
- package/lib/cjs/components/trees/models-tree/ModelsTreeButtons.js +13 -13
- package/lib/cjs/components/trees/models-tree/ModelsTreeButtons.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/ModelsTreeDefinition.js +1 -1
- package/lib/cjs/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/UseModelsTree.d.ts +1 -1
- package/lib/cjs/components/trees/models-tree/UseModelsTree.js +23 -12
- package/lib/cjs/components/trees/models-tree/UseModelsTree.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.d.ts +5 -0
- package/lib/cjs/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js +28 -7
- package/lib/cjs/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/internal/FilteredTree.d.ts +25 -0
- package/lib/cjs/components/trees/models-tree/internal/FilteredTree.js +178 -0
- package/lib/cjs/components/trees/models-tree/internal/FilteredTree.js.map +1 -0
- package/lib/cjs/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +2 -1
- package/lib/cjs/components/trees/models-tree/internal/ModelsTreeIdsCache.js +55 -23
- package/lib/cjs/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/internal/ModelsTreeNode.js +1 -1
- package/lib/cjs/components/trees/models-tree/internal/ModelsTreeNode.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.d.ts +8 -8
- package/lib/cjs/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +162 -207
- package/lib/cjs/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/internal/VisibilityChangeEventListener.d.ts +2 -0
- package/lib/cjs/components/trees/models-tree/internal/VisibilityChangeEventListener.js +11 -1
- package/lib/cjs/components/trees/models-tree/internal/VisibilityChangeEventListener.js.map +1 -1
- package/lib/esm/components/tree-header/TreeHeader.js +1 -1
- package/lib/esm/components/tree-header/TreeHeader.js.map +1 -1
- package/lib/esm/components/trees/categories-tree/CategoriesTreeButtons.js +3 -3
- package/lib/esm/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -1
- package/lib/esm/components/trees/categories-tree/CategoriesVisibilityHandler.js +2 -1
- package/lib/esm/components/trees/categories-tree/CategoriesVisibilityHandler.js.map +1 -1
- package/lib/esm/components/trees/{models-tree/internal → common}/Tooltip.d.ts +7 -3
- package/lib/esm/components/trees/{models-tree/internal → common}/Tooltip.js +5 -5
- package/lib/esm/components/trees/common/Tooltip.js.map +1 -0
- package/lib/esm/components/trees/common/UseActiveViewport.js.map +1 -1
- package/lib/esm/components/trees/common/UseHierarchyVisibility.js +7 -4
- package/lib/esm/components/trees/common/UseHierarchyVisibility.js.map +1 -1
- package/lib/esm/components/trees/common/Utils.js +1 -1
- package/lib/esm/components/trees/common/Utils.js.map +1 -1
- package/lib/esm/components/trees/common/components/TreeNodeCheckbox.js +6 -6
- package/lib/esm/components/trees/common/components/TreeNodeCheckbox.js.map +1 -1
- package/lib/esm/components/trees/common/components/TreeRenderer.d.ts +1 -1
- package/lib/esm/components/trees/common/components/TreeRenderer.js +4 -3
- package/lib/esm/components/trees/common/components/TreeRenderer.js.map +1 -1
- package/lib/esm/components/trees/common/components/TreeRenderer.scss +0 -6
- package/lib/esm/components/trees/models-tree/ModelsTreeButtons.js +14 -14
- package/lib/esm/components/trees/models-tree/ModelsTreeButtons.js.map +1 -1
- package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
- package/lib/esm/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -1
- package/lib/esm/components/trees/models-tree/UseModelsTree.d.ts +1 -1
- package/lib/esm/components/trees/models-tree/UseModelsTree.js +24 -13
- package/lib/esm/components/trees/models-tree/UseModelsTree.js.map +1 -1
- package/lib/esm/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.d.ts +5 -0
- package/lib/esm/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js +29 -8
- package/lib/esm/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js.map +1 -1
- package/lib/esm/components/trees/models-tree/internal/FilteredTree.d.ts +25 -0
- package/lib/esm/components/trees/models-tree/internal/FilteredTree.js +173 -0
- package/lib/esm/components/trees/models-tree/internal/FilteredTree.js.map +1 -0
- package/lib/esm/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +2 -1
- package/lib/esm/components/trees/models-tree/internal/ModelsTreeIdsCache.js +55 -23
- package/lib/esm/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -1
- package/lib/esm/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.d.ts +8 -8
- package/lib/esm/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +161 -206
- package/lib/esm/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -1
- package/lib/esm/components/trees/models-tree/internal/VisibilityChangeEventListener.d.ts +2 -0
- package/lib/esm/components/trees/models-tree/internal/VisibilityChangeEventListener.js +11 -1
- package/lib/esm/components/trees/models-tree/internal/VisibilityChangeEventListener.js.map +1 -1
- package/lib/public/locales/en/TreeWidget.json +47 -43
- package/package.json +11 -11
- package/lib/cjs/components/trees/models-tree/internal/Tooltip.js.map +0 -1
- package/lib/esm/components/trees/models-tree/internal/Tooltip.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelsTreeVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../src/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 { concat, concatAll, defer, distinct, EMPTY, firstValueFrom, forkJoin, from, map, merge, mergeMap, of, reduce } from \"rxjs\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { PerModelCategoryVisibility } from \"@itwin/core-frontend\";\nimport { HierarchyFilteringPath, HierarchyNode, HierarchyNodeIdentifier, HierarchyNodeKey } from \"@itwin/presentation-hierarchies\";\nimport { toggleAllCategories } from \"../../common/CategoriesVisibilityUtils\";\nimport { reduceWhile, toVoidPromise } from \"../../common/Rxjs\";\nimport { createVisibilityHandlerResult } from \"../../common/UseHierarchyVisibility\";\nimport { AlwaysAndNeverDrawnElementInfo } from \"./AlwaysAndNeverDrawnElementInfo\";\nimport { ModelsTreeNode } from \"./ModelsTreeNode\";\nimport { createVisibilityStatus } from \"./Tooltip\";\nimport { createVisibilityChangeEventListener } from \"./VisibilityChangeEventListener\";\n\nimport type { GroupingHierarchyNode, HierarchyNodeIdentifiersPath } from \"@itwin/presentation-hierarchies\";\nimport type { HierarchyVisibilityHandler, HierarchyVisibilityHandlerOverridableMethod, VisibilityStatus } from \"../../common/UseHierarchyVisibility\";\nimport type { Observable, OperatorFunction } from \"rxjs\";\nimport type { ModelsTreeIdsCache } from \"./ModelsTreeIdsCache\";\nimport type { Id64Arg, Id64Array, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport type { AlwaysOrNeverDrawnElementsQueryProps } from \"./AlwaysAndNeverDrawnElementInfo\";\nimport type { IVisibilityChangeEventListener } from \"./VisibilityChangeEventListener\";\nimport type { Viewport } from \"@itwin/core-frontend\";\nimport type { NonPartialVisibilityStatus, Visibility } from \"./Tooltip\";\nimport type { ECClassHierarchyInspector, InstanceKey } from \"@itwin/presentation-shared\";\n\n/** @beta */\ninterface GetCategoryVisibilityStatusProps {\n categoryId: Id64String;\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 ChangeGeometricElementDisplayStateProps extends GetGeometricElementVisibilityStatusProps {\n on: boolean;\n}\n\n/** @beta */\ninterface ChangeModelVisibilityStateProps {\n ids: Id64Arg;\n on: boolean;\n}\n\n/** @beta */\ninterface GetFilteredNodeVisibilityProps {\n parentKeys: HierarchyNodeKey[];\n filterPaths: HierarchyFilteringPath[];\n}\n\n/** @beta */\ninterface ChangeFilteredNodeVisibilityProps extends GetFilteredNodeVisibilityProps {\n on: boolean;\n}\n\nexport const SUBJECT_CLASS_NAME = \"BisCore.Subject\" as const;\nexport const MODEL_CLASS_NAME = \"BisCore.GeometricModel3d\" as const;\nexport const CATEGORY_CLASS_NAME = \"BisCore.SpatialCategory\" as const;\nexport const ELEMENT_CLASS_NAME = \"BisCore.GeometricElement3d\" as const;\n\ntype CategoryKey = `${Id64String}-${Id64String}`;\ntype ElementKey = `${CategoryKey}-${Id64String}`;\n\nfunction createCategoryKey(modelId: string, categoryId: string): CategoryKey {\n return `${modelId}-${categoryId}`;\n}\n\nfunction parseCategoryKey(key: CategoryKey) {\n const [modelId, categoryId] = key.split(\"-\");\n return { modelId, categoryId };\n}\n\nfunction createElementKey(modelId: string, categoryId: string, elementId: string): ElementKey {\n return `${modelId}-${categoryId}-${elementId}`;\n}\n\nfunction parseElementKey(key: ElementKey) {\n const [modelId, categoryId, elementId] = key.split(\"-\");\n return { modelId, categoryId, elementId };\n}\n\ninterface FilterTargets {\n subjects?: Set<Id64String>;\n models?: Set<Id64String>;\n categories?: Set<CategoryKey>;\n elements?: Set<ElementKey>;\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: { id: Id64String }) => 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 changeElementState?: HierarchyVisibilityHandlerOverridableMethod<(props: ChangeGeometricElementDisplayStateProps) => 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}\n\n/**\n * Creates an instance if `ModelsTreeVisibilityHandler`.\n * @internal\n */\nexport function createModelsTreeVisibilityHandler(props: ModelsTreeVisibilityHandlerProps): HierarchyVisibilityHandler {\n return new ModelsTreeVisibilityHandlerImpl(props);\n}\n\nclass ModelsTreeVisibilityHandlerImpl implements HierarchyVisibilityHandler {\n private readonly _eventListener: IVisibilityChangeEventListener;\n private readonly _alwaysAndNeverDrawnElements: AlwaysAndNeverDrawnElementInfo;\n private readonly _idsCache: ModelsTreeIdsCache;\n\n constructor(private readonly _props: ModelsTreeVisibilityHandlerProps) {\n this._eventListener = createVisibilityChangeEventListener(_props.viewport);\n this._alwaysAndNeverDrawnElements = new AlwaysAndNeverDrawnElementInfo(_props.viewport);\n this._idsCache = this._props.idsCache;\n }\n\n // istanbul ignore next\n public get onVisibilityChange() {\n return this._eventListener.onVisibilityChange;\n }\n\n public async getVisibilityStatus(node: HierarchyNode): Promise<VisibilityStatus> {\n return firstValueFrom(this.getVisibilityStatusObs(node));\n }\n\n public async changeVisibility(node: HierarchyNode, shouldDisplay: boolean): Promise<void> {\n return toVoidPromise(this.changeVisibilityObs(node, shouldDisplay));\n }\n\n public dispose(): void {\n this._eventListener.dispose();\n this._alwaysAndNeverDrawnElements.dispose();\n }\n\n private getVisibilityStatusObs(node: HierarchyNode): Observable<VisibilityStatus> {\n if (node.filtering?.filteredChildrenIdentifierPaths?.length && !node.filtering.isFilterTarget) {\n return this.getFilteredNodeVisibility({\n parentKeys: [...node.parentKeys, node.key],\n filterPaths: node.filtering.filteredChildrenIdentifierPaths,\n });\n }\n\n if (HierarchyNode.isClassGroupingNode(node)) {\n return this.getClassGroupingNodeDisplayStatus(node);\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n // note: subject nodes may be merged to represent multiple subject instances\n return this.getSubjectNodeVisibilityStatus(node.key.instanceKeys.map((key) => key.id));\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.getModelVisibilityStatus(node.key.instanceKeys[0].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 categoryId: node.key.instanceKeys[0].id,\n modelId,\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n if (!categoryId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n return this.getElementDisplayStatus({\n elementId: node.key.instanceKeys[0].id,\n modelId,\n categoryId,\n });\n }\n\n private getFilteredNodeVisibility({ parentKeys, filterPaths }: GetFilteredNodeVisibilityProps) {\n return from(this.getFilterTargets({ parentKeys, filterPaths })).pipe(\n mergeMap(({ subjects, models, categories, elements }) => {\n const observables = new Array<Observable<VisibilityStatus>>();\n if (subjects?.size) {\n observables.push(this.getSubjectNodeVisibilityStatus([...subjects]));\n }\n\n if (models?.size) {\n observables.push(from(models).pipe(mergeMap((modelId) => this.getModelVisibilityStatus(modelId))));\n }\n\n if (categories?.size) {\n observables.push(\n from(categories).pipe(\n mergeMap((key) => {\n const { modelId, categoryId } = parseCategoryKey(key);\n return this.getCategoryDisplayStatus({ modelId, categoryId });\n }),\n ),\n );\n }\n\n if (elements?.size) {\n observables.push(\n from(elements).pipe(\n mergeMap((key) => {\n const { modelId, categoryId, elementId } = parseElementKey(key);\n return this.getElementDisplayStatus({ modelId, categoryId, elementId });\n }),\n ),\n );\n }\n\n return merge(...observables);\n }),\n map((x) => x.state),\n getVisibilityFromTreeNodeChildren,\n map((x) => {\n assert(x !== \"empty\");\n return createVisibilityStatus(x);\n }),\n );\n }\n\n private getSubjectNodeVisibilityStatus(subjectIds: Id64Array): Observable<VisibilityStatus> {\n const result = defer(() => {\n if (!this._props.viewport.view.isSpatialView()) {\n return of(createVisibilityStatus(\"disabled\", \"subject.nonSpatialView\"));\n }\n\n return from(this._idsCache.getSubjectModelIds(subjectIds)).pipe(\n concatAll(),\n distinct(),\n mergeMap((modelId) => this.getModelVisibilityStatus(modelId)),\n map((x) => x.state),\n getVisibilityStatusFromTreeNodeChildren({\n visible: \"subject.allModelsVisible\",\n hidden: \"subject.allModelsHidden\",\n partial: \"subject.someModelsHidden\",\n }),\n );\n });\n return createVisibilityHandlerResult(this, { ids: subjectIds }, result, this._props.overrides?.getSubjectNodeVisibility);\n }\n\n private getModelVisibilityStatus(modelId: Id64String): Observable<VisibilityStatus> {\n const result = defer(() => {\n const viewport = this._props.viewport;\n if (!viewport.view.isSpatialView()) {\n return of(createVisibilityStatus(\"disabled\", \"model.nonSpatialView\"));\n }\n\n if (!viewport.view.viewsModel(modelId)) {\n return of(createVisibilityStatus(\"hidden\", \"model.hiddenThroughModelSelector\"));\n }\n\n return from(this._idsCache.getModelCategories(modelId)).pipe(\n concatAll(),\n mergeMap((categoryId) => this.getCategoryDisplayStatus({ modelId, categoryId })),\n map((x) => x.state),\n getVisibilityFromTreeNodeChildren,\n map((visibilityByCategories) => {\n const state = visibilityByCategories === \"empty\" ? \"visible\" : visibilityByCategories;\n return createVisibilityStatus(state, state === \"partial\" ? \"model.someCategoriesHidden\" : `model.allCategories${state ? \"Visible\" : \"Hidden\"}`);\n }),\n );\n });\n return createVisibilityHandlerResult(this, { id: modelId }, result, this._props.overrides?.getModelDisplayStatus);\n }\n\n private getDefaultCategoryVisibilityStatus({ modelId, categoryId }: { categoryId: Id64String; modelId: Id64String }): NonPartialVisibilityStatus {\n const viewport = this._props.viewport;\n\n if (!viewport.view.viewsModel(modelId)) {\n return createVisibilityStatus(\"hidden\", \"category.hiddenThroughModel\");\n }\n\n switch (this._props.viewport.perModelCategoryVisibility.getOverride(modelId, categoryId)) {\n case PerModelCategoryVisibility.Override.Show:\n return createVisibilityStatus(\"visible\", \"category.displayedThroughPerModelOverride\");\n case PerModelCategoryVisibility.Override.Hide:\n return createVisibilityStatus(\"hidden\", \"category.hiddenThroughPerModelOverride\");\n }\n\n const isVisible = viewport.view.viewsCategory(categoryId);\n return isVisible\n ? createVisibilityStatus(\"visible\", \"category.displayedThroughCategorySelector\")\n : createVisibilityStatus(\"hidden\", \"category.hiddenThroughCategorySelector\");\n }\n\n private getCategoryDisplayStatus(props: GetCategoryVisibilityStatusProps): Observable<VisibilityStatus> {\n const result = defer(() => {\n if (!this._props.viewport.view.viewsModel(props.modelId)) {\n return of(createVisibilityStatus(\"hidden\", \"category.hiddenThroughModel\"));\n }\n\n return this.getVisibilityFromAlwaysAndNeverDrawnElements({\n queryProps: props,\n tooltips: {\n allElementsInAlwaysDrawnList: \"category.allElementsVisible\",\n allElementsInNeverDrawnList: \"category.allElementsHidden\",\n elementsInBothAlwaysAndNeverDrawn: \"category.someElementsAreHidden\",\n noElementsInExclusiveAlwaysDrawnList: \"category.allElementsHidden\",\n },\n defaultStatus: () => this.getDefaultCategoryVisibilityStatus(props),\n });\n });\n return createVisibilityHandlerResult(this, props, result, this._props.overrides?.getCategoryDisplayStatus);\n }\n\n private getClassGroupingNodeDisplayStatus(node: GroupingHierarchyNode): Observable<VisibilityStatus> {\n const result = defer(() => {\n const info = this.getGroupingNodeInfo(node);\n\n const { modelId, categoryId, elementIds } = info;\n if (!this._props.viewport.view.viewsModel(modelId)) {\n return of(createVisibilityStatus(\"hidden\"));\n }\n\n return this.getVisibilityFromAlwaysAndNeverDrawnElements({\n elements: elementIds,\n defaultStatus: () => {\n const status = this.getDefaultCategoryVisibilityStatus({ categoryId, modelId });\n return createVisibilityStatus(status.state, `groupingNode.${status.state}ThroughCategory`);\n },\n tooltips: {\n allElementsInAlwaysDrawnList: \"groupingNode.allElementsVisible\",\n allElementsInNeverDrawnList: \"groupingNode.allElementsHidden\",\n elementsInBothAlwaysAndNeverDrawn: \"groupingNode.someElementsAreHidden\",\n noElementsInExclusiveAlwaysDrawnList: \"groupingNode.allElementsHidden\",\n },\n });\n });\n return createVisibilityHandlerResult(this, { node }, result, this._props.overrides?.getElementGroupingNodeDisplayStatus);\n }\n\n private getElementOverriddenVisibility(elementId: string): NonPartialVisibilityStatus | undefined {\n const viewport = this._props.viewport;\n if (viewport.neverDrawn?.has(elementId)) {\n return createVisibilityStatus(\"hidden\", \"element.hiddenThroughNeverDrawnList\");\n }\n\n if (viewport.alwaysDrawn?.size) {\n if (viewport.alwaysDrawn.has(elementId)) {\n return createVisibilityStatus(\"visible\", \"element.displayedThroughAlwaysDrawnList\");\n }\n\n if (viewport.isAlwaysDrawnExclusive) {\n return createVisibilityStatus(\"hidden\", \"element.hiddenDueToOtherElementsExclusivelyAlwaysDrawn\");\n }\n }\n\n return undefined;\n }\n\n private getElementDisplayStatus(props: GetGeometricElementVisibilityStatusProps): Observable<VisibilityStatus> {\n const result = defer(() => {\n const viewport = this._props.viewport;\n const { elementId, modelId, categoryId } = props;\n\n if (!viewport.view.viewsModel(modelId)) {\n return of(createVisibilityStatus(\"hidden\", \"element.hiddenThroughModel\"));\n }\n\n let status = this.getElementOverriddenVisibility(elementId);\n if (status) {\n return of(status);\n }\n\n status = this.getDefaultCategoryVisibilityStatus({ categoryId, modelId });\n return of(createVisibilityStatus(status.state, status.state === \"visible\" ? undefined : \"element.hiddenThroughCategory\"));\n });\n return createVisibilityHandlerResult(this, props, result, this._props.overrides?.getElementDisplayStatus);\n }\n\n /** Changes visibility of the items represented by the tree node. */\n private changeVisibilityObs(node: HierarchyNode, on: boolean): Observable<void> {\n if (node.filtering?.filteredChildrenIdentifierPaths?.length && !node.filtering.isFilterTarget) {\n return this.changeFilteredNodeVisibility({\n parentKeys: [...node.parentKeys, node.key],\n filterPaths: node.filtering.filteredChildrenIdentifierPaths,\n on,\n });\n }\n\n if (HierarchyNode.isClassGroupingNode(node)) {\n return this.changeElementGroupingNodeState(node, on);\n }\n\n // istanbul ignore if\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n return this.changeSubjectNodeState(\n node.key.instanceKeys.map((key) => key.id),\n on,\n );\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.changeModelState({ ids: node.key.instanceKeys[0].id, on });\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n // istanbul ignore if\n if (!modelId) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.changeCategoryState({\n categoryId: node.key.instanceKeys[0].id,\n modelId,\n on,\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n // istanbul ignore if\n if (!categoryId) {\n // istanbul ignore next\n return EMPTY;\n }\n\n return this.changeElementState({\n elementId: node.key.instanceKeys[0].id,\n modelId,\n categoryId,\n on,\n });\n }\n\n private async getFilterTargets({ parentKeys, filterPaths }: GetFilteredNodeVisibilityProps) {\n const filterTargets: FilterTargets = {};\n\n function addFilterTarget(targetType: \"subjects\" | \"models\", value: Id64String): void;\n function addFilterTarget(targetType: \"categories\", value: CategoryKey): void;\n function addFilterTarget(targetType: \"elements\", value: ElementKey): void;\n function addFilterTarget(targetType: keyof FilterTargets, value: string) {\n ((filterTargets as Record<keyof FilterTargets, Set<string>>)[targetType] ??= new Set()).add(value);\n }\n\n const imodelAccess = this._props.imodelAccess;\n\n // Remove all paths such that there are paths to any of the ancestors of the filter target.\n const paths = reduceFilterPaths(filterPaths);\n\n await Promise.all(\n paths.map(async (path) => {\n const target = path[path.length - 1];\n if (!HierarchyNodeIdentifier.isInstanceNodeIdentifier(target)) {\n return;\n }\n\n const previousPath = path.slice(0, path.length - 1);\n\n if (await imodelAccess.classDerivesFrom(target.className, SUBJECT_CLASS_NAME)) {\n addFilterTarget(\"subjects\", target.id);\n return;\n }\n\n if (await imodelAccess.classDerivesFrom(target.className, MODEL_CLASS_NAME)) {\n addFilterTarget(\"models\", target.id);\n return;\n }\n\n if (await imodelAccess.classDerivesFrom(target.className, CATEGORY_CLASS_NAME)) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const modelId = await this.findClassIdInFilterPath(previousPath, parentKeys, MODEL_CLASS_NAME);\n addFilterTarget(\"categories\", createCategoryKey(modelId, target.id));\n return;\n }\n\n const [modelId, categoryId] = await Promise.all([\n this.findClassIdInFilterPath(previousPath, parentKeys, MODEL_CLASS_NAME),\n this.findClassIdInFilterPath(previousPath, parentKeys, CATEGORY_CLASS_NAME),\n ]);\n addFilterTarget(\"elements\", createElementKey(modelId, categoryId, target.id));\n\n // Add parent elements to the filter targets as well\n for (let idx = path.length - 1; idx >= 0; --idx) {\n const pathIdentifier = path[idx];\n if (!HierarchyNodeIdentifier.isInstanceNodeIdentifier(pathIdentifier)) {\n continue;\n }\n\n if (!(await imodelAccess.classDerivesFrom(pathIdentifier.className, ELEMENT_CLASS_NAME))) {\n break;\n }\n addFilterTarget(\"elements\", createElementKey(modelId, categoryId, pathIdentifier.id));\n }\n }),\n );\n\n return filterTargets;\n }\n\n private changeFilteredNodeVisibility({ on, ...props }: ChangeFilteredNodeVisibilityProps) {\n return from(this.getFilterTargets(props)).pipe(\n mergeMap(({ subjects, models, categories, elements }) => {\n const observables = new Array<Observable<void>>();\n if (subjects?.size) {\n observables.push(this.changeSubjectNodeState([...subjects], on));\n }\n\n if (models?.size) {\n observables.push(this.changeModelState({ ids: models, on }));\n }\n\n if (categories?.size) {\n observables.push(\n from(categories).pipe(\n mergeMap((key) => {\n const { modelId, categoryId } = parseCategoryKey(key);\n return this.changeCategoryState({ modelId, categoryId, on });\n }),\n ),\n );\n }\n\n if (elements?.size) {\n observables.push(\n from(elements).pipe(\n mergeMap((key) => {\n const { modelId, categoryId, elementId } = parseElementKey(key);\n return this.changeElementState({ modelId, categoryId, elementId, on });\n }),\n ),\n );\n }\n\n return merge(...observables);\n }),\n );\n }\n\n private changeSubjectNodeState(ids: Id64Array, on: boolean): Observable<void> {\n const result = defer(() => {\n // istanbul ignore if\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 result = defer(() => {\n const viewport = this._props.viewport;\n // istanbul ignore if\n if (!viewport.view.isSpatialView()) {\n return EMPTY;\n }\n\n const { ids, on } = props;\n if (!on) {\n viewport.changeModelDisplay(ids, false);\n return EMPTY;\n }\n\n return concat(\n defer(() => {\n viewport.perModelCategoryVisibility.clearOverrides(ids);\n return from(viewport.addViewedModels(ids));\n }),\n (typeof ids === \"string\" ? of(ids) : from(ids)).pipe(\n mergeMap((modelId) => {\n return from(this._idsCache.getModelCategories(modelId)).pipe(\n concatAll(),\n mergeMap((categoryId) => this.changeCategoryState({ categoryId, 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) {\n const viewport = this._props.viewport;\n return forkJoin({\n categories: this._idsCache.getModelCategories(modelId),\n alwaysDrawnElements: this.getAlwaysDrawnElements({ modelId }),\n }).pipe(\n mergeMap(async ({ categories, alwaysDrawnElements }) => {\n const alwaysDrawn = this._props.viewport.alwaysDrawn;\n if (alwaysDrawn && alwaysDrawnElements) {\n viewport.setAlwaysDrawn(setDifference(alwaysDrawn, alwaysDrawnElements));\n }\n categories.forEach((categoryId) => {\n this.changeCategoryStateInViewportAccordingToModelVisibility(modelId, categoryId, false);\n });\n await viewport.addViewedModels(modelId);\n }),\n );\n }\n\n private changeCategoryStateInViewportAccordingToModelVisibility(modelId: string, categoryId: string, on: boolean) {\n const viewport = this._props.viewport;\n const isDisplayedInSelector = viewport.view.viewsCategory(categoryId);\n const override =\n on === isDisplayedInSelector\n ? PerModelCategoryVisibility.Override.None\n : on\n ? PerModelCategoryVisibility.Override.Show\n : PerModelCategoryVisibility.Override.Hide;\n viewport.perModelCategoryVisibility.setOverride(modelId, categoryId, override);\n if (override === PerModelCategoryVisibility.Override.None && on) {\n // we took off the override which means the category is displayed in selector, but\n // doesn't mean all its subcategories are displayed - this call ensures that\n viewport.changeCategoryDisplay(categoryId, true, true);\n }\n }\n\n private changeCategoryState(props: ChangeCategoryVisibilityStateProps): Observable<void> {\n const result = defer(() => {\n const viewport = this._props.viewport;\n const { modelId, categoryId, on } = props;\n return concat(\n props.on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY,\n defer(() => {\n this.changeCategoryStateInViewportAccordingToModelVisibility(modelId, categoryId, on);\n return this.clearAlwaysAndNeverDrawnElements(props);\n }),\n );\n });\n return createVisibilityHandlerResult(this, props, result, this._props.overrides?.changeCategoryState);\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 = defer(() => {\n const info = this.getGroupingNodeInfo(node);\n\n const { modelId, categoryId, elementIds } = info;\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({ categoryId, modelId });\n const isDisplayedByDefault = categoryVisibility.state === \"visible\";\n return from(elementIds).pipe(this.changeElementStateNoChildrenOperator({ on, isDisplayedByDefault }));\n }),\n );\n });\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 changeElementState(props: ChangeGeometricElementDisplayStateProps): Observable<void> {\n const result = defer(() => {\n const { elementId, on, modelId, categoryId } = props;\n const viewport = this._props.viewport;\n return concat(\n props.on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY,\n defer(() => {\n const categoryVisibility = this.getDefaultCategoryVisibilityStatus({ categoryId, modelId });\n const isDisplayedByDefault = categoryVisibility.state === \"visible\";\n return of(elementId).pipe(this.changeElementStateNoChildrenOperator({ on, isDisplayedByDefault }));\n }),\n );\n });\n return createVisibilityHandlerResult(this, props, result, this._props.overrides?.changeElementState);\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 reduce(\n (acc, elementId) => {\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: new Set(this._props.viewport.neverDrawn || []),\n alwaysDrawn: new Set(this._props.viewport.alwaysDrawn || []),\n },\n ),\n map((state) => {\n state.changedNeverDrawn && this._props.viewport.setNeverDrawn(state.neverDrawn);\n state.changedAlwaysDrawn && 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,\n ): VisibilityStatus {\n const { alwaysDrawn, neverDrawn, totalCount } = props;\n\n if (neverDrawn?.size === totalCount) {\n return createVisibilityStatus(\"hidden\", props.tooltips.allElementsInNeverDrawnList);\n }\n\n if (alwaysDrawn?.size === totalCount) {\n return createVisibilityStatus(\"visible\", props.tooltips.allElementsInAlwaysDrawnList);\n }\n\n const viewport = this._props.viewport;\n if (viewport.isAlwaysDrawnExclusive && viewport.alwaysDrawn?.size) {\n return alwaysDrawn?.size\n ? createVisibilityStatus(\"partial\", props.tooltips.elementsInBothAlwaysAndNeverDrawn)\n : createVisibilityStatus(\"hidden\", props.tooltips.noElementsInExclusiveAlwaysDrawnList);\n }\n\n const status = props.defaultStatus();\n if ((status.state === \"visible\" && neverDrawn?.size) || (status.state === \"hidden\" && alwaysDrawn?.size)) {\n return createVisibilityStatus(\"partial\");\n }\n return status;\n }\n\n private getVisibilityFromAlwaysAndNeverDrawnElements(\n props: GetVisibilityFromAlwaysAndNeverDrawnElementsProps & ({ elements: Id64Set } | { queryProps: AlwaysOrNeverDrawnElementsQueryProps }),\n ): Observable<VisibilityStatus> {\n const viewport = this._props.viewport;\n if (viewport.isAlwaysDrawnExclusive) {\n if (!viewport?.alwaysDrawn?.size) {\n return of(createVisibilityStatus(\"hidden\", props.tooltips.noElementsInExclusiveAlwaysDrawnList));\n }\n } else if (!viewport?.neverDrawn?.size && !viewport?.alwaysDrawn?.size) {\n return of(props.defaultStatus());\n }\n\n if (\"elements\" in props) {\n return of(\n this.getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n alwaysDrawn: viewport.alwaysDrawn?.size ? setIntersection(props.elements, viewport.alwaysDrawn) : undefined,\n neverDrawn: viewport.neverDrawn?.size ? setIntersection(props.elements, viewport.neverDrawn) : undefined,\n totalCount: props.elements.size,\n }),\n );\n }\n\n const { modelId, categoryId } = props.queryProps;\n const totalCount = categoryId ? this._idsCache.getCategoryElementsCount(modelId, categoryId) : this._idsCache.getModelElementCount(modelId);\n return forkJoin({\n totalCount,\n alwaysDrawn: this.getAlwaysDrawnElements(props.queryProps),\n neverDrawn: this.getNeverDrawnElements(props.queryProps),\n }).pipe(\n map((state) => {\n return this.getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n ...state,\n });\n }),\n );\n }\n\n private getAlwaysDrawnElements(props: AlwaysOrNeverDrawnElementsQueryProps) {\n return this._alwaysAndNeverDrawnElements.getElements({ ...props, setType: \"always\" });\n }\n\n private getNeverDrawnElements(props: AlwaysOrNeverDrawnElementsQueryProps) {\n return this._alwaysAndNeverDrawnElements.getElements({ ...props, setType: \"never\" });\n }\n\n private clearAlwaysAndNeverDrawnElements(props: Omit<AlwaysOrNeverDrawnElementsQueryProps, \"setType\">) {\n return forkJoin({\n alwaysDrawn: this.getAlwaysDrawnElements(props),\n neverDrawn: this.getNeverDrawnElements(props),\n }).pipe(\n map(({ alwaysDrawn, neverDrawn }) => {\n const viewport = this._props.viewport;\n if (viewport.alwaysDrawn?.size && alwaysDrawn.size) {\n viewport.setAlwaysDrawn(setDifference(viewport.alwaysDrawn, alwaysDrawn));\n }\n if (viewport.neverDrawn?.size && neverDrawn.size) {\n viewport.setNeverDrawn(setDifference(viewport.neverDrawn, neverDrawn));\n }\n }),\n );\n }\n\n private getGroupingNodeInfo(node: GroupingHierarchyNode) {\n const modelId = ModelsTreeNode.getModelId(node);\n const categoryId = ModelsTreeNode.getCategoryId(node);\n assert(!!modelId && !!categoryId);\n\n const elementIds = new Set(node.groupedInstanceKeys.map((key) => key.id));\n return { modelId, categoryId, elementIds };\n }\n\n private async findClassIdInFilterPath(path: HierarchyNodeIdentifiersPath, parentKeys: HierarchyNodeKey[], className: string) {\n function* keysToCheck(): Iterable<InstanceKey> {\n for (let i = path.length - 1; i >= 0; --i) {\n const id = path[i];\n if (HierarchyNodeIdentifier.isInstanceNodeIdentifier(id)) {\n yield id;\n }\n }\n\n for (let i = parentKeys.length - 1; i >= 0; --i) {\n const key = parentKeys[i];\n if (HierarchyNodeKey.isInstances(key)) {\n yield* key.instanceKeys;\n }\n }\n }\n\n for (const parentKey of keysToCheck()) {\n if (await this._props.imodelAccess.classDerivesFrom(parentKey.className, className)) {\n return parentKey.id;\n }\n }\n\n assert(false, () => `Cannot find an instance of ${className} in instance keys: ${JSON.stringify([...keysToCheck()], undefined, 2)}`);\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: () => VisibilityStatus;\n}\n\nfunction getVisibilityFromTreeNodeChildren(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 getVisibilityStatusFromTreeNodeChildren(tooltipMap: { [key in Visibility]: string | undefined }): OperatorFunction<Visibility, VisibilityStatus> {\n return (obs) => {\n return getVisibilityFromTreeNodeChildren(obs).pipe(\n map((visibility) => {\n if (visibility === \"empty\") {\n visibility = \"visible\";\n }\n\n return createVisibilityStatus(visibility, tooltipMap[visibility]);\n }),\n );\n };\n}\n\nfunction setDifference<T>(lhs: Set<T>, rhs: Set<T>): Set<T> {\n const result = new Set<T>();\n lhs.forEach((x) => !rhs.has(x) && result.add(x));\n return result;\n}\n\nfunction setIntersection<T>(lhs: Set<T>, rhs: Set<T>): Set<T> {\n const result = new Set<T>();\n lhs.forEach((x) => rhs.has(x) && result.add(x));\n return result;\n}\n\nfunction reduceFilterPaths(filteringPaths: HierarchyFilteringPath[]) {\n let paths = filteringPaths.map((filteringPath) => HierarchyFilteringPath.normalize(filteringPath).path);\n const sorted = [...paths].sort((a, b) => a.length - b.length);\n paths = [];\n for (const path of sorted) {\n if (!arraySortedByLengthContainsPrefix(paths, path)) {\n paths.push(path);\n }\n }\n return paths;\n}\n\nfunction arraySortedByLengthContainsPrefix(targetArray: HierarchyNodeIdentifiersPath[], source: HierarchyNodeIdentifiersPath) {\n for (const targetVal of targetArray) {\n if (targetVal.length >= source.length) {\n break;\n }\n\n let isPrefix = true;\n for (let i = 0; i < targetVal.length; ++i) {\n if (!HierarchyNodeIdentifier.equal(targetVal[i], source[i])) {\n isPrefix = false;\n break;\n }\n }\n\n if (isPrefix) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Enables display of all given models. Also enables display of all categories and clears always and\n * never drawn lists in the viewport.\n * @public\n */\nexport async function showAllModels(models: string[], viewport: Viewport) {\n await viewport.addViewedModels(models);\n viewport.clearNeverDrawn();\n viewport.clearAlwaysDrawn();\n await toggleAllCategories(viewport, true);\n}\n\n/**\n * Disables display of all given models.\n * @public\n */\nexport async function hideAllModels(models: string[], viewport: Viewport) {\n viewport.changeModelDisplay(models, false);\n}\n\n/**\n * Inverts display of all given models.\n * @public\n */\nexport async function invertAllModels(models: string[], viewport: Viewport) {\n const notViewedModels: string[] = [];\n const viewedModels: string[] = [];\n models.forEach((modelId) => {\n if (viewport.viewsModel(modelId)) {\n viewedModels.push(modelId);\n } else {\n notViewedModels.push(modelId);\n }\n });\n await viewport.addViewedModels(notViewedModels);\n viewport.changeModelDisplay(viewedModels, false);\n}\n\n/**\n * Based on the value of `enable` argument, either enables or disables display of given models.\n * @public\n */\nexport async function toggleModels(models: string[], enable: boolean, viewport: Viewport) {\n // istanbul ignore if\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"]}
|
|
1
|
+
{"version":3,"file":"ModelsTreeVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../src/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 bufferCount,\n concat,\n concatAll,\n concatMap,\n defer,\n delay,\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} from \"rxjs\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { PerModelCategoryVisibility } from \"@itwin/core-frontend\";\nimport { HierarchyNode, HierarchyNodeKey } from \"@itwin/presentation-hierarchies\";\nimport { toggleAllCategories } from \"../../common/CategoriesVisibilityUtils\";\nimport { reduceWhile, toVoidPromise } from \"../../common/Rxjs\";\nimport { createVisibilityStatus } from \"../../common/Tooltip\";\nimport { createVisibilityHandlerResult } from \"../../common/UseHierarchyVisibility\";\nimport { AlwaysAndNeverDrawnElementInfo } from \"./AlwaysAndNeverDrawnElementInfo\";\nimport { createFilteredTree, parseCategoryKey } from \"./FilteredTree\";\nimport { ModelsTreeNode } from \"./ModelsTreeNode\";\nimport { createVisibilityChangeEventListener } from \"./VisibilityChangeEventListener\";\n\nimport type { Observable, OperatorFunction, Subscription } from \"rxjs\";\nimport type { GroupingHierarchyNode, HierarchyFilteringPath } from \"@itwin/presentation-hierarchies\";\nimport type { HierarchyVisibilityHandler, HierarchyVisibilityHandlerOverridableMethod, VisibilityStatus } from \"../../common/UseHierarchyVisibility\";\nimport type { ModelsTreeIdsCache } from \"./ModelsTreeIdsCache\";\nimport type { Id64Arg, Id64Array, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport type { AlwaysOrNeverDrawnElementsQueryProps } from \"./AlwaysAndNeverDrawnElementInfo\";\nimport type { IVisibilityChangeEventListener } from \"./VisibilityChangeEventListener\";\nimport type { Viewport } from \"@itwin/core-frontend\";\nimport type { NonPartialVisibilityStatus, Visibility } from \"../../common/Tooltip\";\nimport type { ECClassHierarchyInspector } from \"@itwin/presentation-shared\";\nimport type { FilteredTree } from \"./FilteredTree\";\n\n/** @beta */\ninterface GetCategoryVisibilityStatusProps {\n categoryId: Id64String;\n modelId: Id64String;\n}\n\n/** @beta */\ninterface ChangeCategoryVisibilityStateProps extends GetCategoryVisibilityStatusProps {\n on: boolean;\n}\n\n/** @beta */\ninterface GetGeometricElementVisibilityStatusProps {\n elementId: Id64String;\n modelId: Id64String;\n categoryId: Id64String;\n}\n\n/** @beta */\ninterface ChangeGeometricElementsDisplayStateProps {\n elementIds: Id64Set;\n modelId: Id64String;\n categoryId: Id64String;\n on: boolean;\n}\n\n/** @beta */\ninterface ChangeModelVisibilityStateProps {\n ids: Id64Arg;\n on: boolean;\n}\n\n/** @beta */\ninterface GetFilteredNodeVisibilityProps {\n node: HierarchyNode;\n}\n\n/** @beta */\ninterface ChangeFilteredNodeVisibilityProps extends GetFilteredNodeVisibilityProps {\n on: boolean;\n}\n\n/**\n * Functionality of Models tree visibility handler that can be overridden.\n * Each callback is provided original implementation and reference to a `HierarchyVisibilityHandler`.\n * @beta\n */\nexport interface ModelsTreeVisibilityHandlerOverrides {\n getSubjectNodeVisibility?: HierarchyVisibilityHandlerOverridableMethod<(props: { ids: Id64Array }) => Promise<VisibilityStatus>>;\n getModelDisplayStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { id: Id64String }) => Promise<VisibilityStatus>>;\n getCategoryDisplayStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: GetCategoryVisibilityStatusProps) => Promise<VisibilityStatus>>;\n getElementGroupingNodeDisplayStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { node: GroupingHierarchyNode }) => Promise<VisibilityStatus>>;\n getElementDisplayStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: GetGeometricElementVisibilityStatusProps) => Promise<VisibilityStatus>>;\n\n changeSubjectNodeState?: HierarchyVisibilityHandlerOverridableMethod<(props: { ids: Id64Array; on: boolean }) => Promise<void>>;\n changeModelState?: HierarchyVisibilityHandlerOverridableMethod<(props: ChangeModelVisibilityStateProps) => Promise<void>>;\n changeCategoryState?: HierarchyVisibilityHandlerOverridableMethod<(props: ChangeCategoryVisibilityStateProps) => Promise<void>>;\n changeElementGroupingNodeState?: HierarchyVisibilityHandlerOverridableMethod<(props: { node: GroupingHierarchyNode; on: boolean }) => Promise<void>>;\n changeElementsState?: HierarchyVisibilityHandlerOverridableMethod<(props: ChangeGeometricElementsDisplayStateProps) => Promise<void>>;\n}\n\n/**\n * Props for `createModelsTreeVisibilityHandler`.\n * @internal\n */\nexport interface ModelsTreeVisibilityHandlerProps {\n viewport: Viewport;\n idsCache: ModelsTreeIdsCache;\n imodelAccess: ECClassHierarchyInspector;\n overrides?: ModelsTreeVisibilityHandlerOverrides;\n filteredPaths?: HierarchyFilteringPath[];\n}\n\n/**\n * Creates an instance if `ModelsTreeVisibilityHandler`.\n * @internal\n */\nexport function createModelsTreeVisibilityHandler(props: ModelsTreeVisibilityHandlerProps): HierarchyVisibilityHandler {\n return new ModelsTreeVisibilityHandlerImpl(props);\n}\n\nclass ModelsTreeVisibilityHandlerImpl implements HierarchyVisibilityHandler {\n private readonly _eventListener: IVisibilityChangeEventListener;\n private readonly _alwaysAndNeverDrawnElements: AlwaysAndNeverDrawnElementInfo;\n private readonly _idsCache: ModelsTreeIdsCache;\n private _filteredTree: Promise<FilteredTree> | undefined;\n private _elementChangeQueue = new Subject<Observable<void>>();\n private _subscriptions: Subscription[] = [];\n private _changeRequest = new Subject<{ key: HierarchyNodeKey; depth: number }>();\n\n constructor(private readonly _props: ModelsTreeVisibilityHandlerProps) {\n this._eventListener = createVisibilityChangeEventListener(_props.viewport);\n this._alwaysAndNeverDrawnElements = new AlwaysAndNeverDrawnElementInfo(_props.viewport);\n this._idsCache = this._props.idsCache;\n this._filteredTree = _props.filteredPaths ? createFilteredTree(this._props.imodelAccess, _props.filteredPaths) : undefined;\n this._subscriptions.push(this._elementChangeQueue.pipe(concatAll()).subscribe());\n }\n\n // istanbul ignore next\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 ),\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(): void {\n this._eventListener.dispose();\n this._alwaysAndNeverDrawnElements.dispose();\n this._subscriptions.forEach((x) => x.unsubscribe());\n }\n\n private getVisibilityStatusObs(node: HierarchyNode): Observable<VisibilityStatus> {\n if (node.filtering?.filteredChildrenIdentifierPaths?.length && !node.filtering.isFilterTarget) {\n return this.getFilteredNodeVisibility({ node });\n }\n\n if (HierarchyNode.isClassGroupingNode(node)) {\n return this.getClassGroupingNodeDisplayStatus(node);\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n // note: subject nodes may be merged to represent multiple subject instances\n return this.getSubjectNodeVisibilityStatus({ subjectIds: node.key.instanceKeys.map((key) => key.id) });\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.getModelVisibilityStatus({ modelId: node.key.instanceKeys[0].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 categoryId: node.key.instanceKeys[0].id,\n modelId,\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n if (!categoryId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n return this.getElementDisplayStatus({\n elementId: node.key.instanceKeys[0].id,\n modelId,\n categoryId,\n });\n }\n\n private getFilteredNodeVisibility(props: GetFilteredNodeVisibilityProps) {\n return from(this.getVisibilityChangeTargets(props)).pipe(\n mergeMap(({ subjects, models, categories, elements }) => {\n const observables = new Array<Observable<VisibilityStatus>>();\n if (subjects?.size) {\n observables.push(this.getSubjectNodeVisibilityStatus({ subjectIds: [...subjects], ignoreTooltip: true }));\n }\n\n if (models?.size) {\n observables.push(from(models).pipe(mergeMap((modelId) => this.getModelVisibilityStatus({ modelId, 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, categoryId, ignoreTooltip: true });\n }),\n ),\n );\n }\n\n if (elements?.size) {\n observables.push(\n from(elements).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(([categoryKey, elementIds]) => {\n const { modelId, categoryId } = parseCategoryKey(categoryKey);\n return from(elementIds).pipe(\n releaseMainThreadOnItemsCount(1000),\n mergeMap((elementId) => this.getElementDisplayStatus({ modelId, categoryId, elementId, ignoreTooltip: true })),\n );\n }),\n ),\n );\n }\n\n return merge(...observables);\n }),\n map((x) => x.state),\n getVisibilityFromTreeNodeChildren,\n map((x) => {\n assert(x !== \"empty\");\n return createVisibilityStatus(x);\n }),\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 concatAll(),\n distinct(),\n mergeMap((modelId) => this.getModelVisibilityStatus({ modelId, ignoreTooltip: true })),\n map((x) => x.state),\n getVisibilityStatusFromTreeNodeChildren(\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({ modelId, ignoreTooltip }: { modelId: Id64String; 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 if (!viewport.view.viewsModel(modelId)) {\n return of(createVisibilityStatus(\"hidden\", getTooltipOptions(\"modelsTree.model.hiddenThroughModelSelector\", ignoreTooltip)));\n }\n\n return from(this._idsCache.getModelCategories(modelId)).pipe(\n concatAll(),\n mergeMap((categoryId) => this.getCategoryDisplayStatus({ modelId, categoryId, ignoreTooltip: true })),\n map((x) => x.state),\n getVisibilityFromTreeNodeChildren,\n map((visibilityByCategories) => {\n const state = visibilityByCategories === \"empty\" ? \"visible\" : visibilityByCategories;\n return createVisibilityStatus(\n state,\n getTooltipOptions(\n state === \"partial\" ? \"modelsTree.model.someCategoriesHidden\" : `modelsTree.model.allCategories${state ? \"Visible\" : \"Hidden\"}`,\n ignoreTooltip,\n ),\n );\n }),\n );\n });\n return createVisibilityHandlerResult(this, { id: modelId }, result, this._props.overrides?.getModelDisplayStatus);\n }\n\n private getDefaultCategoryVisibilityStatus({\n modelId,\n categoryId,\n ignoreTooltip,\n }: {\n categoryId: Id64String;\n modelId: Id64String;\n ignoreTooltip?: boolean;\n }): NonPartialVisibilityStatus {\n const viewport = this._props.viewport;\n\n if (!viewport.view.viewsModel(modelId)) {\n return createVisibilityStatus(\"hidden\", getTooltipOptions(\"modelsTree.category.hiddenThroughModel\", ignoreTooltip));\n }\n\n switch (this._props.viewport.perModelCategoryVisibility.getOverride(modelId, categoryId)) {\n case PerModelCategoryVisibility.Override.Show:\n return createVisibilityStatus(\"visible\", getTooltipOptions(\"modelsTree.category.displayedThroughPerModelOverride\", ignoreTooltip));\n case PerModelCategoryVisibility.Override.Hide:\n return createVisibilityStatus(\"hidden\", getTooltipOptions(\"modelsTree.category.hiddenThroughPerModelOverride\", ignoreTooltip));\n }\n\n const isVisible = viewport.view.viewsCategory(categoryId);\n return isVisible\n ? createVisibilityStatus(\"visible\", getTooltipOptions(\"modelsTree.category.displayedThroughCategorySelector\", ignoreTooltip))\n : createVisibilityStatus(\"hidden\", getTooltipOptions(\"modelsTree.category.hiddenThroughCategorySelector\", ignoreTooltip));\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 of(createVisibilityStatus(\"hidden\", getTooltipOptions(\"modelsTree.category.hiddenThroughModel\", ignoreTooltip)));\n }\n\n return this.getVisibilityFromAlwaysAndNeverDrawnElements({\n queryProps: props,\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: () => this.getDefaultCategoryVisibilityStatus(props),\n ignoreTooltip,\n });\n });\n return createVisibilityHandlerResult(this, props, result, this._props.overrides?.getCategoryDisplayStatus);\n }\n\n private getClassGroupingNodeDisplayStatus(node: GroupingHierarchyNode): Observable<VisibilityStatus> {\n const result = defer(() => {\n const info = this.getGroupingNodeInfo(node);\n\n const { modelId, categoryId, elementIds } = info;\n if (!this._props.viewport.view.viewsModel(modelId)) {\n return of(createVisibilityStatus(\"hidden\"));\n }\n\n return this.getVisibilityFromAlwaysAndNeverDrawnElements({\n elements: elementIds,\n defaultStatus: () => {\n const status = this.getDefaultCategoryVisibilityStatus({ 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 });\n });\n return createVisibilityHandlerResult(this, { node }, result, this._props.overrides?.getElementGroupingNodeDisplayStatus);\n }\n\n private getElementOverriddenVisibility(elementId: string, ignoreTooltip?: boolean): NonPartialVisibilityStatus | undefined {\n const viewport = this._props.viewport;\n if (viewport.neverDrawn?.has(elementId)) {\n return createVisibilityStatus(\"hidden\", getTooltipOptions(\"modelsTree.element.hiddenThroughNeverDrawnList\", ignoreTooltip));\n }\n\n if (viewport.alwaysDrawn?.size) {\n if (viewport.alwaysDrawn.has(elementId)) {\n return createVisibilityStatus(\"visible\", getTooltipOptions(\"modelsTree.element.displayedThroughAlwaysDrawnList\", ignoreTooltip));\n }\n\n if (viewport.isAlwaysDrawnExclusive) {\n return createVisibilityStatus(\"hidden\", getTooltipOptions(\"modelsTree.element.hiddenDueToOtherElementsExclusivelyAlwaysDrawn\", ignoreTooltip));\n }\n }\n\n return undefined;\n }\n\n private getElementDisplayStatus({\n ignoreTooltip,\n ...props\n }: GetGeometricElementVisibilityStatusProps & { ignoreTooltip?: boolean }): Observable<VisibilityStatus> {\n const result = defer(() => {\n const viewport = this._props.viewport;\n const { elementId, modelId, categoryId } = props;\n\n if (!viewport.view.viewsModel(modelId)) {\n return of(createVisibilityStatus(\"hidden\", getTooltipOptions(\"modelsTree.element.hiddenThroughModel\", ignoreTooltip)));\n }\n\n let status = this.getElementOverriddenVisibility(elementId, ignoreTooltip);\n if (status) {\n return of(status);\n }\n\n status = this.getDefaultCategoryVisibilityStatus({ categoryId, modelId, ignoreTooltip: true });\n return of(\n createVisibilityStatus(\n status.state,\n getTooltipOptions(status.state === \"visible\" ? undefined : \"modelsTree.element.hiddenThroughCategory\", ignoreTooltip),\n ),\n );\n });\n return createVisibilityHandlerResult(this, props, result, this._props.overrides?.getElementDisplayStatus);\n }\n\n /** Changes visibility of the items represented by the tree node. */\n private changeVisibilityObs(node: HierarchyNode, on: boolean): Observable<void> {\n if (node.filtering?.filteredChildrenIdentifierPaths?.length && !node.filtering.isFilterTarget) {\n return this.changeFilteredNodeVisibility({ node, on });\n }\n\n if (HierarchyNode.isClassGroupingNode(node)) {\n return this.changeElementGroupingNodeState(node, on);\n }\n\n // istanbul ignore if\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n return this.changeSubjectNodeState(\n node.key.instanceKeys.map((key) => key.id),\n on,\n );\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.changeModelState({ ids: node.key.instanceKeys[0].id, on });\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n // istanbul ignore if\n if (!modelId) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.changeCategoryState({\n categoryId: node.key.instanceKeys[0].id,\n modelId,\n on,\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n // istanbul ignore if\n if (!categoryId) {\n // istanbul ignore next\n return EMPTY;\n }\n\n return this.changeElementsState({\n elementIds: new Set([...node.key.instanceKeys.map(({ id }) => id)]),\n modelId,\n categoryId,\n on,\n });\n }\n\n private async getVisibilityChangeTargets({ node }: GetFilteredNodeVisibilityProps) {\n const filteredTree = await this._filteredTree;\n return filteredTree ? filteredTree.getVisibilityChangeTargets(node) : {};\n }\n\n private changeFilteredNodeVisibility({ on, ...props }: ChangeFilteredNodeVisibilityProps) {\n return from(this.getVisibilityChangeTargets(props)).pipe(\n mergeMap(({ 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, categoryId, on });\n }),\n ),\n );\n }\n\n if (elements?.size) {\n observables.push(\n from(elements).pipe(\n mergeMap(([categoryKey, elementIds]) => {\n const { modelId, categoryId } = parseCategoryKey(categoryKey);\n return this.changeElementsState({ modelId, categoryId, elementIds, on });\n }),\n ),\n );\n }\n\n return merge(...observables);\n }),\n );\n }\n\n private changeSubjectNodeState(ids: Id64Array, on: boolean): Observable<void> {\n const result = defer(() => {\n // istanbul ignore if\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 result = defer(() => {\n const viewport = this._props.viewport;\n // istanbul ignore if\n if (!viewport.view.isSpatialView()) {\n return EMPTY;\n }\n\n const { ids, on } = props;\n if (!on) {\n viewport.changeModelDisplay(ids, false);\n return EMPTY;\n }\n\n return concat(\n defer(() => {\n viewport.perModelCategoryVisibility.clearOverrides(ids);\n return from(viewport.addViewedModels(ids));\n }),\n (typeof ids === \"string\" ? of(ids) : from(ids)).pipe(\n mergeMap((modelId) => {\n return from(this._idsCache.getModelCategories(modelId)).pipe(\n concatAll(),\n mergeMap((categoryId) => this.changeCategoryState({ categoryId, 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) {\n const viewport = this._props.viewport;\n return forkJoin({\n categories: this._idsCache.getModelCategories(modelId),\n alwaysDrawnElements: this.getAlwaysDrawnElements({ modelId }),\n }).pipe(\n mergeMap(async ({ categories, alwaysDrawnElements }) => {\n const alwaysDrawn = this._props.viewport.alwaysDrawn;\n if (alwaysDrawn && alwaysDrawnElements) {\n viewport.setAlwaysDrawn(setDifference(alwaysDrawn, alwaysDrawnElements));\n }\n categories.forEach((categoryId) => {\n this.changeCategoryStateInViewportAccordingToModelVisibility(modelId, categoryId, false);\n });\n await viewport.addViewedModels(modelId);\n }),\n );\n }\n\n private changeCategoryStateInViewportAccordingToModelVisibility(modelId: string, categoryId: string, on: boolean) {\n const viewport = this._props.viewport;\n const isDisplayedInSelector = viewport.view.viewsCategory(categoryId);\n const override =\n on === isDisplayedInSelector\n ? PerModelCategoryVisibility.Override.None\n : on\n ? PerModelCategoryVisibility.Override.Show\n : PerModelCategoryVisibility.Override.Hide;\n viewport.perModelCategoryVisibility.setOverride(modelId, categoryId, override);\n if (override === PerModelCategoryVisibility.Override.None && on) {\n // we took off the override which means the category is displayed in selector, but\n // doesn't mean all its subcategories are displayed - this call ensures that\n viewport.changeCategoryDisplay(categoryId, true, true);\n }\n }\n\n private changeCategoryState(props: ChangeCategoryVisibilityStateProps): Observable<void> {\n const result = defer(() => {\n const viewport = this._props.viewport;\n const { modelId, categoryId, on } = props;\n return concat(\n props.on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY,\n defer(() => {\n this.changeCategoryStateInViewportAccordingToModelVisibility(modelId, categoryId, on);\n return this.clearAlwaysAndNeverDrawnElements(props);\n }),\n );\n });\n return createVisibilityHandlerResult(this, props, result, this._props.overrides?.changeCategoryState);\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 = defer(() => {\n const info = this.getGroupingNodeInfo(node);\n\n const { modelId, categoryId, elementIds } = info;\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({ categoryId, modelId, ignoreTooltip: true });\n const isDisplayedByDefault = categoryVisibility.state === \"visible\";\n return this.queueElementsVisibilityChange(elementIds, on, isDisplayedByDefault);\n }),\n );\n });\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 = defer(() => {\n const { elementIds, on, modelId, categoryId } = props;\n const viewport = this._props.viewport;\n return concat(\n props.on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY,\n defer(() => {\n const categoryVisibility = this.getDefaultCategoryVisibilityStatus({ categoryId, modelId, ignoreTooltip: true });\n const isDisplayedByDefault = categoryVisibility.state === \"visible\";\n return this.queueElementsVisibilityChange(elementIds, on, isDisplayedByDefault);\n }),\n );\n });\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\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 } | { queryProps: AlwaysOrNeverDrawnElementsQueryProps }) & { ignoreTooltip?: boolean }): Observable<VisibilityStatus> {\n const viewport = this._props.viewport;\n if (viewport.isAlwaysDrawnExclusive) {\n if (!viewport?.alwaysDrawn?.size) {\n return of(createVisibilityStatus(\"hidden\", getTooltipOptions(props.tooltips.noElementsInExclusiveAlwaysDrawnList, ignoreTooltip)));\n }\n } else if (!viewport?.neverDrawn?.size && !viewport?.alwaysDrawn?.size) {\n return of(props.defaultStatus());\n }\n\n if (\"elements\" in props) {\n return of(\n this.getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n alwaysDrawn: viewport.alwaysDrawn?.size ? setIntersection(props.elements, viewport.alwaysDrawn) : undefined,\n neverDrawn: viewport.neverDrawn?.size ? setIntersection(props.elements, viewport.neverDrawn) : undefined,\n totalCount: props.elements.size,\n ignoreTooltip,\n }),\n );\n }\n\n const { modelId, categoryId } = props.queryProps;\n const totalCount = categoryId ? this._idsCache.getCategoryElementsCount(modelId, categoryId) : this._idsCache.getModelElementCount(modelId);\n return forkJoin({\n totalCount,\n alwaysDrawn: this.getAlwaysDrawnElements(props.queryProps),\n neverDrawn: this.getNeverDrawnElements(props.queryProps),\n }).pipe(\n map((state) => {\n return this.getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n ...state,\n ignoreTooltip,\n });\n }),\n );\n }\n\n private getAlwaysDrawnElements(props: AlwaysOrNeverDrawnElementsQueryProps) {\n return this._alwaysAndNeverDrawnElements.getElements({ ...props, setType: \"always\" });\n }\n\n private getNeverDrawnElements(props: AlwaysOrNeverDrawnElementsQueryProps) {\n return this._alwaysAndNeverDrawnElements.getElements({ ...props, setType: \"never\" });\n }\n\n private clearAlwaysAndNeverDrawnElements(props: Omit<AlwaysOrNeverDrawnElementsQueryProps, \"setType\">) {\n return forkJoin({\n alwaysDrawn: this.getAlwaysDrawnElements(props),\n neverDrawn: this.getNeverDrawnElements(props),\n }).pipe(\n map(({ alwaysDrawn, neverDrawn }) => {\n const viewport = this._props.viewport;\n if (viewport.alwaysDrawn?.size && alwaysDrawn.size) {\n viewport.setAlwaysDrawn(setDifference(viewport.alwaysDrawn, alwaysDrawn));\n }\n if (viewport.neverDrawn?.size && neverDrawn.size) {\n viewport.setNeverDrawn(setDifference(viewport.neverDrawn, neverDrawn));\n }\n }),\n );\n }\n\n private getGroupingNodeInfo(node: GroupingHierarchyNode) {\n const modelId = ModelsTreeNode.getModelId(node);\n const categoryId = ModelsTreeNode.getCategoryId(node);\n assert(!!modelId && !!categoryId);\n\n const elementIds = new Set(node.groupedInstanceKeys.map((key) => key.id));\n return { modelId, categoryId, elementIds };\n }\n}\n\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: () => VisibilityStatus;\n}\n\nfunction getVisibilityFromTreeNodeChildren(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 getVisibilityStatusFromTreeNodeChildren(\n tooltipMap: { [key in Visibility]: string | undefined },\n ignoreTooltip?: boolean,\n): OperatorFunction<Visibility, VisibilityStatus> {\n return (obs) => {\n return getVisibilityFromTreeNodeChildren(obs).pipe(\n map((visibility) => {\n if (visibility === \"empty\") {\n visibility = \"visible\";\n }\n\n return createVisibilityStatus(visibility, getTooltipOptions(tooltipMap[visibility], ignoreTooltip));\n }),\n );\n };\n}\n\nfunction setDifference<T>(lhs: Set<T>, rhs: Set<T>): Set<T> {\n const result = new Set<T>();\n lhs.forEach((x) => !rhs.has(x) && result.add(x));\n return result;\n}\n\nfunction setIntersection<T>(lhs: Set<T>, rhs: Set<T>): Set<T> {\n const result = new Set<T>();\n lhs.forEach((x) => rhs.has(x) && result.add(x));\n return result;\n}\n\n/**\n * Enables display of all given models. Also enables display of all categories and clears always and\n * never drawn lists in the viewport.\n * @public\n */\nexport async function showAllModels(models: string[], viewport: Viewport) {\n await viewport.addViewedModels(models);\n viewport.clearNeverDrawn();\n viewport.clearAlwaysDrawn();\n await toggleAllCategories(viewport, true);\n}\n\n/**\n * Disables display of all given models.\n * @public\n */\nexport async function hideAllModels(models: string[], viewport: Viewport) {\n viewport.changeModelDisplay(models, false);\n}\n\n/**\n * Inverts display of all given models.\n * @public\n */\nexport async function invertAllModels(models: string[], viewport: Viewport) {\n const notViewedModels: string[] = [];\n const viewedModels: string[] = [];\n models.forEach((modelId) => {\n if (viewport.viewsModel(modelId)) {\n viewedModels.push(modelId);\n } else {\n notViewedModels.push(modelId);\n }\n });\n await viewport.addViewedModels(notViewedModels);\n viewport.changeModelDisplay(viewedModels, false);\n}\n\n/**\n * Based on the value of `enable` argument, either enables or disables display of given models.\n * @public\n */\nexport async function toggleModels(models: string[], enable: boolean, viewport: Viewport) {\n // istanbul ignore if\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 releaseMainThreadOnItemsCount<T>(elementCount: number) {\n return (obs: Observable<T>): Observable<T> => {\n return obs.pipe(\n bufferCount(elementCount),\n concatMap((buff, i) => {\n const out = of(buff);\n if (i === 0 && buff.length < elementCount) {\n return out;\n }\n return out.pipe(delay(0));\n }),\n concatAll(),\n );\n };\n}\n\nfunction getTooltipOptions(key: string | undefined, ignoreTooltip?: boolean) {\n return {\n useTooltip: ignoreTooltip ? (false as const) : key,\n };\n}\n"]}
|
|
@@ -4,6 +4,8 @@ import type { Viewport } from "@itwin/core-frontend";
|
|
|
4
4
|
/** @internal */
|
|
5
5
|
export interface IVisibilityChangeEventListener extends IDisposable {
|
|
6
6
|
onVisibilityChange: BeEvent<() => void>;
|
|
7
|
+
suppressChangeEvents(): void;
|
|
8
|
+
resumeChangeEvents(): void;
|
|
7
9
|
}
|
|
8
10
|
/** @internal */
|
|
9
11
|
export declare function createVisibilityChangeEventListener(viewport: Viewport): IVisibilityChangeEventListener;
|
|
@@ -10,8 +10,9 @@ const core_bentley_1 = require("@itwin/core-bentley");
|
|
|
10
10
|
function createVisibilityChangeEventListener(viewport) {
|
|
11
11
|
const onVisibilityChange = new core_bentley_1.BeEvent();
|
|
12
12
|
let pendingVisibilityChange;
|
|
13
|
+
let suppressChangeEvents = 0;
|
|
13
14
|
const handleVisibilityChange = () => {
|
|
14
|
-
if (pendingVisibilityChange) {
|
|
15
|
+
if (pendingVisibilityChange || suppressChangeEvents > 0) {
|
|
15
16
|
return;
|
|
16
17
|
}
|
|
17
18
|
pendingVisibilityChange = setTimeout(() => {
|
|
@@ -37,6 +38,15 @@ function createVisibilityChangeEventListener(viewport) {
|
|
|
37
38
|
listeners.forEach((x) => x());
|
|
38
39
|
listeners.length = 0;
|
|
39
40
|
},
|
|
41
|
+
suppressChangeEvents: () => {
|
|
42
|
+
suppressChangeEvents++;
|
|
43
|
+
},
|
|
44
|
+
resumeChangeEvents: () => {
|
|
45
|
+
suppressChangeEvents--;
|
|
46
|
+
if (suppressChangeEvents === 0) {
|
|
47
|
+
handleVisibilityChange();
|
|
48
|
+
}
|
|
49
|
+
},
|
|
40
50
|
};
|
|
41
51
|
}
|
|
42
52
|
exports.createVisibilityChangeEventListener = createVisibilityChangeEventListener;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisibilityChangeEventListener.js","sourceRoot":"","sources":["../../../../../../src/components/trees/models-tree/internal/VisibilityChangeEventListener.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAEhG,sDAA8C;
|
|
1
|
+
{"version":3,"file":"VisibilityChangeEventListener.js","sourceRoot":"","sources":["../../../../../../src/components/trees/models-tree/internal/VisibilityChangeEventListener.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAEhG,sDAA8C;AAY9C,gBAAgB;AAChB,SAAgB,mCAAmC,CAAC,QAAkB;IACpE,MAAM,kBAAkB,GAAG,IAAI,sBAAO,EAAc,CAAC;IACrD,IAAI,uBAAkE,CAAC;IACvE,IAAI,oBAAoB,GAAW,CAAC,CAAC;IACrC,MAAM,sBAAsB,GAAG,GAAG,EAAE;QAClC,IAAI,uBAAuB,IAAI,oBAAoB,GAAG,CAAC,EAAE;YACvD,OAAO;SACR;QACD,uBAAuB,GAAG,UAAU,CAAC,GAAG,EAAE;YACxC,kBAAkB,CAAC,UAAU,EAAE,CAAC;YAChC,uBAAuB,GAAG,SAAS,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG;QAChB,QAAQ,CAAC,iCAAiC,CAAC,WAAW,CAAC,sBAAsB,CAAC;QAC9E,QAAQ,CAAC,yBAAyB,CAAC,WAAW,CAAC,sBAAsB,CAAC;QACtE,QAAQ,CAAC,qBAAqB,CAAC,WAAW,CAAC,sBAAsB,CAAC;QAClE,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,sBAAsB,CAAC;QACjE,QAAQ,CAAC,mBAAmB,CAAC,WAAW,CAAC,sBAAsB,CAAC;KACjE,CAAC;IAEF,OAAO;QACL,kBAAkB;QAClB,OAAO,EAAE,GAAG,EAAE;YACZ,qBAAqB;YACrB,IAAI,uBAAuB,EAAE;gBAC3B,YAAY,CAAC,uBAAuB,CAAC,CAAC;gBACtC,uBAAuB,GAAG,SAAS,CAAC;aACrC;YACD,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9B,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACvB,CAAC;QACD,oBAAoB,EAAE,GAAG,EAAE;YACzB,oBAAoB,EAAE,CAAC;QACzB,CAAC;QACD,kBAAkB,EAAE,GAAG,EAAE;YACvB,oBAAoB,EAAE,CAAC;YACvB,IAAI,oBAAoB,KAAK,CAAC,EAAE;gBAC9B,sBAAsB,EAAE,CAAC;aAC1B;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AA3CD,kFA2CC","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 { BeEvent } from \"@itwin/core-bentley\";\n\nimport type { IDisposable } from \"@itwin/core-bentley\";\nimport type { Viewport } from \"@itwin/core-frontend\";\n\n/** @internal */\nexport interface IVisibilityChangeEventListener extends IDisposable {\n onVisibilityChange: BeEvent<() => void>;\n suppressChangeEvents(): void;\n resumeChangeEvents(): void;\n}\n\n/** @internal */\nexport function createVisibilityChangeEventListener(viewport: Viewport): IVisibilityChangeEventListener {\n const onVisibilityChange = new BeEvent<() => void>();\n let pendingVisibilityChange: undefined | ReturnType<typeof setTimeout>;\n let suppressChangeEvents: number = 0;\n const handleVisibilityChange = () => {\n if (pendingVisibilityChange || suppressChangeEvents > 0) {\n return;\n }\n pendingVisibilityChange = setTimeout(() => {\n onVisibilityChange.raiseEvent();\n pendingVisibilityChange = undefined;\n });\n };\n\n const listeners = [\n viewport.onViewedCategoriesPerModelChanged.addListener(handleVisibilityChange),\n viewport.onViewedCategoriesChanged.addListener(handleVisibilityChange),\n viewport.onViewedModelsChanged.addListener(handleVisibilityChange),\n viewport.onAlwaysDrawnChanged.addListener(handleVisibilityChange),\n viewport.onNeverDrawnChanged.addListener(handleVisibilityChange),\n ];\n\n return {\n onVisibilityChange,\n dispose: () => {\n // istanbul ignore if\n if (pendingVisibilityChange) {\n clearTimeout(pendingVisibilityChange);\n pendingVisibilityChange = undefined;\n }\n listeners.forEach((x) => x());\n listeners.length = 0;\n },\n suppressChangeEvents: () => {\n suppressChangeEvents++;\n },\n resumeChangeEvents: () => {\n suppressChangeEvents--;\n if (suppressChangeEvents === 0) {\n handleVisibilityChange();\n }\n },\n };\n}\n"]}
|
|
@@ -49,7 +49,7 @@ function HeaderButtons(props) {
|
|
|
49
49
|
const className = classnames("button-container", props.contracted && "contracted");
|
|
50
50
|
return (_jsx(ButtonGroup, { className: className, overflowButton: (overflowStart) => (_jsx(DropdownMenu, { menuItems: () => Children.toArray(props.children)
|
|
51
51
|
.slice(overflowStart)
|
|
52
|
-
.map((btn, index) => (_jsx("li", { className: "dropdown-item", role: "menuitem", children: btn }, index))), className: "tree-header-button-dropdown-container", children: _jsx(IconButton, {
|
|
52
|
+
.map((btn, index) => (_jsx("li", { className: "dropdown-item", role: "menuitem", children: btn }, index))), className: "tree-header-button-dropdown-container", children: _jsx(IconButton, { label: TreeWidget.translate("header.dropdownMore"), styleType: "borderless", size: props.size, children: _jsx(SvgMore, {}) }) })), children: props.children }));
|
|
53
53
|
}
|
|
54
54
|
function SearchResultStepper(props) {
|
|
55
55
|
const { selectedIndex = 1, total, onStep } = props;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeHeader.js","sourceRoot":"","sources":["../../../../src/components/tree-header/TreeHeader.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 \"./TreeHeader.scss\";\nimport classnames from \"classnames\";\nimport { Children, useEffect, useRef, useState } from \"react\";\nimport { SvgCaretDownSmall, SvgCaretUpSmall, SvgMore } from \"@itwin/itwinui-icons-react\";\nimport { ButtonGroup, Divider, DropdownMenu, IconButton, SearchBox } from \"@itwin/itwinui-react\";\nimport { TreeWidget } from \"../../TreeWidget\";\nimport { useFocusedInstancesContext } from \"../trees/common/FocusedInstancesContext\";\n\nimport type { PropsWithChildren } from \"react\";\nimport type { Viewport } from \"@itwin/core-frontend\";\n\n/** @public */\nexport interface TreeHeaderButtonProps {\n viewport: Viewport;\n density?: \"default\" | \"enlarged\";\n onFeatureUsed?: (feature: string) => void;\n}\n\n/** @beta */\nexport interface TreeFilteringProps {\n /** Filtering is cleared after everything's loaded */\n onFilterStart: (newFilter: string) => void;\n /** listens for onClick event for Clear (x) icon */\n onFilterClear: () => void;\n /** Total number of results/entries */\n resultCount?: number;\n /** Current selected result index */\n selectedIndex?: number;\n /** Callback to currently selected result/entry change */\n onSelectedChanged?: (index: number) => void;\n /** Should the search box be disabled */\n isDisabled?: boolean;\n}\n\ninterface TreeHeaderProps {\n filteringProps?: TreeFilteringProps;\n /** Modifies the density of tree header. `enlarged` header contains larger content */\n density?: \"default\" | \"enlarged\";\n className?: string;\n}\n\nexport function TreeHeader(props: PropsWithChildren<TreeHeaderProps>) {\n const { filteringProps, density, className, children } = props;\n const [isSearchOpen, setIsSearchOpen] = useState<boolean>(false);\n const { enabled: instanceFocusEnabled } = useFocusedInstancesContext();\n const size = density === \"enlarged\" ? \"large\" : \"small\";\n\n useEffect(() => {\n // istanbul ignore if\n if (filteringProps?.isDisabled) {\n setIsSearchOpen(false);\n }\n }, [filteringProps?.isDisabled]);\n\n return (\n <div className={classnames(\"tree-widget-tree-header\", className)}>\n <HeaderButtons contracted={isSearchOpen} size={size}>\n {children}\n </HeaderButtons>\n {filteringProps ? (\n <DebouncedSearchBox\n isOpened={isSearchOpen}\n onOpen={() => setIsSearchOpen(true)}\n onClose={() => setIsSearchOpen(false)}\n onChange={(value) => (value ? filteringProps.onFilterStart(value) : filteringProps.onFilterClear())}\n delay={500}\n selectedResultIndex={filteringProps.selectedIndex}\n resultCount={filteringProps.resultCount}\n onSelectedResultChanged={(index) => filteringProps.onSelectedChanged?.(index)}\n size={size}\n isDisabled={instanceFocusEnabled || props.filteringProps?.isDisabled}\n />\n ) : null}\n </div>\n );\n}\n\ninterface DebouncedSearchBoxProps {\n isOpened: boolean;\n onOpen: () => void;\n onClose: () => void;\n onChange: (value: string) => void;\n delay: number;\n selectedResultIndex?: number;\n resultCount?: number;\n onSelectedResultChanged: (index: number) => void;\n size: \"large\" | \"small\";\n isDisabled?: boolean;\n}\n\nfunction DebouncedSearchBox({\n isOpened,\n selectedResultIndex,\n resultCount,\n onSelectedResultChanged,\n onChange,\n onOpen,\n onClose,\n delay,\n size,\n isDisabled,\n}: DebouncedSearchBoxProps) {\n const [inputValue, setInputValue] = useState<string>(\"\");\n const onChangeRef = useRef(onChange);\n // save latest `onChange` reference into `useRef` to avoid restarting timeout when `onChange` reference changes.\n onChangeRef.current = onChange;\n\n useEffect(() => {\n if (!inputValue) {\n onChangeRef.current(\"\");\n return;\n }\n\n const timeoutId = setTimeout(() => {\n onChangeRef.current(inputValue);\n }, delay);\n\n return () => {\n clearTimeout(timeoutId);\n };\n }, [inputValue, delay]);\n\n return (\n <SearchBox\n expandable\n isExpanded={isOpened}\n onExpand={onOpen}\n onCollapse={onClose}\n size={size}\n className={classnames(\"tree-widget-search-box\", !isOpened && \"contracted\")}\n isDisabled={isDisabled}\n >\n <SearchBox.CollapsedState>\n <SearchBox.ExpandButton\n title={TreeWidget.translate(\"header.searchBox.searchForSomething\")}\n aria-label={TreeWidget.translate(\"header.searchBox.open\")}\n size={size}\n styleType=\"borderless\"\n />\n </SearchBox.CollapsedState>\n <SearchBox.ExpandedState>\n <SearchBox.Input placeholder={TreeWidget.translate(\"header.searchBox.search\")} onChange={(e) => setInputValue(e.currentTarget.value)} />\n <SearchResultStepper selectedIndex={selectedResultIndex} total={resultCount} onStep={onSelectedResultChanged} size={size} />\n <SearchBox.CollapseButton\n onClick={() => {\n setInputValue(\"\");\n onClose();\n }}\n size={size}\n aria-label={TreeWidget.translate(\"header.searchBox.close\")}\n />\n </SearchBox.ExpandedState>\n </SearchBox>\n );\n}\n\ninterface HeaderButtonsProps {\n contracted: boolean;\n size: \"large\" | \"small\";\n}\n\nfunction HeaderButtons(props: PropsWithChildren<HeaderButtonsProps>) {\n const className = classnames(\"button-container\", props.contracted && \"contracted\");\n\n return (\n <ButtonGroup\n className={className}\n overflowButton={(overflowStart) => (\n <DropdownMenu\n menuItems={() =>\n Children.toArray(props.children)\n .slice(overflowStart)\n .map((btn, index) => (\n <li key={index} className=\"dropdown-item\" role=\"menuitem\">\n {btn}\n </li>\n ))\n }\n className=\"tree-header-button-dropdown-container\"\n >\n <IconButton title={TreeWidget.translate(\"header.dropdownMore\")} styleType=\"borderless\" size={props.size}>\n <SvgMore />\n </IconButton>\n </DropdownMenu>\n )}\n >\n {props.children}\n </ButtonGroup>\n );\n}\n\ninterface SearchResultStepperProps {\n total?: number;\n onStep: (newIndex: number) => void;\n selectedIndex?: number;\n size: \"large\" | \"small\";\n}\n\nfunction SearchResultStepper(props: SearchResultStepperProps) {\n const { selectedIndex = 1, total, onStep } = props;\n if (!total) {\n return null;\n }\n\n return (\n <>\n <span className=\"searchbox-stepping-count\">{`${selectedIndex}/${total}`}</span>\n <Divider orientation=\"vertical\" />\n <SearchBox.Button\n title={TreeWidget.translate(\"header.searchBox.previous\")}\n size={props.size}\n onClick={() => {\n if (selectedIndex > 1) {\n onStep(selectedIndex - 1);\n }\n }}\n >\n <SvgCaretUpSmall />\n </SearchBox.Button>\n <SearchBox.Button\n title={TreeWidget.translate(\"header.searchBox.next\")}\n size={props.size}\n onClick={() => {\n if (selectedIndex < total) {\n onStep(selectedIndex + 1);\n }\n }}\n >\n <SvgCaretDownSmall />\n </SearchBox.Button>\n </>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"TreeHeader.js","sourceRoot":"","sources":["../../../../src/components/tree-header/TreeHeader.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 \"./TreeHeader.scss\";\nimport classnames from \"classnames\";\nimport { Children, useEffect, useRef, useState } from \"react\";\nimport { SvgCaretDownSmall, SvgCaretUpSmall, SvgMore } from \"@itwin/itwinui-icons-react\";\nimport { ButtonGroup, Divider, DropdownMenu, IconButton, SearchBox } from \"@itwin/itwinui-react\";\nimport { TreeWidget } from \"../../TreeWidget\";\nimport { useFocusedInstancesContext } from \"../trees/common/FocusedInstancesContext\";\n\nimport type { PropsWithChildren } from \"react\";\nimport type { Viewport } from \"@itwin/core-frontend\";\n\n/** @public */\nexport interface TreeHeaderButtonProps {\n viewport: Viewport;\n density?: \"default\" | \"enlarged\";\n onFeatureUsed?: (feature: string) => void;\n}\n\n/** @beta */\nexport interface TreeFilteringProps {\n /** Filtering is cleared after everything's loaded */\n onFilterStart: (newFilter: string) => void;\n /** listens for onClick event for Clear (x) icon */\n onFilterClear: () => void;\n /** Total number of results/entries */\n resultCount?: number;\n /** Current selected result index */\n selectedIndex?: number;\n /** Callback to currently selected result/entry change */\n onSelectedChanged?: (index: number) => void;\n /** Should the search box be disabled */\n isDisabled?: boolean;\n}\n\ninterface TreeHeaderProps {\n filteringProps?: TreeFilteringProps;\n /** Modifies the density of tree header. `enlarged` header contains larger content */\n density?: \"default\" | \"enlarged\";\n className?: string;\n}\n\nexport function TreeHeader(props: PropsWithChildren<TreeHeaderProps>) {\n const { filteringProps, density, className, children } = props;\n const [isSearchOpen, setIsSearchOpen] = useState<boolean>(false);\n const { enabled: instanceFocusEnabled } = useFocusedInstancesContext();\n const size = density === \"enlarged\" ? \"large\" : \"small\";\n\n useEffect(() => {\n // istanbul ignore if\n if (filteringProps?.isDisabled) {\n setIsSearchOpen(false);\n }\n }, [filteringProps?.isDisabled]);\n\n return (\n <div className={classnames(\"tree-widget-tree-header\", className)}>\n <HeaderButtons contracted={isSearchOpen} size={size}>\n {children}\n </HeaderButtons>\n {filteringProps ? (\n <DebouncedSearchBox\n isOpened={isSearchOpen}\n onOpen={() => setIsSearchOpen(true)}\n onClose={() => setIsSearchOpen(false)}\n onChange={(value) => (value ? filteringProps.onFilterStart(value) : filteringProps.onFilterClear())}\n delay={500}\n selectedResultIndex={filteringProps.selectedIndex}\n resultCount={filteringProps.resultCount}\n onSelectedResultChanged={(index) => filteringProps.onSelectedChanged?.(index)}\n size={size}\n isDisabled={instanceFocusEnabled || props.filteringProps?.isDisabled}\n />\n ) : null}\n </div>\n );\n}\n\ninterface DebouncedSearchBoxProps {\n isOpened: boolean;\n onOpen: () => void;\n onClose: () => void;\n onChange: (value: string) => void;\n delay: number;\n selectedResultIndex?: number;\n resultCount?: number;\n onSelectedResultChanged: (index: number) => void;\n size: \"large\" | \"small\";\n isDisabled?: boolean;\n}\n\nfunction DebouncedSearchBox({\n isOpened,\n selectedResultIndex,\n resultCount,\n onSelectedResultChanged,\n onChange,\n onOpen,\n onClose,\n delay,\n size,\n isDisabled,\n}: DebouncedSearchBoxProps) {\n const [inputValue, setInputValue] = useState<string>(\"\");\n const onChangeRef = useRef(onChange);\n // save latest `onChange` reference into `useRef` to avoid restarting timeout when `onChange` reference changes.\n onChangeRef.current = onChange;\n\n useEffect(() => {\n if (!inputValue) {\n onChangeRef.current(\"\");\n return;\n }\n\n const timeoutId = setTimeout(() => {\n onChangeRef.current(inputValue);\n }, delay);\n\n return () => {\n clearTimeout(timeoutId);\n };\n }, [inputValue, delay]);\n\n return (\n <SearchBox\n expandable\n isExpanded={isOpened}\n onExpand={onOpen}\n onCollapse={onClose}\n size={size}\n className={classnames(\"tree-widget-search-box\", !isOpened && \"contracted\")}\n isDisabled={isDisabled}\n >\n <SearchBox.CollapsedState>\n <SearchBox.ExpandButton\n title={TreeWidget.translate(\"header.searchBox.searchForSomething\")}\n aria-label={TreeWidget.translate(\"header.searchBox.open\")}\n size={size}\n styleType=\"borderless\"\n />\n </SearchBox.CollapsedState>\n <SearchBox.ExpandedState>\n <SearchBox.Input placeholder={TreeWidget.translate(\"header.searchBox.search\")} onChange={(e) => setInputValue(e.currentTarget.value)} />\n <SearchResultStepper selectedIndex={selectedResultIndex} total={resultCount} onStep={onSelectedResultChanged} size={size} />\n <SearchBox.CollapseButton\n onClick={() => {\n setInputValue(\"\");\n onClose();\n }}\n size={size}\n aria-label={TreeWidget.translate(\"header.searchBox.close\")}\n />\n </SearchBox.ExpandedState>\n </SearchBox>\n );\n}\n\ninterface HeaderButtonsProps {\n contracted: boolean;\n size: \"large\" | \"small\";\n}\n\nfunction HeaderButtons(props: PropsWithChildren<HeaderButtonsProps>) {\n const className = classnames(\"button-container\", props.contracted && \"contracted\");\n\n return (\n <ButtonGroup\n className={className}\n overflowButton={(overflowStart) => (\n <DropdownMenu\n menuItems={() =>\n Children.toArray(props.children)\n .slice(overflowStart)\n .map((btn, index) => (\n <li key={index} className=\"dropdown-item\" role=\"menuitem\">\n {btn}\n </li>\n ))\n }\n className=\"tree-header-button-dropdown-container\"\n >\n <IconButton label={TreeWidget.translate(\"header.dropdownMore\")} styleType=\"borderless\" size={props.size}>\n <SvgMore />\n </IconButton>\n </DropdownMenu>\n )}\n >\n {props.children}\n </ButtonGroup>\n );\n}\n\ninterface SearchResultStepperProps {\n total?: number;\n onStep: (newIndex: number) => void;\n selectedIndex?: number;\n size: \"large\" | \"small\";\n}\n\nfunction SearchResultStepper(props: SearchResultStepperProps) {\n const { selectedIndex = 1, total, onStep } = props;\n if (!total) {\n return null;\n }\n\n return (\n <>\n <span className=\"searchbox-stepping-count\">{`${selectedIndex}/${total}`}</span>\n <Divider orientation=\"vertical\" />\n <SearchBox.Button\n title={TreeWidget.translate(\"header.searchBox.previous\")}\n size={props.size}\n onClick={() => {\n if (selectedIndex > 1) {\n onStep(selectedIndex - 1);\n }\n }}\n >\n <SvgCaretUpSmall />\n </SearchBox.Button>\n <SearchBox.Button\n title={TreeWidget.translate(\"header.searchBox.next\")}\n size={props.size}\n onClick={() => {\n if (selectedIndex < total) {\n onStep(selectedIndex + 1);\n }\n }}\n >\n <SvgCaretDownSmall />\n </SearchBox.Button>\n </>\n );\n}\n"]}
|
|
@@ -40,21 +40,21 @@ export function useCategoriesTreeButtonProps({ viewport }) {
|
|
|
40
40
|
}
|
|
41
41
|
/** @public */
|
|
42
42
|
export function ShowAllButton(props) {
|
|
43
|
-
return (_jsx(IconButton, { size: props.density === "enlarged" ? "large" : "small", styleType: "borderless",
|
|
43
|
+
return (_jsx(IconButton, { size: props.density === "enlarged" ? "large" : "small", styleType: "borderless", label: TreeWidget.translate("categoriesTree.buttons.showAll.tooltip"), onClick: () => {
|
|
44
44
|
props.onFeatureUsed?.(`categories-tree-showall`);
|
|
45
45
|
void showAllCategories(props.categories.map((category) => category.categoryId), props.viewport);
|
|
46
46
|
}, children: _jsx(SvgVisibilityShow, {}) }));
|
|
47
47
|
}
|
|
48
48
|
/** @public */
|
|
49
49
|
export function HideAllButton(props) {
|
|
50
|
-
return (_jsx(IconButton, { size: props.density === "enlarged" ? "large" : "small", styleType: "borderless",
|
|
50
|
+
return (_jsx(IconButton, { size: props.density === "enlarged" ? "large" : "small", styleType: "borderless", label: TreeWidget.translate("categoriesTree.buttons.hideAll.tooltip"), onClick: () => {
|
|
51
51
|
props.onFeatureUsed?.(`categories-tree-hideall`);
|
|
52
52
|
void hideAllCategories(props.categories.map((category) => category.categoryId), props.viewport);
|
|
53
53
|
}, children: _jsx(SvgVisibilityHide, {}) }));
|
|
54
54
|
}
|
|
55
55
|
/** @public */
|
|
56
56
|
export function InvertAllButton(props) {
|
|
57
|
-
return (_jsx(IconButton, {
|
|
57
|
+
return (_jsx(IconButton, { label: TreeWidget.translate("categoriesTree.buttons.invert.tooltip"), size: props.density === "enlarged" ? "large" : "small", styleType: "borderless", onClick: () => {
|
|
58
58
|
props.onFeatureUsed?.(`categories-tree-invert`);
|
|
59
59
|
void invertAllCategories(props.categories, props.viewport);
|
|
60
60
|
}, children: _jsx(SvgVisibilityHalf, {}) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CategoriesTreeButtons.js","sourceRoot":"","sources":["../../../../../src/components/trees/categories-tree/CategoriesTreeButtons.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 { useMemo, useState } from \"react\";\nimport { useAsyncValue } from \"@itwin/components-react\";\nimport { SvgVisibilityHalf, SvgVisibilityHide, SvgVisibilityShow } from \"@itwin/itwinui-icons-react\";\nimport { IconButton } from \"@itwin/itwinui-react\";\nimport { TreeWidget } from \"../../../TreeWidget\";\nimport { hideAllCategories, invertAllCategories, loadCategoriesFromViewport, showAllCategories } from \"../common/CategoriesVisibilityUtils\";\n\nimport type { CategoryInfo } from \"../common/CategoriesVisibilityUtils\";\nimport type { TreeHeaderButtonProps } from \"../../tree-header/TreeHeader\";\nimport type { Viewport } from \"@itwin/core-frontend\";\n\n/**\n * Props that get passed to `CategoriesTreeComponent` header button renderer.\n * @see CategoriesTreeComponentProps.headerButtons\n * @public\n */\nexport interface CategoriesTreeHeaderButtonProps extends TreeHeaderButtonProps {\n /** A list of categories available in the iModel */\n categories: CategoryInfo[];\n}\n\n/**\n * Custom hook that creates props required to render `CategoriesTreeComponent` header button.\n *\n * Example:\n * ```tsx\n * const { buttonProps, onCategoriesFiltered } = useCategoriesTreeButtonProps({ viewport });\n * <TreeWithHeader\n * buttons={[\n * <CategoriesTreeComponent.ShowAllButton {...buttonProps} />,\n * <CategoriesTreeComponent.HideAllButton {...buttonProps} />,\n * ]}\n * >\n * <CategoriesTree {...treeProps} onCategoriesFiltered={onCategoriesFiltered} />\n * </TreeWithHeader>\n * ```\n *\n * @public\n */\nexport function useCategoriesTreeButtonProps({ viewport }: { viewport: Viewport }): {\n buttonProps: Pick<CategoriesTreeHeaderButtonProps, \"categories\" | \"viewport\">;\n onCategoriesFiltered: (categories: CategoryInfo[] | undefined) => void;\n} {\n const [filteredCategories, setFilteredCategories] = useState<CategoryInfo[] | undefined>();\n const categories = useCategories(viewport);\n return {\n buttonProps: {\n viewport,\n categories: filteredCategories ?? categories,\n },\n onCategoriesFiltered: setFilteredCategories,\n };\n}\n\n/** @public */\nexport type CategoriesTreeHeaderButtonType = (props: CategoriesTreeHeaderButtonProps) => JSX.Element | null;\n\n/** @public */\nexport function ShowAllButton(props: CategoriesTreeHeaderButtonProps) {\n return (\n <IconButton\n size={props.density === \"enlarged\" ? \"large\" : \"small\"}\n styleType=\"borderless\"\n
|
|
1
|
+
{"version":3,"file":"CategoriesTreeButtons.js","sourceRoot":"","sources":["../../../../../src/components/trees/categories-tree/CategoriesTreeButtons.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 { useMemo, useState } from \"react\";\nimport { useAsyncValue } from \"@itwin/components-react\";\nimport { SvgVisibilityHalf, SvgVisibilityHide, SvgVisibilityShow } from \"@itwin/itwinui-icons-react\";\nimport { IconButton } from \"@itwin/itwinui-react\";\nimport { TreeWidget } from \"../../../TreeWidget\";\nimport { hideAllCategories, invertAllCategories, loadCategoriesFromViewport, showAllCategories } from \"../common/CategoriesVisibilityUtils\";\n\nimport type { CategoryInfo } from \"../common/CategoriesVisibilityUtils\";\nimport type { TreeHeaderButtonProps } from \"../../tree-header/TreeHeader\";\nimport type { Viewport } from \"@itwin/core-frontend\";\n\n/**\n * Props that get passed to `CategoriesTreeComponent` header button renderer.\n * @see CategoriesTreeComponentProps.headerButtons\n * @public\n */\nexport interface CategoriesTreeHeaderButtonProps extends TreeHeaderButtonProps {\n /** A list of categories available in the iModel */\n categories: CategoryInfo[];\n}\n\n/**\n * Custom hook that creates props required to render `CategoriesTreeComponent` header button.\n *\n * Example:\n * ```tsx\n * const { buttonProps, onCategoriesFiltered } = useCategoriesTreeButtonProps({ viewport });\n * <TreeWithHeader\n * buttons={[\n * <CategoriesTreeComponent.ShowAllButton {...buttonProps} />,\n * <CategoriesTreeComponent.HideAllButton {...buttonProps} />,\n * ]}\n * >\n * <CategoriesTree {...treeProps} onCategoriesFiltered={onCategoriesFiltered} />\n * </TreeWithHeader>\n * ```\n *\n * @public\n */\nexport function useCategoriesTreeButtonProps({ viewport }: { viewport: Viewport }): {\n buttonProps: Pick<CategoriesTreeHeaderButtonProps, \"categories\" | \"viewport\">;\n onCategoriesFiltered: (categories: CategoryInfo[] | undefined) => void;\n} {\n const [filteredCategories, setFilteredCategories] = useState<CategoryInfo[] | undefined>();\n const categories = useCategories(viewport);\n return {\n buttonProps: {\n viewport,\n categories: filteredCategories ?? categories,\n },\n onCategoriesFiltered: setFilteredCategories,\n };\n}\n\n/** @public */\nexport type CategoriesTreeHeaderButtonType = (props: CategoriesTreeHeaderButtonProps) => JSX.Element | null;\n\n/** @public */\nexport function ShowAllButton(props: CategoriesTreeHeaderButtonProps) {\n return (\n <IconButton\n size={props.density === \"enlarged\" ? \"large\" : \"small\"}\n styleType=\"borderless\"\n label={TreeWidget.translate(\"categoriesTree.buttons.showAll.tooltip\")}\n onClick={() => {\n props.onFeatureUsed?.(`categories-tree-showall`);\n void showAllCategories(\n props.categories.map((category) => category.categoryId),\n props.viewport,\n );\n }}\n >\n <SvgVisibilityShow />\n </IconButton>\n );\n}\n\n/** @public */\nexport function HideAllButton(props: CategoriesTreeHeaderButtonProps) {\n return (\n <IconButton\n size={props.density === \"enlarged\" ? \"large\" : \"small\"}\n styleType=\"borderless\"\n label={TreeWidget.translate(\"categoriesTree.buttons.hideAll.tooltip\")}\n onClick={() => {\n props.onFeatureUsed?.(`categories-tree-hideall`);\n void hideAllCategories(\n props.categories.map((category) => category.categoryId),\n props.viewport,\n );\n }}\n >\n <SvgVisibilityHide />\n </IconButton>\n );\n}\n\n/** @public */\nexport function InvertAllButton(props: CategoriesTreeHeaderButtonProps) {\n return (\n <IconButton\n label={TreeWidget.translate(\"categoriesTree.buttons.invert.tooltip\")}\n size={props.density === \"enlarged\" ? \"large\" : \"small\"}\n styleType=\"borderless\"\n onClick={() => {\n props.onFeatureUsed?.(`categories-tree-invert`);\n void invertAllCategories(props.categories, props.viewport);\n }}\n >\n <SvgVisibilityHalf />\n </IconButton>\n );\n}\n\nconst EMPTY_CATEGORIES_ARRAY: CategoryInfo[] = [];\n\nexport function useCategories(viewport: Viewport) {\n const categoriesPromise = useMemo(async () => loadCategoriesFromViewport(viewport), [viewport]);\n return useAsyncValue(categoriesPromise) ?? EMPTY_CATEGORIES_ARRAY;\n}\n"]}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { BeEvent } from "@itwin/core-bentley";
|
|
6
6
|
import { HierarchyNode } from "@itwin/presentation-hierarchies";
|
|
7
7
|
import { enableCategoryDisplay, enableSubCategoryDisplay } from "../common/CategoriesVisibilityUtils";
|
|
8
|
+
import { createVisibilityStatus } from "../common/Tooltip";
|
|
8
9
|
/** @internal */
|
|
9
10
|
export class CategoriesVisibilityHandler {
|
|
10
11
|
constructor(props) {
|
|
@@ -31,7 +32,7 @@ export class CategoriesVisibilityHandler {
|
|
|
31
32
|
if (!HierarchyNode.isInstancesNode(node)) {
|
|
32
33
|
return { state: "hidden", isDisabled: true };
|
|
33
34
|
}
|
|
34
|
-
return
|
|
35
|
+
return createVisibilityStatus(node.parentKeys.length ? this.getSubCategoryVisibility(node) : this.getCategoryVisibility(node));
|
|
35
36
|
}
|
|
36
37
|
async changeVisibility(node, on) {
|
|
37
38
|
if (!HierarchyNode.isInstancesNode(node)) {
|