@itwin/tree-widget-react 3.17.4 → 3.17.6
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 +19 -2
- package/lib/cjs/tree-widget-react/TreeWidget.js +1 -0
- package/lib/cjs/tree-widget-react/TreeWidget.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/SelectableTree.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/TreeSelector.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/TreeWidgetUiItemsProvider.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/tree-header/TreeHeader.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/tree-header/TreeHeader.js +4 -4
- package/lib/cjs/tree-widget-react/components/tree-header/TreeHeader.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/tree-header/TreeWithHeader.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTree.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.d.ts +5 -4
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.d.ts +1 -5
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.d.ts +1 -0
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +3 -0
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js +11 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/FocusedInstancesContext.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/Rxjs.js +1 -0
- package/lib/cjs/tree-widget-react/components/trees/common/Rxjs.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/UseHierarchyFiltering.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/UseHierarchyVisibility.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/UseTelemetryContext.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/Delayed.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/ProgressOverlay.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/Tree.d.ts +2 -2
- package/lib/cjs/tree-widget-react/components/trees/common/components/TreeNodeCheckbox.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/TreeRenderer.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/VisibilityTree.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.d.ts +1 -5
- package/lib/cjs/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.d.ts +1 -5
- package/lib/cjs/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js +1 -0
- package/lib/cjs/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTree.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.d.ts +8 -7
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.d.ts +1 -5
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +13 -16
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/UseModelsTree.js +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/UseModelsTree.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/Utils.d.ts +3 -3
- package/lib/cjs/tree-widget-react/components/trees/models-tree/Utils.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +1 -0
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +7 -0
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -1
- package/lib/esm/tree-widget-react/TreeWidget.js +2 -1
- package/lib/esm/tree-widget-react/TreeWidget.js.map +1 -1
- package/lib/esm/tree-widget-react/components/SelectableTree.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/TreeSelector.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/TreeHeader.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/TreeHeader.js +4 -4
- package/lib/esm/tree-widget-react/components/tree-header/TreeHeader.js.map +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/TreeWithHeader.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.d.ts +5 -4
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.d.ts +1 -5
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +3 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js +12 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/FocusedInstancesContext.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/Rxjs.js +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/Rxjs.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyFiltering.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseTelemetryContext.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/Delayed.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeCheckbox.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTree.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.d.ts +1 -5
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.d.ts +1 -5
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js +1 -0
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.d.ts +8 -7
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.d.ts +1 -5
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +13 -16
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.d.ts +3 -3
- package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +7 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -1
- package/package.json +78 -87
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CategoriesVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.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 { EMPTY, filter, firstValueFrom, forkJoin, from, map, merge, mergeMap, of, toArray } from \"rxjs\";\nimport { BeEvent, Id64 } from \"@itwin/core-bentley\";\nimport { PerModelCategoryVisibility } from \"@itwin/core-frontend\";\nimport { HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { enableCategoryDisplay, enableSubCategoryDisplay } from \"../../common/CategoriesVisibilityUtils.js\";\nimport { mergeVisibilities, releaseMainThreadOnItemsCount } from \"../../common/internal/Utils.js\";\nimport { toVoidPromise } from \"../../common/Rxjs.js\";\nimport { createVisibilityStatus } from \"../../common/Tooltip.js\";\nimport { CategoriesTreeNode } from \"./CategoriesTreeNode.js\";\n\nimport type { Observable } from \"rxjs\";\nimport type { Id64Arg, Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport type { Viewport } from \"@itwin/core-frontend\";\nimport type { Visibility } from \"../../common/Tooltip.js\";\nimport type { HierarchyVisibilityHandler, VisibilityStatus } from \"../../common/UseHierarchyVisibility.js\";\nimport type { CategoriesTreeHierarchyConfiguration } from \"../CategoriesTreeDefinition.js\";\nimport type { CategoriesTreeIdsCache } from \"./CategoriesTreeIdsCache.js\";\n\n/** @internal */\nexport interface CategoriesVisibilityHandlerProps {\n viewport: Viewport;\n idsCache: CategoriesTreeIdsCache;\n hierarchyConfig: CategoriesTreeHierarchyConfiguration;\n}\n\n/** @internal */\nexport class CategoriesVisibilityHandler implements HierarchyVisibilityHandler {\n #pendingVisibilityChange: any;\n #viewport: Viewport;\n #idsCache: CategoriesTreeIdsCache;\n #hierarchyConfig: CategoriesTreeHierarchyConfiguration;\n\n constructor(props: CategoriesVisibilityHandlerProps) {\n this.#idsCache = props.idsCache;\n this.#viewport = props.viewport;\n this.#viewport.onDisplayStyleChanged.addListener(this.onDisplayStyleChanged);\n this.#viewport.onViewedCategoriesChanged.addListener(this.onViewedCategoriesChanged);\n this.#viewport.onViewedCategoriesPerModelChanged.addListener(this.onViewedCategoriesPerModelChanged);\n this.#viewport.onViewedModelsChanged.addListener(this.onViewedModelsChanged);\n this.#hierarchyConfig = props.hierarchyConfig;\n }\n\n public dispose() {\n this[Symbol.dispose]();\n }\n\n public [Symbol.dispose]() {\n this.#viewport.onDisplayStyleChanged.removeListener(this.onDisplayStyleChanged);\n this.#viewport.onViewedCategoriesChanged.removeListener(this.onViewedCategoriesChanged);\n this.#viewport.onViewedCategoriesPerModelChanged.removeListener(this.onViewedCategoriesPerModelChanged);\n this.#viewport.onViewedModelsChanged.removeListener(this.onViewedModelsChanged);\n clearTimeout(this.#pendingVisibilityChange);\n }\n\n public onVisibilityChange = new BeEvent();\n\n /** Returns visibility status of the tree node. */\n public async getVisibilityStatus(node: HierarchyNode): Promise<VisibilityStatus> {\n if (!HierarchyNode.isInstancesNode(node)) {\n return { state: \"hidden\", isDisabled: true };\n }\n\n if (CategoriesTreeNode.isSubCategoryNode(node)) {\n if (!node.extendedData?.categoryId) {\n return { state: \"hidden\", isDisabled: true };\n }\n return createVisibilityStatus(\n await firstValueFrom(this.getSubCategoriesVisibility(CategoriesVisibilityHandler.getInstanceIdsFromHierarchyNode(node), node.extendedData.categoryId)),\n );\n }\n\n if (CategoriesTreeNode.isCategoryNode(node)) {\n return createVisibilityStatus(await firstValueFrom(this.getCategoriesVisibility(CategoriesVisibilityHandler.getInstanceIdsFromHierarchyNode(node))));\n }\n\n if (CategoriesTreeNode.isDefinitionContainerNode(node)) {\n return createVisibilityStatus(await firstValueFrom(this.getDefinitionContainerVisibility(node)));\n }\n\n return { state: \"hidden\", isDisabled: true };\n }\n\n public async changeVisibility(node: HierarchyNode, on: boolean) {\n if (!HierarchyNode.isInstancesNode(node)) {\n return;\n }\n\n if (CategoriesTreeNode.isCategoryNode(node)) {\n return toVoidPromise(this.changeCategoryVisibility(CategoriesVisibilityHandler.getInstanceIdsFromHierarchyNode(node), on));\n }\n\n if (CategoriesTreeNode.isSubCategoryNode(node)) {\n return toVoidPromise(this.changeSubCategoryVisibility(node, on));\n }\n\n if (CategoriesTreeNode.isDefinitionContainerNode(node)) {\n return toVoidPromise(this.changeDefinitionContainerVisibility(node, on));\n }\n }\n\n private getSubCategoriesVisibility(subCategoryIds: Id64Arg, parentCategoryId: Id64String): Observable<Visibility> {\n return this.#idsCache.getCategoriesElementModels(parentCategoryId).pipe(\n mergeMap((modelMap): Observable<{ visibility: \"visible\" | \"hidden\"; isDefault: boolean }> => {\n if (modelMap.size === 0) {\n return of({ visibility: this.#viewport.view.viewsCategory(parentCategoryId) ? \"visible\" : \"hidden\", isDefault: true });\n }\n return from(modelMap.keys()).pipe(\n map((modelId) => {\n if (!this.#viewport.view.viewsModel(modelId)) {\n return { visibility: \"hidden\", isDefault: false };\n }\n const override = this.#viewport.perModelCategoryVisibility.getOverride(modelId, parentCategoryId);\n return override === PerModelCategoryVisibility.Override.Show\n ? { visibility: \"visible\", isDefault: false }\n : override === PerModelCategoryVisibility.Override.Hide\n ? { visibility: \"hidden\", isDefault: false }\n : { visibility: this.#viewport.view.viewsCategory(parentCategoryId) ? \"visible\" : \"hidden\", isDefault: true };\n }),\n );\n }),\n mergeMap(({ visibility, isDefault }) => {\n if (!isDefault || visibility === \"hidden\" || Id64.sizeOf(subCategoryIds) === 0) {\n return of(visibility);\n }\n return from(Id64.iterable(subCategoryIds)).pipe(\n releaseMainThreadOnItemsCount(200),\n map((subCategoryId) => (this.#viewport.isSubCategoryVisible(subCategoryId) ? \"visible\" : \"hidden\")),\n );\n }),\n mergeVisibilities,\n map((visibility) => (visibility === \"empty\" ? \"hidden\" : visibility)),\n );\n }\n\n private getDefinitionContainerVisibility(node: HierarchyNode): Observable<Visibility> {\n return this.#idsCache\n .getAllContainedCategories({\n definitionContainerIds: CategoriesVisibilityHandler.getInstanceIdsFromHierarchyNode(node),\n includeEmptyCategories: this.#hierarchyConfig.showEmptyCategories,\n })\n .pipe(mergeMap((categoryIds) => this.getCategoriesVisibility(categoryIds)));\n }\n\n private getCategoriesVisibility(categoryIds: Id64Arg): Observable<Visibility> {\n return from(categoryIds).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap((categoryId) => forkJoin({ subCategoryIds: this.#idsCache.getSubCategories(categoryId), categoryId: of(categoryId) })),\n mergeMap(({ subCategoryIds, categoryId }) => this.getSubCategoriesVisibility(subCategoryIds, categoryId)),\n mergeVisibilities,\n map((visibility) => {\n return visibility === \"empty\" ? \"hidden\" : visibility;\n }),\n );\n }\n\n private enableCategoriesElementModelsVisibility(categoryIds: Id64Array) {\n return this.#idsCache.getCategoriesElementModels(categoryIds).pipe(\n mergeMap((categoriesModelsMap) => categoriesModelsMap.keys()),\n filter((modelId) => !this.#viewport.view.viewsModel(modelId)),\n toArray(),\n mergeMap(async (hiddenModels) => {\n if (hiddenModels.length > 0) {\n await this.#viewport.addViewedModels(hiddenModels);\n }\n }),\n );\n }\n\n private changeSubCategoryVisibility(node: HierarchyNode, on: boolean) {\n const parentCategoryId = node.extendedData?.categoryId;\n return merge(\n // make sure parent category and models are enabled\n on && parentCategoryId ? this.enableCategoriesElementModelsVisibility([parentCategoryId]) : EMPTY,\n on && parentCategoryId ? this.changeCategoryState([parentCategoryId], true, false) : EMPTY,\n of(\n (() =>\n CategoriesVisibilityHandler.getInstanceIdsFromHierarchyNode(node).forEach((id) => {\n this.changeSubCategoryState(id, on);\n }))(),\n ),\n );\n }\n\n private changeCategoryVisibility(categoryIds: Id64Array, on: boolean) {\n return merge(\n // make sure models are enabled\n on ? this.enableCategoriesElementModelsVisibility(categoryIds) : EMPTY,\n from(categoryIds).pipe(\n mergeMap((categoryId) => this.#idsCache.getSubCategories(categoryId)),\n mergeMap((subCategorySet) => subCategorySet),\n toArray(),\n mergeMap((subCategories) =>\n subCategories.length > 0 ? this.changeCategoryState(categoryIds, on, false, subCategories) : this.changeCategoryState(categoryIds, on, on),\n ),\n ),\n );\n }\n\n private changeDefinitionContainerVisibility(node: HierarchyNode, on: boolean) {\n const definitionContainerId = CategoriesVisibilityHandler.getInstanceIdsFromHierarchyNode(node);\n return this.#idsCache\n .getAllContainedCategories({\n definitionContainerIds: definitionContainerId,\n includeEmptyCategories: this.#hierarchyConfig.showEmptyCategories,\n })\n .pipe(mergeMap((childCategories) => this.changeCategoryVisibility([...childCategories], on)));\n }\n\n private onDisplayStyleChanged = () => {\n this.onVisibilityChangeInternal();\n };\n\n private onViewedCategoriesChanged = () => {\n this.onVisibilityChangeInternal();\n };\n\n private onViewedCategoriesPerModelChanged = () => {\n this.onVisibilityChangeInternal();\n };\n\n private onViewedModelsChanged = () => {\n this.onVisibilityChangeInternal();\n };\n\n private onVisibilityChangeInternal() {\n if (this.#pendingVisibilityChange) {\n return;\n }\n\n this.#pendingVisibilityChange = setTimeout(() => {\n this.onVisibilityChange.raiseEvent();\n this.#pendingVisibilityChange = undefined;\n }, 0);\n }\n\n private static getInstanceIdsFromHierarchyNode(node: HierarchyNode) {\n return HierarchyNode.isInstancesNode(node) ? node.key.instanceKeys.map((instanceKey) => instanceKey.id) : /* istanbul ignore next */ [];\n }\n\n private changeCategoryState(ids: Id64Array, enabled: boolean, enableAllSubCategories: boolean, subCategories?: Id64Arg) {\n return merge(\n from(enableCategoryDisplay(this.#viewport, ids, enabled, enableAllSubCategories)),\n enabled && subCategories\n ? from(Id64.iterable(subCategories)).pipe(\n releaseMainThreadOnItemsCount(100),\n map((subCategoryId) => this.changeSubCategoryState(subCategoryId, true)),\n )\n : EMPTY,\n );\n }\n\n private changeSubCategoryState(key: string, enabled: boolean) {\n enableSubCategoryDisplay(this.#viewport, key, enabled);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"CategoriesVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.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 { EMPTY, firstValueFrom, forkJoin, from, map, merge, mergeMap, of, toArray } from \"rxjs\";\nimport { BeEvent, Id64 } from \"@itwin/core-bentley\";\nimport { PerModelCategoryVisibility } from \"@itwin/core-frontend\";\nimport { HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { enableCategoryDisplay, enableSubCategoryDisplay } from \"../../common/CategoriesVisibilityUtils.js\";\nimport { mergeVisibilities, releaseMainThreadOnItemsCount } from \"../../common/internal/Utils.js\";\nimport { toVoidPromise } from \"../../common/Rxjs.js\";\nimport { createVisibilityStatus } from \"../../common/Tooltip.js\";\nimport { CategoriesTreeNode } from \"./CategoriesTreeNode.js\";\n\nimport type { Observable } from \"rxjs\";\nimport type { Id64Arg, Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport type { Viewport } from \"@itwin/core-frontend\";\nimport type { Visibility } from \"../../common/Tooltip.js\";\nimport type { HierarchyVisibilityHandler, VisibilityStatus } from \"../../common/UseHierarchyVisibility.js\";\nimport type { CategoriesTreeHierarchyConfiguration } from \"../CategoriesTreeDefinition.js\";\nimport type { CategoriesTreeIdsCache } from \"./CategoriesTreeIdsCache.js\";\n\n/** @internal */\nexport interface CategoriesVisibilityHandlerProps {\n viewport: Viewport;\n idsCache: CategoriesTreeIdsCache;\n hierarchyConfig: CategoriesTreeHierarchyConfiguration;\n}\n\n/** @internal */\nexport class CategoriesVisibilityHandler implements HierarchyVisibilityHandler {\n #pendingVisibilityChange: any;\n #viewport: Viewport;\n #idsCache: CategoriesTreeIdsCache;\n #hierarchyConfig: CategoriesTreeHierarchyConfiguration;\n\n constructor(props: CategoriesVisibilityHandlerProps) {\n this.#idsCache = props.idsCache;\n this.#viewport = props.viewport;\n this.#viewport.onDisplayStyleChanged.addListener(this.onDisplayStyleChanged);\n this.#viewport.onViewedCategoriesChanged.addListener(this.onViewedCategoriesChanged);\n this.#viewport.onViewedCategoriesPerModelChanged.addListener(this.onViewedCategoriesPerModelChanged);\n this.#viewport.onViewedModelsChanged.addListener(this.onViewedModelsChanged);\n this.#hierarchyConfig = props.hierarchyConfig;\n }\n\n public dispose() {\n this[Symbol.dispose]();\n }\n\n public [Symbol.dispose]() {\n this.#viewport.onDisplayStyleChanged.removeListener(this.onDisplayStyleChanged);\n this.#viewport.onViewedCategoriesChanged.removeListener(this.onViewedCategoriesChanged);\n this.#viewport.onViewedCategoriesPerModelChanged.removeListener(this.onViewedCategoriesPerModelChanged);\n this.#viewport.onViewedModelsChanged.removeListener(this.onViewedModelsChanged);\n clearTimeout(this.#pendingVisibilityChange);\n }\n\n public onVisibilityChange = new BeEvent();\n\n /** Returns visibility status of the tree node. */\n public async getVisibilityStatus(node: HierarchyNode): Promise<VisibilityStatus> {\n if (!HierarchyNode.isInstancesNode(node)) {\n return { state: \"hidden\", isDisabled: true };\n }\n\n if (CategoriesTreeNode.isSubCategoryNode(node)) {\n if (!node.extendedData?.categoryId) {\n return { state: \"hidden\", isDisabled: true };\n }\n return createVisibilityStatus(\n await firstValueFrom(this.getSubCategoriesVisibility(CategoriesVisibilityHandler.getInstanceIdsFromHierarchyNode(node), node.extendedData.categoryId)),\n );\n }\n\n if (CategoriesTreeNode.isCategoryNode(node)) {\n return createVisibilityStatus(await firstValueFrom(this.getCategoriesVisibility(CategoriesVisibilityHandler.getInstanceIdsFromHierarchyNode(node))));\n }\n\n if (CategoriesTreeNode.isDefinitionContainerNode(node)) {\n return createVisibilityStatus(await firstValueFrom(this.getDefinitionContainerVisibility(node)));\n }\n\n return { state: \"hidden\", isDisabled: true };\n }\n\n public async changeVisibility(node: HierarchyNode, on: boolean) {\n if (!HierarchyNode.isInstancesNode(node)) {\n return;\n }\n\n if (CategoriesTreeNode.isCategoryNode(node)) {\n return toVoidPromise(this.changeCategoryVisibility(CategoriesVisibilityHandler.getInstanceIdsFromHierarchyNode(node), on));\n }\n\n if (CategoriesTreeNode.isSubCategoryNode(node)) {\n return toVoidPromise(this.changeSubCategoryVisibility(node, on));\n }\n\n if (CategoriesTreeNode.isDefinitionContainerNode(node)) {\n return toVoidPromise(this.changeDefinitionContainerVisibility(node, on));\n }\n }\n\n private getSubCategoriesVisibility(subCategoryIds: Id64Arg, parentCategoryId: Id64String): Observable<Visibility> {\n return this.#idsCache.getCategoriesElementModels(parentCategoryId).pipe(\n mergeMap((modelMap): Observable<{ visibility: \"visible\" | \"hidden\"; isDefault: boolean }> => {\n if (modelMap.size === 0) {\n return of({ visibility: this.#viewport.view.viewsCategory(parentCategoryId) ? \"visible\" : \"hidden\", isDefault: true });\n }\n return from(modelMap.keys()).pipe(\n map((modelId) => {\n if (!this.#viewport.view.viewsModel(modelId)) {\n return { visibility: \"hidden\", isDefault: false };\n }\n const override = this.#viewport.perModelCategoryVisibility.getOverride(modelId, parentCategoryId);\n return override === PerModelCategoryVisibility.Override.Show\n ? { visibility: \"visible\", isDefault: false }\n : override === PerModelCategoryVisibility.Override.Hide\n ? { visibility: \"hidden\", isDefault: false }\n : { visibility: this.#viewport.view.viewsCategory(parentCategoryId) ? \"visible\" : \"hidden\", isDefault: true };\n }),\n );\n }),\n mergeMap(({ visibility, isDefault }) => {\n if (!isDefault || visibility === \"hidden\" || Id64.sizeOf(subCategoryIds) === 0) {\n return of(visibility);\n }\n return from(Id64.iterable(subCategoryIds)).pipe(\n releaseMainThreadOnItemsCount(200),\n map((subCategoryId) => (this.#viewport.isSubCategoryVisible(subCategoryId) ? \"visible\" : \"hidden\")),\n );\n }),\n mergeVisibilities,\n map((visibility) => (visibility === \"empty\" ? \"hidden\" : visibility)),\n );\n }\n\n private getDefinitionContainerVisibility(node: HierarchyNode): Observable<Visibility> {\n return this.#idsCache\n .getAllContainedCategories({\n definitionContainerIds: CategoriesVisibilityHandler.getInstanceIdsFromHierarchyNode(node),\n includeEmptyCategories: this.#hierarchyConfig.showEmptyCategories,\n })\n .pipe(mergeMap((categoryIds) => this.getCategoriesVisibility(categoryIds)));\n }\n\n private getCategoriesVisibility(categoryIds: Id64Arg): Observable<Visibility> {\n return from(categoryIds).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap((categoryId) => forkJoin({ subCategoryIds: this.#idsCache.getSubCategories(categoryId), categoryId: of(categoryId) })),\n mergeMap(({ subCategoryIds, categoryId }) => this.getSubCategoriesVisibility(subCategoryIds, categoryId)),\n mergeVisibilities,\n map((visibility) => {\n return visibility === \"empty\" ? \"hidden\" : visibility;\n }),\n );\n }\n\n private enableCategoriesElementModelsVisibility(categoryIds: Id64Array) {\n return this.#idsCache.getCategoriesElementModels(categoryIds).pipe(\n mergeMap((categoriesModelsMap) => categoriesModelsMap.entries()),\n mergeMap(([modelId, categoriesFromPropsInModel]) =>\n this.#viewport.view.viewsModel(modelId)\n ? EMPTY\n : this.#idsCache.getCategoriesOfElementModel(modelId).pipe(\n map((allModelCategories) => {\n // Add 'Hide' override to categories that were hidden before model is turned on\n allModelCategories?.forEach((categoryId) => {\n if (!categoriesFromPropsInModel.has(categoryId)) {\n this.#viewport.perModelCategoryVisibility.setOverride(modelId, categoryId, PerModelCategoryVisibility.Override.Hide);\n }\n });\n return modelId;\n }),\n ),\n ),\n toArray(),\n mergeMap(async (hiddenModels) => {\n if (hiddenModels.length > 0) {\n await this.#viewport.addViewedModels(hiddenModels);\n }\n }),\n );\n }\n\n private changeSubCategoryVisibility(node: HierarchyNode, on: boolean) {\n const parentCategoryId = node.extendedData?.categoryId;\n return merge(\n // make sure parent category and models are enabled\n on && parentCategoryId ? this.enableCategoriesElementModelsVisibility([parentCategoryId]) : EMPTY,\n on && parentCategoryId ? this.changeCategoryState([parentCategoryId], true, false) : EMPTY,\n of(\n (() =>\n CategoriesVisibilityHandler.getInstanceIdsFromHierarchyNode(node).forEach((id) => {\n this.changeSubCategoryState(id, on);\n }))(),\n ),\n );\n }\n\n private changeCategoryVisibility(categoryIds: Id64Array, on: boolean) {\n return merge(\n // make sure models are enabled\n on ? this.enableCategoriesElementModelsVisibility(categoryIds) : EMPTY,\n from(categoryIds).pipe(\n mergeMap((categoryId) => this.#idsCache.getSubCategories(categoryId)),\n mergeMap((subCategorySet) => subCategorySet),\n toArray(),\n mergeMap((subCategories) =>\n subCategories.length > 0 ? this.changeCategoryState(categoryIds, on, false, subCategories) : this.changeCategoryState(categoryIds, on, on),\n ),\n ),\n );\n }\n\n private changeDefinitionContainerVisibility(node: HierarchyNode, on: boolean) {\n const definitionContainerId = CategoriesVisibilityHandler.getInstanceIdsFromHierarchyNode(node);\n return this.#idsCache\n .getAllContainedCategories({\n definitionContainerIds: definitionContainerId,\n includeEmptyCategories: this.#hierarchyConfig.showEmptyCategories,\n })\n .pipe(mergeMap((childCategories) => this.changeCategoryVisibility([...childCategories], on)));\n }\n\n private onDisplayStyleChanged = () => {\n this.onVisibilityChangeInternal();\n };\n\n private onViewedCategoriesChanged = () => {\n this.onVisibilityChangeInternal();\n };\n\n private onViewedCategoriesPerModelChanged = () => {\n this.onVisibilityChangeInternal();\n };\n\n private onViewedModelsChanged = () => {\n this.onVisibilityChangeInternal();\n };\n\n private onVisibilityChangeInternal() {\n if (this.#pendingVisibilityChange) {\n return;\n }\n\n this.#pendingVisibilityChange = setTimeout(() => {\n this.onVisibilityChange.raiseEvent();\n this.#pendingVisibilityChange = undefined;\n }, 0);\n }\n\n private static getInstanceIdsFromHierarchyNode(node: HierarchyNode) {\n return HierarchyNode.isInstancesNode(node) ? node.key.instanceKeys.map((instanceKey) => instanceKey.id) : /* istanbul ignore next */ [];\n }\n\n private changeCategoryState(ids: Id64Array, enabled: boolean, enableAllSubCategories: boolean, subCategories?: Id64Arg) {\n return merge(\n from(enableCategoryDisplay(this.#viewport, ids, enabled, enableAllSubCategories)),\n enabled && subCategories\n ? from(Id64.iterable(subCategories)).pipe(\n releaseMainThreadOnItemsCount(100),\n map((subCategoryId) => this.changeSubCategoryState(subCategoryId, true)),\n )\n : EMPTY,\n );\n }\n\n private changeSubCategoryState(key: string, enabled: boolean) {\n enableSubCategoryDisplay(this.#viewport, key, enabled);\n }\n}\n"]}
|
|
@@ -30,6 +30,6 @@ export declare function useFocusedInstancesContext(): FocusedInstancesContext;
|
|
|
30
30
|
export declare function FocusedInstancesContextProvider({ selectionStorage, imodelKey, children, }: PropsWithChildren<{
|
|
31
31
|
selectionStorage: SelectionStorage;
|
|
32
32
|
imodelKey: string;
|
|
33
|
-
}>): JSX.Element;
|
|
33
|
+
}>): import("react/jsx-runtime").JSX.Element;
|
|
34
34
|
export {};
|
|
35
35
|
//# sourceMappingURL=FocusedInstancesContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Rxjs.js","sourceRoot":"","sources":["../../../../../../src/tree-widget-react/components/trees/common/Rxjs.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;AAShG,kCAQC;AAGD,sCAOC;AAGD,
|
|
1
|
+
{"version":3,"file":"Rxjs.js","sourceRoot":"","sources":["../../../../../../src/tree-widget-react/components/trees/common/Rxjs.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;AAShG,kCAQC;AAGD,sCAOC;AAGD,0BAgBC;AA5CD,+BAAmE;AAInE;;GAEG;AACH,SAAgB,WAAW,CACzB,SAAuC,EACvC,UAA4D,EAC5D,OAAqB;IAErB,OAAO,CAAC,GAAG,EAAE,EAAE;QACb,OAAO,GAAG,CAAC,IAAI,CAAC,IAAA,WAAI,EAAC,UAAU,EAAE,OAAO,CAAC,EAAE,IAAA,gBAAS,EAAC,SAAS,EAAE,IAAI,CAAC,EAAE,IAAA,qBAAc,EAAC,SAAS,CAAC,EAAE,IAAA,WAAI,GAAE,CAAC,CAAC;IAC5G,CAAC,CAAC;AACJ,CAAC;AAED,wFAAwF;AACjF,KAAK,UAAU,aAAa,CAAC,GAAoB;IACtD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,GAAG,CAAC,SAAS,CAAC;YACZ,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE;YACzB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,6CAA6C;AACtC,KAAK,UAAU,OAAO,CAAI,GAAuB;IACtD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG,IAAI,KAAK,EAAK,CAAC;QAC3B,IAAA,WAAI,EAAC,GAAG,CAAC,CAAC,SAAS,CAAC;YAClB,IAAI,CAAC,IAAO;gBACV,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC;YACD,QAAQ;gBACN,OAAO,CAAC,GAAG,CAAC,CAAC;YACf,CAAC;YACD,KAAK,CAAC,MAAM;gBACV,2EAA2E;gBAC3E,MAAM,CAAC,MAAM,CAAC,CAAC;YACjB,CAAC;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { defaultIfEmpty, from, last, scan, takeWhile } from \"rxjs\";\n\nimport type { Observable, ObservableInput, OperatorFunction } from \"rxjs\";\n\n/**\n * Applies reduce function and \"returns\" early if the predicate returns `false` for the accumulator.\n */\nexport function reduceWhile<TValue, TAccumulator>(\n predicate: (x: TAccumulator) => boolean,\n reduceFunc: (acc: TAccumulator, val: TValue) => TAccumulator,\n initial: TAccumulator,\n): OperatorFunction<TValue, TAccumulator | undefined> {\n return (obs) => {\n return obs.pipe(scan(reduceFunc, initial), takeWhile(predicate, true), defaultIfEmpty(undefined), last());\n };\n}\n\n/** Same as `firstValueFrom` except it won't throw if the observable emits no values. */\nexport async function toVoidPromise(obs: Observable<any>): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n obs.subscribe({\n complete: () => resolve(),\n error: reject,\n });\n });\n}\n\n/** Returns observable results in an array */\nexport async function collect<T>(obs: ObservableInput<T>): Promise<T[]> {\n return new Promise((resolve, reject) => {\n const arr = new Array<T>();\n from(obs).subscribe({\n next(item: T) {\n arr.push(item);\n },\n complete() {\n resolve(arr);\n },\n error(reason) {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(reason);\n },\n });\n });\n}\n"]}
|
|
@@ -6,7 +6,7 @@ interface UseHierarchyLevelFilteringProps {
|
|
|
6
6
|
}
|
|
7
7
|
export declare function useHierarchyLevelFiltering({ imodel, defaultHierarchyLevelSizeLimit }: UseHierarchyLevelFilteringProps): {
|
|
8
8
|
onFilterClick: import("react").Dispatch<import("react").SetStateAction<HierarchyLevelDetails | undefined>>;
|
|
9
|
-
filteringDialog: JSX.Element;
|
|
9
|
+
filteringDialog: import("react/jsx-runtime.js").JSX.Element;
|
|
10
10
|
};
|
|
11
11
|
export {};
|
|
12
12
|
//# sourceMappingURL=UseHierarchyFiltering.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UseHierarchyVisibility.js","sourceRoot":"","sources":["../../../../../../src/tree-widget-react/components/trees/common/UseHierarchyVisibility.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n asyncScheduler,\n defer,\n distinct,\n EMPTY,\n from,\n lastValueFrom,\n mergeMap,\n observeOn,\n onErrorResumeNextWith,\n Subject,\n takeUntil,\n tap,\n throttleTime,\n} from \"rxjs\";\nimport { useTelemetryContext } from \"./UseTelemetryContext.js\";\n\nimport type { MutableRefObject } from \"react\";\nimport type { Observable } from \"rxjs\";\nimport type { BeEvent, IDisposable } from \"@itwin/core-bentley\";\nimport type { HierarchyNode, PresentationHierarchyNode } from \"@itwin/presentation-hierarchies-react\";\nimport type { TreeCheckboxProps } from \"./components/TreeNodeCheckbox.js\";\n\n/**\n * Data structure that describes instance visibility status.\n * @beta\n */\nexport interface VisibilityStatus {\n /** Instance visibility state. */\n state: \"visible\" | \"partial\" | \"hidden\";\n /** Specifies whether visibility changing is disabled or not. */\n isDisabled?: boolean;\n /** Tooltip that should be displayed when hovering over the visibility checkbox. */\n tooltip?: string;\n}\n\n/**\n * Handler that can be used to determine and change visibility of instances represented by tree nodes.\n * @beta\n */\n// eslint-disable-next-line deprecation/deprecation\nexport interface HierarchyVisibilityHandler extends IDisposable {\n /** Event used to notify tree about visibility changes from outside. */\n readonly onVisibilityChange: BeEvent<() => void>;\n /** Returns current visibility status for tree node. */\n getVisibilityStatus(node: HierarchyNode): Promise<VisibilityStatus> | VisibilityStatus;\n /** Changes visibility of the instance represented by tree node. */\n changeVisibility(node: HierarchyNode, on: boolean): Promise<void>;\n}\n\ninterface UseHierarchyVisibilityProps {\n visibilityHandlerFactory: () => HierarchyVisibilityHandler;\n}\n\nexport function useHierarchyVisibility({ visibilityHandlerFactory }: UseHierarchyVisibilityProps): TreeCheckboxProps & { triggerRefresh: () => void } {\n const visibilityStatusMap = useRef(new Map<string, { node: PresentationHierarchyNode; status: VisibilityStatus; needsRefresh: boolean }>());\n const [state, setState] = useState<TreeCheckboxProps & { triggerRefresh: () => void }>({\n getCheckboxState: () => ({ isLoading: true }),\n onCheckboxClicked: () => {},\n triggerRefresh: () => {},\n });\n const { onFeatureUsed } = useTelemetryContext();\n\n useEffect(() => {\n visibilityStatusMap.current.clear();\n const handler = visibilityHandlerFactory();\n\n const visibilityChanged = new Subject<void>();\n const calculate = new Subject<PresentationHierarchyNode>();\n const calculateNodeStatus = (node: PresentationHierarchyNode) => {\n calculate.next(node);\n };\n\n const resetCache = () => {\n visibilityStatusMap.current.forEach((value) => {\n value.needsRefresh = true;\n });\n visibilityChanged.next();\n };\n\n const triggerCheckboxUpdate = () => {\n setState((prev) => ({\n ...prev,\n getCheckboxState: createStateGetter(visibilityStatusMap, calculateNodeStatus),\n }));\n };\n\n const subscription = calculate\n .pipe(\n distinct(undefined, visibilityChanged),\n observeOn(asyncScheduler),\n mergeMap((node) =>\n defer(async () => handler.getVisibilityStatus(node.nodeData)).pipe(\n tap({\n next: (status) => {\n visibilityStatusMap.current.set(node.id, {\n node,\n status,\n needsRefresh: false,\n });\n },\n }),\n takeUntil(visibilityChanged),\n onErrorResumeNextWith(EMPTY),\n ),\n ),\n throttleTime(100, undefined, { leading: false, trailing: true }),\n )\n .subscribe({\n next: () => {\n triggerCheckboxUpdate();\n },\n });\n\n const changeVisibility = (node: PresentationHierarchyNode, checked: boolean) => {\n onFeatureUsed({ featureId: \"visibility-change\", reportInteraction: true });\n void handler.changeVisibility(node.nodeData, checked);\n const entry = visibilityStatusMap.current.get(node.id);\n if (!entry) {\n return;\n }\n entry.status.state = checked ? \"visible\" : \"hidden\";\n delete entry.status.tooltip;\n triggerCheckboxUpdate();\n };\n\n setState({\n onCheckboxClicked: changeVisibility,\n getCheckboxState: createStateGetter(visibilityStatusMap, calculateNodeStatus),\n triggerRefresh: () => {\n resetCache();\n triggerCheckboxUpdate();\n },\n });\n\n const removeListener = handler.onVisibilityChange.addListener(() => {\n resetCache();\n triggerCheckboxUpdate();\n });\n\n return () => {\n subscription.unsubscribe();\n removeListener();\n handler.dispose();\n };\n }, [visibilityHandlerFactory, onFeatureUsed]);\n\n return state;\n}\n\nfunction createStateGetter(\n map: MutableRefObject<Map<string, { node: PresentationHierarchyNode; status: VisibilityStatus; needsRefresh: boolean }>>,\n calculateVisibility: (node: PresentationHierarchyNode) => void,\n): TreeCheckboxProps[\"getCheckboxState\"] {\n return (node) => {\n const entry = map.current.get(node.id);\n if (entry === undefined) {\n calculateVisibility(node);\n return { isLoading: true };\n }\n\n if (entry.needsRefresh) {\n calculateVisibility(node);\n }\n\n const status = entry.status;\n return {\n ...status,\n state: status.state === \"visible\" ? \"on\" : status.state === \"hidden\" ? \"off\" : \"partial\",\n };\n };\n}\n\n/**\n * Properties for an overridden method of a `HierarchyVisibilityHandler` implementation.\n * @beta\n */\nexport type HierarchyVisibilityHandlerOverridableMethodProps<TFunc> = TFunc extends (props: infer TProps) => infer TResult\n ? TProps & {\n /** A callback that produces the value from the original implementation. */\n readonly originalImplementation: () => TResult;\n /**\n * Reference to the hierarchy based handler.\n * @note Calling `getVisibility` or `changeVisibility` of this object invokes the overridden implementation as well.\n */\n readonly handler: HierarchyVisibilityHandler;\n }\n : never;\n\n/**\n * Function type for an overridden method of `HierarchyVisibilityHandler`.\n * @beta\n */\nexport type HierarchyVisibilityHandlerOverridableMethod<TFunc> = TFunc extends (...args: any[]) => infer TResult\n ? (props: HierarchyVisibilityHandlerOverridableMethodProps<TFunc>) => TResult\n : never;\n\nexport function createVisibilityHandlerResult<TResult, TOverrideProps>(\n handler: HierarchyVisibilityHandler,\n props: TOverrideProps,\n obs: Observable<TResult>,\n override: HierarchyVisibilityHandlerOverridableMethod<(props: TOverrideProps) => Promise<TResult>> | undefined,\n): Observable<TResult> {\n return override\n ? from(\n override({\n ...props,\n originalImplementation: async () => lastValueFrom(obs, { defaultValue: undefined as TResult }),\n handler,\n }),\n )\n : obs;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"UseHierarchyVisibility.js","sourceRoot":"","sources":["../../../../../../src/tree-widget-react/components/trees/common/UseHierarchyVisibility.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n asyncScheduler,\n defer,\n distinct,\n EMPTY,\n from,\n lastValueFrom,\n mergeMap,\n observeOn,\n onErrorResumeNextWith,\n Subject,\n takeUntil,\n tap,\n throttleTime,\n} from \"rxjs\";\nimport { useTelemetryContext } from \"./UseTelemetryContext.js\";\n\nimport type { MutableRefObject } from \"react\";\nimport type { Observable } from \"rxjs\";\nimport type { BeEvent, IDisposable } from \"@itwin/core-bentley\";\nimport type { HierarchyNode, PresentationHierarchyNode } from \"@itwin/presentation-hierarchies-react\";\nimport type { TreeCheckboxProps } from \"./components/TreeNodeCheckbox.js\";\n\n/**\n * Data structure that describes instance visibility status.\n * @beta\n */\nexport interface VisibilityStatus {\n /** Instance visibility state. */\n state: \"visible\" | \"partial\" | \"hidden\";\n /** Specifies whether visibility changing is disabled or not. */\n isDisabled?: boolean;\n /** Tooltip that should be displayed when hovering over the visibility checkbox. */\n tooltip?: string;\n}\n\n/**\n * Handler that can be used to determine and change visibility of instances represented by tree nodes.\n * @beta\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface HierarchyVisibilityHandler extends IDisposable {\n /** Event used to notify tree about visibility changes from outside. */\n readonly onVisibilityChange: BeEvent<() => void>;\n /** Returns current visibility status for tree node. */\n getVisibilityStatus(node: HierarchyNode): Promise<VisibilityStatus> | VisibilityStatus;\n /** Changes visibility of the instance represented by tree node. */\n changeVisibility(node: HierarchyNode, on: boolean): Promise<void>;\n}\n\ninterface UseHierarchyVisibilityProps {\n visibilityHandlerFactory: () => HierarchyVisibilityHandler;\n}\n\nexport function useHierarchyVisibility({ visibilityHandlerFactory }: UseHierarchyVisibilityProps): TreeCheckboxProps & { triggerRefresh: () => void } {\n const visibilityStatusMap = useRef(new Map<string, { node: PresentationHierarchyNode; status: VisibilityStatus; needsRefresh: boolean }>());\n const [state, setState] = useState<TreeCheckboxProps & { triggerRefresh: () => void }>({\n getCheckboxState: () => ({ isLoading: true }),\n onCheckboxClicked: () => {},\n triggerRefresh: () => {},\n });\n const { onFeatureUsed } = useTelemetryContext();\n\n useEffect(() => {\n visibilityStatusMap.current.clear();\n const handler = visibilityHandlerFactory();\n\n const visibilityChanged = new Subject<void>();\n const calculate = new Subject<PresentationHierarchyNode>();\n const calculateNodeStatus = (node: PresentationHierarchyNode) => {\n calculate.next(node);\n };\n\n const resetCache = () => {\n visibilityStatusMap.current.forEach((value) => {\n value.needsRefresh = true;\n });\n visibilityChanged.next();\n };\n\n const triggerCheckboxUpdate = () => {\n setState((prev) => ({\n ...prev,\n getCheckboxState: createStateGetter(visibilityStatusMap, calculateNodeStatus),\n }));\n };\n\n const subscription = calculate\n .pipe(\n distinct(undefined, visibilityChanged),\n observeOn(asyncScheduler),\n mergeMap((node) =>\n defer(async () => handler.getVisibilityStatus(node.nodeData)).pipe(\n tap({\n next: (status) => {\n visibilityStatusMap.current.set(node.id, {\n node,\n status,\n needsRefresh: false,\n });\n },\n }),\n takeUntil(visibilityChanged),\n onErrorResumeNextWith(EMPTY),\n ),\n ),\n throttleTime(100, undefined, { leading: false, trailing: true }),\n )\n .subscribe({\n next: () => {\n triggerCheckboxUpdate();\n },\n });\n\n const changeVisibility = (node: PresentationHierarchyNode, checked: boolean) => {\n onFeatureUsed({ featureId: \"visibility-change\", reportInteraction: true });\n void handler.changeVisibility(node.nodeData, checked);\n const entry = visibilityStatusMap.current.get(node.id);\n if (!entry) {\n return;\n }\n entry.status.state = checked ? \"visible\" : \"hidden\";\n delete entry.status.tooltip;\n triggerCheckboxUpdate();\n };\n\n setState({\n onCheckboxClicked: changeVisibility,\n getCheckboxState: createStateGetter(visibilityStatusMap, calculateNodeStatus),\n triggerRefresh: () => {\n resetCache();\n triggerCheckboxUpdate();\n },\n });\n\n const removeListener = handler.onVisibilityChange.addListener(() => {\n resetCache();\n triggerCheckboxUpdate();\n });\n\n return () => {\n subscription.unsubscribe();\n removeListener();\n handler.dispose();\n };\n }, [visibilityHandlerFactory, onFeatureUsed]);\n\n return state;\n}\n\nfunction createStateGetter(\n map: MutableRefObject<Map<string, { node: PresentationHierarchyNode; status: VisibilityStatus; needsRefresh: boolean }>>,\n calculateVisibility: (node: PresentationHierarchyNode) => void,\n): TreeCheckboxProps[\"getCheckboxState\"] {\n return (node) => {\n const entry = map.current.get(node.id);\n if (entry === undefined) {\n calculateVisibility(node);\n return { isLoading: true };\n }\n\n if (entry.needsRefresh) {\n calculateVisibility(node);\n }\n\n const status = entry.status;\n return {\n ...status,\n state: status.state === \"visible\" ? \"on\" : status.state === \"hidden\" ? \"off\" : \"partial\",\n };\n };\n}\n\n/**\n * Properties for an overridden method of a `HierarchyVisibilityHandler` implementation.\n * @beta\n */\nexport type HierarchyVisibilityHandlerOverridableMethodProps<TFunc> = TFunc extends (props: infer TProps) => infer TResult\n ? TProps & {\n /** A callback that produces the value from the original implementation. */\n readonly originalImplementation: () => TResult;\n /**\n * Reference to the hierarchy based handler.\n * @note Calling `getVisibility` or `changeVisibility` of this object invokes the overridden implementation as well.\n */\n readonly handler: HierarchyVisibilityHandler;\n }\n : never;\n\n/**\n * Function type for an overridden method of `HierarchyVisibilityHandler`.\n * @beta\n */\nexport type HierarchyVisibilityHandlerOverridableMethod<TFunc> = TFunc extends (...args: any[]) => infer TResult\n ? (props: HierarchyVisibilityHandlerOverridableMethodProps<TFunc>) => TResult\n : never;\n\nexport function createVisibilityHandlerResult<TResult, TOverrideProps>(\n handler: HierarchyVisibilityHandler,\n props: TOverrideProps,\n obs: Observable<TResult>,\n override: HierarchyVisibilityHandlerOverridableMethod<(props: TOverrideProps) => Promise<TResult>> | undefined,\n): Observable<TResult> {\n return override\n ? from(\n override({\n ...props,\n originalImplementation: async () => lastValueFrom(obs, { defaultValue: undefined as TResult }),\n handler,\n }),\n )\n : obs;\n}\n"]}
|
|
@@ -17,7 +17,7 @@ export interface TelemetryContextProviderProps {
|
|
|
17
17
|
componentIdentifier: string;
|
|
18
18
|
}
|
|
19
19
|
/** @beta */
|
|
20
|
-
export declare function TelemetryContextProvider({ children, onPerformanceMeasured, onFeatureUsed, componentIdentifier, }: PropsWithChildren<TelemetryContextProviderProps>): JSX.Element;
|
|
20
|
+
export declare function TelemetryContextProvider({ children, onPerformanceMeasured, onFeatureUsed, componentIdentifier, }: PropsWithChildren<TelemetryContextProviderProps>): import("react/jsx-runtime.js").JSX.Element;
|
|
21
21
|
export declare function useTelemetryContext(): TelemetryContext;
|
|
22
22
|
interface UseReportingActionProps<TAction> {
|
|
23
23
|
action: TAction;
|
|
@@ -41,9 +41,9 @@ export type TreeProps = Pick<FunctionProps<typeof useIModelTree>, "getFilteredPa
|
|
|
41
41
|
* Default tree component that manages tree state and renders using supplied `treeRenderer`.
|
|
42
42
|
* @beta
|
|
43
43
|
*/
|
|
44
|
-
export declare function Tree({ getSchemaContext, hierarchyLevelSizeLimit, selectionStorage, imodelAccess: providedIModelAccess, ...props }: TreeProps): JSX.Element;
|
|
44
|
+
export declare function Tree({ getSchemaContext, hierarchyLevelSizeLimit, selectionStorage, imodelAccess: providedIModelAccess, ...props }: TreeProps): import("react/jsx-runtime.js").JSX.Element;
|
|
45
45
|
/** @internal */
|
|
46
46
|
export declare function TreeBase({ getSchemaContext, ...props }: MarkRequired<TreeProps, "imodelAccess"> & {
|
|
47
47
|
currentHierarchyLevelSizeLimit: number;
|
|
48
|
-
}): JSX.Element;
|
|
48
|
+
}): import("react/jsx-runtime.js").JSX.Element;
|
|
49
49
|
//# sourceMappingURL=Tree.d.ts.map
|
|
@@ -25,6 +25,6 @@ type TreeNodeCheckboxProps = TreeCheckboxProps & Omit<ComponentPropsWithoutRef<t
|
|
|
25
25
|
/** @internal */
|
|
26
26
|
export declare function TreeNodeCheckbox({ node, onCheckboxClicked, getCheckboxState, ...props }: TreeNodeCheckboxProps & {
|
|
27
27
|
node: RenderedTreeNode;
|
|
28
|
-
}): JSX.Element | null;
|
|
28
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
29
29
|
export {};
|
|
30
30
|
//# sourceMappingURL=TreeNodeCheckbox.d.ts.map
|
|
@@ -15,5 +15,5 @@ export type TreeRendererProps = Pick<TreeNodeRendererProps, "expandNode" | "onNo
|
|
|
15
15
|
* Default renderer for rendering tree data.
|
|
16
16
|
* @beta
|
|
17
17
|
*/
|
|
18
|
-
export declare function TreeRenderer({ rootNodes, expandNode, onNodeClick, onNodeKeyDown, onNodeDoubleClick, isNodeSelected, onFilterClick, getIcon, getLabel, getSublabel, getActions, getHierarchyLevelDetails, checkboxProps, filterButtonsVisibility, reloadTree, size, enableVirtualization, ...props }: TreeRendererProps): JSX.Element;
|
|
18
|
+
export declare function TreeRenderer({ rootNodes, expandNode, onNodeClick, onNodeKeyDown, onNodeDoubleClick, isNodeSelected, onFilterClick, getIcon, getLabel, getSublabel, getActions, getHierarchyLevelDetails, checkboxProps, filterButtonsVisibility, reloadTree, size, enableVirtualization, ...props }: TreeRendererProps): import("react/jsx-runtime.js").JSX.Element;
|
|
19
19
|
//# sourceMappingURL=TreeRenderer.d.ts.map
|
|
@@ -17,5 +17,5 @@ export type VisibilityTreeProps = Omit<TreeProps, "treeRenderer" | "imodelAccess
|
|
|
17
17
|
* Tree component that can control visibility of instances represented by tree nodes.
|
|
18
18
|
* @beta
|
|
19
19
|
*/
|
|
20
|
-
export declare function VisibilityTree({ visibilityHandlerFactory, treeRenderer, hierarchyLevelSizeLimit, ...props }: VisibilityTreeProps): JSX.Element;
|
|
20
|
+
export declare function VisibilityTree({ visibilityHandlerFactory, treeRenderer, hierarchyLevelSizeLimit, ...props }: VisibilityTreeProps): import("react/jsx-runtime.js").JSX.Element;
|
|
21
21
|
//# sourceMappingURL=VisibilityTree.d.ts.map
|
package/lib/cjs/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.d.ts
CHANGED
|
@@ -6,5 +6,5 @@ export type VisibilityTreeRendererProps = TreeRendererProps & TreeCheckboxProps;
|
|
|
6
6
|
* Tree renderer that renders tree nodes with eye checkboxes for controlling visibility of instances represented by tree nodes.
|
|
7
7
|
* @beta
|
|
8
8
|
*/
|
|
9
|
-
export declare function VisibilityTreeRenderer({ getCheckboxState, onCheckboxClicked: onClick, ...props }: VisibilityTreeRendererProps): JSX.Element;
|
|
9
|
+
export declare function VisibilityTreeRenderer({ getCheckboxState, onCheckboxClicked: onClick, ...props }: VisibilityTreeRendererProps): import("react/jsx-runtime.js").JSX.Element;
|
|
10
10
|
//# sourceMappingURL=VisibilityTreeRenderer.d.ts.map
|
package/lib/cjs/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.d.ts
CHANGED
|
@@ -6,5 +6,5 @@ export type ExternalSourcesTreeProps = Pick<TreeProps, "imodel" | "getSchemaCont
|
|
|
6
6
|
};
|
|
7
7
|
};
|
|
8
8
|
/** @beta */
|
|
9
|
-
export declare function ExternalSourcesTree(props: ExternalSourcesTreeProps): JSX.Element;
|
|
9
|
+
export declare function ExternalSourcesTree(props: ExternalSourcesTreeProps): import("react/jsx-runtime.js").JSX.Element;
|
|
10
10
|
//# sourceMappingURL=ExternalSourcesTree.d.ts.map
|
|
@@ -9,16 +9,12 @@ interface ExternalSourcesTreeComponentProps extends Pick<ExternalSourcesTreeProp
|
|
|
9
9
|
* @beta
|
|
10
10
|
*/
|
|
11
11
|
export declare const ExternalSourcesTreeComponent: {
|
|
12
|
-
({ onFeatureUsed, onPerformanceMeasured, ...props }: ExternalSourcesTreeComponentProps): JSX.Element | null;
|
|
12
|
+
({ onFeatureUsed, onPerformanceMeasured, ...props }: ExternalSourcesTreeComponentProps): import("react/jsx-runtime.js").JSX.Element | null;
|
|
13
13
|
/**
|
|
14
14
|
* Id of the component. May be used when a creating a `TreeDefinition` for `SelectableTree`.
|
|
15
15
|
* @beta
|
|
16
16
|
*/
|
|
17
17
|
id: string;
|
|
18
|
-
/**
|
|
19
|
-
* Label of the component. May be used when a creating a `TreeDefinition` for `SelectableTree`.
|
|
20
|
-
* @beta
|
|
21
|
-
*/
|
|
22
18
|
getLabel(): string;
|
|
23
19
|
};
|
|
24
20
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExternalSourcesTreeComponent.js","sourceRoot":"","sources":["../../../../../../src/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.tsx"],"names":[],"mappings":";;;;AAAA;;;gGAGgG;AAEhG,oDAA+D;AAC/D,0DAAoD;AACpD,6EAA4E;AAC5E,qEAA+D;
|
|
1
|
+
{"version":3,"file":"ExternalSourcesTreeComponent.js","sourceRoot":"","sources":["../../../../../../src/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.tsx"],"names":[],"mappings":";;;;AAAA;;;gGAGgG;AAEhG,oDAA+D;AAC/D,0DAAoD;AACpD,6EAA4E;AAC5E,qEAA+D;AAa/D;;;GAGG;AACI,MAAM,4BAA4B,GAAG,CAAC,EAAE,aAAa,EAAE,qBAAqB,EAAE,GAAG,KAAK,EAAqC,EAAE,EAAE;IACpI,MAAM,MAAM,GAAG,IAAA,uCAAyB,GAAE,CAAC;IAE3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,uBAAC,iDAAwB,IAAC,mBAAmB,EAAE,oCAA4B,CAAC,EAAE,EAAE,aAAa,EAAE,aAAa,EAAE,qBAAqB,EAAE,qBAAqB,YACxJ,uBAAC,4CAAmB,OAAK,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI,GACzB,CAC5B,CAAC;AACJ,CAAC,CAAC;AAZW,QAAA,4BAA4B,gCAYvC;AAEF;;;GAGG;AACH,oCAA4B,CAAC,EAAE,GAAG,0BAA0B,CAAC;AAE7D;;;GAGG;AACH,oCAA4B,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,0BAAU,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { TreeWidget } from \"../../../TreeWidget.js\";\nimport { TelemetryContextProvider } from \"../common/UseTelemetryContext.js\";\nimport { ExternalSourcesTree } from \"./ExternalSourcesTree.js\";\n\nimport type { ExternalSourcesTreeProps } from \"./ExternalSourcesTree.js\";\n\n/** @beta */\ninterface ExternalSourcesTreeComponentProps extends Pick<\n ExternalSourcesTreeProps,\n \"getSchemaContext\" | \"selectionStorage\" | \"selectionMode\" | \"density\" | \"hierarchyLevelConfig\" | \"selectionMode\"\n> {\n onPerformanceMeasured?: (featureId: string, duration: number) => void;\n onFeatureUsed?: (feature: string) => void;\n}\n\n/**\n * A component that renders `ExternalSourcesTree`.\n * @beta\n */\nexport const ExternalSourcesTreeComponent = ({ onFeatureUsed, onPerformanceMeasured, ...props }: ExternalSourcesTreeComponentProps) => {\n const imodel = useActiveIModelConnection();\n\n if (!imodel) {\n return null;\n }\n\n return (\n <TelemetryContextProvider componentIdentifier={ExternalSourcesTreeComponent.id} onFeatureUsed={onFeatureUsed} onPerformanceMeasured={onPerformanceMeasured}>\n <ExternalSourcesTree {...props} imodel={imodel} />\n </TelemetryContextProvider>\n );\n};\n\n/**\n * Id of the component. May be used when a creating a `TreeDefinition` for `SelectableTree`.\n * @beta\n */\nExternalSourcesTreeComponent.id = \"external-sources-tree-v2\";\n\n/**\n * Label of the component. May be used when a creating a `TreeDefinition` for `SelectableTree`.\n * @beta\n */\nExternalSourcesTreeComponent.getLabel = () => TreeWidget.translate(\"externalSourcesTree.label\");\n"]}
|
package/lib/cjs/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.d.ts
CHANGED
|
@@ -8,5 +8,5 @@ export type IModelContentTreeProps = Pick<TreeProps, "imodel" | "getSchemaContex
|
|
|
8
8
|
hierarchyConfig?: Partial<IModelContentTreeHierarchyConfiguration>;
|
|
9
9
|
};
|
|
10
10
|
/** @beta */
|
|
11
|
-
export declare function IModelContentTree({ hierarchyConfig: hierarchyConfigProp, ...props }: IModelContentTreeProps): JSX.Element;
|
|
11
|
+
export declare function IModelContentTree({ hierarchyConfig: hierarchyConfigProp, ...props }: IModelContentTreeProps): import("react/jsx-runtime.js").JSX.Element;
|
|
12
12
|
//# sourceMappingURL=IModelContentTree.d.ts.map
|
|
@@ -9,16 +9,12 @@ interface IModelContentTreeComponentProps extends Pick<IModelContentTreeProps, "
|
|
|
9
9
|
* @beta
|
|
10
10
|
*/
|
|
11
11
|
export declare const IModelContentTreeComponent: {
|
|
12
|
-
({ onFeatureUsed, onPerformanceMeasured, ...props }: IModelContentTreeComponentProps): JSX.Element | null;
|
|
12
|
+
({ onFeatureUsed, onPerformanceMeasured, ...props }: IModelContentTreeComponentProps): import("react/jsx-runtime.js").JSX.Element | null;
|
|
13
13
|
/**
|
|
14
14
|
* Id of the component. May be used when a creating a `TreeDefinition` for `SelectableTree`.
|
|
15
15
|
* @beta
|
|
16
16
|
*/
|
|
17
17
|
id: string;
|
|
18
|
-
/**
|
|
19
|
-
* Label of the component. May be used when a creating a `TreeDefinition` for `SelectableTree`.
|
|
20
|
-
* @beta
|
|
21
|
-
*/
|
|
22
18
|
getLabel(): string;
|
|
23
19
|
};
|
|
24
20
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelContentTreeComponent.js","sourceRoot":"","sources":["../../../../../../src/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.tsx"],"names":[],"mappings":";;;;AAAA;;;gGAGgG;AAEhG,oDAA+D;AAC/D,0DAAoD;AACpD,6EAA4E;AAC5E,iEAA2D;
|
|
1
|
+
{"version":3,"file":"IModelContentTreeComponent.js","sourceRoot":"","sources":["../../../../../../src/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.tsx"],"names":[],"mappings":";;;;AAAA;;;gGAGgG;AAEhG,oDAA+D;AAC/D,0DAAoD;AACpD,6EAA4E;AAC5E,iEAA2D;AAa3D;;;GAGG;AACI,MAAM,0BAA0B,GAAG,CAAC,EAAE,aAAa,EAAE,qBAAqB,EAAE,GAAG,KAAK,EAAmC,EAAE,EAAE;IAChI,MAAM,MAAM,GAAG,IAAA,uCAAyB,GAAE,CAAC;IAE3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,uBAAC,iDAAwB,IAAC,mBAAmB,EAAE,kCAA0B,CAAC,EAAE,EAAE,aAAa,EAAE,aAAa,EAAE,qBAAqB,EAAE,qBAAqB,YACtJ,uBAAC,wCAAiB,OAAK,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI,GACvB,CAC5B,CAAC;AACJ,CAAC,CAAC;AAZW,QAAA,0BAA0B,8BAYrC;AAEF;;;GAGG;AACH,kCAA0B,CAAC,EAAE,GAAG,wBAAwB,CAAC;AAEzD;;;GAGG;AACH,kCAA0B,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,0BAAU,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { TreeWidget } from \"../../../TreeWidget.js\";\nimport { TelemetryContextProvider } from \"../common/UseTelemetryContext.js\";\nimport { IModelContentTree } from \"./IModelContentTree.js\";\n\nimport type { IModelContentTreeProps } from \"./IModelContentTree.js\";\n\n/** @beta */\ninterface IModelContentTreeComponentProps extends Pick<\n IModelContentTreeProps,\n \"getSchemaContext\" | \"selectionStorage\" | \"density\" | \"hierarchyConfig\" | \"hierarchyLevelConfig\" | \"selectionMode\"\n> {\n onPerformanceMeasured?: (featureId: string, duration: number) => void;\n onFeatureUsed?: (feature: string) => void;\n}\n\n/**\n * A component that renders `IModelContentTree`.\n * @beta\n */\nexport const IModelContentTreeComponent = ({ onFeatureUsed, onPerformanceMeasured, ...props }: IModelContentTreeComponentProps) => {\n const imodel = useActiveIModelConnection();\n\n if (!imodel) {\n return null;\n }\n\n return (\n <TelemetryContextProvider componentIdentifier={IModelContentTreeComponent.id} onFeatureUsed={onFeatureUsed} onPerformanceMeasured={onPerformanceMeasured}>\n <IModelContentTree {...props} imodel={imodel} />\n </TelemetryContextProvider>\n );\n};\n\n/**\n * Id of the component. May be used when a creating a `TreeDefinition` for `SelectableTree`.\n * @beta\n */\nIModelContentTreeComponent.id = \"imodel-content-tree-v2\";\n\n/**\n * Label of the component. May be used when a creating a `TreeDefinition` for `SelectableTree`.\n * @beta\n */\nIModelContentTreeComponent.getLabel = () => TreeWidget.translate(\"imodelContentTree.label\");\n"]}
|
|
@@ -202,6 +202,7 @@ function forEachChildSubject(subjectInfos, parentSubject, cb) {
|
|
|
202
202
|
parentSubjectInfo &&
|
|
203
203
|
parentSubjectInfo.childSubjects.forEach((childSubjectId) => {
|
|
204
204
|
const childSubjectInfo = subjectInfos.get(childSubjectId);
|
|
205
|
+
(0, core_bentley_1.assert)(childSubjectInfo !== undefined);
|
|
205
206
|
if (cb(childSubjectId, childSubjectInfo) === "break") {
|
|
206
207
|
return;
|
|
207
208
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelContentTreeIdsCache.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.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 { assert, Guid } from \"@itwin/core-bentley\";\nimport { pushToMap } from \"../../common/Utils.js\";\n\nimport type { GuidString, Id64Array, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport type { LimitingECSqlQueryExecutor } from \"@itwin/presentation-hierarchies\";\n\ninterface SubjectInfo {\n parentSubject: Id64String | undefined;\n hideInHierarchy: boolean;\n childSubjects: Id64Set;\n childModels: Id64Set;\n}\n\ninterface ModelInfo {\n categories: Id64Set;\n}\n\n/** @internal */\nexport class IModelContentTreeIdsCache {\n #subjectInfos: Promise<Map<Id64String, SubjectInfo>> | undefined;\n #parentSubjectIds: Promise<Id64Array> | undefined; // the list should contain a subject id if its node should be shown as having children\n #modelInfos: Promise<Map<Id64String, ModelInfo>> | undefined;\n #queryExecutor: LimitingECSqlQueryExecutor;\n #componentId: GuidString;\n #componentName: string;\n\n constructor(queryExecutor: LimitingECSqlQueryExecutor, componentId?: GuidString) {\n this.#queryExecutor = queryExecutor;\n this.#componentId = componentId ?? Guid.createValue();\n this.#componentName = \"IModelContentTreeIdsCache\";\n }\n\n private async *querySubjects(): AsyncIterableIterator<{ id: Id64String; parentId?: Id64String; targetPartitionId?: Id64String; hideInHierarchy: boolean }> {\n const subjectsQuery = `\n SELECT\n s.ECInstanceId id,\n s.Parent.Id parentId,\n (\n SELECT m.ECInstanceId\n FROM bis.Model m\n WHERE\n m.ECInstanceId = HexToId(json_extract(s.JsonProperties, '$.Subject.Model.TargetPartition'))\n AND NOT m.IsPrivate\n ) targetPartitionId,\n CASE\n WHEN (\n json_extract(s.JsonProperties, '$.Subject.Job.Bridge') IS NOT NULL\n OR json_extract(s.JsonProperties, '$.Subject.Model.Type') = 'Hierarchy'\n ) THEN 1\n ELSE 0\n END hideInHierarchy\n FROM bis.Subject s\n `;\n for await (const row of this.#queryExecutor.createQueryReader(\n { ecsql: subjectsQuery },\n { rowFormat: \"ECSqlPropertyNames\", limit: \"unbounded\", restartToken: `${this.#componentName}/${this.#componentId}/subjects` },\n )) {\n yield { id: row.id, parentId: row.parentId, targetPartitionId: row.targetPartitionId, hideInHierarchy: !!row.hideInHierarchy };\n }\n }\n\n private async *queryModels(): AsyncIterableIterator<{ id: Id64String; parentId: Id64String }> {\n const modelsQuery = `\n SELECT p.ECInstanceId id, p.Parent.Id parentId\n FROM bis.InformationPartitionElement p\n INNER JOIN bis.Model m ON m.ModeledElement.Id = p.ECInstanceId\n WHERE NOT m.IsPrivate\n `;\n for await (const row of this.#queryExecutor.createQueryReader(\n { ecsql: modelsQuery },\n { rowFormat: \"ECSqlPropertyNames\", limit: \"unbounded\", restartToken: `${this.#componentName}/${this.#componentId}/models` },\n )) {\n yield { id: row.id, parentId: row.parentId };\n }\n }\n\n private async getSubjectInfos() {\n this.#subjectInfos ??= (async () => {\n const [subjectInfos, targetPartitionSubjects] = await Promise.all([\n (async () => {\n const result = new Map<Id64String, SubjectInfo>();\n for await (const subject of this.querySubjects()) {\n const subjectInfo: SubjectInfo = {\n parentSubject: subject.parentId,\n hideInHierarchy: subject.hideInHierarchy,\n childSubjects: new Set(),\n childModels: new Set(),\n };\n if (subject.targetPartitionId) {\n subjectInfo.childModels.add(subject.targetPartitionId);\n }\n result.set(subject.id, subjectInfo);\n }\n return result;\n })(),\n (async () => {\n const result = new Map<Id64String, Set<Id64String>>();\n for await (const model of this.queryModels()) {\n pushToMap(result, model.id, model.parentId);\n }\n return result;\n })(),\n ]);\n\n for (const [subjectId, { parentSubject: parentSubjectId }] of subjectInfos.entries()) {\n if (parentSubjectId) {\n const parentSubjectInfo = subjectInfos.get(parentSubjectId);\n assert(!!parentSubjectInfo);\n parentSubjectInfo.childSubjects.add(subjectId);\n }\n }\n\n for (const [partitionId, subjectIds] of targetPartitionSubjects) {\n subjectIds.forEach((subjectId) => {\n const subjectInfo = subjectInfos.get(subjectId);\n assert(!!subjectInfo);\n subjectInfo.childModels.add(partitionId);\n });\n }\n\n return subjectInfos;\n })();\n return this.#subjectInfos;\n }\n\n /** Returns ECInstanceIDs of Subjects that either have direct Model or at least one child Subject with a Model. */\n public async getParentSubjectIds(): Promise<Id64String[]> {\n this.#parentSubjectIds ??= (async () => {\n const subjectInfos = await this.getSubjectInfos();\n const parentSubjectIds = new Set<Id64String>();\n subjectInfos.forEach((subjectInfo, subjectId) => {\n if (subjectInfo.childModels.size === 0 && subjectInfo.childSubjects.size === 0) {\n return;\n }\n parentSubjectIds.add(subjectId);\n let currParentId = subjectInfo.parentSubject;\n while (currParentId) {\n parentSubjectIds.add(currParentId);\n currParentId = subjectInfos.get(currParentId)?.parentSubject;\n }\n });\n return [...parentSubjectIds];\n })();\n return this.#parentSubjectIds;\n }\n\n /**\n * Returns child subjects of the specified parent subjects as they're displayed in the hierarchy - taking into\n * account `hideInHierarchy` flag.\n */\n public async getChildSubjectIds(parentSubjectIds: Id64String[]): Promise<Id64String[]> {\n const childSubjectIds = new Array<Id64String>();\n const subjectInfos = await this.getSubjectInfos();\n parentSubjectIds.forEach((subjectId) => {\n forEachChildSubject(subjectInfos, subjectId, (childSubjectId, childSubjectInfo) => {\n if (!childSubjectInfo.hideInHierarchy) {\n childSubjectIds.push(childSubjectId);\n return \"break\";\n }\n return \"continue\";\n });\n });\n return childSubjectIds;\n }\n\n /** Returns ECInstanceIDs of Models under specific parent Subjects as they are displayed in the hierarchy. */\n public async getChildSubjectModelIds(parentSubjectIds: Id64String[]): Promise<Id64String[]> {\n const subjectInfos = await this.getSubjectInfos();\n\n const hiddenSubjectIds = new Array<Id64String>();\n parentSubjectIds.forEach((subjectId) => {\n forEachChildSubject(subjectInfos, subjectId, (childSubjectId, childSubjectInfo) => {\n if (childSubjectInfo.hideInHierarchy) {\n hiddenSubjectIds.push(childSubjectId);\n return \"continue\";\n }\n return \"break\";\n });\n });\n\n const modelIds = new Array<Id64String>();\n [...parentSubjectIds, ...hiddenSubjectIds].forEach((subjectId) => {\n const subjectInfo = subjectInfos.get(subjectId);\n subjectInfo && modelIds.push(...subjectInfo.childModels);\n });\n return modelIds;\n }\n\n private async *queryModelCategories() {\n const query = `\n SELECT Model.Id modelId, Category.Id categoryId\n FROM BisCore.GeometricElement3d\n WHERE Parent.Id IS NULL\n GROUP BY Model.Id, Category.Id\n UNION ALL\n SELECT Model.Id modelId, Category.Id categoryId\n FROM BisCore.GeometricElement2d\n WHERE Parent.Id IS NULL\n GROUP BY Model.Id, Category.Id\n `;\n for await (const row of this.#queryExecutor.createQueryReader(\n { ecsql: query },\n { rowFormat: \"ECSqlPropertyNames\", limit: \"unbounded\", restartToken: `${this.#componentName}/${this.#componentId}/model-categories` },\n )) {\n yield { modelId: row.modelId, categoryId: row.categoryId };\n }\n }\n\n private async getModelInfos() {\n this.#modelInfos ??= (async () => {\n const modelInfos = new Map<Id64String, { categories: Id64Set; elementCount: number }>();\n for await (const { modelId, categoryId } of this.queryModelCategories()) {\n const entry = modelInfos.get(modelId);\n if (entry) {\n entry.categories.add(categoryId);\n } else {\n modelInfos.set(modelId, { categories: new Set([categoryId]), elementCount: 0 });\n }\n }\n return modelInfos;\n })();\n return this.#modelInfos;\n }\n\n public async getModelCategories(modelIds: Id64String[]): Promise<Id64Array> {\n const modelInfos = await this.getModelInfos();\n return modelIds.map((modelId) => modelInfos.get(modelId)?.categories).flatMap((categories) => (categories ? [...categories] : []));\n }\n}\n\nfunction forEachChildSubject(\n subjectInfos: Map<Id64String, SubjectInfo>,\n parentSubject: Id64String | SubjectInfo,\n cb: (childSubjectId: Id64String, childSubjectInfo: SubjectInfo) => \"break\" | \"continue\",\n) {\n const parentSubjectInfo = typeof parentSubject === \"string\" ? subjectInfos.get(parentSubject) : parentSubject;\n parentSubjectInfo &&\n parentSubjectInfo.childSubjects.forEach((childSubjectId) => {\n const childSubjectInfo = subjectInfos.get(childSubjectId)!;\n if (cb(childSubjectId, childSubjectInfo) === \"break\") {\n return;\n }\n forEachChildSubject(subjectInfos, childSubjectInfo, cb);\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"IModelContentTreeIdsCache.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.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 { assert, Guid } from \"@itwin/core-bentley\";\nimport { pushToMap } from \"../../common/Utils.js\";\n\nimport type { GuidString, Id64Array, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport type { LimitingECSqlQueryExecutor } from \"@itwin/presentation-hierarchies\";\n\ninterface SubjectInfo {\n parentSubject: Id64String | undefined;\n hideInHierarchy: boolean;\n childSubjects: Id64Set;\n childModels: Id64Set;\n}\n\ninterface ModelInfo {\n categories: Id64Set;\n}\n\n/** @internal */\nexport class IModelContentTreeIdsCache {\n #subjectInfos: Promise<Map<Id64String, SubjectInfo>> | undefined;\n #parentSubjectIds: Promise<Id64Array> | undefined; // the list should contain a subject id if its node should be shown as having children\n #modelInfos: Promise<Map<Id64String, ModelInfo>> | undefined;\n #queryExecutor: LimitingECSqlQueryExecutor;\n #componentId: GuidString;\n #componentName: string;\n\n constructor(queryExecutor: LimitingECSqlQueryExecutor, componentId?: GuidString) {\n this.#queryExecutor = queryExecutor;\n this.#componentId = componentId ?? Guid.createValue();\n this.#componentName = \"IModelContentTreeIdsCache\";\n }\n\n private async *querySubjects(): AsyncIterableIterator<{ id: Id64String; parentId?: Id64String; targetPartitionId?: Id64String; hideInHierarchy: boolean }> {\n const subjectsQuery = `\n SELECT\n s.ECInstanceId id,\n s.Parent.Id parentId,\n (\n SELECT m.ECInstanceId\n FROM bis.Model m\n WHERE\n m.ECInstanceId = HexToId(json_extract(s.JsonProperties, '$.Subject.Model.TargetPartition'))\n AND NOT m.IsPrivate\n ) targetPartitionId,\n CASE\n WHEN (\n json_extract(s.JsonProperties, '$.Subject.Job.Bridge') IS NOT NULL\n OR json_extract(s.JsonProperties, '$.Subject.Model.Type') = 'Hierarchy'\n ) THEN 1\n ELSE 0\n END hideInHierarchy\n FROM bis.Subject s\n `;\n for await (const row of this.#queryExecutor.createQueryReader(\n { ecsql: subjectsQuery },\n { rowFormat: \"ECSqlPropertyNames\", limit: \"unbounded\", restartToken: `${this.#componentName}/${this.#componentId}/subjects` },\n )) {\n yield { id: row.id, parentId: row.parentId, targetPartitionId: row.targetPartitionId, hideInHierarchy: !!row.hideInHierarchy };\n }\n }\n\n private async *queryModels(): AsyncIterableIterator<{ id: Id64String; parentId: Id64String }> {\n const modelsQuery = `\n SELECT p.ECInstanceId id, p.Parent.Id parentId\n FROM bis.InformationPartitionElement p\n INNER JOIN bis.Model m ON m.ModeledElement.Id = p.ECInstanceId\n WHERE NOT m.IsPrivate\n `;\n for await (const row of this.#queryExecutor.createQueryReader(\n { ecsql: modelsQuery },\n { rowFormat: \"ECSqlPropertyNames\", limit: \"unbounded\", restartToken: `${this.#componentName}/${this.#componentId}/models` },\n )) {\n yield { id: row.id, parentId: row.parentId };\n }\n }\n\n private async getSubjectInfos() {\n this.#subjectInfos ??= (async () => {\n const [subjectInfos, targetPartitionSubjects] = await Promise.all([\n (async () => {\n const result = new Map<Id64String, SubjectInfo>();\n for await (const subject of this.querySubjects()) {\n const subjectInfo: SubjectInfo = {\n parentSubject: subject.parentId,\n hideInHierarchy: subject.hideInHierarchy,\n childSubjects: new Set(),\n childModels: new Set(),\n };\n if (subject.targetPartitionId) {\n subjectInfo.childModels.add(subject.targetPartitionId);\n }\n result.set(subject.id, subjectInfo);\n }\n return result;\n })(),\n (async () => {\n const result = new Map<Id64String, Set<Id64String>>();\n for await (const model of this.queryModels()) {\n pushToMap(result, model.id, model.parentId);\n }\n return result;\n })(),\n ]);\n\n for (const [subjectId, { parentSubject: parentSubjectId }] of subjectInfos.entries()) {\n if (parentSubjectId) {\n const parentSubjectInfo = subjectInfos.get(parentSubjectId);\n assert(!!parentSubjectInfo);\n parentSubjectInfo.childSubjects.add(subjectId);\n }\n }\n\n for (const [partitionId, subjectIds] of targetPartitionSubjects) {\n subjectIds.forEach((subjectId) => {\n const subjectInfo = subjectInfos.get(subjectId);\n assert(!!subjectInfo);\n subjectInfo.childModels.add(partitionId);\n });\n }\n\n return subjectInfos;\n })();\n return this.#subjectInfos;\n }\n\n /** Returns ECInstanceIDs of Subjects that either have direct Model or at least one child Subject with a Model. */\n public async getParentSubjectIds(): Promise<Id64String[]> {\n this.#parentSubjectIds ??= (async () => {\n const subjectInfos = await this.getSubjectInfos();\n const parentSubjectIds = new Set<Id64String>();\n subjectInfos.forEach((subjectInfo, subjectId) => {\n if (subjectInfo.childModels.size === 0 && subjectInfo.childSubjects.size === 0) {\n return;\n }\n parentSubjectIds.add(subjectId);\n let currParentId = subjectInfo.parentSubject;\n while (currParentId) {\n parentSubjectIds.add(currParentId);\n currParentId = subjectInfos.get(currParentId)?.parentSubject;\n }\n });\n return [...parentSubjectIds];\n })();\n return this.#parentSubjectIds;\n }\n\n /**\n * Returns child subjects of the specified parent subjects as they're displayed in the hierarchy - taking into\n * account `hideInHierarchy` flag.\n */\n public async getChildSubjectIds(parentSubjectIds: Id64String[]): Promise<Id64String[]> {\n const childSubjectIds = new Array<Id64String>();\n const subjectInfos = await this.getSubjectInfos();\n parentSubjectIds.forEach((subjectId) => {\n forEachChildSubject(subjectInfos, subjectId, (childSubjectId, childSubjectInfo) => {\n if (!childSubjectInfo.hideInHierarchy) {\n childSubjectIds.push(childSubjectId);\n return \"break\";\n }\n return \"continue\";\n });\n });\n return childSubjectIds;\n }\n\n /** Returns ECInstanceIDs of Models under specific parent Subjects as they are displayed in the hierarchy. */\n public async getChildSubjectModelIds(parentSubjectIds: Id64String[]): Promise<Id64String[]> {\n const subjectInfos = await this.getSubjectInfos();\n\n const hiddenSubjectIds = new Array<Id64String>();\n parentSubjectIds.forEach((subjectId) => {\n forEachChildSubject(subjectInfos, subjectId, (childSubjectId, childSubjectInfo) => {\n if (childSubjectInfo.hideInHierarchy) {\n hiddenSubjectIds.push(childSubjectId);\n return \"continue\";\n }\n return \"break\";\n });\n });\n\n const modelIds = new Array<Id64String>();\n [...parentSubjectIds, ...hiddenSubjectIds].forEach((subjectId) => {\n const subjectInfo = subjectInfos.get(subjectId);\n subjectInfo && modelIds.push(...subjectInfo.childModels);\n });\n return modelIds;\n }\n\n private async *queryModelCategories() {\n const query = `\n SELECT Model.Id modelId, Category.Id categoryId\n FROM BisCore.GeometricElement3d\n WHERE Parent.Id IS NULL\n GROUP BY Model.Id, Category.Id\n UNION ALL\n SELECT Model.Id modelId, Category.Id categoryId\n FROM BisCore.GeometricElement2d\n WHERE Parent.Id IS NULL\n GROUP BY Model.Id, Category.Id\n `;\n for await (const row of this.#queryExecutor.createQueryReader(\n { ecsql: query },\n { rowFormat: \"ECSqlPropertyNames\", limit: \"unbounded\", restartToken: `${this.#componentName}/${this.#componentId}/model-categories` },\n )) {\n yield { modelId: row.modelId, categoryId: row.categoryId };\n }\n }\n\n private async getModelInfos() {\n this.#modelInfos ??= (async () => {\n const modelInfos = new Map<Id64String, { categories: Id64Set; elementCount: number }>();\n for await (const { modelId, categoryId } of this.queryModelCategories()) {\n const entry = modelInfos.get(modelId);\n if (entry) {\n entry.categories.add(categoryId);\n } else {\n modelInfos.set(modelId, { categories: new Set([categoryId]), elementCount: 0 });\n }\n }\n return modelInfos;\n })();\n return this.#modelInfos;\n }\n\n public async getModelCategories(modelIds: Id64String[]): Promise<Id64Array> {\n const modelInfos = await this.getModelInfos();\n return modelIds.map((modelId) => modelInfos.get(modelId)?.categories).flatMap((categories) => (categories ? [...categories] : []));\n }\n}\n\nfunction forEachChildSubject(\n subjectInfos: Map<Id64String, SubjectInfo>,\n parentSubject: Id64String | SubjectInfo,\n cb: (childSubjectId: Id64String, childSubjectInfo: SubjectInfo) => \"break\" | \"continue\",\n) {\n const parentSubjectInfo = typeof parentSubject === \"string\" ? subjectInfos.get(parentSubject) : parentSubject;\n parentSubjectInfo &&\n parentSubjectInfo.childSubjects.forEach((childSubjectId) => {\n const childSubjectInfo = subjectInfos.get(childSubjectId);\n assert(childSubjectInfo !== undefined);\n if (cb(childSubjectId, childSubjectInfo) === \"break\") {\n return;\n }\n forEachChildSubject(subjectInfos, childSubjectInfo, cb);\n });\n}\n"]}
|
|
@@ -7,5 +7,5 @@ export type ModelsTreeProps = Pick<VisibilityTreeProps, "imodel" | "getSchemaCon
|
|
|
7
7
|
};
|
|
8
8
|
};
|
|
9
9
|
/** @beta */
|
|
10
|
-
export declare function ModelsTree({ imodel, getSchemaContext, selectionStorage, activeView, filter, density, hierarchyLevelConfig, hierarchyConfig, selectionMode, selectionPredicate, visibilityHandlerOverrides, getFilteredPaths, onModelsFiltered, getSubTreePaths, }: ModelsTreeProps): JSX.Element;
|
|
10
|
+
export declare function ModelsTree({ imodel, getSchemaContext, selectionStorage, activeView, filter, density, hierarchyLevelConfig, hierarchyConfig, selectionMode, selectionPredicate, visibilityHandlerOverrides, getFilteredPaths, onModelsFiltered, getSubTreePaths, }: ModelsTreeProps): import("react/jsx-runtime.js").JSX.Element;
|
|
11
11
|
//# sourceMappingURL=ModelsTree.d.ts.map
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ReactElement } from "react";
|
|
1
2
|
import type { Id64String } from "@itwin/core-bentley";
|
|
2
3
|
import type { IModelConnection, Viewport } from "@itwin/core-frontend";
|
|
3
4
|
import type { TreeHeaderButtonProps } from "../../tree-header/TreeHeader.js";
|
|
@@ -45,20 +46,20 @@ export declare function useModelsTreeButtonProps({ imodel, viewport }: {
|
|
|
45
46
|
onModelsFiltered: (models: Id64String[] | undefined) => void;
|
|
46
47
|
};
|
|
47
48
|
/** @public */
|
|
48
|
-
export type ModelsTreeHeaderButtonType = (props: ModelsTreeHeaderButtonProps) =>
|
|
49
|
+
export type ModelsTreeHeaderButtonType = (props: ModelsTreeHeaderButtonProps) => ReactElement | null;
|
|
49
50
|
/** @public */
|
|
50
|
-
export declare function ShowAllButton(props: ModelsTreeHeaderButtonProps): JSX.Element;
|
|
51
|
+
export declare function ShowAllButton(props: ModelsTreeHeaderButtonProps): import("react/jsx-runtime.js").JSX.Element;
|
|
51
52
|
/** @public */
|
|
52
|
-
export declare function HideAllButton(props: ModelsTreeHeaderButtonProps): JSX.Element;
|
|
53
|
+
export declare function HideAllButton(props: ModelsTreeHeaderButtonProps): import("react/jsx-runtime.js").JSX.Element;
|
|
53
54
|
/** @public */
|
|
54
|
-
export declare function InvertButton(props: ModelsTreeHeaderButtonProps): JSX.Element;
|
|
55
|
+
export declare function InvertButton(props: ModelsTreeHeaderButtonProps): import("react/jsx-runtime.js").JSX.Element;
|
|
55
56
|
/** @public */
|
|
56
|
-
export declare function View2DButton(props: ModelsTreeHeaderButtonProps): JSX.Element;
|
|
57
|
+
export declare function View2DButton(props: ModelsTreeHeaderButtonProps): import("react/jsx-runtime.js").JSX.Element;
|
|
57
58
|
/** @public */
|
|
58
|
-
export declare function View3DButton(props: ModelsTreeHeaderButtonProps): JSX.Element;
|
|
59
|
+
export declare function View3DButton(props: ModelsTreeHeaderButtonProps): import("react/jsx-runtime.js").JSX.Element;
|
|
59
60
|
/** @public */
|
|
60
61
|
export declare function ToggleInstancesFocusButton({ density, onFeatureUsed }: {
|
|
61
62
|
density?: "default" | "enlarged";
|
|
62
63
|
onFeatureUsed?: (feature: string) => void;
|
|
63
|
-
}): JSX.Element;
|
|
64
|
+
}): import("react/jsx-runtime.js").JSX.Element;
|
|
64
65
|
//# sourceMappingURL=ModelsTreeButtons.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelsTreeButtons.js","sourceRoot":"","sources":["../../../../../../src/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.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 { useEffect, useMemo, useState } from \"react\";\nimport { SvgCursorClick, SvgVisibilityHalf, SvgVisibilityHide, SvgVisibilityShow } from \"@itwin/itwinui-icons-react\";\nimport { Button, IconButton, Tooltip } from \"@itwin/itwinui-react\";\nimport { TreeWidget } from \"../../../TreeWidget.js\";\nimport { useFocusedInstancesContext } from \"../common/FocusedInstancesContext.js\";\nimport { useGuid } from \"../common/useGuid.js\";\nimport { areAllModelsVisible, hideAllModels, invertAllModels, showAllModels, toggleModels } from \"./internal/ModelsTreeVisibilityHandler.js\";\n\nimport type { Id64String } from \"@itwin/core-bentley\";\nimport type { GeometricModel3dProps, ModelQueryParams } from \"@itwin/core-common\";\nimport type { IModelConnection, Viewport } from \"@itwin/core-frontend\";\nimport type { TreeHeaderButtonProps } from \"../../tree-header/TreeHeader.js\";\n\n/**\n * Information about a single Model.\n * @public\n */\nexport interface ModelInfo {\n id: string;\n isPlanProjection?: boolean;\n}\n\n/**\n * Props that get passed to `ModelsTreeComponent` header button renderer.\n * @see ModelTreeComponentProps.headerButtons\n * @public\n */\nexport interface ModelsTreeHeaderButtonProps extends TreeHeaderButtonProps {\n /** A list of models available in the iModel. */\n models: ModelInfo[];\n}\n\n/**\n * Custom hook that creates props required to render `ModelsTreeComponent` header button.\n *\n * Example:\n * ```tsx\n * const { buttonProps, onModelsFiltered } = useModelsTreeButtonProps({ imodel, viewport });\n * <TreeWithHeader\n * buttons={[\n * <ModelsTreeComponent.ShowAllButton {...buttonProps} />,\n * <ModelsTreeComponent.HideAllButton {...buttonProps} />,\n * ]}\n * >\n * <ModelsTree {...treeProps} onModelsFiltered={onModelsFiltered} />\n * </TreeWithHeader>\n * ```\n *\n *\n * @public\n */\nexport function useModelsTreeButtonProps({ imodel, viewport }: { imodel: IModelConnection; viewport: Viewport }): {\n buttonProps: Pick<ModelsTreeHeaderButtonProps, \"models\" | \"viewport\">;\n onModelsFiltered: (models: Id64String[] | undefined) => void;\n} {\n const [filteredModels, setFilteredModels] = useState<Id64String[] | undefined>();\n const models = useAvailableModels(imodel);\n const availableModels = useMemo(() => (!filteredModels ? models : models.filter((model) => filteredModels.includes(model.id))), [models, filteredModels]);\n return {\n buttonProps: {\n models: availableModels,\n viewport,\n },\n onModelsFiltered: setFilteredModels,\n };\n}\n\nfunction useAvailableModels(imodel: IModelConnection): ModelInfo[] {\n const [availableModels, setAvailableModels] = useState<ModelInfo[]>([]);\n\n useEffect(() => {\n queryModelsForHeaderActions(imodel)\n .then((modelInfos: ModelInfo[]) => {\n setAvailableModels(modelInfos);\n })\n .catch(() => {\n setAvailableModels([]);\n });\n }, [imodel]);\n\n return availableModels;\n}\n\nasync function queryModelsForHeaderActions(iModel: IModelConnection) {\n const queryParams: ModelQueryParams = {\n from: \"BisCore.GeometricModel3d\",\n where: `\n EXISTS (\n SELECT 1\n FROM BisCore.Element e\n WHERE e.ECClassId IS (BisCore.GeometricElement3d, BisCore.InformationPartitionElement)\n AND e.ECInstanceId = GeometricModel3d.ModeledElement.Id\n )\n `,\n wantPrivate: false,\n };\n\n const modelProps = await iModel.models.queryProps(queryParams);\n return modelProps.map(({ id, isPlanProjection }: GeometricModel3dProps) => ({ id, isPlanProjection })).filter(({ id }) => id) as ModelInfo[];\n}\n\n/** @public */\nexport type ModelsTreeHeaderButtonType = (props: ModelsTreeHeaderButtonProps) => JSX.Element | null;\n\n/** @public */\nexport function ShowAllButton(props: ModelsTreeHeaderButtonProps) {\n const componentId = useGuid();\n return (\n <IconButton\n size={props.density === \"enlarged\" ? \"large\" : \"small\"}\n styleType=\"borderless\"\n label={TreeWidget.translate(\"modelsTree.buttons.showAll.tooltip\")}\n onClick={() => {\n // cspell:disable-next-line\n props.onFeatureUsed?.(\"models-tree-showall\");\n void showAllModels(\n props.models.map((model) => model.id),\n props.viewport,\n componentId,\n );\n }}\n >\n <SvgVisibilityShow />\n </IconButton>\n );\n}\n\n/** @public */\nexport function HideAllButton(props: ModelsTreeHeaderButtonProps) {\n return (\n <IconButton\n size={props.density === \"enlarged\" ? \"large\" : \"small\"}\n styleType=\"borderless\"\n label={TreeWidget.translate(\"modelsTree.buttons.hideAll.tooltip\")}\n onClick={() => {\n // cspell:disable-next-line\n props.onFeatureUsed?.(\"models-tree-hideall\");\n void hideAllModels(\n props.models.map((model) => model.id),\n props.viewport,\n );\n }}\n >\n <SvgVisibilityHide />\n </IconButton>\n );\n}\n\n/** @public */\nexport function InvertButton(props: ModelsTreeHeaderButtonProps) {\n return (\n <IconButton\n size={props.density === \"enlarged\" ? \"large\" : \"small\"}\n styleType=\"borderless\"\n label={TreeWidget.translate(\"modelsTree.buttons.invert.tooltip\")}\n onClick={() => {\n props.onFeatureUsed?.(\"models-tree-invert\");\n void invertAllModels(\n props.models.map((model) => model.id),\n props.viewport,\n );\n }}\n >\n <SvgVisibilityHalf />\n </IconButton>\n );\n}\n\n/** @public */\nexport function View2DButton(props: ModelsTreeHeaderButtonProps) {\n const models2d = useMemo(() => {\n return props.models.filter((model) => model.isPlanProjection).map((model) => model.id);\n }, [props.models]);\n\n const [is2dToggleActive, setIs2dToggleActive] = useState(false);\n\n useEffect(() => {\n setIs2dToggleActive(areAllModelsVisible(models2d, props.viewport));\n return props.viewport.onViewedModelsChanged.addListener((vp: Viewport) => setIs2dToggleActive(areAllModelsVisible(models2d, vp)));\n }, [models2d, props.viewport]);\n\n return (\n <Tooltip content={TreeWidget.translate(\"modelsTree.buttons.toggle2d.tooltip\")}>\n <Button\n size={props.density === \"enlarged\" ? \"large\" : \"small\"}\n styleType=\"borderless\"\n onClick={() => {\n props.onFeatureUsed?.(\"models-tree-view2d\");\n void toggleModels(models2d, is2dToggleActive, props.viewport);\n }}\n disabled={models2d.length === 0}\n endIcon={is2dToggleActive ? <SvgVisibilityShow /> : <SvgVisibilityHide />}\n >\n {TreeWidget.translate(\"modelsTree.buttons.toggle2d.label\")}\n </Button>\n </Tooltip>\n );\n}\n\n/** @public */\nexport function View3DButton(props: ModelsTreeHeaderButtonProps) {\n const models3d = useMemo(() => {\n return props.models.filter((model) => !model.isPlanProjection).map((model) => model.id);\n }, [props.models]);\n\n const [is3dToggleActive, setIs3dToggleActive] = useState(false);\n\n useEffect(() => {\n setIs3dToggleActive(areAllModelsVisible(models3d, props.viewport));\n return props.viewport.onViewedModelsChanged.addListener((vp: Viewport) => setIs3dToggleActive(areAllModelsVisible(models3d, vp)));\n }, [models3d, props.viewport]);\n\n return (\n <Tooltip content={TreeWidget.translate(\"modelsTree.buttons.toggle3d.tooltip\")}>\n <Button\n size={props.density === \"enlarged\" ? \"large\" : \"small\"}\n styleType=\"borderless\"\n onClick={() => {\n props.onFeatureUsed?.(\"models-tree-view3d\");\n void toggleModels(models3d, is3dToggleActive, props.viewport);\n }}\n disabled={models3d.length === 0}\n endIcon={is3dToggleActive ? <SvgVisibilityShow /> : <SvgVisibilityHide />}\n >\n {TreeWidget.translate(\"modelsTree.buttons.toggle3d.label\")}\n </Button>\n </Tooltip>\n );\n}\n\n/** @public */\nexport function ToggleInstancesFocusButton({ density, onFeatureUsed }: { density?: \"default\" | \"enlarged\"; onFeatureUsed?: (feature: string) => void }) {\n const { enabled, toggle } = useFocusedInstancesContext();\n const label = enabled\n ? TreeWidget.translate(\"modelsTree.buttons.toggleFocusMode.disable.tooltip\")\n : TreeWidget.translate(\"modelsTree.buttons.toggleFocusMode.enable.tooltip\");\n return (\n <IconButton\n styleType=\"borderless\"\n size={density === \"enlarged\" ? \"large\" : \"small\"}\n label={label}\n onClick={() => {\n // cspell:disable-next-line\n onFeatureUsed?.(\"models-tree-instancesfocus\");\n toggle();\n }}\n isActive={enabled}\n >\n <SvgCursorClick />\n </IconButton>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ModelsTreeButtons.js","sourceRoot":"","sources":["../../../../../../src/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.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 { useEffect, useMemo, useState } from \"react\";\nimport { SvgCursorClick, SvgVisibilityHalf, SvgVisibilityHide, SvgVisibilityShow } from \"@itwin/itwinui-icons-react\";\nimport { Button, IconButton, Tooltip } from \"@itwin/itwinui-react\";\nimport { TreeWidget } from \"../../../TreeWidget.js\";\nimport { useFocusedInstancesContext } from \"../common/FocusedInstancesContext.js\";\nimport { useGuid } from \"../common/useGuid.js\";\nimport { areAllModelsVisible, hideAllModels, invertAllModels, showAllModels, toggleModels } from \"./internal/ModelsTreeVisibilityHandler.js\";\n\nimport type { ReactElement } from \"react\";\nimport type { Id64String } from \"@itwin/core-bentley\";\nimport type { GeometricModel3dProps, ModelQueryParams } from \"@itwin/core-common\";\nimport type { IModelConnection, Viewport } from \"@itwin/core-frontend\";\nimport type { TreeHeaderButtonProps } from \"../../tree-header/TreeHeader.js\";\n\n/**\n * Information about a single Model.\n * @public\n */\nexport interface ModelInfo {\n id: string;\n isPlanProjection?: boolean;\n}\n\n/**\n * Props that get passed to `ModelsTreeComponent` header button renderer.\n * @see ModelTreeComponentProps.headerButtons\n * @public\n */\nexport interface ModelsTreeHeaderButtonProps extends TreeHeaderButtonProps {\n /** A list of models available in the iModel. */\n models: ModelInfo[];\n}\n\n/**\n * Custom hook that creates props required to render `ModelsTreeComponent` header button.\n *\n * Example:\n * ```tsx\n * const { buttonProps, onModelsFiltered } = useModelsTreeButtonProps({ imodel, viewport });\n * <TreeWithHeader\n * buttons={[\n * <ModelsTreeComponent.ShowAllButton {...buttonProps} />,\n * <ModelsTreeComponent.HideAllButton {...buttonProps} />,\n * ]}\n * >\n * <ModelsTree {...treeProps} onModelsFiltered={onModelsFiltered} />\n * </TreeWithHeader>\n * ```\n *\n *\n * @public\n */\nexport function useModelsTreeButtonProps({ imodel, viewport }: { imodel: IModelConnection; viewport: Viewport }): {\n buttonProps: Pick<ModelsTreeHeaderButtonProps, \"models\" | \"viewport\">;\n onModelsFiltered: (models: Id64String[] | undefined) => void;\n} {\n const [filteredModels, setFilteredModels] = useState<Id64String[] | undefined>();\n const models = useAvailableModels(imodel);\n const availableModels = useMemo(() => (!filteredModels ? models : models.filter((model) => filteredModels.includes(model.id))), [models, filteredModels]);\n return {\n buttonProps: {\n models: availableModels,\n viewport,\n },\n onModelsFiltered: setFilteredModels,\n };\n}\n\nfunction useAvailableModels(imodel: IModelConnection): ModelInfo[] {\n const [availableModels, setAvailableModels] = useState<ModelInfo[]>([]);\n\n useEffect(() => {\n queryModelsForHeaderActions(imodel)\n .then((modelInfos: ModelInfo[]) => {\n setAvailableModels(modelInfos);\n })\n .catch(() => {\n setAvailableModels([]);\n });\n }, [imodel]);\n\n return availableModels;\n}\n\nasync function queryModelsForHeaderActions(iModel: IModelConnection) {\n const queryParams: ModelQueryParams = {\n from: \"BisCore.GeometricModel3d\",\n where: `\n EXISTS (\n SELECT 1\n FROM BisCore.Element e\n WHERE e.ECClassId IS (BisCore.GeometricElement3d, BisCore.InformationPartitionElement)\n AND e.ECInstanceId = GeometricModel3d.ModeledElement.Id\n )\n `,\n wantPrivate: false,\n };\n\n const modelProps = await iModel.models.queryProps(queryParams);\n return modelProps.map(({ id, isPlanProjection }: GeometricModel3dProps) => ({ id, isPlanProjection })).filter(({ id }) => id) as ModelInfo[];\n}\n\n/** @public */\nexport type ModelsTreeHeaderButtonType = (props: ModelsTreeHeaderButtonProps) => ReactElement | null;\n\n/** @public */\nexport function ShowAllButton(props: ModelsTreeHeaderButtonProps) {\n const componentId = useGuid();\n return (\n <IconButton\n size={props.density === \"enlarged\" ? \"large\" : \"small\"}\n styleType=\"borderless\"\n label={TreeWidget.translate(\"modelsTree.buttons.showAll.tooltip\")}\n onClick={() => {\n // cspell:disable-next-line\n props.onFeatureUsed?.(\"models-tree-showall\");\n void showAllModels(\n props.models.map((model) => model.id),\n props.viewport,\n componentId,\n );\n }}\n >\n <SvgVisibilityShow />\n </IconButton>\n );\n}\n\n/** @public */\nexport function HideAllButton(props: ModelsTreeHeaderButtonProps) {\n return (\n <IconButton\n size={props.density === \"enlarged\" ? \"large\" : \"small\"}\n styleType=\"borderless\"\n label={TreeWidget.translate(\"modelsTree.buttons.hideAll.tooltip\")}\n onClick={() => {\n // cspell:disable-next-line\n props.onFeatureUsed?.(\"models-tree-hideall\");\n void hideAllModels(\n props.models.map((model) => model.id),\n props.viewport,\n );\n }}\n >\n <SvgVisibilityHide />\n </IconButton>\n );\n}\n\n/** @public */\nexport function InvertButton(props: ModelsTreeHeaderButtonProps) {\n return (\n <IconButton\n size={props.density === \"enlarged\" ? \"large\" : \"small\"}\n styleType=\"borderless\"\n label={TreeWidget.translate(\"modelsTree.buttons.invert.tooltip\")}\n onClick={() => {\n props.onFeatureUsed?.(\"models-tree-invert\");\n void invertAllModels(\n props.models.map((model) => model.id),\n props.viewport,\n );\n }}\n >\n <SvgVisibilityHalf />\n </IconButton>\n );\n}\n\n/** @public */\nexport function View2DButton(props: ModelsTreeHeaderButtonProps) {\n const models2d = useMemo(() => {\n return props.models.filter((model) => model.isPlanProjection).map((model) => model.id);\n }, [props.models]);\n\n const [is2dToggleActive, setIs2dToggleActive] = useState(false);\n\n useEffect(() => {\n setIs2dToggleActive(areAllModelsVisible(models2d, props.viewport));\n return props.viewport.onViewedModelsChanged.addListener((vp: Viewport) => setIs2dToggleActive(areAllModelsVisible(models2d, vp)));\n }, [models2d, props.viewport]);\n\n return (\n <Tooltip content={TreeWidget.translate(\"modelsTree.buttons.toggle2d.tooltip\")}>\n <Button\n size={props.density === \"enlarged\" ? \"large\" : \"small\"}\n styleType=\"borderless\"\n onClick={() => {\n props.onFeatureUsed?.(\"models-tree-view2d\");\n void toggleModels(models2d, is2dToggleActive, props.viewport);\n }}\n disabled={models2d.length === 0}\n endIcon={is2dToggleActive ? <SvgVisibilityShow /> : <SvgVisibilityHide />}\n >\n {TreeWidget.translate(\"modelsTree.buttons.toggle2d.label\")}\n </Button>\n </Tooltip>\n );\n}\n\n/** @public */\nexport function View3DButton(props: ModelsTreeHeaderButtonProps) {\n const models3d = useMemo(() => {\n return props.models.filter((model) => !model.isPlanProjection).map((model) => model.id);\n }, [props.models]);\n\n const [is3dToggleActive, setIs3dToggleActive] = useState(false);\n\n useEffect(() => {\n setIs3dToggleActive(areAllModelsVisible(models3d, props.viewport));\n return props.viewport.onViewedModelsChanged.addListener((vp: Viewport) => setIs3dToggleActive(areAllModelsVisible(models3d, vp)));\n }, [models3d, props.viewport]);\n\n return (\n <Tooltip content={TreeWidget.translate(\"modelsTree.buttons.toggle3d.tooltip\")}>\n <Button\n size={props.density === \"enlarged\" ? \"large\" : \"small\"}\n styleType=\"borderless\"\n onClick={() => {\n props.onFeatureUsed?.(\"models-tree-view3d\");\n void toggleModels(models3d, is3dToggleActive, props.viewport);\n }}\n disabled={models3d.length === 0}\n endIcon={is3dToggleActive ? <SvgVisibilityShow /> : <SvgVisibilityHide />}\n >\n {TreeWidget.translate(\"modelsTree.buttons.toggle3d.label\")}\n </Button>\n </Tooltip>\n );\n}\n\n/** @public */\nexport function ToggleInstancesFocusButton({ density, onFeatureUsed }: { density?: \"default\" | \"enlarged\"; onFeatureUsed?: (feature: string) => void }) {\n const { enabled, toggle } = useFocusedInstancesContext();\n const label = enabled\n ? TreeWidget.translate(\"modelsTree.buttons.toggleFocusMode.disable.tooltip\")\n : TreeWidget.translate(\"modelsTree.buttons.toggleFocusMode.enable.tooltip\");\n return (\n <IconButton\n styleType=\"borderless\"\n size={density === \"enlarged\" ? \"large\" : \"small\"}\n label={label}\n onClick={() => {\n // cspell:disable-next-line\n onFeatureUsed?.(\"models-tree-instancesfocus\");\n toggle();\n }}\n isActive={enabled}\n >\n <SvgCursorClick />\n </IconButton>\n );\n}\n"]}
|